- Fix bugs
- Encode ACCURATE palette with images
- Character sprites being all redrawn for every animation frame
- If it is possible in 1 frame, update MMC5 nametable and sprite at the same time
- Glitching background (cause by not changing bank during palette & sprite reading)
- Encoded images are not the best
- Court record Palette (due to background palette)
- Wrong upper tile sometime (maybe due to incorrect MMC5 EXT RAM timing)
- Undraw dialog box don't work on one of the two nametables
- Visual effects
- Scrolling
- [/] Flash
- [/] Shake
- [/] Fade
- UI Movement (like testimony text scrolling)
- Scrolling when switching evidence
- [/] Make the Project core functionality
- Main process loop
- Dialog box
- Image drawing
- Image Animation
- Court record
- [/] Visual effects
- Saving
- [/] Investigation scene
- [/] Choice
- [/] Game resources:
- Dialogs/scripts.
- Background scenes.
- [/] Character sprites.
- Photo sprites.
- [/] Musics.
- [/] SFX.
- Refine game resources:
- Dialogs/scripts.
- Background scenes.
- Character sprites.
- Musics + SFX.
- Python script documentation.
- text scripts
- image scripts
- other scripts
- Assembly documentation.
- Dialog box
- Image display
- LZ decoding
- RLE-INC decoding
- Court Record
- Vectors
- Scanlines
- Inputs
- Audio
- Data structure documentation.
- Images
- Evidences
- Dialogs
- Sounds
- Fix cross emulators bugs:
- MMC5 Scanline not behaving correctly?
-
Fix crash when drawing a name of size 5.
-
Fix DPCM bank changing when playing a sample.
-
Cut text data into multiple files.
-
Add musics in ROM.
-
Ugly fix when switching text bank causing wrong stack (but introduce graphics glitch and garbadge code)
-
Refactor choice to be displayed in the top box
-
Fix incorrect state because undrawing the court record replay special chars (like CR_OBJ)
-
Change text script to encode hitbox.
-
Add cursor sprite.
-
Add investigation scene code (loading, hitbox, inputs).
-
Refactor palette data in images (take less bytes).
-
Refactor asm to have the animation table span multiple banks.
-
Refactor sprites to have a window of 2 CHR bank.
-
Script to generate animations (JSON+frames) from GIF.
-
Fix softlock for Fceux (by adding a ROM with iNES 1.0 header).
-
Fix returning to already executed special char because of lz return.
-
Fix NMI not saving tmp causing wrong data in background buffer.
-
Fix not waiting for next text bank to load when reading multiple char in the same frame that are located between 2 banks.
-
Kinda fix a bug when encoding images. Sometimes the same image was encoded multiple times (because of a variable name/refresh ?).
-
Photo
- Encode Photo (python)
- Decode Photo (asm)
- Display Photo
-
Court record:
- visual:
- Box draw/clear
- Get text
- Display text
- Evidence images
- logic:
- inputs to display court record
- inputs to switch between evidence
- show only unlocked evidence
- char to set/clear evidence
- char to enable/disable court record button
- char to enable/disable present evidence button
- visual:
-
Fix entire screen glitching when loading the next text data block
-
Play DPCM as SFX.
-
Replace FI and FO by FAD.
-
Add hiragana & katakana font.
-
Add some basic SFX.
-
Refactor music to not be limited to 2 banks of data.
-
Add a markdown file describing the dialog script 'language'.
-
Add names to display with the dialog box.
-
Update Makefile
-
other text data to test animations, music and backgrounds.
-
PWAA cartridge concept art.
-
Change music, SFX, text and images for the PWAA data.
-
Encode necessary PWAA musics in FamiStudio.
-
Refactor palettes encoding.
-
The JSON animations files (will still need some rework)
-
Cut all needed sprites and convert then to a NES palette.
-
A LOT of fixes on PWAA dialogs.
-
Script to convert PWAA original dialog to the text format used.
-
Basic game resources for the prologue:
- Dialogs/scripts.
- Background scenes.
- Character sprites.
- Musics.
-
Credits for tools and resources.
-
A useless script to convert file into images.
-
Temporary fix music crashing the game by loading 16K of music bank instead of 8K
-
Fix dialog box having graphical glitches when appearing/disappearing (at least it seems)
-
Fix images encoding and display not considering MMC5 CHR 'region' (256K block)
-
Re-fix no palette update when drawing partial frame for similar tiles with different palettes
-
(Kind of fix during refactor) encoding not converting images to tiles with the maximum number of colors
-
Refactor image encoding scripts to be more performant (the closest tiles are now calculated with a C program)
-
Fix Sprite x position being incorrect, because spr_x buffer wasn't reversed after sprite flickering.
-
Add fast-forward dialog button
-
Encode ACCURATE sprites with images (Choose to maximize top sprites and cut bottom ones if too many)
-
Fix MMC5 nametable updated 1 frame too late/soon when switching animation
-
Fix temporary wrong scrolling position when starting the animation because of NMI not acknowledged during the draw animation phase
-
Fix dialog box top row using PPU backdrop color
-
Fix background tiles overflow when drawing the dialog box
-
Fix a temporary wrong CHR bank when switching animation
-
Do sprite flickering to kind of "draw more sprites"
-
PPU background buffer (enable "instant" background update)
-
Fix sprites not disappearing when removing the character
-
Fix temporary wrong palette
-
Fix image encoding not using the background color for the character
-
Fix the first character frame being redrawn entirely
-
Fix background drawing every frame when no animation is selected
-
Fix encoding garbage sprite tiles for every character (because of the wrong sprite dimension)
-
Fix Images having too many sprites
-
Fix Shake effect not moving sprites
-
Read dialog every frame (and not be slowed by image drawing, for example)
-
Add macro to write less and maybe make the code more readable
-
Add delay before another input
-
Fix palette switch background color applying everywhere
-
Fix jump using the wrong flag (wrong argument used in the python script)
-
Fix using the wrong bank when decoding text (not saved in var 'mmc5_bank')
-
Import FamiStudio
-
Fix partial images: wrong tile (because of timing when writing to ext RAM during NMI)
-
Fix partial images: missing sprites (because we cleared sprites each time a partial image was draw)
-
Fix partial images: wrong sprites bank (It wasn't the wrong bank, but too many sprites that were outside the bank)
-
Fix partial images: wrong background tiles corruption (background packet not closed in partial frame subroutine)
-
Fix garbage tiles. (writing to wrong nametable, because MMC5 register wasn't correctly set)
-
Image drawing
- RLEINC encode (python)
- RLEINC decoding
- Scanline IRQ to separate screen into "nothing, image, text, nothing"
- Frame decoding
- Frame background drawing
- Frame sprites drawing
- Palette update
- Palette 'split'
- encode images scripts (python)
- encode frames scripts (python)
- Partial frame decoding
- Character Animation
-
Dialog box
- LZ encode (python)
- LZ decoding
- Dialog box drawing
- Text drawing
- Special characters
- END
- LB
- DB
- FDB
- TD
- SET
- CLR
- SAK
- SPD
- DL
- NAM
- FLH
- FAD
- COL
- BIP
- MUS
- SND
- [/] PHT
- CHR
- ANI
- BKG
- FNT
- JMP
- ACT
- BP
- SP
- RES
- RES
- EVT
- EXT
-
Detail feasibility study. Estimate with real data the size (to the KB) of:
-
Dialogs. Results: 795 KB for now (not every ctrl chars) uncompressed, 521 KB with Huffman (Not below the 512 KB limit but close enough, so it's OK).
UPDATE: With basic LZ compression (3-bit length, 12-bit jump), can go to ~403 KB. Will need to cut text into block to skip decoding all data to read one line (442 KB with same parameters and block size of 8 KB). So: Huffman=local decode + medium compress; LZ=block decode + high compress
-
CHR tiles. Results: Will sure be < 1 MB (65 536 tiles). If not, we can still replace similar tiles with other tiles. 1 or more Fonts, depend on language (96 chars each). UI < 512 tiles.
-
Image data (tiles map + palette). Results: 102 Backgrounds (50 Cutscenes, 28 Locations, 8 Courtroom scenes, 16 Start cutscenes) (~0.9 KB each). 23 Characters (really depends on the character, but maybe ~5 KB each in average). 42+24 evidence. 12 standing character sprites and 10 smaller character sprites. "Hold it !", "Objection !", "Take That !", title screen and action line backgrounds. Compress data with RLE INC. The Total size approximates to 256 KB.
-
Code. Results: IDK but should be for sure < 64 KB (not many systems to implement).
-
Musics + Sounds. Results: 27 musics (IDK but maybe ~2 KB and < 8 KB each), 12 voice clips (2 KB each), 54? SFX (< 1 KB each). Total = ~100 KB.
-
Note: If game resources are too big, can still cut the game into 2 Cartridges (like 2 disc games on the PS1)
-
-
Broad feasibility study. Estimate with knowledge of the NES and fake/pseudo representative data:
-
Cartridge size with full data (must be ≤ 2 MB). Results: Vague estimation based on a previous NES project.
-
Graphical fidelity with NES constrains. Results: Courtroom scene and 1 Phoenix frame done in Aseprite with NES limitation.
-
Audio fidelity with NES constrains. Results: MMC5 remix of PWAA on Internet (e.g.: https://www.youtube.com/watch?v=ejm4_1XoLOU).
-
Project complexity to develop: Results: Dialog box, image drawing, static animation, very basic save, FamiStudio, basic inputs.
-