Document npc_trade.c

This commit is contained in:
cbt6 2025-02-13 12:16:23 +08:00
parent b4fc5c1a79
commit f60f44f3cf
19 changed files with 275 additions and 297 deletions

View File

@ -6,6 +6,7 @@
#include "generated/journal_online_events.h"
#include "generated/map_headers.h"
#include "generated/moves.h"
#include "generated/npc_trades.h"
#include "generated/poketch_apps.h"
#include "generated/save_types.h"
#include "generated/sdat.h"
@ -2967,19 +2968,19 @@
.short \arg0
.endm
.macro ScrCmd_226 arg0
.macro StartNpcTrade npcTradeID
.short 550
.byte \arg0
.byte \npcTradeID
.endm
.macro ScrCmd_227 arg0
.macro GetNpcTradeSpecies destVar
.short 551
.short \arg0
.short \destVar
.endm
.macro ScrCmd_228 arg0
.macro GetNpcTradeRequestedSpecies destVar
.short 552
.short \arg0
.short \destVar
.endm
.macro ScrCmd_229 arg0
@ -2987,7 +2988,7 @@
.short \arg0
.endm
.macro ScrCmd_22A
.macro FinishNpcTrade
.short 554
.endm

View File

@ -57,6 +57,7 @@ metang_generators = {
'move_ranges': { 'type': 'mask', 'tag': 'MoveRange', 'extra': ['--no-auto'] },
'movement_actions': { 'type': 'enum', 'tag': 'MovementAction' },
'moves': { 'type': 'enum', 'tag': 'Move' },
'npc_trades': { 'type': 'enum', 'tag': 'NpcTradeID' },
'pal_park_land_area': { 'type': 'enum', 'tag': 'PalParkLandArea' },
'pal_park_water_area': { 'type': 'enum', 'tag': 'PalParkWaterArea' },
'pokemon_body_shapes': { 'type': 'enum', 'tag': 'PokemonBodyShape' },

5
generated/npc_trades.txt Normal file
View File

@ -0,0 +1,5 @@
NPC_TRADE_KAZZA_ABRA
NPC_TRADE_CHARAP_CHATOT
NPC_TRADE_GASPAR_HAUNTER
NPC_TRADE_FOOPA_MAGIKARP
MAX_NPC_TRADES

View File

@ -368,7 +368,7 @@ TEXT_BANK_JOURNAL_ENTRIES
TEXT_BANK_UNK_0367
TEXT_BANK_BATTLE_STRINGS
TEXT_BANK_UNK_0369
TEXT_BANK_UNK_0370
TEXT_BANK_NPC_TRADE_NAMES
TEXT_BANK_FURNITURE_NAMES
TEXT_BANK_UNK_0372
TEXT_BANK_UNK_0373

View File

@ -0,0 +1,47 @@
#ifndef POKEPLATINUM_NPC_TRADE_H
#define POKEPLATINUM_NPC_TRADE_H
#include "field/field_system_decl.h"
#include "overlay006/struct_ov6_02246254.h"
#include "pokemon.h"
typedef struct NpcTradeMon {
u32 species;
u32 hpIV;
u32 atkIV;
u32 defIV;
u32 speedIV;
u32 spAtkIV;
u32 spDefIV;
u32 unused1;
u32 otID;
u32 cool;
u32 beauty;
u32 cute;
u32 smart;
u32 tough;
u32 personality;
u32 heldItem;
u32 otGender;
u32 unused2;
u32 language;
u32 requestedSpecies;
} NpcTradeMon;
typedef struct NpcTradeData {
NpcTradeMon *npcTradeMon;
Pokemon *mon;
TrainerInfo *trainerInfo;
u32 npcTradeID;
u32 heapID;
} NpcTradeData;
NpcTradeData *NpcTrade_Init(u32 heapID, u32 entryID);
void NpcTrade_Free(NpcTradeData *data);
u32 NpcTrade_GetSpecies(const NpcTradeData *data);
u32 NpcTrade_GetRequestedSpecies(const NpcTradeData *data);
void ov6_02246234(FieldSystem *fieldSystem, NpcTradeData *data, int slot);
void ov6_02246254(FieldSystem *fieldSystem, NpcTradeData *data, int slot, UnkStruct_ov6_02246254 *param3, Pokemon *givingMon, Pokemon *receivingMon);
#endif // POKEPLATINUM_NPC_TRADE_H

View File

@ -1,17 +0,0 @@
#ifndef POKEPLATINUM_OV6_02246184_H
#define POKEPLATINUM_OV6_02246184_H
#include "field/field_system_decl.h"
#include "overlay006/struct_ov6_02246204_decl.h"
#include "overlay006/struct_ov6_02246254.h"
#include "pokemon.h"
UnkStruct_ov6_02246204 *ov6_02246184(u32 param0, u32 param1);
void ov6_02246204(UnkStruct_ov6_02246204 *param0);
u32 ov6_02246224(const UnkStruct_ov6_02246204 *param0);
u32 ov6_0224622C(const UnkStruct_ov6_02246204 *param0);
void ov6_02246234(FieldSystem *fieldSystem, UnkStruct_ov6_02246204 *param1, int param2);
void ov6_02246254(FieldSystem *fieldSystem, UnkStruct_ov6_02246204 *param1, int param2, UnkStruct_ov6_02246254 *param3, Pokemon *param4, Pokemon *param5);
#endif // POKEPLATINUM_OV6_02246184_H

View File

@ -1,6 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_OV6_02246204_DECL_H
#define POKEPLATINUM_STRUCT_OV6_02246204_DECL_H
typedef struct UnkStruct_ov6_02246204_t UnkStruct_ov6_02246204;
#endif // POKEPLATINUM_STRUCT_OV6_02246204_DECL_H

View File

@ -1,10 +1,10 @@
#ifndef POKEPLATINUM_UNK_0206C660_H
#define POKEPLATINUM_UNK_0206C660_H
#include "overlay006/struct_ov6_02246204_decl.h"
#include "overlay006/npc_trade.h"
#include "field_task.h"
void sub_0206C740(FieldTask *param0, UnkStruct_ov6_02246204 *param1, int param2, u32 param3);
void sub_0206C740(FieldTask *param0, NpcTradeData *data, int param2, u32 param3);
#endif // POKEPLATINUM_UNK_0206C660_H

View File

@ -574,7 +574,7 @@ Overlay overlay6
Object main.nef.p/src_overlay006_swarm.c.o
Object main.nef.p/src_overlay006_ov6_02243258.c.o
Object main.nef.p/src_overlay006_roamer_after_battle.c.o
Object main.nef.p/src_overlay006_ov6_02246184.c.o
Object main.nef.p/src_overlay006_npc_trade.c.o
Object main.nef.p/src_overlay006_ov6_02246444.c.o
Object main.nef.p/src_overlay006_ov6_022465FC.c.o
Object main.nef.p/src_overlay006_ov6_02246A30.c.o

View File

@ -113,13 +113,13 @@ _0168:
FadeScreen 6, 1, 1, 0
WaitFadeScreen
GoToIfEq 0x800C, 0xFF, _01D9
ScrCmd_226 1
StartNpcTrade NPC_TRADE_CHARAP_CHATOT
SetVar 0x8004, 0x800C
ScrCmd_198 0x8004, 0x8005
ScrCmd_228 0x800C
GetNpcTradeRequestedSpecies 0x800C
GoToIfNe 0x8005, 0x800C, _01CC
ScrCmd_229 0x8004
ScrCmd_22A
FinishNpcTrade
SetFlag 134
Message 10
WaitABXPadPress
@ -128,7 +128,7 @@ _0168:
End
_01CC:
ScrCmd_22A
FinishNpcTrade
Message 11
WaitABXPadPress
CloseMessage

View File

@ -28,13 +28,13 @@ _003B:
FadeScreen 6, 1, 1, 0
WaitFadeScreen
GoToIfEq 0x800C, 0xFF, _00AC
ScrCmd_226 0
StartNpcTrade NPC_TRADE_KAZZA_ABRA
SetVar 0x8004, 0x800C
ScrCmd_198 0x8004, 0x8005
ScrCmd_228 0x800C
GetNpcTradeRequestedSpecies 0x800C
GoToIfNe 0x8005, 0x800C, _009F
ScrCmd_229 0x8004
ScrCmd_22A
FinishNpcTrade
SetFlag 133
Message 1
WaitABXPadPress
@ -43,7 +43,7 @@ _003B:
End
_009F:
ScrCmd_22A
FinishNpcTrade
Message 2
WaitABXPadPress
CloseMessage

View File

@ -43,13 +43,13 @@ _0060:
FadeScreen 6, 1, 1, 0
WaitFadeScreen
GoToIfEq 0x800C, 0xFF, _00D1
ScrCmd_226 3
StartNpcTrade NPC_TRADE_FOOPA_MAGIKARP
SetVar 0x8004, 0x800C
ScrCmd_198 0x8004, 0x8005
ScrCmd_228 0x800C
GetNpcTradeRequestedSpecies 0x800C
GoToIfNe 0x8005, 0x800C, _00C4
ScrCmd_229 0x8004
ScrCmd_22A
FinishNpcTrade
SetFlag 245
Message 3
WaitABXPadPress
@ -58,7 +58,7 @@ _0060:
End
_00C4:
ScrCmd_22A
FinishNpcTrade
Message 4
WaitABXPadPress
CloseMessage

View File

@ -45,13 +45,13 @@ _0060:
FadeScreen 6, 1, 1, 0
WaitFadeScreen
GoToIfEq 0x800C, 0xFF, _00D1
ScrCmd_226 2
StartNpcTrade NPC_TRADE_GASPAR_HAUNTER
SetVar 0x8004, 0x800C
ScrCmd_198 0x8004, 0x8005
ScrCmd_228 0x800C
GetNpcTradeRequestedSpecies 0x800C
GoToIfNe 0x8005, 0x800C, _00C4
ScrCmd_229 0x8004
ScrCmd_22A
FinishNpcTrade
SetFlag 244
Message 3
WaitABXPadPress
@ -60,7 +60,7 @@ _0060:
End
_00C4:
ScrCmd_22A
FinishNpcTrade
Message 4
WaitABXPadPress
CloseMessage

View File

@ -1,35 +1,35 @@
<?xml version="1.0"?>
<body language="English">
<key value="4839" />
<row id="pl_msg_00000370_00000" index="0">
<row id="npc_trades_names_kazza" index="0">
<attribute name="window_context_name">used</attribute>
<language name="English">Kazza</language>
</row>
<row id="pl_msg_00000370_00001" index="1">
<row id="npc_trades_names_charap" index="1">
<attribute name="window_context_name">used</attribute>
<language name="English">Charap</language>
</row>
<row id="pl_msg_00000370_00002" index="2">
<row id="npc_trades_names_gaspar" index="2">
<attribute name="window_context_name">used</attribute>
<language name="English">Gaspar</language>
</row>
<row id="pl_msg_00000370_00003" index="3">
<row id="npc_trades_names_foppa" index="3">
<attribute name="window_context_name">used</attribute>
<language name="English">Foppa</language>
</row>
<row id="pl_msg_00000370_00004" index="4">
<row id="npc_trades_names_hilary" index="4">
<attribute name="window_context_name">used</attribute>
<language name="English">Hilary</language>
</row>
<row id="pl_msg_00000370_00005" index="5">
<row id="npc_trades_names_norton" index="5">
<attribute name="window_context_name">used</attribute>
<language name="English">Norton</language>
</row>
<row id="pl_msg_00000370_00006" index="6">
<row id="npc_trades_names_mindy" index="6">
<attribute name="window_context_name">used</attribute>
<language name="English">Mindy</language>
</row>
<row id="pl_msg_00000370_00007" index="7">
<row id="npc_trades_names_meister" index="7">
<attribute name="window_context_name">used</attribute>
<language name="English">Meister</language>
</row>

View File

@ -463,7 +463,7 @@ pokeplatinum_c = files(
'overlay006/swarm.c',
'overlay006/ov6_02243258.c',
'overlay006/roamer_after_battle.c',
'overlay006/ov6_02246184.c',
'overlay006/npc_trade.c',
'overlay006/ov6_02246444.c',
'overlay006/ov6_022465FC.c',
'overlay006/ov6_02246A30.c',

152
src/overlay006/npc_trade.c Normal file
View File

@ -0,0 +1,152 @@
#include "overlay006/npc_trade.h"
#include <nitro.h>
#include <string.h>
#include "generated/npc_trades.h"
#include "generated/text_banks.h"
#include "field/field_system.h"
#include "overlay006/struct_ov6_02246254.h"
#include "graphics.h"
#include "heap.h"
#include "map_header.h"
#include "message.h"
#include "party.h"
#include "pokemon.h"
#include "save_player.h"
#include "strbuf.h"
#include "trainer_info.h"
#include "unk_0202F180.h"
#include "unk_020559DC.h"
#include "unk_02092494.h"
static inline Strbuf *NpcTrade_GetOtName(u32 heapID, u32 npcTradeID);
static Strbuf *NpcTrade_GetNickname(u32 heapID, u32 npcTradeID);
static void NpcTrade_CreateMon(Pokemon *mon, NpcTradeMon *npcTrade, u32 level, u32 npcTradeID, u32 heapID, u32 mapID);
NpcTradeData *NpcTrade_Init(u32 heapID, u32 npcTradeID)
{
GF_ASSERT(npcTradeID < MAX_NPC_TRADES);
NpcTradeData *data = Heap_AllocFromHeap(heapID, sizeof(NpcTradeData));
memset(data, 0, sizeof(NpcTradeData));
data->npcTradeMon = LoadMemberFromNARC(NARC_INDEX_FIELDDATA__POKEMON_TRADE__FLD_TRADE, npcTradeID, FALSE, heapID, FALSE);
data->heapID = heapID;
data->npcTradeID = npcTradeID;
data->mon = Pokemon_New(heapID);
data->trainerInfo = TrainerInfo_New(heapID);
TrainerInfo_Init(data->trainerInfo);
Strbuf *strbuf = NpcTrade_GetOtName(heapID, npcTradeID);
u16 otName[128];
Strbuf_ToChars(strbuf, otName, NELEMS(otName));
Strbuf_Free(strbuf);
TrainerInfo_SetName(data->trainerInfo, otName);
TrainerInfo_SetGender(data->trainerInfo, data->npcTradeMon->otGender);
return data;
}
void NpcTrade_Free(NpcTradeData *data)
{
Heap_FreeToHeap(data->npcTradeMon);
Heap_FreeToHeap(data->mon);
Heap_FreeToHeap(data->trainerInfo);
Heap_FreeToHeap(data);
}
u32 NpcTrade_GetSpecies(const NpcTradeData *data)
{
return data->npcTradeMon->species;
}
u32 NpcTrade_GetRequestedSpecies(const NpcTradeData *data)
{
return data->npcTradeMon->requestedSpecies;
}
void ov6_02246234(FieldSystem *fieldSystem, NpcTradeData *data, int slot)
{
sub_0207A128(Party_GetFromSavedata(fieldSystem->saveData), slot, data->mon);
sub_0202F180(fieldSystem->saveData, data->mon);
}
void ov6_02246254(FieldSystem *fieldSystem, NpcTradeData *data, int slot, UnkStruct_ov6_02246254 *param3, Pokemon *givingMon, Pokemon *receivingMon)
{
Party *party = Party_GetFromSavedata(fieldSystem->saveData);
Pokemon *partyMon = Party_GetPokemonBySlotIndex(party, slot);
u32 level = Pokemon_GetValue(partyMon, MON_DATA_LEVEL, NULL);
NpcTrade_CreateMon(data->mon, data->npcTradeMon, level, data->npcTradeID, data->heapID, fieldSystem->location->mapId);
Pokemon_Copy(partyMon, givingMon);
Pokemon_Copy(data->mon, receivingMon);
param3->unk_00 = Pokemon_GetBoxPokemon(givingMon);
param3->unk_04 = Pokemon_GetBoxPokemon(receivingMon);
param3->unk_08 = data->trainerInfo;
param3->unk_10 = 1;
param3->unk_14 = SaveData_Options(fieldSystem->saveData);
int timeOfDay = FieldSystem_GetTimeOfDay(fieldSystem);
if (timeOfDay == TIMEOFDAY_MORNING || timeOfDay == TIMEOFDAY_DAY) {
param3->unk_0C = 0;
} else if (timeOfDay == TIMEOFDAY_TWILIGHT) {
param3->unk_0C = 1;
} else {
param3->unk_0C = 2;
}
}
static inline Strbuf *NpcTrade_GetOtName(u32 heapID, u32 npcTradeID)
{
return NpcTrade_GetNickname(heapID, MAX_NPC_TRADES + npcTradeID);
}
static Strbuf *NpcTrade_GetNickname(u32 heapID, u32 npcTradeID)
{
MessageLoader *loader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_NPC_TRADE_NAMES, heapID);
Strbuf *strbuf = MessageLoader_GetNewStrbuf(loader, npcTradeID);
MessageLoader_Free(loader);
return strbuf;
}
static void NpcTrade_CreateMon(Pokemon *mon, NpcTradeMon *npcTradeMon, u32 level, u32 npcTradeID, u32 heapID, u32 mapID)
{
Pokemon_InitWith(mon, npcTradeMon->species, level, INIT_IVS_RANDOM, TRUE, npcTradeMon->personality, OTID_SET, npcTradeMon->otID);
Strbuf *strbuf = NpcTrade_GetNickname(heapID, npcTradeID);
Pokemon_SetValue(mon, MON_DATA_NICKNAME_STRBUF, strbuf);
Strbuf_Free(strbuf);
u8 hasNickname = TRUE;
Pokemon_SetValue(mon, MON_DATA_HAS_NICKNAME, &hasNickname);
Pokemon_SetValue(mon, MON_DATA_HP_IV, &npcTradeMon->hpIV);
Pokemon_SetValue(mon, MON_DATA_ATK_IV, &npcTradeMon->atkIV);
Pokemon_SetValue(mon, MON_DATA_DEF_IV, &npcTradeMon->defIV);
Pokemon_SetValue(mon, MON_DATA_SPEED_IV, &npcTradeMon->speedIV);
Pokemon_SetValue(mon, MON_DATA_SPATK_IV, &npcTradeMon->spAtkIV);
Pokemon_SetValue(mon, MON_DATA_SPDEF_IV, &npcTradeMon->spDefIV);
Pokemon_SetValue(mon, MON_DATA_COOL, &npcTradeMon->cool);
Pokemon_SetValue(mon, MON_DATA_BEAUTY, &npcTradeMon->beauty);
Pokemon_SetValue(mon, MON_DATA_CUTE, &npcTradeMon->cute);
Pokemon_SetValue(mon, MON_DATA_SMART, &npcTradeMon->smart);
Pokemon_SetValue(mon, MON_DATA_TOUGH, &npcTradeMon->tough);
Pokemon_SetValue(mon, MON_DATA_HELD_ITEM, &npcTradeMon->heldItem);
strbuf = NpcTrade_GetOtName(heapID, npcTradeID);
Pokemon_SetValue(mon, MON_DATA_OTNAME_STRBUF, strbuf);
Strbuf_Free(strbuf);
Pokemon_SetValue(mon, MON_DATA_OT_GENDER, &npcTradeMon->otGender);
Pokemon_SetValue(mon, MON_DATA_LANGUAGE, &npcTradeMon->language);
sub_0209304C(mon, NULL, 1, MapHeader_GetMapLabelTextID(mapID), heapID);
Pokemon_CalcLevelAndStats(mon);
GF_ASSERT(!Pokemon_IsShiny(mon));
}

View File

@ -1,196 +0,0 @@
#include "overlay006/ov6_02246184.h"
#include <nitro.h>
#include <string.h>
#include "field/field_system.h"
#include "overlay006/struct_ov6_02246204_decl.h"
#include "overlay006/struct_ov6_02246254.h"
#include "graphics.h"
#include "heap.h"
#include "map_header.h"
#include "message.h"
#include "party.h"
#include "pokemon.h"
#include "save_player.h"
#include "strbuf.h"
#include "trainer_info.h"
#include "unk_0202F180.h"
#include "unk_020559DC.h"
#include "unk_02092494.h"
typedef struct {
u32 unk_00;
u32 unk_04;
u32 unk_08;
u32 unk_0C;
u32 unk_10;
u32 unk_14;
u32 unk_18;
u32 unk_1C;
u32 unk_20;
u32 unk_24;
u32 unk_28;
u32 unk_2C;
u32 unk_30;
u32 unk_34;
u32 unk_38;
u32 unk_3C;
u32 unk_40;
u32 unk_44;
u32 unk_48;
u32 unk_4C;
} UnkStruct_ov6_0224630C;
typedef struct UnkStruct_ov6_02246204_t {
UnkStruct_ov6_0224630C *unk_00;
Pokemon *unk_04;
TrainerInfo *unk_08;
u32 unk_0C;
u32 unk_10;
};
static Strbuf *ov6_022462E4(u32 param0, u32 param1);
static void ov6_0224630C(Pokemon *param0, UnkStruct_ov6_0224630C *param1, u32 param2, u32 param3, u32 param4, u32 param5);
UnkStruct_ov6_02246204 *ov6_02246184(u32 param0, u32 param1)
{
UnkStruct_ov6_02246204 *v0;
Strbuf *v1;
u16 v2[128];
GF_ASSERT(param1 < 4);
v0 = Heap_AllocFromHeap(param0, sizeof(UnkStruct_ov6_02246204));
memset(v0, 0, sizeof(UnkStruct_ov6_02246204));
v0->unk_00 = LoadMemberFromNARC(115, param1, 0, param0, 0);
v0->unk_10 = param0;
v0->unk_0C = param1;
v0->unk_04 = Pokemon_New(param0);
v0->unk_08 = TrainerInfo_New(param0);
TrainerInfo_Init(v0->unk_08);
v1 = ov6_022462E4(param0, 4 + param1);
Strbuf_ToChars(v1, v2, 128);
Strbuf_Free(v1);
TrainerInfo_SetName(v0->unk_08, v2);
TrainerInfo_SetGender(v0->unk_08, v0->unk_00->unk_40);
return v0;
}
void ov6_02246204(UnkStruct_ov6_02246204 *param0)
{
Heap_FreeToHeap(param0->unk_00);
Heap_FreeToHeap(param0->unk_04);
Heap_FreeToHeap(param0->unk_08);
Heap_FreeToHeap(param0);
}
u32 ov6_02246224(const UnkStruct_ov6_02246204 *param0)
{
return param0->unk_00->unk_00;
}
u32 ov6_0224622C(const UnkStruct_ov6_02246204 *param0)
{
return param0->unk_00->unk_4C;
}
void ov6_02246234(FieldSystem *fieldSystem, UnkStruct_ov6_02246204 *param1, int param2)
{
Party *v0 = Party_GetFromSavedata(fieldSystem->saveData);
sub_0207A128(v0, param2, param1->unk_04);
sub_0202F180(fieldSystem->saveData, param1->unk_04);
}
void ov6_02246254(FieldSystem *fieldSystem, UnkStruct_ov6_02246204 *param1, int param2, UnkStruct_ov6_02246254 *param3, Pokemon *param4, Pokemon *param5)
{
Party *v0 = Party_GetFromSavedata(fieldSystem->saveData);
Pokemon *v1;
Strbuf *v2;
u32 v3;
int v4;
v1 = Party_GetPokemonBySlotIndex(v0, param2);
v3 = Pokemon_GetValue(v1, MON_DATA_LEVEL, NULL);
ov6_0224630C(param1->unk_04, param1->unk_00, v3, param1->unk_0C, param1->unk_10, fieldSystem->location->mapId);
Pokemon_Copy(v1, param4);
Pokemon_Copy(param1->unk_04, param5);
param3->unk_00 = Pokemon_GetBoxPokemon(param4);
param3->unk_04 = Pokemon_GetBoxPokemon(param5);
param3->unk_08 = param1->unk_08;
param3->unk_10 = 1;
param3->unk_14 = SaveData_Options(fieldSystem->saveData);
v4 = FieldSystem_GetTimeOfDay(fieldSystem);
if ((v4 == 0) || (v4 == 1)) {
param3->unk_0C = 0;
} else if (v4 == 2) {
param3->unk_0C = 1;
} else {
param3->unk_0C = 2;
}
}
static Strbuf *ov6_022462E4(u32 fieldSystem, u32 param1)
{
Strbuf *v0;
MessageLoader *v1 = MessageLoader_Init(0, 26, 370, fieldSystem);
v0 = MessageLoader_GetNewStrbuf(v1, param1);
MessageLoader_Free(v1);
return v0;
}
static void ov6_0224630C(Pokemon *param0, UnkStruct_ov6_0224630C *param1, u32 param2, u32 param3, u32 param4, u32 param5)
{
Strbuf *v0;
u8 v1;
u32 v2;
Pokemon_InitWith(param0, param1->unk_00, param2, INIT_IVS_RANDOM, TRUE, param1->unk_38, OTID_SET, param1->unk_20);
v0 = ov6_022462E4(param4, param3);
Pokemon_SetValue(param0, MON_DATA_NICKNAME_STRBUF, v0);
Strbuf_Free(v0);
v1 = 1;
Pokemon_SetValue(param0, MON_DATA_HAS_NICKNAME, &v1);
Pokemon_SetValue(param0, MON_DATA_HP_IV, &param1->unk_04);
Pokemon_SetValue(param0, MON_DATA_ATK_IV, &param1->unk_08);
Pokemon_SetValue(param0, MON_DATA_DEF_IV, &param1->unk_0C);
Pokemon_SetValue(param0, MON_DATA_SPEED_IV, &param1->unk_10);
Pokemon_SetValue(param0, MON_DATA_SPATK_IV, &param1->unk_14);
Pokemon_SetValue(param0, MON_DATA_SPDEF_IV, &param1->unk_18);
Pokemon_SetValue(param0, MON_DATA_COOL, &param1->unk_24);
Pokemon_SetValue(param0, MON_DATA_BEAUTY, &param1->unk_28);
Pokemon_SetValue(param0, MON_DATA_CUTE, &param1->unk_2C);
Pokemon_SetValue(param0, MON_DATA_SMART, &param1->unk_30);
Pokemon_SetValue(param0, MON_DATA_TOUGH, &param1->unk_34);
Pokemon_SetValue(param0, MON_DATA_HELD_ITEM, &param1->unk_3C);
v0 = ov6_022462E4(param4, 4 + param3);
Pokemon_SetValue(param0, MON_DATA_OTNAME_STRBUF, v0);
Strbuf_Free(v0);
Pokemon_SetValue(param0, MON_DATA_OT_GENDER, &param1->unk_40);
Pokemon_SetValue(param0, MON_DATA_LANGUAGE, &param1->unk_48);
v2 = MapHeader_GetMapLabelTextID(param5);
sub_0209304C(param0, NULL, 1, v2, param4);
Pokemon_CalcLevelAndStats(param0);
GF_ASSERT(Pokemon_IsShiny(param0) == 0);
}

View File

@ -63,11 +63,11 @@
#include "overlay005/struct_ov5_021DC1A4_decl.h"
#include "overlay005/struct_ov5_021DD42C.h"
#include "overlay005/vs_seeker.h"
#include "overlay006/npc_trade.h"
#include "overlay006/ov6_0223E140.h"
#include "overlay006/ov6_02242AF0.h"
#include "overlay006/ov6_02243004.h"
#include "overlay006/ov6_02243258.h"
#include "overlay006/ov6_02246184.h"
#include "overlay006/ov6_02246C24.h"
#include "overlay006/ov6_02246F00.h"
#include "overlay006/ov6_02247078.h"
@ -75,7 +75,6 @@
#include "overlay006/ov6_02247D30.h"
#include "overlay006/ov6_02247F5C.h"
#include "overlay006/ov6_02248948.h"
#include "overlay006/struct_ov6_02246204_decl.h"
#include "overlay006/swarm.h"
#include "overlay006/trophy_garden_daily_encounters.h"
#include "overlay007/communication_club.h"
@ -601,11 +600,11 @@ static BOOL ScrCmd_219(ScriptContext *ctx);
static BOOL ScrCmd_21A(ScriptContext *ctx);
static BOOL ScrCmd_EnableSwarms(ScriptContext *ctx);
static BOOL ScrCmd_21C(ScriptContext *ctx);
static BOOL ScrCmd_226(ScriptContext *ctx);
static BOOL ScrCmd_227(ScriptContext *ctx);
static BOOL ScrCmd_228(ScriptContext *ctx);
static BOOL ScrCmd_StartNpcTrade(ScriptContext *ctx);
static BOOL ScrCmd_GetNpcTradeSpecies(ScriptContext *ctx);
static BOOL ScrCmd_GetNpcTradeRequestedSpecies(ScriptContext *ctx);
static BOOL ScrCmd_229(ScriptContext *ctx);
static BOOL ScrCmd_22A(ScriptContext *ctx);
static BOOL ScrCmd_FinishNpcTrade(ScriptContext *ctx);
static BOOL ScrCmd_22B(ScriptContext *ctx);
static BOOL ScrCmd_22C(ScriptContext *ctx);
static BOOL ScrCmd_22D(ScriptContext *ctx);
@ -1313,11 +1312,11 @@ const ScrCmdFunc Unk_020EAC58[] = {
ScrCmd_223,
ScrCmd_224,
ScrCmd_225,
ScrCmd_226,
ScrCmd_227,
ScrCmd_228,
ScrCmd_StartNpcTrade,
ScrCmd_GetNpcTradeSpecies,
ScrCmd_GetNpcTradeRequestedSpecies,
ScrCmd_229,
ScrCmd_22A,
ScrCmd_FinishNpcTrade,
ScrCmd_22B,
ScrCmd_22C,
ScrCmd_22D,
@ -6516,48 +6515,41 @@ static BOOL ScrCmd_21C(ScriptContext *ctx)
return 0;
}
static BOOL ScrCmd_226(ScriptContext *ctx)
static BOOL ScrCmd_StartNpcTrade(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u8 v1 = ScriptContext_ReadByte(ctx);
*v0 = ov6_02246184(11, v1);
return 0;
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
*data = NpcTrade_Init(HEAP_ID_FIELDMAP, ScriptContext_ReadByte(ctx));
return FALSE;
}
static BOOL ScrCmd_227(ScriptContext *ctx)
static BOOL ScrCmd_GetNpcTradeSpecies(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u16 *v1 = ScriptContext_GetVarPointer(ctx);
*v1 = ov6_02246224((UnkStruct_ov6_02246204 *)*v0);
return 0;
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u16 *destVar = ScriptContext_GetVarPointer(ctx);
*destVar = NpcTrade_GetSpecies((NpcTradeData *)*data);
return FALSE;
}
static BOOL ScrCmd_228(ScriptContext *ctx)
static BOOL ScrCmd_GetNpcTradeRequestedSpecies(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u16 *v1 = ScriptContext_GetVarPointer(ctx);
*v1 = ov6_0224622C((UnkStruct_ov6_02246204 *)*v0);
return 0;
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u16 *destVar = ScriptContext_GetVarPointer(ctx);
*destVar = NpcTrade_GetRequestedSpecies((NpcTradeData *)*data);
return FALSE;
}
static BOOL ScrCmd_229(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
u16 v1 = ScriptContext_GetVar(ctx);
sub_0206C740(ctx->task, (UnkStruct_ov6_02246204 *)*v0, v1, 11);
return 1;
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
sub_0206C740(ctx->task, (NpcTradeData *)*data, ScriptContext_GetVar(ctx), HEAP_ID_FIELDMAP);
return TRUE;
}
static BOOL ScrCmd_22A(ScriptContext *ctx)
static BOOL ScrCmd_FinishNpcTrade(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
ov6_02246204((UnkStruct_ov6_02246204 *)*v0);
return 0;
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
NpcTrade_Free((NpcTradeData *)*data);
return FALSE;
}
static BOOL ScrCmd_22B(ScriptContext *ctx)

View File

@ -4,8 +4,7 @@
#include <string.h>
#include "field/field_system.h"
#include "overlay006/ov6_02246184.h"
#include "overlay006/struct_ov6_02246204_decl.h"
#include "overlay006/npc_trade.h"
#include "overlay006/struct_ov6_02246254.h"
#include "overlay095/ov95_02246C20.h"
@ -17,7 +16,7 @@
FS_EXTERN_OVERLAY(overlay95);
typedef struct {
UnkStruct_ov6_02246204 *unk_00;
NpcTradeData *unk_00;
u32 unk_04;
int unk_08;
UnkStruct_ov6_02246254 unk_0C;
@ -88,7 +87,7 @@ static BOOL sub_0206C680(FieldTask *param0)
return 0;
}
void sub_0206C740(FieldTask *param0, UnkStruct_ov6_02246204 *param1, int param2, u32 param3)
void sub_0206C740(FieldTask *param0, NpcTradeData *param1, int param2, u32 param3)
{
UnkStruct_0206C660 *v0 = Heap_AllocFromHeap(param3, sizeof(UnkStruct_0206C660));