Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Entry:
- ROMF:5DCF AF xor a
- ROMF:5DD0 21 D7 D0 ld hl,d0d7 ;D0D7-D0D8: damage to eventually inflict,intitialise to zero
- ROMF:5DD3 22 ldi (hl),a
- ROMF:5DD4 77 ld (hl),a
- ROMF:5DD5 21 D4 CF ld hl,cfd4
- ROMF:5DD8 2A ldi a,(hl) ;*read attack base power
- ROMF:5DD9 A7 and a
- ROMF:5DDA 57 ld d,a ;*D = attack base, used later
- ROMF:5DDB C8 ret z ;return if attack is zero
- ROMF:5DDC 7E ld a,(hl) ;*test attacking type
- ROMF:5DDD FE 14 cp a,14 ;types >= $14 are all special
- ROMF:5DDF 30 35 jr nc,5e16(specialAttack)
- .physicalAttack
- ROMF:5DE1 21 F8 CF ld hl,cff8 ;CFF8: opponent defense
- ROMF:5DE4 2A ldi a,(hl) ;*BC = opponent defense used later
- ROMF:5DE5 47 ld b,a
- ROMF:5DE6 4E ld c,(hl)
- ROMF:5DE7 FA 69 D0 ld a,(d069) ;test for reflect?
- ROMF:5DEA CB 57 bit 2,a
- ROMF:5DEC 28 04 jr z,5df2(+)
- .doubleDefense:
- ROMF:5DEE CB 21 sla c ;x2 defense if bit2 of D069 is set
- ROMF:5DF0 CB 10 rl b
- .+
- ROMF:5DF2 21 25 D0 ld hl,d025 ;attack pointer
- ROMF:5DF5 FA 5E D0 ld a,(d05e)
- ROMF:5DF8 A7 and a
- ROMF:5DF9 28 4E jr z,5e49(skip)
- ROMF:5DFB 0E 03 ld c,03
- ROMF:5DFD CD 1C 5F call 5f1c
- ROMF:5E00 F0 97 ld a,(ff00+97)
- ROMF:5E02 47 ld b,a
- ROMF:5E03 F0 98 ld a,(ff00+98)
- ROMF:5E05 4F ld c,a
- ROMF:5E06 C5 push bc
- ROMF:5E07 21 8F D1 ld hl,d18f
- ROMF:5E0A FA 2F CC ld a,(cc2f)
- ROMF:5E0D 01 2C 00 ld bc,002c
- ROMF:5E10 CD 87 3A call 3a87
- ROMF:5E13 C1 pop bc
- ROMF:5E14 18 33 jr 5e49
- .specialAttack
- ROMF:5E16 21 FC CF ld hl,cffc ;CFFC: opponent special
- ROMF:5E19 2A ldi a,(hl) ;*BC = opponent special defense used later
- ROMF:5E1A 47 ld b,a
- ROMF:5E1B 4E ld c,(hl)
- ROMF:5E1C FA 69 D0 ld a,(d069) ;test for lightscreen?
- ROMF:5E1F CB 4F bit 1,a
- ROMF:5E21 28 04 jr z,5e27(+)
- .doubleSpecialDefense
- ROMF:5E23 CB 21 sla c ;x2 special defense if bit1 of D069 set
- ROMF:5E25 CB 10 rl b
- .+
- ROMF:5E27 21 2B D0 ld hl,d02b
- ROMF:5E2A FA 5E D0 ld a,(d05e) ;D05E(?) decides skip
- ROMF:5E2D A7 and a
- ROMF:5E2E 28 19 jr z,5e49(skip) ;skip portion of code that pulls up inactive pokemon
- .loadOtherPoke
- ROMF:5E30 0E 05 ld c,05
- ROMF:5E32 CD 1C 5F call 5f1c
- ROMF:5E35 F0 97 ld a,(ff00+97)
- ROMF:5E37 47 ld b,a
- ROMF:5E38 F0 98 ld a,(ff00+98)
- ROMF:5E3A 4F ld c,a
- ROMF:5E3B C5 push bc
- ROMF:5E3C 21 95 D1 ld hl,d195 ;HL base = D195 (where other monster data is stored)
- ROMF:5E3F FA 2F CC ld a,(cc2f) ;multiplier = (CC2F) (desired slot #?)
- ROMF:5E42 01 2C 00 ld bc,002c ;mulitiplicand = 002C (bytes per monster)
- ROMF:5E45 CD 87 3A call 3a87(Mult1) ;HL = D195 + $002C * slot
- ROMF:5E48 C1 pop bc
- .skip
- ROMF:5E49 2A ldi a,(hl) ;HL: D025 when this was taken
- ROMF:5E4A 6E ld l,(hl)
- ROMF:5E4B 67 ld h,a ;*HL = attacker attack
- ROMF:5E4C B0 or b ;is either attack or defense high byte nonzero?
- ROMF:5E4D 28 15 jr z,5e64(+)
- ROMF:5E4F CB 38 slr b ;(defense) BC /= 4 (this is just so it fits into a single byte, 10bits max)
- ROMF:5E51 CB 19 rr c
- ROMF:5E53 CB 38 slr b
- ROMF:5E55 CB 19 rr c
- ROMF:5E57 CB 3C slr h ;(attack) HL /= 4 (to apply equal scaling)
- ROMF:5E59 CB 1D rr l
- ROMF:5E5B CB 3C slr h
- ROMF:5E5D CB 1D rr l
- ROMF:5E5F 7D ld a,l
- ROMF:5E60 B4 or h
- ROMF:5E61 20 01 jr nz,5e64(+) ;is HL result zero?
- ROMF:5E63 2C inc l ;minimum HL = 1
- .+
- ROMF:5E64 45 ld b,l ;*B = attack (possibly scaled) (C contains defense)
- ROMF:5E65 FA 22 D0 ld a,(d022) ;*E = level
- ROMF:5E69 FA 5E D0 ld a,(d05e) ;critical hit?
- ROMF:5E6C A7 and a
- ROMF:5E6D 28 02 jr z,5e71(+)
- ROMF:5E6F CB 23 sla e ;double level if it was a critical hit
- .+
- ROMF:5E71 3E 01 ld a,01 ;return Z = 0
- ROMF:5E73 A7 and a
- ROMF:5E74 C9 ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement