top of page

Get emailed new posts

With my new computer I did some testing for the new game, which I’ve named Swords vs Shields. There were fixes needed (both for players and spectators), but I think it should be working now. I didn’t get to test it much if the online connection isn’t very strong, but I’m hopeful. The one thing I failed to figure out is if both players draw from the same deck at the same time. What would happen is, since they do it at the same time, the players end up drawing the exact same cards. I didn’t find a solution, so I just fell back to, both players have their own decks, each with 1 copy of the 40 cards in the game (since it’s an online game I can get away with doing something like that). And with that, the game is now released.


There are 2 other things I meant to talk about last week in regards to making cards, but forgot. The first is what abilities should use swords, and what abilities should use shields. My original plan was that Defend and Attack abilities can use either swords or shields, and that would lead to some interesting choices. Do you spend all your shields and swords to attack or to heal, or some mix? Having a mix would also allow different cards to feel more distinct from another. 


But I decided not to do that too much. I didn’t want to have 2 resources that had no real identity, it just sounded more confusing than it’s worth. Splitting up when the resources are used gives them much clearer identities: shields defend, swords attack. I also didn’t want to risk it where the best thing to do is to always use your swords and shields on only defending, or only attacking. In the end, while I have a few Defend abilities that use swords, most of them end up using shields, and vice versa.


The other thing is about complexity. For many reasons, cards want to be as simple as possible. A card with 2 abilities to read is obviously more complex than a card with just 1 ability. Since cards with 2 abilities are forced (Play abilities have to go along with a Defend or Attack), the best I can do is to make both sides as simple as possible. And ideally the abilities have some connection (maybe by the card name) to make it easier to keep in your head. Usually that means wordier and complicated abilities have to be on cards with 1 ability instead. I think it mostly worked out, and besides games like Moon Colony Bloodbath have this issue too (a lot of buildings in that game have 2 abilities).


Finally, I think it may be a while before I make another online card game. The main issue to me is that they’re not as playable for new people. An action game like Relentless Waves can be played by yourself, the few rules it has can be presented in the game, it’s quick to play, and has little to translate. An online card game like Swords vs Shields requires a 2nd person to play with, has a lot of rules (to the point where the rulebook is external), it takes longer to finish playing a game, and there’s much more to translate. This all just screams, make single player action games and take a break from online card games for a while. Swords vs Shields can remain the capstone for everything I’ve learned from making online card games for 2023-2025.


Speaking of action games, I made a small update to All Shapes and Sizes. One thing that felt stupid was that you could get 2 gravity inverters in a row, and they would do nothing but waste time. I changed the game so if it would give a 2nd gravity inverter, it would just skip it. Another thing I tried out was saving a shape for later. My hope was that it would let you be strategic, but in practice I didn’t have fun with it. The best thing to do is save bombs for when you get a wall. Maybe there’s a way to make it fun, but I didn’t end up adding this new feature.

All the cards in the new card fighting game are done. I’m not gonna release it yet until I do some more testing (which I can do now that my desktop is back) and come up with a name for the game. While making new cards, a bunch of old cards had to change too (mainly with what resources they used and balancing), and I may continue to do that if needed. But also after spending 3 weeks making 40 cards, there are some things I learned.


First is that some ability types (Play, Defend, Attack) are more constrained than others. The first case is that Play is basically a once-ever Defend ability. I can’t make cards that only do something when played because then why do they stay in play? There’s no reason to attack or heal them, since they’ll never do anything. And since Play abilities overlap with Defend in what they can do (since they only happen in the Defend phase), there should be some reason why they aren’t just Defend abilities. This is especially true for cards that have Attack + Defend abilities - why not have it be Defend + Attack? This is all why even though I made sure to have an equal amount of Defend and Attack abilities, I ended up having less Play abilities since they have a higher barrier.


Another thing is that Attack abilities are more constrained than Defend, both in input and output. Both Defend and Attack cards can make you pay with your own resources (cards, actions, swords, shields), but only Defend cards can make you pay with health (from you or your cards). Attack cards aren’t allowed to do that, which means Attack abilities have 2 fewer options when it comes to payments. Another is that Defend abilities have more variety in rewards. Defend abilities can heal you and your cards, or give you more of the previously-mentioned resources. Attack abilities can’t give you any resources, they can only attack the other player and their cards. Making the other player lose resources on their next turn is allowed, but I didn’t end up making any cards that just make them lose resources. This technically isn’t so bad because attacking the other player is how the game ends, but it’s still a bit of a downside because it requires more work to come up with cards that don’t overlap with each other.


There is another downside to making this game. This is a game about units fighting other units, and I’ve already made several of those (Randomly Generated RPG, Fortress Siege). Which means inevitably there are some ideas that have been reused in one way or another (such as dealing damage and gaining health at the same time). And I don’t like reusing ideas, it’s why I try to make new types of games. In fact I even reused some card art, because the things in each of those games have the same obvious flavor of a vampire absorbing health. Anyways what this means is, I should probably take a break from making games where you fight enemies in a turn-based system, because 3 games of that is plenty.


Nevertheless, I am quite happy with how this game turned out. I think it’s better than Fortress Siege, since that game isn’t simultaneous, and I think the concept of Defend/Attack abilities worked out better than the Auras. Basically the only advantage Fortress Siege has is an AI opponent, which I decided not to put in this game since it’s a bit too experimental on top of me trying a new way to handle online games (plus I haven’t tried working on anything like an AI in over 6 months).


I ended up doing a few more updates to old games. Relentless Waves got one new enemy. My initial idea for it is that it shoots multiple spread out bullets that are like straight lines, and to avoid them you’d have to move between the bullets. It worked pretty easily, and I decided to theme it as a snowflake dropping icicles on you. I also made Slow and Steady translatable (it was even easier than All Shapes and Sizes), and improved the code to reduce errors in translations. I think I’ll also translate Chromatacombs, but ran out of time to do it today.


Finally it’s near December again. I don’t know if I want to do a 2025 collection like last year. I feel like that month would’ve been better spent if I just dedicated it to only working on Relentless Waves. 

Progress on the current battling game is going well. I’m now at 28 cards, and should be content complete next week. I also added a card gallery to let you check out all the cards. One downside is that since I don’t have a desktop, that makes it much harder to test any online things. I used to have my laptop and desktop both have Unity open, and then they can both connect to a room and I can try stuff out. But I can’t really do any of that stress testing for the moment, which may mean I have to delay the game in order to give me time to do that.


This week I also went back and updated a few other games. I think when it comes to my older games, the only ones I want to keep somewhat up to date are my best ones, which are Randomly Generated RPG, All Shapes and Sizes, and Relentless Waves. I think the code for all those games are also pretty bad by my standards today, but rewriting those games from scratch would be a poor use of time (especially since I’m not actively updating them anymore). 


For Randomly Generated RPG, there wasn’t much to do, other than fixing some (fairly bad) bugs, and improving some code that manages translations and spreadsheets. But I also decided to change how abilities for players are randomly selected. Previously it was just completely random, but I decided it would be more fair if there was something that reduced the chance that you get instantly stuck. Now the Knight will always have at least 3 attacking abilities, at least 2 ways to change emotions, and at least one way to change stats. And something similar for Angel and Wizard. 


For All Shapes and Sizes I also fixed a couple bugs, but I also made it work with any translations. Adding translations to a game after it’s done is usually super annoying and I don’t want to do it for any other game with lots of text (Randomly Generated RPG got a pass since it’s such an important game), but All Shapes and Sizes had less than 40 lines to translate, so I went for it.


Relentless Waves got a slightly larger update. Several months ago, when I was toying around with Relentless Waves, I considered adding a lightbulb enemy, where when you destroyed it the screen would turn black and you couldn’t see any bullets. At the time, I couldn’t figure out how to make that work. I thought I would have to manually change every bullet and enemy’s opacity every single second when they’re not immediately around you, which I didn’t want to do. But nowadays I know Unity better and I figured out an easy way to do it. I created a sprite that’s a giant black square with a transparent circle in the middle. In the game, I put the player in the middle of that circle, and I set that sprite to have a higher sprite priority than everything else in the game. Now the sprite covers up everything on screen, except for anything in the circle since it’s transparent. It worked out, except I changed the lightbulb to blacken the screen every time it’s hit instead of just once when it dies, to make it more annoying. 


I also decided to add an endless mode to the game. It’s always a wave of 6 enemies, and you keep playing it until you lose. One thing I’ve gotten less fond of about the game’s main gameplay mode is that it gets harder over time, but not meaningfully. Randomly Generated RPG adds more enemies every wave, but the enemies have different tiers, and you can make your players stronger. In Relentless Waves, the enemies are all the same tier, and you can’t make yourself stronger. This makes the earlier waves feel less important, like you could remove them and not feel like there’s any difference in gameplay. The endless mode makes all waves the same, which I think makes more sense for this kind of game. 


I also wrote a quick script to count the number of lines used in a project, and here’s some data:


All Shapes and Sizes: 886 lines of code, 17 scripts, 38 lines to translate

Relentless Waves: 914 lines of code, 28 scripts, 39 lines to translate

Randomly Generated RPG: 2912 lines of code, 32 scripts, 736 lines to translate

My current game: 2929 lines of code, 63 scripts, 167 lines to translate (all of which will increase over the next week)


The first 2 games are pretty small and simple. Randomly Generated RPG was my largest game, but a lot of the character abilities could be handled by spreadsheet instructions, which reduced the code and script count by a lot. All the cards in the current game are manually programmed, and it also needs to work online, which is why there’s a lot more code needed there. But I do think my current game’s code is the best out of all the games so far, and is also the most reusable for any future games that want it.

Thomas Tang (DZ)

tt2195@nyu.edu

+1 (646) 236-5503

Redmond, WA

©2025 by Thomas Tang

bottom of page