HN user

alnis

1,319 karma

alex.nisnevich.com

Posts35
Comments72
View on HN
alex.nisnevich.com 2y ago

The development process of Wordbots (2016–2023)

alnis
11pts0
app.wordbots.io 3y ago

Show HN: Card game where players write their own cards that get parsed into code

alnis
114pts26
app.wordbots.io 3y ago

Show HN: Wordbots, an online card game in which players make their own cards

alnis
7pts1
www.cyberdemon.org 3y ago

In the age of AI, don't let your skills atrophy

alnis
86pts97
www.planetizen.com 5y ago

'Accessory Commercial Units' for a 15-Minute City

alnis
1pts0
alex.nisnevich.com 7y ago

Show HN: Creating Land-Use Maps with an HP 7475A Plotter

alnis
50pts5
blogs.microsoft.com 8y ago

Microsoft acquires Semantic Machines, advancing the state of conversational AI

alnis
8pts2
www.nytimes.com 8y ago

An Ice Core Reveals the Economic Health of the Roman Empire

alnis
1pts0
www.theverge.com 8y ago

Instagram pushing restaurants to be colorful and irresistible to photographers

alnis
2pts0
www.wsj.com 9y ago

New Data Tool by Bayes Impact (S14) Aims for Transparency in Police Use of Force

alnis
10pts0
www.wired.com 9y ago

One Startup’s Quest to Save Refugees with Virtual Reality

alnis
1pts0
www.textfiles.com 10y ago

Bruce Bethke: The Etymology of “Cyberpunk” (2000)

alnis
2pts0
www.themarshallproject.org 10y ago

Inside the Deadly World of Private Prisoner Transport

alnis
3pts0
www.aylan.io 10y ago

On DAWs and Programming Languages

alnis
3pts0
newrepublic.com 10y ago

Mom’s Invisible Hand

alnis
2pts0
newrepublic.com 10y ago

The Ghosts of Fukushima

alnis
2pts0
alexnisnevich.github.io 10y ago

Show HN: A JavaScript emulator of the Synthi A synthesizer

alnis
68pts13
www.alatown.com 10y ago

On the Spline: A Brief History of the Computational Curve

alnis
64pts3
www.alatown.com 10y ago

On the Spline: A Brief History of the Computational Curve

alnis
2pts0
alexnisnevich.github.io 10y ago

Show HN: Kalevala – A multiplayer tile-laying board game in Elm

alnis
15pts6
rmm.ludus-opuscula.org 12y ago

Ludus: a new recreational mathematics magazine

alnis
1pts0
boingboing.net 12y ago

3D printers as teleporters

alnis
3pts0
alex.nisnevich.com 12y ago

Show HN: Untrusted, a JavaScript adventure game you play by modifying its source

alnis
555pts235
www-formal.stanford.edu 12y ago

John McCarthy: "Elephant 2000: A Programming Language Based on Speech Acts"

alnis
2pts0
medium.com 12y ago

Are programming bootcamps worth it?

alnis
4pts0
www.aaronsw.com 12y ago

How Google keeps employees by treating them like kids (2006)

alnis
228pts164
www.cigital.com 12y ago

How We Learned to Cheat at Online Poker: A Study in Software Security

alnis
1pts1
cwales.github.com 13y ago

_why's site updated again

alnis
21pts6
superuser.com 13y ago

How to tame Linux responsiveness, memory, and paging?

alnis
2pts0
alex.nisnevich.com 13y ago

Show HN: Face Tracking with OpenCV and a USB Missile Launcher

alnis
7pts0

Main developer of Untrusted here! I'm thrilled that people are still excited about this little game Greg and I made, 10 years later :-)

If you're interested in the development process behind Untrusted, I wrote a bit about it back in 2014: https://alex.nisnevich.com/blog/2014/10/17/some_words_on_unt...

And if you liked Untrusted, you might like my latest game, Wordbots. It's a very different take on the "players can modify the game code" concept: https://wordbots.io/

Alex

Thank you so much for the feedback! Unfortunately I screwed up the Discord link in the post – it's http://discord.wordbots.io/ , not https:// – but it was too late to modify the HN post after I noticed that.

Glad that you and your son have had fun playing it! He's definitely made the most cards in Wordbots of any user so far, so that's pretty cool :-)

I'll respond to each issue in turn:

Re: decks and card rarity – I hadn't thought of this when implementing card rarities (which right now take effect only in draft mode), but it's a good idea. I'll make an issue for it.

Re: state desync – I've never noticed this issue in testing, but I will admit that the multiplayer code is pretty sloppy (this part isn't exactly my strong suit). In theory the game should be fully deterministic (and the RNG is seeded identically for both players and the server), but it's possible that either a socket message got lost somewhere or there's some nondeterminism in some card behavior that I neglected to notice. If you encounter this again, please let me know what happened right before the desync – it'll help us narrow down the issue. And hashing the state and checking it periodically seems like a good measure to take for now; I'll make an issue for it.

Re: End Turn button unresponsive – This is a bug we've had in the past, and it was caused by an error occurring during combat, resulting in the game state thinking that an attack animation was still happening (so the turn couldn't end yet). I'm pretty sure that it's fixed now, but if you encounter it again, check the game debug log and JS console to see if anything weird happened right before.

Re: card draw trigger – Oops, this looks like an issue with how `afterCardDraw` is being triggered, should be an easy fix on my end. I'll take a look.

Re: Activate popover – Yeah, this is feedback we've gotten in the past, and we're looking into what a better UX for object activation could look like.

Very cool! This might be a good time to mention a JavaScript emulation I made of the EMS Synthi A, which was also present at the BBC Radiophonic Workshop (well, the closely-related EMS VCS3 was) and contributed, among other things, to some SFX for Doctor Who: https://github.com/AlexNisnevich/synthi-js

This was a project from 6-7 years ago and I had to rely on a third-party library for the web audio bits. If I re-did it today, I'd definitely do it all in native Web Audio.

Hah, this is the keyword substituter incorrectly substituting "event" -> "action" (Action cards were called Event cards in an earlier version of the game). I'll fix that, but in any case, there's not any notion of preventing future damage currently.

P.S. Discord (https://discord.wordbots.io/) or GitHub (https://github.com/wordbots/) would be the best place to report issues like this at the moment.

Yeah, the poor parsing around "moved this turn" is a known issue that I'm going to look into fixing this week. (Someone actually mentioned it yesterday on our discord – they were attempting to make a card with the text "At the end of your turn, if this robot didn't move this turn, restore 2 health to this robot": https://discord.com/channels/301800217055985665/301800217055... )

"At the end of your turn, destroy this robot unless it moved this turn" or "At the end of your turn, destroy this robot if it didn't move this turn" are definitely phrases that ought to parse correctly, and there's already in-game support for these mechanics (it's purely a parser issue).

Re: balance – see a comment I made below on that: https://news.ycombinator.com/item?id=35879796

Re: frustration of writing cards – yeah, I definitely feel you on that. The grammar is fairly restrictive and there's generally just one way to make a given card action parse (you could say it's more like Python than Perl). One affordance that we've put in to at least make writing cards a little easier is the Dictionary/Thesaurus feature in the Workshop, that lets you see all the words and phrases recognized by the parser and examples of how each of them has been used in practice.

Re: sumbot – You can do something like "Startup: Set this robot's attack to the total attack of all robots, and set this robot's speed to the total speed of all robots, and set this robot's health to the total health of all robots."

You can definitely make an Action card with the text "You win the game" :-)

Wordbots doesn't have a built-in mechanism to enforce cards being at a "fair" power level. We initially had a few ideas for how to do it: some kind of machine-learning approach to determine how much "energy" a card should cost to play based on its text and stats, or having a server constantly simulating games between AI players with various cards to see how effective cards are in practice, or even a market-based mechanic where cards could be traded for in-game currency and how valuable a given card was would determine it's a "fair" card or not.

All of these approaches were ultimately abandoned as too complicated. Instead, we opted to just prioritize game formats where both players are equally likely to have access to any given card in-game:

  - In the Mash-up format, both players build a deck made up of any cards they want, but the two decks are shuffled together into one big deck that both players draw from.
  - In the Set format, players build their own separate decks but have to choose cards from a given "set" of cards curated by a player (and ostensibly the cards within a set should be roughly balanced).
  - In the draft formats (Set Draft and Everything Draft), both players are drafting from the same pool of crads.
This way, overpowered (and underpowered) cards can still be created by players, but at least in these game formats, both players would be equally likely to draw said overpowered cards.

Regarding M:TG vocabulary, Wordbots's syntax is a little bit different but a lot of the same effects are possible. For example, M:TG's Flametongue Kavu's "When Flametongue Kavu enters the battlefield, it deals 4 damage to target creature." becomes "Startup: Deal 4 damage to a robot" in Wordbots.

Some of the cards that people have been making so far in Wordbots are rough reinterpretations of cards from other games (M:TG, Hearthstone, Faeria, etc). Of course, many cards from these games wouldn't be possible to reimplement in Wordbots, as it doesn't have anywhere near the breadth of mechanics that these more-sophisticated games do. But also, there are some mechanics that are only possible in a game like Wordbots – such as https://app.wordbots.io/card/cnrssvyxfsp: > Replace "1" with "2", "2" with "4", "3" with "6", and "4" with "8" on all cards in your hand.

Hi!

Wordbots is a long-running side project I've been working on on-and-off for the past ~7 years that I finally feel comfortable enough with to share with the HN community.

It's an online tactical card game (inspired by games like Hearthstone and Magic: the Gathering), where players write their own cards in natural language, that gets parsed down to JavaScript.

The resulting game gets pretty wacky as players can create all sorts of cards, though there are some game formats that try to produce more balanced gameplay as well (e.g. one format in which both players shuffle their decks together, and various draft formats).

If you're curious about how it all works, I made a write-up about it here: https://app.wordbots.io/how-it-works

And if you want to chat about Wordbots beyond this thread, please don't hesitate to join our discord at https://discord.wordbots.io/ . I'd love to hear any and all feedback.

Alex

I've been working for the past few years on an online card game (think Hearthstone or Magic: the Gathering but with a tactical board component as well) where players can design their own cards in a WYSIWYG editor, and the rules text of each card (things like "Whenever this object moves, draw a card", etc.) is translated into JS by a semantic parser.

It's a hobby project that's still in the alpha stage, but I'm hoping to finally put out a beta version this year. The core functionality is all there, but there are still some key questions that need to be answered around ease-of-use and game balance (not an easy proposition when players get to create their own cards!)

You can check it out in its current form here: https://app.wordbots.io/ . The code is hosted at: https://github.com/wordbots .

Hey, (one of the) developers here.

It's really exciting to see that there's still interest in this little game Greg and I made all those years ago!

I wrote up a postmortem on Untrusted back in 2014 that may be of interest if you'd like to learn more about how the game was created: http://alex.nisnevich.com/blog/2014/10/17/some_words_on_untr...

I'm happy to answer questions and help anyone's who's stuck and needs a hint, but it seems like the HN community has already been doing a good job of the latter :-)

I'm still experimenting with the fascinating intersection of code, games, and language. Here's the latest thing I'm working on in the area (albeit in a very different vein, and still very much a work-in-progress): http://app.wordbots.io/

Alex

P.S. I though I'd end with a shout-out to some super-cool games by other people that have been inspired by Untrusted: - INJECTION by TOASTEngineer: https://schilcote.itch.io/injection - Programmer Adventure (interface in Russian): https://programmeradventure.github.io/

It's something that I've been thinking about!

It should be relatively straightforward to implement a virtual keyboard. My thought was to model it as an oscillator that only outputs sound for as long as a key is held down and whose frequency instantaneously changes every time a different key is pressed. Each keypress would also call `manualTrigger()` to re-trigger the envelope. (There could also be a mode to output "control voltage" rather than a waveform so that you could use the keyboard to control other oscillators - I believe the EMS DK keyboard had this dual functionality.)

The thing that's been stopping me from implementing it so far has largely been the question of where to put the keyboard! There's not really any space on it in the UI, but I don't like the idea of making it into a modal dialog because people probably would want to be able to turn knobs and work the patchboard while operating the keyboard. So I'm not sure what the best solution is ...

Thanks for your input!

The View Rules button should work now - in case there are still issues, you can see the rules here: http://alexnisnevich.github.io/kalevala/rules.html

It might be helpful to play Single Player against AI first to get a sense of how the game works. It's possible that what happened with your game was that it was your opponent's turn first but they didn't place any tiles.

It looks like there may be an issue where if you start an online game and disconnect, you can't connect to anyone again without refreshing. I'm trying to figure out what's causing this.

I do apologize for all the issues - as far as I can tell, this is the first time anyone's made an online multiplayer game in Elm, and there's definitely some kinks still to be worked out.