Don't called your project *Zilla. The copyright owners of Godzilla are known to go after everyone who tries to use the "Zilla" suffix. Mozilla learned its lesson long ago and had to negotiate a special agreement.
Don't called your project *Zilla. The copyright owners of Godzilla are known to go after everyone who tries to use the "Zilla" suffix. Mozilla learned its lesson long ago and had to negotiate a special agreement.
You're using Typescript+CSS. Was hoping you'd support Python on the server, for game logic. Your timing is good because developers and publishers currently using BGA are unsettled and spooked by Asmodee's business model.
BGA Studio's stack is JS/CSS + PHP (client and server) + MySQL [0]
Yucata.de is JS + HTML + .NET 4.5 on the server [1]
(TTS was using Lua, which I looked into but seemed eccentric and limited, it's not even OO, why on earth choose a non-OO language for a boardgame).
Also here's a useful review of sites/frameworks from 2021: "VassalEngine: Survey of other boardgame software" [2]
Can you please please please integrate with Python on the server?
[0]: https://boardgamearena.com/doc/Studio
[1]: https://www.yucata.de/en/FAQ#t17
[2]: https://forum.vassalengine.org/t/survey-of-other-boardgame-s...
why on earth choose a non-OO language for a boardgame
Lua has usually been a very popular choice for game developers. One reason is that it gives you an easy way to embed a scripting language in your game.
You can do OOP without classes [0].
Can you please please please integrate with Python on the server?
You expect the developer to port and maintain their entire project to Python because you can't be bothered to learn a new programming language?
[0]: https://en.wikipedia.org/wiki/Lua_(programming_language)#Obj...
Seems pretty trivial to support Python serverside. Python is very easy to run in a lightweight isolated container (and you can compile it to static executable). The game data that the engine makes available to the server side code looks pretty standard and doesn't look like a huge shim to maintain.
You could even cross compile the Python to typescript for a simplified server side environment (typy for example).
Seems pretty trivial to .....
Then go do it. If it's pretty trivial....
Anything is trivially easy when you aren't the person that has to do it.
I clearly didn't "expect" the developer to port or do anything, I requested they consider also integrating with a (server-side) language that's in general more widespread, more expressive, more userbase, more libraries, more powerful developer tools. Per the examples I cited, boardgame platforms put most of the game logic on server-side, for complex games. The client-side checks that moves are not illegal, cheating or nonsensical.
I wasn't aware Lua had become widespread in game programming [0] (or more specifically, scripting on top of a game engine written in some other language); but supposedly not mainly due to whether Lua language has adequate features, but in part as a reaction to (client) performance of the Lua VM vs Python (VM maps to register set rather than stack-based; lower memory usage; coroutines); on client rather than on server. Some discussion in [0].
I did in fact in 2020 look into implementing a friend's boardgame in Lua on TTS vs in Python. That programming only confirmed my experience that line-for-line, Python is more expressive, IME more productive to develop in, also has much stronger library support.
Why is the basic documentation [1] on whether/how to implement OO Lua so contradictory and all over the place? When I look for a how-to document, I want a clear how-to, I don't want to see Lua's own users in a decades-long debate [2][3][4][5][6]. Or [7]. Or a lua-users.org/wiki that isn't even accessible via https [8]. (If I should be using a more accurate term than "OO", then just tell me what that is, instead of ad-hominems.) So for example, do we need polymorphism, mixins, the ability to call super, serialization (probably can do without that), etc. Should we sacrifice other features for more deterministic GC and performance? What are the compelling reasons for server-side Lua? on a feature-by-feature basis vs say Python?
(There's also a constituency who insist that Tcl is object-oriented, FWIW.)
Probably the best way to keep this discussion on-focus is to define "What is the consensus on an adequate set of OO features that's considered necessary for server-side game logic programming?" (that's a rational discussion, not "can't be bothered to", which is just ad-hominem).
As to TS, in my experience I don't find strong type-checking to prevent that many bugs, in codebases written by a small number of developers. I can program JS, so again if I saw a compelling reason to start using TS I would. (Sure, you could also crosscompile Python.) Again, that's not the primary issue, the primary issue is what server-side language once the game becomes complex and outgrows a pure TS implementation.
[0]: "Civilization V ditching Python for Lua" https://www.reddit.com/r/programming/comments/bp5m8/civiliza...
[1]: https://www.lua.org/pil/16.html
[2]: How can one implement OO in Lua? https://stackoverflow.com/questions/4799078/how-can-one-impl...
[3]: Is doing OOP in Lua considered bad practice? https://www.reddit.com/r/lua/comments/tbaxlo/is_doing_oop_in...
[4]: Really, how best to give Lua an object/class structure? https://www.reddit.com/r/lua/comments/tia21g/really_how_best...
[5]: Is Lua an object-oriented language? (SO, 2011) https://stackoverflow.com/questions/3477676/is-lua-an-object...
[6]: Why inheritance isn't as useful in dynamic languages, and other notes on OO in Lua (marc.info) "In short: inheritance is in most cases not a feature, just a simplistic method for expressing similarity." https://news.ycombinator.com/item?id=98529
[7]: r/ProgrammingLanguages, 2022: "If Lua is faster and smaller than Python, while being just as powerful and capable, then why is Python so much more popular?" https://www.reddit.com/r/ProgrammingLanguages/comments/tfurk...
I remember a book on the shelf at home in the 90's entitled "Object Oriented Programming in Macro Assembler".
And indeed, C has function pointers, so you can do OO. Just not some of the more fun stuff.
> > Can you please please please integrate with Python on the server?
You expect the developer to port and maintain their entire project to Python because you can't be bothered to learn a new programming language?
They are literally begging, 3 "pleases", rather than "expecting".
What is Asmodees business model and what does it have tondo with BGA?
Asmodee owns BGA, also owns a huge amount of game publishers. I have a decent collection and then looked at my games and noticed that Asmodee published like 70% of my games.
Just feels like we're reaching a point where if you want to get a game published at a larger scale and distributed, you'll likely really be incentivised to go through Asmodee.
Asmodee is hedgefund-owned French board game company. Drive by the injected money they have been 'consolidating' the board game publishing industry. For instance they bought the rights for Settler of Catan.
A lot of people fear that they will raise prices or reduce the offering to return money to the investors at some point.
there is nothing wrong with Typescript, but it is the react part that worries me. Wouldn't you want something more light weight on the front end than react for games? Like svelt, marko or solid?
The React aspects are really minimal, all the animation logic is by outside of React. We're really just using it for the jsx syntax to make it easier to return markup-looking components.
What is your reason for wanting Python on the backend so strongly? TypeScript is a very logical choice given that it runs on backend and a wide variety of frontends (not only web, but game engines like Unity too). And its type system is better than Python's.
See reply above.
The reason the server isn't in Python is because in boardzilla, you don't express your game twice, once for the client and once for the server. Instead, you express the game once in typescript, and that code is actually used on both the server and client. The client is operating a lot like the server, just without the hidden information.
I don't think the foremost message on the landing page should be a "join our discord" call. It should feature examples and links to the source/docs.
In fact, the prominence of "join our discord" on projects like this is off-putting for me personally. I don't doubt I am alone in this regard.
You are not.
I really dislike discord as anything else than a platform for disposable communication, e.g. between friends and stuff, but people have this tendency of using it as the prominent platform for support questions and even as documentation. And together with terrible search, and no search indexing, it's just terrible when you need to search for a solution.
Fwiw, we're only using Discord for disposable communication. We have a docusaurus site up for the docs, and otherwise all the development is taking place on Github. Discord seems very popular with the board game crowd, so it was kind of the first place we went to try to reach gamers before we started reaching out to developers.
What do you prefer to discord for disposable communication? Certainly open to suggestions.
I don't think anyone's criticizing or advising against the use of Discord for the things it's adequate for, but rather its proeminence in the webpage, which communicates that you'll have to go to Discord to get more substantial information on the project. Having to talk to people is a source of stress and attrition for introverts. Not everyone needs or wants to have to modulate their language to a different social environment every time they need clarification.
Good feedback, let me see what I can do about this and thanks
I've spent over a minute after finding on HN there's something more than just discord invitation trying to find where any clue is. Like, you know, playing notpron. Tried clicking on different icons, then the footer, literally nothing. Finally, I scrolled. Not sure if it's my resolution+scaling or what, but with nowadays' bare visible scrollbars, there was a map with some tiles and coins on the right, and just some gray empty space after. As I believe 4k 150% is quite standard, there's no surprise some people may get confused.
I have the same issues with Discord - but surely there must be bots that publish Discord support channels as indexable websites?
https://github.com/boardzilla/boardzilla-core/blob/main/LICE...
Commons Clause :(
If you're worried about some corporation leaching off of you, why not go AGPLv3 instead?
Co-creator here.
I thought AGPL was ok as well, but Commons Clause specifically tried to address perceived deficiencies in the AGPL although I admit that it didn't really seem to catch on. I'm not super well versed in the technical details. Why would you recommend AGPL?
https://fedoraproject.org/wiki/Licensing/CommonsClause has several links explaining what's wrong with the Commons Clause. The reason the AGPLv3 is my preferred replacement is that the FAANGs are irrationally afraid of it and refuse to let it be used anywhere in the company (e.g., https://opensource.google/documentation/reference/using/agpl...), but it's still 100% Free Software and Open Source and so allowed to be packaged in Linux distributions that disallow proprietary software.
Appreciate that! We'll take another look at this.
Remember (I'm sure you do) that you can relicense the code for the use of anyone who wants to pay you for it. AGPLv3 protects you, but doesn't hold you back.
Damn, poor little Google seems really scared. I'm not sure if that info is true. You have to provide the whole source of the entire product and not just a segment of code (eg library) you forked which they do often?
I'd also suggesting reading some of /dev/lawyer's blog posts, though I'm cooking and can't pull up anything in particular ATM.
The page immediately errors for me.
Error
Object.hasOwn is not a function. (In 'Object.hasOwn(t,n)', 'Object.hasOwn' is undefined)
The stack trace is: o@https://www.boardzilla.io/build/_shared/chunk-IP5CEA34.js:3:... rt@https://www.boardzilla.io/build/root-NYPPT2G6.js:3:2506 Fs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:9:... Ch@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... _h@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Jg@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Ei@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... rs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Rh@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Rh@[native code] Ba@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:4:... Ia@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:4:...
iPhone - ios 14.8
I think I have a fix deployed now. Please try it again if you have a moment.
Wonderful, Working perfectly. Thank you.
Hi Josh,
It appeared I'm still receiving errors when attempting a few of the boards.
Error
Object.hasOwn is not a function. (In 'Object.hasOwn(e,A.from)', 'Object.hasOwn' is undefined)
The stack trace is:
su@https://www.boardzilla.io/build/_shared/chunk-ZEYFFM3P.js:16... Fs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:9:... Ch@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... _h@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Jg@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Ei@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... rs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Rh@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11... Rh@[native code] Ba@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:4:... Ia@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:4:...
Hey Doublerabbit. Thank you for the bug report and stack trace, super helpful.
I'm taking a look at it now. I've got to go to bed soon, but I'll try to fix this as soon as I can.
Looks very cool, congrats on the initiative!
I think it can be great to develop prototypes, but to build a BGA alternative you will need permission from the publishers to implement / distribute their games, and given how big is BGA and that it belongs to Asmodee, that is going to be tough...
Hope I am wrong, good luck!
IANAL, it seems, game mechanics can't be copyrighted, unless you use the same images for cards / board, or literally copy the rule book.
In short: you can trademark the name, logos. Have copyright on art (even the board itself as art). You can't copyright the mechanics, processes or rules. That explains the Monopoly/Scrabble clones.
https://www.reddit.com/r/gamedev/comments/10f2nov/comment/j4...
which refers to this youtube video:
Mechanics can't be copyrighted, but the board gaming community can smell rip offs from afar and don't particularly appreciates them.
Besides, it's going to be madness to advertise that you have the game X on your platform but can't use the name or any artwork.
If I were the OP, i'd try to gear this towards publishers and make it as easy as possible to create functional prototypes. They need to iterate countless times on prototypes, one little change at a time, and this could be a huge time saver for them, facilitate playtasting, etc...
Hey jamager, thanks for the kind comments.
Totally agree, Asmodee has basically prevented a real competitor from entering the market. We have an idea in mind that doesn't involve going up against BGA, but instead looks at more smaller games from indie publishers. Not sure how viable that is, but not sure what else someone is supposed to do.
All sample games show an error:
Object.hasOwn is not a function. (In 'Object.hasOwn(e,A.from)', 'Object.hasOwn' is undefined)
The stack trace is:
su@https://www.boardzilla.io/build/_shared/chunk-ZEYFFM3P.js:16:114536
Fs@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:9:128279
Ch@https://www.boardzilla.io/build/_shared/chunk-QNN53S6I.js:11:180657
...
Perhaps put some polyfill in place?Polyfill is in place, please let me know if its fixed and thanks
Yep, seems resolved. Excellent.
Thank you, polyfill incoming!
You might be interested by an open-source project I started a few years ago but never really finished: https://github.com/ravens-engine/core
I had the idea after developing Swords and Ravens, an online adaption of A Game of Thrones: the Board Game (2nd edition), and realizing that there was a way to make a library to allow people to create board games without having to bother with the network part.
I also wrote a blog post about it: https://longwelwind.net/blog/networking-turn-based-game/
Good luck in your project!
Oh wow, thanks, I'll check this out.
We were doing something more like merely recording the game moves and applying them to arrive at the game state (having deterministic per-session rng). It's a good way to do it, but for the same of simplicity, this time around we just record the whole json blob per move. It simplifies undos and it also lets us easily move through history if you want to view a previous state.
But I'd love to try to apply some of your lessons to a later version. The challenge for us now is making a good api for expressing board games. That's been really tricky tbh. We've been working on this for ~7 years and have gone through many iterations of this api trying to get it right. I sure hope we're closer this time.
You might be interested in the Phase abstraction of my engine.
Basically you represent your board game as a tree of phases through which your game progresses in.
Each node of your phase tree can contain state. At any point, your game is at leaf of your tree, and the state of the game is composed of all the states of all the nodes from the current leaf-phase to the root of the tree. Each leaf node also have a set of possible inputs describing what possible action players can take to progress into the game. This makes it really easy to handle games that have special "rare" phase that can break the flow of the game (for 7 Wonders: Duel, for example, phases where players must resolve a wonder's effect that asks them to destroy an opponent's card).
That's almost exactly what I've done here, and then defined various nodes with different behaviour like for-loops, while-loops, etc.
Take a look at https://docs.boardzilla.io/game/flow to see how it looks.
I'm looking forward to trying this out!
You might want some sort of mention in the website copy about it being self-hostable (unless I'm misinterpreting the docs). The website copy talks about your hosting and the related benefits (as it rightly should), but I didn't see any mention of self-hosting so I almost didn't click through to the docs to see that local development is possible.
Hey Joemi. I wanted to make a self-hosted single game runner, but I haven't gotten to it yet. The interface used by the game/server is detailed here https://github.com/boardzilla/boardzilla-devtools/blob/main/... so it should be pretty easy to make this runner. I hope to get to it soon.
Ah, I guess I need to look at the docs more closely.
Looks good! There's a lot of moving parts for such a wide array of functionality, so this looks like a lot of really good work! If nothing else, it's nice to have a game engine that focuses on tabletop games, that doesn't necessarily focus on how to render said games.
All of that said, as someone who has developed a card and dice game, using plain html and javascript to create a programmatic version that could be played online, I am still having a hard time figuring out how to recreate that kind of thing, using your system.
Based on the docs, I can see it supports cards. And based on my experience developing the same basic gameplay, I can see that it's general-purpose enough to be suited for a wide variety of games (and my game is simplistic, so it should be possible). Feels like it should be a pretty straightforward build, with a robust enough library, and yours seems to be fairly robust, so my thinking here is that a step-by-step tutorial would go a long way. I know enough to see why you've chosen the abstractions you have (Actions, Flows, selections, conditions, prompts, etc), but without seeing them constructed, it's hard to know where to make the specific changes I would want to make.
Anyway, just one opinion! It may feel more straightforward to other people. But I don't think I would personally make much headway with it, without a tutorial.
Thanks for the comment, and yes we'd love to add more docs. (it's time consuming!) I understand that even a simple-sounding game can feel daunting to translate into a formalized API. I did record a video of me building part of a game FWIW.
It looks like it's based on two main classes, which make sense in context of the physicality of board games. You have things you move around (`Piece`s), in your hand, from player (`Player`) to player and onto different spaces on the table itself (`Space`).
So for game you'd need your dice and your cards to be defined subclassing `Piece`, and give them to your players (which subclass `Player`) and maybe also to a Teller (also `Player` who manages the deck, before thinking about which instances of `Space` you'll need to set up on your board for your rules.
Your rules all in an instance of the `Game` class and it itself has this concept of actions, at their core instances of the `Action` class. Those take arguments that allow you to write the prompts for the user, define when the action is legal in play, and what effect it should have.
Beyond that the API then just kicks in and seems to have a lot of handy functions for finding pieces, making comparisons, all the stuff you expect. Beyond that just depends on your game logic.
There's also some handy functions to filter for different Spaces and Pieces so that you can build up the UI logic quite quickly, judging by the examples.
A couple questions: did you get permission from Friese for Funkenschlag? Why Typescript? Any plans to control for players who rage quit, anti-play (in all forms), cheat (two connections from same IP)?
I tried but couldn’t test right away, is this more like BGA or TTS?
Yes it's like BGA, not TTS.
No, we haven't done much to secure the online playing experience for strangers other than simply enforcing the rules of the game. We've been so far more focused on the API side of building game than the service side of having customers, but these are all on our radar as table stakes to make this an nice experience for random players.
Been enjoying playing a couple games of Seven Wonders Duel so far, but one immediate issue is that there is no way to unsubscribe from the emails telling me it's my turn. I've already got browser notifications turned on, so these emails are filling up my inbox fast.
I've also reported a couple bugs so far, the main one being not being able to build Wonders even though I have adequate resources, but other than that, amazing work! I'm keen to implement a game myself sometime soon.
Oh darn, sorry about the email notifications. I'm going to disable them and give them a little extra polish later. Thanks for letting me know
Hey this looks great. I'm working on some AI bots for board games and this might be really useful as a frontend for local testing of the bot players. I'll check it out.
We've been planning to add a way to do pluggable AI functions (both for solitaire play and for testing). If you want to try, take a look at the TestRunner class for an easy way to automate playing the rules for multiple players.
If you're looking for something more low-level, I can recommend boardgame.io [1].
Yeah, I can totally recommend boardgame.io as well. Nicolo is super helpful and friendly. Also check out his other project https://boardgamelab.app/.
This is a very difficult space. I think the best way to be successful is to have an instant hit game, or spend tremendous community effort getting players every day of the year.
I tried my luck with https://acos.games early on when there was very few alternatives to BGA. I still develop for it behind the scenes when I'm bored. My biggest failure is UI/UX. People don't care too much about the awesome technology hiding behind the scenes. =(
Looks really well done. The documentation was very well written. I don't have a use case at the moment but it was interesting reading through the documentation to see what is possible. The state management and replaying games seemed neat. I'm writing my own set of games and just thinking about making the system flexible enough for others to integrate with feels like a big undertaking. Cudos for the work you put in.
This looks very interesting. One question: would I be able to develop a game using my favorite compile-to-JS language? Or would the game infrastructure force me to use TypeScript?
Looks great! I'll poke around--my dream is make a WH40k-like turn based strategy.. curious to see if this can handle sufficiently convoluted rules.
Good initiative but I consider screentop.gg is a solid and pretty consolidated option on that field. It's quite easy to create games on that system
Really cool looking! Excited to mess around with this.
Happy to see the everyPlayer[1] flow command to allow for simultaneous actions. This is something that's missing from the other boardgame frameworks I've tried.
One thing about the JS ecosystem, there's a shit ton of libraries and frameworks.
Nice. I have a ton of board game prototypes I'd like to make web games of at some point, so I spent a little time writing up some functions for a general board game library myself for making board games, but didn't get too far (just some grid generation, custom die rolling, card drawing, tournament functions, some tests to demonstrate various scenarios, and a few other things). But I'll never have time to do it properly, especially juggling other projects. Maybe I'll just see how easy it is to work with your library.
I concur it's a bit painful to learn the BGA platform, as it's 1) stuck on their platform, you won't be able to put the game anywhere else, and 2) all in PHP, which I prefer not to write in anymore, and 3) with documentation scattered around in various places, including a couple of Powerpoint presentations.
Wow, this seems unreasonably well made! Kudos. I'll definitely try it out.
Um, wow, I had no idea. I've got some other pretty good domain names at the ready, so, maybe I need to pull the trigger on that.
Hi Josh,
I'm receiving an error upon accessing the page.
Object.hasOwn is not a function. (In 'Object.hasOwn(t,n)', 'Object.hasOwn' is undefined)
Your browser is too old to work with the library. Object.hasOwn is available for 93% of users according to https://caniuse.com/mdn-javascript_builtins_object_hasown
Polyfill added btw, happy to take any more bug reports either here or in discord and thanks!
I'm going to add a polyfill later for this. Thanks for the bug reports
Using this thread as bug report.
There is a typo on the “Credits” card on game pages: ”arist” -> ”artist”
Thanks Soneca. Fixed and deployed.
As an 10 year Mozilla veteran, I agree you should switch domains/project names. Mozilla was able to negotiate a deal for a number of reasons- Mitchell herself is a lawyer, the project is a NPO, and probably other reasons too, but it's not worth the effort to defend a slightly infringing name against the copyright holder in this case.
Woah, this is wild. Never knew how aggressive the copyrights were for *Zilla.
Wonder how the people of Zillah Washington feel about it
I'm fairly sure that the antiquity of the Book of Genesis trumps any conceivable trademark claim!
When you consider the most recent Godzilla film, Minus One, is the 37th in that franchise, and was not only nominated for an Oscar, and may be it's most lucrative, you can see why Toho would aggressively police that copyright.
Minus One is legit a great film.
No, I can't. That makes it even less reasonable.
Edit: on the other hand, they apparently elected to use Godzilla as their logo, which kind of ruins the otherwise considerable unrelatedness.
Revzilla and Partzilla also had a long legal conflict over the *zilla name.
It's pretty clear that "zilla" is a genericised word suffix, cf "bridezilla", in English.
Whilst it seems to originate with Godzilla -- which honestly also doesn't seem to associate with a particular company but instead I would say it's a now traditional monster name in stories, like Dracula -- noone is confusing this with any Godzilla franchise. These sort of attempts to own a word sten, across trademark categories, are an over-step that legislators need to rein in IMO.
Does the recent Sky trademark battle speak to this?
This comment is entirely my opinion and does not relate to my employer.
This is a really weird take. Dracula is in the public domain, while every piece of Godzilla media is still copyrighted and trademarked to Toho, one of the big four movie studios of Japan.
What do you find “really weird”?
Dracula debuted in 1897 while Godzilla debuted in 1954.
Isn’t this the main reason one is public domain already and the other is not?
Meta also pursues trademarks applicants for trademarks ending in 'book' as well.
That seems a lot more dubious than the *zilla trademark.
oh crap
How would this even remotely relate to Godzilla or it’s copyright?
It’s not even close to a big scary nuclear fueled monster.
I’ll note that the only TM case they ever lost was against a company selling trash bags named ‘trashzilla’, partially because it did not constitute a danger to Toho’s business interests.
Edit: Uh, I missed the logo. Definitely a problem.