Skip to content

Commit e8ff940

Browse files
committed
Add ribbon API to picoc
1 parent a8006eb commit e8ff940

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

3ds/source/picoc/pksm_api.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2162,6 +2162,44 @@ void pkx_update_party_data(
21622162
pkm->updatePartyData();
21632163
}
21642164

2165+
void pkx_ribbon_exists(
2166+
struct ParseState* Parser, struct Value* ReturnValue, struct Value** Param, int NumArgs)
2167+
{
2168+
pksm::Generation gen = pksm::Generation(Param[0]->Val->Integer);
2169+
pksm::Ribbon ribbon = pksm::Ribbon(Param[1]->Val->Integer);
2170+
2171+
checkGen(Parser, gen);
2172+
2173+
ReturnValue->Val->Integer = PkmUtils::getDefault(gen)->hasRibbon(ribbon) ? 1 : 0;
2174+
}
2175+
2176+
void pkx_get_ribbon(struct ParseState* Parser, struct Value* ReturnValue, struct Value** Param, int NumArgs)
2177+
{
2178+
u8* data = (u8*)Param[0]->Val->Pointer;
2179+
pksm::Generation gen = pksm::Generation(Param[1]->Val->Integer);
2180+
pksm::Ribbon ribbon = pksm::Ribbon(Param[2]->Val->Integer);
2181+
2182+
checkGen(Parser, gen);
2183+
2184+
auto pkm = getPokemon(data, gen, false);
2185+
2186+
ReturnValue->Val->Integer = pkm->ribbon(ribbon) ? 1 : 0;
2187+
}
2188+
2189+
void pkx_set_ribbon(struct ParseState* Parser, struct Value* ReturnValue, struct Value** Param, int NumArgs)
2190+
{
2191+
u8* data = (u8*)Param[0]->Val->Pointer;
2192+
pksm::Generation gen = pksm::Generation(Param[1]->Val->Integer);
2193+
pksm::Ribbon ribbon = pksm::Ribbon(Param[2]->Val->Integer);
2194+
int shouldHave = Param[3]->Val->Integer;
2195+
2196+
checkGen(Parser, gen);
2197+
2198+
auto pkm = getPokemon(data, gen, false);
2199+
2200+
pkm->ribbon(ribbon, shouldHave != 0);
2201+
}
2202+
21652203
void sav_get_palpark(
21662204
struct ParseState* Parser, struct Value* ReturnValue, struct Value** Param, int NumArgs)
21672205
{

common/include/picoc/pksm_api.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ void pkx_is_valid(struct ParseState*, struct Value*, struct Value**, int);
189189
void pkx_set_value(struct ParseState*, struct Value*, struct Value**, int);
190190
void pkx_get_value(struct ParseState*, struct Value*, struct Value**, int);
191191
void pkx_update_party_data(struct ParseState*, struct Value*, struct Value**, int);
192+
void pkx_ribbon_exists(struct ParseState*, struct Value*, struct Value**, int);
193+
void pkx_get_ribbon(struct ParseState*, struct Value*, struct Value**, int);
194+
void pkx_set_ribbon(struct ParseState*, struct Value*, struct Value**, int);
192195
// random utilities
193196
void pksm_utf8_to_ucs2(struct ParseState*, struct Value*, struct Value**, int);
194197
void pksm_ucs2_to_utf8(struct ParseState*, struct Value*, struct Value**, int);

common/source/picoc/library_pksm.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ struct LibraryFunction UnixFunctions[] =
6060
{ pkx_set_value, "void pkx_set_value(char* data, enum Generation gen, enum PKX_Field field, ...);" },
6161
{ pkx_get_value, "unsigned int pkx_get_value(char* data, enum Generation gen, enum PKX_Field field, ...);" },
6262
{ pkx_update_party_data, "void pkx_update_party_data(char* data, enum Generation gen);"},
63+
{ pkx_ribbon_exists, "int pkx_ribbon_exists(enum Generation gen, enum Ribbon ribbon);"},
64+
{ pkx_get_ribbon, "int pkx_get_ribbon(char* data, enum Generation gen, enum Ribbon ribbon);"},
65+
{ pkx_set_ribbon, "void pkx_set_ribbon(char* data, enum Generation gen, enum Ribbon ribbon, int hasRibbon);"},
6366
// io
6467
{ current_directory, "char* current_directory(void);" },
6568
{ read_directory, "struct directory* read_directory(char* dir);" },
@@ -127,5 +130,28 @@ void PlatformLibraryInit(Picoc *pc)
127130
"SAV_LANGUAGE, SAV_MONEY, SAV_BP, SAV_HOURS, SAV_MINUTES, SAV_SECONDS, SAV_ITEM };"
128131
"enum SAV_MaxField { MAX_SLOTS, MAX_BOXES, MAX_WONDER_CARDS, MAX_FORM, MAX_IN_POUCH };"
129132
"enum SAV_CheckValue { SAV_VALUE_SPECIES, SAV_VALUE_MOVE, SAV_VALUE_ITEM, SAV_VALUE_ABILITY, SAV_VALUE_BALL };"
130-
"enum Pouch { NormalItem, KeyItem, TM, Mail, Medicine, Berry, Ball, Battle, Candy, ZCrystals };");
133+
"enum Pouch { NormalItem, KeyItem, TM, Mail, Medicine, Berry, Ball, Battle, Candy, ZCrystals };"
134+
"enum Ribbon {RIB_ChampionKalos, RIB_ChampionG3Hoenn, RIB_ChampionSinnoh, RIB_BestFriends, RIB_Training, RIB_BattlerSkillful,"
135+
"RIB_BattlerExpert, RIB_Effort, RIB_Alert, RIB_Shock, RIB_Downcast, RIB_Careless, RIB_Relax, RIB_Snooze, RIB_Smile, RIB_Gorgeous,"
136+
"RIB_Royal, RIB_GorgeousRoyal, RIB_Artist, RIB_Footprint, RIB_Record, RIB_Legend, RIB_Country, RIB_National, RIB_Earth, RIB_World,"
137+
"RIB_Classic, RIB_Premier, RIB_Event, RIB_Birthday, RIB_Special, RIB_Souvenir, RIB_Wishing, RIB_ChampionBattle, RIB_ChampionRegional,"
138+
"RIB_ChampionNational, RIB_ChampionWorld, RIB_MemoryContest, RIB_MemoryBattle, RIB_ChampionG6Hoenn, RIB_ContestStar,"
139+
"RIB_MasterCoolness, RIB_MasterBeauty, RIB_MasterCuteness, RIB_MasterCleverness, RIB_MasterToughness, RIB_G3Cool,"
140+
"RIB_G3CoolSuper, RIB_G3CoolHyper, RIB_G3CoolMaster, RIB_G3Beauty, RIB_G3BeautySuper, RIB_G3BeautyHyper, RIB_G3BeautyMaster,"
141+
"RIB_G3Cute, RIB_G3CuteSuper, RIB_G3CuteHyper, RIB_G3CuteMaster, RIB_G3Smart, RIB_G3SmartSuper, RIB_G3SmartHyper, RIB_G3SmartMaster,"
142+
"RIB_G3Tough, RIB_G3ToughSuper, RIB_G3ToughHyper, RIB_G3ToughMaster, RIB_G4Cool, RIB_G4CoolSuper, RIB_G4CoolHyper, RIB_G4CoolMaster,"
143+
"RIB_G4Beauty, RIB_G4BeautySuper, RIB_G4BeautyHyper, RIB_G4BeautyMaster, RIB_G4Cute, RIB_G4CuteSuper, RIB_G4CuteHyper,"
144+
"RIB_G4CuteMaster, RIB_G4Smart, RIB_G4SmartSuper, RIB_G4SmartHyper, RIB_G4SmartMaster, RIB_G4Tough, RIB_G4ToughSuper,"
145+
"RIB_G4ToughHyper, RIB_G4ToughMaster, RIB_Winning, RIB_Victory, RIB_Ability, RIB_AbilityGreat, RIB_AbilityDouble, RIB_AbilityMulti,"
146+
"RIB_AbilityPair, RIB_AbilityWorld, RIB_ChampionAlola, RIB_BattleRoyale, RIB_BattleTreeGreat, RIB_BattleTreeMaster,"
147+
"RIB_ChampionGalar, RIB_TowerMaster, RIB_MasterRank, RIB_MarkLunchtime, RIB_MarkSleepyTime, RIB_MarkDusk, RIB_MarkDawn,"
148+
"RIB_MarkCloudy, RIB_MarkRainy, RIB_MarkStormy, RIB_MarkSnowy, RIB_MarkBlizzard, RIB_MarkDry, RIB_MarkSandstorm, RIB_MarkMisty,"
149+
"RIB_MarkDestiny, RIB_MarkFishing, RIB_MarkCurry, RIB_MarkUncommon, RIB_MarkRare, RIB_MarkRowdy, RIB_MarkAbsentMinded,"
150+
"RIB_MarkJittery, RIB_MarkExcited, RIB_MarkCharismatic, RIB_MarkCalmness, RIB_MarkIntense, RIB_MarkZonedOut, RIB_MarkJoyful,"
151+
"RIB_MarkAngry, RIB_MarkSmiley, RIB_MarkTeary, RIB_MarkUpbeat, RIB_MarkPeeved, RIB_MarkIntellectual, RIB_MarkFerocious,"
152+
"RIB_MarkCrafty, RIB_MarkScowling, RIB_MarkKindly, RIB_MarkFlustered, RIB_MarkPumpedUp, RIB_MarkZeroEnergy, RIB_MarkPrideful,"
153+
"RIB_MarkUnsure, RIB_MarkHumble, RIB_MarkThorny, RIB_MarkVigor, RIB_MarkSlump, RIB_G4CoolGreat = RIB_G4CoolSuper,"
154+
"RIB_G4CoolUltra = RIB_G4CoolHyper, RIB_G4BeautyGreat = RIB_G4BeautySuper, RIB_G4BeautyUltra = RIB_G4BeautyHyper,"
155+
"RIB_G4CuteGreat = RIB_G4CuteSuper, RIB_G4CuteUltra = RIB_G4CuteHyper, RIB_G4SmartGreat = RIB_G4SmartSuper,"
156+
"RIB_G4SmartUltra = RIB_G4SmartHyper, RIB_G4ToughGreat = RIB_G4ToughSuper, RIB_G4ToughUltra = RIB_G4ToughHyper };");
131157
}

0 commit comments

Comments
 (0)