Lisp Game Jam Log #3

Screenshot of a very simple game level. I did not get quite as far on my game today as I hoped, due to distractions and other activities taking up time. But, I did write the level loader. You might notice that the level in the first screenshot here is the simple level from my last post.

Screenshot of a more complex game level.After I got the level loader working, I created a more complex and interesting level (shown here), to suggest some of the gameplay possibilities. The two players would start on either side of the water, and coins and gems would randomly appear at various locations throughout the level: up on the floating platforms (so players have to climb), hovering in the air between the platforms (so players have to jump and fall), and down in the water (so players have to dive down). The coins and gems would probably only last a few seconds before disappearing, so players would have to hurry to get them. Gems would be rarer and worth more than coins, so players would sometimes have to decide whether it is better to stay in an advantageous position near the top and hope that a gem appears (high risk, high reward), or leave that position to go collect more coins (low risk, low reward).

Here is the level in text format:

(prop title "Level 1")
(prop author "John Croisant")
(prop num-players 2)
(row (--- --- --- --- --- --- --- --- --- --- --- ---))
(row (--- --- --- --- --- --- --- --- --- --- --- ---)
     (T01 ~~~ T02 ~~~ T03 T04 ~~~ T05 ~~~ ~~~ T06 ~~~))
(row (--- PLT Gh- --- --- --- --- Gh- PLT GhL GhR ---))
(row (--- PLM --- --- --- --- --- --- PLM --- --- ---))
(row (--- PLM --- --- --- --- --- --- PLM --- --- ---)
     (~~~ ~~~ ~~~ T07 ~~~ T08 ~~~ T09 ~~~ ~~~ ~~~ ~~~))
(row (--- PLM GhL GhR --- --- --- GhL GhM GhR PLT ---))
(row (--- PLM --- --- --- --- --- --- --- --- PLM ---))
(row (--- PLM --- --- --- --- --- --- --- --- PLM ---)
     (~~~ ~~~ ~~~ ~~~ T10 ~~~ ~~~ T11 ~~~ ~~~ ~~~ ~~~))
(row (GM- GM- GHR --- --- --- --- --- --- --- PLM ---))
(row (GC- GC- GHr GHR --- --- --- --- --- --- PLM ---)
     (~~~ ~~~ ~~~ ~~~ P1~ ~~~ ~~~ ~~~ P2~ ~~~ ~~~ ~~~))
(row (GC- GC- GC- GHr GR- WT- WT- WT- GL- GM- GM- GM-))
(row (GC- GC- GC- GC- GC- W-- W-- W-- GC- GC- GC- GC-)
     (~~~ ~~~ ~~~ ~~~ ~~~ ~~~ T12 ~~~ ~~~ ~~~ ~~~ ~~~))

The T01 through T12 IDs indicate tiles where treasure might appear at random. They are scattered all around so players would have to keep moving. They couldn’t just camp in one spot and get lots of treasure.

If you compare this format to my last post, you can see that the list of tile IDs is now nested within the row s-expression. This makes the relationship more clear to humans (before it was ambiguous whether ids described the row above or below), and also made the level-loading logic simpler to implement.

Tomorrow I will start implementing players. That will be a lot more complex to implement than tiles were. I will probably need to implement a crude physics engine with tile collision detection. And eventually, I’ll probably need an animation system to handle the different player poses and animations.