diff options
Diffstat (limited to 'home/names.asm')
-rw-r--r-- | home/names.asm | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/home/names.asm b/home/names.asm new file mode 100644 index 000000000..c8f873c3f --- /dev/null +++ b/home/names.asm @@ -0,0 +1,278 @@ +NamesPointers:: ; 33ab +; entries correspond to GetName constants (see constants/misc_constants.asm) + dba PokemonNames + dba MoveNames + dbw 0, 0 + dba ItemNames + dbw 0, PartyMonOT + dbw 0, OTPartyMonOT + dba TrainerClassNames + dbw $4, $4b52 ; within PackMenuGFX +; 33c3 + +GetName:: ; 33c3 +; Return name CurSpecies from name list wNamedObjectTypeBuffer in StringBuffer1. + + ld a, [hROMBank] + push af + push hl + push bc + push de + + ld a, [wNamedObjectTypeBuffer] + cp PKMN_NAME + jr nz, .NotPokeName + + ld a, [CurSpecies] + ld [wd265], a + call GetPokemonName + ld hl, PKMN_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, [CurSpecies] + dec a + call GetNthString + + ld de, StringBuffer1 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + +.done + ld a, e + ld [wUnusedD102], a + ld a, d + ld [wUnusedD102 + 1], a + + pop de + pop bc + pop hl + pop af + rst Bankswitch + ret +; 3411 + +GetNthString:: ; 3411 +; 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 +; 3420 + +GetBasePokemonName:: ; 3420 +; Discards gender (Nidoran). + + push hl + call GetPokemonName + + ld hl, StringBuffer1 +.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 + +; 343b + +GetPokemonName:: ; 343b +; Get Pokemon name wd265. + + ld a, [hROMBank] + push af + push hl + ld a, BANK(PokemonNames) + rst Bankswitch + +; Each name is ten characters + ld a, [wd265] + dec a + ld d, 0 + ld e, a + ld h, 0 + ld l, a + add hl, hl ; hl = hl * 4 + add hl, hl ; hl = hl * 4 + add hl, de ; hl = (hl*4) + de + add hl, hl ; hl = (5*hl) + (5*hl) + ld de, PokemonNames + add hl, de + +; Terminator + ld de, StringBuffer1 + push de + ld bc, PKMN_NAME_LENGTH - 1 + call CopyBytes + ld hl, StringBuffer1 + PKMN_NAME_LENGTH - 1 + ld [hl], "@" + pop de + + pop hl + pop af + rst Bankswitch + ret +; 3468 + +GetItemName:: ; 3468 +; Get item name wd265. + + push hl + push bc + ld a, [wd265] + + cp TM01 + jr nc, .TM + + ld [CurSpecies], a + ld a, ITEM_NAME + ld [wNamedObjectTypeBuffer], a + call GetName + jr .Copied +.TM: + call GetTMHMName +.Copied: + ld de, StringBuffer1 + pop bc + pop hl + ret +; 3487 + +GetTMHMName:: ; 3487 +; Get TM/HM name by item id wd265. + + push hl + push de + push bc + ld a, [wd265] + push af + +; TM/HM prefix + cp HM01 + push af + jr c, .TM + + ld hl, .HMText + ld bc, .HMTextEnd - .HMText + jr .asm_34a1 + +.TM: + ld hl, .TMText + ld bc, .TMTextEnd - .TMText + +.asm_34a1 + ld de, StringBuffer1 + call CopyBytes + +; TM/HM number + push de + ld a, [wd265] + ld c, a + callfar GetTMHMNumber + pop de + +; HM numbers start from 51, not 1 + pop af + ld a, c + jr c, .asm_34b9 + sub NUM_TMS +.asm_34b9 + +; Divide and mod by 10 to get the top and bottom digits respectively + ld b, "0" +.mod10 + sub 10 + jr c, .asm_34c2 + inc b + jr .mod10 +.asm_34c2 + 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 [wd265], a + pop bc + pop de + pop hl + ret + +.TMText: + db "TM" +.TMTextEnd: + db "@" + +.HMText: + db "HM" +.HMTextEnd: + db "@" +; 34df + +INCLUDE "home/hm_moves.asm" + +GetMoveName:: ; 34f8 + push hl + + ld a, MOVE_NAME + ld [wNamedObjectTypeBuffer], a + + ld a, [wNamedObjectIndexBuffer] ; move id + ld [CurSpecies], a + + call GetName + ld de, StringBuffer1 + + pop hl + ret +; 350c |