diff --git a/.gitignore b/.gitignore index 3a35100af..a13e6d77c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# global label defs are generated +globals.asm + # precompiled python *.pyc diff --git a/Makefile b/Makefile index 7150b4849..218686bce 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ PYTHON := python .PHONY: all clean pngs gfx .SECONDEXPANSION: -TEXTFILES := $(shell find ./ -type f -name '*.asm') +TEXTFILES := $(shell find ./ -type f -name '*.asm' | grep -v globals.asm) TEXTQUEUE := OBJS := pokecrystal.o @@ -13,12 +13,19 @@ LZS := $(shell find gfx/ -type f -name '*.lz') _2BPPS := $(shell find gfx/ -type f -name '*.2bpp') _1BPPS := $(shell find gfx/ -type f -name '*.1bpp') -$(shell $(foreach obj, $(OBJS), $(eval OBJ_$(obj:.o=) := $(shell $(PYTHON) scan_includes.py $(obj:.o=.asm))))) +# generate a list of dependencies for each object file +$(shell \ + $(foreach obj, $(OBJS), \ + $(eval OBJ_$(obj:.o=) := \ + $(shell $(PYTHON) scan_includes.py $(obj:.o=.asm) | sed s/globals.asm//g)) \ + ) \ +) -all: baserom.gbc pokecrystal.gbc +all: baserom.gbc globals.asm pokecrystal.gbc cmp baserom.gbc pokecrystal.gbc clean: rm -f pokecrystal.o pokecrystal.gbc + rm -f globals.asm globals.tx @echo 'Removing preprocessed .tx files...' @rm -f $(TEXTFILES:.asm=.tx) @@ -29,14 +36,17 @@ baserom.gbc: $(eval TEXTQUEUE := $(TEXTQUEUE) $<) @rm -f $@ -$(OBJS): $$(patsubst %.o,%.tx,$$@) $$(patsubst %.asm,%.tx,$$(OBJ_$$(patsubst %.o,%,$$@))) +globals.asm: $(TEXTFILES:.asm=.tx) + @echo "Creating globals.asm..." + @touch globals.asm @echo "Preprocessing .asm to .tx..." - @$(PYTHON) prequeue.py $(TEXTQUEUE) - $(eval TEXTQUEUE := ) + @$(PYTHON) prequeue.py $(TEXTQUEUE) globals.asm + +$(OBJS): $$(patsubst %.o,%.tx,$$@) $$(patsubst %.asm,%.tx,$$(OBJ_$$(patsubst %.o,%,$$@))) rgbasm -o $@ $(@:.o=.tx) pokecrystal.gbc: $(OBJS) - rgblink -n pokecrystal.sym -m pokecrystal.map -o pokecrystal.gbc $< + rgblink -n pokecrystal.sym -m pokecrystal.map -o pokecrystal.gbc $^ rgbfix -Cjv -i BYTE -k 01 -l 0x33 -m 0x10 -p 0 -r 3 -t PM_CRYSTAL $@ pngs: diff --git a/constants.asm b/constants.asm index 817268e9f..fc1190494 100644 --- a/constants.asm +++ b/constants.asm @@ -6,6 +6,73 @@ else VERSION EQU 1 endc +; wram constants +; MonType: ; cf5f +PARTYMON EQU 0 +OTPARTYMON EQU 1 +BOXMON EQU 2 +WILDMON EQU 4 + +; WalkingDirection: ; d043 +STANDING EQU -1 +DOWN EQU 0 +UP EQU 1 +LEFT EQU 2 +RIGHT EQU 3 + +; FacingDirection: ; d044 +FACE_CURRENT EQU 0 +FACE_DOWN EQU 8 +FACE_UP EQU 4 +FACE_LEFT EQU 2 +FACE_RIGHT EQU 1 + +; TimeOfDay: ; d269 +MORN EQU 0 +DAY EQU 1 +NITE EQU 2 +DARKNESS EQU 3 + +; ScriptFlags: ; d434 +SCRIPT_RUNNING EQU 2 + +; ScriptMode: ; d437 +SCRIPT_OFF EQU 0 +SCRIPT_READ EQU 1 +SCRIPT_WAIT_MOVEMENT EQU 2 +SCRIPT_WAIT EQU 3 + +; CurDay: ; d4cb +SUNDAY EQU 0 +MONDAY EQU 1 +TUESDAY EQU 2 +WEDNESDAY EQU 3 +THURSDAY EQU 4 +FRIDAY EQU 5 +SATURDAY EQU 6 + +; MapObjects: ; d71e + +PLAYER_OBJECT EQU 0 + +NUM_OBJECTS EQU $10 +OBJECT_LENGTH EQU $10 + +; InputType: ; c2c7 +AUTO_INPUT EQU $ff + +; WhichRegisteredItem: ; d95b +REGISTERED_POCKET EQU %11000000 +REGISTERED_NUMBER EQU %00111111 + +; PlayerState: ; d95d +PLAYER_NORMAL EQU 0 +PLAYER_BIKE EQU 1 +PLAYER_SLIP EQU 2 +PLAYER_SURF EQU 4 +PLAYER_SURF_PIKA EQU 8 + + INCLUDE "gbhw.asm" INCLUDE "hram.asm" diff --git a/extras b/extras index cb65c3196..7bf5fcab9 160000 --- a/extras +++ b/extras @@ -1 +1 @@ -Subproject commit cb65c31968305b0572ca5452291afcf058cef3a2 +Subproject commit 7bf5fcab90a2861b4a8f5b5c193838ff3470a69f diff --git a/pokecrystal.asm b/pokecrystal.asm index f64d44e76..495b02178 100644 --- a/pokecrystal.asm +++ b/pokecrystal.asm @@ -1,3 +1,5 @@ -INCLUDE "wram.asm" +INCLUDE "globals.asm" + INCLUDE "constants.asm" +INCLUDE "wram.asm" INCLUDE "main.asm" diff --git a/scan_includes.py b/scan_includes.py index 3f006998c..0abd3084a 100644 --- a/scan_includes.py +++ b/scan_includes.py @@ -5,15 +5,17 @@ Recursively scan an asm file for rgbasm INCLUDEs and INCBINs. This is used to generate dependencies for each rgbasm object file. """ +import os import sys def scan_for_includes(filename): filenames = [] - for line in open(filename, 'r').readlines(): - if 'INCLUDE' in line or 'INCBIN' in line: - line = line.split(';')[0] + if os.path.exists(filename): + for line in open(filename, 'r').readlines(): if 'INCLUDE' in line or 'INCBIN' in line: - filenames += [line.split('"')[1]] + line = line.split(';')[0] + if 'INCLUDE' in line or 'INCBIN' in line: + filenames += [line.split('"')[1]] return filenames def recursive_scan_for_includes(filename): diff --git a/wram.asm b/wram.asm index 6f25a2f96..22096650c 100644 --- a/wram.asm +++ b/wram.asm @@ -114,7 +114,7 @@ Channel1Octave: ; c114 ; 0: highest ; 7: lowest ds 1 -Channel1StartingOctave ; c115 +Channel1StartingOctave: ; c115 ; raises existing octaves by this value ; used for repeating phrases in a higher octave to save space ds 1 @@ -125,7 +125,7 @@ Channel1NoteDuration: ; c116 ds 1 ; c118 ds 1 -Channel1LoopCount ; c119 +Channel1LoopCount: ; c119 ds 1 Channel1Tempo: ; c11a ds 2 @@ -308,7 +308,6 @@ CurMusic: ; c2c0 SECTION "auto",WRAM0[$c2c7] InputType: ; c2c7 -AUTO_INPUT EQU $ff ds 1 AutoInputAddress: ; c2c8 ds 2 @@ -370,7 +369,7 @@ Sprites: ; c400 ; bit 3: vram bank (cgb only) ; bit 2-0: pal # (cgb only) ds 160 -SpritesEnd +SpritesEnd: TileMap: ; c4a0 ; 20x18 grid of 8x8 tiles @@ -825,10 +824,6 @@ AttrMap: ; cdd9 ds 30 MonType: ; cf5f -PARTYMON EQU 0 -OTPARTYMON EQU 1 -BOXMON EQU 2 -WILDMON EQU 4 ds 1 CurSpecies: ; cf60 @@ -960,19 +955,9 @@ MovementAnimation: ; d042 ds 1 WalkingDirection: ; d043 -STANDING EQU -1 -DOWN EQU 0 -UP EQU 1 -LEFT EQU 2 -RIGHT EQU 3 ds 1 FacingDirection: ; d044 -FACE_CURRENT EQU 0 -FACE_DOWN EQU 8 -FACE_UP EQU 4 -FACE_LEFT EQU 2 -FACE_RIGHT EQU 1 ds 1 WalkingX: ; d045 @@ -1013,7 +998,7 @@ VramState: ; d0ed CurMart: ; d0f0 ds 16 -CurMartEnd +CurMartEnd: ds 6 @@ -1098,7 +1083,7 @@ TempMonSpclAtk: ; d13a ds 2 TempMonSpclDef: ; d13c ds 2 -TempMonEnd ; d13e +TempMonEnd: ; d13e ds 3 @@ -1262,7 +1247,7 @@ EnemyMonMove3: ; d20a ds 1 EnemyMonMove4: ; d20b ds 1 -EnemyMonMovesEnd +EnemyMonMovesEnd: EnemyMonDVs: EnemyMonAtkDefDV: ; d20c @@ -1311,7 +1296,7 @@ EnemyMonSpclAtk: ; d220 ds 2 EnemyMonSpclDef: ; d222 ds 2 -EnemyMonStatsEnd +EnemyMonStatsEnd: EnemyMonType1: ; d224 ds 1 @@ -1326,7 +1311,7 @@ EnemyMonCatchRate: ; d22b EnemyMonBaseExp: ; d22c ds 1 -EnemyMonEnd +EnemyMonEnd: IsInBattle: ; d22d @@ -1427,10 +1412,6 @@ CurDamage: ; d256 SECTION "TimeOfDay",WRAMX[$d269],BANK[1] TimeOfDay: ; d269 -MORN EQU 0 -DAY EQU 1 -NITE EQU 2 -DARKNESS EQU 3 ds 1 SECTION "OTParty",WRAMX[$d280],BANK[1] @@ -1565,7 +1546,6 @@ OTPartyMon6Nickname: ; d421 SECTION "Scripting",WRAMX[$d434],BANK[1] ScriptFlags: ; d434 -SCRIPT_RUNNING EQU 2 ds 1 ScriptFlags2: ; d435 ds 1 @@ -1573,10 +1553,6 @@ ScriptFlags3: ; d436 ds 1 ScriptMode: ; d437 -SCRIPT_OFF EQU 0 -SCRIPT_READ EQU 1 -SCRIPT_WAIT_MOVEMENT EQU 2 -SCRIPT_WAIT EQU 3 ds 1 ScriptRunning: ; d438 ds 1 @@ -1639,13 +1615,6 @@ GameTimeFrames: ; d4c8 ds 2 CurDay: ; d4cb -SUNDAY EQU 0 -MONDAY EQU 1 -TUESDAY EQU 2 -WEDNESDAY EQU 3 -THURSDAY EQU 4 -FRIDAY EQU 5 -SATURDAY EQU 6 ds 1 ds 10 @@ -1707,11 +1676,6 @@ PlayerSpriteY: ; d4ee SECTION "Objects",WRAMX[$d71e],BANK[1] MapObjects: ; d71e - -PLAYER_OBJECT EQU 0 - -NUM_OBJECTS EQU $10 -OBJECT_LENGTH EQU $10 ds OBJECT_LENGTH * NUM_OBJECTS @@ -1754,45 +1718,38 @@ KantoBadges: ; d858 SECTION "Items",WRAMX[$d859],BANK[1] TMsHMs: ; d859 ds 57 -TMsHMsEnd +TMsHMsEnd: NumItems: ; d892 ds 1 Items: ; d893 ds 41 -ItemsEnd +ItemsEnd: NumKeyItems: ; d8bc ds 1 KeyItems: ; d8bd ds 26 -KeyItemsEnd +KeyItemsEnd: NumBalls: ; d8d7 ds 1 Balls: ; d8d8 ds 25 -BallsEnd +BallsEnd: PCItems: ; d8f1 ds 101 -PCItemsEnd +PCItemsEnd: SECTION "overworld",WRAMX[$d95b],BANK[1] WhichRegisteredItem: ; d95b -REGISTERED_POCKET EQU %11000000 -REGISTERED_NUMBER EQU %00111111 ds 1 RegisteredItem: ; d95c ds 1 PlayerState: ; d95d -PLAYER_NORMAL EQU 0 -PLAYER_BIKE EQU 1 -PLAYER_SLIP EQU 2 -PLAYER_SURF EQU 4 -PLAYER_SURF_PIKA EQU 8 ds 1 SECTION "scriptram",WRAMX[$d962],BANK[1] @@ -2025,7 +1982,7 @@ PartyMon5Nickname: ; de6d ds 11 PartyMon6Nickname: ; de78 ds 11 -PartyMonNicknamesEnd +PartyMonNicknamesEnd: SECTION "Pokedex",WRAMX[$de99],BANK[1] PokedexCaught: ; de99 @@ -2145,7 +2102,7 @@ OBPals: ; d0c0 LYOverrides: ; d100 ds 144 -LYOverridesEnd +LYOverridesEnd: SECTION "SRAMBank1",SRAM,BANK[1] @@ -2318,5 +2275,5 @@ BoxMon19Nickname: ; b148 ds 11 BoxMon20Nickname: ; b153 ds 11 -BoxMonNicknamesEnd +BoxMonNicknamesEnd: