diff options
Diffstat (limited to 'home/names.asm')
-rwxr-xr-x | home/names.asm | 268 |
1 files changed, 268 insertions, 0 deletions
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 |