The Alpha went very well for Lymantria Dispar. It feels really good to be able to say "Feature Complete" but everything is basically implemented in some form. It does need a lot of polish but other than that, there really isn't much on my end to do other than implement the final art for a few of the remaining assets (when the art is finished). The tools I created helped as well. For example, the story in our game works like this. You are searching for 7 items in the forest. When you find one, text shows up on the screen. Each item has 7 possible texts that will appear, based on the order at which you found them. So I was able to implement that before the designers were finished writing the story by creating a scriptable object containing 7 strings in a list. Then when you pickup an item, you tell it how many items you have picked up previously, and it will spit back a string which is then displayed on screen. This way, the whole story system was basically finished before the story its self was.
Another feature that was added basically last minute was random generation. We were planning for some kind of random generation from the beginning, but I wasn't sure how to implement it, so other things took precedent. But about 2 days before the Alpha, we decided on creating a tile system.
Basically I made a ForestTile object, and a TileGenerator script. The tile generator takes a bunch of parameters including "tile size", and "grid size". Then it has a list for each tile type; start tiles, item tiles, filler tiles, edge tiles, and corner tiles. It then in a double nested for loop, for each coordinate of the grid, it takes from the appropriate list. For example, when it is trying to place a corner tile, it will grab a random tile from the corner list. It will rotate the corner and edge tiles to always face inward (in case they have some kind of visual border like a fence). It will always place just 1 random start tile in the center, and it will place all tiles in the item tiles list anywhere that isn't a edge, corner, or center tile. It then fills up the rest of the grid with random filler tiles. It also rotates the tiles randomly (except for edge and corner tiles). Then to make things a bit easier, have Unity draw the grid and axis in real time as they are being edited in the inspector.
Next, in the editor for the individual tiles, I have it draw in realtime the bounds of the cell so that the designers can know if they are working within the cell or not.
In the inspector, I allow the designer to specify what directions the tile can rotate (ignored for corner and edge tiles), there's a field for max instances in case they don't want 100 different tiles that have a very obvious feature that would stand out like a cave. Player spawn is obviously only used for the start tiles and is used to specify where the player should be placed and what orientation it should be. This way the designers can have the game start with a random tile at a random angle, and still have the player facing the exact direction they want. In our case, we wanted the player to be facing a tree with the axe leaning against it for them to pickup.
Finally the biggest change (or at least most obvious change) is the fact that the game is no longer lowpoly. After mid mortem, we actually got an artist! So this is what our game looks like now:
There's still a few things that need updating. Those logs in the fire are still the same untextured brown rectangles we were using before, the fire is a work in progress and we are in the process of replacing the UI with something less arcady. But other than that, I am really happy with how the game is turning out. Thanks Max for the awesome art!