Various battle-related bank0 asm and wram/constants

This commit is contained in:
yenatch 2013-03-26 05:22:22 -04:00
parent 87c36ebbc0
commit edfffec831
3 changed files with 430 additions and 29 deletions

View File

@ -3442,6 +3442,22 @@ BATTLE_VARS_LAST_MOVE EQU 19
BATTLE_VARS_LAST_MOVE_OPP EQU 20 BATTLE_VARS_LAST_MOVE_OPP EQU 20
; battle animations
; animations below fc are 1:1 with move constants
ANIM_CONFUSED EQU $103
ANIM_SLEEP EQU $104
ANIM_INLOVE EQU $10a
WEATHER_RAIN EQU 1
WEATHER_SUN EQU 2
WEATHER_SANDSTORM EQU 3
WEATHER_RAIN_END EQU 4
WEATHER_SUN_END EQU 5
WEATHER_SANDSTORM_END EQU 6
; joypad ; joypad
BUTTONS EQU %00010000 BUTTONS EQU %00010000
D_PAD EQU %00100000 D_PAD EQU %00100000

308
main.asm
View File

@ -1128,6 +1128,7 @@ FarCopyBytesDouble: ; e9b
INCBIN "baserom.gbc",$eba,$fc8 - $eba INCBIN "baserom.gbc",$eba,$fc8 - $eba
ClearTileMap: ; fc8 ClearTileMap: ; fc8
; Fill the tile map with blank tiles ; Fill the tile map with blank tiles
ld hl, TileMap ld hl, TileMap
@ -1142,7 +1143,26 @@ ClearTileMap: ; fc8
jp WaitBGMap jp WaitBGMap
; fdb ; fdb
INCBIN "baserom.gbc",$fdb,$ff1 - $fdb
INCBIN "baserom.gbc",$fdb,$fe8 - $fdb
TextBox: ; fe8
; draw a text box of given location/size
; ? hl
; size bc
; ? de
; draw border
push bc
push hl
call TextBoxBorder
pop hl
pop bc
; fill textbox area with palette 7
jr TextBoxPalette
; ff1
TextBoxBorder: ; ff1 TextBoxBorder: ; ff1
; draw a text box ; draw a text box
@ -1197,11 +1217,62 @@ NPlaceChar: ; 0x101e
ret ret
; 0x1024 ; 0x1024
INCBIN "baserom.gbc",$1024,$1078 - $1024
PlaceString: ; $1078 TextBoxPalette: ; 1024
; fill textbox area with pal 07
; hl: tile address
; b: height
; c: width
ld de, AttrMap - TileMap
add hl, de
inc b
inc b
inc c
inc c
ld a, $07 ; palette
.gotoy
push bc
push hl push hl
PlaceNextChar: .gotox
ld [hli], a
dec c
jr nz, .gotox
pop hl
ld de, $0014 ; screen width in tiles (20)
add hl, de
pop bc
dec b
jr nz, .gotoy
ret
; 103e
SpeechTextBox: ; 103e
; Standard textbox.
ld hl, $c590 ; tile 0, 12
ld b, $4 ; height
ld c, $12 ; width ; SCREEN_WIDTH - 2 (border)
jp TextBox
; 1048
INCBIN "baserom.gbc", $1048, $1065 - $1048
PrintTextBoxText: ; 1065
ld bc, $c5b9 ; TileMap(1,14)
call $13e5 ; PrintText
ret
; 106c
INCBIN "baserom.gbc", $106c, $1078 - $106c
PlaceString: ; 1078
push hl
PlaceNextChar: ; 1079
ld a, [de] ld a, [de]
cp "@" cp "@"
jr nz, CheckDict jr nz, CheckDict
@ -1215,7 +1286,7 @@ NextChar: ; 1083
inc de inc de
jp PlaceNextChar jp PlaceNextChar
CheckDict: CheckDict: ; 1087
cp $15 cp $15
jp z, $117b jp z, $117b
cp $4f cp $4f
@ -3407,15 +3478,19 @@ GetPartyParamLocation: ; 3917
; 3927 ; 3927
GetPartyLocation: ; 3927 GetPartyLocation: ; 3927
; Add the length of a PartyMon struct to hl a times ; Add the length of a PartyMon struct to hl a times.
; input: ld bc, PartyMon2 - PartyMon1
; a: partymon #
; hl: partymon struct
ld bc, $0030 ; PARTYMON_LENGTH
jp AddNTimes jp AddNTimes
; 392d ; 392d
INCBIN "baserom.gbc", $392d, $3985 - $392d INCBIN "baserom.gbc", $392d, $397d - $392d
ResetDamage: ; 397d
xor a
ld [CurDamage], a
ld [CurDamage + 1], a
ret
; 3985
SetPlayerTurn: ; 3985 SetPlayerTurn: ; 3985
xor a xor a
@ -3429,7 +3504,216 @@ SetEnemyTurn: ; 3989
ret ret
; 398e ; 398e
INCBIN "baserom.gbc", $398e, $3b86 - $398e INCBIN "baserom.gbc", $398e, $39e1 - $398e
CleanGetBattleVarPair: ; 39e1
; Preserves hl.
push hl
call GetBattleVarPair
pop hl
ret
; 39e7
GetBattleVarPair: ; 39e7
; Get variable from pair a, depending on whose turn it is.
; There are 21 variable pairs.
push bc
; get var pair
ld hl, .battlevarpairs
ld c, a
ld b, 0
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
; Enemy turn uses the second byte instead.
; This lets battle variable calls be side-neutral.
ld a, [hBattleTurn]
and a
jr z, .getvar
inc hl
.getvar
; get var id
ld a, [hl]
ld c, a
ld b, $0
; seek
ld hl, .vars
add hl, bc
add hl, bc
; get var address
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hl]
pop bc
ret
.battlevarpairs
dw .substatus1 ; 0
dw .substatus2 ; 1
dw .substatus3 ; 2
dw .substatus4 ; 3
dw .substatus5 ; 4
dw .substatus1opp ; 5
dw .substatus2opp ; 6
dw .substatus3opp ; 7
dw .substatus4opp ; 8
dw .substatus5opp ; 9
dw .status ; a
dw .statusopp ; b
dw .animation ; c
dw .effect ; d
dw .power ; e
dw .type ; f
dw .curmove ; 10
dw .lastcountermove ; 11
dw .lastcountermoveopp ; 12
dw .lastmove ; 13
dw .lastmoveopp ; 14
; player enemy
.substatus1
db $00, $01 ; PLAYER_SUBSTATUS1, ENEMY_SUBSTATUS1
.substatus1opp
db $01, $00 ; ENEMY_SUBSTATUS1, PLAYER_SUBSTATUS1
.substatus2
db $02, $03 ; PLAYER_SUBSTATUS2, ENEMY_SUBSTATUS2
.substatus2opp
db $03, $02 ; ENEMY_SUBSTATUS2, PLAYER_SUBSTATUS2
.substatus3
db $04, $05 ; PLAYER_SUBSTATUS3, ENEMY_SUBSTATUS3
.substatus3opp
db $05, $04 ; ENEMY_SUBSTATUS3, PLAYER_SUBSTATUS3
.substatus4
db $06, $07 ; PLAYER_SUBSTATUS4, ENEMY_SUBSTATUS4
.substatus4opp
db $07, $06 ; ENEMY_SUBSTATUS4, PLAYER_SUBSTATUS4
.substatus5
db $08, $09 ; PLAYER_SUBSTATUS5, ENEMY_SUBSTATUS5
.substatus5opp
db $09, $08 ; ENEMY_SUBSTATUS5, PLAYER_SUBSTATUS5
.status
db $0a, $0b ; PLAYER_STATUS, ENEMY_STATUS
.statusopp
db $0b, $0a ; ENEMY_STATUS, PLAYER_STATUS
.animation
db $0c, $0d ; PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
.effect
db $0e, $0f ; PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
.power
db $10, $11 ; PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
.type
db $12, $13 ; PLAYER_MOVE_TYPE, ENEMY_MOVE_TYPE
.curmove
db $14, $15 ; PLAYER_CUR_MOVE, ENEMY_CUR_MOVE
.lastcountermove
db $16, $17 ; ENEMY_LAST_COUNTER_MOVE, PLAYER_LAST_COUNTER_MOVE
.lastcountermoveopp
db $17, $16 ; PLAYER_LAST_COUNTER_MOVE, ENEMY_LAST_COUNTER_MOVE
.lastmove
db $18, $19 ; PLAYER_LAST_MOVE, ENEMY_LAST_MOVE
.lastmoveopp
db $19, $18 ; ENEMY_LAST_MOVE, PLAYER_LAST_MOVE
.vars
dw PlayerSubStatus1
dw EnemySubStatus1
dw PlayerSubStatus2
dw EnemySubStatus2
dw PlayerSubStatus3
dw EnemySubStatus3
dw PlayerSubStatus4
dw EnemySubStatus4
dw PlayerSubStatus5
dw EnemySubStatus5
dw BattleMonStatus
dw EnemyMonStatus
dw PlayerMoveAnimation
dw EnemyMoveAnimation
dw PlayerMoveEffect
dw EnemyMoveEffect
dw PlayerMovePower
dw EnemyMovePower
dw PlayerMoveType
dw EnemyMoveType
dw CurPlayerMove
dw CurEnemyMove
dw LastEnemyCounterMove
dw LastPlayerCounterMove
dw LastPlayerMove
dw LastEnemyMove
; 3a90
INCBIN "baserom.gbc", $3a90, $3ab2 - $3a90
MobileTextBorder: ; 3ab2
; For mobile link battles only.
ld a, [InLinkBattle]
cp 4
ret c
; Draw a cell phone icon at the top right corner of the border.
ld hl, $c5a3 ; TileMap(19,12)
ld [hl], $5e ; cell phone top
ld hl, $c5b7 ; TileMap(19,13)
ld [hl], $5f ; cell phone bottom
ret
; 3ac3
BattleTextBox: ; 3ac3
push hl
call SpeechTextBox
call MobileTextBorder
call $1ad2 ; UpdateSprites
call $321c ; refresh?
pop hl
call PrintTextBoxText
ret
; 3ad5
FarBattleTextBox: ; 3ad5
; save bank
ld a, [$ff9d] ; bank
push af
; bank 20
ld a, $20
rst $10
; print text at hl
call BattleTextBox
; restore bank
pop af
rst $10
ret
; 3ae1
INCBIN "baserom.gbc", $3ae1, $3b86 - $3ae1
LoadMusicByte: ; 3b86 LoadMusicByte: ; 3b86
; load music data into CurMusicByte ; load music data into CurMusicByte

135
wram.asm
View File

@ -476,12 +476,33 @@ BattleMonSpclAtk: ; c646
BattleMonSpclDef: ; c648 BattleMonSpclDef: ; c648
ds 2 ds 2
ds 25 BattleMonType1: ; c64a
ds 1
BattleMonType2: ; c64b
ds 1
ds 23
CurOTMon: ; c663 CurOTMon: ; c663
ds 1 ds 1
ds 4 ds 1
TypeModifier: ; c665
; >10: super-effective
; 10: normal
; <10: not very effective
; bit 7 is used for something else
ds 1
CriticalHit: ; c666
; nonzero for a critical hit
ds 1
AttackMissed: ; c667
; nonzero for a miss
ds 1
PlayerSubStatus1: ; c668 PlayerSubStatus1: ; c668
; bit ; bit
@ -495,15 +516,23 @@ PlayerSubStatus1: ; c668
; 0 nightmare ; 0 nightmare
ds 1 ds 1
PlayerSubStatus2: ; c669 PlayerSubStatus2: ; c669
; unknown ; bit
; 7
; 6
; 5
; 4
; 3
; 2
; 1
; 0
ds 1 ds 1
PlayerSubStatus3: ; c66a PlayerSubStatus3: ; c66a
; bit ; bit
; 7 confusion ; 7 confusion
; 6 ; 6 flying
; 5 ; 5 underground
; 4 charged ; 4 charged
; 3 ; 3 flinch
; 2 ; 2
; 1 rollout ; 1 rollout
; 0 bide ; 0 bide
@ -515,18 +544,26 @@ PlayerSubStatus4: ; c66b
; 5 recharge ; 5 recharge
; 4 substitute ; 4 substitute
; 3 ; 3
; 2 focus energy
; 1
; 0 bide: unleashed energy
ds 1
PlayerSubStatus5: ; c66c
; bit
; 7
; 6
; 5 lock-on
; 4
; 3
; 2 ; 2
; 1 ; 1
; 0 ; 0
ds 1 ds 1
PlayerSubStatus5: ; c66c
; unknown
ds 1
EnemySubStatus1: ; c66d EnemySubStatus1: ; c66d
; see PlayerSubStatus1 ; see PlayerSubStatus1
ds 1 ds 1
EnemySubstatus2: ; c66e EnemySubStatus2: ; c66e
; see PlayerSubStatus2 ; see PlayerSubStatus2
ds 1 ds 1
EnemySubStatus3: ; c66f EnemySubStatus3: ; c66f
@ -539,8 +576,15 @@ EnemySubStatus5: ; c671
; see PlayerSubStatus5 ; see PlayerSubStatus5
ds 1 ds 1
ds 4 ds 1
PlayerConfuseCount: ; c673
ds 1
ds 1
PlayerDisableCount: ; c675
ds 1
PlayerEncoreCount: ; c676 PlayerEncoreCount: ; c676
ds 1 ds 1
PlayerPerishCount: ; c677 PlayerPerishCount: ; c677
@ -572,10 +616,42 @@ BattleScriptBufferLoc: ; c6b2
PlayerStatLevels: ; c6cc PlayerStatLevels: ; c6cc
; 07 neutral ; 07 neutral
ds 8 PlayerAtkLevel: ; c6cc
ds 1
PlayerDefLevel: ; c6cd
ds 1
PlayerSpdLevel: ; c6ce
ds 1
PlayerSAtkLevel: ; c6cf
ds 1
PlayerSDefLevel: ; c6d0
ds 1
PlayerAccLevel: ; c6d1
ds 1
PlayerEvaLevel: ; c6d2
ds 1
; c6d3
ds 1
PlayerStatLevelsEnd
EnemyStatLevels: ; c6d4 EnemyStatLevels: ; c6d4
; 07 neutral ; 07 neutral
ds 8 EnemyAtkLevel: ; c6d4
ds 1
EnemyDefLevel: ; c6d5
ds 1
EnemySpdLevel: ; c6d6
ds 1
EnemySAtkLevel: ; c6d7
ds 1
EnemySDefLevel: ; c6d8
ds 1
EnemyAccLevel: ; c6d9
ds 1
EnemyEvaLevel: ; c6da
ds 1
; c6db
ds 1
EnemyTurnsTaken: ; c6dc EnemyTurnsTaken: ; c6dc
ds 1 ds 1
@ -593,12 +669,21 @@ LinkBattleRNCount: ; c6e5
; how far through the prng stream ; how far through the prng stream
ds 1 ds 1
ds 15 ds 3
CurEnemyMoveNum: ; c6e9
ds 1
ds 10
AlreadyDisobeyed: ; c6f4
ds 1
DisabledMove: ; c6f5 DisabledMove: ; c6f5
ds 1 ds 1
EnemyEncoredMove: ; c6f6
ds 2 ds 1
ds 1
; exists so you can't counter on switch ; exists so you can't counter on switch
LastEnemyCounterMove: ; c6f8 LastEnemyCounterMove: ; c6f8
@ -606,7 +691,14 @@ LastEnemyCounterMove: ; c6f8
LastPlayerCounterMove: ; c6f9 LastPlayerCounterMove: ; c6f9
ds 1 ds 1
ds 8 ds 5
PlayerScreens: ; c6ff
; bit 4: reflect
; bit 3: light screen
ds 1
ds 2
PlayerLightScreenCount: ; c702 PlayerLightScreenCount: ; c702
ds 1 ds 1
@ -928,6 +1020,12 @@ EnemyMonSpclAtk: ; d220
EnemyMonSpclDef: ; d222 EnemyMonSpclDef: ; d222
ds 2 ds 2
EnemyMonType1: ; d224
ds 1
EnemyMonType2: ; d225
ds 1
SECTION "Battle",BSS[$d22d] SECTION "Battle",BSS[$d22d]
IsInBattle: ; d22d IsInBattle: ; d22d
@ -974,6 +1072,9 @@ UnownLetter: ; d234
CurBaseStats: ; d236 CurBaseStats: ; d236
ds 32 ds 32
CurDamage: ; d256
ds 2
SECTION "TimeOfDay",BSS[$d269] SECTION "TimeOfDay",BSS[$d269]
TimeOfDay: ; d269 TimeOfDay: ; d269