-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTODO
218 lines (212 loc) · 10.4 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
\ : Complete
* : Not Yet
x : Will not / can not do
REFACTORING:
\ make a preserve/restore all registers macro
\ move common macros (add_multiple, preserve/restore_registers, etc) to common file
x move common procedures (are there any?) to common file (there were none)
\ compress centipede::dir and centipede::lastDir to one byte
x move everything to individual modules (.inc files as interfaces instead)
\ split move_centipede and collide_centipede?
\ transpose centipede data structure (list of struct -> struct of list)
\ for centipede map, temp store segment in a ZP variable, then write back after function
\ undo this, just use the Y register, make the segment arrays public
\ start using oam_used for sprite memory management
\ increase player speed (requires changing location representation)
\ draw centipede head on next segment not alive, rather than a flag
\ split centipede file somehow (centipede / segment?)
\ start passing function parameters on the stack to save static memory
\ figure out why the header guard for macros.inc isn't working
instead of .define HEADER_INC, use HEADER_INC = 1
\ find a way to put all of the event stuff in the same file
\ find a way to make game state stuff easier, one macro to change game states
\ general organization
\ move strictly game related code to a folder, make a common header
\ clean up all the old stuff I didn't use (Move somewhere else, it can be useful)
x move a bunch more stuff to core, make a common header
nah, maybe make a NES folder and header that includes a bunch of stuff?
\ export empty procedures that only exist to satisfy interfaces as the same address to save code space
x redo how OAM organization is done
improper allocation is probably causing the particle end of level issue
^ dear god no I tried this it's not happening in this game, maybe the next one
\ track status of all enemies in one spot, to simplify level advancement
x move shoot sound to noise? Would fix a lot of stuff
DEVELOPMENT:
\ move and properly draw multiple centipede segments
\ create proper centipede sprites
\ head drawn differently from body
\ directions drawn differently
\ Left/Right
\ Down
\ add centipede <-> arrow collision
\ kill centipede segment that was hit
\ create mushrooms on centipede death
\ add mushroom <-> arrow collision
\ reduce(?) mushrooms on hit
\ add centipede <-> player collision
\ create proper sprite for arrow
\ compress player to 1 sprite
\ create proper sprite for player
\ Fix all the color palettes
\ animate centipede
\ animate centipede better
\ keep track of score, lives, etc and display on a status bar
\ score
\ lives
\ new lives every 12,000 points
\ new life music jingle
\ make centipede kill player
\ player death animation
\ level reset
\ level advancement
\ palette color change
\ change palette setting to properly color levels 5+
\ menu screen before starting
\ game over after all lives are expired
\ return to menu screen, reset score
\ change centipede speed with levels
\ move segment faster when only one segment is left
* change centipede waves with levels
level 1 has 1 centipede of length 8
level 2 has 1 centipede of length 7 and 1 severed head
level 3 has 1 centipede of length 6 and 2 severed heads
and so on, until it starts over
\ make centipede move diagonally, not just down on collision
\ make centipede move back upwards once reaching the bottom
\ repair damaged mushrooms when death occurs
\ 5 points for each regenerated mushroom?
\ sound
\ sound
\ centipede walking around
\ arrow shooting
\ centipede getting hit
\ player death
problem: CAN'T FIND DETAILS ON WHAT SPIDER OR EXTRA LIFE JINGLE IS
\ spider
\ base behavior
\ spawn randomly
\ destroy mushrooms
\ jingle/music/sound/whatever
\ proper scoring (900 close, 600 mid, 300 far)
\ scoring particle effect
* variable speed with points?
\ better mushroom hitbox
\ moves much more erratically (see video)
\ particles when an enemy is shot
\ scorpion
\ base behavior (move slowly across the middle of the screen)
\ spawn randomly after wave 3
\ poisons mushrooms
\ centipede moves straight down after reaching a poison shroom
\ sound
* variable speed with points?
\ flea
\ base behavior (2 hits to destroy, moves straight down, moves faster once hit)
\ creates mushrooms on the way down
\ spawn randomly after wave 2 if less than 5 shrooms in player area
\ sound
\ player collision with mushrooms
\ pause game on start press
\ move faster with B (to replace track ball)
* start centipede moving down in the middle of the screen
\ high score
\ show high score while playing
\ show high score list on menu
\ input high score name
\ save to cartridge
PROJECT MANAGEMENT:
\ Update README
\ Document change in graphics tools
\ Remove old python tools for graphics
\ Put on Github
\ Double check and delete bg.s
\ set up releases with built .NES file
\ 0.7 = scorpion, 0.8 = flea, 0.9 = misc cleanup, 1.0
\ online demo with JSNES
BUGS:
\ weird things sometimes happen when drawing new mushroom background objects
Draws extra mushrooms one spot to the right of where they should be
Does not occur on online demo?
\ bg flickers on PPU nametable update (?)
Flickering only occurs when also drawing the centipede...?
It was some screen wrapping PPU hardware implementation stuff
\ previous segment head flag not always set on next segment death
see "fix centipede splitting up unnecessarily"
\ player can wrap around the screen to the left
\ fix centipede splitting up unnecessarily when a middle segment is hit
Wait until diagonal movement, that might fix it. Update: did not fix it
Creating mushrooms one space ahead of where the segment was killed now
\ JSNES screen bounds don't match FCEUX screen bounds
\ head is 100 points, other segments are only 10
\ sometimes player dies or level is instantly completed on game start
probably because variables in playing state aren't initialized properly
\ reset color palettes on menu -> game over
x centipede still doesn't quite move right when moving straight down
Not when moving straight down, but when running into 2 mushrooms
diagonal from each other
Not worth it, works for everything but this corner case
\ spider sprite sometimes disappears
\ centipede's hitbox is very messed up
\ centipede sound continues even after it's dead
\ level transitions if and only if centipede is dead, should also include other enemies
\ enemy death particle stays on screen if it's the last enemy to die
just reset OAM DMA RAM every frame
\ background flickers for 1 frame in menu -> playing transition
\ palettes get messed up on level up that requires palette color change
moved palette change to vblank
\ can't make more than 1 board bg change per frame
set up an array of changes to be made, loop through them every time
\ scorpion hitbox
\ player sprite doesn't disappear on death
\ weird things happen to the spider when it collides with player
\ scorpion doesn't reset on level restart
\ regenerate mushrooms on game over
\ centipede goes straight down after wrapping the screen vertically, as if it was poisoned
* spider sometimes teleports...?
\ score appears to wrap back down to zero when it gets too high
* Mushroom collision box sometimes persists after being destroyed
* Only for centipede?
\ centipede doesn't always move back upwards / downwards on player screen limit areas
\ High scores are broken on new save
Checksum? Might work.
\ Poison mushrooms don't work anymore
* Stupid broken mushroom in the very top left
QOL TODO BEFORE NEXT PROJECT (OR IN THIS ONE IF IT'S REALLY THAT HELPFUL):
* useful macros to automate tedious stuff
\ Some macro/proc to set the PPU nametable address to a tile x/y on screen
* multiply by constant
* word arithmetic
* automate game state boilerplate (.inc files, exports)
* bgr, ble pseudo-instructions
* OAM allocation thing that didn't work the first time
* Some proper organization for commonly used code (NES specific, macros, boilerplate)
* Look at modules again, might be useful
* .scope?
* Generally more robust PPU/VBLANK management (see end of https://wiki.nesdev.com/w/index.php/The_frame_and_NMIs#VBlank.2C_Rendering_Time.2C_and_NMIs)
* better set up game state stuff for one big background redraw during transition
* Some kind of sound engine
* support for local temp variables on stack
different idea: first 10 or so bytes of ZP are space for locals.
Push to stack on inner function call, pop afterwards.
Might require an entire new code block definition macro type thing
\ update call_with_args to support nested calls, or abandon it entirely for something else
* call_with_args_manual still doesn't do this
* maybe replace with something else entirely?
* some kind of wrapper for instruction-like macros to automatically handle addressing modes
look into curly bracket semantics?
* better makefile that I don't have to modify with each new file
* shared memory management for more efficiency
THINGS I SHOULD HAVE DONE:
* Write better middle-level abstractions to avoid writing basically the same procedures many times
TL; DR sometimes call_with_args doesn't cut it
Examples:
moving, colliding entities in general (player, arrow, centipede, etc)
drawing dynamic sprites
collisions with the board
particles
events?
* don't put RTS in the middle of procedures
Makes reading debugger difficult
* better split game state, drawing, and controls
see 'Generally more robust PPU Management' above
* decided on little or big endian early and stuck with it