diff options
author | entrpntr <entrpntr@gmail.com> | 2020-03-25 14:11:25 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-03-25 15:10:21 -0400 |
commit | ca12e16b29402bd14b2bc96a13a2cf16639a35aa (patch) | |
tree | ef1ba8fde885d659852b6feab044283687d287b0 /engine | |
parent | 14fb37e8100ed219e1bc08446424d1bfaf401a96 (diff) |
Disassemble load_pics.asm and move_mon_wo_mail.asm in bank $14.
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/events/specials.asm | 4 | ||||
-rw-r--r-- | engine/gfx/load_pics.asm | 432 | ||||
-rwxr-xr-x | engine/overworld/variables.asm | 2 | ||||
-rwxr-xr-x | engine/pokemon/move_mon.asm | 8 | ||||
-rw-r--r-- | engine/pokemon/move_mon_wo_mail.asm | 133 | ||||
-rw-r--r-- | engine/tilesets/map_palettes.asm | 8 |
6 files changed, 576 insertions, 11 deletions
diff --git a/engine/events/specials.asm b/engine/events/specials.asm index 408bc508..770b8cfb 100755 --- a/engine/events/specials.asm +++ b/engine/events/specials.asm @@ -19,9 +19,9 @@ add_special: MACRO ; Some ROM0 specials have a nonzero bank. \1Special:: IF _NARG == 1 - dba \1 + dba \1 ELSE - dbw \2, \1 + dbw \2, \1 ENDC ENDM diff --git a/engine/gfx/load_pics.asm b/engine/gfx/load_pics.asm new file mode 100644 index 00000000..18f76ec0 --- /dev/null +++ b/engine/gfx/load_pics.asm @@ -0,0 +1,432 @@ +GetUnownLetter: +; Return Unown letter in wUnownLetter based on DVs at hl + +; Take the middle 2 bits of each DV and place them in order: +; atk def spd spc +; .ww..xx. .yy..zz. + + ; atk + ld a, [hl] + and %01100000 + sla a + ld b, a + ; def + ld a, [hli] + and %00000110 + swap a + srl a + or b + ld b, a + + ; spd + ld a, [hl] + and %01100000 + swap a + sla a + or b + ld b, a + ; spc + ld a, [hl] + and %00000110 + srl a + or b + +; Divide by 10 to get 0-25 + ldh [hDividend + 3], a + xor a + ldh [hDividend], a + ldh [hDividend + 1], a + ldh [hDividend + 2], a + ld a, $ff / NUM_UNOWN + 1 + ldh [hDivisor], a + ld b, 4 + call Divide + +; Increment to get 1-26 + ldh a, [hQuotient + 2] + inc a + ld [wUnownLetter], a + ret + +GetMonFrontpic: + call _GetFrontpic + jp Load2bppToSRAM + +UnusedFrontpicPredef: + call _GetFrontpic + push hl + farcall StubbedGetFrontpic + pop hl + jp Load2bppToSRAM + +_GetFrontpic: + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + and a + ret z + cp NUM_POKEMON + 1 + ret z + cp EGG + 1 + ret nc + +.is_a_pokemon: + push de + call GetBaseData + ld a, [wBasePicSize] + and $f + ld b, a + push bc + ld a, BANK(sDecompressBuffer) + call OpenSRAM + ld hl, PokemonPicPointers + ld a, [wCurPartySpecies] + ld d, BANK(PokemonPicPointers) + cp UNOWN + jr z, .unown + + cp EGG + jr nz, .not_egg + + ld hl, EggPic + ld a, BANK(EggPic) + jr .ok + +.unown: + ld a, [wUnownLetter] + ld d, BANK(UnownPicPointers) + +.not_egg: + dec a + ld bc, 6 + call AddNTimes + ld a, d + call GetFarByte + call FixPicBank + push af + inc hl + ld a, d + call GetFarHalfword + pop af + +.ok: + ld de, sDecompressBuffer + call FarDecompress + pop bc + ld hl, sDecompressScratch + ld de, sDecompressBuffer + call PadFrontpic + pop hl + ret + +Load2bppToSRAM: + ld de, sDecompressScratch + ld c, 7 * 7 + ldh a, [hROMBank] + ld b, a + call Get2bpp + jp CloseSRAM + +GetMonBackpic: + ld a, [wCurPartySpecies] + and a + ret z + cp NUM_POKEMON + 1 + ret z + cp EGG + 1 + ret nc + +.is_a_pokemon: + push de + ld a, BANK(sDecompressBuffer) + call OpenSRAM + ld hl, PokemonPicPointers + ld a, [wCurPartySpecies] + ld d, BANK(PokemonPicPointers) + cp UNOWN + jr nz, .ok + ld a, [wUnownLetter] + ld d, BANK(UnownPicPointers) + +.ok: + dec a + ld bc, 6 + call AddNTimes + ld bc, 3 + add hl, bc + ld a, d + call GetFarByte + call FixPicBank + push af + inc hl + ld a, d + call GetFarByte + push af + inc hl + ld a, d + call GetFarByte + ld h, a + pop af + ld l, a + ld de, sDecompressBuffer + pop af + call FarDecompress + ld hl, sDecompressBuffer + ld c, 6 * 6 + call FixBackpicAlignment + pop hl + ld de, sDecompressBuffer + ldh a, [hROMBank] + ld b, a + call Get2bpp + call CloseSRAM + ret + +FixPicBank: +; Precondition: a = defined bank for pic +; Postcondition: a = repaired bank for pic +; +; Pic bank values that will get repaired (and what they'll be repaired to): +; $13 -> $1f +; $14 -> $20 +; $1f -> $2e +; +; Otherwise, the repaired bank will match the defined bank. + push hl + push bc + ld b, a + ld hl, .FixPicBankTable + +.loop: + ld a, [hli] + cp -1 + jr z, .done + + inc hl + cp b + jr nz, .loop + + dec hl + ld b, [hl] + +.done: + ld a, b + pop bc + pop hl + ret + +.FixPicBankTable: + db $13, $1f + db $14, $20 + db $1f, $2e + db -1 + +Function150ff: + ld a, c + push de + ld hl, PokemonPicPointers ; UnownPicPointers + dec a + ld bc, 6 + call AddNTimes + ld a, BANK(PokemonPicPointers) + call GetFarByte + call FixPicBank + push af + inc hl + ld a, BANK(PokemonPicPointers) + call GetFarHalfword + pop af + pop de + call FarDecompress + ret + +GetTrainerPic: + ld a, [wTrainerClass] + and a + ret z + cp NUM_TRAINER_CLASSES + ret nc + ld a, 0 + call WaitBGMap + xor a + ldh [hBGMapMode], a + ld a, BANK(sDecompressBuffer) + call OpenSRAM + push de + ld hl, TrainerPicPointers + ld a, [wTrainerClass] + dec a + ld bc, 3 + call AddNTimes + ld a, BANK(TrainerPicPointers) + call GetFarByte + call FixPicBank + push af + inc hl + ld a, BANK(TrainerPicPointers) + call GetFarByte + push af + inc hl + ld a, BANK(TrainerPicPointers) + call GetFarByte + ld h, a + pop af + ld l, a + ld de, sDecompressBuffer + pop af + call FarDecompress + pop hl + ld de, sDecompressBuffer + ld c, 7 * 7 + ldh a, [hROMBank] + ld b, a + call Get2bpp + call CloseSRAM + call WaitBGMap + ld a, 1 + ldh [hBGMapMode], a + ret + +DecompressGet2bpp: + push de + push bc + ld a, BANK(sDecompressBuffer) + call OpenSRAM + ld a, b + ld de, sDecompressBuffer + call FarDecompress + pop bc + ld de, sDecompressBuffer + pop hl + ldh a, [hROMBank] + ld b, a + call Get2bpp + call CloseSRAM + ret + +FixBackpicAlignment: + push de + push bc + ld a, [wBoxAlignment] + and a + jr z, .keep_dims + ld a, c + cp 7 * 7 + ld de, 7 * 7 tiles + jr z, .got_dims + cp 6 * 6 + ld de, 6 * 6 tiles + jr z, .got_dims + ld de, 5 * 5 tiles + +.got_dims + ld a, [hl] + ld b, 0 + ld c, 8 +.loop + rra + rl b + dec c + jr nz, .loop + ld a, b + ld [hli], a + dec de + ld a, e + or d + jr nz, .got_dims + +.keep_dims + pop bc + pop de + ret + +PadFrontpic: +; pads frontpic to fill 7x7 box + ld a, b + cp 6 + jr z, .six + cp 5 + jr z, .five + +.seven_loop + ld c, 7 << 4 + call LoadOrientedFrontpic + dec b + jr nz, .seven_loop + ret + +.six + ld c, 7 << 4 + xor a + call .Fill +.six_loop + ld c, (7 - 6) << 4 + xor a + call .Fill + ld c, 6 << 4 + call LoadOrientedFrontpic + dec b + jr nz, .six_loop + ret + +.five + ld c, 7 << 4 + xor a + call .Fill +.five_loop + ld c, (7 - 5) << 4 + xor a + call .Fill + ld c, 5 << 4 + call LoadOrientedFrontpic + dec b + jr nz, .five_loop + ld c, 7 << 4 + xor a + call .Fill + ret + +.Fill: +rept 4 + srl c +endr +.loop: +rept 16 + ld [hli], a +endr + dec c + jr nz, .loop + ret + +LoadOrientedFrontpic: + ld a, [wBoxAlignment] + and a + jr nz, .x_flip +rept 4 + srl c +endr +.left_loop: +rept 16 + ld a, [de] + inc de + ld [hli], a +endr + dec c + jr nz, .left_loop + ret + +.x_flip: + push bc +.right_loop: + ld a, [de] + inc de + ld b, a + xor a +rept 8 + rr b + rla +endr + ld [hli], a + dec c + jr nz, .right_loop + pop bc + ret diff --git a/engine/overworld/variables.asm b/engine/overworld/variables.asm index 7e6906ee..b40a8a51 100755 --- a/engine/overworld/variables.asm +++ b/engine/overworld/variables.asm @@ -55,7 +55,7 @@ GetVarAction_:: dwb wXCoord, RETVAR_STRBUF2 dwb wYCoord, RETVAR_STRBUF2 dwb wSpecialPhoneCallID, RETVAR_STRBUF2 - dwb 0, 0 + dwb NULL, RETVAR_STRBUF2 .CountCaughtMons: ; 41cf ; Caught mons. diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 7198910d..5fce891f 100755 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -406,7 +406,7 @@ AddTempmonToParty: ; da9c (3:5a9c) ld a, [wFirstUnownSeen] and a jr nz, .asm_db43 - ld a, [wd11e] + ld a, [wUnownLetter] ld [wFirstUnownSeen], a .asm_db43 and a @@ -604,7 +604,7 @@ SendGetMonIntoFromBox: ; db45 (3:5b45) ld a, [sBoxCount] dec a ld b, a - call Functiondcbc + call RestorePPOfDepositedPokemon Functiondcb2: ; dcb2 (3:5cb2) call CloseSRAM and a @@ -615,7 +615,7 @@ Functiondcb7: ; dcb7 (3:5cb7) scf ret -Functiondcbc: ; dcbc (3:5cbc) +RestorePPOfDepositedPokemon: ld a, b ld hl, sBoxMon1Species ld bc, BOXMON_STRUCT_LENGTH @@ -947,7 +947,7 @@ SendMonIntoBox: ; de74 (3:5e74) ld bc, $4 call CopyBytes ld b, $0 - call Functiondcbc + call RestorePPOfDepositedPokemon call CloseSRAM scf ret diff --git a/engine/pokemon/move_mon_wo_mail.asm b/engine/pokemon/move_mon_wo_mail.asm new file mode 100644 index 00000000..79f70d05 --- /dev/null +++ b/engine/pokemon/move_mon_wo_mail.asm @@ -0,0 +1,133 @@ +InsertPokemonIntoBox: + ld a, BANK(sBoxCount) + call OpenSRAM + ld hl, sBoxCount + call InsertSpeciesIntoBoxOrParty + ld a, [sBoxCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, sBoxMonNicknames + ld bc, MON_NAME_LENGTH + ld de, wBufferMonNick + call InsertDataIntoBoxOrParty + ld a, [sBoxCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, sBoxMonOT + ld bc, NAME_LENGTH + ld de, wBufferMonOT + call InsertDataIntoBoxOrParty + ld a, [sBoxCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, sBoxMons + ld bc, BOXMON_STRUCT_LENGTH + ld de, wBufferMon + call InsertDataIntoBoxOrParty + ld hl, wBufferMonMoves + ld de, wTempMonMoves + ld bc, NUM_MOVES + call CopyBytes + ld hl, wBufferMonPP + ld de, wTempMonPP + ld bc, NUM_MOVES + call CopyBytes + ld a, [wCurPartyMon] + ld b, a + farcall RestorePPOfDepositedPokemon + jp CloseSRAM + +InsertPokemonIntoParty: + ld hl, wPartyCount + call InsertSpeciesIntoBoxOrParty + ld a, [wPartyCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, wPartyMonNicknames + ld bc, MON_NAME_LENGTH + ld de, wBufferMonNick + call InsertDataIntoBoxOrParty + ld a, [wPartyCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, wPartyMonOT + ld bc, NAME_LENGTH + ld de, wBufferMonOT + call InsertDataIntoBoxOrParty + ld a, [wPartyCount] + dec a + ld [wNextBoxOrPartyIndex], a + ld hl, wPartyMons + ld bc, PARTYMON_STRUCT_LENGTH + ld de, wBufferMon + call InsertDataIntoBoxOrParty + ret + +InsertSpeciesIntoBoxOrParty: + inc [hl] + inc hl + ld a, [wCurPartyMon] + ld c, a + ld b, 0 + add hl, bc + ld a, [wCurPartySpecies] + ld c, a +.loop + ld a, [hl] + ld [hl], c + inc hl + inc c + ld c, a + jr nz, .loop + ret + +InsertDataIntoBoxOrParty: + push de + push hl + push bc + ld a, [wNextBoxOrPartyIndex] + dec a + call AddNTimes + push hl + add hl, bc + ld d, h + ld e, l + pop hl +.loop + push bc + ld a, [wNextBoxOrPartyIndex] + ld b, a + ld a, [wCurPartyMon] + cp b + pop bc + jr z, .insert + push hl + push de + push bc + call CopyBytes + pop bc + pop de + pop hl + push hl + ld a, l + sub c + ld l, a + ld a, h + sbc b + ld h, a + pop de + ld a, [wNextBoxOrPartyIndex] + dec a + ld [wNextBoxOrPartyIndex], a + jr .loop + +.insert + pop bc + pop hl + ld a, [wCurPartyMon] + call AddNTimes + ld d, h + ld e, l + pop hl + call CopyBytes + ret diff --git a/engine/tilesets/map_palettes.asm b/engine/tilesets/map_palettes.asm index 0c45cf57..3d7a5b1b 100644 --- a/engine/tilesets/map_palettes.asm +++ b/engine/tilesets/map_palettes.asm @@ -17,7 +17,7 @@ _SwapTextboxPalettes:: ld h, a ld a, [hl] and $f - bit 3, a + bit 3, a jr z, .next jr .asm_8038 @@ -31,8 +31,8 @@ _SwapTextboxPalettes:: ld a, [hl] swap a and $f - bit 3, a - jr z, .next + bit 3, a + jr z, .next .asm_8038 ld a, [wMapGroup] @@ -73,7 +73,7 @@ _ScrollBGMapPalettes:: ld h, a ld a, [hl] and $f - bit 3, a + bit 3, a jr z, .next jr .asm_8083 |