diff options
-rw-r--r-- | home.asm | 233 | ||||
-rwxr-xr-x | home/hm_moves.asm | 25 | ||||
-rwxr-xr-x | home/names.asm | 268 | ||||
-rw-r--r-- | pokegold.link | 1 | ||||
-rw-r--r-- | pokesilver.link | 1 | ||||
-rw-r--r-- | wram.asm | 2 |
6 files changed, 301 insertions, 229 deletions
@@ -1,5 +1,9 @@ INCLUDE "constants.asm" +SECTION "NULL", ROM0 + +NULL:: + ; rst vectors INCLUDE "home/rst.asm" INCLUDE "home/interrupts.asm" @@ -252,234 +256,7 @@ GetWeekday:: ret INCLUDE "home/pokedex_flags.asm" - -NamesPointers:: ; 35ee (0:35ee) - dba PokemonNames - dba MoveNames - dbw 0, 0 - dba ItemNames - dbw 0, wPartyMonOT - dbw 0, $de7d - dba TrainerClassNames - dba DoPlayerMovement - -GetName:: ; 3606 - ldh a, [hROMBank] - push af - push hl - push bc - push de - ld a, [wce61] - cp $1 - jr nz, .asm_3624 - ld a, [wCurSpecies] - ld [wd151], a - call GetPokemonName - ld hl, $b - add hl, de - ld e, l - ld d, h - jr .asm_3646 -.asm_3624 - ld a, [wce61] - dec a - ld e, a - ld d, $0 - ld hl, NamesPointers - add hl, de - add hl, de - add hl, de - ld a, [hli] - rst Bankswitch - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wCurSpecies] - dec a - call GetNthString - ld de, wStringBuffer1 - ld bc, $d - call CopyBytes -.asm_3646 - ld a, e - ld [wcffe], a - ld a, d - ld [wcfff], a - pop de - pop bc - pop hl - pop af - rst Bankswitch - ret - -GetNthString:: ; 3654 (0:3654) - and a - ret z - push bc - ld b, a - ld c, "@" -.asm_365a - ld a, [hli] - cp c - jr nz, .asm_365a - dec b - jr nz, .asm_365a - pop bc - ret - -GetBasePokemonName:: - push hl - call GetPokemonName - ld hl, wStringBuffer1 -.loop - ld a, [hl] - cp "@" - jr z, .quit - cp "♂" - jr z, .end - cp "♀" - jr z, .end - inc hl - jr .loop -.end - ld [hl], "@" -.quit - pop hl - ret - -GetPokemonName:: ; 367e (0:367e) - ldh a, [hROMBank] - push af - push hl - ld a, BANK(PokemonNames) - rst Bankswitch - ld a, [wd151] - dec a - ld hl, PokemonNames - ld e, a - ld d, $0 -rept MON_NAME_LENGTH +- 1 - add hl, de -endr - ld de, wStringBuffer1 - push de - ld bc, MON_NAME_LENGTH - 1 - call CopyBytes - ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1 - ld [hl], "@" - pop de - pop hl - pop af - rst Bankswitch - ret - -GetItemName:: - push hl - push bc - ld a, [wd151] - cp TM01 - jr nc, .TM - ld [wCurSpecies], a - ld a, $4 - ld [wce61], a - call GetName - jr .copied - -.TM - call GetTMHMName -.copied - ld de, wStringBuffer1 - pop bc - pop hl - ret - -GetTMHMName:: ; 36cc (0:36cc) - push hl - push de - push bc - ld a, [wd151] - push af - cp HM01 - push af - jr c, .TM - ld hl, .HMText ; $3721 - ld bc, $2 - jr .copy - -.TM - ld hl, .TMText ; $371e - ld bc, $2 -.copy - ld de, wStringBuffer1 - call CopyBytes - push de - ld a, [wd151] - ld c, a - callfar GetTMHMNumber - pop de - pop af - ld a, c - jr c, .not_hm - sub NUM_TMS -.not_hm - ld b, "0" -.mod10 - sub 10 - jr c, .done_mod - inc b - jr .mod10 - -.done_mod - add 10 - push af - ld a, b - ld [de], a - inc de - pop af - ld b, "0" - add b - ld [de], a - inc de - ld a, "@" - ld [de], a - pop af - ld [wd151], a - pop bc - pop de - pop hl - ret - -.TMText db "TM@" -.HMText db "HM@" - -IsHM:: - cp HM01 - jr c, .not_HM - scf - ret - -.not_HM - and a - ret - -IsHMMove:: - ld hl, .HMMoves - ld de, $1 - jp IsInArray - -.HMMoves - db CUT, FLY, SURF, STRENGTH, FLASH, WATERFALL, WHIRLPOOL, $FF - -GetMoveName:: - push hl - ld a, $2 - ld [wce61], a - ld a, [wd151] - ld [wCurSpecies], a - call GetName - ld de, wStringBuffer1 - pop hl - ret +INCLUDE "home/names.asm" ScrollingMenu:: call CopyMenuData diff --git a/home/hm_moves.asm b/home/hm_moves.asm new file mode 100755 index 00000000..0e3cafb6 --- /dev/null +++ b/home/hm_moves.asm @@ -0,0 +1,25 @@ +; HM moves can't be forgotten + +IsHM:: + cp HM01 + jr c, .NotHM + scf + ret +.NotHM: + and a + ret + +IsHMMove:: + ld hl, .HMMoves + ld de, 1 + jp IsInArray + +.HMMoves: + db CUT + db FLY + db SURF + db STRENGTH + db FLASH + db WATERFALL + db WHIRLPOOL + db -1 ; end
\ No newline at end of file diff --git a/home/names.asm b/home/names.asm new file mode 100755 index 00000000..d5b2f55e --- /dev/null +++ b/home/names.asm @@ -0,0 +1,268 @@ +NamesPointers:: +; entries correspond to GetName constants (see constants/text_constants.asm) + dba PokemonNames ; MON_NAME (not used; jumps to GetPokemonName) + dba MoveNames ; MOVE_NAME + dba NULL ; DUMMY_NAME + dba ItemNames ; ITEM_NAME + dbw 0, wPartyMonOT ; PARTY_OT_NAME + dbw 0, wOTPartyMonOT ; ENEMY_OT_NAME + dba TrainerClassNames ; TRAINER_NAME + dbw 4, MoveDescriptions ; MOVE_DESC_NAME_BROKEN (wrong bank) + +GetName:: +; Return name wCurSpecies from name list wNamedObjectTypeBuffer in wStringBuffer1. + + ldh a, [hROMBank] + push af + push hl + push bc + push de + + ld a, [wNamedObjectTypeBuffer] + cp MON_NAME + jr nz, .NotPokeName + + ld a, [wCurSpecies] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, MON_NAME_LENGTH + add hl, de + ld e, l + ld d, h + jr .done + +.NotPokeName: + ld a, [wNamedObjectTypeBuffer] + dec a + ld e, a + ld d, 0 + ld hl, NamesPointers + add hl, de + add hl, de + add hl, de + ld a, [hli] + rst Bankswitch + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [wCurSpecies] + dec a + call GetNthString + + ld de, wStringBuffer1 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + +.done + ld a, e + ld [wcffe], a + ld a, d + ld [wcffe + 1], a + + pop de + pop bc + pop hl + pop af + rst Bankswitch + ret + +GetNthString:: +; Return the address of the +; ath string starting from hl. + + and a + ret z + + push bc + ld b, a + ld c, "@" +.readChar + ld a, [hli] + cp c + jr nz, .readChar + dec b + jr nz, .readChar + pop bc + ret + +GetBasePokemonName:: +; Discards gender (Nidoran). + + push hl + call GetPokemonName + + ld hl, wStringBuffer1 +.loop + ld a, [hl] + cp "@" + jr z, .quit + cp "♂" + jr z, .end + cp "♀" + jr z, .end + inc hl + jr .loop +.end + ld [hl], "@" +.quit + pop hl + ret + +GetPokemonName:: +; Get Pokemon name for wNamedObjectIndexBuffer. + + ldh a, [hROMBank] + push af + push hl + ld a, BANK(PokemonNames) + rst Bankswitch + +; Each name is ten characters + ld a, [wNamedObjectIndexBuffer] + dec a + ld hl, PokemonNames + ld e, a + ld d, $0 + +rept MON_NAME_LENGTH - 1 + add hl, de +endr + +; Terminator + ld de, wStringBuffer1 + push de + ld bc, MON_NAME_LENGTH - 1 + call CopyBytes + ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1 + ld [hl], "@" + pop de + + pop hl + pop af + rst Bankswitch + ret + +GetItemName:: +; Get item name for wNamedObjectIndexBuffer. + + push hl + push bc + ld a, [wNamedObjectIndexBuffer] + + cp TM01 + jr nc, .TM + + ld [wCurSpecies], a + ld a, ITEM_NAME + ld [wNamedObjectTypeBuffer], a + call GetName + jr .Copied +.TM: + call GetTMHMName +.Copied: + ld de, wStringBuffer1 + pop bc + pop hl + ret + +GetTMHMName:: +; Get TM/HM name for item wNamedObjectIndexBuffer. + + push hl + push de + push bc + ld a, [wNamedObjectIndexBuffer] + push af + +; TM/HM prefix + cp HM01 + push af + jr c, .TM + + ld hl, .HMText + ld bc, .HMTextEnd - .HMText + jr .copy + +.TM: + ld hl, .TMText + ld bc, .TMTextEnd - .TMText + +.copy: + ld de, wStringBuffer1 + call CopyBytes + +; TM/HM number + push de + ld a, [wNamedObjectIndexBuffer] + ld c, a + callfar GetTMHMNumber + pop de + +; HM numbers start from 51, not 1 + pop af + ld a, c + jr c, .not_hm + sub NUM_TMS + +.not_hm: +; Divide and mod by 10 to get the top and bottom digits respectively + ld b, "0" + +.mod10: + sub 10 + jr c, .done_mod + inc b + jr .mod10 + +.done_mod: + add 10 + + push af + ld a, b + ld [de], a + inc de + pop af + + ld b, "0" + add b + ld [de], a + +; End the string + inc de + ld a, "@" + ld [de], a + + pop af + ld [wNamedObjectIndexBuffer], a + pop bc + pop de + pop hl + ret + +.TMText: + db "TM" +.TMTextEnd: + db "@" + +.HMText: + db "HM" +.HMTextEnd: + db "@" + +INCLUDE "home/hm_moves.asm" + +GetMoveName:: + push hl + + ld a, MOVE_NAME + ld [wNamedObjectTypeBuffer], a + + ld a, [wNamedObjectIndexBuffer] ; move id + ld [wCurSpecies], a + + call GetName + ld de, wStringBuffer1 + + pop hl + ret
\ No newline at end of file diff --git a/pokegold.link b/pokegold.link index cb686478..522d6a8b 100644 --- a/pokegold.link +++ b/pokegold.link @@ -1,5 +1,6 @@ ROM0 org $0000 + "NULL" "rst0" org $0008 "rst8" diff --git a/pokesilver.link b/pokesilver.link index cb686478..522d6a8b 100644 --- a/pokesilver.link +++ b/pokesilver.link @@ -1,5 +1,6 @@ ROM0 org $0000 + "NULL" "rst0" org $0008 "rst8" @@ -2098,7 +2098,7 @@ wLinkTimeoutFrames:: ds 2 wce5d:: ds 2 ; ce5d wMonType:: ds 1 ; ce5f wCurSpecies:: ds 1 ; ce60 -wce61:: ds 1 ; ce61 +wNamedObjectTypeBuffer:: ds 1 ; ce61 wce62:: ds 1 ; ce62 wce63:: wJumpTableIndex:: |