Log In  

EDIT: Hello all, this game is live now.
You can play here:
https://www.lexaloffle.com/bbs/?tid=46758


Welcome all,

Thanks for checking out my game!

  • GIFs:



I created this game after being inspired by a Halo CTF fan game I played on the internet back in the 2000's. The goal is to grab the other team's flag and return it to your flag.

In the game you will be selected to a random team and a random map. You need 3 coins to obtain a gun. The game is over after a team scores 4 points. You shouldn't attack your teammates if you want to win. 🤷

Tidbits

I implemented a main menu, but the game is TINY by nature so I ended up removing the menu. There is a pause menu, you can quickly return to the main menu from there if needed. The jump button is playstation X button on my controller, hopefully that is good for everyone.

Speaking of menu options, there are few bonuses in the pause menu if you can find the cheat code. Most of you will know it by heart -- especially fans of Contra. up up down down left right...anyway...

One more bonus actually, from the PICO-8 editor, you can tap into what's left of the main menu code to get 32 players 😊. PAGE 1, LINE 1642. Here you can increase the number of players, turn off coins, change maps, change teams, change camera, number of points, etc. If you dig in a little, the respawn timer is pretty easily configurable too. Ideally, the maps should be easy to mod also - but keep in mind that the AI is tightly coupled to the tile spacings I have used. More about that later.

  • built-in mods
    -- howdy yall, you can go ahead and hack in here:
    mapsel = rnd(3)\1+1
    winat = 4
    my_team = rnd(2)\1+1
    --num_maties = 16
    --num_zombies = 16
    coin_feature = true
    zoom_in(true)

7923/8192 tokens, 56kb, 90% compressed size, 1839 loc.

Development Log

I upload my progress pretty frequently, just because I want to test on mobile every so often. It makes it easy to look back on the process too. I have a lot of room to improve, no question there.

This project's code didn't begin until I found a sprite sheet I really liked. I found the sprites on itch.io and reached out to the creator. He was a super supportive and friendly guy. He praised my palette selections even before I changed them 2 or 3 more times. Palette swapping can be tough man.

So besides changing the palette a bunch of times, I also changed the maps and AI a lot. I was pretty sure I needed a large map to make this game fun, but I was wrong about this. I started with a full size map and then broke it down 2 more times. It is hard to get the pacing of a game right, and map size is pretty critical to that.

I changed the AI nearly every time I worked on this game. It wasn't until near the end, when I implemented the butt bounce thing, that I felt the game was decently paced. Combat was pretty awkward without the butt bounce because battles could go on for over a minute sometimes. The 64x64 camera helps with hiding some dumb decisions the AI makes. Its not really AI, it is just a few simple conditional statements that help the computer move the characters around. There is some redundancy in there too, it isn't my best code. Here's why:

For the first month or so, I created a very complex map and intended to use an A STAR algorithm all throughout the map. I figured that I could build some traps into the map and do some chasing and all of these things would be challenging but achievable. I am still not sure really. There seems to be a massive load on the CPU with A STAR. I mean, I didn't get far at all with coding it, but I wasn't inspired whatsoever by my heuristics/optimizations. It seemed like I was just going to loop forever on every combination of nearby tiles. I was just going to path find to the edges of the screen, not the map itself, but even that is a huge number of combinations.

So, I built a monstrous decision table to help the guys navigate the map. In itself, this was kind of challenging. Pixel perfection, state maintenance & timers, and all that stuff...a simple jump might require 10 rows on the decision table. It wasn't buggy really, but it ate tokens and was hard to test and update.

Deciding to minimize decision table usage, I made the map simpler. It can be fun actually to traverse simple maps in game play. Probably, it is more fun. I worked over the map many many times. I still feel that a level design expert could do something awesome given the same constraints but I'm satisfied anyway. The constraints alone were hard to discover. I have a big rectangle and if you're in it I chase you or else I go for the flag -- randomly choosing a ladder and doing a jump at every wall. If the immediate path has any blockage, the character is going to get stuck so I have to be careful that each 3x4 tile rectangle is passable. That is the gist of it.

When I finalized the maps, they were simple enough that I didn't need any decision table or path finding. I still had the decision table in there somewhat because it was driving a lot of NPC button presses. I think I never completely eliminated the decision table logic, it just kind of dissipated into different places. That's why there is some redundancy. It chooses directions like 3 times. Not a big deal.

I can't really think of much else special about the mechanics involved. Map flags are used for almost all collisions and are kept in handy little reusable functions. Wall, ceiling, floor,ladder have different combinations flags. Anything that needs a timer is written in a coroutine. Coroutines and closures are super convenient, metatables have not been so useful to me yet...

Overall, it was a pretty fun process. The best part is getting familiar with the tooling. Sometimes you can imagine and implement a huge feature in no time at all. You come back days later and start testing, and kind of sit in disbelief at what might've gone through your head last time haha. In a good way!

Thanks again for taking the time to read this. WIP carts below.

Work In Progress Carts


Cart #redafazupu-0 | 2021-11-22 | Code ▽ | Embed ▽ | No License


VERSION 0.0.0
commit dc619f67a363b6193af76d312e63f68c28e7eb69

Cart #redafazupu-1 | 2021-11-22 | Code ▽ | Embed ▽ | No License


VERSION 0.0.1
commit 626fdbe076a348833761e5670ea5c4ad37f38389

Cart #redafazupu-2 | 2021-11-23 | Code ▽ | Embed ▽ | No License


VERSION 0.0.2
commit 68880ba897ec585bb25443689ac36c4d3ca0f69b

Cart #redafazupu-3 | 2021-11-27 | Code ▽ | Embed ▽ | No License


VERSION 0.0.3 (2718/8192 lua tokens used)
commit 1b08e55d98269bc82e81f4ae455f8417c0d88567

Cart #redafazupu-4 | 2021-11-28 | Code ▽ | Embed ▽ | No License


VERESION 0.0.4 (3897/8192 tokens)
commit cfb5af1b2d433bc1061c694f3a75e232974f9f0f

Cart #redafazupu-5 | 2022-01-03 | Code ▽ | Embed ▽ | No License


VERSION 0.0.5 (4998/8192 tokens)
commit be11fb883a0862ae2126c6ef3bdcee42bf9fa317

Cart #redafazupu-7 | 2022-01-24 | Code ▽ | Embed ▽ | No License
7


VERSION 0.0.6 (5813/8192 tokens)
commit 63c161a04badb8561965dc486244e89c63aa1879
(posted publicly https://www.lexaloffle.com/bbs/?tid=46297)
(sorry for the repost!)

Cart #redafazupu-9 | 2022-02-02 | Code ▽ | Embed ▽ | No License


VERSION 0.0.8 (6391/8192 tokens)
commit 242de98e3bb363ab4251173e8f09a15758837e4b

Cart #redafazupu-11 | 2022-02-13 | Code ▽ | Embed ▽ | No License


VERSION 0.0.11 (6977/8192 tokens)
commit 9f5a5c6334ecb0d830d96ed4df6e464fa294a914

Cart #redafazupu-12 | 2022-02-15 | Code ▽ | Embed ▽ | No License


VERSION 0.0.12 (7786/8192 tokens)
commit 0c76ce992fc4e01b87fc65718722e5aef0012895

Cart #redafazupu-14 | 2022-02-26 | Code ▽ | Embed ▽ | No License


VERSION 2.0.1 (7923/8192 tokens)
commit 0927361b676c4f821da1b96fd4d94a4aa66ea0b6
(official BBS release 1)

P#107706 2022-02-26 21:23 ( Edited 2022-05-19 10:02)


[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-03-28 10:17:15 | 0.017s | Q:36