mirror of
https://github.com/pret/pokeruby.git
synced 2025-01-19 11:12:26 +00:00
decompile time_events
This commit is contained in:
parent
f492004cb6
commit
d7284694ec
@ -1,243 +0,0 @@
|
||||
.include "constants/gba_constants.inc"
|
||||
.include "constants/species_constants.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_810D280
|
||||
sub_810D280: @ 810D280
|
||||
push {r4,lr}
|
||||
ldr r0, _0810D2A4 @ =0x00004024
|
||||
bl VarGet
|
||||
adds r4, r0, 0
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
ldr r0, _0810D2A8 @ =0x00004025
|
||||
bl VarGet
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
lsls r4, 16
|
||||
orrs r4, r0
|
||||
adds r0, r4, 0
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0810D2A4: .4byte 0x00004024
|
||||
_0810D2A8: .4byte 0x00004025
|
||||
thumb_func_end sub_810D280
|
||||
|
||||
thumb_func_start sub_810D2AC
|
||||
sub_810D2AC: @ 810D2AC
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r0, _0810D2CC @ =0x00004024
|
||||
lsrs r1, r4, 16
|
||||
bl VarSet
|
||||
ldr r0, _0810D2D0 @ =0x00004025
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
adds r1, r4, 0
|
||||
bl VarSet
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D2CC: .4byte 0x00004024
|
||||
_0810D2D0: .4byte 0x00004025
|
||||
thumb_func_end sub_810D2AC
|
||||
|
||||
thumb_func_start unref_sub_810D2D4
|
||||
unref_sub_810D2D4: @ 810D2D4
|
||||
push {r4,lr}
|
||||
bl Random
|
||||
adds r4, r0, 0
|
||||
bl Random
|
||||
lsls r4, 16
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
orrs r4, r0
|
||||
adds r0, r4, 0
|
||||
bl sub_810D2AC
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end unref_sub_810D2D4
|
||||
|
||||
thumb_func_start sub_810D2F4
|
||||
sub_810D2F4: @ 810D2F4
|
||||
push {r4,lr}
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
bl sub_810D280
|
||||
adds r1, r0, 0
|
||||
cmp r4, 0
|
||||
beq _0810D318
|
||||
ldr r3, _0810D324 @ =0x41c64e6d
|
||||
ldr r2, _0810D328 @ =0x00003039
|
||||
_0810D308:
|
||||
adds r0, r1, 0
|
||||
muls r0, r3
|
||||
adds r1, r0, r2
|
||||
subs r0, r4, 0x1
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
cmp r4, 0
|
||||
bne _0810D308
|
||||
_0810D318:
|
||||
adds r0, r1, 0
|
||||
bl sub_810D2AC
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D324: .4byte 0x41c64e6d
|
||||
_0810D328: .4byte 0x00003039
|
||||
thumb_func_end sub_810D2F4
|
||||
|
||||
thumb_func_start sub_810D32C
|
||||
sub_810D32C: @ 810D32C
|
||||
push {r4-r6,lr}
|
||||
bl sub_810D280
|
||||
lsrs r6, r0, 16
|
||||
movs r5, 0
|
||||
_0810D336:
|
||||
movs r0, 0x64
|
||||
adds r1, r5, 0
|
||||
muls r1, r0
|
||||
ldr r0, _0810D360 @ =gPlayerParty
|
||||
adds r4, r1, r0
|
||||
adds r0, r4, 0
|
||||
movs r1, 0xB
|
||||
bl GetMonData
|
||||
cmp r0, 0
|
||||
beq _0810D368
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl GetMonData
|
||||
ldr r1, _0810D364 @ =0x0000ffff
|
||||
ands r1, r0
|
||||
cmp r1, r6
|
||||
bne _0810D368
|
||||
movs r0, 0x1
|
||||
b _0810D370
|
||||
.align 2, 0
|
||||
_0810D360: .4byte gPlayerParty
|
||||
_0810D364: .4byte 0x0000ffff
|
||||
_0810D368:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x5
|
||||
ble _0810D336
|
||||
movs r0, 0
|
||||
_0810D370:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_810D32C
|
||||
|
||||
thumb_func_start UpdateShoalTideFlag
|
||||
UpdateShoalTideFlag: @ 810D378
|
||||
push {lr}
|
||||
bl get_map_light_from_warp0
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl is_light_level_1_2_3_5_or_6
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0810D3BE
|
||||
bl RtcCalcLocalTime
|
||||
ldr r1, _0810D3AC @ =gUnknown_083F8340
|
||||
ldr r0, _0810D3B0 @ =gLocalTime
|
||||
ldrb r0, [r0, 0x2]
|
||||
lsls r0, 24
|
||||
asrs r0, 24
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0810D3B8
|
||||
ldr r0, _0810D3B4 @ =0x0000083a
|
||||
bl FlagSet
|
||||
b _0810D3BE
|
||||
.align 2, 0
|
||||
_0810D3AC: .4byte gUnknown_083F8340
|
||||
_0810D3B0: .4byte gLocalTime
|
||||
_0810D3B4: .4byte 0x0000083a
|
||||
_0810D3B8:
|
||||
ldr r0, _0810D3C4 @ =0x0000083a
|
||||
bl FlagReset
|
||||
_0810D3BE:
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D3C4: .4byte 0x0000083a
|
||||
thumb_func_end UpdateShoalTideFlag
|
||||
|
||||
thumb_func_start sub_810D3C8
|
||||
sub_810D3C8: @ 810D3C8
|
||||
push {r4,lr}
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
bl sub_807DDFC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0810D3E2
|
||||
bl EnableBothScriptContexts
|
||||
adds r0, r4, 0
|
||||
bl DestroyTask
|
||||
_0810D3E2:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_810D3C8
|
||||
|
||||
thumb_func_start sub_810D3E8
|
||||
sub_810D3E8: @ 810D3E8
|
||||
push {lr}
|
||||
ldr r0, _0810D3F8 @ =sub_810D3C8
|
||||
movs r1, 0x50
|
||||
bl CreateTask
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D3F8: .4byte sub_810D3C8
|
||||
thumb_func_end sub_810D3E8
|
||||
|
||||
thumb_func_start sub_810D3FC
|
||||
sub_810D3FC: @ 810D3FC
|
||||
push {lr}
|
||||
ldr r0, _0810D40C @ =0x00004049
|
||||
bl GetVarPointer
|
||||
movs r1, 0
|
||||
strh r1, [r0]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D40C: .4byte 0x00004049
|
||||
thumb_func_end sub_810D3FC
|
||||
|
||||
thumb_func_start UpdateBirchState
|
||||
UpdateBirchState: @ 810D410
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
ldr r0, _0810D438 @ =0x00004049
|
||||
bl GetVarPointer
|
||||
adds r5, r0, 0
|
||||
ldrh r0, [r5]
|
||||
adds r4, r0
|
||||
strh r4, [r5]
|
||||
ldrh r0, [r5]
|
||||
movs r1, 0x7
|
||||
bl __umodsi3
|
||||
strh r0, [r5]
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0810D438: .4byte 0x00004049
|
||||
thumb_func_end UpdateBirchState
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
@ -209,9 +209,9 @@ gSpecials::
|
||||
.4byte ExitSafariMode
|
||||
.4byte SafariZoneGetPokeblockNameInFeeder
|
||||
.4byte sub_810BAF4
|
||||
.4byte sub_810D32C
|
||||
.4byte IsMirageIslandPresent
|
||||
.4byte UpdateShoalTideFlag
|
||||
.4byte sub_810D3FC
|
||||
.4byte InitBirchState
|
||||
.4byte ScriptGetPokedexInfo
|
||||
.4byte ShowPokedexRatingMessage
|
||||
.4byte DoPCTurnOnEffect
|
||||
@ -284,7 +284,7 @@ gSpecials::
|
||||
.4byte sub_80818A4
|
||||
.4byte sub_80818FC
|
||||
.4byte ShowBattleTowerRecords
|
||||
.4byte sub_810D3E8
|
||||
.4byte WaitWeather
|
||||
.4byte sub_810F414
|
||||
.4byte sub_810F424
|
||||
.4byte player_get_direction_lower_nybble
|
||||
|
@ -1,31 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
|
||||
.align 2
|
||||
gUnknown_083F8340:: @ 83F8340
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 1
|
||||
.byte 1
|
||||
.byte 1
|
@ -356,7 +356,7 @@ s16 sub_810CAE4(u8, struct Pokeblock *);
|
||||
void sub_810CC80(void);
|
||||
|
||||
// asm/time_events.o
|
||||
u8 sub_810D32C(void);
|
||||
u8 IsMirageIslandPresent(void);
|
||||
|
||||
// asm/field_specials.o
|
||||
void ResetCyclingRoadChallengeData(void);
|
||||
|
@ -114,6 +114,8 @@
|
||||
#define TYPE_DRAGON 0x10
|
||||
#define TYPE_DARK 0x11
|
||||
|
||||
#define PARTY_SIZE 6
|
||||
|
||||
enum {
|
||||
NATURE_HARDY,
|
||||
NATURE_LONELY,
|
||||
@ -376,8 +378,8 @@ struct PokemonStorage
|
||||
u8 unkArray[14];
|
||||
};
|
||||
|
||||
extern struct Pokemon gPlayerParty[6];
|
||||
extern struct Pokemon gEnemyParty[6];
|
||||
extern struct Pokemon gPlayerParty[PARTY_SIZE];
|
||||
extern struct Pokemon gEnemyParty[PARTY_SIZE];
|
||||
|
||||
void ZeroBoxMonData(struct BoxPokemon *boxMon);
|
||||
void ZeroMonData(struct Pokemon *mon);
|
||||
|
@ -100,7 +100,7 @@ void sub_8054164(void);
|
||||
u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
|
||||
// get_map_light_level_from_warp
|
||||
u8 sav1_map_get_light_level(void);
|
||||
// get_map_light_from_warp0
|
||||
u8 get_map_light_from_warp0(void);
|
||||
bool8 is_light_level_1_2_3_5_or_6(u8 a1);
|
||||
bool8 is_light_level_1_2_3_or_6(u8 a1);
|
||||
u8 is_light_level_8_or_9(u8);
|
||||
|
@ -7,6 +7,7 @@
|
||||
#define VAR_FIRST_POKE 0x4023
|
||||
#define VAR_MIRAGE_RND_H 0x4024
|
||||
#define VAR_MIRAGE_RND_L 0x4025
|
||||
#define VAR_SECRET_BASE_MAP 0x4026
|
||||
|
||||
#define VAR_HAPPINESS_STEP_COUNTER 0x402A
|
||||
#define VAR_POISON_STEP_COUNTER 0x402B
|
||||
@ -18,6 +19,8 @@
|
||||
#define VAR_NATIONAL_DEX 0x4046
|
||||
#define VAR_SHROOMISH_SIZE_RECORD 0x4047
|
||||
|
||||
#define VAR_BIRCH_STATE 0x4049
|
||||
|
||||
#define VAR_POKELOT_RND1 0x404B
|
||||
#define VAR_POKELOT_RND2 0x404C
|
||||
|
||||
|
@ -213,7 +213,7 @@ SECTIONS {
|
||||
asm/pokeblock.o(.text);
|
||||
asm/fldeff_flash.o(.text);
|
||||
src/post_battle_event_funcs.o(.text);
|
||||
asm/time_events.o(.text);
|
||||
src/time_events.o(.text);
|
||||
asm/birch_pc.o(.text);
|
||||
src/hof_pc.o(.text);
|
||||
asm/field_specials.o(.text);
|
||||
@ -426,7 +426,7 @@ SECTIONS {
|
||||
src/wallclock.o(.rodata);
|
||||
data/pokeblock.o(.rodata);
|
||||
data/fldeff_flash.o(.rodata);
|
||||
data/time_events.o(.rodata);
|
||||
src/time_events.o(.rodata);
|
||||
data/field_specials.o(.rodata);
|
||||
data/pokedex_area_screen.o(.rodata);
|
||||
data/evolution_scene.o(.rodata);
|
||||
|
@ -12,7 +12,7 @@ extern void sub_80FA220(u16);
|
||||
extern void sub_80BE8C4(u16);
|
||||
extern void sub_8080834(u16);
|
||||
extern void UpdatePartyPokerusTime(u16);
|
||||
extern void sub_810D2F4(u16);
|
||||
extern void UpdateMirageRnd(u16);
|
||||
extern void UpdateBirchState(u16);
|
||||
extern void sub_810F618(u16);
|
||||
|
||||
@ -53,7 +53,7 @@ static void UpdatePerDay(struct Time *time)
|
||||
sub_80BE8C4(newDays);
|
||||
sub_8080834(newDays);
|
||||
UpdatePartyPokerusTime(newDays);
|
||||
sub_810D2F4(newDays);
|
||||
UpdateMirageRnd(newDays);
|
||||
UpdateBirchState(newDays);
|
||||
sub_810F618(newDays);
|
||||
SetRandomLotteryNumber(newDays);
|
||||
|
@ -932,7 +932,7 @@ void sub_80540D0(s16 *a1, u16 *a2)
|
||||
|
||||
void sub_8054164(void)
|
||||
{
|
||||
if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !sub_810D32C())
|
||||
if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent())
|
||||
{
|
||||
gUnknown_02029816 = TRUE;
|
||||
gUnknown_02029814 = GetMirageIslandMon();
|
||||
|
118
src/time_events.c
Normal file
118
src/time_events.c
Normal file
@ -0,0 +1,118 @@
|
||||
#include "global.h"
|
||||
#include "event_data.h"
|
||||
#include "pokemon.h"
|
||||
#include "rng.h"
|
||||
#include "rom4.h"
|
||||
#include "rtc.h"
|
||||
#include "script.h"
|
||||
#include "task.h"
|
||||
|
||||
extern bool8 sub_807DDFC(void);
|
||||
|
||||
u32 GetMirageRnd(void)
|
||||
{
|
||||
u32 hi = VarGet(VAR_MIRAGE_RND_H);
|
||||
u32 lo = VarGet(VAR_MIRAGE_RND_L);
|
||||
return (hi << 16) | lo;
|
||||
}
|
||||
|
||||
void SetMirageRnd(u32 rnd)
|
||||
{
|
||||
VarSet(VAR_MIRAGE_RND_H, rnd >> 16);
|
||||
VarSet(VAR_MIRAGE_RND_L, rnd);
|
||||
}
|
||||
|
||||
// unused
|
||||
void InitMirageRnd(void)
|
||||
{
|
||||
SetMirageRnd((Random() << 16) | Random());
|
||||
}
|
||||
|
||||
void UpdateMirageRnd(u16 days)
|
||||
{
|
||||
s32 rnd = GetMirageRnd();
|
||||
while (days)
|
||||
{
|
||||
rnd = 1103515245 * rnd + 12345;
|
||||
days--;
|
||||
}
|
||||
SetMirageRnd(rnd);
|
||||
}
|
||||
|
||||
bool8 IsMirageIslandPresent(void)
|
||||
{
|
||||
u16 rnd = GetMirageRnd() >> 16;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && (GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY) & 0xFFFF) == rnd)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void UpdateShoalTideFlag(void)
|
||||
{
|
||||
static const u8 tide[] =
|
||||
{
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
};
|
||||
|
||||
if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()))
|
||||
{
|
||||
RtcCalcLocalTime();
|
||||
if (tide[gLocalTime.hours])
|
||||
FlagSet(SYS_SHOAL_TIDE);
|
||||
else
|
||||
FlagReset(SYS_SHOAL_TIDE);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_WaitWeather(u8 taskId)
|
||||
{
|
||||
if (sub_807DDFC())
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void WaitWeather(void)
|
||||
{
|
||||
CreateTask(Task_WaitWeather, 80);
|
||||
}
|
||||
|
||||
void InitBirchState(void)
|
||||
{
|
||||
*(u16 *)GetVarPointer(VAR_BIRCH_STATE) = 0;
|
||||
}
|
||||
|
||||
void UpdateBirchState(u16 days)
|
||||
{
|
||||
u16 *state = GetVarPointer(VAR_BIRCH_STATE);
|
||||
*state += days;
|
||||
*state %= 7;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user