Skip to content

Commit 5b5dc49

Browse files
Merge pull request #187 from slaw-22/IsRecruitingAllowed
Decomp IsRecruitingAllowed
2 parents d83b3b1 + b6774b9 commit 5b5dc49

File tree

9 files changed

+162
-116
lines changed

9 files changed

+162
-116
lines changed

asm/include/main_02051098.inc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
#pragma once
2+
.public CopyBitsFrom
3+
.public CopyBitsTo
4+
.public DUNGEON_RESTRICTIONS
25
.public _020A0C68
36
.public _020A0C69
4-
.public _020A0C6A
57
.public _020A0C6C
6-
.public _020A0C6E
78
.public _020AFF7C
89
.public _020AFF80
910
.public _020AFF88
10-
.public CopyBitsFrom
11-
.public CopyBitsTo
12-
.public DUNGEON_RESTRICTIONS

asm/include/main_020513C0.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#pragma once
2+
.public DUNGEON_RESTRICTIONS
3+
.public _020A0C6A
4+
.public _020A0C6E

asm/main_02051098.s

Lines changed: 0 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -259,114 +259,3 @@ GetMaxRescueAttempts: ; 0x02051380
259259
.align 2, 0
260260
_02051394: .word _020A0C68
261261
arm_func_end GetMaxRescueAttempts
262-
263-
arm_func_start IsRecruitingAllowed
264-
IsRecruitingAllowed: ; 0x02051398
265-
mov r1, #0xc
266-
mul r1, r0, r1
267-
ldr r0, _020513BC ; =DUNGEON_RESTRICTIONS
268-
ldr r0, [r0, r1]
269-
tst r0, #8
270-
movne r0, #1
271-
moveq r0, #0
272-
and r0, r0, #0xff
273-
bx lr
274-
.align 2, 0
275-
_020513BC: .word DUNGEON_RESTRICTIONS
276-
arm_func_end IsRecruitingAllowed
277-
278-
arm_func_start GetLeaderChangeFlag
279-
GetLeaderChangeFlag: ; 0x020513C0
280-
mov r1, #0xc
281-
mul r1, r0, r1
282-
ldr r0, _020513E4 ; =DUNGEON_RESTRICTIONS
283-
ldr r0, [r0, r1]
284-
tst r0, #0x40
285-
movne r0, #1
286-
moveq r0, #0
287-
and r0, r0, #0xff
288-
bx lr
289-
.align 2, 0
290-
_020513E4: .word DUNGEON_RESTRICTIONS
291-
arm_func_end GetLeaderChangeFlag
292-
293-
arm_func_start GetRandomMovementChance
294-
GetRandomMovementChance: ; 0x020513E8
295-
mov r1, #0xc
296-
mul r1, r0, r1
297-
ldr r0, _020513FC ; =_020A0C6E
298-
ldrsh r0, [r0, r1]
299-
bx lr
300-
.align 2, 0
301-
_020513FC: .word _020A0C6E
302-
arm_func_end GetRandomMovementChance
303-
304-
arm_func_start CanEnemyEvolve
305-
CanEnemyEvolve: ; 0x02051400
306-
mov r1, #0xc
307-
mul r1, r0, r1
308-
ldr r0, _02051424 ; =DUNGEON_RESTRICTIONS
309-
ldr r0, [r0, r1]
310-
tst r0, #2
311-
movne r0, #1
312-
moveq r0, #0
313-
and r0, r0, #0xff
314-
bx lr
315-
.align 2, 0
316-
_02051424: .word DUNGEON_RESTRICTIONS
317-
arm_func_end CanEnemyEvolve
318-
319-
arm_func_start GetMaxMembersAllowed
320-
GetMaxMembersAllowed: ; 0x02051428
321-
mov r1, #0xc
322-
mul r1, r0, r1
323-
ldr r0, _0205143C ; =_020A0C6A
324-
ldrb r0, [r0, r1]
325-
bx lr
326-
.align 2, 0
327-
_0205143C: .word _020A0C6A
328-
arm_func_end GetMaxMembersAllowed
329-
330-
arm_func_start IsIqEnabled
331-
IsIqEnabled: ; 0x02051440
332-
mov r1, #0xc
333-
mul r1, r0, r1
334-
ldr r0, _02051464 ; =DUNGEON_RESTRICTIONS
335-
ldr r0, [r0, r1]
336-
tst r0, #0x100
337-
movne r0, #1
338-
moveq r0, #0
339-
and r0, r0, #0xff
340-
bx lr
341-
.align 2, 0
342-
_02051464: .word DUNGEON_RESTRICTIONS
343-
arm_func_end IsIqEnabled
344-
345-
arm_func_start IsTrapInvisibleWhenAttacking
346-
IsTrapInvisibleWhenAttacking: ; 0x02051468
347-
mov r1, #0xc
348-
mul r1, r0, r1
349-
ldr r0, _0205148C ; =DUNGEON_RESTRICTIONS
350-
ldr r0, [r0, r1]
351-
tst r0, #0x200
352-
movne r0, #1
353-
moveq r0, #0
354-
and r0, r0, #0xff
355-
bx lr
356-
.align 2, 0
357-
_0205148C: .word DUNGEON_RESTRICTIONS
358-
arm_func_end IsTrapInvisibleWhenAttacking
359-
360-
arm_func_start JoinedAtRangeCheck
361-
JoinedAtRangeCheck: ; 0x02051490
362-
cmp r0, #0xd9
363-
blo _020514A4
364-
cmp r0, #0xe4
365-
movlo r0, #1
366-
blo _020514A8
367-
_020514A4:
368-
mov r0, #0
369-
_020514A8:
370-
and r0, r0, #0xff
371-
bx lr
372-
arm_func_end JoinedAtRangeCheck

asm/main_020513C0.s

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
.include "asm/macros.inc"
2+
.include "main_020513C0.inc"
3+
4+
.text
5+
6+
arm_func_start GetLeaderChangeFlag
7+
GetLeaderChangeFlag: ; 0x020513C0
8+
mov r1, #0xc
9+
mul r1, r0, r1
10+
ldr r0, _020513E4 ; =DUNGEON_RESTRICTIONS
11+
ldr r0, [r0, r1]
12+
tst r0, #0x40
13+
movne r0, #1
14+
moveq r0, #0
15+
and r0, r0, #0xff
16+
bx lr
17+
.align 2, 0
18+
_020513E4: .word DUNGEON_RESTRICTIONS
19+
arm_func_end GetLeaderChangeFlag
20+
21+
arm_func_start GetRandomMovementChance
22+
GetRandomMovementChance: ; 0x020513E8
23+
mov r1, #0xc
24+
mul r1, r0, r1
25+
ldr r0, _020513FC ; =_020A0C6E
26+
ldrsh r0, [r0, r1]
27+
bx lr
28+
.align 2, 0
29+
_020513FC: .word _020A0C6E
30+
arm_func_end GetRandomMovementChance
31+
32+
arm_func_start CanEnemyEvolve
33+
CanEnemyEvolve: ; 0x02051400
34+
mov r1, #0xc
35+
mul r1, r0, r1
36+
ldr r0, _02051424 ; =DUNGEON_RESTRICTIONS
37+
ldr r0, [r0, r1]
38+
tst r0, #2
39+
movne r0, #1
40+
moveq r0, #0
41+
and r0, r0, #0xff
42+
bx lr
43+
.align 2, 0
44+
_02051424: .word DUNGEON_RESTRICTIONS
45+
arm_func_end CanEnemyEvolve
46+
47+
arm_func_start GetMaxMembersAllowed
48+
GetMaxMembersAllowed: ; 0x02051428
49+
mov r1, #0xc
50+
mul r1, r0, r1
51+
ldr r0, _0205143C ; =_020A0C6A
52+
ldrb r0, [r0, r1]
53+
bx lr
54+
.align 2, 0
55+
_0205143C: .word _020A0C6A
56+
arm_func_end GetMaxMembersAllowed
57+
58+
arm_func_start IsIqEnabled
59+
IsIqEnabled: ; 0x02051440
60+
mov r1, #0xc
61+
mul r1, r0, r1
62+
ldr r0, _02051464 ; =DUNGEON_RESTRICTIONS
63+
ldr r0, [r0, r1]
64+
tst r0, #0x100
65+
movne r0, #1
66+
moveq r0, #0
67+
and r0, r0, #0xff
68+
bx lr
69+
.align 2, 0
70+
_02051464: .word DUNGEON_RESTRICTIONS
71+
arm_func_end IsIqEnabled
72+
73+
arm_func_start IsTrapInvisibleWhenAttacking
74+
IsTrapInvisibleWhenAttacking: ; 0x02051468
75+
mov r1, #0xc
76+
mul r1, r0, r1
77+
ldr r0, _0205148C ; =DUNGEON_RESTRICTIONS
78+
ldr r0, [r0, r1]
79+
tst r0, #0x200
80+
movne r0, #1
81+
moveq r0, #0
82+
and r0, r0, #0xff
83+
bx lr
84+
.align 2, 0
85+
_0205148C: .word DUNGEON_RESTRICTIONS
86+
arm_func_end IsTrapInvisibleWhenAttacking
87+
88+
arm_func_start JoinedAtRangeCheck
89+
JoinedAtRangeCheck: ; 0x02051490
90+
cmp r0, #0xd9
91+
blo _020514A4
92+
cmp r0, #0xe4
93+
movlo r0, #1
94+
blo _020514A8
95+
_020514A4:
96+
mov r0, #0
97+
_020514A8:
98+
and r0, r0, #0xff
99+
bx lr
100+
arm_func_end JoinedAtRangeCheck

include/dungeon.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,4 +1779,14 @@ struct dungeon {
17791779
u8 field_0x2cb13;
17801780
};
17811781

1782+
struct dungeon_restriction {
1783+
u32 flags;
1784+
u8 max_rescue_attempts;
1785+
u8 max_items_allowed;
1786+
u8 max_party_size;
1787+
u8 pad;
1788+
u16 turn_limit_per_floor;
1789+
u16 random_movement_chance;
1790+
};
1791+
17821792
#endif // PMDSKY_DUNGEON_H

include/dungeon_recruitment_2.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#ifndef PMDSKY_MAIN_02051398_H
2+
#define PMDSKY_MAIN_02051398_H
3+
4+
#include "enums.h"
5+
#include "util.h"
6+
7+
bool8 IsRecruitingAllowed(enum dungeon_id dungeon_id);
8+
9+
#endif //PMDSKY_MAIN_02051398_H

include/enums.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2946,4 +2946,19 @@ enum pack_file_id {
29462946
PACK_ARCHIVE_M_LEVEL = 5,
29472947
};
29482948

2949+
enum dungeon_restriction_flags {
2950+
DUNGEON_ASCENDS = 1 << 0, // 0 if dungeon goes down, 1 if it goes up
2951+
ENEMIES_CAN_EVOLVE = 1 << 1,
2952+
GRANT_XP = 1 << 2, // when defeating enemies
2953+
ALLOW_RECRUITING = 1 << 3,
2954+
RESET_TEAM_LEVEL_TO_1 = 1 << 4, // when entering
2955+
KEEP_MONEY_ON_ENTRY = 1 << 5, // 0 if money is lost when entering
2956+
ALLOW_LEADER_CHANGE = 1 << 6,
2957+
NO_SAVE_ON_ENTRY = 1 << 7,
2958+
DISABLE_IQ_SKILLS = 1 << 8,
2959+
TRAPS_STAY_HIDDEN_ON_ATTACK = 1 << 9, // true if traps remain invisible when attacked / item-thrown
2960+
ENEMIES_DROP_CHESTS = 1 << 10
2961+
// Remaining flags are unused
2962+
};
2963+
29492964
#endif //PMDSKY_ENUMS_H

main.lsf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ Static main
8383
Object asm/main_0204DE7C.o
8484
Object src/number_util.o
8585
Object asm/main_02051098.o
86+
Object src/dungeon_recruitment_2.o
87+
Object asm/main_020513C0.o
8688
Object src/main_020514CC.o
8789
Object asm/main_02051504.o
8890
Object src/main_02051760.o

src/dungeon_recruitment_2.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "dungeon_recruitment_2.h"
2+
3+
#include "dungeon.h"
4+
#include "enums.h"
5+
#include "util.h"
6+
7+
extern struct dungeon_restriction DUNGEON_RESTRICTIONS[];
8+
9+
bool8 IsRecruitingAllowed(enum dungeon_id dungeon_id)
10+
{
11+
bool8 return_val;
12+
13+
if (DUNGEON_RESTRICTIONS[dungeon_id].flags & ALLOW_RECRUITING) {
14+
return_val = TRUE;
15+
} else {
16+
return_val = FALSE;
17+
}
18+
return return_val;
19+
}

0 commit comments

Comments
 (0)