mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-11 04:47:50 -05:00
@@ -1,35 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "get_category_string.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetCategoryString
|
||||
GetCategoryString: ; 0x0205275C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
bl AllocateTemp1024ByteBufferFromPool
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
mov r1, #0x258
|
||||
bl _s32_div_f
|
||||
#if defined(EUROPE)
|
||||
add r0, r1, #0x79
|
||||
add r0, r0, #0x2400
|
||||
#elif defined(JAPAN)
|
||||
add r0, r1, #0x1a40
|
||||
#else
|
||||
add r0, r1, #0x77
|
||||
add r0, r0, #0x2400
|
||||
#endif
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
bl StringFromId
|
||||
mov r2, r0
|
||||
ldr r1, _020527A4 ; =_020A3200
|
||||
mov r0, r4
|
||||
bl SprintfStatic__02052418
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_020527A4: .word _020A3200
|
||||
arm_func_end GetCategoryString
|
||||
@@ -1,34 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_020137E8.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start InitMoveCheckId
|
||||
InitMoveCheckId: ; 0x020137E8
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
cmp r1, #0
|
||||
moveq r0, #0
|
||||
streqb r0, [r4]
|
||||
ldmeqia sp!, {r4, pc}
|
||||
mov r2, #5
|
||||
strb r2, [r4]
|
||||
mov r2, #0
|
||||
strh r2, [r4, #2]
|
||||
strh r1, [r4, #4]
|
||||
bl GetMaxPp
|
||||
strb r0, [r4, #6]
|
||||
mov r0, #0
|
||||
strb r0, [r4, #7]
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end InitMoveCheckId
|
||||
|
||||
arm_func_start GetInfoMoveGround
|
||||
GetInfoMoveGround: ; 0x02013828
|
||||
mov r2, #5
|
||||
strb r2, [r0]
|
||||
strh r1, [r0, #2]
|
||||
mov r1, #0
|
||||
strb r1, [r0, #4]
|
||||
bx lr
|
||||
arm_func_end GetInfoMoveGround
|
||||
@@ -1,43 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_020139AC.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetMoveNbStrikes
|
||||
GetMoveNbStrikes: ; 0x020139AC
|
||||
ldr r1, _020139C8 ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #4]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #0xd]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020139C8: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveNbStrikes
|
||||
|
||||
arm_func_start GetMoveBasePower
|
||||
GetMoveBasePower: ; 0x020139CC
|
||||
ldrh r2, [r0, #4]
|
||||
mov r0, #0x1a
|
||||
ldr r1, _020139E8 ; =DUNGEON_MOVE_TABLES
|
||||
mul r0, r2, r0
|
||||
ldr r1, [r1, #8]
|
||||
ldrsh r0, [r1, r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020139E8: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveBasePower
|
||||
|
||||
arm_func_start GetMoveBasePowerGround
|
||||
GetMoveBasePowerGround: ; 0x020139EC
|
||||
ldrh r2, [r0, #2]
|
||||
mov r0, #0x1a
|
||||
ldr r1, _02013A08 ; =DUNGEON_MOVE_TABLES
|
||||
mul r0, r2, r0
|
||||
ldr r1, [r1, #8]
|
||||
ldrsh r0, [r1, r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013A08: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveBasePowerGround
|
||||
@@ -1,17 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02013A30.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetMoveBasePp
|
||||
GetMoveBasePp: ; 0x02013A30
|
||||
ldr r1, _02013A4C ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #4]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #8]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013A4C: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveBasePp
|
||||
@@ -1,43 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02013AD0.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetMoveMaxGinsengBoost
|
||||
GetMoveMaxGinsengBoost: ; 0x02013AD0
|
||||
ldr r1, _02013AEC ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #4]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #0xe]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013AEC: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveMaxGinsengBoost
|
||||
|
||||
arm_func_start GetMoveMaxGinsengBoostGround
|
||||
GetMoveMaxGinsengBoostGround: ; 0x02013AF0
|
||||
ldr r1, _02013B0C ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #2]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #0xe]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013B0C: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveMaxGinsengBoostGround
|
||||
|
||||
arm_func_start GetMoveCritChance
|
||||
GetMoveCritChance: ; 0x02013B10
|
||||
ldr r1, _02013B2C ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #4]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #0xf]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013B2C: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveCritChance
|
||||
@@ -1,57 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_02013B70.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetMoveRangeId
|
||||
GetMoveRangeId: ; 0x02013B70
|
||||
ldr r1, _02013B8C ; =DUNGEON_MOVE_TABLES
|
||||
ldrh r2, [r0, #4]
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, #0x1a
|
||||
mla r0, r2, r0, r1
|
||||
ldrb r0, [r0, #0x15]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013B8C: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveRangeId
|
||||
|
||||
arm_func_start GetMoveActualAccuracy
|
||||
GetMoveActualAccuracy: ; 0x02013B90
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r2, _02013BE4 ; =DUNGEON_MOVE_TABLES
|
||||
mov r1, #0x1a
|
||||
ldr r2, [r2, #8]
|
||||
mla r1, r0, r1, r2
|
||||
ldrb r0, [r1, #0xe]
|
||||
cmp r0, #0
|
||||
ldreqb r0, [r1, #0xa]
|
||||
ldmeqia sp!, {r3, pc}
|
||||
cmp r0, #0x63
|
||||
bne _02013BDC
|
||||
ldrb r2, [r1, #0xa]
|
||||
ldrb r0, [r1, #0xb]
|
||||
cmp r2, #0x7d
|
||||
ldmeqia sp!, {r3, pc}
|
||||
mul r0, r2, r0
|
||||
mov r1, #0x64
|
||||
bl _s32_div_f
|
||||
ldmia sp!, {r3, pc}
|
||||
_02013BDC:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02013BE4: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveActualAccuracy
|
||||
|
||||
arm_func_start GetMoveBasePowerFromId
|
||||
GetMoveBasePowerFromId: ; 0x02013BE8
|
||||
mov r1, #0x1a
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02013C00 ; =DUNGEON_MOVE_TABLES
|
||||
ldr r0, [r0, #8]
|
||||
ldrsh r0, [r0, r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02013C00: .word DUNGEON_MOVE_TABLES
|
||||
arm_func_end GetMoveBasePowerFromId
|
||||
@@ -152,17 +152,3 @@ _02051280: .word 0x9D2C5680
|
||||
_02051284: .word 0xEFC60000
|
||||
arm_func_end sub_02051134
|
||||
|
||||
arm_func_start DungeonGoesUp
|
||||
DungeonGoesUp: ; 0x02051288
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _020512AC ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020512AC: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end DungeonGoesUp
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_020512C8.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start DoesNotSaveWhenEntering
|
||||
DoesNotSaveWhenEntering: ; 0x020512C8
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _020512EC ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x80
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020512EC: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end DoesNotSaveWhenEntering
|
||||
|
||||
arm_func_start TreasureBoxDropsEnabled
|
||||
TreasureBoxDropsEnabled: ; 0x020512F0
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02051314 ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x400
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02051314: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end TreasureBoxDropsEnabled
|
||||
|
||||
arm_func_start IsLevelResetDungeon
|
||||
IsLevelResetDungeon: ; 0x02051318
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _0205133C ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x10
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0205133C: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end IsLevelResetDungeon
|
||||
|
||||
arm_func_start GetMaxItemsAllowed
|
||||
GetMaxItemsAllowed: ; 0x02051340
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02051354 ; =_020A0C69
|
||||
ldrb r0, [r0, r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02051354: .word _020A0C69
|
||||
arm_func_end GetMaxItemsAllowed
|
||||
|
||||
arm_func_start IsMoneyAllowed
|
||||
IsMoneyAllowed: ; 0x02051358
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _0205137C ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x20
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0205137C: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end IsMoneyAllowed
|
||||
|
||||
arm_func_start GetMaxRescueAttempts
|
||||
GetMaxRescueAttempts: ; 0x02051380
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02051394 ; =_020A0C68
|
||||
ldrsb r0, [r0, r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02051394: .word _020A0C68
|
||||
arm_func_end GetMaxRescueAttempts
|
||||
@@ -1,100 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_020513C0.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetLeaderChangeFlag
|
||||
GetLeaderChangeFlag: ; 0x020513C0
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _020513E4 ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x40
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020513E4: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end GetLeaderChangeFlag
|
||||
|
||||
arm_func_start GetRandomMovementChance
|
||||
GetRandomMovementChance: ; 0x020513E8
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _020513FC ; =_020A0C6E
|
||||
ldrsh r0, [r0, r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020513FC: .word _020A0C6E
|
||||
arm_func_end GetRandomMovementChance
|
||||
|
||||
arm_func_start CanEnemyEvolve
|
||||
CanEnemyEvolve: ; 0x02051400
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02051424 ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #2
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02051424: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end CanEnemyEvolve
|
||||
|
||||
arm_func_start GetMaxMembersAllowed
|
||||
GetMaxMembersAllowed: ; 0x02051428
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _0205143C ; =_020A0C6A
|
||||
ldrb r0, [r0, r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0205143C: .word _020A0C6A
|
||||
arm_func_end GetMaxMembersAllowed
|
||||
|
||||
arm_func_start IsIqEnabled
|
||||
IsIqEnabled: ; 0x02051440
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _02051464 ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x100
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02051464: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end IsIqEnabled
|
||||
|
||||
arm_func_start IsTrapInvisibleWhenAttacking
|
||||
IsTrapInvisibleWhenAttacking: ; 0x02051468
|
||||
mov r1, #0xc
|
||||
mul r1, r0, r1
|
||||
ldr r0, _0205148C ; =DUNGEON_RESTRICTIONS
|
||||
ldr r0, [r0, r1]
|
||||
tst r0, #0x200
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0205148C: .word DUNGEON_RESTRICTIONS
|
||||
arm_func_end IsTrapInvisibleWhenAttacking
|
||||
|
||||
arm_func_start JoinedAtRangeCheck
|
||||
JoinedAtRangeCheck: ; 0x02051490
|
||||
cmp r0, #0xd9
|
||||
blo _020514A4
|
||||
cmp r0, #0xe4
|
||||
movlo r0, #1
|
||||
blo _020514A8
|
||||
_020514A4:
|
||||
mov r0, #0
|
||||
_020514A8:
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end JoinedAtRangeCheck
|
||||
@@ -1,17 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022FB5EC.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start CheckSpawnThreshold
|
||||
CheckSpawnThreshold: ; 0x022FB5EC
|
||||
stmdb sp!, {r4, lr}
|
||||
bl GetSpawnThreshold
|
||||
mov r4, r0
|
||||
bl GetScenarioBalanceVeneer
|
||||
cmp r4, r0
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end CheckSpawnThreshold
|
||||
@@ -1,27 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_0230231C.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetMovePower
|
||||
GetMovePower: ; 0x0230231C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldrh r2, [r1, #4]
|
||||
mov r5, r0
|
||||
ldrb r4, [r1, #7]
|
||||
cmp r2, #0x144
|
||||
ldreq r0, [r5, #0xb4]
|
||||
ldreqsh r0, [r0, #0x44]
|
||||
addeq r0, r4, r0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r1
|
||||
bl GetMoveBasePower
|
||||
add r4, r4, r0
|
||||
mov r0, r5
|
||||
mov r1, #0x2b
|
||||
bl ItemIsActive__022FF898
|
||||
cmp r0, #0
|
||||
movne r4, r4, lsl #1
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GetMovePower
|
||||
@@ -7,16 +7,18 @@
|
||||
struct ground_move {
|
||||
// 0x0: flags: 1-byte bitfield
|
||||
// See move::flags0 for details
|
||||
u8 f_exists : 1;
|
||||
u8 f_subsequent_in_link_chain : 1;
|
||||
u8 f_enabled_for_ai : 1;
|
||||
u8 f_set : 1;
|
||||
u8 f_last_used : 1; // unconfirmed, but probably the same as struct move
|
||||
u8 f_disabled : 1;
|
||||
u8 flags_unk6 : 2;
|
||||
u8 flags0;
|
||||
|
||||
// u8 f_exists : 1;
|
||||
// u8 f_subsequent_in_link_chain : 1;
|
||||
// u8 f_enabled_for_ai : 1;
|
||||
// u8 f_set : 1;
|
||||
// u8 f_last_used : 1; // unconfirmed, but probably the same as struct move
|
||||
// u8 f_disabled : 1;
|
||||
// u8 flags_unk6 : 2;
|
||||
|
||||
u8 field_0x1; // Probably padding since it doesn't get initialized
|
||||
u16 id; // 0x2
|
||||
enum move_id id; // 0x2
|
||||
u8 ginseng; // 0x4: Ginseng boost
|
||||
u8 field_0x5; // Probably padding since it doesn't get initialized
|
||||
};
|
||||
|
||||
@@ -8,4 +8,6 @@ bool8 CanSeeTeammate(struct entity *monster);
|
||||
// Check the type of a move when used by a certain monster. Accounts for special cases such as Hidden Power, Weather Ball, the regular attack...
|
||||
enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move);
|
||||
|
||||
s32 GetMovePower(struct entity* entity, struct move* move);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_LOGIC_5_H
|
||||
|
||||
@@ -4,6 +4,21 @@
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
||||
bool8 DungeonGoesUp(enum dungeon_id dungeon_id);
|
||||
s32 GetTurnLimit(enum dungeon_id dungeon_id);
|
||||
bool8 DoesNotSaveWhenEntering(enum dungeon_id dungeon_id);
|
||||
bool8 TreasureBoxDropsEnabled(enum dungeon_id dungeon_id);
|
||||
bool8 IsLevelResetDungeon(enum dungeon_id dungeon_id);
|
||||
s32 GetMaxItemsAllowed(enum dungeon_id dungeon_id);
|
||||
bool8 IsMoneyAllowed(enum dungeon_id dungeon_id);
|
||||
s8 GetMaxRescueAttempts(enum dungeon_id dungeon_id);
|
||||
bool8 IsRecruitingAllowed(enum dungeon_id dungeon_id);
|
||||
bool8 GetLeaderChangeFlag(enum dungeon_id dungeon_id);
|
||||
s32 GetRandomMovementChance(enum dungeon_id dungeon_id);
|
||||
bool8 CanEnemyEvolve(enum dungeon_id dungeon_id);
|
||||
s32 GetMaxMembersAllowed(enum dungeon_id dungeon_id);
|
||||
bool8 IsIqEnabled(enum dungeon_id dungeon_id);
|
||||
bool8 IsTrapInvisibleWhenAttacking(enum dungeon_id dungeon_id);
|
||||
bool8 JoinedAtRangeCheck(enum dungeon_id dungeon_id);
|
||||
|
||||
#endif //PMDSKY_MAIN_02051398_H
|
||||
|
||||
6
include/get_category_string.h
Normal file
6
include/get_category_string.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef PMDSKY_GET_CATEGORY_STRING_H
|
||||
#define PMDSKY_GET_CATEGORY_STRING_H
|
||||
|
||||
u8 *GetCategoryString(s32 id);
|
||||
|
||||
#endif /* ifndef PMDSKY_GET_CATEGORY_STRING_H */
|
||||
@@ -2,7 +2,12 @@
|
||||
#define PMDSKY_MAIN_0201398C_H
|
||||
|
||||
#include "move.h"
|
||||
#include "common.h"
|
||||
|
||||
s16 GetMoveAiWeight(struct move *move);
|
||||
u8 GetMoveNbStrikes(struct move* move);
|
||||
s16 GetMoveBasePower(struct move* move);
|
||||
s16 GetMoveBasePowerGround(struct ground_move* move);
|
||||
|
||||
|
||||
#endif //PMDSKY_MAIN_0201398C_H
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "move.h"
|
||||
#include "util.h"
|
||||
|
||||
s16 GetMoveBasePowerFromId(s32 move_id);
|
||||
bool32 IsMoveRangeStringUser(struct move *move);
|
||||
|
||||
#endif //PMDSKY_MAIN_02013C04_H
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef PMDSKY_MAIN_020512B0_H
|
||||
#define PMDSKY_MAIN_020512B0_H
|
||||
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
||||
s32 GetTurnLimit(enum dungeon_id dungeon_id);
|
||||
|
||||
#endif //PMDSKY_MAIN_020512B0_H
|
||||
@@ -7,4 +7,17 @@
|
||||
// return: max PP for the given move, capped at 99
|
||||
u32 GetMaxPp(struct move *move);
|
||||
|
||||
// Gets the maximum Ginseng Boost for a given move
|
||||
// return: max ginseng boost for the given move, capped at 15
|
||||
u8 GetMoveMaxGinsengBoost(struct move* move);
|
||||
|
||||
// Gets the maximum Ginseng Boost for a given move
|
||||
// return: max ginseng boost for the given move, capped at 15
|
||||
u8 GetMoveMaxGinsengBoostGround(struct move* move);
|
||||
|
||||
// Gets the critical hit chance for a given move.
|
||||
// return: critical hit chance for the given move, capped at 15
|
||||
u8 GetMoveCritChance(struct move *move);
|
||||
|
||||
|
||||
#endif //PMDSKY_MOVES_H
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define PMDSKY_MOVES_1_H
|
||||
|
||||
#include "move.h"
|
||||
#include "common.h"
|
||||
|
||||
// Initializes a move info struct.
|
||||
// This sets f_exists and f_enabled_for_ai on the flags, the ID to the given ID, the PP to the max PP for the move ID, and the ginseng boost to 0.
|
||||
@@ -9,4 +10,10 @@
|
||||
// move_id: move ID
|
||||
void InitMove(struct move *move, enum move_id move_id);
|
||||
|
||||
void InitMoveCheckId(struct move* move, enum move_id move_id);
|
||||
|
||||
void GetInfoMoveGround(struct ground_move* move, enum move_id move_id);
|
||||
|
||||
|
||||
|
||||
#endif //PMDSKY_MOVES_1_H
|
||||
|
||||
@@ -8,4 +8,11 @@ bool8 IsThawingMove(struct move *move);
|
||||
// Returns true if the given move can be used while the user is affected by Taunt, or false if the move cannot be used while taunted.
|
||||
bool8 IsUsableWhileTaunted(struct move *move);
|
||||
|
||||
u16 GetMoveRangeId(struct move *move);
|
||||
s32 GetMoveActualAccuracy(s32 move_id);
|
||||
s16 GetMoveBasePowerFromId(s32 move_id);
|
||||
bool32 IsMoveRangeStringUser(struct move *move);
|
||||
|
||||
|
||||
|
||||
#endif //PMDSKY_MOVES_3_H
|
||||
|
||||
@@ -9,5 +9,6 @@
|
||||
// which: 0 to get the move's first accuracy1 field, 1 to get its accuracy2, 2 to get its ai_condition_random_chance.
|
||||
// return: Move's accuracy1, accuracy2 or ai_condition_random_chance
|
||||
u8 GetMoveAccuracyOrAiChance(struct move *move, enum accuracy_type which);
|
||||
u8 GetMoveBasePp(struct move* move);
|
||||
|
||||
#endif //PMDSKY_MOVES_4_H
|
||||
|
||||
@@ -9,4 +9,7 @@
|
||||
void SetDecoyAiTracker(struct entity* entity);
|
||||
#endif
|
||||
|
||||
u8 CheckSpawnThreshold(void);
|
||||
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_022FB538_H
|
||||
|
||||
13
main.lsf
13
main.lsf
@@ -50,18 +50,12 @@ Static main
|
||||
Object src/exclusive_item.o
|
||||
Object asm/main_02010FC4.o
|
||||
Object src/moves_1.o
|
||||
Object asm/main_020137E8.o
|
||||
Object src/moves_2.o
|
||||
Object asm/main_02013884.o
|
||||
Object src/main_0201398C.o
|
||||
Object asm/main_020139AC.o
|
||||
Object src/moves_4.o
|
||||
Object asm/main_02013A30.o
|
||||
Object src/moves.o
|
||||
Object asm/main_02013AD0.o
|
||||
Object src/moves_3.o
|
||||
Object asm/main_02013B70.o
|
||||
Object src/main_02013C04.o
|
||||
Object asm/main_02013C30.o
|
||||
Object src/main_02014CEC.o
|
||||
Object asm/main_02014D18.o
|
||||
@@ -101,10 +95,7 @@ Static main
|
||||
Object asm/main_0204EFE0.o
|
||||
Object src/number_util.o
|
||||
Object asm/main_02051098.o
|
||||
Object src/main_020512B0.o
|
||||
Object asm/main_020512C8.o
|
||||
Object src/dungeon_recruitment_2.o
|
||||
Object asm/main_020513C0.o
|
||||
Object src/main_020514CC.o
|
||||
Object asm/main_02051504.o
|
||||
Object src/main_02051760.o
|
||||
@@ -119,7 +110,7 @@ Static main
|
||||
Object src/main_020517D4.o
|
||||
Object asm/main_020517F4.o
|
||||
Object src/main_020526EC.o
|
||||
Object asm/get_category_string.o
|
||||
Object src/get_category_string.o
|
||||
Object src/main_020527A8.o
|
||||
Object asm/main_020527E0.o
|
||||
Object src/main_0205283C.o
|
||||
@@ -463,7 +454,6 @@ Overlay OVY_29
|
||||
Object src/overlay_29_022FAC98.o
|
||||
Object asm/overlay_29_022FACBC.o
|
||||
Object src/overlay_29_022FB538.o
|
||||
Object asm/overlay_29_022FB5EC.o
|
||||
Object src/dungeon_logic_4.o
|
||||
Object asm/overlay_29_022FB678.o
|
||||
Object src/joined_at_checks.o
|
||||
@@ -513,7 +503,6 @@ Overlay OVY_29
|
||||
Object src/dungeon_pokemon_attributes_1.o
|
||||
Object asm/overlay_29_023021F0.o
|
||||
Object src/dungeon_logic_5.o
|
||||
Object asm/overlay_29_0230231C.o
|
||||
Object src/dungeon_logic_2.o
|
||||
Object asm/overlay_29_02302388.o
|
||||
Object src/overlay_29_023026CC.o
|
||||
|
||||
@@ -5,9 +5,12 @@
|
||||
#include "main_02014CEC.h"
|
||||
#include "moves_2.h"
|
||||
#include "natural_gift_data.h"
|
||||
#include "overlay_29_022FF898.h"
|
||||
#include "overlay_29_023000E4.h"
|
||||
#include "special_move_types.h"
|
||||
|
||||
extern s32 GetMoveBasePower(struct move*);
|
||||
|
||||
bool8 CanSeeTeammate(struct entity *monster)
|
||||
{
|
||||
if (GetEntInfo(monster)->is_not_team_member)
|
||||
@@ -42,3 +45,20 @@ enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move)
|
||||
|
||||
return GetMoveType(move);
|
||||
}
|
||||
|
||||
s32 GetMovePower(struct entity* entity, struct move* move)
|
||||
{
|
||||
s32 power;
|
||||
u8 ginseng;
|
||||
|
||||
ginseng = move->ginseng;
|
||||
if (move->id == MOVE_HIDDEN_POWER) {
|
||||
struct monster *pokemon_info = GetEntInfo(entity);
|
||||
return move->ginseng + pokemon_info->hidden_power_base_power;
|
||||
}
|
||||
power = ginseng + GetMoveBasePower(move);
|
||||
if (ItemIsActive__022FF898(entity, ITEM_SPACE_GLOBE)) {
|
||||
power *= 2;
|
||||
}
|
||||
return power;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "dungeon_logic_7.h"
|
||||
#include "dungeon_logic_6.h"
|
||||
#include "dungeon_mode.h"
|
||||
#include "dungeon_recruitment_2.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "fixed_room_data_1.h"
|
||||
#include "main_020512B0.h"
|
||||
#include "util.h"
|
||||
|
||||
bool8 IsMonsterLoneOutlaw(struct monster* monster_info)
|
||||
|
||||
@@ -6,14 +6,183 @@
|
||||
|
||||
extern struct dungeon_restriction DUNGEON_RESTRICTIONS[256];
|
||||
|
||||
bool8 IsRecruitingAllowed(enum dungeon_id dungeon_id)
|
||||
bool8 DungeonGoesUp(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & ALLOW_RECRUITING) {
|
||||
|
||||
if(DUNGEON_RESTRICTIONS[dungeon_id].flags & DUNGEON_ASCENDS)
|
||||
{
|
||||
return_val = TRUE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
s32 GetTurnLimit(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].turn_limit_per_floor;
|
||||
}
|
||||
|
||||
bool8 DoesNotSaveWhenEntering(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if(DUNGEON_RESTRICTIONS[dungeon_id].flags & NO_SAVE_ON_ENTRY)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
bool8 TreasureBoxDropsEnabled(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if(DUNGEON_RESTRICTIONS[dungeon_id].flags & ENEMIES_DROP_CHESTS)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
bool8 IsLevelResetDungeon(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if(DUNGEON_RESTRICTIONS[dungeon_id].flags & RESET_TEAM_LEVEL_TO_1)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
s32 GetMaxItemsAllowed(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].max_items_allowed;
|
||||
}
|
||||
|
||||
bool8 IsMoneyAllowed(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if(DUNGEON_RESTRICTIONS[dungeon_id].flags & KEEP_MONEY_ON_ENTRY)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
s8 GetMaxRescueAttempts(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].max_rescue_attempts;
|
||||
}
|
||||
|
||||
|
||||
bool8 IsRecruitingAllowed(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & ALLOW_RECRUITING)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
bool8 GetLeaderChangeFlag(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & ALLOW_LEADER_CHANGE)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
s32 GetRandomMovementChance(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].random_movement_chance;
|
||||
}
|
||||
|
||||
bool8 CanEnemyEvolve(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & ENEMIES_CAN_EVOLVE)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
s32 GetMaxMembersAllowed(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].max_party_size;
|
||||
}
|
||||
|
||||
bool8 IsIqEnabled(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & DISABLE_IQ_SKILLS)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
bool8 IsTrapInvisibleWhenAttacking(enum dungeon_id dungeon_id)
|
||||
{
|
||||
bool8 return_val;
|
||||
|
||||
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & TRAPS_STAY_HIDDEN_ON_ATTACK)
|
||||
{
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_val = FALSE;
|
||||
}
|
||||
return return_val;
|
||||
}
|
||||
|
||||
bool8 JoinedAtRangeCheck(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return ((dungeon_id >= DUNGEON_JOINED_AT_BIDOOF) && (dungeon_id < DUNGEON_DUMMY_0xE4));
|
||||
}
|
||||
|
||||
25
src/get_category_string.c
Normal file
25
src/get_category_string.c
Normal file
@@ -0,0 +1,25 @@
|
||||
#include "get_category_string.h"
|
||||
#include "main_0202593C.h"
|
||||
|
||||
void SprintfStatic__02052418(u8*, u8*, u8*);
|
||||
|
||||
extern u8 _020A3200[10];
|
||||
|
||||
u8 *GetCategoryString(s32 id)
|
||||
{
|
||||
u8 *buffer;
|
||||
u8 *string;
|
||||
|
||||
buffer = AllocateTemp1024ByteBufferFromPool();
|
||||
|
||||
#ifdef EUROPE
|
||||
string = StringFromId((u16) ((id % 600) + 0x2479));
|
||||
#elif JAPAN
|
||||
string = StringFromId((u16) ((id % 600) + 0x1A40));
|
||||
#else
|
||||
string = StringFromId((u16) ((id % 600) + 0x2477));
|
||||
#endif
|
||||
|
||||
SprintfStatic__02052418(buffer, _020A3200, string);
|
||||
return buffer;
|
||||
}
|
||||
@@ -7,3 +7,20 @@ s16 GetMoveAiWeight(struct move *move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].ai_weight;
|
||||
}
|
||||
|
||||
u8 GetMoveNbStrikes(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].strikes;
|
||||
}
|
||||
|
||||
s16 GetMoveBasePower(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].base_power;
|
||||
}
|
||||
|
||||
s16 GetMoveBasePowerGround(struct ground_move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].base_power;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#include "main_02013C04.h"
|
||||
#include "move_data.h"
|
||||
|
||||
extern struct move_data_table_outer DUNGEON_MOVE_TABLES;
|
||||
|
||||
bool32 IsMoveRangeStringUser(struct move *move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].range_string_idx == MOVE_RANGE_STRING_USER;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#include "main_020512B0.h"
|
||||
#include "dungeon.h"
|
||||
|
||||
extern struct dungeon_restriction DUNGEON_RESTRICTIONS[256];
|
||||
|
||||
s32 GetTurnLimit(enum dungeon_id dungeon_id)
|
||||
{
|
||||
return DUNGEON_RESTRICTIONS[dungeon_id].turn_limit_per_floor;
|
||||
}
|
||||
16
src/moves.c
16
src/moves.c
@@ -25,3 +25,19 @@ u32 GetMaxPp(struct move *move)
|
||||
|
||||
return pp;
|
||||
}
|
||||
|
||||
u8 GetMoveMaxGinsengBoost(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].max_ginseng_boost;
|
||||
}
|
||||
|
||||
u8 GetMoveMaxGinsengBoostGround(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->flags2].max_ginseng_boost;
|
||||
}
|
||||
|
||||
u8 GetMoveCritChance(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].crit_chance;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,3 +10,23 @@ void InitMove(struct move *move, enum move_id move_id)
|
||||
move->pp = GetMaxPp(move);
|
||||
move->ginseng = 0;
|
||||
}
|
||||
|
||||
void InitMoveCheckId(struct move* move, enum move_id move_id)
|
||||
{
|
||||
if (move_id == 0) {
|
||||
move->flags0 = 0;
|
||||
return;
|
||||
}
|
||||
move->flags0 = MOVE_FLAG_ENABLED_FOR_AI | MOVE_FLAG_EXISTS;
|
||||
move->flags2 = 0;
|
||||
move->id = move_id;
|
||||
move->pp = GetMaxPp(move);
|
||||
move->ginseng = 0;
|
||||
}
|
||||
|
||||
void GetInfoMoveGround(struct ground_move* move, enum move_id move_id)
|
||||
{
|
||||
move->flags0 = MOVE_FLAG_ENABLED_FOR_AI | MOVE_FLAG_EXISTS;
|
||||
move->id = move_id;
|
||||
move->ginseng = 0;
|
||||
}
|
||||
|
||||
@@ -12,3 +12,42 @@ bool8 IsUsableWhileTaunted(struct move *move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].usable_while_taunted;
|
||||
}
|
||||
|
||||
u16 GetMoveRangeId(struct move *move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].range_string_idx;
|
||||
}
|
||||
|
||||
s32 GetMoveActualAccuracy(s32 move_id)
|
||||
{
|
||||
struct move_data *move;
|
||||
u8 max_ginseng_boost;
|
||||
u8 global_acc;
|
||||
|
||||
move = &DUNGEON_MOVE_TABLES.moves->moves[move_id];
|
||||
max_ginseng_boost = move->max_ginseng_boost;
|
||||
if (max_ginseng_boost == 0) {
|
||||
return move->accuracy[ACCURACY_1];
|
||||
}
|
||||
if (max_ginseng_boost == 0x63) {
|
||||
global_acc = move->accuracy[ACCURACY_1];
|
||||
if (global_acc == 0x7D) {
|
||||
return move->accuracy[ACCURACY_2];
|
||||
}
|
||||
return ((global_acc * move->accuracy[ACCURACY_2]) / 100);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 GetMoveBasePowerFromId(s32 move_id)
|
||||
{
|
||||
struct move_data *move;
|
||||
move = &DUNGEON_MOVE_TABLES.moves->moves[move_id];
|
||||
return move->base_power;
|
||||
}
|
||||
|
||||
bool32 IsMoveRangeStringUser(struct move *move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].range_string_idx == MOVE_RANGE_STRING_USER;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,3 +6,8 @@ u8 GetMoveAccuracyOrAiChance(struct move *move, enum accuracy_type which)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].accuracy[which];
|
||||
}
|
||||
|
||||
u8 GetMoveBasePp(struct move* move)
|
||||
{
|
||||
return DUNGEON_MOVE_TABLES.moves->moves[move->id].pp;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
#include "overlay_29_022F7364.h"
|
||||
#include "targeting.h"
|
||||
|
||||
extern u8 GetScenarioBalanceVeneer();
|
||||
extern u32 GetSpawnThreshold();
|
||||
|
||||
#ifndef JAPAN
|
||||
void SetDecoyAiTracker(struct entity* entity)
|
||||
{
|
||||
@@ -31,3 +34,8 @@ void SetDecoyAiTracker(struct entity* entity)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
u8 CheckSpawnThreshold(void)
|
||||
{
|
||||
return (GetSpawnThreshold() <= GetScenarioBalanceVeneer());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user