Software and Game Development

I've developed a computer version of Lucifer's Pastime, probably the only feasible way of actually playing it. I used the godot game engine and barely knew what I was doing. I figured it out as I went along. Here is a record of updates and comments made during the development. All game resources are now in the git repo linked on the home page, so this is here for archival and communication purposes only. I may or may not update this project.

If you find any bugs while poking around the latest version, I'd really appreciate it if you told me here: http://tohno-chan.com/cr/res/3150.html

11/19/21

Updated the website. If I end up making another client, here's a list of changes to the gameplay I'd make: reduce starting mp to 140, make sacrificing a means to circumvent no summoning zones, make ritually summoned pieces cost no mp, reduce the mp cost of queens to 30.

I'm also considering shrinking the board down to 9x9, the same as shogi's. I'm on the fence about this. After actually playing the game, most of the board's middle section feels like a no man's zone. A total waste of space rather than something you'd want to control(like in chess). Maybe there's some possible strategy that can utilize all that space, but my first impression is that it bogs the game down. If I make this change, sylph will also have to be adjusted.

11/7/21

After playing the game with a second play tester and receiving their feedback, there are other changes I'd like to make to the game. Before that though, I'll add more to this website, mainly a "fast startup" guide to reduce the intial hudle of getting into the game. That can be done quickly. I'd also like to make another client and include artwork in it, to give the game more identity and visual appeal. That's definitely more of a long term goal. After updating the site, this project will still be on the back burner, but I do have plans for it. Thanks again to the second play tester.

10/5/21

I've made a git repository for the source code and resources. Any future changes will be accessible there. Should have done this from the start really.

7/22/21

Here are the updated scripts in the first "patch" I've made. Hopefully this will fix the issue mentioned in the last update. There's also been some convenience added since now parantheses or square brackets can be given to the notation's text box and deck editor's.

https://files.catbox.moe/9m73oz.zip

7/20/21

After playing with a kind playtester, I've discovered a critical bug in the notation script. The get_cell function is passed too information and that screws things up. I have a general idea on how to fix it though. When I do that, I'll update the client upload and post the updated notation script. From now on, instead of reuploading the whole project for every change I make, I'll just post the relevant scripts.

7/11/21

Highlights: Deck viewer added, clicking to copy notation output, a few gameplay changes, lots of bug fixes.

(all parts are needed to extract and they have to be renamed to the same thing except their extension)

https://files.catbox.moe/bgykoy.001
https://files.catbox.moe/5jin3m.002

Well, we're here. Over the course of about 3 months, I've developed the game to a point I'm satisfied with. Five months since I initially came up with the idea after dabbling in yugioh and wixoss(which I'd recommend if you have time and are okay with an untranslated game). What I've made isn't perfect by any means(the icons are blurry and I can't figure out why), but I hope the effort and hours I've put in show through anyway.

Aside from the mentioned highlights, too many other things and little touches have been added for me to even remember them all. The changes in how a few pieces move and their cost we're done out of gut feelings I've had for a while.

So for now, this is it. The executable client has been released. I will update it if I notice a bug or one is brought to my attention, but feature-wise this is all I have planned. Thank you to everyone who's been following this project and given me encouragment and advice. I'm not sure if I would have even finished it without that.

7/5/21

Highlights: All notation input features implemented.

(multi-part upload is because my connection sucks; all parts are needed to extract and they have to be renamed to the same thing except their extension)

https://files.catbox.moe/0ejgag.001
https://files.catbox.moe/ao79xm.002
https://files.catbox.moe/v2kczb.003
https://files.catbox.moe/l49eus.004

As of now, it should be possible to play the game remotely by exchanging notation. The intention is for all in-game actions to be doable through notation input. You can also add player decks before a game via notation input, as you can see in the sample start file. Resurrection, regicide or field of blood might cause an issue. I did not test their monstrous if statements in Notation.gd. If somebody encounters a bug, I'd appreciate being informed in the thread linked above. Questions are also welcome

After this, there's a few more things I want to add like being able to see player decks during a game, a new game option, flipping the board depending on which player is "you", etc. The next update is the final one I plan on doing with certainty and will include executables. Addtional features and gameplay changes may or may not happen. I will update the game to fix any bugs though. (note: alt + space is the spell keyboard command now)

6/19/21

Highlights: Summoning and Movement notation partially implemented, visual improvements.

https://anonfiles.com/J3Icd22cub/luciferspastime_godot_zip

Thanks to the split function, notation input seems doable. This update is a proof of concept. By the next one, I'd like notation to be finished. The other changes are purely cosmetic. You also need to press shift now to view no summoning zones and cell coordinates(simplest way to prevent conflict with notation input). After notation is finished, there a few quality of life features I want to add, but after that I'm pretty much finished for the time being. It would be nice to have computer ai and stuff like that, but that's really above my pay-grade. Someday though I might return and add those things.(note: the scaling of the context menu seems messed up here. This can be fixed in Context Menu.gd by changing the two numbers there).

6/12/21

Highlights: Spell Cards Finished, rudimentary win condition added.

https://anonfiles.com/Z9Xfca13u8/luciferspastime_godot_zip

With this update, every single core gameplay feature has been added. It's technically possible to play the game now if you've got another person at the computer with you. I tested all the spell cards, but not that thoroughly, so there may be player-specific bugs. By now, I have enough confidence to say Godot isn't optimized for turn-based games. Using the yield function is unavoidable, but it's really cumbersome and broken. Its documentation is also inacurate. This has been a problem for years now and it's still not resolved.

The way I've coded things, where lots of complicated checks are preformed constantly despite not being needed most of the time, and most of the spell cards' logic being contained outside of its scripts, kind of bothers me. It works and I don't know if there is a better way to do it, but it feels wrong and clunky. Signals are a deceptively useful tool Godot has. They do simplify interaction between "nodes", but they make things a bit of a clusterfuck, especially when you have a lot of things going on at the same time, which necessitates a specific usage of yield that makes a global timer that runs out after something small like .1 seconds. It's messy.

Anyway, my next big target is notation. I'm not even sure if I'm capable of adding this feature. It's almost like remaking half of the game in text format, and adding a custom way of parsing text, which I'm not sure is even doable. I'll make an attempt though. Sample deck: [[0,1,2,3,4,16], 4]

5/25/21

Highlights: Current piece ammount and mp restrictions added, first spell card added.

This is admittedly a smaller update than usual, but an important one nonetheless. The spell card I programmed is Royal Banquet and it's actived by pressing the space button. The foundational logic for spells is done. Implementing spell cards into the selected deck will take more thought. A lot of "core" scripts will need to be updated with "has x card been used" variables for more complicated cards. I can see lots of return statments and headaches in the near future. As of yet, I haven't heard any comments about the quality of my code. Is it inefficent spaghetti, or is it not too bad? I have no clue, but at least it works. I wont release the next update until every spell card is finished.(Note: line 40 of the Release script needs another indentation)

https://anonfiles.com/HeBfT4x3u7/luciferspastime_godot_zip

5/17/21

Highlights: Deck Editor implemented, first turn implemented, sacrificing finished.

It's now possible for players to pick their own pieces, one of the most key gameplay components. I'm not too sure about how intuitive the ui is, but to briefly explain it: first you set a p1 deck and p2 deck, then you can start a game. Having to press the "start game" button may seem superfluous now, but in the future this will include more options, which will likely be in a pop-up. The first turn with its 16 optional summons are now in too. Lucifer's Pastime feels more like an actual game than ever before. To be honest though, I'm getting kind of tired of it. Maybe being the creator of something hampers your enjoyement of it. I'll try to see the rest of this project through to the end, but future updates might take longer. After it is finished, it still needs to be play-tested. I don't know if I'm up for that. Sample for deck text edit, just hit enter: [0,1,2,3,4,16]

https://anonfiles.com/l4RbBaw6u0/luciferspastime_godot_zip

5/11/21

Highlights: Movement highlighting added, no summoning zones implemented, sacrifice distance implemented.

It's now possible to see where a piece can move while you're moving it, a much needed feature. You can also see a player's no summoning zone by pressing 1 or 2 accordingly(press again to hide it); this updates every turn. There's more to be added to sacrificing, but the first part is done. Then a set-up "turn 0" is next to pick a deck, and the players' first turn. I think spell cards will be the hardest core gameplay feature to implement and test. After that though, the game itself will essentially be finished.

https://anonfiles.com/XbX998veu0/luciferspastime_godot_zip

5/5/21

Highlights: Piece-specific movement implemented, mouse bug fixed.

Movement was logically challenging to implement. I haven't tested every piece, but the general system works as far as I know. No summoning zones are my next big target and their implementation will be similar. I've also changed red oni and blue oni to be more symmetrical and hopefully "balanced".

https://anonfiles.com/57cbGdu4u7/luciferspastime_godot_zip

4/29/21

Highlights: A context menu has been added, rudimentary movement, capturing and sacrificing has been implemented, previously mentioned bugs fixed.

At this point, I think most of the lowest hanging fruit has been taken care of. I'm surpised I managed to get this far. A month ago, I didn't know if this would take months or years, but now I can actually see a full game on the horizon. So far, the beginning of development had the most bumps and hurdles, but after getting the hang of GDscript more or less, it's gotten far easier. Godot really makes a lot of things simple. It's cross platform, so I had to make a context menu "from scratch" with my own graphics, but the pre-made nodes made the process simple nonetheless. Movement was trickier to implement. There aren't any noticeable bugs and it seems reliable enough, but I can't guarantee it wont break for some hard to reproduce reason. (note: on line 53 of the sacrifice script, I put a '-' instead of '=', realized this after uploading file)(note2: the mouse picks up a piece when it clicks and drags it, but also when it releases its left click on it too. This is the crux of the problem with movement)

https://anonfiles.com/L599F2t7u0/luciferspastime_godot_zip

4/23/21

Here's the first update. Highlights: Files are better organized now, a basic turn structure has been created, a graphical element has been added to summoning. I've also added a mouse hover animation to the board, which looks pretty nice. Summoning fails often because the mouse enters a cell at the same times it exits one, and information about a cell/lack thereof is sent when the mouse enters/exits. Using a script for the mouse itself to get this information might be a fix for this. Having a script for each cell is a pain, but for certain things it seems necessary. At least the animation works perfectly.

https://anonfiles.com/r15cG8s9u2/luciferspastime_godot_zip

4/16/21

https://anonfiles.com/31Q958rfu7/luciferspastime_godot_zip