Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(9 edits) (+5)

Some alternative input options! Both are resizable, and you can configure a sound to play when they are interacted with. :3


All keys are configurable, but there's currently no way to type text anywhere but the very end of the field.

On-screen Keyboard
%%WGT0{"w":[{"name":"Screen Keyboard","type":"contraption","size":[272,64],"pos":[143,47],"script":"# define the text field widget that events should be sent to:\ntf:outz\n\non click x do\n if ((me.alt)&(x=\"B\"))|((!me.alt)&(x=\"<\")) \n  tf.value:rtext.span[tf.value 0,rtext.len[tf.value]-1]\n elseif ((me.alt)&(x=\"S\"))|((!me.alt)&(x=\"?\")) me.alt:!me.alt\n elseif (!me.alt)&(x=\"^\") me.caps:!me.caps\n else tf.value:rtext.cat[tf.value x] end\nend","def":"Screen Keyboard","widgets":{"c":{"size":[272,64],"image":"%%IMG3ARAAQAKMj6nL7Q+jnLTai7NmoPsPBOBIkmKJmun6nezqvmgsq/V847m9g/T46wV3w1zxFjumlDLmK9kLRX3TFqzqcbK0V6w0G+UuvV+sWGfuhg7EjujddhuE7jVdPjfW90j+uQzYh3eHcKfj8ncCl+gXl8cIRhgpiBjHp1cGWYl5OFmjKKVZiPln5Ul5+tTIGfi5inrZ1LWJCkdaBToFJRmr+pUn2Cub6Zi6pTYabMuZ7NoaLGfZPGwHKey7VqrIZlnyY41LVgokTs6qW+6VG6Zm3I6unp422A0/Pz9+7X7OHu9/H+5fQID2vMkbiLCgwn4EGSZ0yOOhIYn1IFqcuBDjRVMNNXqs+JFfSGgZQbbYgDKlypUsW7p8ieHdRpEmadokORPnSGdouGXDEyQfx4fg7Nx0JnRXsYLjlKxbBtVcx4rgmqZLehWh1TGBKtGaNA1b2GNApQFT5hNpWp7PfK2DtrXTSTZjny7t95VaW7J53e5Ds3dWYK76ZFLpCuaIXWZnkf41+FjuYBt9yRbmupZtXMheE2OOxk9TZKmTOY8+XLnd1reac2Z65LnnMrWNqY1VzfD258sRV58eWhsb5KlH9ZYMXROua+Ouhf4mTLG42OCWA1IXflzn0OxsuTPf+T159+XYSXsvDx69+PDSq593b548/PTz16tvb9h+/eeA3+fHD51/Acr3n3ZZwIRgggouyGCDFhQ4Hn0QsmdghRHqR8Z+lyRx3XYEDijhbh/2h5dP3KQmUG9gaXghgCTyMuJw1sUWCm/cKeWhOQncZU1mftmImo98GUWKkILVQcNsGeYIXHwRlSaVksOgKJloQJoC2y1S8nWiD86xiCOUYbYGoyFbDnllJFSadqaISrZ50JO52QOnZGZCiRp/v+gJSp2U0WjLly82yaSOulVpVocyrmakm8X4aSgwXaZpoaCWxhmjnCEO6uKSmhZqIYUthnofqSyK6imYmG4qo4CcmjphqamqmmKmTmIIIq6vjjorhJfWyuqnnQoLa6690kpcsbuiKiuzpzZ7LLHZOEhttdZei60Ey0bLbbfefguut0UIGm655p6Lbq/jpstuu+6+q+628M5Lb73trmtvvvruey6+/P4LcMCrUipwwQb/6+/BCi9scMIMPwyxvQ5HTHHF6E5sccYaR4vxxh5/TBy5II+8ccckn4yysNmuzHLLLrOUcswyz0xzzTbfjLMXBQA="},"caps":{"value":0},"alt":{},"storage":{"size":[9,8]},"altkeys":{"size":[113,8]},"cnoise":{"size":[89,8],"pos":[18,-16]},"clickhold":{"size":[114,9],"pos":[158,-16]},"current":{"size":[9,8],"pos":[141,-15]}}}],"d":{"Screen Keyboard":{"name":"Screen Keyboard","size":[241,64],"resizable":1,"margin":[0,0,0,0],"description":"Resizable on-screen keyboard that can be used as an alternative to the default.\n\nMust be populated with script for full functionality.","version":1,"script":"on view do renderz[] end\n\non get_caps do caps.value end\non set_caps x do caps.value:x renderz[] end\non get_alt do alt.value end\non set_alt x do alt.value:x renderz[] end\non get_cnoise do cnoise.text end\non set_cnoise x do cnoise.text:x end\n\non renderz do\n c.clear[]\n c.size:card.size\n if get_alt[]\n  keyb:\"W\" split altkeys.text\n elseif get_caps[]\n  keyb:\"QWERTYUIOP\",\"^ASDFGHJKL\",\"?ZXCVBNM<\",\" \"\n else\n  keyb:\"qwertyuiop\",\"^asdfghjkl\",\"?zxcvbnm<\",\" \"\n end\n kwh:10,4\n cellsize:floor ((c.size[0]/kwh[0])-1),(c.size[1]/kwh[1])-1\n input:()\n each r ri in keyb\n  each ch chi in \"\" split r\n   if !get_alt[]\n    if ch=\"?\" ch:\"!?\"\n    elseif ch=\"^\" ch:\"CAP\"\n    elseif ch=\"<\" ch:\"BCK\" end\n   else\n    if ch=\"S\" ch:\"ABC\"\n    elseif ch=\"B\" ch:\"BCK\" end\n   end\n   xy:((chi*cellsize[0])+3*ri),(ri*cellsize[1])\n   if (ch=\"BCK\")&!get_alt[] cellsize[0]:cellsize[0]*2 end\n   if (ch=\" \") cellsize[0]:c.size[0]-10 end\n   c.box[xy cellsize+1]\n   xy[0]:xy[0]+3\n   input[r[chi]].pos:(xy)\n   input[r[chi]].size:(cellsize)\n   c.text[ch xy]\n  end\n end\n storage.value:table input\nend\n\non inside p r cellsize do\n min(p>r)&(p<r+cellsize)\nend\n\non clickz pos do\n input:cols storage.value \n each v k in input\n vpos:v[0].pos\n vsize:v[0].size\n  if inside[pos vpos vsize]\n   vpos[0]:vpos[0]-2\n   vpos[1]:vpos[1]+1\n   c.invert[vpos vsize-1]\n   play[get_cnoise[]]\n   current.text:k\n   card.event[\"click\" k]\n  end  \n end\nend\n\non startholdz do clickhold.animated:1 end\n\non endholdz do\n clickhold.animated:0\n clickhold.value:0\nend","template":"# define the text field widget that events should be sent to:\ntf:placeholder\n\non click x do\n if ((me.alt)&(x=\"B\"))|((!me.alt)&(x=\"<\")) \n  tf.value:rtext.span[tf.value 0,rtext.len[tf.value]-1]\n elseif ((me.alt)&(x=\"S\"))|((!me.alt)&(x=\"?\")) me.alt:!me.alt\n elseif (!me.alt)&(x=\"^\") me.caps:!me.caps\n else tf.value:rtext.cat[tf.value x] end\nend","attributes":{"name":["caps","alt","cnote","cnoise"],"label":["caps lock enabled","alt characters enabled","(optional) noise to play[] when clicked",""],"type":["bool","bool","note","string"]},"widgets":{"c":{"type":"canvas","size":[241,64],"pos":[0,2],"locked":1,"script":"on click pos do startholdz[] clickz[pos] end\n\non release do endholdz[] renderz[] end","font":"mono","border":0,"image":"%%IMG3APEAQAKMj6nL7Q+jnLTaizPYvIcOhuInliFppgCqlmx7wuYrc3S94rHupeiBI/1qQgRxYzyukjChTTmUsW4+myGIBCpdyKe0C26GsbmxaqpzmqvldgtNjorb1BFb/g7Xd/uZfus2h3f29+UFdZhHB8iXSLhoyCSoZbj2mNMHohbIZnnneEc5xwUpiInIs5mZuNoD+jjYyQn7Stqq+elpt8QbyVMW61crrGs7vFO8G2yc2imquKwsSZvsWo17vLt068ZNd4WaJntNTvo7yyh+jl756419vvdu7b7OPlq/Pp99mR8/ru6fPnv7ymnzh7DZQGIJAzYkIzDiw3QQJxpEZhGfQokbMyri6BBjx5EhS1YkedIkxZVZMrh8CTOmzJk0ay4AmDInS40q26Hc+THjD3DbWsIpuuUZLKWhmJpzyuwePH5eojX6CWaI1kOqwt3q6kuhVWxj6ZVTw22TzqzwPsgBa0osVbZy60o1e7dqXlfz5JlJsA0O4EpQlc0FVvgqUWjTAH7NYnctsLaz4AY9WyiuurJ6MZeCtrdzz8ldtl4NbZka6ot0V39W/Zh02NFDu95I7WwxY92qISYme7h2nOBGY5vz2A8rT8mXRzdnnnyq8udAo0PHWR27T9oEuy8EeZ3hdOvZxUt3Tn57+OPjtS8vz/78+oPtzc8Xid49dfWH6ee3D59/98kXIH6S2YRgggouyGCDhRUUmoAFEshfhe9ZaM+F3XjAG1+NCcOZHh2CSFxgw3kWImJEaZFiehtmhp9xbp3oWoq4gajWUr1oNmNprAE4xm3ipYVXb14d6UuPpigJmo89QGggK1EG6ZA3ORIWYREjMrPlabEl8UKXQpnVR4tU0uhbljDChiSPgTCZ4T0QXjkKnGy2Y+WaudRYommnROjiUcloKSZfJSKF52a/GYpin5Sw2J97c3oH3oRFWhophXHuB6imnH7qIqj6hUrqpvFdimGpQGoo6qqtnmoqp5N+h9yotrqqKqyxSkpprbjeqiuruUq466qzVpoqsMQKq+yUxS7rYLTSTkvttL8+i2222m7Lba+edgtuuOKOW2wdUJKLbrrqgmvuuu6+C6+67cZLb732xjrvvfruy6925/YLcMDZ5itwwQbLe+3BCi8cJ8EMPwzxpg5HTHHFLP1rccYCT6xxxx1z7HHIFJtbbckmn4zyAyKvzHLLLr8Mc8wVFwA=","scale":1},"caps":{"type":"button","size":[8,8],"pos":[-15,56],"locked":1,"show":"none","style":"check","value":1},"alt":{"type":"button","size":[8,8],"pos":[-15,41],"locked":1,"show":"none","style":"check","value":0},"storage":{"type":"grid","size":[8,8],"pos":[0,-16],"locked":1,"volatile":1,"show":"none"},"altkeys":{"type":"field","size":[100,8],"pos":[-1,69],"locked":1,"show":"none","value":"+=/_<>[]`~W-@#$%^&*()WS'\":;!?,.BW "},"cnoise":{"type":"field","size":[79,8],"pos":[16,-16],"locked":1,"show":"none"},"clickhold":{"type":"slider","size":[101,9],"pos":[140,-16],"locked":1,"volatile":1,"script":"on view do\n me.value:me.value+1 \n if me.value=me.interval[1] card.event[\"click\" current.text] end\nend","show":"none","interval":[0,30]},"current":{"type":"field","size":[8,8],"pos":[125,-15],"locked":1,"volatile":1,"show":"none"}}}}}

Has .noetc attribute to enable/disable drawing the pound sign and asterisk.

On-screen Numpad
%%WGT0{"w":[{"name":"Screen Numpad","type":"contraption","size":[94,93],"pos":[336,143],"script":"# define the text field widget that events should be sent to:\ntf:outz\n\non click x do tf.value:rtext.cat[tf.value x] end","def":"Screen Numpad","widgets":{"c":{"size":[94,93],"image":"%%IMG3AF4AXQKMj6nL7Q8jArTaizMNuvvKfSJmjCZ4nmEqlmz7wrHnztpqk/mN76h/6QFrwE3RIvQRi8ldM7fsJD5PUlRnOrSqN2r2J/0aadwMtzwGnMVqKhopG2m9cjAvhX6v1tm59J1Gw8aH51YYt1UG6Pd3ZMfkuAGoEtkWeeVUOdmn2Xm5WXepCYoI+enpSGooypoq8QobK/uKeqRKVmvqmjs0yqvk22obnPrrdBsmzLSp2MdopoKJNCn9mBxaivvVLPcM3V0tKcZ9eE1n2QgeDkp4fsac3RX4HffOQp4Yz6OILF98qqwXwH8EbfWjN2xgwoLLjEEhtjBiw4DAPs26iDEjBIc2DlrhOMNjEJFwKB4DGYMkCJXzBO4y+VChLolDqGHLdw6ntm43BbUMMmgVG5/l/FHa2dNoUiychC5l+hToPaf6pEa16o5qTnNkvGF1ww/lC5ZqyJqFODNtTbFTZbqkqeQszI5yGa6dG3KUxr18M7ItOtFuxZeCM7kdDPck3pRo36qN+/co4avW/uDzErYOh3ZEOVtetygcOjrrKGWGsXlrmNREwYIGrDSd59Vb2O5RDXnxyst3C8ec/NgwcMfEc/vu2BhxcCh1EzOPPDSwc+QW+1q//qAA"},"storage":{"size":[10,8]},"noetc":{"size":[10,8],"pos":[19,-16],"value":1},"cnoise":{"size":[94,8],"pos":[1,99]},"clickhold":{"size":[113,9],"pos":[18,-32]},"current":{"size":[10,8]},"chenable":{"pos":[137,-31]}}}],"d":{"Screen Numpad":{"name":"Screen Numpad","size":[79,80],"resizable":1,"margin":[0,0,0,0],"description":"Resizable on-screen numpad with optional asterisk and pound signs.\n\nMust be populated with script for full functionality.","version":1,"script":"on view do renderz[] end\n\non get_noetc do noetc.value end\non set_noetc x do noetc.value:x renderz[] end\non get_cnoise do cnoise.text end\non set_cnoise x do cnoise.text:x end\non set_chenable x do chenable.value:x end\non get_chenable do chenable.value end\n\ncellsize:floor (c.size[0]/3),(c.size[1]/4)\non renderz do\n c.clear[]\n c.size:card.size\n cellsize:floor (c.size[0]/3),(c.size[1]/4)\n nump:\"789\",\"456\",\"123\",\"*0#\"\n if !noetc.value nump[3]:\" 0 \" end\n input:()\n each r ri in nump\n  each ch chi in \"\" split r\n   xy:((chi*cellsize[0])),(ri*cellsize[1])\n   c.box[xy cellsize+1]\n   xy[0]:xy[0]+3\n   input[r[chi]].pos:(xy)\n   input[r[chi]].size:(cellsize)\n   c.text[r[chi] xy+(cellsize/2)-(c.textsize[r[chi]]/2)]\n  end\n end\n storage.value:table input\nend\n\non inside p r cellsize do\n min(p>r)&(p<r+cellsize)\nend\n\non clickz pos do\n input:cols storage.value \n each v k in input\n vpos:v[0].pos\n vsize:v[0].size\n  if (inside[pos vpos vsize])&!k=\" \"\n   vpos[0]:vpos[0]-2\n   vpos[1]:vpos[1]+1\n   c.invert[vpos vsize-1]\n   play[get_cnoise[]]\n   current.text:k\n   card.event[\"click\" k]\n  end  \n end\nend\n\non startholdz do clickhold.animated:1 end\n\non endholdz do\n clickhold.animated:0\n clickhold.value:0\nend","template":"# define the text field widget that events should be sent to:\ntf:placeholder\n\non click x do  tf.value:rtext.cat[tf.value x] end","attributes":{"name":["noetc","cnote","cnoise","chenable"],"label":["draw asterisk and pound sign?","(optional) noise to play[] when clicked","","enable click hold function."],"type":["bool","note","string","bool"]},"widgets":{"c":{"type":"canvas","size":[79,80],"pos":[0,0],"locked":1,"script":"on click pos do startholdz[] clickz[pos] end\n\non release do endholdz[] renderz[] end","font":"mono","border":0,"image":"%%IMG3AE8AUAKMj6nL7Q8NmLTaWwPeHOgOUlIYfmRnntuori2XvlksT3R9y2wt8lb+2q0QrpIwQzrAgJgc09ZrlqKXI6p4hUpBJucTiUVZtVnP8MT8dsPL8bhahlF/LS863pYbge+6D/zn8ZUUSPbXpzI4VYh4x1goCKnIJTmJx2O5JLnJGOH5CRqawBmYefaIWmq6VVpJeuiaCtuZqCemxHqrmcS3eAnHNajRG/ymhtukZkhXm4tlV+zm58wKTchWjQ1sltxMnUxcvNsq69N4Ta76ah6bPqtejtn+Tm++ul2PKbrP33/umw/HPWbu7K2TRysejnnsFOpQlIZXOF2ngv0i6MSXNUq20BH0OMORtpHcjIzjSPIjPoAhQapMWdLWxovLwEnbc7JhQX0HFybc6RMeUB0MEQ4NMhBQwIc9iXbyBzWqg6ZBigZdipTqNKFYtx5KOkfnV60ijFl1Wibjz65abnIV62IYTDRga1b5oPatUZlzeZG1YXYt3L0GHVYVTDixwL8uFxv2WvgoZJ6PvR0qAA==","scale":1},"storage":{"type":"grid","size":[8,8],"pos":[0,-16],"locked":1,"volatile":1,"show":"none"},"noetc":{"type":"button","size":[8,8],"pos":[16,-16],"locked":1,"show":"none","style":"check"},"cnoise":{"type":"field","size":[79,8],"pos":[1,86],"locked":1,"show":"none"},"clickhold":{"type":"slider","size":[101,9],"pos":[15,-32],"locked":1,"volatile":1,"script":"on view do\n me.value:me.value+1 \n if (me.value=me.interval[1])&(get_chenable[]) card.event[\"click\" current.text]\n end\nend","show":"none","interval":[0,30]},"current":{"type":"field","size":[8,8],"pos":[0,-31],"locked":1,"volatile":1,"show":"none"},"chenable":{"type":"button","size":[8,8],"pos":[122,-31],"locked":1,"show":"none","style":"check"}}}}}