A Mid-Mortem: How We Got Here and Where We're Going: Part 1
I started working on this game intending to participate in the 10 day game jam from GameDev.tv (https://itch.io/jam/gamedevtv-jam-2023), where the theme was "Life in 2 dimensions". After a few days of working on this project though, I realized that I wanted it to be bigger than what I could accomplish for the game jam, so I decided to stop building with that deadline in mind and instead focus more on the quality of my work. Now after 5-6 months of working on it, I'm writing up this mid-mortem to add some color to the progress I've made and share some of the screenshots and milestones along the way. This isn't an end of the road, just an opportunity for me to comment on how the project got to its current state and, frankly, to make use of the screenshots I've taken along the way.
It's probably worth pointing out now that I'm writing this whole post in November for a project I started in May. There are a lot of details I just straight up don't remember, so I'm going to be piecing it together mostly from my screenshots and git commit history, including things from handwritten notes here and there, and gluing it all together with a mix of memory and speculation.
(5/19)Day0: The day the game jam started I found out the theme and then went out for drinks with friends. Over drinks we talked a bit about the game jam and actually bounced some ideas around that helped me make a decision about what kind of game to make. I was initially pretty interested in creating some kind of deckbuilder, so I took that idea as one dimension and decided to combine it with a 3d board game for the other dimension. One core aspect of that version of the game was that it was a virtual board game, so everything that could be done in the game could also be done sitting at a table. Eventually I decided to drop the virtual boardgame idea, and a bit later I decided the cards didn't fit in anymore either, but that's where it started.
(5/20)Day1: The next day I sat down at some point and created a new project, added in a really simple UI with navigation between two scenes, and then called it a day I guess. I probably had something else going on that day. I also have some handwritten notes on my desk with initial designs, I probably wrote that all up on this day. Here's the key points from those:
Play cards each turn:
- spawn units
- move units
- create terrain - place a new hex
- modify terrain ( add resource(farm), mountain)
Dueling (or battle) game
Objective: capture enemy base
Gameplay:
- Not RNG based, strategy game (*but what about cards then?)
- To avoid ever getting 'stuck', home base generates some kind of useful point each turn
- Cards have a 'cost' to use them
1. Why buy cards?
2. What cards do you start with?
a. What do you do at game start?
- Develop the map ( place terrain, modify terrain)
- spawn units
- move units
b. what do turns look like?
- collect resources
- play a card to move units
- place a new terrain hex
- spawn a unit
Terrain
Dirt : allow movement
Farm: Dirt + population point per unit
Mine: Dirt + construction point per unit
Mountain: No movement
Free Points: uncategorized
(terrain) construction points: build + modify terrain
population points: spawn units
(5/21)Day2: I actually got to work on day 2. Now I've never actually done anything with blender before, but I figured it would be worthwhile to learn how to create a 3D hex for myself. Turns out there are tutorials for that all over youtube. So that was great, I created this model and imported it into my Unity project:
Now that I had a model I got to start writing some code to generate an actual gameboard. I have some handwritten notes for the math to position the hexes where I wanted them, it took a little time to figure out but wasn't terrible. There are some great resources out there if you do some light google searching. I played with some different board shapes and eventually settled on a 5x11 grid with the corners cut off. When you look at the result it doesn't look like it's 11 hexes deep, but that's because each 'column' is only using every other row when drawing hexes. That's a bit vague but I don't want to go into detail here about how I'm generating the grid. If you're interested reach out to me and I'll tell you about it or write something up.
Anyway, with the hexes being spawned in where I wanted them, it wasn't very interesting to just look at a bunch of identical hexes without any color variation. I added in a few different terrain types and gave each one its own corresponding material. From there it was really easy to just randomly set the terrain type when spawning in a new hex. I think it's worth noting here that I knew at this point that I wanted hexes to all spawn in as 'empty' and doing this random type selection was just a quick way to make development easier on myself.
(5/22)Day3: Looks like I did a few things on day 3. First off I made it possible to change the hex terrain type when it was clicked. That was just quickly proving to myself that I could change the terrain appearance. Then I added in some simple models/prefabs for a player base and starting unit which spawned in on the starting hex when the game started. After that I got into the multiplayer networking. I decided to use Mirror, a library I'd learned about before in a Udemy class (from Gamedev.tv) and used before for some experimental projects. For now at least I'm not going to dig too deep into what I did with it, but by the end of day 3 I had the server and client connected and both spawning a base and unit. There were still some issues though with the state differences between the two (they weren't in sync).
(5/23)Day4: I don't have any screenshots or commit history here, maybe I forgot to commit, or maybe I was busy with other things.
(5/24-5/25)Day5-6: Worked on syncing things between the server and client. Still re-familiarizing with Mirror at this point. I got the board state in sync between the two, but not yet the actual player colors, so you can see the player colors set on the server(right), but not the client(left).
(5/26)Day7: I made the Empty hexes transparent to make them actually look empty-ish, and got the player colors in sync.
then I added the starting unit back in and got that syncing too
at that point I switched gears a little and got the initial board state to initialize with all empty hexes (except for starting hexes) and took the following screenshot after doing some terrain-changing in-game.
(5/27)Day8: (No commits or screenshots, this might have been the day I decided I wasn't doing this as part of the game jam anymore)
(5/28)Day9: Movable Pieces, it's starting to actually be a game. Starting. But both players were able to move their unit at this point.
(5/29)Day10: The position of the 'tabletop' was bugging me so I re-centered it so the server and client players had a more similar view.
before:
after:
I also added in some key gameplay features here like:
- end-turn button (and the concept of turns)
-game-over logic (when your unit gets to your opponent's base, you win)
- block movement to an enemy-occupied hex
- only allow unit movement to an adjacent hex
At this point the game jam was over and even though I'd already decided not to worry about it, I had a playable game that was heading in the direction I had set out for initially, even if it was still a much simpler version of what I was imagining.
Here it is at that point:
Get Topoforma
Topoforma
Development Build
Status | In development |
Author | soclosesam |
Genre | Strategy |
Tags | Multiplayer, Turn-based Strategy, Unity |
Leave a comment
Log in with itch.io to leave a comment.