mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Decomped GetApparentWeather
This commit is contained in:
parent
ee2e4b4c71
commit
74f125be58
|
|
@ -1,25 +1,6 @@
|
|||
#pragma once
|
||||
.public AbilityIsActiveVeneer
|
||||
.public abs
|
||||
.public AdvanceFrame
|
||||
.public AnimationDelayOrSomething
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__023350D8
|
||||
.public GendersEqualNotGenderless
|
||||
.public GetLeader
|
||||
.public GetWeatherColorTable
|
||||
.public GravityIsActive
|
||||
.public HasHeldItem
|
||||
.public IsMonsterSleeping
|
||||
.public IsSecretFloor
|
||||
.public IsThawingMove
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public MonsterIsType
|
||||
.public ov29_022DE608
|
||||
.public ov29_022E5FE8
|
||||
.public ov29_02338A4C
|
||||
.public ov29_02353562
|
||||
.public TryActivateArtificialWeatherAbilities
|
||||
.public TryActivateWeather
|
||||
.public TryWeatherFormChange
|
||||
|
|
|
|||
19
asm/include/overlay_29_02334D58.inc
Normal file
19
asm/include/overlay_29_02334D58.inc
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
.public AdvanceFrame
|
||||
.public AnimationDelayOrSomething
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__023350D8
|
||||
.public GetApparentWeather
|
||||
.public GetLeader
|
||||
.public GetWeatherColorTable
|
||||
.public IsSecretFloor
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public TryActivateArtificialWeatherAbilities
|
||||
.public TryActivateWeather
|
||||
.public TryWeatherFormChange
|
||||
.public abs
|
||||
.public ov29_022DE608
|
||||
.public ov29_022E5FE8
|
||||
.public ov29_02338A4C
|
||||
.public ov29_02353562
|
||||
|
|
@ -987,328 +987,3 @@ _02334CE8:
|
|||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_02334CAC
|
||||
|
||||
arm_func_start GetApparentWeather
|
||||
GetApparentWeather: ; 0x02334D08
|
||||
stmdb sp!, {r4, lr}
|
||||
movs r4, r0
|
||||
beq _02334D40
|
||||
mov r1, #0x6f
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
bne _02334D34
|
||||
mov r0, r4
|
||||
mov r1, #0x34
|
||||
bl HasHeldItem
|
||||
_02334D34:
|
||||
cmp r0, #0
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, pc}
|
||||
_02334D40:
|
||||
ldr r0, _02334D54 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0xc000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0xc94]
|
||||
#else
|
||||
ldrb r0, [r0, #0xd38]
|
||||
#endif
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_02334D54: .word DUNGEON_PTR
|
||||
arm_func_end GetApparentWeather
|
||||
|
||||
arm_func_start ov29_02334D58
|
||||
ov29_02334D58: ; 0x02334D58
|
||||
stmdb sp!, {r3, lr}
|
||||
bl IsSecretFloor
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, pc}
|
||||
ldr r0, _02334DA4 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x28000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x612]
|
||||
#else
|
||||
ldrb r0, [r0, #0x6b6]
|
||||
#endif
|
||||
cmp r0, #8
|
||||
bne _02334D8C
|
||||
mov r0, #8
|
||||
bl DungeonRandInt
|
||||
and r0, r0, #0xff
|
||||
_02334D8C:
|
||||
bl ov29_02334DA8
|
||||
bl TryActivateArtificialWeatherAbilities
|
||||
mov r0, #0
|
||||
mov r1, #1
|
||||
bl TryActivateWeather
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02334DA4: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334D58
|
||||
|
||||
arm_func_start ov29_02334DA8
|
||||
ov29_02334DA8: ; 0x02334DA8
|
||||
#ifdef JAPAN
|
||||
#define OV29_02334DA8_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_02334DA8_OFFSET 0
|
||||
#endif
|
||||
ldr r3, _02334E6C ; =DUNGEON_PTR
|
||||
mov r1, #0
|
||||
ldr r2, [r3]
|
||||
add r2, r2, #0xc000
|
||||
strb r0, [r2, #0xd39 + OV29_02334DA8_OFFSET]
|
||||
ldr r0, [r3]
|
||||
add r0, r0, #0xc000
|
||||
ldrb r2, [r0, #0xd39 + OV29_02334DA8_OFFSET]
|
||||
strb r2, [r0, #0xd38 + OV29_02334DA8_OFFSET]
|
||||
ldr r0, [r3]
|
||||
add r0, r0, #0xc000
|
||||
strb r1, [r0, #0xd5d + OV29_02334DA8_OFFSET]
|
||||
mov r0, r1
|
||||
_02334DDC:
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
#ifdef JAPAN
|
||||
add r2, r2, #0xcc00
|
||||
strh r0, [r2, #0x96]
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
add r2, r2, #0xcc00
|
||||
add r1, r1, #1
|
||||
strh r0, [r2, #0xa6]
|
||||
#else
|
||||
add r2, r2, #0xcd00
|
||||
strh r0, [r2, #0x3a]
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
add r2, r2, #0xcd00
|
||||
add r1, r1, #1
|
||||
strh r0, [r2, #0x4a]
|
||||
#endif
|
||||
cmp r1, #8
|
||||
blt _02334DDC
|
||||
ldr r2, _02334E6C ; =DUNGEON_PTR
|
||||
mov r3, #9
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r3, [r1, #0xd5a + OV29_02334DA8_OFFSET]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r0, [r1, #0xd5b + OV29_02334DA8_OFFSET]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r0, [r1, #0xd5c + OV29_02334DA8_OFFSET]
|
||||
_02334E34:
|
||||
ldr r1, [r2]
|
||||
and r3, r0, #0xff
|
||||
add r1, r1, r0, lsl #2
|
||||
strb r3, [r1, #0x1e0]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, r0, lsl #2
|
||||
strb r3, [r1, #0x1e1]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, r0, lsl #2
|
||||
add r0, r0, #1
|
||||
strb r3, [r1, #0x1e2]
|
||||
cmp r0, #0x100
|
||||
blt _02334E34
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02334E6C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334DA8
|
||||
|
||||
arm_func_start ov29_02334E70
|
||||
ov29_02334E70: ; 0x02334E70
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
str r0, [sp]
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
bl GetWeatherColorTable
|
||||
mov r5, r0
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
ldr r1, [sp]
|
||||
bl ov29_022E5FE8
|
||||
mov r0, #0x25
|
||||
bl AdvanceFrame
|
||||
mov r0, #1
|
||||
bl AnimationDelayOrSomething
|
||||
ldr r0, _0233503C ; =ov29_02353562
|
||||
mov r1, #1
|
||||
ldrb fp, [r0]
|
||||
mov r4, #0
|
||||
strb r1, [r0]
|
||||
b _0233500C
|
||||
_02334EC0:
|
||||
mov r0, #0x25
|
||||
mov r6, #0
|
||||
bl AdvanceFrame
|
||||
mov r8, r6
|
||||
_02334ED0:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
ldrb r7, [r5, r8, lsl #2]
|
||||
ldr sl, [r0]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e0]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e0]
|
||||
blt _02334F28
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e0]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e0]
|
||||
blo _02334F28
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e0]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e0]
|
||||
_02334F28:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
add r1, r5, r8, lsl #2
|
||||
ldr sl, [r0]
|
||||
ldrb r7, [r1, #1]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e1]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e1]
|
||||
blt _02334F84
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e1]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e1]
|
||||
blo _02334F84
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e1]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e1]
|
||||
_02334F84:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
add r1, r5, r8, lsl #2
|
||||
ldr sl, [r0]
|
||||
ldrb r7, [r1, #2]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e2]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e2]
|
||||
blt _02334FE0
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e2]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e2]
|
||||
blo _02334FE0
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e2]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e2]
|
||||
_02334FE0:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
cmp r8, #0x100
|
||||
blt _02334ED0
|
||||
bl ov29_022DE608
|
||||
cmp r6, #0
|
||||
beq _02335014
|
||||
add r0, r4, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r4, r0, asr #0x10
|
||||
_0233500C:
|
||||
cmp r4, #0x40
|
||||
blt _02334EC0
|
||||
_02335014:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0xc000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0xc94]
|
||||
#else
|
||||
ldrb r0, [r0, #0xd38]
|
||||
#endif
|
||||
bl ov29_02338A4C
|
||||
ldr r1, _0233503C ; =ov29_02353562
|
||||
ldr r0, [sp]
|
||||
strb fp, [r1]
|
||||
bl ov29_02335044
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0233503C: .word ov29_02353562
|
||||
_02335040: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334E70
|
||||
|
||||
arm_func_start ov29_02335044
|
||||
ov29_02335044: ; 0x02335044
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _023350D4 ; =DUNGEON_PTR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
add r0, r0, #0x1a000
|
||||
#ifdef JAPAN
|
||||
ldr r4, [r0, #0x188]
|
||||
#else
|
||||
ldr r4, [r0, #0x22c]
|
||||
#endif
|
||||
cmp r4, #0
|
||||
bne _0233506C
|
||||
bl GetLeader
|
||||
mov r4, r0
|
||||
_0233506C:
|
||||
cmp r5, #0
|
||||
beq _02335094
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x56
|
||||
add r0, r0, #0xc00
|
||||
#else
|
||||
add r0, r0, #0x45
|
||||
add r0, r0, #0xa00
|
||||
#endif
|
||||
mov r1, r0, lsl #0x10
|
||||
mov r0, r4
|
||||
mov r1, r1, lsr #0x10
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
_02335094:
|
||||
ldr r4, _023350D4 ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_0233509C:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r6, [r0, #0xad4]
|
||||
#else
|
||||
ldr r6, [r0, #0xb78]
|
||||
#endif
|
||||
mov r0, r6
|
||||
bl EntityIsValid__023350D8
|
||||
cmp r0, #0
|
||||
beq _023350C4
|
||||
mov r0, r6
|
||||
bl TryWeatherFormChange
|
||||
_023350C4:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x14
|
||||
blt _0233509C
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_023350D4: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02335044
|
||||
|
|
|
|||
298
asm/overlay_29_02334D58.s
Normal file
298
asm/overlay_29_02334D58.s
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "overlay_29_02334D58.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov29_02334D58
|
||||
ov29_02334D58: ; 0x02334D58
|
||||
stmdb sp!, {r3, lr}
|
||||
bl IsSecretFloor
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r3, pc}
|
||||
ldr r0, _02334DA4 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x28000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x612]
|
||||
#else
|
||||
ldrb r0, [r0, #0x6b6]
|
||||
#endif
|
||||
cmp r0, #8
|
||||
bne _02334D8C
|
||||
mov r0, #8
|
||||
bl DungeonRandInt
|
||||
and r0, r0, #0xff
|
||||
_02334D8C:
|
||||
bl ov29_02334DA8
|
||||
bl TryActivateArtificialWeatherAbilities
|
||||
mov r0, #0
|
||||
mov r1, #1
|
||||
bl TryActivateWeather
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02334DA4: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334D58
|
||||
|
||||
arm_func_start ov29_02334DA8
|
||||
ov29_02334DA8: ; 0x02334DA8
|
||||
#ifdef JAPAN
|
||||
#define OV29_02334DA8_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_02334DA8_OFFSET 0
|
||||
#endif
|
||||
ldr r3, _02334E6C ; =DUNGEON_PTR
|
||||
mov r1, #0
|
||||
ldr r2, [r3]
|
||||
add r2, r2, #0xc000
|
||||
strb r0, [r2, #0xd39 + OV29_02334DA8_OFFSET]
|
||||
ldr r0, [r3]
|
||||
add r0, r0, #0xc000
|
||||
ldrb r2, [r0, #0xd39 + OV29_02334DA8_OFFSET]
|
||||
strb r2, [r0, #0xd38 + OV29_02334DA8_OFFSET]
|
||||
ldr r0, [r3]
|
||||
add r0, r0, #0xc000
|
||||
strb r1, [r0, #0xd5d + OV29_02334DA8_OFFSET]
|
||||
mov r0, r1
|
||||
_02334DDC:
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
#ifdef JAPAN
|
||||
add r2, r2, #0xcc00
|
||||
strh r0, [r2, #0x96]
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
add r2, r2, #0xcc00
|
||||
add r1, r1, #1
|
||||
strh r0, [r2, #0xa6]
|
||||
#else
|
||||
add r2, r2, #0xcd00
|
||||
strh r0, [r2, #0x3a]
|
||||
ldr r2, [r3]
|
||||
add r2, r2, r1, lsl #1
|
||||
add r2, r2, #0xcd00
|
||||
add r1, r1, #1
|
||||
strh r0, [r2, #0x4a]
|
||||
#endif
|
||||
cmp r1, #8
|
||||
blt _02334DDC
|
||||
ldr r2, _02334E6C ; =DUNGEON_PTR
|
||||
mov r3, #9
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r3, [r1, #0xd5a + OV29_02334DA8_OFFSET]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r0, [r1, #0xd5b + OV29_02334DA8_OFFSET]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0xc000
|
||||
strb r0, [r1, #0xd5c + OV29_02334DA8_OFFSET]
|
||||
_02334E34:
|
||||
ldr r1, [r2]
|
||||
and r3, r0, #0xff
|
||||
add r1, r1, r0, lsl #2
|
||||
strb r3, [r1, #0x1e0]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, r0, lsl #2
|
||||
strb r3, [r1, #0x1e1]
|
||||
ldr r1, [r2]
|
||||
add r1, r1, r0, lsl #2
|
||||
add r0, r0, #1
|
||||
strb r3, [r1, #0x1e2]
|
||||
cmp r0, #0x100
|
||||
blt _02334E34
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02334E6C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334DA8
|
||||
|
||||
arm_func_start ov29_02334E70
|
||||
ov29_02334E70: ; 0x02334E70
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
str r0, [sp]
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
bl GetWeatherColorTable
|
||||
mov r5, r0
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
ldr r1, [sp]
|
||||
bl ov29_022E5FE8
|
||||
mov r0, #0x25
|
||||
bl AdvanceFrame
|
||||
mov r0, #1
|
||||
bl AnimationDelayOrSomething
|
||||
ldr r0, _0233503C ; =ov29_02353562
|
||||
mov r1, #1
|
||||
ldrb fp, [r0]
|
||||
mov r4, #0
|
||||
strb r1, [r0]
|
||||
b _0233500C
|
||||
_02334EC0:
|
||||
mov r0, #0x25
|
||||
mov r6, #0
|
||||
bl AdvanceFrame
|
||||
mov r8, r6
|
||||
_02334ED0:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
ldrb r7, [r5, r8, lsl #2]
|
||||
ldr sl, [r0]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e0]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e0]
|
||||
blt _02334F28
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e0]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e0]
|
||||
blo _02334F28
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e0]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e0]
|
||||
_02334F28:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
add r1, r5, r8, lsl #2
|
||||
ldr sl, [r0]
|
||||
ldrb r7, [r1, #1]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e1]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e1]
|
||||
blt _02334F84
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e1]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e1]
|
||||
blo _02334F84
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e1]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e1]
|
||||
_02334F84:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
add r1, r5, r8, lsl #2
|
||||
ldr sl, [r0]
|
||||
ldrb r7, [r1, #2]
|
||||
add r0, sl, r8, lsl #2
|
||||
ldrb sb, [r0, #0x1e2]
|
||||
sub r0, sb, r7
|
||||
bl abs
|
||||
cmp r0, #0xa
|
||||
addlt r0, sl, r8, lsl #2
|
||||
strltb r7, [r0, #0x1e2]
|
||||
blt _02334FE0
|
||||
cmp sb, r7
|
||||
addlo r1, sl, r8, lsl #2
|
||||
ldrlob r0, [r1, #0x1e2]
|
||||
mov r6, #1
|
||||
addlo r0, r0, #0xa
|
||||
strlob r0, [r1, #0x1e2]
|
||||
blo _02334FE0
|
||||
addhi r1, sl, r8, lsl #2
|
||||
ldrhib r0, [r1, #0x1e2]
|
||||
subhi r0, r0, #0xa
|
||||
strhib r0, [r1, #0x1e2]
|
||||
_02334FE0:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
cmp r8, #0x100
|
||||
blt _02334ED0
|
||||
bl ov29_022DE608
|
||||
cmp r6, #0
|
||||
beq _02335014
|
||||
add r0, r4, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r4, r0, asr #0x10
|
||||
_0233500C:
|
||||
cmp r4, #0x40
|
||||
blt _02334EC0
|
||||
_02335014:
|
||||
ldr r0, _02335040 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0xc000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0xc94]
|
||||
#else
|
||||
ldrb r0, [r0, #0xd38]
|
||||
#endif
|
||||
bl ov29_02338A4C
|
||||
ldr r1, _0233503C ; =ov29_02353562
|
||||
ldr r0, [sp]
|
||||
strb fp, [r1]
|
||||
bl ov29_02335044
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0233503C: .word ov29_02353562
|
||||
_02335040: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02334E70
|
||||
|
||||
arm_func_start ov29_02335044
|
||||
ov29_02335044: ; 0x02335044
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _023350D4 ; =DUNGEON_PTR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
add r0, r0, #0x1a000
|
||||
#ifdef JAPAN
|
||||
ldr r4, [r0, #0x188]
|
||||
#else
|
||||
ldr r4, [r0, #0x22c]
|
||||
#endif
|
||||
cmp r4, #0
|
||||
bne _0233506C
|
||||
bl GetLeader
|
||||
mov r4, r0
|
||||
_0233506C:
|
||||
cmp r5, #0
|
||||
beq _02335094
|
||||
mov r0, #0
|
||||
bl GetApparentWeather
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x56
|
||||
add r0, r0, #0xc00
|
||||
#else
|
||||
add r0, r0, #0x45
|
||||
add r0, r0, #0xa00
|
||||
#endif
|
||||
mov r1, r0, lsl #0x10
|
||||
mov r0, r4
|
||||
mov r1, r1, lsr #0x10
|
||||
bl LogMessageByIdWithPopupCheckUser
|
||||
_02335094:
|
||||
ldr r4, _023350D4 ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_0233509C:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r6, [r0, #0xad4]
|
||||
#else
|
||||
ldr r6, [r0, #0xb78]
|
||||
#endif
|
||||
mov r0, r6
|
||||
bl EntityIsValid__023350D8
|
||||
cmp r0, #0
|
||||
beq _023350C4
|
||||
mov r0, r6
|
||||
bl TryWeatherFormChange
|
||||
_023350C4:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x14
|
||||
blt _0233509C
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_023350D4: .word DUNGEON_PTR
|
||||
arm_func_end ov29_02335044
|
||||
|
|
@ -26,6 +26,29 @@ struct monster_slots {
|
|||
struct entity* wild_pokemon[DUNGEON_MAX_WILD_POKEMON];
|
||||
};
|
||||
|
||||
struct weather {
|
||||
enum weather_id weather; // 0x0: current weather
|
||||
// 0x1: Default weather on the floor that will be reverted to if the current weather is
|
||||
// artificial and ends
|
||||
enum weather_id natural_weather;
|
||||
// 0x2: Turns left for each weather type in enum weather_id (except WEATHER_RANDOM). If
|
||||
// multiple of these are nonzero, the one with the highest number of turns left is chosen.
|
||||
// Ties are broken in enum order
|
||||
u16 weather_turns[8];
|
||||
// 0x12: Turns left for artificial permaweather from weather-setting abilities like Drought,
|
||||
// Sand Stream, Drizzle, and Snow Warning; one counter for each weather type in enum weather_id
|
||||
// (except WEATHER_RANDOM). Any nonzero value triggers that weather condition (it's usually set
|
||||
// to 1 or 0). If the weather's source is removed, this value becomes the normal number of turns
|
||||
// left for that weather condition. Priority in the event of multiple nonzero counters is the
|
||||
// same as with weather_turns.
|
||||
u16 artificial_permaweather_turns[8];
|
||||
// 0x22: For damaging weather conditions like sandstorm. Counts down from 9-0, damage on 9
|
||||
u8 weather_damage_counter;
|
||||
u8 mud_sport_turns; // 0x23: Number of turns left for the Mud Sport condition
|
||||
u8 water_sport_turns; // 0x24: Number of turns left for the Water Sport condition
|
||||
bool8 nullify_weather; // 0x25: Cloud Nine/Air Lock is in effect
|
||||
};
|
||||
|
||||
// Dungeon state
|
||||
struct dungeon {
|
||||
u8 field_0x0; // 0x0: Initialized to 0x0.
|
||||
|
|
@ -1212,28 +1235,7 @@ struct dungeon {
|
|||
u16 fixed_room_width;
|
||||
// 0xCD36: Height of the generated fixed room?
|
||||
u16 fixed_room_height;
|
||||
enum weather_id weather; // 0xCD38: current weather
|
||||
// 0xCD39: Default weather on the floor that will be reverted to if the current weather is
|
||||
// artificial and ends
|
||||
enum weather_id natural_weather;
|
||||
// 0xCD3A: Turns left for each weather type in enum weather_id (except WEATHER_RANDOM). If
|
||||
// multiple of these are nonzero, the one with the highest number of turns left is chosen.
|
||||
// Ties are broken in enum order
|
||||
u16 weather_turns[8];
|
||||
// 0xCD4A: Turns left for artificial permaweather from weather-setting abilities like Drought,
|
||||
// Sand Stream, Drizzle, and Snow Warning; one counter for each weather type in enum weather_id
|
||||
// (except WEATHER_RANDOM). Any nonzero value triggers that weather condition (it's usually set
|
||||
// to 1 or 0). If the weather's source is removed, this value becomes the normal number of turns
|
||||
// left for that weather condition. Priority in the event of multiple nonzero counters is the
|
||||
// same as with weather_turns.
|
||||
u16 artificial_permaweather_turns[8];
|
||||
// 0xCD5A: For damaging weather conditions like sandstorm. Counts down from 9-0, damage on 9
|
||||
u8 weather_damage_counter;
|
||||
u8 mud_sport_turns; // 0xCD5B: Number of turns left for the Mud Sport condition
|
||||
u8 water_sport_turns; // 0xCD5C: Number of turns left for the Water Sport condition
|
||||
bool8 nullify_weather; // 0xCD5D: Cloud Nine/Air Lock is in effect
|
||||
u8 field_0xcd5e;
|
||||
u8 field_0xcd5f;
|
||||
struct weather weather; // 0xCD38
|
||||
// 0xCD60: Seems to be tile data for tiles within fixed rooms
|
||||
struct tile fixed_room_tiles[8][8];
|
||||
u8 field_0xd260;
|
||||
|
|
|
|||
8
include/weather.h
Normal file
8
include/weather.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef PMDSKY_WEATHER_H
|
||||
#define PMDSKY_WEATHER_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
enum weather_id GetApparentWeather(struct entity *entity);
|
||||
|
||||
#endif //PMDSKY_WEATHER_H
|
||||
2
main.lsf
2
main.lsf
|
|
@ -495,6 +495,8 @@ Overlay OVY_29
|
|||
Object asm/overlay_29_02332A0C.o
|
||||
Object src/move_checks.o
|
||||
Object asm/overlay_29_02333FD0.o
|
||||
Object src/weather.o
|
||||
Object asm/overlay_29_02334D58.o
|
||||
Object src/overlay_29_023350D8.o
|
||||
Object asm/overlay_29_023350FC.o
|
||||
Object src/dungeon_map_access.o
|
||||
|
|
|
|||
|
|
@ -223,11 +223,11 @@ bool8 StatusCheckerCheck(struct entity *attacker, struct move *move)
|
|||
break;
|
||||
}
|
||||
case MOVE_MUD_SPORT:
|
||||
if (DUNGEON_PTR[0]->mud_sport_turns > 0)
|
||||
if (DUNGEON_PTR[0]->weather.mud_sport_turns > 0)
|
||||
return FALSE;
|
||||
break;
|
||||
case MOVE_WATER_SPORT:
|
||||
if (DUNGEON_PTR[0]->water_sport_turns > 0)
|
||||
if (DUNGEON_PTR[0]->weather.water_sport_turns > 0)
|
||||
return FALSE;
|
||||
break;
|
||||
case MOVE_GRUDGE:
|
||||
|
|
|
|||
22
src/weather.c
Normal file
22
src/weather.c
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#include "weather.h"
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
||||
enum weather_id GetApparentWeather(struct entity *entity)
|
||||
{
|
||||
if (entity != NULL)
|
||||
{
|
||||
bool8 has_weather_band;
|
||||
if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ))
|
||||
has_weather_band = FALSE;
|
||||
else
|
||||
has_weather_band = HasHeldItem(entity, ITEM_WEATHER_BAND);
|
||||
|
||||
if (has_weather_band)
|
||||
return WEATHER_CLEAR;
|
||||
}
|
||||
return DUNGEON_PTR[0]->weather.weather;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user