anarch/TODO.txt
Miloslav Číž 61b55ebb01 Update
2020-07-03 21:51:29 +02:00

181 lines
8.4 KiB
Plaintext

general:
- automatic tests: a frontend that will play the game, check the state, rendered
frames etc.
- weapon autoswitch: when a stronger weapon becomes available via picking up
ammo, maybe it should automatically be switched to (could have disable
setting)
- try to remove the debug flag (-g1) from compiler and see if it decreases size
- port to GB Meta
- music:
Probably just one long music track playing over and over -- KISS. The frontend
could have a callback function play_music_bar(n) which would be called by the
backend, the music track would be in sounds.h.
- level 2D map (with revealing, bitmap), special key for quick displaying map
- save/load (optional):
When a level is finished, the state at the beginning of the next one (health,
ammo, time, ...) is automatically saved and can be restored via load option in
the menu. This save as well as some other things (game progress, inagme
settings, ...) will be preserved even adter game restart if the platform
implements a saving function.
- more levels
- disable transparency for walls for performance (setting)?
- replace textures in distace with constant color for performance (setting)?
- add time slowdown constant
- if space left, try blurring (lerp) the level background, see how it looks
- some monsters could reflect plasma, i.e. not be hurt by it, but reflect it
back towards the player
- compile with different compilers (gcc, clang, musl, ...) and settings, make
a build script that creates multiple binaries (with different combinations of
compilers and settings)
- run on raspbery pi
- add jump pads?
- add robot deactivator item? (encourages "stealth" gameplay)
- add "pletivo" transparent wall texture?
- add universal corpse sprite?
- easter egg(s)
- optioal graphics enhance: vertical wall shading ("ambient occlusions")?
- option for disabling wall transparency, for performance?
- open door by shooting at them?
level ideas:
- outline:
1. City, player sees the big Macrochip building (a smaller one) in the
distance and has to get to its entrance. Beginning of the level is linear
and serves as a tutorial, things like exploding barrels or acess cards are
explained.
2. Inside Macrochip smaller building. End leads to an elevator that goes
under the ground.
3. Warehouse:
4. Factory:
5. Small boss level:
6. City, player is on the other side of the smaller Macrochip building, the
level partially overlaps with level 1, but the player can now go further.
Big Macrochip HQ (skyscraper) is seen in the distance, player has to get
to its entrance.
7. Inside skyscraper, 1st floor.
8. Inside skyscraper, higher floor.
9.
10. Final boss level: on top of the skyscraper, player climbs up in a spiral
towards the roof. There is a boss (or two) on the top with a few smaller
ones, the exit is blocked by a lot of trapped warriors which the player
has to slowly kill, which means he has to first get rid of the other
monsters.
- ceiling with "holes" through which sky (background) can be seen -- can be done
by having the ceiling texture set transparent and then alternating ceiling and
no ceiling
- boss level: skyscraper top, player goes upwards in a spiral along the OUTSIDE
side of the skyscraper
- two levels could partially overlap, e.g. level one, a city, could overlap
with a later city level, the player could recognize he's e.g. on the other
side of a channel or a wall that he was before
- invisible maze
- wall made of elevators (or squeezers), serving as a big auto-opening gate
- a key spot to which the player can only get by jumping from a distant high
elevated place
- player has to jump from one elevator to another, which can only be done when
they're both moving down
- multiple doors in a row (can look interesting)
- narrow (1 square wide) corridor filled with enemies blocking it
- narrow (1 square wide) corridor blocked by barrels that have to be exploded
- teleport on elevator?
- teleport at the bottom of a 1 square narrow hole, by jumping into the hole
the player gets teleported
- narrow corridor with elevator
- maze from walls and/or props
- narrow bridge with platformer elements over a hole full of enemies
- server room
- window (low unpassable ceiling) through which finish can be seen from the
start location of the level
- three locked doors in a row at the beginning of the level, the player has
to go to three different locations for each key -- a "hub" level
- office building
- plasma bots guarding a big stock (store) of plasma ammo
- warrior (enemy) right before the player at the start of the level
- T-shaped corridor in which two rocket-firing enemies stand facing each other
so that the player can kill them by stepping between them, letting them fire,
then stepping back, making them kill each other
- enemy trapped between barrels
- teleport that leads to another teleport which is on a single high elevated
square from which the player has to jump down and won't be able to return,
making it a de-facto one-way teleport
- teleports placed so that the player can shoot himself with a rocket or plasma
(for fun)
- exploders in a maze, hiding behind corners
- teleport leading to a center of big room full of enemies
- easter egg -- a level that looks funny on the map, e.g. forms a text or a
picture
- squeezers with low-elevated base (a hole), on a side of a corridor -- if the
player is curious and jumps in, he's doomed to die -- perhaps there can be
many of them while one is in fact an elevator, which the player has to spot
and take in order to advance
- bullet-shooting enemies behing windows (low ceilings) in rooms that can't be
reached
- locked door that cannot be unlocked at the beginning of the level as a
visual indication of entrance
- elevator in a narrow (1 square) vertical hole with doors at the top and
bottom, looking like an actual elevator in buildings
- player goes through a difficult platformer section and at the end has to make
a choice between going to the left and right by jumping in either direction,
takes card and has to go through the whole section again in order to also
take the other one
- big platform made of elevators that moving in a short vertical distance,
giving an impression of a shaking, unstable platform
- warrior and/or exploder right behing doors
- tight maze made of barrels filled with warriors in which the player has to
only use knife in order not to explode the barrels and hurt himself
- enemy on an elevator that doesn't stop at aligned with the floor, so that
the enemy is "trapped" on it and only appears briefly to shoot at the player
- barrel on elevator
- platforming vertical section in which the player is going upwards out of a big
hole
- level with a lot of closed doors, done by including a door texture in the
level wall textures and then sing it for "fake" doors
- invisible bridge (perhaps not straight) made of bleckers (invisible walls)
over a hole, leading to an easter egg
- start of level: a corner blocked by an invisible wall, to indicate entrance
- small pyramid from diffetently elevated floor tiles
bugs:
done:
- add headbob
- add blinking
- make zBuffer 8bit only?
- texture coords of floor walls should start from the floor? NO, CAUSES ISSUES
- vertical visual noise when standing on elevator
- sprite positioning inccuracy
- try to compress images: store images as 4 bits per pixel + 16 color palette
(subset of the 256 color palette), check if performance stays ok
- custom font
- make barrels explode
- enemies
- weapons
- sounds
- add enemy moving/dying sound
- create tables for monster and weapon stats in constants.h and read from that
instead of cheking with ifs
- check if monsters are hit by bullets from completely up close
- menu
- GUI
- make enemies not move through items:
create a 2D bit array saying at which squares there are colliding items, then
check collisions for both player and monsters against this array (elevate
these squares for collisions only) -- will also be faster
- more level prop items
- let player start with 100 HP, but allow for collecting a higher amount, e.g.
up to 150.
- limit maximum ammo amounts
scratched:
- try to make z-buffer 3 line instead of 1D, possibly like this (to keep
performance):
- at compile time selct X = power of 2 closest to vertical resolution
(or something like that)
- in pixel funct do something like
if (pixel->y % X == 0 && pixel->y != 0)
write to z-buffer