Merge pull request #177 from AnonymousRandomPerson/main
Some checks failed
build / build (push) Has been cancelled

Decomped special move type funcs
This commit is contained in:
AnonymousRandomPerson
2025-09-14 00:26:31 -04:00
committed by GitHub
24 changed files with 6925 additions and 6852 deletions

View File

@@ -1,2 +1 @@
#pragma once

View File

@@ -0,0 +1 @@
#pragma once

View File

@@ -1,140 +1,10 @@
#pragma once
.public DoMoveAbsorb
.public DoMoveAttract
.public DoMoveBeatUp
.public DoMoveBlastBurn
.public DoMoveBlazeKick
.public DoMoveBlock
.public DoMoveBlowback
.public DoMoveBrickBreak
.public DoMoveBrine
.public DoMoveCaptivate
.public DoMoveChargeBeam
.public DoMoveCharm
.public DoMoveCloseCombat
.public DoMoveConfuse
.public DoMoveCopycat
.public DoMoveCrunch
.public DoMoveCrushClaw
.public DoMoveCurse
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDamage__0232DD88
.public DoMoveDamageBoostAllStats
.public DoMoveDamageBurn10FlameWheel
.public DoMoveDamageConfuse10
.public DoMoveDamageConfuse30
.public DoMoveDamageConstrict10
.public DoMoveDamageCringe10
.public DoMoveDamageCringe20
.public DoMoveDamageCringe30
.public DoMoveDamageDrain
.public DoMoveDamageEatItem
.public DoMoveDamageFreeze15
.public DoMoveDamageHpDependent
.public DoMoveDamageInlined
.public DoMoveDamageLowerAccuracy40
.public DoMoveDamageLowerSpecialDefense50
.public DoMoveDamageLowerSpeed100
.public DoMoveDamageLowerSpeed20
.public DoMoveDamageMultihitFatigue
.public DoMoveDamageParalyze10
.public DoMoveDamageParalyze20
.public DoMoveDamagePoison18
.public DoMoveDamagePoison40
.public DoMoveDamageStealItem
.public DoMoveDamageWeightDependent
.public DoMoveDamageWithRecoil
.public DoMoveDefog
.public DoMoveDestinyBond
.public DoMoveDoubleEdge
.public DoMoveDragonRage
.public DoMoveDreamEater
.public DoMoveDynamicPunch
.public DoMoveDamage__02325DC0
.public DoMoveEarthquake
.public DoMoveEmbargo
.public DoMoveEncore
.public DoMoveEndeavor
.public DoMoveEruption
.public DoMoveFacade
.public DoMoveFakeOut
.public DoMoveFakeTears
.public DoMoveFeatherDance
.public DoMoveFeint
.public DoMoveFireFang
.public DoMoveFissure
.public DoMoveFlareBlitz
.public DoMoveFlatter
.public DoMoveFrustration
.public DoMoveGastroAcid
.public DoMoveGuardSwap
.public DoMoveGust
.public DoMoveGyroBall
.public DoMoveHammerArm
.public DoMoveHeadbutt
.public DoMoveHeadSmash
.public DoMoveHeartSwap
.public DoMoveHiddenPower
.public DoMoveHornDrill
.public DoMoveHurl
.public DoMoveIceFang
.public DoMoveIronTail
.public DoMoveKnockOff
.public DoMoveLastResort
.public DoMoveLeechSeed
.public DoMoveLowerAccuracy1
.public DoMoveLowerDefense1
.public DoMoveLowerSpeed1
.public DoMoveMagnitude
.public DoMoveMetalSound
.public DoMoveMiracleEye
.public DoMoveMistBall
.public DoMoveMudSlap
.public DoMoveNaturalGift
.public DoMoveNightmare
.public DoMoveOhko
.public DoMovePainSplit
.public DoMoveParalyze__02326E80
.public DoMoveParalyze__02328230
.public DoMoveParalyze__0232B434
.public DoMovePause
.public DoMovePayDay
.public DoMovePoison
.public DoMovePoisonFang
.public DoMovePoisonTail
.public DoMovePowerSwap
.public DoMovePresent
.public DoMovePsychoShift
.public DoMoveRapidSpin
.public DoMoveReturn
.public DoMoveReversal
.public DoMoveRolePlay
.public DoMoveSacredFire
.public DoMoveSecretPower
.public DoMoveSeismicToss
.public DoMoveSkillSwap
.public DoMoveSmellingSalt
.public DoMoveSmokescreen
.public DoMoveSpite
.public DoMoveSuperFang
.public DoMoveSuperpower
.public DoMoveSwagger
.public DoMoveSwapItems
.public DoMoveTaunt
.public DoMoveThunderFang
.public DoMoveThundershock
.public DoMoveThunderWave
.public DoMoveTickle
.public DoMoveTorment
.public DoMoveToxic
.public DoMoveTriAttack
.public DoMoveTripleKick
.public DoMoveTrumpCard
.public DoMoveTwineedle
.public DoMoveTwister
.public DoMoveWakeUpSlap
.public DoMoveWhirlpool
.public DoMoveWillOWisp
.public DoMoveWrap
.public DoMoveYawn

View File

@@ -0,0 +1,136 @@
#pragma once
.public DoMoveAbsorb
.public DoMoveAttract
.public DoMoveBeatUp
.public DoMoveBlastBurn
.public DoMoveBlazeKick
.public DoMoveBlock
.public DoMoveBlowback
.public DoMoveBrickBreak
.public DoMoveBrine
.public DoMoveCaptivate
.public DoMoveChargeBeam
.public DoMoveCharm
.public DoMoveCloseCombat
.public DoMoveConfuse
.public DoMoveCopycat
.public DoMoveCrunch
.public DoMoveCrushClaw
.public DoMoveCurse
.public DoMoveDamageBoostAllStats
.public DoMoveDamageBurn10FlameWheel
.public DoMoveDamageConfuse10
.public DoMoveDamageConfuse30
.public DoMoveDamageConstrict10
.public DoMoveDamageCringe10
.public DoMoveDamageCringe20
.public DoMoveDamageCringe30
.public DoMoveDamageDrain
.public DoMoveDamageEatItem
.public DoMoveDamageHpDependent
.public DoMoveDamageLowerAccuracy40
.public DoMoveDamageLowerSpecialDefense50
.public DoMoveDamageLowerSpeed100
.public DoMoveDamageLowerSpeed20
.public DoMoveDamageMultihitFatigue
.public DoMoveDamageParalyze10
.public DoMoveDamageParalyze20
.public DoMoveDamagePoison18
.public DoMoveDamagePoison40
.public DoMoveDamageStealItem
.public DoMoveDamageWeightDependent
.public DoMoveDamageWithRecoil
.public DoMoveDamage__02325DC0
.public DoMoveDamage__0232A500
.public DoMoveDamage__0232B8B0
.public DoMoveDamage__0232DD88
.public DoMoveDefog
.public DoMoveDestinyBond
.public DoMoveDoubleEdge
.public DoMoveDragonRage
.public DoMoveDreamEater
.public DoMoveDynamicPunch
.public DoMoveEmbargo
.public DoMoveEncore
.public DoMoveEndeavor
.public DoMoveEruption
.public DoMoveFacade
.public DoMoveFakeOut
.public DoMoveFakeTears
.public DoMoveFeatherDance
.public DoMoveFeint
.public DoMoveFireFang
.public DoMoveFissure
.public DoMoveFlareBlitz
.public DoMoveFlatter
.public DoMoveFrustration
.public DoMoveGastroAcid
.public DoMoveGuardSwap
.public DoMoveGust
.public DoMoveGyroBall
.public DoMoveHammerArm
.public DoMoveHeadSmash
.public DoMoveHeadbutt
.public DoMoveHeartSwap
.public DoMoveHiddenPower
.public DoMoveHornDrill
.public DoMoveHurl
.public DoMoveIceFang
.public DoMoveIronTail
.public DoMoveKnockOff
.public DoMoveLastResort
.public DoMoveLeechSeed
.public DoMoveLowerAccuracy1
.public DoMoveLowerDefense1
.public DoMoveLowerSpeed1
.public DoMoveMagnitude
.public DoMoveMetalSound
.public DoMoveMiracleEye
.public DoMoveMistBall
.public DoMoveMudSlap
.public DoMoveNaturalGift
.public DoMoveNightmare
.public DoMoveOhko
.public DoMovePainSplit
.public DoMoveParalyze__02326E80
.public DoMoveParalyze__0232B434
.public DoMovePause
.public DoMovePayDay
.public DoMovePoison
.public DoMovePoisonFang
.public DoMovePoisonTail
.public DoMovePowerSwap
.public DoMovePresent
.public DoMovePsychoShift
.public DoMoveRapidSpin
.public DoMoveReturn
.public DoMoveReversal
.public DoMoveRolePlay
.public DoMoveSacredFire
.public DoMoveSecretPower
.public DoMoveSeismicToss
.public DoMoveSkillSwap
.public DoMoveSmellingSalt
.public DoMoveSmokescreen
.public DoMoveSpite
.public DoMoveSuperFang
.public DoMoveSuperpower
.public DoMoveSwagger
.public DoMoveSwapItems
.public DoMoveTaunt
.public DoMoveThunderFang
.public DoMoveThunderWave
.public DoMoveThundershock
.public DoMoveTickle
.public DoMoveTorment
.public DoMoveToxic
.public DoMoveTriAttack
.public DoMoveTripleKick
.public DoMoveTrumpCard
.public DoMoveTwineedle
.public DoMoveTwister
.public DoMoveWakeUpSlap
.public DoMoveWhirlpool
.public DoMoveWillOWisp
.public DoMoveWrap
.public DoMoveYawn

View File

@@ -1,20 +1,3 @@
#pragma once
.public BoostSpeedOneStage
.public DUNGEON_PTR
.public DungeonRandInt
.public EntityIsValid__0231B194
.public GetApparentWeather
.public GetEntityMoveTargetAndRange
.public GetTreasureBoxChances
.public IsMonster__0231A9D4
.public LogMessageByIdWithPopupCheckParticipants
.public LogMessageByIdWithPopupCheckUserTarget
.public NATURAL_GIFT_ITEM_TABLE
.public ov29_022E4110
.public ov29_022FB9E0
.public ov29_0232145C
.public ov29_0232E80C
.public PrepareItemForPrinting__02345728
.public SetActionUseMoveAi
.public SubstitutePlaceholderStringTags
.public WEATHER_BALL_TYPE_TABLE

View File

@@ -0,0 +1,15 @@
#pragma once
.public BoostSpeedOneStage
.public DUNGEON_PTR
.public EntityIsValid__0231B194
.public GetTreasureBoxChances
.public IsMonster__0231A9D4
.public LogMessageByIdWithPopupCheckParticipants
.public LogMessageByIdWithPopupCheckUserTarget
.public PrepareItemForPrinting__02345728
.public SetActionUseMoveAi
.public SubstitutePlaceholderStringTags
.public ov29_022E4110
.public ov29_022FB9E0
.public ov29_0232145C
.public ov29_0232E80C

View File

@@ -485,15 +485,3 @@ ov10_022C48CC:
.global ov10_022C48D4
ov10_022C48D4:
.byte 0x4D, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00
.global WEATHER_BALL_TYPE_TABLE
WEATHER_BALL_TYPE_TABLE:
.byte 0x01, 0x02, 0x0D, 0x01, 0x03, 0x06, 0x01, 0x06
.global ov10_022C48E4
ov10_022C48E4:
.byte 0x20, 0x00, 0x20, 0x00, 0x47, 0x00, 0x47, 0x00
.global ov10_022C48EC
ov10_022C48EC:
.byte 0x00, 0x00, 0x64, 0x00, 0x1E, 0x00, 0x1E, 0x00
.global ov10_022C48F4
ov10_022C48F4:
.byte 0x7C, 0x05, 0x79, 0x05, 0x7A, 0x05, 0x7B, 0x05, 0x00, 0x00, 0x00, 0x00

View File

@@ -0,0 +1,13 @@
.include "asm/macros.inc"
.include "overlay_10_rodata_022C48E4.inc"
.rodata
.global ov10_022C48E4
ov10_022C48E4:
.byte 0x20, 0x00, 0x20, 0x00, 0x47, 0x00, 0x47, 0x00
.global ov10_022C48EC
ov10_022C48EC:
.byte 0x00, 0x00, 0x64, 0x00, 0x1E, 0x00, 0x1E, 0x00
.global ov10_022C48F4
ov10_022C48F4:
.byte 0x7C, 0x05, 0x79, 0x05, 0x7A, 0x05, 0x7B, 0x05, 0x00, 0x00, 0x00, 0x00

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -113,269 +113,3 @@ _0231AE54:
blo _0231AE54
ldmia sp!, {r3, pc}
arm_func_end ov29_0231AE3C
arm_func_start GetEntityNaturalGiftInfo
GetEntityNaturalGiftInfo: ; 0x0231AE90
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl IsMonster__0231A9D4
cmp r0, #0
ldrne r4, [r4, #0xb4]
ldrnesh r0, [r4, #0x66]
cmpne r0, #0
beq _0231AF00
mov ip, #0
ldr r3, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
mov lr, ip
mov r1, #6
_0231AEC0:
smulbb r5, lr, r1
ldrsh r2, [r3, r5]
cmp r2, #0
beq _0231AEF0
ldrsh r0, [r4, #0x66]
cmp r0, r2
moveq ip, #1
beq _0231AEF0
add r0, lr, #1
mov r0, r0, lsl #0x10
mov lr, r0, asr #0x10
b _0231AEC0
_0231AEF0:
cmp ip, #0
ldrne r0, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
addne r0, r0, r5
ldmneia sp!, {r3, r4, r5, pc}
_0231AF00:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231AF08: .word NATURAL_GIFT_ITEM_TABLE
arm_func_end GetEntityNaturalGiftInfo
arm_func_start GetEntityWeatherBallType
GetEntityWeatherBallType: ; 0x0231AF0C
stmdb sp!, {r3, lr}
bl GetApparentWeather
ldr r1, _0231AF20 ; =WEATHER_BALL_TYPE_TABLE
ldrb r0, [r1, r0]
ldmia sp!, {r3, pc}
.align 2, 0
_0231AF20: .word WEATHER_BALL_TYPE_TABLE
arm_func_end GetEntityWeatherBallType
arm_func_start ov29_0231AF24
ov29_0231AF24: ; 0x0231AF24
#ifdef JAPAN
#define OV29_0231AF24_OFFSET -4
#else
#define OV29_0231AF24_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r6, r0
mov r5, r1
mov r4, r2
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231AFAC
mov r0, r6
mov r1, r5
bl ov29_022FB9E0
mov r1, r0
cmp r4, #0
beq _0231AF98
cmp r1, #0
bge _0231AF98
ldr r4, [r6, #0xb4]
mov r1, #0
mov r2, r1
add r0, r4, #0x4a
bl SetActionUseMoveAi
mov r2, #1
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
add r0, r4, #0x100
mov r1, #0
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
_0231AF98:
mov r3, #0
mov r0, r6
mov r2, #1
str r3, [sp]
bl ov29_0232145C
_0231AFAC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end ov29_0231AF24
arm_func_start ov29_0231AFB4
ov29_0231AFB4: ; 0x0231AFB4
stmdb sp!, {r4, lr}
mov ip, #0
ldr r1, _0231B004 ; =DUNGEON_PTR
mov r2, ip
mov r3, ip
_0231AFC8:
ldr r0, [r1]
mov r4, r3
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add lr, r0, ip, lsl #4
_0231AFDC:
str r2, [lr, r4, lsl #3]
add r0, lr, r4, lsl #3
add r4, r4, #1
str r2, [r0, #4]
cmp r4, #2
blt _0231AFDC
add ip, ip, #1
cmp ip, #2
blt _0231AFC8
ldmia sp!, {r4, pc}
.align 2, 0
_0231B004: .word DUNGEON_PTR
arm_func_end ov29_0231AFB4
arm_func_start ov29_0231B008
ov29_0231B008: ; 0x0231B008
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
ldr r1, _0231B05C ; =DUNGEON_PTR
mov r3, lr
mov r2, #2
mov ip, lr
_0231B020:
ldr r0, [r1]
mov r5, ip
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add r4, r0, lr, lsl #4
_0231B034:
str r3, [r4, r5, lsl #3]
add r0, r4, r5, lsl #3
add r5, r5, #1
str r2, [r0, #4]
cmp r5, #2
blt _0231B034
add lr, lr, #1
cmp lr, #2
blt _0231B020
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231B05C: .word DUNGEON_PTR
arm_func_end ov29_0231B008
arm_func_start ActivateMotorDrive
ActivateMotorDrive: ; 0x0231B060
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
#ifdef JAPAN
mov ip, #0x66
mov r4, r0
rsb r2, ip, #0x9e0
#else
ldr r2, _0231B0A0 ; =0x00000C3B
mov ip, #0x66
mov r4, r0
#endif
mov r1, #0
mov r3, #2
str ip, [sp]
bl LogMessageByIdWithPopupCheckParticipants
mov r0, r4
mov r1, r4
mov r2, #0
mov r3, #1
bl BoostSpeedOneStage
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
.align 2, 0
#ifndef JAPAN
_0231B0A0: .word 0x00000C3B
#endif
arm_func_end ActivateMotorDrive
arm_func_start TryActivateFrisk
TryActivateFrisk: ; 0x0231B0A4
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #8
mov r5, r0
mov r4, r1
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
mov r0, r4
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
ldr r0, [r5, #0xb4]
ldr r6, [r4, #0xb4]
ldrb r0, [r0, #6]
cmp r0, #0
bne _0231B184
bl ov29_0232E80C
cmp r4, r0
ldrneb r0, [r6, #6]
cmpne r0, #0
beq _0231B184
ldrsh r0, [r6, #0x66]
cmp r0, #0
bne _0231B150
ldrsh r0, [r6, #2]
add r1, sp, #0
bl GetTreasureBoxChances
ldrsh r0, [sp, #4]
cmp r0, #0
ldrlesh r0, [sp, #6]
cmple r0, #0
ble _0231B184
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
ldr r2, _0231B18C ; =0x00000C3D
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
b _0231B184
_0231B150:
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
add r1, r6, #0x62
mov r0, #2
bl PrepareItemForPrinting__02345728
ldr r2, _0231B190 ; =0x00000C3C
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
_0231B184:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
#ifdef JAPAN
_0231B18C: .word 0x0000097C
_0231B190: .word 0x0000097B
#else
_0231B18C: .word 0x00000C3D
_0231B190: .word 0x00000C3C
#endif
arm_func_end TryActivateFrisk

220
asm/overlay_29_0231AF24.s Normal file
View File

@@ -0,0 +1,220 @@
.include "asm/macros.inc"
.include "overlay_29_0231AF24.inc"
.text
arm_func_start ov29_0231AF24
ov29_0231AF24: ; 0x0231AF24
#ifdef JAPAN
#define OV29_0231AF24_OFFSET -4
#else
#define OV29_0231AF24_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r6, r0
mov r5, r1
mov r4, r2
bl IsMonster__0231A9D4
cmp r0, #0
beq _0231AFAC
mov r0, r6
mov r1, r5
bl ov29_022FB9E0
mov r1, r0
cmp r4, #0
beq _0231AF98
cmp r1, #0
bge _0231AF98
ldr r4, [r6, #0xb4]
mov r1, #0
mov r2, r1
add r0, r4, #0x4a
bl SetActionUseMoveAi
mov r2, #1
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
add r0, r4, #0x100
mov r1, #0
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
_0231AF98:
mov r3, #0
mov r0, r6
mov r2, #1
str r3, [sp]
bl ov29_0232145C
_0231AFAC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end ov29_0231AF24
arm_func_start ov29_0231AFB4
ov29_0231AFB4: ; 0x0231AFB4
stmdb sp!, {r4, lr}
mov ip, #0
ldr r1, _0231B004 ; =DUNGEON_PTR
mov r2, ip
mov r3, ip
_0231AFC8:
ldr r0, [r1]
mov r4, r3
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add lr, r0, ip, lsl #4
_0231AFDC:
str r2, [lr, r4, lsl #3]
add r0, lr, r4, lsl #3
add r4, r4, #1
str r2, [r0, #4]
cmp r4, #2
blt _0231AFDC
add ip, ip, #1
cmp ip, #2
blt _0231AFC8
ldmia sp!, {r4, pc}
.align 2, 0
_0231B004: .word DUNGEON_PTR
arm_func_end ov29_0231AFB4
arm_func_start ov29_0231B008
ov29_0231B008: ; 0x0231B008
stmdb sp!, {r3, r4, r5, lr}
mov lr, #0
ldr r1, _0231B05C ; =DUNGEON_PTR
mov r3, lr
mov r2, #2
mov ip, lr
_0231B020:
ldr r0, [r1]
mov r5, ip
#ifdef JAPAN
add r0, r0, #0x1840
add r0, r0, #0x18000
#else
add r0, r0, #0xe4
add r0, r0, #0x19800
#endif
add r4, r0, lr, lsl #4
_0231B034:
str r3, [r4, r5, lsl #3]
add r0, r4, r5, lsl #3
add r5, r5, #1
str r2, [r0, #4]
cmp r5, #2
blt _0231B034
add lr, lr, #1
cmp lr, #2
blt _0231B020
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0231B05C: .word DUNGEON_PTR
arm_func_end ov29_0231B008
arm_func_start ActivateMotorDrive
ActivateMotorDrive: ; 0x0231B060
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
#ifdef JAPAN
mov ip, #0x66
mov r4, r0
rsb r2, ip, #0x9e0
#else
ldr r2, _0231B0A0 ; =0x00000C3B
mov ip, #0x66
mov r4, r0
#endif
mov r1, #0
mov r3, #2
str ip, [sp]
bl LogMessageByIdWithPopupCheckParticipants
mov r0, r4
mov r1, r4
mov r2, #0
mov r3, #1
bl BoostSpeedOneStage
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
.align 2, 0
#ifndef JAPAN
_0231B0A0: .word 0x00000C3B
#endif
arm_func_end ActivateMotorDrive
arm_func_start TryActivateFrisk
TryActivateFrisk: ; 0x0231B0A4
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #8
mov r5, r0
mov r4, r1
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
mov r0, r4
bl EntityIsValid__0231B194
cmp r0, #0
beq _0231B184
ldr r0, [r5, #0xb4]
ldr r6, [r4, #0xb4]
ldrb r0, [r0, #6]
cmp r0, #0
bne _0231B184
bl ov29_0232E80C
cmp r4, r0
ldrneb r0, [r6, #6]
cmpne r0, #0
beq _0231B184
ldrsh r0, [r6, #0x66]
cmp r0, #0
bne _0231B150
ldrsh r0, [r6, #2]
add r1, sp, #0
bl GetTreasureBoxChances
ldrsh r0, [sp, #4]
cmp r0, #0
ldrlesh r0, [sp, #6]
cmple r0, #0
ble _0231B184
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
ldr r2, _0231B18C ; =0x00000C3D
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
b _0231B184
_0231B150:
mov r0, r5
bl ov29_022E4110
mov r1, r4
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
add r1, r6, #0x62
mov r0, #2
bl PrepareItemForPrinting__02345728
ldr r2, _0231B190 ; =0x00000C3C
mov r0, r5
mov r1, r4
bl LogMessageByIdWithPopupCheckUserTarget
_0231B184:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
#ifdef JAPAN
_0231B18C: .word 0x0000097C
_0231B190: .word 0x0000097B
#else
_0231B18C: .word 0x00000C3D
_0231B190: .word 0x00000C3C
#endif
arm_func_end TryActivateFrisk

View File

@@ -0,0 +1,8 @@
#ifndef PMDSKY_DUNGEON_PARAMETERS_1_H
#define PMDSKY_DUNGEON_PARAMETERS_1_H
#include "enums.h"
extern const enum type_id WEATHER_BALL_TYPE_TABLE[8];
#endif //PMDSKY_DUNGEON_PARAMETERS_1_H

View File

@@ -1627,13 +1627,13 @@ struct item {
s16 id; // 0x4
};
// The same as the item struct, but with the flags marked as volatile.
// Needed to match AiDecideUseItem.
// The same as the item struct, but with some fields marked as volatile.
// Needed to match some functions like AiDecideUseItem.
struct item_volatile {
volatile u8 flags;
u8 held_by;
u16 quantity;
enum item_id id; // 0x4
volatile s16 id; // 0x4
};
struct bag_items_inner {

View File

@@ -59,13 +59,4 @@ struct move {
u8 ginseng; // 0x7: Ginseng boost
};
struct natural_gift_item_info
{
enum item_id item_id;
enum type_id type_id;
// This value is the boost that's added to Natural Gift's default base power of 1
// during damage calculation
s16 base_power_boost;
};
#endif // PMDSKY_MOVE_H

View File

@@ -0,0 +1,18 @@
#ifndef PMDSKY_NATURAL_GIFT_DATA_H
#define PMDSKY_NATURAL_GIFT_DATA_H
#include "enums.h"
#include "item.h"
struct natural_gift_item_info
{
enum item_id item_id;
enum type_id type_id;
// This value is the boost that's added to Natural Gift's default base power of 1
// during damage calculation
s16 base_power_boost;
};
extern const struct natural_gift_item_info NATURAL_GIFT_ITEM_TABLE[34];
#endif //PMDSKY_NATURAL_GIFT_DATA_H

View File

@@ -1,8 +1,10 @@
#ifndef PREPROCESS_STRING_H
#define PREPROCESS_STRING_H
#include "enums.h"
struct PPStrValues {
u8* weather_0; // 0x0
u32 weather_0; // 0x0
u32 field_0x4;
u32 field_0x8;
u32 field_0xB;

View File

@@ -0,0 +1,11 @@
#ifndef PMDSKY_SPECIAL_MOVE_TYPES_H
#define PMDSKY_SPECIAL_MOVE_TYPES_H
#include "dungeon_mode.h"
// Gets the relevant entry in NATURAL_GIFT_ITEM_TABLE based on the entity's held item, if possible.
const struct natural_gift_item_info* GetEntityNaturalGiftInfo(struct entity* entity);
// Gets the current Weather Ball type for the given entity, based on the apparent weather.
enum type_id GetEntityWeatherBallType(struct entity* entity);
#endif //PMDSKY_SPECIAL_MOVE_TYPES_H

View File

@@ -203,8 +203,12 @@ Overlay OVY_10
Object asm/overlay_10_rodata_022C4584.o
Object src/dungeon_parameters_1.o
Object asm/overlay_10_rodata_022C464C.o
Object src/dungeon_parameters_2.o
Object asm/overlay_10_rodata_022C48E4.o
Object src/dungeon_ai_parameters.o
Object asm/overlay_10_rodata_022C490C.o
Object src/natural_gift_data.o
Object asm/overlay_10_rodata_022C593C.o
}
Overlay OVY_11
{
@@ -506,6 +510,8 @@ Overlay OVY_29
Object asm/overlay_29_0231A9F8.o
Object src/overlay_29_0231ACAC.o
Object asm/overlay_29_0231AD38.o
Object src/special_move_types.o
Object asm/overlay_29_0231AF24.o
Object src/overlay_29_0231B194.o
Object asm/overlay_29_0231B1B8.o
Object src/overlay_29_0231B318.o

View File

@@ -2,10 +2,10 @@
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util_static.h"
#include "main_02014CEC.h"
#include "natural_gift_data.h"
#include "overlay_29_023000E4.h"
#include "special_move_types.h"
extern struct natural_gift_item_info* GetEntityNaturalGiftInfo(struct entity* entity);
extern enum type_id GetEntityWeatherBallType(struct entity* entity);
extern enum type_id GetMoveType(struct move* move);
enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move)
@@ -18,7 +18,7 @@ enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move)
if (move->id == MOVE_NATURAL_GIFT)
{
struct natural_gift_item_info *natural_gift_info = GetEntityNaturalGiftInfo(entity);
const struct natural_gift_item_info *natural_gift_info = GetEntityNaturalGiftInfo(entity);
if (natural_gift_info != NULL)
return natural_gift_info->type_id;
}

View File

@@ -0,0 +1,12 @@
#include "dungeon_parameters_2.h"
const enum type_id WEATHER_BALL_TYPE_TABLE[8] = {
TYPE_NORMAL,
TYPE_FIRE,
TYPE_ROCK,
TYPE_NORMAL,
TYPE_WATER,
TYPE_ICE,
TYPE_NORMAL,
TYPE_ICE
};

38
src/natural_gift_data.c Normal file
View File

@@ -0,0 +1,38 @@
#include "natural_gift_data.h"
const struct natural_gift_item_info NATURAL_GIFT_ITEM_TABLE[34] = {
{ ITEM_HEAL_SEED, TYPE_GRASS, 1 },
{ ITEM_ORAN_BERRY, TYPE_POISON, 1 },
{ ITEM_SITRUS_BERRY, TYPE_PSYCHIC, 3 },
{ ITEM_EYEDROP_SEED, TYPE_GHOST, 2 },
{ ITEM_REVIVER_SEED, TYPE_GROUND, 1 },
{ ITEM_BLINKER_SEED, TYPE_DARK, 2 },
{ ITEM_DOOM_SEED, TYPE_STEEL, 1 },
{ ITEM_X_EYE_SEED, TYPE_DARK, 2 },
{ ITEM_LIFE_SEED, TYPE_FIGHTING, 3 },
{ ITEM_RAWST_BERRY, TYPE_GRASS, 2 },
{ ITEM_HUNGER_SEED, TYPE_ROCK, 5 },
{ ITEM_QUICK_SEED, TYPE_FLYING, 2 },
{ ITEM_PECHA_BERRY, TYPE_ELECTRIC, 2 },
{ ITEM_CHERI_BERRY, TYPE_FIRE, 2 },
{ ITEM_TOTTER_SEED, TYPE_GHOST, 2 },
{ ITEM_SLEEP_SEED, TYPE_ICE, 2 },
{ ITEM_PLAIN_SEED, TYPE_NORMAL, 15 },
{ ITEM_WARP_SEED, TYPE_PSYCHIC, 2 },
{ ITEM_BLAST_SEED, TYPE_DRAGON, 5 },
{ ITEM_JOY_SEED, TYPE_NORMAL, 3 },
{ ITEM_CHESTO_BERRY, TYPE_WATER, 2 },
{ ITEM_STUN_SEED, TYPE_BUG, 2 },
{ ITEM_GOLDEN_SEED, TYPE_DRAGON, 10 },
{ ITEM_VILE_SEED, TYPE_POISON, 5 },
{ ITEM_PURE_SEED, TYPE_WATER, 5 },
{ ITEM_VIOLENT_SEED, TYPE_FIGHTING, 5 },
{ ITEM_VANISH_SEED, TYPE_BUG, 5 },
{ ITEM_DROPEYE_SEED, TYPE_GHOST, 2 },
{ ITEM_REVISER_SEED, TYPE_GROUND, 10 },
{ ITEM_SLIP_SEED, TYPE_ICE, 2 },
{ ITEM_VIA_SEED, TYPE_POISON, 2 },
{ ITEM_OREN_BERRY, TYPE_POISON, 5 },
{ ITEM_DOUGH_SEED, TYPE_STEEL, 1 },
{ ITEM_NOTHING, TYPE_NONE, 0 }
};

View File

@@ -2,6 +2,7 @@
#include "dungeon_ai_targeting.h"
#include "dungeon_util_static.h"
#include "number_util.h"
#include "weather.h"
extern const u8 DUNGEON_MENU_SWITCH_STR1[];// = "[dungeon:0]";
@@ -23,7 +24,6 @@ extern void* MemAlloc(u32 size, u32 nmemb);
extern struct entity* GetLeader(void);
extern u32 GetMoneyCarried(void);
extern void* GetApparentWeather(u32);
extern u32 sub_0204F9E0(void);
extern void ov29_022E2A78(u8*, void*, u32); // The third argument isn't actually used in the
// function (../asm/overlay_29_022E1A40.s#L1378)
@@ -99,7 +99,7 @@ void DrawDungeonMenuStatusWindow(struct Window* window)
PreprocessString(str_buff, DRAW_DUNGEON_MENU_STATUS_WINDOW_BUFF_SIZE, str, 0, &str_values);
DrawTextInWindow(window, X_OFFSET, LINE_HEIGHT, str_buff);
str_values.weather_0 = GetApparentWeather(0);
str_values.weather_0 = GetApparentWeather(NULL);
str = StringFromId(DRAW_DUNGEON_MENU_STATUS_WINDOW_STR_ID_3);
PreprocessString(str_buff, DRAW_DUNGEON_MENU_STATUS_WINDOW_BUFF_SIZE, str, 0, &str_values);
DrawTextInWindow(window, X_OFFSET, LINE_HEIGHT * 2, str_buff);

40
src/special_move_types.c Normal file
View File

@@ -0,0 +1,40 @@
#include "special_move_types.h"
#include "dungeon_parameters_2.h"
#include "dungeon_util_static.h"
#include "natural_gift_data.h"
#include "overlay_29_0231A9D4.h"
#include "weather.h"
const struct natural_gift_item_info* GetEntityNaturalGiftInfo(struct entity* entity)
{
if (IsMonster__0231A9D4(entity)) {
struct monster *monster = GetEntInfo(entity);
if (((struct item_volatile*)(&monster->held_item))->id != ITEM_NOTHING) {
bool8 found_item = FALSE;
s16 i = 0;
s16 natural_gift_item_id;
loop_start:
natural_gift_item_id = ((volatile struct natural_gift_item_info*)NATURAL_GIFT_ITEM_TABLE)[i].item_id;
if (natural_gift_item_id != ITEM_NOTHING)
{
if (monster->held_item.id == natural_gift_item_id)
found_item = TRUE;
else
{
i++;
goto loop_start;
}
}
if (found_item)
return &NATURAL_GIFT_ITEM_TABLE[i];
}
}
return NULL;
}
enum type_id GetEntityWeatherBallType(struct entity* entity)
{
return WEATHER_BALL_TYPE_TABLE[GetApparentWeather(entity)];
}