Skip to content

Commit

Permalink
Merge pull request #140 from red031000/master
Browse files Browse the repository at this point in the history
SCRIPTENV_ENGAGED_TRAINER
  • Loading branch information
red031000 committed May 27, 2023
2 parents 334d539 + f48702d commit a5f4f64
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 95 deletions.
2 changes: 1 addition & 1 deletion include/fieldmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ typedef struct HiddenItemResponse {
} HiddenItemResponse;

void StartMapSceneScript(FieldSystem *fsys, u16 script, LocalMapObject *lastTalked);
void FieldSys_SetEngagedTrainer(FieldSystem *fsys, LocalMapObject *obj, int a2, int a3, int a4, int trainerNum, int encounterType, int idx);
void FieldSys_SetEngagedTrainer(FieldSystem *fsys, LocalMapObject *obj, int a2, int a3, int a4, int trainerId, int encounterType, int idx);
void QueueScript(TaskManager *taskman, u16 script, LocalMapObject *lastTalked, void *a3);
void StartScriptFromMenu(TaskManager *taskman, u16 script, LocalMapObject *lastTalked);
BOOL Task_RunScripts(TaskManager *taskman);
Expand Down
74 changes: 38 additions & 36 deletions include/script.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ typedef struct EngagedTrainer {
int unk0;
int unk4;
int unk8;
int trainerNum;
int trainerId;
int encounterType; // 0: single trainer; 1: double-battle trainer; 2: two trainers
LocalMapObject *objectEvent;
LocalMapObject *overworldEvent;
int unk18;
} EngagedTrainer;

Expand Down Expand Up @@ -72,9 +72,11 @@ typedef struct ScriptEnvironment {
void *miscDataPtr;
void *unk_B4;
void *unk_B8; //PlayerMovementState
WINDOW unk_BC;
WINDOW moneyBox;
struct SaveStatsPrinter *unk_DC;
WINDOW *pointsBox;
u8 padding[0xC]; //FIXME: ugly hack
WINDOW *moneyBox;
u8 padding2[0xC]; //FIXME: ugly hack 2
struct SaveStatsPrinter *saveStatsPrinter;
} ScriptEnvironment;

typedef enum ScriptEnvField {
Expand Down Expand Up @@ -103,37 +105,37 @@ typedef enum ScriptEnvField {
SCRIPTENV_FIELD_B4,
SCRIPTENV_FIELD_B8,
SCRIPTENV_BATTLE_WIN_FLAG,
SCRIPTENV_54_0_00 = 25,
SCRIPTENV_54_0_04 = 26,
SCRIPTENV_54_0_08 = 27,
SCRIPTENV_EYE_TRAINER_1_NUM = 28,
SCRIPTENV_EYE_TRAINER_1_ENCTYPE = 29,
SCRIPTENV_EYE_TRAINER_1_OBJPTR = 30,
SCRIPTENV_54_0_18 = 31,
SCRIPTENV_54_1_00 = 32,
SCRIPTENV_54_1_04 = 33,
SCRIPTENV_54_1_08 = 34,
SCRIPTENV_EYE_TRAINER_2_NUM = 35,
SCRIPTENV_EYE_TRAINER_2_ENCTYPE = 36,
SCRIPTENV_EYE_TRAINER_2_OBJPTR = 37,
SCRIPTENV_54_1_18 = 38,
SCRIPTENV_BC = 39,
SCRIPTENV_MONEY_BOX = 40,
SCRIPTENV_DC = 41,
SCRIPTENV_SPECIAL_VAR_8000 = 42,
SCRIPTENV_SPECIAL_VAR_8001 = 43,
SCRIPTENV_SPECIAL_VAR_8002 = 44,
SCRIPTENV_SPECIAL_VAR_8003 = 45,
SCRIPTENV_SPECIAL_VAR_8004 = 46,
SCRIPTENV_SPECIAL_VAR_8005 = 47,
SCRIPTENV_SPECIAL_VAR_8006 = 48,
SCRIPTENV_SPECIAL_VAR_8007 = 49,
SCRIPTENV_SPECIAL_VAR_8008 = 50,
SCRIPTENV_SPECIAL_VAR_8009 = 51,
SCRIPTENV_SPECIAL_VAR_800A = 52,
SCRIPTENV_SPECIAL_VAR_800B = 53,
SCRIPTENV_SPECIAL_VAR_RESULT = 54,
SCRIPTENV_SPECIAL_VAR_LAST_TALKED = 55,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_00,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_04,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_08,
SCRIPTENV_ENGAGED_TRAINER_0_ID,
SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE,
SCRIPTENV_ENGAGED_TRAINER_0_EVENT,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_00,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_04,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_08,
SCRIPTENV_ENGAGED_TRAINER_1_ID,
SCRIPTENV_ENGAGED_TRAINER_1_ENCOUNTER_TYPE,
SCRIPTENV_ENGAGED_TRAINER_1_EVENT,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18,
SCRIPTENV_POINTS_BOX, //differs from diamond due to athlete points
SCRIPTENV_MONEY_BOX,
SCRIPTENV_SAVE_STATS_PRINTER,
SCRIPTENV_SPECIAL_VAR_8000,
SCRIPTENV_SPECIAL_VAR_8001,
SCRIPTENV_SPECIAL_VAR_8002,
SCRIPTENV_SPECIAL_VAR_8003,
SCRIPTENV_SPECIAL_VAR_8004,
SCRIPTENV_SPECIAL_VAR_8005,
SCRIPTENV_SPECIAL_VAR_8006,
SCRIPTENV_SPECIAL_VAR_8007,
SCRIPTENV_SPECIAL_VAR_8008,
SCRIPTENV_SPECIAL_VAR_8009,
SCRIPTENV_SPECIAL_VAR_800A,
SCRIPTENV_SPECIAL_VAR_800B,
SCRIPTENV_SPECIAL_VAR_RESULT,
SCRIPTENV_SPECIAL_VAR_LAST_INTERACTED
} ScriptEnvField;

struct UnkStruct_020FC5CC {
Expand Down
1 change: 1 addition & 0 deletions include/trainer_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "pm_string.h"
#include "mail_message.h"
#include "pokemon_types_def.h"
#include "global.h"

typedef enum TrainerAttr {
TRATTR_TYPE,
Expand Down
1 change: 1 addition & 0 deletions src/field_use_item.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "fielddata/script/scr_seq/event_D24R0202.h"
#include "fielddata/script/scr_seq/event_D24R0206.h"
#include "msgdata/msg/msg_0010.h"
#include "script.h"

struct ItemUseFuncDat {
ItemMenuUseFunc menu;
Expand Down
54 changes: 27 additions & 27 deletions src/fieldmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ void StartMapSceneScript(FieldSystem *fsys, u16 script, LocalMapObject *lastInte
FieldSys_CreateTask(fsys, Task_RunScripts, r4);
}

void FieldSys_SetEngagedTrainer(FieldSystem *fsys, LocalMapObject *obj, int a2, int a3, int a4, int trainerNum, int encounterType, int idx) {
void FieldSys_SetEngagedTrainer(FieldSystem *fsys, LocalMapObject *obj, int a2, int a3, int a4, int trainerId, int encounterType, int idx) {
ScriptEnvironment *env = TaskManager_GetEnv(fsys->taskman);
EngagedTrainer *r0 = &env->engagedTrainers[idx];
r0->unk0 = a2;
r0->unk4 = a3;
r0->unk8 = a4;
r0->trainerNum = trainerNum;
r0->trainerId = trainerId;
r0->encounterType = encounterType;
r0->objectEvent = obj;
r0->overworldEvent = obj;
}

void QueueScript(TaskManager *taskman, u16 script, LocalMapObject *lastInteracted, void *a3) {
Expand Down Expand Up @@ -155,7 +155,7 @@ void DestroyScriptContext(SCRIPTCONTEXT *ctx) {
}

void SetupScriptEngine(FieldSystem *fsys, ScriptEnvironment *env, u16 script, LocalMapObject *lastInteracted, void* a4) {
u16 *varLastInteracted = FieldSysGetAttrAddrInternal(env, SCRIPTENV_SPECIAL_VAR_LAST_TALKED);
u16 *varLastInteracted = FieldSysGetAttrAddrInternal(env, SCRIPTENV_SPECIAL_VAR_LAST_INTERACTED);
env->facingDirection = PlayerAvatar_GetFacingDirection(fsys->playerAvatar);
env->lastInteracted = lastInteracted;
env->activeScriptNumber = script;
Expand Down Expand Up @@ -265,40 +265,40 @@ void *FieldSysGetAttrAddrInternal(ScriptEnvironment *environment, enum ScriptEnv
return &environment->unk_B8;
case SCRIPTENV_BATTLE_WIN_FLAG:
return &environment->battleWinFlag;
case SCRIPTENV_54_0_00:
case SCRIPTENV_ENGAGED_TRAINER_0_FIELD_00:
return &environment->engagedTrainers[0].unk0;
case SCRIPTENV_54_0_04:
case SCRIPTENV_ENGAGED_TRAINER_0_FIELD_04:
return &environment->engagedTrainers[0].unk4;
case SCRIPTENV_54_0_08:
case SCRIPTENV_ENGAGED_TRAINER_0_FIELD_08:
return &environment->engagedTrainers[0].unk8;
case SCRIPTENV_EYE_TRAINER_1_NUM:
return &environment->engagedTrainers[0].trainerNum;
case SCRIPTENV_EYE_TRAINER_1_ENCTYPE:
case SCRIPTENV_ENGAGED_TRAINER_0_ID:
return &environment->engagedTrainers[0].trainerId;
case SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE:
return &environment->engagedTrainers[0].encounterType;
case SCRIPTENV_EYE_TRAINER_1_OBJPTR:
return &environment->engagedTrainers[0].objectEvent;
case SCRIPTENV_54_0_18:
case SCRIPTENV_ENGAGED_TRAINER_0_EVENT:
return &environment->engagedTrainers[0].overworldEvent;
case SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18:
return &environment->engagedTrainers[0].unk18;
case SCRIPTENV_54_1_00:
case SCRIPTENV_ENGAGED_TRAINER_1_FIELD_00:
return &environment->engagedTrainers[1].unk0;
case SCRIPTENV_54_1_04:
case SCRIPTENV_ENGAGED_TRAINER_1_FIELD_04:
return &environment->engagedTrainers[1].unk4;
case SCRIPTENV_54_1_08:
case SCRIPTENV_ENGAGED_TRAINER_1_FIELD_08:
return &environment->engagedTrainers[1].unk8;
case SCRIPTENV_EYE_TRAINER_2_NUM:
return &environment->engagedTrainers[1].trainerNum;
case SCRIPTENV_EYE_TRAINER_2_ENCTYPE:
case SCRIPTENV_ENGAGED_TRAINER_1_ID:
return &environment->engagedTrainers[1].trainerId;
case SCRIPTENV_ENGAGED_TRAINER_1_ENCOUNTER_TYPE:
return &environment->engagedTrainers[1].encounterType;
case SCRIPTENV_EYE_TRAINER_2_OBJPTR:
return &environment->engagedTrainers[1].objectEvent;
case SCRIPTENV_54_1_18:
case SCRIPTENV_ENGAGED_TRAINER_1_EVENT:
return &environment->engagedTrainers[1].overworldEvent;
case SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18:
return &environment->engagedTrainers[1].unk18;
case SCRIPTENV_BC:
return &environment->unk_BC;
case SCRIPTENV_POINTS_BOX:
return &environment->pointsBox;
case SCRIPTENV_MONEY_BOX:
return &environment->moneyBox;
case SCRIPTENV_DC:
return &environment->unk_DC;
case SCRIPTENV_SAVE_STATS_PRINTER:
return &environment->saveStatsPrinter;
case SCRIPTENV_SPECIAL_VAR_8000:
case SCRIPTENV_SPECIAL_VAR_8001:
case SCRIPTENV_SPECIAL_VAR_8002:
Expand All @@ -312,7 +312,7 @@ void *FieldSysGetAttrAddrInternal(ScriptEnvironment *environment, enum ScriptEnv
case SCRIPTENV_SPECIAL_VAR_800A:
case SCRIPTENV_SPECIAL_VAR_800B:
case SCRIPTENV_SPECIAL_VAR_RESULT:
case SCRIPTENV_SPECIAL_VAR_LAST_TALKED:
case SCRIPTENV_SPECIAL_VAR_LAST_INTERACTED:
return &environment->specialVars[field - SCRIPTENV_SPECIAL_VAR_8000];
default:
GF_ASSERT(FALSE);
Expand Down
6 changes: 3 additions & 3 deletions src/overlay_22.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ BOOL ScrCmd_116(SCRIPTCONTEXT *ctx) {
u8 type = ScriptReadByte(ctx);
u16 x = ScriptGetVar(ctx);
u16 y = ScriptGetVar(ctx);
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_BC);
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_POINTS_BOX);
*window = ov01_021EEC00(ctx->fsys, type, x, y);
return FALSE;
}

BOOL ScrCmd_117(SCRIPTCONTEXT *ctx) {
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_BC);
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_POINTS_BOX);
ov01_021EEC68(*window);
return FALSE;
}

BOOL ScrCmd_118(SCRIPTCONTEXT *ctx) {
u8 type = ScriptReadByte(ctx);
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_BC);
WINDOW **window = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_POINTS_BOX);
ov01_021EEC7C(ctx->fsys, *window, type);
return FALSE;
}
Expand Down
44 changes: 22 additions & 22 deletions src/scrcmd_battle.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,21 @@ BOOL ScrCmd_GetTrainerPathToPlayer(SCRIPTCONTEXT *ctx) {

u16 trainerNum = ScriptGetVar(ctx);
if (trainerNum == 0) {
sp18 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_0_00);
sp10 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_0_04);
FieldSysGetAttrAddr(fsys, SCRIPTENV_54_0_08);
FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_1_NUM);
encounterType = FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_1_ENCTYPE);
localMapObject = FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_1_OBJPTR);
r7 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_0_18);
sp18 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_00);
sp10 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_04);
FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_08);
FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_ID);
encounterType = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE);
localMapObject = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_EVENT);
r7 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18);
} else {
sp18 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_1_00);
sp10 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_1_04);
FieldSysGetAttrAddr(fsys, SCRIPTENV_54_1_08);
FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_2_NUM);
encounterType = FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_2_ENCTYPE);
localMapObject = FieldSysGetAttrAddr(fsys, SCRIPTENV_EYE_TRAINER_2_OBJPTR);
r7 = FieldSysGetAttrAddr(fsys, SCRIPTENV_54_1_18);
sp18 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_00);
sp10 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_04);
FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_08);
FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_ID);
encounterType = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_ENCOUNTER_TYPE);
localMapObject = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_EVENT);
r7 = FieldSysGetAttrAddr(fsys, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18);
}

*r7 = sub_0206457C(fsys, *localMapObject, fsys->playerAvatar, *sp10, *sp18, 0, *encounterType, trainerNum);
Expand All @@ -47,9 +47,9 @@ BOOL ScrCmd_TrainerStepTowardsPlayer(SCRIPTCONTEXT *ctx) {

*var1 = 0;
if (trainerNum == 0) {
r5 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_54_0_18);
r5 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18);
} else {
r5 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_54_1_18);
r5 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18);
}

if (*r5 == 0) {
Expand All @@ -67,22 +67,22 @@ BOOL ScrCmd_TrainerStepTowardsPlayer(SCRIPTCONTEXT *ctx) {
}

BOOL ScrCmd_GetTrainerEyeType(SCRIPTCONTEXT *ctx) {
u16 *encounterType = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_EYE_TRAINER_1_ENCTYPE);
u16 *encounterType = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE);
u16 *retEncounterType = ScriptGetVarPointer(ctx);
*retEncounterType = *encounterType;
return FALSE;
}

BOOL ScrCmd_GetEyeTrainerNum(SCRIPTCONTEXT *ctx) {
u16 *trainerNum1 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_EYE_TRAINER_1_NUM);
u16 *trainerNum2 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_EYE_TRAINER_2_NUM);
u16 *trainerId0 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_ENGAGED_TRAINER_0_ID);
u16 *trainerId1 = FieldSysGetAttrAddr(ctx->fsys, SCRIPTENV_ENGAGED_TRAINER_1_ID);
u16 trainerNum = ScriptGetVar(ctx);
u16 *retTrainerNum = ScriptGetVarPointer(ctx);
u16 *retTrainerId = ScriptGetVarPointer(ctx);

if (trainerNum == 0) {
*retTrainerNum = *trainerNum1;
*retTrainerId = *trainerId0;
} else {
*retTrainerNum = *trainerNum2;
*retTrainerId = *trainerId1;
}

return FALSE;
Expand Down
12 changes: 6 additions & 6 deletions src/scrcmd_c.c
Original file line number Diff line number Diff line change
Expand Up @@ -4113,20 +4113,20 @@ BOOL ScrCmd_GetTrcardStars(SCRIPTCONTEXT *ctx) {

BOOL ScrCmd_ShowSaveStats(SCRIPTCONTEXT *ctx) {
FieldSystem *fsys = ctx->fsys;
struct SaveStatsPrinter **p_work = FieldSysGetAttrAddr(fsys, SCRIPTENV_DC);
struct SaveStatsPrinter **saveStatsPrinter = FieldSysGetAttrAddr(fsys, SCRIPTENV_SAVE_STATS_PRINTER);
if (!Save_FileDoesNotBelongToPlayer(fsys->savedata)) {
*p_work = Field_CreateSaveStatsPrinter(fsys, 4, 3);
SaveStatsPrinter_Print(*p_work);
*saveStatsPrinter = Field_CreateSaveStatsPrinter(fsys, 4, 3);
SaveStatsPrinter_Print(*saveStatsPrinter);
}
return FALSE;
}

BOOL ScrCmd_HideSaveStats(SCRIPTCONTEXT *ctx) {
FieldSystem *fsys = ctx->fsys;
struct SaveStatsPrinter **p_work = FieldSysGetAttrAddr(fsys, SCRIPTENV_DC);
struct SaveStatsPrinter **saveStatsPrinter = FieldSysGetAttrAddr(fsys, SCRIPTENV_SAVE_STATS_PRINTER);
if (!Save_FileDoesNotBelongToPlayer(fsys->savedata)) {
SaveStatsPrinter_RemoveFromScreen(*p_work);
SaveStatsPrinter_Delete(*p_work);
SaveStatsPrinter_RemoveFromScreen(*saveStatsPrinter);
SaveStatsPrinter_Delete(*saveStatsPrinter);
}
return FALSE;
}
Expand Down

0 comments on commit a5f4f64

Please sign in to comment.