through SetMauvilleOldMan

This commit is contained in:
PikalaxALT 2018-05-02 11:31:58 -04:00
parent 867b496f2e
commit 21c3e7e8e5
7 changed files with 144 additions and 159 deletions

View File

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Default" />
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

View File

@ -5,144 +5,6 @@
.text
thumb_func_start sub_81200A0
sub_81200A0: @ 81200A0
push {r4,lr}
ldr r0, =gSaveBlock1Ptr
ldr r2, [r0]
ldr r1, =0x00002e28
adds r0, r2, r1
movs r1, 0
strb r1, [r0]
ldr r3, =0x00002e51
adds r0, r2, r3
strb r1, [r0]
ldr r0, =gGameLanguage
ldrb r1, [r0]
adds r3, 0x1
adds r0, r2, r3
strb r1, [r0]
movs r3, 0
ldr r0, =0x00002e2a
adds r2, r0
ldr r4, =gUnknown_0859EFE4
_081200C6:
lsls r0, r3, 1
adds r1, r2, r0
adds r0, r4
ldrh r0, [r0]
strh r0, [r1]
adds r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
cmp r3, 0x5
bls _081200C6
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_81200A0
thumb_func_start sub_81200F8
sub_81200F8: @ 81200F8
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
ldr r0, =0x00002e28
adds r1, r0
movs r2, 0
movs r0, 0x1
strb r0, [r1]
strb r2, [r1, 0x1]
ldr r0, =gGameLanguage
ldrb r0, [r0]
strb r0, [r1, 0x2]
bx lr
.pool
thumb_func_end sub_81200F8
thumb_func_start sub_812011C
sub_812011C: @ 812011C
push {lr}
bl sub_8120E08
pop {r0}
bx r0
thumb_func_end sub_812011C
thumb_func_start sub_8120128
sub_8120128: @ 8120128
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
ldr r0, =0x00002e28
adds r2, r1, r0
movs r3, 0
movs r0, 0x4
strb r0, [r2]
strb r3, [r2, 0x1]
ldr r0, =gGameLanguage
ldrb r0, [r0]
ldr r2, =0x00002e48
adds r1, r2
strb r0, [r1]
bx lr
.pool
thumb_func_end sub_8120128
thumb_func_start sub_8120154
sub_8120154: @ 8120154
push {lr}
bl sub_81339F8
pop {r0}
bx r0
thumb_func_end sub_8120154
thumb_func_start SetMauvilleOldMan
SetMauvilleOldMan: @ 8120160
push {lr}
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r1, [r0, 0xB]
lsls r1, 8
ldrb r0, [r0, 0xA]
orrs r0, r1
movs r1, 0xA
bl __umodsi3
lsls r0, 16
lsrs r0, 17
cmp r0, 0x4
bhi _081201C0
lsls r0, 2
ldr r1, =_08120190
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_08120190:
.4byte _081201A4
.4byte _081201AA
.4byte _081201B0
.4byte _081201B6
.4byte _081201BC
_081201A4:
bl sub_81200A0
b _081201C0
_081201AA:
bl sub_81200F8
b _081201C0
_081201B0:
bl sub_8120154
b _081201C0
_081201B6:
bl sub_812011C
b _081201C0
_081201BC:
bl sub_8120128
_081201C0:
bl sub_8120B5C
pop {r0}
bx r0
thumb_func_end SetMauvilleOldMan
thumb_func_start sub_81201C8
sub_81201C8: @ 81201C8
ldr r0, =gSaveBlock1Ptr

View File

@ -4,9 +4,6 @@
.section .rodata
.align 2, 0
gUnknown_0859EFE4:: @ 859EFE4
.2byte 0x2811, 0x1029, 0x1018, 0xE0D, 0x1A1A, 0x1A1D
gUnknown_0859EFF0:: @ 859EFF0
.4byte gText_SoPretty
.4byte gText_SoDarling

View File

@ -428,28 +428,50 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
struct UnkMauvilleOldManStruct
struct MauvilleManCommon
{
u8 unk_2D94;
u8 unk_2D95;
/*0x2D96*/ u16 mauvilleOldMan_ecArray[6];
/*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6];
/*0x2DAE*/ u8 playerName[8];
/*0x2DB6*/ u8 filler_2DB6[0x3];
/*0x2DB9*/ u8 playerTrainerId[4];
u8 unk_2DBD;
u8 id;
};
struct MauvilleManBard
{
/*0x00*/ u8 id;
/*0x02*/ u16 songLyrics[6];
/*0x0E*/ u16 temporaryLyrics[6];
/*0x1A*/ u8 playerName[8];
/*0x22*/ u8 filler_2DB6[0x3];
/*0x25*/ u8 playerTrainerId[4];
/*0x29*/ bool8 hasChangedSong;
/*0x2A*/ u8 language;
}; /*size = 0x2C*/
struct UnkMauvilleOldManStruct2
struct MauvilleManStoryteller
{
u8 filler0;
u8 unk1;
u8 unk2;
u16 mauvilleOldMan_ecArray[10];
u8 mauvilleOldMan_ecArray2[12];
u8 fillerF[0x2];
u8 id;
bool8 alreadyRecorded;
u8 filler2[2];
u8 gameStatIDs[4];
u8 trainerNames[4][7];
u8 statValues[4][4];
};
struct MauvilleManGiddy
{
/*0x00*/ u8 id;
/*0x01*/ u8 taleCounter;
/*0x02*/ u8 questionNum;
/*0x04*/ u16 randomWords[10];
/*0x18*/ u8 questionList[8];
/*0x20*/ u8 language;
}; /*size = 0x2C*/
struct MauvilleManHipster
{
u8 id;
bool8 alreadySpoken;
u8 language;
};
struct MauvilleOldManTrader
{
u8 unk0;
@ -460,8 +482,10 @@ struct MauvilleOldManTrader
typedef union OldMan
{
struct UnkMauvilleOldManStruct oldMan1;
struct UnkMauvilleOldManStruct2 oldMan2;
struct MauvilleManCommon common;
struct MauvilleManBard bard;
struct MauvilleManGiddy giddy;
struct MauvilleManHipster hipster;
struct MauvilleOldManTrader trader;
u8 filler[0x40];
} OldMan;

View File

@ -2,6 +2,15 @@
#ifndef GUARD_MAUVILLE_OLD_MAN_H
#define GUARD_MAUVILLE_OLD_MAN_H
enum MauvilleOldManType
{
MAUVILLE_MAN_BARD,
MAUVILLE_MAN_HIPSTER,
MAUVILLE_MAN_TRADER,
MAUVILLE_MAN_STORYTELLER,
MAUVILLE_MAN_GIDDY
};
void SetMauvilleOldMan(void);
u8 sub_81201C8(void);

View File

@ -162,6 +162,7 @@ SECTIONS {
src/bike.o(.text);
asm/easy_chat.o(.text);
src/mon_markings.o(.text);
src/mauville_old_man.o(.text);
asm/mauville_old_man.o(.text);
src/mail.o(.text);
asm/menu_helpers.o(.text);
@ -456,6 +457,7 @@ SECTIONS {
src/bike.o(.rodata);
data/easy_chat.o(.rodata);
src/mon_markings.o(.rodata);
src/mauville_old_man.o(.rodata);
data/mauville_old_man.o(.rodata);
src/mail.o(.rodata);
data/menu_helpers.o(.rodata);

84
src/mauville_old_man.c Normal file
View File

@ -0,0 +1,84 @@
#include "global.h"
#include "main.h"
#include "constants/easy_chat.h"
#include "mauville_old_man.h"
void sub_8120E08(void); // StorytellerSetup
void sub_81339F8(void); // TraderSetup
void sub_8120B5C(void);
static const u16 sDefaultBardSongLyrics[6] = {
EC_WORD_SHAKE,
EC_WORD_IT,
EC_WORD_DO,
EC_WORD_THE,
EC_WORD_DIET,
EC_WORD_DANCE
};
static void SetupBard(void)
{
u16 i;
struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
bard->id = MAUVILLE_MAN_BARD;
bard->hasChangedSong = FALSE;
bard->language = gGameLanguage;
for (i = 0; i < 6; i++)
bard->songLyrics[i] = sDefaultBardSongLyrics[i];
}
static void SetupHipster(void)
{
struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster;
hipster->id = MAUVILLE_MAN_HIPSTER;
hipster->alreadySpoken = FALSE;
hipster->language = gGameLanguage;
}
static void SetupStoryteller(void)
{
sub_8120E08();
}
static void SetupGiddy(void)
{
struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy;
giddy->id = MAUVILLE_MAN_GIDDY;
giddy->taleCounter = 0;
giddy->language = gGameLanguage;
}
static void SetupTrader(void)
{
sub_81339F8();
}
void SetMauvilleOldMan(void)
{
u16 trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
// Determine man based on the last digit of the player's trainer ID.
switch ((trainerId % 10) / 2)
{
case MAUVILLE_MAN_BARD:
SetupBard();
break;
case MAUVILLE_MAN_HIPSTER:
SetupHipster();
break;
case MAUVILLE_MAN_TRADER:
SetupTrader();
break;
case MAUVILLE_MAN_STORYTELLER:
SetupStoryteller();
break;
case MAUVILLE_MAN_GIDDY:
SetupGiddy();
break;
}
sub_8120B5C();
}