Merge pull request #146 from yenatch/master

statdown comments + fix make pngs
This commit is contained in:
Bryan Bishop 2013-06-13 14:57:26 -07:00
commit d9779c5852
6 changed files with 179 additions and 118 deletions

10
.gitattributes vendored
View File

@ -1,2 +1,12 @@
# No monkey business with line endings
* -text
# hexdump binary files
*.png diff=hex
*.lz diff=hex
*.2bpp diff=hex
*.1bpp diff=hex
*.pal diff=hex
*.bin diff=hex
*.blk diff=hex

View File

@ -41,6 +41,9 @@ cd pokecrystal
# install python requirements
pip install -r requirements.txt
# use hexdump to diff binary files
git config diff.hex.textconv hexdump
```
To compile the ROM from ASM source:

View File

@ -130,7 +130,7 @@ BattleCommand01: ; 34084
xor a
ld [AttackMissed], a
ld [$c70d], a
ld [EffectFailed], a
ld [$c689], a
ld [AlreadyDisobeyed], a
ld [AlreadyFailed], a
@ -2689,7 +2689,7 @@ BattleCommand90: ; 34ecc
; effectchance
xor a
ld [$c70d], a
ld [EffectFailed], a
call CheckSubstituteOpp
jr nz, .failed
@ -2708,7 +2708,7 @@ BattleCommand90: ; 34ecc
.failed
ld a, 1
ld [$c70d], a
ld [EffectFailed], a
and a
ret
; 34eee
@ -3467,7 +3467,7 @@ PlayerAttackDamage: ; 352e2
ld a, [hli]
ld b, a
ld c, [hl]
ld hl, $c6b6
ld hl, PlayerStats
jr .thickclub
@ -3728,7 +3728,7 @@ EnemyAttackDamage: ; 353f6
ld a, [hli]
ld b, a
ld c, [hl]
ld hl, $c6c1
ld hl, EnemyStats
jr .thickclub
@ -5653,7 +5653,7 @@ BattleCommand13: ; 35eee
ld a, b
cp $14
ret z
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call Function0x37962
@ -5922,7 +5922,7 @@ BattleCommand17: ; 3608c
ld a, b
cp $15
ret z
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call Function0x37962
@ -5997,7 +5997,7 @@ BattleCommand18: ; 36102
ld a, b
cp $16
ret z
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call Function0x37962
@ -6048,7 +6048,7 @@ BattleCommand19: ; 36165
ld a, b
cp $18
ret z
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call Function0x37962
@ -6127,7 +6127,7 @@ BattleCommand7d: ; 361e0
BattleCommand1c: ; 361e4
; statup
call Function0x361ef
ld a, [$c70e]
ld a, [FailedMessage]
and a
ret nz
jp Function0x36281
@ -6136,7 +6136,7 @@ BattleCommand1c: ; 361e4
Function0x361ef: ; 361ef
ld a, b
ld [$c70c], a
ld [LoweredStat], a
ld hl, PlayerStatLevels
ld a, [hBattleTurn]
and a
@ -6146,10 +6146,10 @@ Function0x361ef: ; 361ef
ld a, [AttackMissed]
and a
jp nz, Function0x3627b
ld a, [$c70d]
ld a, [EffectFailed]
and a
jp nz, Function0x3627b
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld c, a
ld b, $0
@ -6159,7 +6159,7 @@ Function0x361ef: ; 361ef
ld a, $d
cp b
jp c, Function0x36270
ld a, [$c70c]
ld a, [LoweredStat]
and $f0
jr z, .asm_3622b ; 0x36222 $7
inc b
@ -6174,12 +6174,12 @@ Function0x361ef: ; 361ef
cp $5
jr nc, .asm_36268 ; 0x36230 $36
ld hl, $c641
ld de, $c6b6
ld de, PlayerStats
ld a, [hBattleTurn]
and a
jr z, .asm_36243 ; 0x3623b $6
ld hl, $d21b
ld de, $c6c1
ld de, EnemyStats
.asm_36243
push bc
sla c
@ -6209,7 +6209,7 @@ Function0x361ef: ; 361ef
.asm_36268
pop hl
xor a
ld [$c70e], a
ld [FailedMessage], a
ret
; 3626e
@ -6223,7 +6223,7 @@ Function0x3626e: ; 3626e
Function0x36270: ; 36270
ld a, $2
ld [$c70e], a
ld [FailedMessage], a
ld a, $1
ld [AttackMissed], a
ret
@ -6232,7 +6232,7 @@ Function0x36270: ; 36270
Function0x3627b: ; 3627b
ld a, $1
ld [$c70e], a
ld [FailedMessage], a
ret
; 36281
@ -6264,156 +6264,179 @@ Function0x36281: ; 36281
BattleCommand7e: ; 362ad
; attackdown
ld a, $0
ld a, ATTACK
jr BattleCommand1d
BattleCommand7f: ; 362b1
; defensedown
ld a, $1
ld a, DEFENSE
jr BattleCommand1d
BattleCommand80: ; 362b5
; speeddown
ld a, $2
ld a, SPEED
jr BattleCommand1d
BattleCommand81: ; 362b9
; specialattackdown
ld a, $3
ld a, SP_ATTACK
jr BattleCommand1d
BattleCommand82: ; 362bd
; specialdefensedown
ld a, $4
ld a, SP_DEFENSE
jr BattleCommand1d
BattleCommand83: ; 362c1
; accuracydown
ld a, $5
ld a, ACCURACY
jr BattleCommand1d
BattleCommand84: ; 362c5
; evasiondown
ld a, $6
ld a, EVASION
jr BattleCommand1d
BattleCommand85: ; 362c9
; attackdown2
ld a, $10
ld a, $10 | ATTACK
jr BattleCommand1d
BattleCommand86: ; 362cd
; defensedown2
ld a, $11
ld a, $10 | DEFENSE
jr BattleCommand1d
BattleCommand87: ; 362d1
; speeddown2
ld a, $12
ld a, $10 | SPEED
jr BattleCommand1d
BattleCommand88: ; 362d5
; specialattackdown2
ld a, $13
ld a, $10 | SP_ATTACK
jr BattleCommand1d
BattleCommand89: ; 362d9
; specialdefensedown2
ld a, $14
ld a, $10 | SP_DEFENSE
jr BattleCommand1d
BattleCommand8a: ; 362dd
; accuracydown2
ld a, $15
ld a, $10 | ACCURACY
jr BattleCommand1d
BattleCommand8b: ; 362e1
; evasiondown2
ld a, $16
ld a, $10 | EVASION
BattleCommand1d: ; 362e3
; statdown
ld [$c70c], a
ld [LoweredStat], a
call Function0x36391
jp nz, Function0x36386
jp nz, .Mist
ld hl, EnemyStatLevels
ld a, [hBattleTurn]
and a
jr z, .asm_362f7 ; 362f2 $3
jr z, .GetStatLevel
ld hl, PlayerStatLevels
.asm_362f7
ld a, [$c70c]
.GetStatLevel
; Attempt to lower the stat.
ld a, [LoweredStat]
and $f
ld c, a
ld b, $0
ld b, 0
add hl, bc
ld b, [hl]
dec b
jp z, .asm_36372
ld a, [$c70c]
jp z, .CantLower
; Sharply lower the stat if applicable.
ld a, [LoweredStat]
and $f0
jr z, .asm_36310 ; 3630a $4
jr z, .ComputerMiss
dec b
jr nz, .asm_36310 ; 3630d $1
jr nz, .ComputerMiss
inc b
.asm_36310
.ComputerMiss
; Computer opponents have a 1/4 chance of failing.
ld a, [hBattleTurn]
and a
jr z, .asm_36338 ; 36313 $23
jr z, .DidntMiss
ld a, [InLinkBattle]
and a
jr nz, .asm_36338 ; 36319 $1d
jr nz, .DidntMiss
ld a, [$cfc0]
and a
jr nz, .asm_36338 ; 3631f $17
jr nz, .DidntMiss
; Lock-On still always works.
ld a, [PlayerSubStatus5]
bit 5, a
jr nz, .asm_36338 ; 36326 $10
bit SUBSTATUS_LOCK_ON, a
jr nz, .DidntMiss
; Attacking moves that also lower accuracy are unaffected.
ld a, BATTLE_VARS_MOVE_EFFECT
call CleanGetBattleVarPair
cp $49
jr z, .asm_36338 ; 3632f $7
cp EFFECT_ACCURACY_DOWN_HIT
jr z, .DidntMiss
call FarBattleRNG
cp $40
jr c, .asm_3637d ; 36336 $45
.asm_36338
jr c, .Failed
.DidntMiss
call CheckSubstituteOpp
jr nz, .asm_3637d ; 3633b $40
jr nz, .Failed
ld a, [AttackMissed]
and a
jr nz, .asm_3637d ; 36341 $3a
ld a, [$c70d]
jr nz, .Failed
ld a, [EffectFailed]
and a
jr nz, .asm_3637d ; 36347 $34
jr nz, .Failed
call CheckHiddenOpponent
jr nz, .asm_3637d ; 3634c $2f
jr nz, .Failed
; Accuracy/Evasion reduction don't involve stats.
ld [hl], b
ld a, c
cp $5
jr nc, .asm_3636c ; 36352 $18
cp ACCURACY
jr nc, .Hit
push hl
ld hl, $d21b
ld de, $c6c1
ld hl, EnemyMonAtk + 1
ld de, EnemyStats
ld a, [hBattleTurn]
and a
jr z, .asm_36366 ; 3635e $6
ld hl, $c641
ld de, $c6b6
jr z, .asm_36366
ld hl, BattleMonAtk + 1
ld de, PlayerStats
.asm_36366
call Function0x3641a
pop hl
jr z, .asm_36371 ; 3636a $5
.asm_3636c
jr z, .CouldntLower
.Hit
xor a
ld [$c70e], a
ld [FailedMessage], a
ret
.asm_36371
.CouldntLower
inc [hl]
.asm_36372
ld a, $3
ld [$c70e], a
ld a, $1
.CantLower
ld a, 3
ld [FailedMessage], a
ld a, 1
ld [AttackMissed], a
ret
.asm_3637d
ld a, $1
ld [$c70e], a
.Failed
ld a, 1
ld [FailedMessage], a
ld [AttackMissed], a
ret
; 36386
Function0x36386: ; 36386
ld a, $2
ld [$c70e], a
ld a, $1
.Mist
ld a, 2
ld [FailedMessage], a
ld a, 1
ld [AttackMissed], a
ret
; 36391
@ -6446,10 +6469,10 @@ Function0x36391: ; 36391
BattleCommand8c: ; 363b8
ld a, [$c70e]
ld a, [FailedMessage]
and a
ret nz
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld b, a
inc b
@ -6462,7 +6485,7 @@ BattleCommand8c: ; 363b8
start_asm
ld hl, .up
ld a, [$c70c]
ld a, [LoweredStat]
and $f0
ret z
ld hl, .wayup
@ -6480,10 +6503,10 @@ BattleCommand8c: ; 363b8
BattleCommand8d: ; 363e9
ld a, [$c70e]
ld a, [FailedMessage]
and a
ret nz
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld b, a
inc b
@ -6496,7 +6519,7 @@ BattleCommand8d: ; 363e9
start_asm
ld hl, .fell
ld a, [$c70c]
ld a, [LoweredStat]
and $f0
ret z
ld hl, .sharplyfell
@ -6513,20 +6536,22 @@ BattleCommand8d: ; 363e9
Function0x3641a: ; 3641a
; selfdestruct
; Lower stat c from stat struct hl (buffer de).
push bc
sla c
ld b, 0
add hl, bc
; add de, c
ld a, c
add e
ld e, a
jr nc, .asm_36426
inc d
.asm_36426
pop bc
; The lowest possible stat is 1.
ld a, [hld]
sub 1
jr nz, .asm_3642f
@ -6537,21 +6562,19 @@ Function0x3641a: ; 3641a
.asm_3642f
ld a, [hBattleTurn]
and a
jr z, .asm_3643f
jr z, .Player
call SwitchTurn
call Function0x365d7
call SwitchTurn
jr .end
jr .asm_36448
.asm_3643f
.Player
call SwitchTurn
call Function0x365fd
call SwitchTurn
.asm_36448
ld a, $1
.end
ld a, 1
and a
ret
; 3644c
@ -6559,7 +6582,7 @@ Function0x3641a: ; 3641a
BattleCommand8e: ; 3644c
; statupfailtext
ld a, [$c70e]
ld a, [FailedMessage]
and a
ret z
push af
@ -6567,7 +6590,7 @@ BattleCommand8e: ; 3644c
pop af
dec a
jp z, TryPrintButItFailed
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld b, a
inc b
@ -6579,7 +6602,7 @@ BattleCommand8e: ; 3644c
BattleCommand8f: ; 3646a
; statdownfailtext
ld a, [$c70e]
ld a, [FailedMessage]
and a
ret z
push af
@ -6590,7 +6613,7 @@ BattleCommand8f: ; 3646a
dec a
ld hl, ProtectedByMistText
jp z, FarBattleTextBox
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld b, a
inc b
@ -6687,7 +6710,7 @@ ResetMiss: ; 3652d
Function0x36532: ; 36532
ld [$c70c], a
ld [LoweredStat], a
ld hl, PlayerStatLevels
ld a, [hBattleTurn]
@ -6696,7 +6719,7 @@ Function0x36532: ; 36532
ld hl, EnemyStatLevels
.asm_36540
ld a, [$c70c]
ld a, [LoweredStat]
and $f
ld c, a
ld b, 0
@ -6705,7 +6728,7 @@ Function0x36532: ; 36532
dec b
jr z, .asm_36589
ld a, [$c70c]
ld a, [LoweredStat]
and $f0
jr z, .asm_36558
dec b
@ -6720,12 +6743,12 @@ Function0x36532: ; 36532
push hl
ld hl, $c641
ld de, $c6b6
ld de, PlayerStats
ld a, [hBattleTurn]
and a
jr z, .asm_36570
ld hl, $d21b
ld de, $c6c1
ld de, EnemyStats
.asm_36570
call Function0x3641a
@ -6746,7 +6769,7 @@ Function0x36532: ; 36532
.asm_36583
xor a
ld [$c70e], a
ld [FailedMessage], a
ret
.asm_36588
@ -6754,7 +6777,7 @@ Function0x36532: ; 36532
.asm_36589
ld a, 2
ld [$c70e], a
ld [FailedMessage], a
ret
; 3658f
@ -6821,7 +6844,7 @@ BattleCommanda7: ; 365c3
Function0x365d7: ; 365d7
ld hl, PlayerAtkLevel
ld de, $c6b6
ld de, PlayerStats
ld bc, BattleMonAtk
ld a, $5
@ -6844,7 +6867,7 @@ Function0x365d7: ; 365d7
Function0x365fd: ; 365fd
ld hl, EnemyAtkLevel
ld de, $c6c1
ld de, EnemyStats
ld bc, EnemyMonAtk
ld a, $5
@ -7601,7 +7624,7 @@ BattleCommand25: ; 36aa0
ret nz
call Function0x36abf
ret nz
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
@ -8036,7 +8059,7 @@ BattleCommand2b: ; 36d1d
ld a, b
cp $19
ret z
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call Function0x37962
@ -8902,8 +8925,8 @@ BattleCommand2d: ; 371cd
ld a, [hl]
ld [$d265], a
call $343b
ld hl, $c6c1
ld de, $c6b6
ld hl, EnemyStats
ld de, PlayerStats
ld bc, $000a
call BattleSideCopy
ld hl, EnemyStatLevels
@ -9320,7 +9343,7 @@ BattleCommand50: ; 37492
ld hl, $5e76
rst FarCall
ret c
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
ld a, [InLinkBattle]
@ -9354,7 +9377,7 @@ BattleCommand50: ; 37492
ld hl, $5e76
rst FarCall
ret c
ld a, [$c70d]
ld a, [EffectFailed]
and a
ret nz
call .asm_37501

View File

@ -1,6 +1,14 @@
MAX_LEVEL EQU 100
NUM_MOVES EQU 4
ATTACK EQU 0
DEFENSE EQU 1
SPEED EQU 2
SP_ATTACK EQU 3
SP_DEFENSE EQU 4
ACCURACY EQU 5
EVASION EQU 6
; move struct
MOVE_LENGTH EQU 7
MOVE_ANIM EQU 0

View File

@ -1563,6 +1563,9 @@ if __name__ == "__main__":
if argv[1] == 'dump-pngs':
mass_to_colored_png()
elif argv[1] == 'mass-decompress':
mass_decompress()
elif argv[1] == 'front-to-2bpp':
decompress_frontpic(argv[2])

View File

@ -621,7 +621,14 @@ BattleScriptBuffer: ; c68a
BattleScriptBufferLoc: ; c6b2
ds 2
ds 24
ds 2
PlayerStats: ; c6b6
ds 10
ds 1
EnemyStats: ; c6c1
ds 10
ds 1
PlayerStatLevels: ; c6cc
; 07 neutral
@ -749,7 +756,14 @@ WeatherCount: ; c70b
; # turns remaining
ds 1
ds 6
LoweredStat: ; c70c
ds 1
EffectFailed: ; c70d
ds 1
FailedMessage: ; c70e
ds 1
ds 3
PlayerUsedMoves: ; c712
; add a move that has been used once by the player