mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-09-11 03:06:00 -05:00
document underground vendors (#889)
This commit is contained in:
140
generated/goods.txt
Normal file
140
generated/goods.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
UG_GOOD_NONE
|
||||
UG_GOOD_PC_NORMAL_FLAG
|
||||
UG_GOOD_PC_BRONZE_FLAG
|
||||
UG_GOOD_PC_SILVER_FLAG
|
||||
UG_GOOD_PC_GOLD_FLAG
|
||||
UG_GOOD_PC_PLATINUM_FLAG
|
||||
UG_GOOD_BIG_BOULDER
|
||||
UG_GOOD_YELLOW_CUSHION
|
||||
UG_GOOD_BLUE_CUSHION
|
||||
UG_GOOD_WOODEN_CHAIR
|
||||
UG_GOOD_BIG_TABLE
|
||||
UG_GOOD_PLAIN_TABLE
|
||||
UG_GOOD_SMALL_TABLE
|
||||
UG_GOOD_LONG_TABLE
|
||||
UG_GOOD_WIDE_TABLE
|
||||
UG_GOOD_POKE_TABLE
|
||||
UG_GOOD_BIG_BOOKSHELF
|
||||
UG_GOOD_SMALL_BOOKSHELF
|
||||
UG_GOOD_RESEARCH_SHELF
|
||||
UG_GOOD_BIKE_RACK
|
||||
UG_GOOD_SHOP_SHELF
|
||||
UG_GOOD_DISPLAY_SHELF
|
||||
UG_GOOD_CUPBOARD
|
||||
UG_GOOD_WOOD_DRESSER
|
||||
UG_GOOD_PINK_DRESSER
|
||||
UG_GOOD_TV
|
||||
UG_GOOD_REFRIGERATOR
|
||||
UG_GOOD_PRETTY_SINK
|
||||
UG_GOOD_FEATHERY_BED
|
||||
UG_GOOD_TRASH_CAN
|
||||
UG_GOOD_CARDBOARD_BOX
|
||||
UG_GOOD_CRATE
|
||||
UG_GOOD_CONTAINER
|
||||
UG_GOOD_OIL_DRUM
|
||||
UG_GOOD_BIG_OIL_DRUM
|
||||
UG_GOOD_IRON_BEAM
|
||||
UG_GOOD_POTTED_PLANT
|
||||
UG_GOOD_POKE_FLOWER
|
||||
UG_GOOD_HEALING_MACHINE
|
||||
UG_GOOD_LAB_MACHINE
|
||||
UG_GOOD_TEST_MACHINE
|
||||
UG_GOOD_GAME_SYSTEM
|
||||
UG_GOOD_VENDING_MACHINE
|
||||
UG_GOOD_RED_BIKE
|
||||
UG_GOOD_GREEN_BIKE
|
||||
UG_GOOD_BINOCULARS
|
||||
UG_GOOD_GLOBE
|
||||
UG_GOOD_GYM_STATUE
|
||||
UG_GOOD_RED_TENT
|
||||
UG_GOOD_BLUE_TENT
|
||||
UG_GOOD_CLEAR_TENT
|
||||
UG_GOOD_MAZE_BLOCK_1
|
||||
UG_GOOD_MAZE_BLOCK_2
|
||||
UG_GOOD_MAZE_BLOCK_3
|
||||
UG_GOOD_MAZE_BLOCK_4
|
||||
UG_GOOD_MAZE_BLOCK_5
|
||||
UG_GOOD_HOLE_TOOL
|
||||
UG_GOOD_PIT_TOOL
|
||||
UG_GOOD_SMOKE_TOOL
|
||||
UG_GOOD_BIG_SMOKE_TOOL
|
||||
UG_GOOD_ROCK_TOOL
|
||||
UG_GOOD_ROCKFALL_TOOL
|
||||
UG_GOOD_FOAM_TOOL
|
||||
UG_GOOD_BUBBLE_TOOL
|
||||
UG_GOOD_ALERT_TOOL_1
|
||||
UG_GOOD_ALERT_TOOL_2
|
||||
UG_GOOD_ALERT_TOOL_3
|
||||
UG_GOOD_ALERT_TOOL_4
|
||||
UG_GOOD_LEAF_TOOL
|
||||
UG_GOOD_FLOWER_TOOL
|
||||
UG_GOOD_EMBER_TOOL
|
||||
UG_GOOD_FIRE_TOOL
|
||||
UG_GOOD_CUTE_CUP
|
||||
UG_GOOD_COOL_CUP
|
||||
UG_GOOD_BEAUTY_CUP
|
||||
UG_GOOD_TOUGH_CUP
|
||||
UG_GOOD_CLEVER_CUP
|
||||
UG_GOOD_BLUE_CRYSTAL
|
||||
UG_GOOD_PINK_CRYSTAL
|
||||
UG_GOOD_RED_CRYSTAL
|
||||
UG_GOOD_YELLOW_CRYSTAL
|
||||
UG_GOOD_PRETTY_GEM
|
||||
UG_GOOD_SHINY_GEM
|
||||
UG_GOOD_MYSTIC_GEM
|
||||
UG_GOOD_GLITTER_GEM
|
||||
UG_GOOD_BRONZE_TROPHY
|
||||
UG_GOOD_SILVER_TROPHY
|
||||
UG_GOOD_GOLD_TROPHY
|
||||
UG_GOOD_GREAT_TROPHY_UNUSED
|
||||
UG_GOOD_BALL_ORNAMENT_UNUSED
|
||||
UG_GOOD_ROUND_ORNAMENT_UNUSED
|
||||
UG_GOOD_CLEAR_ORNAMENT_UNUSED
|
||||
UG_GOOD_CHARMANDER_DOLL
|
||||
UG_GOOD_BULBASAUR_DOLL
|
||||
UG_GOOD_SQUIRTLE_DOLL
|
||||
UG_GOOD_CYNDAQUIL_DOLL
|
||||
UG_GOOD_CHIKORITA_DOLL
|
||||
UG_GOOD_TOTODILE_DOLL
|
||||
UG_GOOD_TORCHIC_DOLL
|
||||
UG_GOOD_TREECKO_DOLL
|
||||
UG_GOOD_MUDKIP_DOLL
|
||||
UG_GOOD_CHIMCHAR_DOLL
|
||||
UG_GOOD_TURTWIG_DOLL
|
||||
UG_GOOD_PIPLUP_DOLL
|
||||
UG_GOOD_PIKACHU_DOLL
|
||||
UG_GOOD_PLUSLE_DOLL
|
||||
UG_GOOD_MINUN_DOLL
|
||||
UG_GOOD_CLEFAIRY_DOLL
|
||||
UG_GOOD_JIGGLYPUFF_DOLL
|
||||
UG_GOOD_WOBBUFFET_DOLL
|
||||
UG_GOOD_MEOWTH_DOLL
|
||||
UG_GOOD_SKITTY_DOLL
|
||||
UG_GOOD_GLAMEOW_DOLL
|
||||
UG_GOOD_BUNEARY_DOLL
|
||||
UG_GOOD_WEAVILE_DOLL
|
||||
UG_GOOD_MUNCHLAX_DOLL
|
||||
UG_GOOD_BONSLY_DOLL
|
||||
UG_GOOD_MIME_JR_DOLL
|
||||
UG_GOOD_LUCARIO_DOLL
|
||||
UG_GOOD_MANTYKE_DOLL
|
||||
UG_GOOD_BUIZEL_DOLL
|
||||
UG_GOOD_CHATOT_DOLL
|
||||
UG_GOOD_MANAPHY_DOLL_UNUSED
|
||||
UG_GOOD_SNORLAX_DOLL
|
||||
UG_GOOD_WAILORD_DOLL
|
||||
UG_GOOD_MAGNEZONE_DOLL_UNUSED
|
||||
UG_GOOD_DRIFLOON_DOLL
|
||||
UG_GOOD_HAPPINY_DOLL
|
||||
UG_GOOD_PACHIRISU_DOLL
|
||||
UG_GOOD_BASE_ENTRANCE_NORTH
|
||||
UG_GOOD_BASE_ENTRANCE_SOUTH
|
||||
UG_GOOD_BASE_ENTRANCE_WEST
|
||||
UG_GOOD_BASE_ENTRANCE_EAST
|
||||
UG_GOOD_WIDE_SOFA
|
||||
UG_GOOD_BONSAI
|
||||
UG_GOOD_DAINTY_FLOWERS
|
||||
UG_GOOD_LOVELY_FLOWERS
|
||||
UG_GOOD_PRETTY_FLOWERS
|
||||
UG_GOOD_LAVISH_FLOWERS
|
||||
UG_GOOD_MAX
|
||||
@@ -51,14 +51,15 @@ metang_generators = {
|
||||
'egg_groups': { 'type': 'enum', 'tag': 'EggGroup' },
|
||||
'evolution_methods': { 'type': 'enum', 'tag': 'EvolutionMethod' },
|
||||
'exp_rates': { 'type': 'enum', 'tag': 'ExpRate' },
|
||||
'game_records': { 'type': 'enum', 'tag': 'GameRecord' },
|
||||
'fade_types': { 'type': 'enum', 'tag': 'FadeType' },
|
||||
'first_arrival_to_zones': { 'type': 'enum', 'tag': 'FirstArrivalToZone' },
|
||||
'footprint_sizes': { 'type': 'enum', 'tag': 'FootprintSize' },
|
||||
'frontier_trainers': { 'type': 'enum', 'tag': 'FrontierTrainerID' },
|
||||
'game_records': { 'type': 'enum', 'tag': 'GameRecord' },
|
||||
'gender_ratios': { 'type': 'enum', 'tag': 'GenderRatio' },
|
||||
'genders': { 'type': 'enum', 'tag': 'Gender' },
|
||||
'giratina_shadow_animations': {'type': 'enum', 'tag': 'GiratinaShadowAnimation'},
|
||||
'goods': { 'type': 'enum', 'tag': 'Good' },
|
||||
'hidden_locations': { 'type': 'enum', 'tag': 'HiddenLocation' },
|
||||
'item_ai_categories': { 'type': 'enum', 'tag': 'ItemAICategory' },
|
||||
'item_battle_categories': { 'type': 'enum', 'tag': 'ItemBattleCategory' },
|
||||
@@ -110,6 +111,7 @@ metang_generators = {
|
||||
'trainer_message_types': { 'type': 'enum', 'tag': 'TrainerMessageType' },
|
||||
'trainer_score_events': { 'type': 'enum', 'tag': 'TrainerScoreEvent' },
|
||||
'trainer_types': { 'type': 'enum', 'tag': 'TrainerType' },
|
||||
'traps': { 'type': 'enum', 'tag': 'Trap' },
|
||||
'tutor_locations': {'type': 'enum', 'tag': 'TutorLocation'},
|
||||
'vars_flags': {'type': 'enum', 'tag': 'VarFlag'},
|
||||
'versions': {'type': 'enum', 'tag': 'Version'},
|
||||
|
||||
35
generated/traps.txt
Normal file
35
generated/traps.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
TRAP_NONE
|
||||
TRAP_MOVE_UP
|
||||
TRAP_MOVE_RIGHT
|
||||
TRAP_MOVE_DOWN
|
||||
TRAP_MOVE_LEFT
|
||||
TRAP_HURL_UP
|
||||
TRAP_HURL_RIGHT
|
||||
TRAP_HURL_DOWN
|
||||
TRAP_HURL_LEFT
|
||||
TRAP_WARP_DUMMY
|
||||
TRAP_HI_WARP_DUMMY
|
||||
TRAP_HOLE
|
||||
TRAP_PIT
|
||||
TRAP_REVERSE
|
||||
TRAP_CONFUSE
|
||||
TRAP_RUN_DUMMY
|
||||
TRAP_FADE_DUMMY
|
||||
TRAP_SLOW_DUMMY
|
||||
TRAP_SMOKE
|
||||
TRAP_BIG_SMOKE
|
||||
TRAP_ROCK
|
||||
TRAP_ROCKFALL
|
||||
TRAP_FOAM
|
||||
TRAP_BUBBLE
|
||||
TRAP_ALERT_1
|
||||
TRAP_ALERT_2
|
||||
TRAP_ALERT_3
|
||||
TRAP_ALERT_4
|
||||
TRAP_LEAF
|
||||
TRAP_FLOWER
|
||||
TRAP_EMBER
|
||||
TRAP_FIRE
|
||||
TRAP_RADAR_DUMMY
|
||||
TRAP_DIGGER_DRILL
|
||||
TRAP_MAX
|
||||
@@ -1,144 +0,0 @@
|
||||
#ifndef POKEPLATINUM_CONSTANTS_GOODS_H
|
||||
#define POKEPLATINUM_CONSTANTS_GOODS_H
|
||||
|
||||
#define UG_GOOD_NONE 0
|
||||
#define UG_GOOD_PC_NORMAL_FLAG 1
|
||||
#define UG_GOOD_PC_BRONZE_FLAG 2
|
||||
#define UG_GOOD_PC_SILVER_FLAG 3
|
||||
#define UG_GOOD_PC_GOLD_FLAG 4
|
||||
#define UG_GOOD_PC_PLATINUM_FLAG 5
|
||||
#define UG_GOOD_BIG_BOULDER 6
|
||||
#define UG_GOOD_YELLOW_CUSHION 7
|
||||
#define UG_GOOD_BLUE_CUSHION 8
|
||||
#define UG_GOOD_WOODEN_CHAIR 9
|
||||
#define UG_GOOD_BIG_TABLE 10
|
||||
#define UG_GOOD_PLAIN_TABLE 11
|
||||
#define UG_GOOD_SMALL_TABLE 12
|
||||
#define UG_GOOD_LONG_TABLE 13
|
||||
#define UG_GOOD_WIDE_TABLE 14
|
||||
#define UG_GOOD_POKE_TABLE 15
|
||||
#define UG_GOOD_BIG_BOOKSHELF 16
|
||||
#define UG_GOOD_SMALL_BOOKSHELF 17
|
||||
#define UG_GOOD_RESEARCH_SHELF 18
|
||||
#define UG_GOOD_BIKE_RACK 19
|
||||
#define UG_GOOD_SHOP_SHELF 20
|
||||
#define UG_GOOD_DISPLAY_SHELF 21
|
||||
#define UG_GOOD_CUPBOARD 22
|
||||
#define UG_GOOD_WOOD_DRESSER 23
|
||||
#define UG_GOOD_PINK_DRESSER 24
|
||||
#define UG_GOOD_TV 25
|
||||
#define UG_GOOD_REFRIGERATOR 26
|
||||
#define UG_GOOD_PRETTY_SINK 27
|
||||
#define UG_GOOD_FEATHERY_BED 28
|
||||
#define UG_GOOD_TRASH_CAN 29
|
||||
#define UG_GOOD_CARDBOARD_BOX 30
|
||||
#define UG_GOOD_CRATE 31
|
||||
#define UG_GOOD_CONTAINER 32
|
||||
#define UG_GOOD_OIL_DRUM 33
|
||||
#define UG_GOOD_BIG_OIL_DRUM 34
|
||||
#define UG_GOOD_IRON_BEAM 35
|
||||
#define UG_GOOD_POTTED_PLANT 36
|
||||
#define UG_GOOD_POKE_FLOWER 37
|
||||
#define UG_GOOD_HEALING_MACHINE 38
|
||||
#define UG_GOOD_LAB_MACHINE 39
|
||||
#define UG_GOOD_TEST_MACHINE 40
|
||||
#define UG_GOOD_GAME_SYSTEM 41
|
||||
#define UG_GOOD_VENDING_MACHINE 42
|
||||
#define UG_GOOD_RED_BIKE 43
|
||||
#define UG_GOOD_GREEN_BIKE 44
|
||||
#define UG_GOOD_BINOCULARS 45
|
||||
#define UG_GOOD_GLOBE 46
|
||||
#define UG_GOOD_GYM_STATUE 47
|
||||
#define UG_GOOD_RED_TENT 48
|
||||
#define UG_GOOD_BLUE_TENT 49
|
||||
#define UG_GOOD_CLEAR_TENT 50
|
||||
#define UG_GOOD_MAZE_BLOCK_1 51
|
||||
#define UG_GOOD_MAZE_BLOCK_2 52
|
||||
#define UG_GOOD_MAZE_BLOCK_3 53
|
||||
#define UG_GOOD_MAZE_BLOCK_4 54
|
||||
#define UG_GOOD_MAZE_BLOCK_5 55
|
||||
#define UG_GOOD_HOLE_TOOL 56
|
||||
#define UG_GOOD_PIT_TOOL 57
|
||||
#define UG_GOOD_SMOKE_TOOL 58
|
||||
#define UG_GOOD_BIG_SMOKE_TOOL 59
|
||||
#define UG_GOOD_ROCK_TOOL 60
|
||||
#define UG_GOOD_ROCKFALL_TOOL 61
|
||||
#define UG_GOOD_FOAM_TOOL 62
|
||||
#define UG_GOOD_BUBBLE_TOOL 63
|
||||
#define UG_GOOD_ALERT_TOOL_1 64
|
||||
#define UG_GOOD_ALERT_TOOL_2 65
|
||||
#define UG_GOOD_ALERT_TOOL_3 66
|
||||
#define UG_GOOD_ALERT_TOOL_4 67
|
||||
#define UG_GOOD_LEAF_TOOL 68
|
||||
#define UG_GOOD_FLOWER_TOOL 69
|
||||
#define UG_GOOD_EMBER_TOOL 70
|
||||
#define UG_GOOD_FIRE_TOOL 71
|
||||
#define UG_GOOD_CUTE_CUP 72
|
||||
#define UG_GOOD_COOL_CUP 73
|
||||
#define UG_GOOD_BEAUTY_CUP 74
|
||||
#define UG_GOOD_TOUGH_CUP 75
|
||||
#define UG_GOOD_CLEVER_CUP 76
|
||||
#define UG_GOOD_BLUE_CRYSTAL 77
|
||||
#define UG_GOOD_PINK_CRYSTAL 78
|
||||
#define UG_GOOD_RED_CRYSTAL 79
|
||||
#define UG_GOOD_YELLOW_CRYSTAL 80
|
||||
#define UG_GOOD_PRETTY_GEM 81
|
||||
#define UG_GOOD_SHINY_GEM 82
|
||||
#define UG_GOOD_MYSTIC_GEM 83
|
||||
#define UG_GOOD_GLITTER_GEM 84
|
||||
#define UG_GOOD_BRONZE_TROPHY 85
|
||||
#define UG_GOOD_SILVER_TROPHY 86
|
||||
#define UG_GOOD_GOLD_TROPHY 87
|
||||
#define UG_GOOD_GREAT_TROPHY_UNUSED 88
|
||||
#define UG_GOOD_BALL_ORNAMENT_UNUSED 89
|
||||
#define UG_GOOD_ROUND_ORNAMENT_UNUSED 90
|
||||
#define UG_GOOD_CLEAR_ORNAMENT_UNUSED 91
|
||||
#define UG_GOOD_CHARMANDER_DOLL 92
|
||||
#define UG_GOOD_BULBASAUR_DOLL 93
|
||||
#define UG_GOOD_SQUIRTLE_DOLL 94
|
||||
#define UG_GOOD_CYNDAQUIL_DOLL 95
|
||||
#define UG_GOOD_CHIKORITA_DOLL 96
|
||||
#define UG_GOOD_TOTODILE_DOLL 97
|
||||
#define UG_GOOD_TORCHIC_DOLL 98
|
||||
#define UG_GOOD_TREECKO_DOLL 99
|
||||
#define UG_GOOD_MUDKIP_DOLL 100
|
||||
#define UG_GOOD_CHIMCHAR_DOLL 101
|
||||
#define UG_GOOD_TURTWIG_DOLL 102
|
||||
#define UG_GOOD_PIPLUP_DOLL 103
|
||||
#define UG_GOOD_PIKACHU_DOLL 104
|
||||
#define UG_GOOD_PLUSLE_DOLL 105
|
||||
#define UG_GOOD_MINUN_DOLL 106
|
||||
#define UG_GOOD_CLEFAIRY_DOLL 107
|
||||
#define UG_GOOD_JIGGLYPUFF_DOLL 108
|
||||
#define UG_GOOD_WOBBUFFET_DOLL 109
|
||||
#define UG_GOOD_MEOWTH_DOLL 110
|
||||
#define UG_GOOD_SKITTY_DOLL 111
|
||||
#define UG_GOOD_GLAMEOW_DOLL 112
|
||||
#define UG_GOOD_BUNEARY_DOLL 113
|
||||
#define UG_GOOD_WEAVILE_DOLL 114
|
||||
#define UG_GOOD_MUNCHLAX_DOLL 115
|
||||
#define UG_GOOD_BONSLY_DOLL 116
|
||||
#define UG_GOOD_MIME_JR_DOLL 117
|
||||
#define UG_GOOD_LUCARIO_DOLL 118
|
||||
#define UG_GOOD_MANTYKE_DOLL 119
|
||||
#define UG_GOOD_BUIZEL_DOLL 120
|
||||
#define UG_GOOD_CHATOT_DOLL 121
|
||||
#define UG_GOOD_MANAPHY_DOLL_UNUSED 122
|
||||
#define UG_GOOD_SNORLAX_DOLL 123
|
||||
#define UG_GOOD_WAILORD_DOLL 124
|
||||
#define UG_GOOD_MAGNEZONE_DOLL_UNUSED 125
|
||||
#define UG_GOOD_DRIFLOON_DOLL 126
|
||||
#define UG_GOOD_HAPPINY_DOLL 127
|
||||
#define UG_GOOD_PACHIRISU_DOLL 128
|
||||
#define UG_GOOD_BASE_ENTRANCE_NORTH 129
|
||||
#define UG_GOOD_BASE_ENTRANCE_SOUTH 130
|
||||
#define UG_GOOD_BASE_ENTRANCE_WEST 131
|
||||
#define UG_GOOD_BASE_ENTRANCE_EAST 132
|
||||
#define UG_GOOD_WIDE_SOFA 133
|
||||
#define UG_GOOD_BONSAI 134
|
||||
#define UG_GOOD_DAINTY_FLOWERS 135
|
||||
#define UG_GOOD_LOVELY_FLOWERS 136
|
||||
#define UG_GOOD_PRETTY_FLOWERS 137
|
||||
#define UG_GOOD_LAVISH_FLOWERS 138
|
||||
|
||||
#endif // POKEPLATINUM_CONSTANTS_GOODS_H
|
||||
@@ -1,39 +0,0 @@
|
||||
#ifndef POKEPLATINUM_CONSTANTS_TRAPS_H
|
||||
#define POKEPLATINUM_CONSTANTS_TRAPS_H
|
||||
|
||||
#define TRAP_NONE 0
|
||||
#define TRAP_MOVE_UP 1
|
||||
#define TRAP_MOVE_RIGHT 2
|
||||
#define TRAP_MOVE_DOWN 3
|
||||
#define TRAP_MOVE_LEFT 4
|
||||
#define TRAP_HURL_UP 5
|
||||
#define TRAP_HURL_RIGHT 6
|
||||
#define TRAP_HURL_DOWN 7
|
||||
#define TRAP_HURL_LEFT 8
|
||||
#define TRAP_WARP_DUMMY 9
|
||||
#define TRAP_HI_WARP_DUMMY 10
|
||||
#define TRAP_HOLE 11
|
||||
#define TRAP_PIT 12
|
||||
#define TRAP_REVERSE 13
|
||||
#define TRAP_CONFUSE 14
|
||||
#define TRAP_RUN_DUMMY 15
|
||||
#define TRAP_FADE_DUMMY 16
|
||||
#define TRAP_SLOW_DUMMY 17
|
||||
#define TRAP_SMOKE 18
|
||||
#define TRAP_BIG_SMOKE 19
|
||||
#define TRAP_ROCK 20
|
||||
#define TRAP_ROCKFALL 21
|
||||
#define TRAP_FOAM 22
|
||||
#define TRAP_BUBBLE 23
|
||||
#define TRAP_ALERT_1 24
|
||||
#define TRAP_ALERT_2 25
|
||||
#define TRAP_ALERT_3 26
|
||||
#define TRAP_ALERT_4 27
|
||||
#define TRAP_LEAF 28
|
||||
#define TRAP_FLOWER 29
|
||||
#define TRAP_EMBER 30
|
||||
#define TRAP_FIRE 31
|
||||
#define TRAP_RADAR_DUMMY 32
|
||||
#define TRAP_DIGGER_DRILL 33
|
||||
|
||||
#endif // POKEPLATINUM_CONSTANTS_TRAPS_H
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "constants/goods.h"
|
||||
#include "constants/items.h"
|
||||
#include "generated/goods.h"
|
||||
#include "generated/mart_decor_id.h"
|
||||
#include "generated/mart_frontier_id.h"
|
||||
#include "generated/mart_seal_id.h"
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
#ifndef POKEPLATINUM_GOODS_H
|
||||
#define POKEPLATINUM_GOODS_H
|
||||
|
||||
u8 Good_GetWidth(int goodID);
|
||||
u8 Good_GetDepth(int goodID);
|
||||
const u8 *Good_GetCollision(int goodID);
|
||||
u8 Good_GetSpherePriceType(int goodID);
|
||||
u8 Good_GetSpherePriceMinSize(int goodID);
|
||||
u8 Good_GetSpherePriceMaxSize(int goodID);
|
||||
int Good_GetMoneyPrice(int goodID);
|
||||
int Good_GetInteractMessageID(int goodID);
|
||||
BOOL Good_IsNatDexRequired(int goodID);
|
||||
BOOL Good_IsUngiftable(int goodID);
|
||||
#include "generated/goods.h"
|
||||
|
||||
u8 Good_GetWidth(enum Good goodID);
|
||||
u8 Good_GetDepth(enum Good goodID);
|
||||
const u8 *Good_GetCollision(enum Good goodID);
|
||||
u8 Good_GetSpherePriceType(enum Good goodID);
|
||||
u8 Good_GetSpherePriceMinSize(enum Good goodID);
|
||||
u8 Good_GetSpherePriceMaxSize(enum Good goodID);
|
||||
int Good_GetMoneyPrice(enum Good goodID);
|
||||
int Good_GetInteractMessageID(enum Good goodID);
|
||||
BOOL Good_IsNatDexRequired(enum Good goodID);
|
||||
BOOL Good_IsUngiftable(enum Good goodID);
|
||||
|
||||
#endif // POKEPLATINUM_GOODS_H
|
||||
|
||||
@@ -50,7 +50,8 @@ BOOL ov23_02241670(void);
|
||||
void ov23_02241690(int param0, int param1);
|
||||
|
||||
enum MiningObjectIDs {
|
||||
MINING_SMALL_PRISM_SPHERE = 1,
|
||||
MINING_TREASURE_NONE = 0,
|
||||
MINING_SMALL_PRISM_SPHERE,
|
||||
MINING_SMALL_PALE_SPHERE,
|
||||
MINING_SMALL_RED_SPHERE,
|
||||
MINING_SMALL_BLUE_SPHERE,
|
||||
|
||||
@@ -18,7 +18,9 @@ enum UndergroundStoredPosKeys {
|
||||
UNDERGROUND_STORED_POS_NONE = 0,
|
||||
UNDERGROUND_STORED_POS_KEY_PC,
|
||||
UNDERGROUND_STORED_POS_KEY_START_MENU,
|
||||
UNDERGROUND_STORED_POS_KEY_3,
|
||||
UNDERGROUND_STORED_POS_KEY_GOODS_VENDOR,
|
||||
UNDERGROUND_STORED_POS_KEY_TRAPS_VENDOR,
|
||||
UNDERGROUND_STORED_POS_KEY_TREASURES_VENDOR,
|
||||
};
|
||||
|
||||
enum UndergroundMenuKeys {
|
||||
@@ -28,16 +30,16 @@ enum UndergroundMenuKeys {
|
||||
UNDERGROUND_MENU_KEY_SPHERES,
|
||||
UNDERGROUND_MENU_KEY_GOODS,
|
||||
UNDERGROUND_MENU_KEY_TREASURES,
|
||||
UNDERGROUND_MENU_KEY_12,
|
||||
UNDERGROUND_MENU_KEY_13,
|
||||
UNDERGROUND_MENU_KEY_14,
|
||||
UNDERGROUND_MENU_KEY_15,
|
||||
UNDERGROUND_MENU_KEY_16,
|
||||
UNDERGROUND_MENU_KEY_17,
|
||||
UNDERGROUND_MENU_KEY_18,
|
||||
UNDERGROUND_MENU_KEY_19,
|
||||
UNDERGROUND_MENU_KEY_PAY_WITH_SPHERES,
|
||||
UNDERGROUND_MENU_KEY_BUY_GOODS,
|
||||
UNDERGROUND_MENU_KEY_BUY_TRAPS,
|
||||
UNDERGROUND_MENU_KEY_BUY_TREASURES_UNUSED,
|
||||
UNDERGROUND_MENU_KEY_SELL_GOODS,
|
||||
UNDERGROUND_MENU_KEY_SELL_TRAPS,
|
||||
UNDERGROUND_MENU_KEY_SELL_TREASURES,
|
||||
UNDERGROUND_MENU_KEY_VENDOR_OPTIONS,
|
||||
UNDERGROUND_MENU_KEY_PC_RADAR = 22,
|
||||
UNDERGROUND_MENU_KEY_PC
|
||||
UNDERGROUND_MENU_KEY_PC,
|
||||
};
|
||||
|
||||
#define BIT_TRAPS_FULL 1 << 4
|
||||
@@ -86,14 +88,14 @@ void CommManUnderground_SetSphereRadarActive(void);
|
||||
void CommManUnderground_SetTrapRadarActive(void);
|
||||
void CommManUnderground_SetTreasureRadarActive(void);
|
||||
void ov23_0224300C(int param0, int param1);
|
||||
void ov23_02243020(int param0);
|
||||
void CommManUnderground_QueueTalkedToVendorMessage(int param0);
|
||||
void UndergroundMan_SetReturnLog(int param0);
|
||||
void ov23_022430B8(int param0);
|
||||
void CommManUnderground_SetStoredPosKey(u16 menuKey);
|
||||
void CommManUnderground_StoreCursorAndListPos(u16 menuKey, u16 cursorPos, u16 listPos);
|
||||
u16 CommManUnderground_GetStoredListPos(u16 menuKey);
|
||||
u16 CommManUnderground_GetStoredCursorPos(u16 menuKey);
|
||||
void ov23_022431C4(int param0, int param1, void *param2, void *param3);
|
||||
void CommManUnderground_ProcessVendorTalkRequest(int param0, int param1, void *param2, void *param3);
|
||||
void CommManUnderground_SetCurrentSysTask(void *ctx, SysTask *sysTask, EndSysTaskFunc endFunc);
|
||||
void CommManUnderground_ClearCurrentSysTaskInfo(void);
|
||||
BOOL ov23_0224321C(void);
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#ifndef POKEPLATINUM_OV23_022521F0_H
|
||||
#define POKEPLATINUM_OV23_022521F0_H
|
||||
|
||||
#include "field/field_system_decl.h"
|
||||
#include "overlay023/underground_menu.h"
|
||||
|
||||
int ov23_02252C70(void *param0);
|
||||
void *ov23_02252C98(BOOL param0, FieldSystem *fieldSystem, int param2);
|
||||
int ov23_02252C9C(int param0);
|
||||
void ov23_02252CD4(void);
|
||||
void ov23_02252CE0(int param0, int param1);
|
||||
void ov23_02252CF4(int param0, int param1);
|
||||
void ov23_02252D08(int param0, int param1);
|
||||
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *param0, int param1);
|
||||
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *param0);
|
||||
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *param0);
|
||||
void ov23_022534A0(FieldSystem *fieldSystem);
|
||||
|
||||
#endif // POKEPLATINUM_OV23_022521F0_H
|
||||
@@ -1,8 +0,0 @@
|
||||
#ifndef POKEPLATINUM_OV23_0225426C_H
|
||||
#define POKEPLATINUM_OV23_0225426C_H
|
||||
|
||||
const u8 ov23_0225426C(const int param0);
|
||||
const u8 ov23_0225427C(const int param0);
|
||||
const u8 ov23_0225428C(const int param0);
|
||||
|
||||
#endif // POKEPLATINUM_OV23_0225426C_H
|
||||
@@ -1,8 +0,0 @@
|
||||
#ifndef POKEPLATINUM_OV23_0225429C_H
|
||||
#define POKEPLATINUM_OV23_0225429C_H
|
||||
|
||||
const u8 ov23_0225429C(const int param0);
|
||||
const u8 ov23_022542AC(const int param0);
|
||||
const u8 ov23_022542BC(const int param0);
|
||||
|
||||
#endif // POKEPLATINUM_OV23_0225429C_H
|
||||
10
include/overlay023/trap_prices.h
Normal file
10
include/overlay023/trap_prices.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef POKEPLATINUM_UNDERGROUND_TRAP_PRICES_H
|
||||
#define POKEPLATINUM_UNDERGROUND_TRAP_PRICES_H
|
||||
|
||||
#define RANDOM_SPHERE_TYPE 6
|
||||
|
||||
const u8 TrapGetSpherePriceType(const int trapID);
|
||||
const u8 TrapGetSpherePriceMinSize(const int trapID);
|
||||
const u8 TrapGetSpherePriceMaxSize(const int trapID);
|
||||
|
||||
#endif // POKEPLATINUM_UNDERGROUND_TRAP_PRICES_H
|
||||
8
include/overlay023/treasure_prices.h
Normal file
8
include/overlay023/treasure_prices.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef POKEPLATINUM_UNDERGROUND_TREASURE_PRICES_H
|
||||
#define POKEPLATINUM_UNDERGROUND_TREASURE_PRICES_H
|
||||
|
||||
u8 Treasure_GetSpherePriceType(int treasureID);
|
||||
u8 Treasure_GetSpherePriceMinSize(int treasureID);
|
||||
u8 Treasure_GetSpherePriceMaxSize(int treasureID);
|
||||
|
||||
#endif // POKEPLATINUM_UNDERGROUND_TREASURE_PRICES_H
|
||||
@@ -26,6 +26,7 @@ enum SphereTypes {
|
||||
RED_SPHERE,
|
||||
BLUE_SPHERE,
|
||||
GREEN_SPHERE,
|
||||
SPHERE_TYPE_MAX,
|
||||
};
|
||||
|
||||
typedef struct Coordinates {
|
||||
@@ -38,4 +39,10 @@ typedef struct Coordinates2D {
|
||||
u16 y;
|
||||
} Coordinates2D;
|
||||
|
||||
typedef struct SpherePrice {
|
||||
u8 sphereType;
|
||||
u8 minSize;
|
||||
u8 maxSize;
|
||||
} SpherePrice;
|
||||
|
||||
#endif // POKEPLATINUM_UNDERGROUND_TYPES_H
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef POKEPLATINUM_OV23_0224F294_H
|
||||
#define POKEPLATINUM_OV23_0224F294_H
|
||||
#ifndef POKEPLATINUM_UNDERGROUND_MENU_H
|
||||
#define POKEPLATINUM_UNDERGROUND_MENU_H
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
@@ -29,6 +29,8 @@ enum UndergroundStartMenuOptions {
|
||||
UNDERGROUND_START_MENU_OPTION_COUNT,
|
||||
};
|
||||
|
||||
#define SHOP_INVENTORY_SIZE 5
|
||||
|
||||
typedef void (*ExitCallback)(int selectedID);
|
||||
typedef int (*GetItemCountFunc)(void *menu);
|
||||
typedef int (*GetItemFunc)(int slot, void *menu);
|
||||
@@ -44,11 +46,11 @@ typedef struct UndergroundMenu {
|
||||
Window menuDescriptionWindow;
|
||||
StringList *menuOptions;
|
||||
StringList *itemSelectedOptions;
|
||||
ListMenu *unk_48;
|
||||
ListMenu *listMenu;
|
||||
UndergroundItemListMenu *itemListMenu;
|
||||
ListMenu *itemSelectedMenu;
|
||||
Menu *menu;
|
||||
StringList *unk_58;
|
||||
u8 padding[4];
|
||||
Menu *yesNoMenu;
|
||||
CursorCallback cursorCallback;
|
||||
PrintCallback printCallback;
|
||||
@@ -63,27 +65,25 @@ typedef struct UndergroundMenu {
|
||||
GetItemFunc getItem;
|
||||
GetSphereSizeFunc getSphereSize;
|
||||
RecordScreenContext *checkFlagsCtx;
|
||||
u8 unk_274[5];
|
||||
u8 unk_279[5];
|
||||
u8 unk_27E[5];
|
||||
BOOL unk_284;
|
||||
int unk_288;
|
||||
int unk_28C;
|
||||
u8 shopInventory[SHOP_INVENTORY_SIZE];
|
||||
u8 shopPriceTypes[SHOP_INVENTORY_SIZE];
|
||||
u8 shopPriceSizes[SHOP_INVENTORY_SIZE];
|
||||
u8 padding2[4];
|
||||
int vendorIndex;
|
||||
int printerID; // pointless; written to in one place but never read
|
||||
int listMenuCursorPos;
|
||||
int listMenuListPos;
|
||||
u32 unk_298;
|
||||
u8 padding3[4];
|
||||
u16 menuCursorPos;
|
||||
u32 startMenuInput;
|
||||
u16 unk_2A4;
|
||||
u8 unk_2A6;
|
||||
u8 unk_2A7;
|
||||
u8 unk_2A8;
|
||||
u8 padding4[4];
|
||||
u8 shopSelection;
|
||||
u8 nextState;
|
||||
u8 state;
|
||||
u8 unk_2AB;
|
||||
u8 unk_2AC;
|
||||
u16 unk_2AE;
|
||||
u16 itemSelectedMenuCursorPos;
|
||||
u8 isSelling;
|
||||
u8 vendorType;
|
||||
u16 listMenuPos;
|
||||
u16 itemSelectedMenuPos;
|
||||
} UndergroundMenu;
|
||||
|
||||
void UndergroundMenuContext_Init(Underground *underground);
|
||||
@@ -103,16 +103,16 @@ void UndergroundMenu_Start(ExitCallback exitCallback, FieldSystem *fieldSystem);
|
||||
void UndergroundMenu_EraseCurrentMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_RemoveSelectedTrap(int trapID);
|
||||
void UndergroundMenu_PrintTrapDescription(ListMenu *listMenu, u32 index, u8 onInit);
|
||||
void ov23_0224FDBC(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenSellTrapsMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_RemoveSelectedSphere(int sphereType);
|
||||
void ov23_02250184(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenPayWithSpheresMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_PrintTreasureDescription(ListMenu *listMenu, u32 index, u8 onInit);
|
||||
void ov23_02250578(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenSellTreasuresMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_StartHoldingFlag(ExitCallback exitCallback, FieldSystem *fieldSystem);
|
||||
void UndergroundMenu_PrintGoodDescription(ListMenu *listMenu, u32 index, u8 onInit);
|
||||
void ov23_02250CB0(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenSellGoodsMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenStoreGoodsMenu(UndergroundMenu *menu);
|
||||
void UndergroundMenu_OpenWithdrawGoodsMenu(UndergroundMenu *menu);
|
||||
@@ -122,4 +122,4 @@ void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *menu, int maxDis
|
||||
void UndergroundMenu_ResetBrightnessAndExit(SysTask *sysTask, void *data);
|
||||
void UndergroundMenu_UpdateScrollPrompts(UndergroundMenu *menu, int listPos, int count, int maxDisplay);
|
||||
|
||||
#endif // POKEPLATINUM_OV23_0224F294_H
|
||||
#endif // POKEPLATINUM_UNDERGROUND_MENU_H
|
||||
|
||||
@@ -41,8 +41,8 @@ void UndergroundPlayer_ProcessHeldFlagOwnerInfoAck(int unused0, int unused1, voi
|
||||
BOOL UndergroundPlayer_HaveLinksReceivedHeldFlagData(void);
|
||||
void ov23_0224AC4C(void);
|
||||
BOOL UndergroundPlayer_IsAffectedByTrap(int netID);
|
||||
void ov23_0224ACE8(int netID, int unused1, void *unused2, void *unused3);
|
||||
void ov23_0224ACF8(int unused0, int unused1, void *data, void *unused3);
|
||||
void UndergroundPlayer_ProcessVendorTalk(int netID, int unused1, void *unused2, void *unused3);
|
||||
void UndergroundPlayer_ProcessVendorTalkServer(int unused0, int unused1, void *data, void *unused3);
|
||||
int UndergroundPlayer_GetXPos(int netID);
|
||||
int UndergroundPlayer_GetZPos(int netID);
|
||||
void UndergroundPlayer_UpdateStatus(int netID, int status);
|
||||
|
||||
19
include/overlay023/underground_vendors.h
Normal file
19
include/overlay023/underground_vendors.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef POKEPLATINUM_UNDERGROUND_VENDORS_H
|
||||
#define POKEPLATINUM_UNDERGROUND_VENDORS_H
|
||||
|
||||
#include "field/field_system_decl.h"
|
||||
#include "overlay023/underground_menu.h"
|
||||
|
||||
int UndergroundVendors_ReturnFFFE(void *unused);
|
||||
void *UndergroundVendors_ReturnNull(BOOL unused0, FieldSystem *unused1, int unused2);
|
||||
int UndergroundVendors_PrintNPCMessage(int bankEntry);
|
||||
void UndergroundVendors_EraseMessageBoxWindow(void);
|
||||
void UndergroundVendors_SetTreasureNameForPrinter(int index, int treasureID);
|
||||
void UndergroundVendors_SetTrapNameForPrinter(int index, int trapID);
|
||||
void UndergroundVendors_SetGoodNameForPrinter(int index, int goodID);
|
||||
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *menu, int bankEntry);
|
||||
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *menu);
|
||||
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *menu);
|
||||
void UndergroundVendors_StartShopMenuTask(FieldSystem *fieldSystem);
|
||||
|
||||
#endif // POKEPLATINUM_UNDERGROUND_VENDORS_H
|
||||
@@ -852,11 +852,11 @@ Overlay overlay23
|
||||
Object main.nef.p/src_overlay023_underground_player_talk.c.o
|
||||
Object main.nef.p/src_overlay023_underground_menu.c.o
|
||||
Object main.nef.p/src_overlay023_underground_pc.c.o
|
||||
Object main.nef.p/src_overlay023_ov23_022521F0.c.o
|
||||
Object main.nef.p/src_overlay023_underground_vendors.c.o
|
||||
Object main.nef.p/src_overlay023_underground_records.c.o
|
||||
Object main.nef.p/src_overlay023_underground_text_printer.c.o
|
||||
Object main.nef.p/src_overlay023_ov23_0225426C.c.o
|
||||
Object main.nef.p/src_overlay023_ov23_0225429C.c.o
|
||||
Object main.nef.p/src_overlay023_treasure_prices.c.o
|
||||
Object main.nef.p/src_overlay023_trap_prices.c.o
|
||||
Object main.nef.p/src_overlay023_decoration_menu.c.o
|
||||
Object main.nef.p/src_overlay023_base_decoration.c.o
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "macros/scrcmd.inc"
|
||||
#include "res/text/bank/battle_tower.h"
|
||||
#include "res/text/bank/menu_entries.h"
|
||||
#include "constants/goods.h"
|
||||
#include "generated/goods.h"
|
||||
|
||||
|
||||
ScriptEntry BattleTower_SingleDoubleBattleRoomAttendant
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "macros/scrcmd.inc"
|
||||
#include "res/text/bank/eterna_city_underground_man_house.h"
|
||||
#include "constants/goods.h"
|
||||
#include "constants/traps.h"
|
||||
#include "generated/goods.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
|
||||
ScriptEntry _001A
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "macros/scrcmd.inc"
|
||||
#include "res/text/bank/hearthome_city.h"
|
||||
#include "constants/goods.h"
|
||||
#include "generated/goods.h"
|
||||
|
||||
|
||||
ScriptEntry _0082
|
||||
|
||||
@@ -654,7 +654,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000634_00112",
|
||||
"id": "UndergroundCommon_Text_PlayerTalkedWithSomeone",
|
||||
"en_US": [
|
||||
"{STRVAR_1 3, 0, 0} talked with\n",
|
||||
"someone."
|
||||
|
||||
@@ -2,165 +2,165 @@
|
||||
"key": 10232,
|
||||
"messages": [
|
||||
{
|
||||
"id": "pl_msg_00000636_00000",
|
||||
"id": "UndergroundNPCs_Text_IllTradeYouSomething",
|
||||
"en_US": [
|
||||
"You’ve got a Sphere or two?\n",
|
||||
"If you do, I’ll trade you something."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00001",
|
||||
"id": "UndergroundNPCs_Text_PickSpherePrompt",
|
||||
"en_US": [
|
||||
"Which Sphere will you trade me for\n",
|
||||
"my {STRVAR_1 25, 2, 0}?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00002",
|
||||
"id": "UndergroundNPCs_Text_LetsDoThisTrade",
|
||||
"en_US": [
|
||||
"All right!\n",
|
||||
"Let’s do this trade!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00003",
|
||||
"id": "UndergroundNPCs_Text_YouDontHaveRoom",
|
||||
"en_US": [
|
||||
"Oh, now wait a second!\n",
|
||||
"You don’t have any room for this!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00004",
|
||||
"id": "UndergroundNPCs_Text_WrongKindOfSphere",
|
||||
"en_US": "That’s not the right kind of Sphere!"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00005",
|
||||
"id": "UndergroundNPCs_Text_SphereTooSmall",
|
||||
"en_US": [
|
||||
"Hmm...\n",
|
||||
"No, this Sphere’s not big enough."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00006",
|
||||
"id": "UndergroundNPCs_Text_ItemWasObtained",
|
||||
"en_US": [
|
||||
"The {STRVAR_1 25, 2, 0}\n",
|
||||
"was obtained!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00007",
|
||||
"id": "UndergroundNPCs_Text_YouObtainedSphere",
|
||||
"en_US": [
|
||||
"You obtained a {STRVAR_1 25, 2, 0},\n",
|
||||
"size {STRVAR_1 51, 6, 0}."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00008",
|
||||
"id": "UndergroundNPCs_Text_DoYouNeedAnythingElse",
|
||||
"en_US": "Do you need anything else?"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00009",
|
||||
"id": "UndergroundNPCs_Text_BeSeeingYouThen",
|
||||
"en_US": "I’ll be seeing you, then!"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00010",
|
||||
"id": "UndergroundNPCs_Text_ConfirmTradePrompt",
|
||||
"en_US": [
|
||||
"You’ll trade your {STRVAR_1 25, 2, 0}\n",
|
||||
"for my {STRVAR_1 25, 4, 0}?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00011",
|
||||
"id": "UndergroundNPCs_Text_AllRightLetsTrade",
|
||||
"en_US": [
|
||||
"All right!\n",
|
||||
"Let’s trade!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00012",
|
||||
"id": "UndergroundNPCs_Text_YouDontHaveRoomForSphere_Unused",
|
||||
"en_US": [
|
||||
"Oh, now wait a second! You don’t\n",
|
||||
"have room for another Sphere!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00013",
|
||||
"id": "UndergroundNPCs_Text_GetTrap",
|
||||
"en_US": "GET TRAP"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00014",
|
||||
"id": "UndergroundNPCs_Text_GiveTrap",
|
||||
"en_US": "GIVE TRAP"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00015",
|
||||
"id": "UndergroundNPCs_Text_Exit_Trap",
|
||||
"en_US": "EXIT"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00016",
|
||||
"id": "UndergroundNPCs_Text_GetGoods",
|
||||
"en_US": "GET GOODS"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00017",
|
||||
"id": "UndergroundNPCs_Text_GiveGoods",
|
||||
"en_US": "GIVE GOODS"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00018",
|
||||
"id": "UndergroundNPCs_Text_Exit_Goods",
|
||||
"en_US": "EXIT"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00019",
|
||||
"id": "UndergroundNPCs_Text_SpheresOnHand",
|
||||
"en_US": [
|
||||
"Spheres\n",
|
||||
" on hand"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00020",
|
||||
"id": "UndergroundNPCs_Text_TrapsOnHand",
|
||||
"en_US": [
|
||||
"Traps on\n",
|
||||
" hand"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00021",
|
||||
"id": "UndergroundNPCs_Text_GoodsOnHand",
|
||||
"en_US": [
|
||||
"Goods on\n",
|
||||
" hand"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00022",
|
||||
"id": "UndergroundNPCs_Text_Cancel",
|
||||
"en_US": "CANCEL"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00023",
|
||||
"id": "UndergroundNPCs_Text_RequiredSphere",
|
||||
"en_US": "Required Sphere"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00024",
|
||||
"id": "UndergroundNPCs_Text_OfferedSphere",
|
||||
"en_US": "Offered Sphere"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00025",
|
||||
"id": "UndergroundNPCs_Text_SphereTemplate",
|
||||
"en_US": "{STRVAR_1 25, 2, 0} {STRVAR_1 51, 6, 0}"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00026",
|
||||
"id": "UndergroundNPCs_Text_NotForSale",
|
||||
"en_US": "NOT FOR SALE"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00027",
|
||||
"id": "UndergroundNPCs_Text_IllTradeSpheresForTreasures",
|
||||
"en_US": [
|
||||
"You have any treasures? I’ll trade\n",
|
||||
"you some Spheres for them."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00028",
|
||||
"id": "UndergroundNPCs_Text_GiveTreasures",
|
||||
"en_US": "GIVE TREASURES"
|
||||
},
|
||||
{
|
||||
"id": "pl_msg_00000636_00029",
|
||||
"id": "UndergroundNPCs_Text_TreasuresOnHand",
|
||||
"en_US": [
|
||||
"Treasures\n",
|
||||
" on hand"
|
||||
|
||||
54
src/goods.c
54
src/goods.c
@@ -3,19 +3,13 @@
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/goods.h"
|
||||
#include "generated/goods.h"
|
||||
|
||||
#include "overlay023/underground_defs.h"
|
||||
|
||||
#include "res/text/bank/underground_records.h"
|
||||
|
||||
typedef struct SpherePrice {
|
||||
u8 sphereType;
|
||||
u8 minSize;
|
||||
u8 maxSize;
|
||||
} SpherePrice;
|
||||
|
||||
typedef struct Good {
|
||||
typedef struct GoodData {
|
||||
u8 width;
|
||||
u8 depth;
|
||||
u8 collision[9];
|
||||
@@ -24,10 +18,10 @@ typedef struct Good {
|
||||
int interactMessageID;
|
||||
u8 natDexRequired;
|
||||
u8 ungiftable;
|
||||
} Good;
|
||||
} GoodData;
|
||||
|
||||
// clang-format off
|
||||
static const Good sGoods[] = {
|
||||
static const GoodData sGoodData[] = {
|
||||
[UG_GOOD_NONE] = {
|
||||
.width = 0,
|
||||
.depth = 0,
|
||||
@@ -2533,52 +2527,52 @@ static const Good sGoods[] = {
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
u8 Good_GetWidth(int goodID)
|
||||
u8 Good_GetWidth(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].width;
|
||||
return sGoodData[goodID].width;
|
||||
}
|
||||
|
||||
u8 Good_GetDepth(int goodID)
|
||||
u8 Good_GetDepth(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].depth;
|
||||
return sGoodData[goodID].depth;
|
||||
}
|
||||
|
||||
const u8 *Good_GetCollision(int goodID)
|
||||
const u8 *Good_GetCollision(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].collision;
|
||||
return sGoodData[goodID].collision;
|
||||
}
|
||||
|
||||
u8 Good_GetSpherePriceType(int goodID)
|
||||
u8 Good_GetSpherePriceType(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].spherePrice.sphereType;
|
||||
return sGoodData[goodID].spherePrice.sphereType;
|
||||
}
|
||||
|
||||
u8 Good_GetSpherePriceMinSize(int goodID)
|
||||
u8 Good_GetSpherePriceMinSize(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].spherePrice.minSize;
|
||||
return sGoodData[goodID].spherePrice.minSize;
|
||||
}
|
||||
|
||||
u8 Good_GetSpherePriceMaxSize(int goodID)
|
||||
u8 Good_GetSpherePriceMaxSize(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].spherePrice.maxSize;
|
||||
return sGoodData[goodID].spherePrice.maxSize;
|
||||
}
|
||||
|
||||
int Good_GetMoneyPrice(int goodID)
|
||||
int Good_GetMoneyPrice(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].moneyPrice;
|
||||
return sGoodData[goodID].moneyPrice;
|
||||
}
|
||||
|
||||
int Good_GetInteractMessageID(int goodID)
|
||||
int Good_GetInteractMessageID(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].interactMessageID;
|
||||
return sGoodData[goodID].interactMessageID;
|
||||
}
|
||||
|
||||
BOOL Good_IsNatDexRequired(int goodID)
|
||||
BOOL Good_IsNatDexRequired(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].natDexRequired;
|
||||
return sGoodData[goodID].natDexRequired;
|
||||
}
|
||||
|
||||
BOOL Good_IsUngiftable(int goodID)
|
||||
BOOL Good_IsUngiftable(enum Good goodID)
|
||||
{
|
||||
return sGoods[goodID].ungiftable;
|
||||
return sGoodData[goodID].ungiftable;
|
||||
}
|
||||
|
||||
@@ -652,11 +652,11 @@ pokeplatinum_c = files(
|
||||
'overlay023/underground_player_talk.c',
|
||||
'overlay023/underground_menu.c',
|
||||
'overlay023/underground_pc.c',
|
||||
'overlay023/ov23_022521F0.c',
|
||||
'overlay023/underground_vendors.c',
|
||||
'overlay023/underground_records.c',
|
||||
'overlay023/underground_text_printer.c',
|
||||
'overlay023/ov23_0225426C.c',
|
||||
'overlay023/ov23_0225429C.c',
|
||||
'overlay023/treasure_prices.c',
|
||||
'overlay023/trap_prices.c',
|
||||
'overlay023/decoration_menu.c',
|
||||
'overlay023/base_decoration.c',
|
||||
'applications/poketch/unavailable/graphics.c',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/goods.h"
|
||||
#include "generated/goods.h"
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/traps.h"
|
||||
#include "generated/trainer_score_events.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_defs/struct_02099F80.h"
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "overlay005/land_data.h"
|
||||
#include "overlay005/ov5_021EAFA4.h"
|
||||
#include "overlay023/ov23_0223E140.h"
|
||||
#include "overlay023/ov23_022521F0.h"
|
||||
#include "overlay023/secret_bases.h"
|
||||
#include "overlay023/struct_ov23_02241A80.h"
|
||||
#include "overlay023/struct_ov23_02241A88.h"
|
||||
@@ -23,6 +22,7 @@
|
||||
#include "overlay023/underground_spheres.h"
|
||||
#include "overlay023/underground_text_printer.h"
|
||||
#include "overlay023/underground_traps.h"
|
||||
#include "overlay023/underground_vendors.h"
|
||||
|
||||
#include "comm_player_manager.h"
|
||||
#include "communication_information.h"
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "vars_flags.h"
|
||||
|
||||
#include "res/graphics/trap_effects/trap_effects.naix.h"
|
||||
#include "res/text/bank/underground_common.h"
|
||||
|
||||
typedef BOOL (*UnkFuncPtr_ov23_02242540)(int, int);
|
||||
|
||||
@@ -72,7 +73,7 @@ typedef struct {
|
||||
u16 storedPositionKey;
|
||||
u8 unk_C2[8];
|
||||
u8 unk_CA[8];
|
||||
u8 unk_D2[8];
|
||||
u8 talkedToVendorMessagesQueued[MAX_CONNECTED_PLAYERS];
|
||||
String *unk_DC[8];
|
||||
u8 unk_FC[8];
|
||||
u8 unk_104[8];
|
||||
@@ -139,9 +140,9 @@ static void CommManUnderground_Init(CommManUnderground *param0, FieldSystem *fie
|
||||
Graphics_LoadPalette(NARC_INDEX_DATA__UG_TRAP, text_window_NCLR, 0, 10 * 0x20, 4 * 0x20, HEAP_ID_FIELD1);
|
||||
LoadStandardWindowGraphics(sCommManUnderground->fieldSystem->bgConfig, 3, 1024 - (18 + 12) - 9, 11, 2, HEAP_ID_FIELD1);
|
||||
|
||||
for (i = 0; i < (7 + 1); i++) {
|
||||
for (i = 0; i < MAX_CONNECTED_PLAYERS; i++) {
|
||||
sCommManUnderground->unk_C2[i] = 0xff;
|
||||
sCommManUnderground->unk_D2[i] = 0xff;
|
||||
sCommManUnderground->talkedToVendorMessagesQueued[i] = 0xff;
|
||||
sCommManUnderground->unk_DC[i] = NULL;
|
||||
}
|
||||
|
||||
@@ -278,11 +279,11 @@ static BOOL ov23_02242308(String *param0)
|
||||
}
|
||||
}
|
||||
|
||||
if (sCommManUnderground->unk_D2[i] != 0xff) {
|
||||
if (sCommManUnderground->talkedToVendorMessagesQueued[i] != 0xff) {
|
||||
v3 = CommInfo_TrainerInfo(i);
|
||||
sCommManUnderground->unk_D2[i] = 0xff;
|
||||
sCommManUnderground->talkedToVendorMessagesQueued[i] = 0xff;
|
||||
|
||||
if (CommManUnderground_FormatCommonStringWithTrainerName(v3, 0, 112, param0)) {
|
||||
if (CommManUnderground_FormatCommonStringWithTrainerName(v3, 0, UndergroundCommon_Text_PlayerTalkedWithSomeone, param0)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -1018,10 +1019,10 @@ void ov23_0224300C(int param0, int param1)
|
||||
}
|
||||
}
|
||||
|
||||
void ov23_02243020(int param0)
|
||||
void CommManUnderground_QueueTalkedToVendorMessage(int netID)
|
||||
{
|
||||
if (sCommManUnderground) {
|
||||
sCommManUnderground->unk_D2[param0] = 1;
|
||||
sCommManUnderground->talkedToVendorMessagesQueued[netID] = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1113,13 +1114,13 @@ u16 CommManUnderground_GetStoredCursorPos(u16 menuKey)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ov23_022431C4(int param0, int param1, void *param2, void *param3)
|
||||
void CommManUnderground_ProcessVendorTalkRequest(int unused0, int unused1, void *data, void *unused3)
|
||||
{
|
||||
u8 *v0 = param2;
|
||||
int v1 = v0[0];
|
||||
u8 *buffer = data;
|
||||
int netID = *buffer;
|
||||
|
||||
if (v1 == CommSys_CurNetId()) {
|
||||
ov23_022534A0(sCommManUnderground->fieldSystem);
|
||||
if (netID == CommSys_CurNetId()) {
|
||||
UndergroundVendors_StartShopMenuTask(sCommManUnderground->fieldSystem);
|
||||
CommSys_SendMessage(25);
|
||||
CommPlayerMan_PauseFieldSystem();
|
||||
}
|
||||
|
||||
@@ -1,955 +0,0 @@
|
||||
#include "overlay023/ov23_022521F0.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/field_base_tiles.h"
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
#include "field/field_system.h"
|
||||
#include "overlay023/ov23_02241F74.h"
|
||||
#include "overlay023/ov23_0225426C.h"
|
||||
#include "overlay023/ov23_0225429C.h"
|
||||
#include "overlay023/underground_item_list_menu.h"
|
||||
#include "overlay023/underground_menu.h"
|
||||
#include "overlay023/underground_text_printer.h"
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "comm_player_manager.h"
|
||||
#include "communication_information.h"
|
||||
#include "communication_system.h"
|
||||
#include "field_system.h"
|
||||
#include "goods.h"
|
||||
#include "heap.h"
|
||||
#include "list_menu.h"
|
||||
#include "map_header_data.h"
|
||||
#include "map_object.h"
|
||||
#include "menu.h"
|
||||
#include "message.h"
|
||||
#include "pokedex.h"
|
||||
#include "render_window.h"
|
||||
#include "savedata.h"
|
||||
#include "sound_playback.h"
|
||||
#include "string_gf.h"
|
||||
#include "string_list.h"
|
||||
#include "string_template.h"
|
||||
#include "sys_task.h"
|
||||
#include "sys_task_manager.h"
|
||||
#include "system.h"
|
||||
#include "text.h"
|
||||
#include "unk_0202854C.h"
|
||||
|
||||
typedef struct {
|
||||
u16 unk_00;
|
||||
u16 unk_02;
|
||||
u16 unk_04;
|
||||
} UnkStruct_ov23_02257674;
|
||||
|
||||
static void ov23_02252D1C(UndergroundMenu *param0);
|
||||
static void ov23_02252C78(UndergroundMenu *param0);
|
||||
|
||||
UnkStruct_ov23_02257674 Unk_ov23_02257674[] = {
|
||||
{ 0x0, 0x48, 0x68 },
|
||||
{ 0x0, 0x1A8, 0x57 },
|
||||
{ 0x0, 0xC8, 0xB9 },
|
||||
{ 0x0, 0x14F, 0x108 },
|
||||
{ 0x0, 0xAF, 0x117 },
|
||||
{ 0x0, 0x1A8, 0x1B7 },
|
||||
{ 0x0, 0x57, 0x1C8 },
|
||||
{ 0x0, 0x137, 0x166 },
|
||||
{ 0x1, 0xE8, 0x57 },
|
||||
{ 0x1, 0x148, 0x97 },
|
||||
{ 0x1, 0xE8, 0xD7 },
|
||||
{ 0x1, 0xE8, 0x12A },
|
||||
{ 0x1, 0x117, 0x148 },
|
||||
{ 0x1, 0x117, 0x1C8 },
|
||||
{ 0x1, 0xB7, 0x188 },
|
||||
{ 0x1, 0x117, 0xF5 },
|
||||
{ 0x2, 0x28, 0x1D7 },
|
||||
{ 0x2, 0x1D7, 0x48 },
|
||||
{ 0x2, 0x1D7, 0x1D7 },
|
||||
{ 0x2, 0x28, 0x48 }
|
||||
};
|
||||
|
||||
static const WindowTemplate Unk_ov23_022569D8 = {
|
||||
0x3,
|
||||
0x19,
|
||||
0xD,
|
||||
0x6,
|
||||
0x4,
|
||||
0xD,
|
||||
0x21F
|
||||
};
|
||||
|
||||
static void ov23_022521F0(UndergroundMenu *param0, int param1)
|
||||
{
|
||||
MATHRandContext16 v0;
|
||||
int v1, v2, v3, v4, v5;
|
||||
Underground *v6 = SaveData_GetUnderground(FieldSystem_GetSaveData(param0->fieldSystem));
|
||||
|
||||
MATH_InitRand16(&v0, Underground_GetRandomSeed(v6) + param1);
|
||||
|
||||
for (v5 = 0; v5 < 5; v5++) {
|
||||
if (v5 == 0) {
|
||||
v1 = 33;
|
||||
} else {
|
||||
v1 = MATH_Rand16(&v0, 34 - 1) + 1;
|
||||
}
|
||||
|
||||
for (v4 = 0; v4 < v5; v4++) {
|
||||
if (param0->unk_274[v4] == v1) {
|
||||
v1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (v1 == 0) {
|
||||
v5--;
|
||||
continue;
|
||||
}
|
||||
|
||||
v3 = ov23_022542AC(v1);
|
||||
v2 = ov23_022542BC(v1);
|
||||
|
||||
if ((v3 == 0) && (v2 == 0)) {
|
||||
v5--;
|
||||
continue;
|
||||
}
|
||||
|
||||
param0->unk_274[v5] = v1;
|
||||
param0->unk_279[v5] = ov23_0225429C(v1);
|
||||
|
||||
if (param0->unk_279[v5] == 6) {
|
||||
param0->unk_279[v5] = MATH_Rand16(&v0, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
param0->unk_27E[v5] = MATH_Rand16(&v0, v2 - v3) + v3;
|
||||
}
|
||||
}
|
||||
|
||||
static void ov23_022522F0(UndergroundMenu *param0, int param1)
|
||||
{
|
||||
MATHRandContext16 v0;
|
||||
int v2, v3, v4, v5;
|
||||
SaveData *saveData = FieldSystem_GetSaveData(param0->fieldSystem);
|
||||
Underground *v7 = SaveData_GetUnderground(saveData);
|
||||
BOOL natdexObtained = Pokedex_IsNationalDexObtained(SaveData_GetPokedex(saveData));
|
||||
|
||||
MATH_InitRand16(&v0, Underground_GetRandomSeed(v7) + param1);
|
||||
|
||||
for (v5 = 0; v5 < 5; v5++) {
|
||||
int v1 = MATH_Rand16(&v0, 139 - 1) + 1;
|
||||
|
||||
for (v4 = 0; v4 < v5; v4++) {
|
||||
if (param0->unk_274[v4] == v1) {
|
||||
v1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (v1 == 0) {
|
||||
v5--;
|
||||
continue;
|
||||
}
|
||||
|
||||
param0->unk_274[v5] = v1;
|
||||
param0->unk_279[v5] = Good_GetSpherePriceType(v1);
|
||||
|
||||
if ((natdexObtained == 0) && (1 == Good_IsNatDexRequired(v1))) {
|
||||
v5--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (param0->unk_279[v5] == 0) {
|
||||
v5--;
|
||||
continue;
|
||||
} else if (param0->unk_279[v5] == 6) {
|
||||
param0->unk_279[v5] = MATH_Rand16(&v0, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
v3 = Good_GetSpherePriceMinSize(v1);
|
||||
v2 = Good_GetSpherePriceMaxSize(v1);
|
||||
|
||||
param0->unk_27E[v5] = MATH_Rand16(&v0, v2 - v3) + v3;
|
||||
}
|
||||
}
|
||||
|
||||
static int ov23_02252404(UndergroundMenu *param0, int param1, int param2)
|
||||
{
|
||||
BOOL v0 = 0;
|
||||
Underground *v1 = SaveData_GetUnderground(FieldSystem_GetSaveData(param0->fieldSystem));
|
||||
|
||||
if (param0->unk_279[param1] != UndergroundMenu_GetSphereTypeAtSlot(param2, param0)) {
|
||||
return 0xfffd;
|
||||
}
|
||||
|
||||
if (param0->unk_27E[param1] > UndergroundMenu_GetSphereSizeAtSlot(param2, param0)) {
|
||||
return 0xfffb;
|
||||
}
|
||||
|
||||
if (param0->unk_2AC == 1) {
|
||||
v0 = Underground_TryAddTrap(v1, param0->unk_274[param1]);
|
||||
} else if (param0->unk_2AC == 0) {
|
||||
v0 = Underground_TryAddGoodBag(v1, param0->unk_274[param1]);
|
||||
} else if (param0->unk_2AC == 2) {
|
||||
v0 = Underground_TryAddTreasure(v1, param0->unk_274[param1]);
|
||||
}
|
||||
|
||||
if (v0) {
|
||||
Underground_RemoveSphereAtSlot(v1, param2);
|
||||
} else {
|
||||
return 0xfffc;
|
||||
}
|
||||
|
||||
return param0->unk_274[param1];
|
||||
}
|
||||
|
||||
static void *ov23_022524B8(UndergroundMenu *param0)
|
||||
{
|
||||
ListMenuTemplate v0;
|
||||
int v1 = 3;
|
||||
|
||||
if (param0->unk_2AC == 2) {
|
||||
v1 = 2;
|
||||
}
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(param0);
|
||||
|
||||
param0->menuOptions = StringList_New(v1, HEAP_ID_FIELD1);
|
||||
|
||||
Window_Add(param0->fieldSystem->bgConfig, ¶m0->primaryWindow, 3, 19, 3, 12, v1 * 2, 13, ((((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - 12 * 6));
|
||||
Window_DrawStandardFrame(¶m0->primaryWindow, 1, 1024 - (18 + 12) - 9, 11);
|
||||
|
||||
{
|
||||
int v2, v3;
|
||||
|
||||
if (param0->unk_2AC == 1) {
|
||||
v3 = 13;
|
||||
ov23_022521F0(param0, param0->unk_288);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3, 0);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3 + 1, 1);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3 + 2, 0xfffffffe);
|
||||
} else if (param0->unk_2AC == 0) {
|
||||
v3 = 16;
|
||||
ov23_022522F0(param0, param0->unk_288);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3, 0);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3 + 1, 1);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), v3 + 2, 0xfffffffe);
|
||||
} else {
|
||||
v3 = 28;
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 28, 0);
|
||||
StringList_AddFromMessageBank(param0->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 22, 0xfffffffe);
|
||||
}
|
||||
}
|
||||
|
||||
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &v0, sizeof(ListMenuTemplate));
|
||||
|
||||
v0.choices = param0->menuOptions;
|
||||
v0.window = ¶m0->primaryWindow;
|
||||
v0.count = v1;
|
||||
v0.maxDisplay = v1;
|
||||
|
||||
param0->listMenuListPos = CommManUnderground_GetStoredListPos(19);
|
||||
param0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(19);
|
||||
|
||||
UndergroundMenu_MoveListCursorPosInBounds(param0, v0.maxDisplay, v0.count);
|
||||
|
||||
param0->unk_48 = ListMenu_New(&v0, param0->listMenuListPos, param0->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
param0->unk_2AE = param0->listMenuCursorPos;
|
||||
|
||||
Window_CopyToVRAM(¶m0->primaryWindow);
|
||||
|
||||
return param0;
|
||||
}
|
||||
|
||||
static void ov23_0225265C(ListMenu *param0, u32 param1, u8 param2)
|
||||
{
|
||||
UndergroundMenu *v0 = (UndergroundMenu *)ListMenu_GetAttribute(param0, 19);
|
||||
u32 v1 = param1;
|
||||
|
||||
Window_FillTilemap(&v0->secondaryWindow, 15);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 23 + v0->unk_2AB, v0->string);
|
||||
Text_AddPrinterWithParams(&v0->secondaryWindow, FONT_SYSTEM, v0->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
if (param1 != 0xfffffffe) {
|
||||
StringTemplate_SetUndergroundItemName(v0->template, 2, v0->unk_279[v1]);
|
||||
StringTemplate_SetNumber(v0->template, 6, v0->unk_27E[v1], 2, 1, 1);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 25, v0->string);
|
||||
StringTemplate_Format(v0->template, v0->fmtString, v0->string);
|
||||
Text_AddPrinterWithParams(&v0->secondaryWindow, FONT_SYSTEM, v0->fmtString, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
} else {
|
||||
(void)0;
|
||||
}
|
||||
|
||||
Window_ScheduleCopyToVRAM(&v0->secondaryWindow);
|
||||
|
||||
if (v1 == 0xfffffffe) {
|
||||
v1 = 0xfffffffe;
|
||||
}
|
||||
|
||||
if (v0->unk_2AC == 1) {
|
||||
UndergroundMenu_PrintTrapDescription(param0, v1, param2);
|
||||
} else if (v0->unk_2AC == 0) {
|
||||
UndergroundMenu_PrintGoodDescription(param0, v1, param2);
|
||||
} else {
|
||||
UndergroundMenu_PrintTreasureDescription(param0, v1, param2);
|
||||
}
|
||||
}
|
||||
|
||||
static void ov23_02252754(ListMenu *param0, u32 index, u8 onInit)
|
||||
{
|
||||
MATHRandContext16 v0;
|
||||
UndergroundMenu *v1 = (UndergroundMenu *)ListMenu_GetAttribute(param0, 19);
|
||||
Underground *v2 = SaveData_GetUnderground(FieldSystem_GetSaveData(v1->fieldSystem));
|
||||
int v3 = index, v4, v5;
|
||||
int v7 = 0, v8;
|
||||
|
||||
Window_FillTilemap(&v1->secondaryWindow, 15);
|
||||
|
||||
if (index != 0xfffffffe) {
|
||||
if (v1->unk_2AC == 1) {
|
||||
int v6 = UndergroundMenu_GetTrapAtSlot(v3, v1);
|
||||
MATH_InitRand16(&v0, Underground_GetRandomSeed(v2) + v1->unk_288 + v6);
|
||||
v7 = ov23_0225429C(v6);
|
||||
|
||||
if (v7 == 6) {
|
||||
v7 = MATH_Rand16(&v0, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
v4 = ov23_022542AC(v6);
|
||||
v5 = ov23_022542BC(v6);
|
||||
v8 = MATH_Rand16(&v0, v5 - v4) + v4;
|
||||
v8 = v8 / 2;
|
||||
} else if (v1->unk_2AC == 0) {
|
||||
const int v6 = UndergroundMenu_GetGoodAtSlotBag(v3, v1);
|
||||
MATH_InitRand16(&v0, Underground_GetRandomSeed(v2) + v1->unk_288 + v6);
|
||||
v7 = Good_GetSpherePriceType(v6);
|
||||
|
||||
if (v7 == 6) {
|
||||
v7 = MATH_Rand16(&v0, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
v4 = Good_GetSpherePriceMinSize(v6);
|
||||
v5 = Good_GetSpherePriceMaxSize(v6);
|
||||
v8 = MATH_Rand16(&v0, v5 - v4) + v4;
|
||||
v8 = v8 / 2;
|
||||
} else {
|
||||
int v6 = UndergroundMenu_GetTreasureAtSlot(v3, v1);
|
||||
MATH_InitRand16(&v0, Underground_GetRandomSeed(v2) + v1->unk_288 + v6);
|
||||
v7 = ov23_0225426C(v6);
|
||||
|
||||
if (v7 == 6) {
|
||||
v7 = MATH_Rand16(&v0, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
v4 = ov23_0225427C(v6);
|
||||
v5 = ov23_0225428C(v6);
|
||||
v8 = MATH_Rand16(&v0, v5 - v4) + v4;
|
||||
}
|
||||
}
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 23 + v1->unk_2AB, v1->string);
|
||||
Text_AddPrinterWithParams(&v1->secondaryWindow, FONT_SYSTEM, v1->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
if (index == 0xfffffffe) {
|
||||
(void)0;
|
||||
} else if (v7 != 0) {
|
||||
StringTemplate_SetUndergroundItemName(v1->template, 2, v7);
|
||||
StringTemplate_SetNumber(v1->template, 6, v8, 2, 1, 1);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 25, v1->string);
|
||||
StringTemplate_Format(v1->template, v1->fmtString, v1->string);
|
||||
Text_AddPrinterWithParams(&v1->secondaryWindow, FONT_SYSTEM, v1->fmtString, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
v1->unk_279[0] = v7;
|
||||
v1->unk_27E[0] = v8;
|
||||
} else {
|
||||
v1->unk_279[0] = v7;
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), 26, v1->string);
|
||||
Text_AddPrinterWithParams(&v1->secondaryWindow, FONT_SYSTEM, v1->string, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
}
|
||||
|
||||
Window_ScheduleCopyToVRAM(&v1->secondaryWindow);
|
||||
|
||||
if (v1->unk_2AC == 1) {
|
||||
UndergroundMenu_PrintTrapDescription(param0, index, onInit);
|
||||
} else if (v1->unk_2AC == 0) {
|
||||
UndergroundMenu_PrintGoodDescription(param0, index, onInit);
|
||||
} else {
|
||||
UndergroundMenu_PrintTreasureDescription(param0, index, onInit);
|
||||
}
|
||||
}
|
||||
|
||||
static int ov23_02252A04(int param0, void *param1)
|
||||
{
|
||||
UndergroundMenu *v0 = param1;
|
||||
|
||||
if (param0 >= 5) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return v0->unk_274[param0];
|
||||
}
|
||||
|
||||
static void ov23_02252A18(UndergroundMenu *param0)
|
||||
{
|
||||
ListMenuTemplate v0;
|
||||
const int v1 = 5 + 1;
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(param0);
|
||||
param0->menuOptions = StringList_New(v1, HEAP_ID_FIELD1);
|
||||
|
||||
Window_Add(param0->fieldSystem->bgConfig, ¶m0->primaryWindow, 3, 19, 3, 12, v1 * 2, 13, (((((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - 12 * 6) - 12 * 12));
|
||||
Window_DrawStandardFrame(¶m0->primaryWindow, 1, 1024 - (18 + 12) - 9, 11);
|
||||
|
||||
{
|
||||
MessageLoader *v2;
|
||||
int v3;
|
||||
|
||||
if (param0->unk_2AC == 1) {
|
||||
v2 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_TRAPS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_TRAPS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
} else if (param0->unk_2AC == 0) {
|
||||
v2 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_GOODS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_GOODS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
} else {
|
||||
v2 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ITEMS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_ITEMS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
}
|
||||
|
||||
for (v3 = 0; v3 < v1 - 1; v3++) {
|
||||
StringList_AddFromMessageBank(param0->menuOptions, v2, param0->unk_274[v3], v3);
|
||||
}
|
||||
|
||||
StringList_AddFromMessageBank(param0->menuOptions, v2, 0, 0xfffffffe);
|
||||
MessageLoader_Free(v2);
|
||||
}
|
||||
|
||||
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &v0, sizeof(ListMenuTemplate));
|
||||
|
||||
v0.choices = param0->menuOptions;
|
||||
v0.window = ¶m0->primaryWindow;
|
||||
v0.count = v1;
|
||||
v0.maxDisplay = v1;
|
||||
v0.cursorCallback = ov23_0225265C;
|
||||
v0.parent = param0;
|
||||
|
||||
param0->getItem = ov23_02252A04;
|
||||
param0->listMenuListPos = CommManUnderground_GetStoredListPos(13 + param0->unk_2AC);
|
||||
param0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(13 + param0->unk_2AC);
|
||||
param0->unk_2AE = param0->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_MoveListCursorPosInBounds(param0, v0.maxDisplay, v0.count);
|
||||
param0->unk_48 = ListMenu_New(&v0, param0->listMenuListPos, param0->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
Window_CopyToVRAM(¶m0->primaryWindow);
|
||||
}
|
||||
|
||||
static void ov23_02252B90(UndergroundMenu *param0, BOOL param1)
|
||||
{
|
||||
if (Window_IsInUse(¶m0->secondaryWindow)) {
|
||||
Window_EraseStandardFrame(¶m0->secondaryWindow, 1);
|
||||
Window_Remove(¶m0->secondaryWindow);
|
||||
}
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(param0);
|
||||
}
|
||||
|
||||
static void ov23_02252BB8(int param0, UndergroundMenu *param1)
|
||||
{
|
||||
int v0;
|
||||
|
||||
if (param1->unk_2AC == 1) {
|
||||
v0 = UndergroundMenu_GetTrapAtSlot(param0, param1);
|
||||
ov23_02252CF4(2, v0);
|
||||
} else if (param1->unk_2AC == 0) {
|
||||
v0 = UndergroundMenu_GetGoodAtSlotBag(param0, param1);
|
||||
ov23_02252D08(2, v0);
|
||||
} else {
|
||||
v0 = UndergroundMenu_GetTreasureAtSlot(param0, param1);
|
||||
ov23_02252CE0(2, v0);
|
||||
}
|
||||
|
||||
ov23_02252CE0(4, param1->unk_279[0]);
|
||||
ov23_02252C9C(10);
|
||||
}
|
||||
|
||||
static u32 ov23_02252C08(UndergroundMenu *param0)
|
||||
{
|
||||
Underground *v0 = SaveData_GetUnderground(FieldSystem_GetSaveData(param0->fieldSystem));
|
||||
|
||||
if (UndergroundInventory_TryAddSphere(param0->unk_279[0], param0->unk_27E[0])) {
|
||||
if (param0->unk_2AC == 1) {
|
||||
Underground_RemoveTrapAtSlot(v0, param0->unk_2A8);
|
||||
} else if (param0->unk_2AC == 0) {
|
||||
Underground_RemoveGoodAtSlotBag(v0, param0->unk_2A8);
|
||||
} else if (param0->unk_2AC == 2) {
|
||||
Underground_RemoveTreasureAtSlot(v0, param0->unk_2A8);
|
||||
}
|
||||
|
||||
return param0->unk_279[0];
|
||||
}
|
||||
|
||||
return 0xfffc;
|
||||
}
|
||||
|
||||
int ov23_02252C70(void *param0)
|
||||
{
|
||||
UndergroundMenu *v0 = param0;
|
||||
u32 v1 = 0xfffe;
|
||||
u32 v2 = 0xfffe;
|
||||
u16 v3, v4;
|
||||
|
||||
return v2;
|
||||
}
|
||||
|
||||
static void ov23_02252C78(UndergroundMenu *param0)
|
||||
{
|
||||
String_Free(param0->string);
|
||||
String_Free(param0->fmtString);
|
||||
StringTemplate_Free(param0->template);
|
||||
Heap_Free(param0);
|
||||
}
|
||||
|
||||
void *ov23_02252C98(int param0, FieldSystem *fieldSystem, int param2)
|
||||
{
|
||||
UndergroundMenu *v0 = NULL;
|
||||
return v0;
|
||||
}
|
||||
|
||||
int ov23_02252C9C(int param0)
|
||||
{
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetMiscTextPrinter(), TEXT_BANK_UNDERGROUND_NPCS, MSG_LOADER_LOAD_ON_DEMAND);
|
||||
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetMiscTextPrinter(), CommInfo_TrainerInfo(CommSys_CurNetId()));
|
||||
|
||||
return UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), param0, FALSE, NULL);
|
||||
}
|
||||
|
||||
void ov23_02252CD4(void)
|
||||
{
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
|
||||
}
|
||||
|
||||
void ov23_02252CE0(int param0, int param1)
|
||||
{
|
||||
UndergroundTextPrinter_SetUndergroundItemName(CommManUnderground_GetMiscTextPrinter(), param0, param1);
|
||||
}
|
||||
|
||||
void ov23_02252CF4(int param0, int param1)
|
||||
{
|
||||
UndergroundTextPrinter_SetUndergroundTrapNameWithIndex(CommManUnderground_GetMiscTextPrinter(), param0, param1);
|
||||
}
|
||||
|
||||
void ov23_02252D08(int param0, int param1)
|
||||
{
|
||||
UndergroundTextPrinter_SetGoodNameWithIndex(CommManUnderground_GetMiscTextPrinter(), param0, param1);
|
||||
}
|
||||
|
||||
static void ov23_02252D1C(UndergroundMenu *param0)
|
||||
{
|
||||
if (!Window_IsInUse(¶m0->secondaryWindow)) {
|
||||
Window_Add(param0->fieldSystem->bgConfig, ¶m0->secondaryWindow, 3, 1, 12, 12, 4, 13, 1);
|
||||
Window_DrawStandardFrame(¶m0->secondaryWindow, 1, 1024 - (18 + 12) - 9, 11);
|
||||
}
|
||||
|
||||
Window_FillTilemap(¶m0->secondaryWindow, 15);
|
||||
Window_CopyToVRAM(¶m0->secondaryWindow);
|
||||
}
|
||||
|
||||
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *menu, int bankEntry)
|
||||
{
|
||||
Window_Add(menu->fieldSystem->bgConfig, &menu->menuDescriptionWindow, BG_LAYER_MAIN_3, 1, 1, 7, 4, 13, 51);
|
||||
Window_DrawStandardFrame(&menu->menuDescriptionWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
|
||||
|
||||
Window_FillTilemap(&menu->menuDescriptionWindow, 15);
|
||||
Window_CopyToVRAM(&menu->menuDescriptionWindow);
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), bankEntry, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->menuDescriptionWindow, FONT_SYSTEM, menu->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
Window_ScheduleCopyToVRAM(&menu->menuDescriptionWindow);
|
||||
}
|
||||
|
||||
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *menu)
|
||||
{
|
||||
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
|
||||
Window_EraseStandardFrame(&menu->menuDescriptionWindow, TRUE);
|
||||
Window_Remove(&menu->menuDescriptionWindow);
|
||||
}
|
||||
}
|
||||
|
||||
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *menu)
|
||||
{
|
||||
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
|
||||
Window_EraseStandardFrame(&menu->menuDescriptionWindow, FALSE);
|
||||
Window_Remove(&menu->menuDescriptionWindow);
|
||||
}
|
||||
}
|
||||
|
||||
static int ov23_02252E3C(int param0, int param1, int *param2)
|
||||
{
|
||||
int v0, v1 = NELEMS(Unk_ov23_02257674);
|
||||
|
||||
for (v0 = 0; v0 < v1; v0++) {
|
||||
if ((Unk_ov23_02257674[v0].unk_02 == param0) && (Unk_ov23_02257674[v0].unk_04 == param1)) {
|
||||
*param2 = v0;
|
||||
return Unk_ov23_02257674[v0].unk_00;
|
||||
}
|
||||
}
|
||||
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ov23_02252E70(SysTask *param0, void *param1)
|
||||
{
|
||||
UndergroundMenu *v0 = param1;
|
||||
u32 v1 = 0xfffe;
|
||||
u32 v2 = 0xfffe;
|
||||
u16 v3, v4, v5;
|
||||
|
||||
switch (v0->state) {
|
||||
case 0:
|
||||
if (v0->unk_2AC == 2) {
|
||||
ov23_02252C9C(27);
|
||||
} else {
|
||||
ov23_02252C9C(0);
|
||||
}
|
||||
|
||||
v0->state = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
v0->state = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
ov23_022524B8(v0);
|
||||
v0->state = 3;
|
||||
break;
|
||||
case 3:
|
||||
v1 = ListMenu_ProcessInput(v0->unk_48);
|
||||
ListMenu_GetListAndCursorPos(v0->unk_48, &v3, &v4);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_19, v4, v3);
|
||||
|
||||
v5 = v0->unk_2AE;
|
||||
ListMenu_CalcTrueCursorPos(v0->unk_48, &v0->unk_2AE);
|
||||
|
||||
if (v5 != v0->unk_2AE) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
switch (v1) {
|
||||
case 0xfffffffe:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
ov23_02252B90(v0, 0);
|
||||
v0->state = 17;
|
||||
break;
|
||||
case 0xffffffff:
|
||||
break;
|
||||
default:
|
||||
if (v0->unk_2AC == 2) {
|
||||
v0->unk_2AB = 1;
|
||||
v0->state = 12;
|
||||
} else {
|
||||
v0->unk_2AB = v1;
|
||||
|
||||
if (v1 == 0) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
v0->state = 4;
|
||||
} else {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
v0->state = 12;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
ov23_02252D1C(v0);
|
||||
ov23_02252A18(v0);
|
||||
v0->state = 5;
|
||||
break;
|
||||
case 5:
|
||||
v1 = ListMenu_ProcessInput(v0->unk_48);
|
||||
ListMenu_GetListAndCursorPos(v0->unk_48, &v3, &v4);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_13 + v0->unk_2AC, v4, v3);
|
||||
|
||||
v5 = v0->unk_2AE;
|
||||
ListMenu_CalcTrueCursorPos(v0->unk_48, &v0->unk_2AE);
|
||||
|
||||
if (v5 != v0->unk_2AE) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
if (v1 == 0xfffffffe) {
|
||||
v1 = 0xfffffffe;
|
||||
}
|
||||
|
||||
if (v1 != 0xffffffff) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
}
|
||||
|
||||
switch (v1) {
|
||||
case 0xfffffffe:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
ov23_02252B90(v0, 1);
|
||||
v0->state = 2;
|
||||
break;
|
||||
case 0xffffffff:
|
||||
break;
|
||||
default:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
v0->unk_2A8 = v1;
|
||||
|
||||
if (v0->unk_2AC == 1) {
|
||||
ov23_02252CF4(2, v0->unk_274[v0->unk_2A8]);
|
||||
} else if (v0->unk_2AC == 0) {
|
||||
ov23_02252D08(2, v0->unk_274[v0->unk_2A8]);
|
||||
}
|
||||
|
||||
ov23_02252C9C(1);
|
||||
v0->state = 6;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
||||
v0->state = 7;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
UndergroundMenu_EraseCurrentMenu(v0);
|
||||
|
||||
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(12);
|
||||
v0->listMenuListPos = CommManUnderground_GetStoredListPos(12);
|
||||
|
||||
ov23_02250184(v0);
|
||||
UndergroundMenu_PrintMenuDescription(v0, 19);
|
||||
|
||||
if (v0->unk_2AC == 1) {
|
||||
ov23_02252CF4(2, v0->unk_274[v0->unk_2A8]);
|
||||
} else if (v0->unk_2AC == 0) {
|
||||
ov23_02252D08(2, v0->unk_274[v0->unk_2A8]);
|
||||
}
|
||||
|
||||
v0->state = 8;
|
||||
break;
|
||||
case 8:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
v1 = UndergroundItemListMenu_ProcessInput(v0->itemListMenu);
|
||||
ListMenu_GetListAndCursorPos(v0->itemListMenu->listMenu, &v3, &v4);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_12, v4, v3);
|
||||
|
||||
if (v1 != 0xffffffff) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
}
|
||||
|
||||
switch (v1) {
|
||||
case 0xffffffff:
|
||||
break;
|
||||
case 0xfffffffe:
|
||||
UndergroundMenu_RemoveDescriptionWindow(v0);
|
||||
v0->state = 4;
|
||||
break;
|
||||
default:
|
||||
v1 = ov23_02252404(v0, v0->unk_2A8, v1);
|
||||
ov23_02252B90(v0, 1);
|
||||
UndergroundMenu_RemoveDescriptionWindow(v0);
|
||||
|
||||
if (v1 == 0xfffc) {
|
||||
ov23_02252C9C(3);
|
||||
v0->state = 10;
|
||||
} else if (v1 == 0xfffd) {
|
||||
ov23_02252C9C(4);
|
||||
v0->state = 10;
|
||||
} else if (v1 == 0xfffb) {
|
||||
ov23_02252C9C(5);
|
||||
v0->state = 10;
|
||||
} else {
|
||||
v0->unk_2A8 = v1;
|
||||
ov23_02252C9C(2);
|
||||
v0->state = 9;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
ov23_02252C9C(3);
|
||||
v0->state = 10;
|
||||
break;
|
||||
case 9:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
||||
if (v0->unk_2AC == 1) {
|
||||
ov23_02252CF4(2, v0->unk_2A8);
|
||||
} else if (v0->unk_2AC == 0) {
|
||||
ov23_02252D08(2, v0->unk_2A8);
|
||||
}
|
||||
|
||||
ov23_02252C9C(6);
|
||||
Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2);
|
||||
|
||||
v0->state = 10;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
||||
ov23_02252C9C(8);
|
||||
v0->state = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
ov23_02252D1C(v0);
|
||||
|
||||
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(16 + v0->unk_2AC);
|
||||
v0->listMenuListPos = CommManUnderground_GetStoredListPos(16 + v0->unk_2AC);
|
||||
v0->cursorCallback = ov23_02252754;
|
||||
|
||||
if (v0->unk_2AC == 1) {
|
||||
ov23_0224FDBC(v0);
|
||||
UndergroundMenu_PrintMenuDescription(v0, 20);
|
||||
} else if (v0->unk_2AC == 0) {
|
||||
ov23_02250CB0(v0);
|
||||
UndergroundMenu_PrintMenuDescription(v0, 21);
|
||||
} else {
|
||||
ov23_02250578(v0);
|
||||
UndergroundMenu_PrintMenuDescription(v0, 29);
|
||||
}
|
||||
|
||||
v0->state = 13;
|
||||
break;
|
||||
case 13:
|
||||
v1 = UndergroundItemListMenu_ProcessInput(v0->itemListMenu);
|
||||
ListMenu_GetListAndCursorPos(v0->itemListMenu->listMenu, &v3, &v4);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_16 + v0->unk_2AC, v4, v3);
|
||||
|
||||
switch (v1) {
|
||||
case 0xfffffffe:
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
ov23_02252B90(v0, 1);
|
||||
UndergroundMenu_RemoveDescriptionWindow(v0);
|
||||
v0->state = 2;
|
||||
break;
|
||||
case 0xffffffff:
|
||||
break;
|
||||
default:
|
||||
if (v0->unk_279[0] != 0) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
v0->unk_2A8 = v1;
|
||||
ov23_02252B90(v0, 1);
|
||||
UndergroundMenu_RemoveDescriptionWindow(v0);
|
||||
ov23_02252BB8(v1, v0);
|
||||
v0->state = 14;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
v0->yesNoMenu = Menu_MakeYesNoChoice(v0->fieldSystem->bgConfig, &Unk_ov23_022569D8, 1024 - (18 + 12) - 9, 11, 4);
|
||||
v0->state = 15;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
v1 = Menu_ProcessInputAndHandleExit(v0->yesNoMenu, 4);
|
||||
|
||||
if (v1 == 0xffffffff) {
|
||||
return;
|
||||
} else if (v1 == 0) {
|
||||
v1 = ov23_02252C08(v0);
|
||||
|
||||
if (v1 == 0xfffc) {
|
||||
ov23_02252C9C(3);
|
||||
v0->state = 10;
|
||||
} else {
|
||||
ov23_02252C9C(11);
|
||||
v0->state = 16;
|
||||
}
|
||||
} else {
|
||||
v0->state = 17;
|
||||
}
|
||||
|
||||
v0->yesNoMenu = NULL;
|
||||
break;
|
||||
case 16:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
if (gSystem.pressedKeys & PAD_BUTTON_A) {
|
||||
UndergroundTextPrinter_SetTwoDigitNumber(CommManUnderground_GetMiscTextPrinter(), v0->unk_27E[0]);
|
||||
ov23_02252CE0(2, v0->unk_279[0]);
|
||||
ov23_02252C9C(7);
|
||||
|
||||
Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2);
|
||||
|
||||
v0->state = 10;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 17:
|
||||
ov23_02252C9C(9);
|
||||
v0->state = 18;
|
||||
break;
|
||||
case 18:
|
||||
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
|
||||
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
|
||||
ov23_02252CD4();
|
||||
ov23_02252C78(v0);
|
||||
CommManUnderground_ClearCurrentSysTaskInfo();
|
||||
SysTask_Done(param0);
|
||||
CommPlayerMan_ResumeFieldSystem();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ov23_022534A0(FieldSystem *fieldSystem)
|
||||
{
|
||||
ListMenuTemplate v0;
|
||||
int v1 = CommPlayer_GetXInFrontOfPlayer(CommSys_CurNetId());
|
||||
int v2 = CommPlayer_GetZInFrontOfPlayer(CommSys_CurNetId());
|
||||
int v3 = CommPlayer_GetOppositeDir(CommPlayer_Dir(CommSys_CurNetId()));
|
||||
UndergroundMenu *v4;
|
||||
const int v5 = 6;
|
||||
int v6;
|
||||
int v7 = ov23_02252E3C(v1, v2, &v6);
|
||||
|
||||
CommManUnderground_SetStoredPosKey(UNDERGROUND_STORED_POS_KEY_3 + v7);
|
||||
|
||||
v4 = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
|
||||
MI_CpuClear8(v4, sizeof(UndergroundMenu));
|
||||
|
||||
v4->fieldSystem = fieldSystem;
|
||||
v4->unk_2AC = v7;
|
||||
v4->unk_288 = v6;
|
||||
v4->string = String_Init((50 * 2), HEAP_ID_FIELD1);
|
||||
v4->fmtString = String_Init((50 * 2), HEAP_ID_FIELD1);
|
||||
v4->template = StringTemplate_Default(HEAP_ID_FIELD1);
|
||||
v4->state = 0;
|
||||
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
v4->sysTask = SysTask_Start(ov23_02252E70, v4, 10000);
|
||||
CommManUnderground_SetCurrentSysTask(v4, v4->sysTask, UndergroundMenu_ResetBrightnessAndExit);
|
||||
|
||||
{
|
||||
int objEventCount, i;
|
||||
const ObjectEvent *objEventList;
|
||||
MapObject *mapObj;
|
||||
|
||||
objEventCount = MapHeaderData_GetNumObjectEvents(v4->fieldSystem);
|
||||
objEventList = MapHeaderData_GetObjectEvents(v4->fieldSystem);
|
||||
|
||||
for (i = 0; i < objEventCount; i++) {
|
||||
if (objEventList[i].x == v1 && objEventList[i].z == v2) {
|
||||
mapObj = MapObjMan_LocalMapObjByIndex(v4->fieldSystem->mapObjMan, i);
|
||||
MapObject_TryFace(mapObj, v3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
#include "overlay023/ov23_0225426C.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct {
|
||||
u8 unk_00[3];
|
||||
} UnkStruct_ov23_02256A00;
|
||||
|
||||
static const UnkStruct_ov23_02256A00 Unk_ov23_02256A00[] = {
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x2, 0xF, 0x14 },
|
||||
{ 0x1, 0x32, 0x3C },
|
||||
{ 0x3, 0x19, 0x23 },
|
||||
{ 0x2, 0x23, 0x2D },
|
||||
{ 0x2, 0x19, 0x23 },
|
||||
{ 0x3, 0x19, 0x23 },
|
||||
{ 0x1, 0x19, 0x23 },
|
||||
{ 0x2, 0x19, 0x23 },
|
||||
{ 0x3, 0x19, 0x23 },
|
||||
{ 0x4, 0x19, 0x23 },
|
||||
{ 0x5, 0x19, 0x23 },
|
||||
{ 0x4, 0x0, 0x0 },
|
||||
{ 0x4, 0x1E, 0x32 },
|
||||
{ 0x5, 0x1E, 0x32 },
|
||||
{ 0x4, 0x1E, 0x32 },
|
||||
{ 0x5, 0x1E, 0x32 },
|
||||
{ 0x1, 0x1E, 0x32 },
|
||||
{ 0x2, 0x19, 0x23 },
|
||||
{ 0x2, 0x5, 0xA },
|
||||
{ 0x2, 0x28, 0x32 },
|
||||
{ 0x3, 0x14, 0x19 },
|
||||
{ 0x4, 0x14, 0x19 },
|
||||
{ 0x1, 0x14, 0x19 },
|
||||
{ 0x5, 0x14, 0x19 },
|
||||
{ 0x3, 0x5, 0xA },
|
||||
{ 0x4, 0x1E, 0x32 },
|
||||
{ 0x5, 0x1E, 0x32 },
|
||||
{ 0x2, 0x28, 0x32 },
|
||||
{ 0x1, 0x28, 0x32 },
|
||||
{ 0x2, 0x23, 0x28 },
|
||||
{ 0x1, 0x23, 0x28 },
|
||||
{ 0x3, 0x28, 0x32 },
|
||||
{ 0x4, 0x28, 0x32 },
|
||||
{ 0x3, 0x46, 0x50 },
|
||||
{ 0x4, 0x46, 0x50 },
|
||||
{ 0x1, 0x46, 0x50 },
|
||||
{ 0x5, 0x46, 0x50 },
|
||||
{ 0x4, 0x46, 0x50 },
|
||||
{ 0x1, 0x46, 0x50 },
|
||||
{ 0x2, 0x46, 0x50 },
|
||||
{ 0x5, 0x46, 0x50 },
|
||||
{ 0x4, 0x46, 0x50 },
|
||||
{ 0x2, 0x46, 0x50 },
|
||||
{ 0x5, 0x46, 0x50 },
|
||||
{ 0x1, 0x46, 0x50 },
|
||||
{ 0x2, 0x46, 0x50 },
|
||||
{ 0x3, 0x46, 0x50 },
|
||||
{ 0x3, 0x46, 0x50 },
|
||||
{ 0x1, 0x46, 0x50 }
|
||||
};
|
||||
|
||||
const u8 ov23_0225426C(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256A00[param0].unk_00[0];
|
||||
}
|
||||
|
||||
const u8 ov23_0225427C(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256A00[param0].unk_00[1];
|
||||
}
|
||||
|
||||
const u8 ov23_0225428C(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256A00[param0].unk_00[2];
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
#include "overlay023/ov23_0225429C.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct {
|
||||
u8 unk_00[3];
|
||||
} UnkStruct_ov23_02256AB4;
|
||||
|
||||
static const UnkStruct_ov23_02256AB4 Unk_ov23_02256AB4[] = {
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x4, 0x3, 0x6 },
|
||||
{ 0x3, 0x3, 0x6 },
|
||||
{ 0x4, 0x3, 0x6 },
|
||||
{ 0x3, 0x3, 0x6 },
|
||||
{ 0x4, 0xC, 0xF },
|
||||
{ 0x3, 0xC, 0xF },
|
||||
{ 0x4, 0xC, 0xF },
|
||||
{ 0x3, 0xC, 0xF },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x1, 0x3, 0x6 },
|
||||
{ 0x1, 0xC, 0xF },
|
||||
{ 0x2, 0xA, 0xC },
|
||||
{ 0x2, 0xA, 0xC },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x3, 0x5, 0x7 },
|
||||
{ 0x3, 0xC, 0x10 },
|
||||
{ 0x4, 0x3, 0x6 },
|
||||
{ 0x4, 0x8, 0xF },
|
||||
{ 0x4, 0x5, 0x7 },
|
||||
{ 0x4, 0xC, 0x10 },
|
||||
{ 0x2, 0x5, 0x9 },
|
||||
{ 0x2, 0x5, 0x9 },
|
||||
{ 0x2, 0x5, 0x9 },
|
||||
{ 0x2, 0x5, 0x9 },
|
||||
{ 0x5, 0xF, 0x13 },
|
||||
{ 0x5, 0x1E, 0x28 },
|
||||
{ 0x3, 0x5, 0x9 },
|
||||
{ 0x3, 0x14, 0x1E },
|
||||
{ 0x0, 0x0, 0x0 },
|
||||
{ 0x6, 0xF, 0x14 }
|
||||
};
|
||||
|
||||
const u8 ov23_0225429C(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256AB4[param0].unk_00[0];
|
||||
}
|
||||
|
||||
const u8 ov23_022542AC(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256AB4[param0].unk_00[1];
|
||||
}
|
||||
|
||||
const u8 ov23_022542BC(const int param0)
|
||||
{
|
||||
return Unk_ov23_02256AB4[param0].unk_00[2];
|
||||
}
|
||||
@@ -5,12 +5,12 @@
|
||||
|
||||
#include "constants/field/map_prop.h"
|
||||
#include "constants/field_base_tiles.h"
|
||||
#include "constants/goods.h"
|
||||
#include "constants/heap.h"
|
||||
#include "constants/map_object.h"
|
||||
#include "constants/traps.h"
|
||||
#include "generated/goods.h"
|
||||
#include "generated/movement_actions.h"
|
||||
#include "generated/trainer_score_events.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
#include "struct_defs/underground_record.h"
|
||||
|
||||
62
src/overlay023/trap_prices.c
Normal file
62
src/overlay023/trap_prices.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include "overlay023/trap_prices.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "overlay023/underground_defs.h"
|
||||
|
||||
// TODO: make this error if it doesn't contain an entry for every trap
|
||||
static const SpherePrice sTrapPrices[] = {
|
||||
[TRAP_NONE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_MOVE_UP] = { .sphereType = BLUE_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_MOVE_RIGHT] = { .sphereType = RED_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_MOVE_DOWN] = { .sphereType = BLUE_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_MOVE_LEFT] = { .sphereType = RED_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_HURL_UP] = { .sphereType = BLUE_SPHERE, .minSize = 12, .maxSize = 15 },
|
||||
[TRAP_HURL_RIGHT] = { .sphereType = RED_SPHERE, .minSize = 12, .maxSize = 15 },
|
||||
[TRAP_HURL_DOWN] = { .sphereType = BLUE_SPHERE, .minSize = 12, .maxSize = 15 },
|
||||
[TRAP_HURL_LEFT] = { .sphereType = RED_SPHERE, .minSize = 12, .maxSize = 15 },
|
||||
[TRAP_WARP_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_HI_WARP_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_HOLE] = { .sphereType = PRISM_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_PIT] = { .sphereType = PRISM_SPHERE, .minSize = 12, .maxSize = 15 },
|
||||
[TRAP_REVERSE] = { .sphereType = PALE_SPHERE, .minSize = 10, .maxSize = 12 },
|
||||
[TRAP_CONFUSE] = { .sphereType = PALE_SPHERE, .minSize = 10, .maxSize = 12 },
|
||||
[TRAP_RUN_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_FADE_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_SLOW_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_SMOKE] = { .sphereType = RED_SPHERE, .minSize = 5, .maxSize = 7 },
|
||||
[TRAP_BIG_SMOKE] = { .sphereType = RED_SPHERE, .minSize = 12, .maxSize = 16 },
|
||||
[TRAP_ROCK] = { .sphereType = BLUE_SPHERE, .minSize = 3, .maxSize = 6 },
|
||||
[TRAP_ROCKFALL] = { .sphereType = BLUE_SPHERE, .minSize = 8, .maxSize = 15 },
|
||||
[TRAP_FOAM] = { .sphereType = BLUE_SPHERE, .minSize = 5, .maxSize = 7 },
|
||||
[TRAP_BUBBLE] = { .sphereType = BLUE_SPHERE, .minSize = 12, .maxSize = 16 },
|
||||
[TRAP_ALERT_1] = { .sphereType = PALE_SPHERE, .minSize = 5, .maxSize = 9 },
|
||||
[TRAP_ALERT_2] = { .sphereType = PALE_SPHERE, .minSize = 5, .maxSize = 9 },
|
||||
[TRAP_ALERT_3] = { .sphereType = PALE_SPHERE, .minSize = 5, .maxSize = 9 },
|
||||
[TRAP_ALERT_4] = { .sphereType = PALE_SPHERE, .minSize = 5, .maxSize = 9 },
|
||||
[TRAP_LEAF] = { .sphereType = GREEN_SPHERE, .minSize = 15, .maxSize = 19 },
|
||||
[TRAP_FLOWER] = { .sphereType = GREEN_SPHERE, .minSize = 30, .maxSize = 40 },
|
||||
[TRAP_EMBER] = { .sphereType = RED_SPHERE, .minSize = 5, .maxSize = 9 },
|
||||
[TRAP_FIRE] = { .sphereType = RED_SPHERE, .minSize = 20, .maxSize = 30 },
|
||||
[TRAP_RADAR_DUMMY] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[TRAP_DIGGER_DRILL] = { .sphereType = RANDOM_SPHERE_TYPE, .minSize = 15, .maxSize = 20 }
|
||||
};
|
||||
|
||||
// params need to be const to match
|
||||
const u8 TrapGetSpherePriceType(const int trapID)
|
||||
{
|
||||
return sTrapPrices[trapID].sphereType;
|
||||
}
|
||||
|
||||
const u8 TrapGetSpherePriceMinSize(const int trapID)
|
||||
{
|
||||
return sTrapPrices[trapID].minSize;
|
||||
}
|
||||
|
||||
const u8 TrapGetSpherePriceMaxSize(const int trapID)
|
||||
{
|
||||
return sTrapPrices[trapID].maxSize;
|
||||
}
|
||||
86
src/overlay023/treasure_prices.c
Normal file
86
src/overlay023/treasure_prices.c
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "overlay023/treasure_prices.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "overlay023/ov23_0223E140.h"
|
||||
#include "overlay023/underground_defs.h"
|
||||
|
||||
// TODO: make this error if it doesn't contain an entry for every treasure
|
||||
static const SpherePrice sTreasurePrices[] = {
|
||||
[MINING_TREASURE_NONE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_SMALL_PRISM_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_SMALL_PALE_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_SMALL_RED_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_SMALL_BLUE_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_SMALL_GREEN_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_LARGE_PRISM_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_LARGE_PALE_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_LARGE_RED_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_LARGE_BLUE_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_LARGE_GREEN_SPHERE] = { .sphereType = SPHERE_NONE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_TREASURE_OVAL_STONE] = { .sphereType = PALE_SPHERE, .minSize = 15, .maxSize = 20 },
|
||||
[MINING_TREASURE_ODD_KEYSTONE] = { .sphereType = PRISM_SPHERE, .minSize = 50, .maxSize = 60 },
|
||||
[MINING_TREASURE_SUN_STONE] = { .sphereType = RED_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_STAR_PIECE] = { .sphereType = PALE_SPHERE, .minSize = 35, .maxSize = 45 },
|
||||
[MINING_TREASURE_MOON_STONE] = { .sphereType = PALE_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_HARD_STONE] = { .sphereType = RED_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_THUNDERSTONE] = { .sphereType = PRISM_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_EVERSTONE] = { .sphereType = PALE_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_FIRE_STONE] = { .sphereType = RED_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_WATER_STONE] = { .sphereType = BLUE_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_LEAF_STONE] = { .sphereType = GREEN_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_NUGGET_UNUSED] = { .sphereType = BLUE_SPHERE, .minSize = 0, .maxSize = 0 },
|
||||
[MINING_TREASURE_HELIX_FOSSIL] = { .sphereType = BLUE_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_DOME_FOSSIL] = { .sphereType = GREEN_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_CLAW_FOSSIL] = { .sphereType = BLUE_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_ROOT_FOSSIL] = { .sphereType = GREEN_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_OLD_AMBER] = { .sphereType = PRISM_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_RARE_BONE] = { .sphereType = PALE_SPHERE, .minSize = 25, .maxSize = 35 },
|
||||
[MINING_TREASURE_REVIVE] = { .sphereType = PALE_SPHERE, .minSize = 5, .maxSize = 10 },
|
||||
[MINING_TREASURE_MAX_REVIVE] = { .sphereType = PALE_SPHERE, .minSize = 40, .maxSize = 50 },
|
||||
[MINING_TREASURE_RED_SHARD] = { .sphereType = RED_SPHERE, .minSize = 20, .maxSize = 25 },
|
||||
[MINING_TREASURE_BLUE_SHARD] = { .sphereType = BLUE_SPHERE, .minSize = 20, .maxSize = 25 },
|
||||
[MINING_TREASURE_YELLOW_SHARD] = { .sphereType = PRISM_SPHERE, .minSize = 20, .maxSize = 25 },
|
||||
[MINING_TREASURE_GREEN_SHARD] = { .sphereType = GREEN_SPHERE, .minSize = 20, .maxSize = 25 },
|
||||
[MINING_TREASURE_HEART_SCALE] = { .sphereType = RED_SPHERE, .minSize = 5, .maxSize = 10 },
|
||||
[MINING_TREASURE_ARMOR_FOSSIL] = { .sphereType = BLUE_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_SKULL_FOSSIL] = { .sphereType = GREEN_SPHERE, .minSize = 30, .maxSize = 50 },
|
||||
[MINING_TREASURE_LIGHT_CLAY] = { .sphereType = PALE_SPHERE, .minSize = 40, .maxSize = 50 },
|
||||
[MINING_TREASURE_IRON_BALL] = { .sphereType = PRISM_SPHERE, .minSize = 40, .maxSize = 50 },
|
||||
[MINING_TREASURE_ICY_ROCK] = { .sphereType = PALE_SPHERE, .minSize = 35, .maxSize = 40 },
|
||||
[MINING_TREASURE_SMOOTH_ROCK] = { .sphereType = PRISM_SPHERE, .minSize = 35, .maxSize = 40 },
|
||||
[MINING_TREASURE_HEAT_ROCK] = { .sphereType = RED_SPHERE, .minSize = 40, .maxSize = 50 },
|
||||
[MINING_TREASURE_DAMP_ROCK] = { .sphereType = BLUE_SPHERE, .minSize = 40, .maxSize = 50 },
|
||||
[MINING_TREASURE_FLAME_PLATE] = { .sphereType = RED_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_SPLASH_PLATE] = { .sphereType = BLUE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_ZAP_PLATE] = { .sphereType = PRISM_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_MEADOW_PLATE] = { .sphereType = GREEN_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_ICICLE_PLATE] = { .sphereType = BLUE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_FIST_PLATE] = { .sphereType = PRISM_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_TOXIC_PLATE] = { .sphereType = PALE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_EARTH_PLATE] = { .sphereType = GREEN_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_SKY_PLATE] = { .sphereType = BLUE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_MIND_PLATE] = { .sphereType = PALE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_INSECT_PLATE] = { .sphereType = GREEN_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_STONE_PLATE] = { .sphereType = PRISM_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_SPOOKY_PLATE] = { .sphereType = PALE_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_DRACO_PLATE] = { .sphereType = RED_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_DREAD_PLATE] = { .sphereType = RED_SPHERE, .minSize = 70, .maxSize = 80 },
|
||||
[MINING_TREASURE_IRON_PLATE] = { .sphereType = PRISM_SPHERE, .minSize = 70, .maxSize = 80 }
|
||||
};
|
||||
|
||||
u8 Treasure_GetSpherePriceType(int treasureID)
|
||||
{
|
||||
return sTreasurePrices[treasureID].sphereType;
|
||||
}
|
||||
|
||||
u8 Treasure_GetSpherePriceMinSize(int treasureID)
|
||||
{
|
||||
return sTreasurePrices[treasureID].minSize;
|
||||
}
|
||||
|
||||
u8 Treasure_GetSpherePriceMaxSize(int treasureID)
|
||||
{
|
||||
return sTreasurePrices[treasureID].maxSize;
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/heap.h"
|
||||
#include "constants/traps.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "overlay005/sprite_resource_manager.h"
|
||||
#include "overlay023/ov23_0223E140.h"
|
||||
#include "overlay023/ov23_02241F74.h"
|
||||
#include "overlay023/ov23_022521F0.h"
|
||||
#include "overlay023/secret_bases.h"
|
||||
#include "overlay023/underground_item_list_menu.h"
|
||||
#include "overlay023/underground_player.h"
|
||||
@@ -20,6 +19,7 @@
|
||||
#include "overlay023/underground_spheres.h"
|
||||
#include "overlay023/underground_text_printer.h"
|
||||
#include "overlay023/underground_traps.h"
|
||||
#include "overlay023/underground_vendors.h"
|
||||
|
||||
#include "bag.h"
|
||||
#include "bg_window.h"
|
||||
@@ -547,7 +547,7 @@ static void UndergroundMenu_InitStartMenu(UndergroundMenu *menu)
|
||||
template.loopAround = TRUE;
|
||||
|
||||
menu->menu = Menu_New(&template, 28, 4, menu->menuCursorPos, HEAP_ID_FIELD2, PAD_BUTTON_B | PAD_BUTTON_X);
|
||||
menu->unk_48 = NULL;
|
||||
menu->listMenu = NULL;
|
||||
|
||||
Window_ScheduleCopyToVRAM(&menu->primaryWindow);
|
||||
UndergroundMenu_InitStartMenuSprites(menu, optionList, NELEMS(sUndergroundMenuOptions));
|
||||
@@ -696,9 +696,9 @@ void UndergroundMenu_EraseCurrentMenu(UndergroundMenu *menu)
|
||||
menu->itemListMenu = NULL;
|
||||
}
|
||||
|
||||
if (menu->unk_48) {
|
||||
ListMenu_Free(menu->unk_48, NULL, NULL);
|
||||
menu->unk_48 = NULL;
|
||||
if (menu->listMenu) {
|
||||
ListMenu_Free(menu->listMenu, NULL, NULL);
|
||||
menu->listMenu = NULL;
|
||||
} else if (menu->spriteCount) {
|
||||
UndergroundMenu_FreeSprites(menu);
|
||||
Menu_Free(menu->menu, NULL);
|
||||
@@ -830,7 +830,7 @@ void UndergroundMenu_PrintTrapDescription(ListMenu *listMenu, u32 index, u8 onIn
|
||||
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetItemNameTextPrinter(), bankEntry, FALSE, NULL);
|
||||
}
|
||||
|
||||
void ov23_0224FDBC(UndergroundMenu *menu)
|
||||
void UndergroundMenu_OpenSellTrapsMenu(UndergroundMenu *menu)
|
||||
{
|
||||
menu->getItemCount = UndergroundMenu_GetTrapCount;
|
||||
menu->getItem = UndergroundMenu_GetTrapAtSlot;
|
||||
@@ -847,7 +847,7 @@ void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *menu)
|
||||
menu->getItem = UndergroundMenu_GetTrapAtSlot;
|
||||
menu->cursorCallback = UndergroundMenu_PrintTrapDescription;
|
||||
menu->printCallback = NULL;
|
||||
menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos;
|
||||
menu->itemSelectedMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_InitTrapsMenu(menu, Underground_MoveTrapInInventory);
|
||||
}
|
||||
@@ -947,11 +947,11 @@ static BOOL UndergroundMenu_HandleTrapSelectedMenu(SysTask *sysTask, void *data)
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->itemSelectedMenu);
|
||||
u16 prevPos = menu->itemSelectedMenuCursorPos;
|
||||
u16 prevPos = menu->itemSelectedMenuPos;
|
||||
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuCursorPos);
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuPos);
|
||||
|
||||
if (prevPos != menu->itemSelectedMenuCursorPos) {
|
||||
if (prevPos != menu->itemSelectedMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
@@ -1010,7 +1010,7 @@ static void UndergroundMenu_PrintSphereDescription(ListMenu *listMenu, u32 index
|
||||
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetItemNameTextPrinter(), bankEntry, FALSE, NULL);
|
||||
}
|
||||
|
||||
void ov23_02250184(UndergroundMenu *menu)
|
||||
void UndergroundMenu_OpenPayWithSpheresMenu(UndergroundMenu *menu)
|
||||
{
|
||||
menu->getItemCount = UndergroundMenu_GetSphereCount;
|
||||
menu->getItem = UndergroundMenu_GetSphereTypeAtSlot;
|
||||
@@ -1028,7 +1028,7 @@ static void UndergroundMenu_OpenSpheresMenu(UndergroundMenu *menu)
|
||||
menu->getItem = UndergroundMenu_GetSphereTypeAtSlot;
|
||||
menu->getSphereSize = UndergroundMenu_GetSphereSizeAtSlot;
|
||||
menu->cursorCallback = UndergroundMenu_PrintSphereDescription;
|
||||
menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos;
|
||||
menu->itemSelectedMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_InitSpheresMenu(menu, Underground_MoveSphereInInventory);
|
||||
}
|
||||
@@ -1122,11 +1122,11 @@ static BOOL UndergroundMenu_HandleSphereSelectedMenu(SysTask *sysTask, void *dat
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->itemSelectedMenu);
|
||||
u16 prevPos = menu->itemSelectedMenuCursorPos;
|
||||
u16 prevPos = menu->itemSelectedMenuPos;
|
||||
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuCursorPos);
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuPos);
|
||||
|
||||
if (prevPos != menu->itemSelectedMenuCursorPos) {
|
||||
if (prevPos != menu->itemSelectedMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
@@ -1182,7 +1182,7 @@ void UndergroundMenu_PrintTreasureDescription(ListMenu *listMenu, u32 index, u8
|
||||
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetItemNameTextPrinter(), bankEntry, FALSE, NULL);
|
||||
}
|
||||
|
||||
void ov23_02250578(UndergroundMenu *menu)
|
||||
void UndergroundMenu_OpenSellTreasuresMenu(UndergroundMenu *menu)
|
||||
{
|
||||
menu->getItemCount = UndergroundMenu_GetTreasureCount;
|
||||
menu->getItem = UndergroundMenu_GetTreasureAtSlot;
|
||||
@@ -1197,7 +1197,7 @@ void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *menu)
|
||||
menu->getItemCount = UndergroundMenu_GetTreasureCount;
|
||||
menu->getItem = UndergroundMenu_GetTreasureAtSlot;
|
||||
menu->cursorCallback = UndergroundMenu_PrintTreasureDescription;
|
||||
menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos;
|
||||
menu->itemSelectedMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_InitTreasuresMenu(menu, Underground_MoveTreasureInInventory);
|
||||
}
|
||||
@@ -1290,11 +1290,11 @@ static BOOL UndergroundMenu_HandleTreasureSelectedMenu(SysTask *sysTask, void *d
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->itemSelectedMenu);
|
||||
u16 prevPos = menu->itemSelectedMenuCursorPos;
|
||||
u16 prevPos = menu->itemSelectedMenuPos;
|
||||
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuCursorPos);
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuPos);
|
||||
|
||||
if (prevPos != menu->itemSelectedMenuCursorPos) {
|
||||
if (prevPos != menu->itemSelectedMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
@@ -1360,7 +1360,7 @@ static void UndergroundMenu_GoUpCallback(UndergroundMenu *menu)
|
||||
UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_CantReturnFromSecretBase, FALSE, NULL);
|
||||
menu->state = UNDERGROUND_MENU_STATE_CLOSE_AFTER_TEXT;
|
||||
} else {
|
||||
menu->unk_28C = UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_WouldYouLikeToReturnToSurface, FALSE, NULL);
|
||||
menu->printerID = UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_WouldYouLikeToReturnToSurface, FALSE, NULL);
|
||||
menu->state = UNDERGROUND_MENU_STATE_GO_UP_SELECTED;
|
||||
}
|
||||
}
|
||||
@@ -1546,7 +1546,7 @@ static void UndergroundMenu_ColorPlacedGoods(ListMenu *listMenu, u32 index, u8 y
|
||||
}
|
||||
}
|
||||
|
||||
void ov23_02250CB0(UndergroundMenu *menu)
|
||||
void UndergroundMenu_OpenSellGoodsMenu(UndergroundMenu *menu)
|
||||
{
|
||||
menu->getItemCount = UndergroundMenu_GetGoodsCountBag;
|
||||
menu->getItem = UndergroundMenu_GetGoodAtSlotBag;
|
||||
@@ -1563,7 +1563,7 @@ void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu)
|
||||
menu->getItem = UndergroundMenu_GetGoodAtSlotBag;
|
||||
menu->cursorCallback = UndergroundMenu_PrintGoodDescription;
|
||||
menu->printCallback = NULL;
|
||||
menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos;
|
||||
menu->itemSelectedMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_InitGoodsMenu(menu, Underground_MoveGoodBag);
|
||||
}
|
||||
@@ -1678,11 +1678,11 @@ static BOOL UndergroundMenu_HandleGoodSelectedMenu(SysTask *sysTask, void *data)
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->itemSelectedMenu);
|
||||
u16 prevPos = menu->itemSelectedMenuCursorPos;
|
||||
u16 prevPos = menu->itemSelectedMenuPos;
|
||||
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuCursorPos);
|
||||
ListMenu_CalcTrueCursorPos(menu->itemSelectedMenu, &menu->itemSelectedMenuPos);
|
||||
|
||||
if (prevPos != menu->itemSelectedMenuCursorPos) {
|
||||
if (prevPos != menu->itemSelectedMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
@@ -1823,7 +1823,7 @@ void *UndergroundMenu_StartGiftMenu(ExitCallback exitCallback, FieldSystem *fiel
|
||||
menu->exitCallback = exitCallback;
|
||||
menu->state = UNDERGROUND_MENU_STATE_INIT;
|
||||
menu->spriteCount = 0;
|
||||
menu->unk_48 = NULL;
|
||||
menu->listMenu = NULL;
|
||||
menu->cursorCallback = NULL;
|
||||
menu->string = String_Init(50 * 2, HEAP_ID_FIELD1);
|
||||
menu->fmtString = String_Init(50 * 2, HEAP_ID_FIELD1);
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "overlay023/base_decoration.h"
|
||||
#include "overlay023/ov23_0223E140.h"
|
||||
#include "overlay023/ov23_02241F74.h"
|
||||
#include "overlay023/ov23_022521F0.h"
|
||||
#include "overlay023/secret_bases.h"
|
||||
#include "overlay023/underground_item_list_menu.h"
|
||||
#include "overlay023/underground_menu.h"
|
||||
@@ -21,6 +20,7 @@
|
||||
#include "overlay023/underground_spheres.h"
|
||||
#include "overlay023/underground_text_printer.h"
|
||||
#include "overlay023/underground_traps.h"
|
||||
#include "overlay023/underground_vendors.h"
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "brightness_controller.h"
|
||||
@@ -308,9 +308,9 @@ static BOOL UndergroundPC_HandleMenu(SysTask *sysTask, void *data)
|
||||
{
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->unk_48);
|
||||
u32 input = ListMenu_ProcessInput(menu->listMenu);
|
||||
u16 listPos, cursorPos;
|
||||
ListMenu_GetListAndCursorPos(menu->unk_48, &listPos, &cursorPos);
|
||||
ListMenu_GetListAndCursorPos(menu->listMenu, &listPos, &cursorPos);
|
||||
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_PC, cursorPos, listPos);
|
||||
UndergroundPC_UpdateCursorPos(menu);
|
||||
@@ -402,7 +402,7 @@ static void UndergroundPC_InitMenu(UndergroundMenu *menu, int startBankEntry, in
|
||||
|
||||
template.parent = menu;
|
||||
UndergroundMenu_MoveListCursorPosInBounds(menu, trueOptionCount, template.count);
|
||||
menu->unk_48 = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
menu->listMenu = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
}
|
||||
|
||||
static void UndergroundPC_InitRadarMenu(UndergroundMenu *menu, int startBankEntry, int optionCount, CursorCallback cursorCallback, int unused)
|
||||
@@ -442,17 +442,17 @@ static void UndergroundPC_InitRadarMenu(UndergroundMenu *menu, int startBankEntr
|
||||
|
||||
template.parent = menu;
|
||||
UndergroundMenu_MoveListCursorPosInBounds(menu, trueOptionCount, template.count);
|
||||
menu->unk_48 = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
menu->listMenu = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
}
|
||||
|
||||
static BOOL UndergroundPC_HandleRadarMenu(SysTask *sysTask, void *data)
|
||||
{
|
||||
UndergroundMenu *menu = data;
|
||||
|
||||
u32 input = ListMenu_ProcessInput(menu->unk_48);
|
||||
u32 input = ListMenu_ProcessInput(menu->listMenu);
|
||||
|
||||
u16 listPos, cursorPos;
|
||||
ListMenu_GetListAndCursorPos(menu->unk_48, &listPos, &cursorPos);
|
||||
ListMenu_GetListAndCursorPos(menu->listMenu, &listPos, &cursorPos);
|
||||
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_PC_RADAR, cursorPos, listPos);
|
||||
UndergroundPC_UpdateCursorPos(menu);
|
||||
@@ -689,7 +689,7 @@ static void UndergroundPC_Main(SysTask *sysTask, void *data)
|
||||
UndergroundMenu_RemoveDescriptionWindowInstant(menu);
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_PC);
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_PC);
|
||||
menu->unk_2AE = menu->listMenuCursorPos;
|
||||
menu->listMenuPos = menu->listMenuCursorPos;
|
||||
UndergroundPC_InitMenu(menu, UndergroundPC_Text_Decorate, 5, UndergroundPC_PrintMenuItemDescription, 0);
|
||||
menu->state = UG_PC_MENU_STATE_MAIN;
|
||||
break;
|
||||
@@ -718,7 +718,7 @@ static void UndergroundPC_Main(SysTask *sysTask, void *data)
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_PC_RADAR);
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_PC_RADAR);
|
||||
menu->unk_2AE = menu->listMenuCursorPos;
|
||||
menu->listMenuPos = menu->listMenuCursorPos;
|
||||
UndergroundPC_InitRadarMenu(menu, UndergroundPC_Text_TreasureSearch, 3, UndergroundPC_PrintRadarMenuItemDescription, 1);
|
||||
menu->state = UG_PC_MENU_STATE_RADAR_MENU_MAIN;
|
||||
break;
|
||||
@@ -951,10 +951,10 @@ void UndergroundPC_ProcessTakenFlag(int unused0, int unused1, void *data, void *
|
||||
|
||||
static void UndergroundPC_UpdateCursorPos(UndergroundMenu *menu)
|
||||
{
|
||||
u16 prevPos = menu->unk_2AE;
|
||||
ListMenu_CalcTrueCursorPos(menu->unk_48, &menu->unk_2AE);
|
||||
u16 prevPos = menu->listMenuPos;
|
||||
ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->listMenuPos);
|
||||
|
||||
if (prevPos != menu->unk_2AE) {
|
||||
if (prevPos != menu->listMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -663,16 +663,16 @@ BOOL UndergroundPlayer_IsAffectedByTrap(int netID)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ov23_0224ACE8(int netID, int unused1, void *unused2, void *unused3)
|
||||
void UndergroundPlayer_ProcessVendorTalk(int netID, int unused1, void *unused2, void *unused3)
|
||||
{
|
||||
u8 data = netID;
|
||||
CommSys_SendDataFixedSizeServer(26, &data);
|
||||
}
|
||||
|
||||
void ov23_0224ACF8(int unused0, int unused1, void *data, void *unused3)
|
||||
void UndergroundPlayer_ProcessVendorTalkServer(int unused0, int unused1, void *data, void *unused3)
|
||||
{
|
||||
u8 *netID = data;
|
||||
ov23_02243020(*netID);
|
||||
CommManUnderground_QueueTalkedToVendorMessage(*netID);
|
||||
}
|
||||
|
||||
int UndergroundPlayer_GetXPos(int netID)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/map_object.h"
|
||||
#include "constants/traps.h"
|
||||
#include "generated/trainer_score_events.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
#include "struct_defs/underground_record.h"
|
||||
|
||||
969
src/overlay023/underground_vendors.c
Normal file
969
src/overlay023/underground_vendors.c
Normal file
@@ -0,0 +1,969 @@
|
||||
#include "overlay023/underground_vendors.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/field_base_tiles.h"
|
||||
#include "generated/goods.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_decls/struct_02061AB4_decl.h"
|
||||
#include "struct_defs/underground.h"
|
||||
|
||||
#include "field/field_system.h"
|
||||
#include "overlay023/ov23_02241F74.h"
|
||||
#include "overlay023/trap_prices.h"
|
||||
#include "overlay023/treasure_prices.h"
|
||||
#include "overlay023/underground_item_list_menu.h"
|
||||
#include "overlay023/underground_menu.h"
|
||||
#include "overlay023/underground_text_printer.h"
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "comm_player_manager.h"
|
||||
#include "communication_information.h"
|
||||
#include "communication_system.h"
|
||||
#include "field_system.h"
|
||||
#include "goods.h"
|
||||
#include "heap.h"
|
||||
#include "list_menu.h"
|
||||
#include "map_header_data.h"
|
||||
#include "map_object.h"
|
||||
#include "menu.h"
|
||||
#include "message.h"
|
||||
#include "pokedex.h"
|
||||
#include "render_window.h"
|
||||
#include "savedata.h"
|
||||
#include "sound_playback.h"
|
||||
#include "string_gf.h"
|
||||
#include "string_list.h"
|
||||
#include "string_template.h"
|
||||
#include "sys_task.h"
|
||||
#include "sys_task_manager.h"
|
||||
#include "system.h"
|
||||
#include "text.h"
|
||||
#include "unk_0202854C.h"
|
||||
|
||||
#include "res/text/bank/underground_npcs.h"
|
||||
|
||||
#define TRAP_VENDOR_OPTIONS_START UndergroundNPCs_Text_GetTrap
|
||||
#define GOOD_VENDOR_OPTIONS_START UndergroundNPCs_Text_GetGoods
|
||||
|
||||
#define RESULT_SPHERE_TOO_SMALL 0xFFFB
|
||||
#define RESULT_BAG_FULL 0xFFFC
|
||||
#define RESULT_WRONG_SPHERE_TYPE 0xFFFD
|
||||
|
||||
enum VendorType {
|
||||
VENDOR_TYPE_GOODS = 0,
|
||||
VENDOR_TYPE_TRAPS,
|
||||
VENDOR_TYPE_TREASURES,
|
||||
};
|
||||
|
||||
enum ShopMenuState {
|
||||
SHOP_MENU_STATE_INTRO_MESSAGE = 0,
|
||||
SHOP_MENU_STATE_WAIT_FOR_TEXT,
|
||||
SHOP_MENU_STATE_INIT_OPTIONS_MENU,
|
||||
SHOP_MENU_STATE_OPTIONS_MENU,
|
||||
SHOP_MENU_STATE_INIT_BUY_MENU,
|
||||
SHOP_MENU_STATE_BUY_MENU,
|
||||
SHOP_MENU_STATE_BUY_WAIT_FOR_TEXT,
|
||||
SHOP_MENU_STATE_INIT_PAY_MENU,
|
||||
SHOP_MENU_STATE_PAY_MENU,
|
||||
SHOP_MENU_STATE_BUY_SUCCESS,
|
||||
SHOP_MENU_STATE_END_TRANSACTION,
|
||||
SHOP_MENU_STATE_11_UNUSED,
|
||||
SHOP_MENU_STATE_INIT_SELL_MENU,
|
||||
SHOP_MENU_STATE_SELL_MENU,
|
||||
SHOP_MENU_STATE_INIT_CONFIRM_SELL_MENU,
|
||||
SHOP_MENU_STATE_CONFIRM_SELL,
|
||||
SHOP_MENU_STATE_SELL_SUCCESS,
|
||||
SHOP_MENU_STATE_EXIT_MESSAGE,
|
||||
SHOP_MENU_STATE_EXIT_AFTER_TEXT,
|
||||
};
|
||||
|
||||
typedef struct UndergroundVendor {
|
||||
u16 vendorType;
|
||||
u16 x;
|
||||
u16 z;
|
||||
} UndergroundVendor;
|
||||
|
||||
static void UndergroundVendors_DrawPriceWindow(UndergroundMenu *menu);
|
||||
static void UndergroundVendors_FreeMenu(UndergroundMenu *menu);
|
||||
|
||||
UndergroundVendor sUndergroundVendors[] = {
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 72, .z = 104 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 424, .z = 87 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 200, .z = 185 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 335, .z = 264 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 175, .z = 279 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 424, .z = 439 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 87, .z = 456 },
|
||||
{ .vendorType = VENDOR_TYPE_GOODS, .x = 311, .z = 358 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 232, .z = 87 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 328, .z = 151 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 232, .z = 215 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 232, .z = 298 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 279, .z = 328 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 279, .z = 456 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 183, .z = 392 },
|
||||
{ .vendorType = VENDOR_TYPE_TRAPS, .x = 279, .z = 245 },
|
||||
{ .vendorType = VENDOR_TYPE_TREASURES, .x = 40, .z = 471 },
|
||||
{ .vendorType = VENDOR_TYPE_TREASURES, .x = 471, .z = 72 },
|
||||
{ .vendorType = VENDOR_TYPE_TREASURES, .x = 471, .z = 471 },
|
||||
{ .vendorType = VENDOR_TYPE_TREASURES, .x = 40, .z = 72 }
|
||||
};
|
||||
|
||||
static const WindowTemplate sWindowTemplate = {
|
||||
.bgLayer = BG_LAYER_MAIN_3,
|
||||
.tilemapLeft = 25,
|
||||
.tilemapTop = 13,
|
||||
.width = 6,
|
||||
.height = 4,
|
||||
.palette = 13,
|
||||
.baseTile = BASE_TILE_MESSAGE_WINDOW - 6 * 4
|
||||
};
|
||||
|
||||
static void UndergroundVendors_InitTrapsVendorInventory(UndergroundMenu *menu, int vendorIndex)
|
||||
{
|
||||
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
|
||||
|
||||
MATHRandContext16 rand;
|
||||
MATH_InitRand16(&rand, Underground_GetRandomSeed(underground) + vendorIndex);
|
||||
|
||||
int trapID;
|
||||
|
||||
for (int i = 0; i < SHOP_INVENTORY_SIZE; i++) {
|
||||
if (i == 0) {
|
||||
trapID = TRAP_DIGGER_DRILL;
|
||||
} else {
|
||||
trapID = MATH_Rand16(&rand, TRAP_MAX - 1) + 1;
|
||||
}
|
||||
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (menu->shopInventory[j] == trapID) {
|
||||
trapID = TRAP_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
if (trapID == TRAP_NONE) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
int maxSize; // needs to be declared before below variable to match
|
||||
int minSize = TrapGetSpherePriceMinSize(trapID);
|
||||
maxSize = TrapGetSpherePriceMaxSize(trapID);
|
||||
|
||||
if (minSize == 0 && maxSize == 0) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
menu->shopInventory[i] = trapID;
|
||||
menu->shopPriceTypes[i] = TrapGetSpherePriceType(trapID);
|
||||
|
||||
if (menu->shopPriceTypes[i] == RANDOM_SPHERE_TYPE) {
|
||||
menu->shopPriceTypes[i] = MATH_Rand16(&rand, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
menu->shopPriceSizes[i] = MATH_Rand16(&rand, maxSize - minSize) + minSize;
|
||||
}
|
||||
}
|
||||
|
||||
static void UndergroundVendors_InitGoodsVendorInventory(UndergroundMenu *menu, int vendorIndex)
|
||||
{
|
||||
MATHRandContext16 rand;
|
||||
int maxSize, minSize;
|
||||
SaveData *saveData = FieldSystem_GetSaveData(menu->fieldSystem);
|
||||
Underground *underground = SaveData_GetUnderground(saveData);
|
||||
BOOL natDexObtained = Pokedex_IsNationalDexObtained(SaveData_GetPokedex(saveData));
|
||||
|
||||
MATH_InitRand16(&rand, Underground_GetRandomSeed(underground) + vendorIndex);
|
||||
|
||||
for (int i = 0; i < SHOP_INVENTORY_SIZE; i++) {
|
||||
int goodID = MATH_Rand16(&rand, UG_GOOD_MAX - 1) + 1;
|
||||
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (menu->shopInventory[j] == goodID) {
|
||||
goodID = UG_GOOD_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
if (goodID == UG_GOOD_NONE) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
menu->shopInventory[i] = goodID;
|
||||
menu->shopPriceTypes[i] = Good_GetSpherePriceType(goodID);
|
||||
|
||||
if (!natDexObtained && Good_IsNatDexRequired(goodID) == TRUE) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (menu->shopPriceTypes[i] == SPHERE_NONE) {
|
||||
i--;
|
||||
continue;
|
||||
} else if (menu->shopPriceTypes[i] == RANDOM_SPHERE_TYPE) {
|
||||
menu->shopPriceTypes[i] = MATH_Rand16(&rand, 6 - 1) + 1;
|
||||
}
|
||||
|
||||
minSize = Good_GetSpherePriceMinSize(goodID);
|
||||
maxSize = Good_GetSpherePriceMaxSize(goodID);
|
||||
|
||||
menu->shopPriceSizes[i] = MATH_Rand16(&rand, maxSize - minSize) + minSize;
|
||||
}
|
||||
}
|
||||
|
||||
static int UndergroundVendors_TryBuyItem(UndergroundMenu *menu, int itemSlot, int sphereSlot)
|
||||
{
|
||||
BOOL itemAdded = FALSE;
|
||||
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
|
||||
|
||||
if (menu->shopPriceTypes[itemSlot] != UndergroundMenu_GetSphereTypeAtSlot(sphereSlot, menu)) {
|
||||
return RESULT_WRONG_SPHERE_TYPE;
|
||||
}
|
||||
|
||||
if (menu->shopPriceSizes[itemSlot] > UndergroundMenu_GetSphereSizeAtSlot(sphereSlot, menu)) {
|
||||
return RESULT_SPHERE_TOO_SMALL;
|
||||
}
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
itemAdded = Underground_TryAddTrap(underground, menu->shopInventory[itemSlot]);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
itemAdded = Underground_TryAddGoodBag(underground, menu->shopInventory[itemSlot]);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_TREASURES) {
|
||||
itemAdded = Underground_TryAddTreasure(underground, menu->shopInventory[itemSlot]);
|
||||
}
|
||||
|
||||
if (itemAdded) {
|
||||
Underground_RemoveSphereAtSlot(underground, sphereSlot);
|
||||
} else {
|
||||
return RESULT_BAG_FULL;
|
||||
}
|
||||
|
||||
return menu->shopInventory[itemSlot];
|
||||
}
|
||||
|
||||
static void *UndergroundVendors_InitVendorOptionsMenu(UndergroundMenu *menu)
|
||||
{
|
||||
int optionCount = 3;
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TREASURES) {
|
||||
optionCount = 2;
|
||||
}
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(menu);
|
||||
|
||||
menu->menuOptions = StringList_New(optionCount, HEAP_ID_FIELD1);
|
||||
|
||||
Window_Add(menu->fieldSystem->bgConfig, &menu->primaryWindow, BG_LAYER_MAIN_3, 19, 3, 12, optionCount * 2, 13, BASE_TILE_MESSAGE_WINDOW - 12 * 6);
|
||||
Window_DrawStandardFrame(&menu->primaryWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
int baseBankEntry = TRAP_VENDOR_OPTIONS_START;
|
||||
UndergroundVendors_InitTrapsVendorInventory(menu, menu->vendorIndex);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry, 0);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry + 1, 1);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry + 2, LIST_CANCEL);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
int baseBankEntry = GOOD_VENDOR_OPTIONS_START;
|
||||
UndergroundVendors_InitGoodsVendorInventory(menu, menu->vendorIndex);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry, 0);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry + 1, 1);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), baseBankEntry + 2, LIST_CANCEL);
|
||||
} else {
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_GiveTreasures, 0);
|
||||
StringList_AddFromMessageBank(menu->menuOptions, UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_Cancel, LIST_CANCEL);
|
||||
}
|
||||
|
||||
ListMenuTemplate template;
|
||||
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &template, sizeof(ListMenuTemplate));
|
||||
|
||||
template.choices = menu->menuOptions;
|
||||
template.window = &menu->primaryWindow;
|
||||
template.count = optionCount;
|
||||
template.maxDisplay = optionCount;
|
||||
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_VENDOR_OPTIONS);
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_VENDOR_OPTIONS);
|
||||
|
||||
UndergroundMenu_MoveListCursorPosInBounds(menu, template.maxDisplay, template.count);
|
||||
|
||||
menu->listMenu = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
menu->listMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
Window_CopyToVRAM(&menu->primaryWindow);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
static void UndergroundVendors_PrintItemDescriptionAndBuyPrice(ListMenu *listMenu, u32 index, u8 onInit)
|
||||
{
|
||||
UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT);
|
||||
|
||||
Window_FillTilemap(&menu->secondaryWindow, 15);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_RequiredSphere + menu->isSelling, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->secondaryWindow, FONT_SYSTEM, menu->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
if (index != LIST_CANCEL) {
|
||||
StringTemplate_SetUndergroundItemName(menu->template, 2, menu->shopPriceTypes[index]);
|
||||
StringTemplate_SetNumber(menu->template, 6, menu->shopPriceSizes[index], 2, PADDING_MODE_SPACES, CHARSET_MODE_EN);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_SphereTemplate, menu->string);
|
||||
StringTemplate_Format(menu->template, menu->fmtString, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->secondaryWindow, FONT_SYSTEM, menu->fmtString, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
}
|
||||
|
||||
Window_ScheduleCopyToVRAM(&menu->secondaryWindow);
|
||||
|
||||
// make sure we have the right type of -2
|
||||
if (index == MENU_CANCELED) {
|
||||
index = LIST_CANCEL;
|
||||
}
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundMenu_PrintTrapDescription(listMenu, index, onInit);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundMenu_PrintGoodDescription(listMenu, index, onInit);
|
||||
} else {
|
||||
UndergroundMenu_PrintTreasureDescription(listMenu, index, onInit);
|
||||
}
|
||||
}
|
||||
|
||||
static void UndergroundVendors_PrintItemDescriptionAndSellPrice(ListMenu *listMenu, u32 index, u8 onInit)
|
||||
{
|
||||
MATHRandContext16 rand;
|
||||
UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT);
|
||||
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
|
||||
int minSize, maxSize;
|
||||
int sphereType = SPHERE_NONE, sphereSize;
|
||||
|
||||
Window_FillTilemap(&menu->secondaryWindow, 15);
|
||||
|
||||
if (index != LIST_CANCEL) {
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
const int trapID = UndergroundMenu_GetTrapAtSlot(index, menu);
|
||||
MATH_InitRand16(&rand, Underground_GetRandomSeed(underground) + menu->vendorIndex + trapID);
|
||||
sphereType = TrapGetSpherePriceType(trapID);
|
||||
|
||||
if (sphereType == RANDOM_SPHERE_TYPE) {
|
||||
sphereType = MATH_Rand16(&rand, SPHERE_TYPE_MAX - 1) + 1;
|
||||
}
|
||||
|
||||
minSize = TrapGetSpherePriceMinSize(trapID);
|
||||
maxSize = TrapGetSpherePriceMaxSize(trapID);
|
||||
sphereSize = MATH_Rand16(&rand, maxSize - minSize) + minSize;
|
||||
sphereSize /= 2;
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
const int goodID = UndergroundMenu_GetGoodAtSlotBag(index, menu);
|
||||
MATH_InitRand16(&rand, Underground_GetRandomSeed(underground) + menu->vendorIndex + goodID);
|
||||
sphereType = Good_GetSpherePriceType(goodID);
|
||||
|
||||
if (sphereType == RANDOM_SPHERE_TYPE) {
|
||||
sphereType = MATH_Rand16(&rand, SPHERE_TYPE_MAX - 1) + 1;
|
||||
}
|
||||
|
||||
minSize = Good_GetSpherePriceMinSize(goodID);
|
||||
maxSize = Good_GetSpherePriceMaxSize(goodID);
|
||||
sphereSize = MATH_Rand16(&rand, maxSize - minSize) + minSize;
|
||||
sphereSize /= 2;
|
||||
} else {
|
||||
const int treasureID = UndergroundMenu_GetTreasureAtSlot(index, menu);
|
||||
MATH_InitRand16(&rand, Underground_GetRandomSeed(underground) + menu->vendorIndex + treasureID);
|
||||
sphereType = Treasure_GetSpherePriceType(treasureID);
|
||||
|
||||
if (sphereType == RANDOM_SPHERE_TYPE) {
|
||||
sphereType = MATH_Rand16(&rand, SPHERE_TYPE_MAX - 1) + 1;
|
||||
}
|
||||
|
||||
minSize = Treasure_GetSpherePriceMinSize(treasureID);
|
||||
maxSize = Treasure_GetSpherePriceMaxSize(treasureID);
|
||||
sphereSize = MATH_Rand16(&rand, maxSize - minSize) + minSize;
|
||||
}
|
||||
}
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_RequiredSphere + menu->isSelling, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->secondaryWindow, FONT_SYSTEM, menu->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
if (index != LIST_CANCEL) {
|
||||
if (sphereType != SPHERE_NONE) {
|
||||
StringTemplate_SetUndergroundItemName(menu->template, 2, sphereType);
|
||||
StringTemplate_SetNumber(menu->template, 6, sphereSize, 2, PADDING_MODE_SPACES, CHARSET_MODE_EN);
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_SphereTemplate, menu->string);
|
||||
StringTemplate_Format(menu->template, menu->fmtString, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->secondaryWindow, FONT_SYSTEM, menu->fmtString, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
|
||||
menu->shopPriceTypes[0] = sphereType;
|
||||
menu->shopPriceSizes[0] = sphereSize;
|
||||
} else {
|
||||
menu->shopPriceTypes[0] = sphereType;
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), UndergroundNPCs_Text_NotForSale, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->secondaryWindow, FONT_SYSTEM, menu->string, 1, 17, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
Window_ScheduleCopyToVRAM(&menu->secondaryWindow);
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundMenu_PrintTrapDescription(listMenu, index, onInit);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundMenu_PrintGoodDescription(listMenu, index, onInit);
|
||||
} else {
|
||||
UndergroundMenu_PrintTreasureDescription(listMenu, index, onInit);
|
||||
}
|
||||
}
|
||||
|
||||
static int UndergroundVendors_GetItemAtInventorySlot(int slot, void *menu)
|
||||
{
|
||||
UndergroundMenu *ugMenu = menu;
|
||||
|
||||
if (slot >= SHOP_INVENTORY_SIZE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ugMenu->shopInventory[slot];
|
||||
}
|
||||
|
||||
static void UndergroundVendors_InitBuyMenu(UndergroundMenu *menu)
|
||||
{
|
||||
const int optionCount = SHOP_INVENTORY_SIZE + 1;
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(menu);
|
||||
menu->menuOptions = StringList_New(optionCount, HEAP_ID_FIELD1);
|
||||
|
||||
Window_Add(menu->fieldSystem->bgConfig, &menu->primaryWindow, BG_LAYER_MAIN_3, 19, 3, 12, optionCount * 2, 13, BASE_TILE_MESSAGE_WINDOW - 12 * 6 - 12 * 12);
|
||||
Window_DrawStandardFrame(&menu->primaryWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
|
||||
|
||||
MessageLoader *loader;
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_TRAPS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_TRAPS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_GOODS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_GOODS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
} else {
|
||||
loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ITEMS, HEAP_ID_FIELD1);
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetItemNameTextPrinter(), TEXT_BANK_UNDERGROUND_ITEMS, MSG_LOADER_PRELOAD_ENTIRE_BANK);
|
||||
}
|
||||
|
||||
for (int i = 0; i < optionCount - 1; i++) {
|
||||
StringList_AddFromMessageBank(menu->menuOptions, loader, menu->shopInventory[i], i);
|
||||
}
|
||||
|
||||
StringList_AddFromMessageBank(menu->menuOptions, loader, 0, LIST_CANCEL);
|
||||
MessageLoader_Free(loader);
|
||||
|
||||
ListMenuTemplate template;
|
||||
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &template, sizeof(ListMenuTemplate));
|
||||
|
||||
template.choices = menu->menuOptions;
|
||||
template.window = &menu->primaryWindow;
|
||||
template.count = optionCount;
|
||||
template.maxDisplay = optionCount;
|
||||
template.cursorCallback = UndergroundVendors_PrintItemDescriptionAndBuyPrice;
|
||||
template.parent = menu;
|
||||
|
||||
menu->getItem = UndergroundVendors_GetItemAtInventorySlot;
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_BUY_GOODS + menu->vendorType);
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_BUY_GOODS + menu->vendorType);
|
||||
menu->listMenuPos = menu->listMenuCursorPos;
|
||||
|
||||
UndergroundMenu_MoveListCursorPosInBounds(menu, template.maxDisplay, template.count);
|
||||
menu->listMenu = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
|
||||
Window_CopyToVRAM(&menu->primaryWindow);
|
||||
}
|
||||
|
||||
static void UndergroundVendors_EraseCurrentMenu(UndergroundMenu *menu, BOOL unused)
|
||||
{
|
||||
if (Window_IsInUse(&menu->secondaryWindow)) {
|
||||
Window_EraseStandardFrame(&menu->secondaryWindow, TRUE);
|
||||
Window_Remove(&menu->secondaryWindow);
|
||||
}
|
||||
|
||||
UndergroundMenu_EraseCurrentMenu(menu);
|
||||
}
|
||||
|
||||
static void UndergroundVendors_PrintConfirmSellPrompt(int slot, UndergroundMenu *menu)
|
||||
{
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
int trapID = UndergroundMenu_GetTrapAtSlot(slot, menu);
|
||||
UndergroundVendors_SetTrapNameForPrinter(2, trapID);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
int goodID = UndergroundMenu_GetGoodAtSlotBag(slot, menu);
|
||||
UndergroundVendors_SetGoodNameForPrinter(2, goodID);
|
||||
} else {
|
||||
int treasureID = UndergroundMenu_GetTreasureAtSlot(slot, menu);
|
||||
UndergroundVendors_SetTreasureNameForPrinter(2, treasureID);
|
||||
}
|
||||
|
||||
UndergroundVendors_SetTreasureNameForPrinter(4, menu->shopPriceTypes[0]);
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_ConfirmTradePrompt);
|
||||
}
|
||||
|
||||
static u32 UndergroundVendors_TrySellItem(UndergroundMenu *menu)
|
||||
{
|
||||
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
|
||||
|
||||
if (UndergroundInventory_TryAddSphere(menu->shopPriceTypes[0], menu->shopPriceSizes[0])) {
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
Underground_RemoveTrapAtSlot(underground, menu->shopSelection);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
Underground_RemoveGoodAtSlotBag(underground, menu->shopSelection);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_TREASURES) {
|
||||
Underground_RemoveTreasureAtSlot(underground, menu->shopSelection);
|
||||
}
|
||||
|
||||
return menu->shopPriceTypes[0];
|
||||
}
|
||||
|
||||
return RESULT_BAG_FULL;
|
||||
}
|
||||
|
||||
int UndergroundVendors_ReturnFFFE(void *unused)
|
||||
{
|
||||
return 0xFFFE;
|
||||
}
|
||||
|
||||
static void UndergroundVendors_FreeMenu(UndergroundMenu *menu)
|
||||
{
|
||||
String_Free(menu->string);
|
||||
String_Free(menu->fmtString);
|
||||
StringTemplate_Free(menu->template);
|
||||
Heap_Free(menu);
|
||||
}
|
||||
|
||||
void *UndergroundVendors_ReturnNull(int unused0, FieldSystem *unused1, int unused2)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int UndergroundVendors_PrintNPCMessage(int bankEntry)
|
||||
{
|
||||
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetMiscTextPrinter(), TEXT_BANK_UNDERGROUND_NPCS, MSG_LOADER_LOAD_ON_DEMAND);
|
||||
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetMiscTextPrinter(), CommInfo_TrainerInfo(CommSys_CurNetId()));
|
||||
|
||||
return UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), bankEntry, FALSE, NULL);
|
||||
}
|
||||
|
||||
void UndergroundVendors_EraseMessageBoxWindow(void)
|
||||
{
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
|
||||
}
|
||||
|
||||
void UndergroundVendors_SetTreasureNameForPrinter(int index, int treasureID)
|
||||
{
|
||||
UndergroundTextPrinter_SetUndergroundItemName(CommManUnderground_GetMiscTextPrinter(), index, treasureID);
|
||||
}
|
||||
|
||||
void UndergroundVendors_SetTrapNameForPrinter(int index, int trapID)
|
||||
{
|
||||
UndergroundTextPrinter_SetUndergroundTrapNameWithIndex(CommManUnderground_GetMiscTextPrinter(), index, trapID);
|
||||
}
|
||||
|
||||
void UndergroundVendors_SetGoodNameForPrinter(int index, int goodID)
|
||||
{
|
||||
UndergroundTextPrinter_SetGoodNameWithIndex(CommManUnderground_GetMiscTextPrinter(), index, goodID);
|
||||
}
|
||||
|
||||
static void UndergroundVendors_DrawPriceWindow(UndergroundMenu *menu)
|
||||
{
|
||||
if (!Window_IsInUse(&menu->secondaryWindow)) {
|
||||
Window_Add(menu->fieldSystem->bgConfig, &menu->secondaryWindow, BG_LAYER_MAIN_3, 1, 12, 12, 4, 13, 1);
|
||||
Window_DrawStandardFrame(&menu->secondaryWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
|
||||
}
|
||||
|
||||
Window_FillTilemap(&menu->secondaryWindow, 15);
|
||||
Window_CopyToVRAM(&menu->secondaryWindow);
|
||||
}
|
||||
|
||||
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *menu, int bankEntry)
|
||||
{
|
||||
Window_Add(menu->fieldSystem->bgConfig, &menu->menuDescriptionWindow, BG_LAYER_MAIN_3, 1, 1, 7, 4, 13, 51);
|
||||
Window_DrawStandardFrame(&menu->menuDescriptionWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
|
||||
|
||||
Window_FillTilemap(&menu->menuDescriptionWindow, 15);
|
||||
Window_CopyToVRAM(&menu->menuDescriptionWindow);
|
||||
|
||||
MessageLoader_GetString(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), bankEntry, menu->string);
|
||||
Text_AddPrinterWithParams(&menu->menuDescriptionWindow, FONT_SYSTEM, menu->string, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
|
||||
Window_ScheduleCopyToVRAM(&menu->menuDescriptionWindow);
|
||||
}
|
||||
|
||||
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *menu)
|
||||
{
|
||||
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
|
||||
Window_EraseStandardFrame(&menu->menuDescriptionWindow, TRUE);
|
||||
Window_Remove(&menu->menuDescriptionWindow);
|
||||
}
|
||||
}
|
||||
|
||||
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *menu)
|
||||
{
|
||||
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
|
||||
Window_EraseStandardFrame(&menu->menuDescriptionWindow, FALSE);
|
||||
Window_Remove(&menu->menuDescriptionWindow);
|
||||
}
|
||||
}
|
||||
|
||||
static int UndergroundVendors_FindVendorAtCoordinates(int x, int z, int *outIndex)
|
||||
{
|
||||
int vendorTotal = NELEMS(sUndergroundVendors);
|
||||
|
||||
for (int i = 0; i < vendorTotal; i++) {
|
||||
if (sUndergroundVendors[i].x == x && sUndergroundVendors[i].z == z) {
|
||||
*outIndex = i;
|
||||
return sUndergroundVendors[i].vendorType;
|
||||
}
|
||||
}
|
||||
|
||||
GF_ASSERT(FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void UndergroundVendors_ShopMenuTask(SysTask *sysTask, void *data)
|
||||
{
|
||||
UndergroundMenu *menu = data;
|
||||
u32 input;
|
||||
u16 listPos, cursorPos, prevPos;
|
||||
|
||||
switch (menu->state) {
|
||||
case SHOP_MENU_STATE_INTRO_MESSAGE:
|
||||
if (menu->vendorType == VENDOR_TYPE_TREASURES) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_IllTradeSpheresForTreasures);
|
||||
} else {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_IllTradeYouSomething);
|
||||
}
|
||||
|
||||
menu->state = SHOP_MENU_STATE_WAIT_FOR_TEXT;
|
||||
break;
|
||||
case SHOP_MENU_STATE_WAIT_FOR_TEXT:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
menu->state = SHOP_MENU_STATE_INIT_OPTIONS_MENU;
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_INIT_OPTIONS_MENU:
|
||||
UndergroundVendors_InitVendorOptionsMenu(menu);
|
||||
menu->state = SHOP_MENU_STATE_OPTIONS_MENU;
|
||||
break;
|
||||
case SHOP_MENU_STATE_OPTIONS_MENU:
|
||||
input = ListMenu_ProcessInput(menu->listMenu);
|
||||
ListMenu_GetListAndCursorPos(menu->listMenu, &listPos, &cursorPos);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_VENDOR_OPTIONS, cursorPos, listPos);
|
||||
|
||||
prevPos = menu->listMenuPos;
|
||||
ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->listMenuPos);
|
||||
|
||||
if (prevPos != menu->listMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
switch (input) {
|
||||
case LIST_CANCEL:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
UndergroundVendors_EraseCurrentMenu(menu, FALSE);
|
||||
menu->state = SHOP_MENU_STATE_EXIT_MESSAGE;
|
||||
break;
|
||||
case LIST_NOTHING_CHOSEN:
|
||||
break;
|
||||
default:
|
||||
if (menu->vendorType == VENDOR_TYPE_TREASURES) {
|
||||
menu->isSelling = TRUE;
|
||||
menu->state = SHOP_MENU_STATE_INIT_SELL_MENU;
|
||||
} else {
|
||||
menu->isSelling = input;
|
||||
|
||||
if (input == 0) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
menu->state = SHOP_MENU_STATE_INIT_BUY_MENU;
|
||||
} else {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
menu->state = SHOP_MENU_STATE_INIT_SELL_MENU;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_INIT_BUY_MENU:
|
||||
UndergroundVendors_DrawPriceWindow(menu);
|
||||
UndergroundVendors_InitBuyMenu(menu);
|
||||
menu->state = SHOP_MENU_STATE_BUY_MENU;
|
||||
break;
|
||||
case SHOP_MENU_STATE_BUY_MENU:
|
||||
input = ListMenu_ProcessInput(menu->listMenu);
|
||||
ListMenu_GetListAndCursorPos(menu->listMenu, &listPos, &cursorPos);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_BUY_GOODS + menu->vendorType, cursorPos, listPos);
|
||||
|
||||
prevPos = menu->listMenuPos;
|
||||
ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->listMenuPos);
|
||||
|
||||
if (prevPos != menu->listMenuPos) {
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
}
|
||||
|
||||
// make sure we have the right type of -2
|
||||
if (input == MENU_CANCELED) {
|
||||
input = LIST_CANCEL;
|
||||
}
|
||||
|
||||
if (input != LIST_NOTHING_CHOSEN) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
}
|
||||
|
||||
switch (input) {
|
||||
case LIST_CANCEL:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
UndergroundVendors_EraseCurrentMenu(menu, TRUE);
|
||||
menu->state = SHOP_MENU_STATE_INIT_OPTIONS_MENU;
|
||||
break;
|
||||
case LIST_NOTHING_CHOSEN:
|
||||
break;
|
||||
default:
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
menu->shopSelection = input;
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundVendors_SetTrapNameForPrinter(2, menu->shopInventory[menu->shopSelection]);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundVendors_SetGoodNameForPrinter(2, menu->shopInventory[menu->shopSelection]);
|
||||
}
|
||||
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_PickSpherePrompt);
|
||||
menu->state = SHOP_MENU_STATE_BUY_WAIT_FOR_TEXT;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_BUY_WAIT_FOR_TEXT:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
if (JOY_NEW(PAD_BUTTON_A)) {
|
||||
menu->state = SHOP_MENU_STATE_INIT_PAY_MENU;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_INIT_PAY_MENU:
|
||||
UndergroundMenu_EraseCurrentMenu(menu);
|
||||
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_PAY_WITH_SPHERES);
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_PAY_WITH_SPHERES);
|
||||
|
||||
UndergroundMenu_OpenPayWithSpheresMenu(menu);
|
||||
UndergroundMenu_PrintMenuDescription(menu, UndergroundNPCs_Text_SpheresOnHand);
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundVendors_SetTrapNameForPrinter(2, menu->shopInventory[menu->shopSelection]);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundVendors_SetGoodNameForPrinter(2, menu->shopInventory[menu->shopSelection]);
|
||||
}
|
||||
|
||||
menu->state = SHOP_MENU_STATE_PAY_MENU;
|
||||
break;
|
||||
case SHOP_MENU_STATE_PAY_MENU:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
input = UndergroundItemListMenu_ProcessInput(menu->itemListMenu);
|
||||
ListMenu_GetListAndCursorPos(menu->itemListMenu->listMenu, &listPos, &cursorPos);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_PAY_WITH_SPHERES, cursorPos, listPos);
|
||||
|
||||
if (input != LIST_NOTHING_CHOSEN) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
}
|
||||
|
||||
switch (input) {
|
||||
case LIST_NOTHING_CHOSEN:
|
||||
break;
|
||||
case LIST_CANCEL:
|
||||
UndergroundMenu_RemoveDescriptionWindow(menu);
|
||||
menu->state = SHOP_MENU_STATE_INIT_BUY_MENU;
|
||||
break;
|
||||
default:
|
||||
int result = UndergroundVendors_TryBuyItem(menu, menu->shopSelection, input);
|
||||
UndergroundVendors_EraseCurrentMenu(menu, TRUE);
|
||||
UndergroundMenu_RemoveDescriptionWindow(menu);
|
||||
|
||||
if (result == RESULT_BAG_FULL) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_YouDontHaveRoom);
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
} else if (result == RESULT_WRONG_SPHERE_TYPE) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_WrongKindOfSphere);
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
} else if (result == RESULT_SPHERE_TOO_SMALL) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_SphereTooSmall);
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
} else {
|
||||
menu->shopSelection = result;
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_LetsDoThisTrade);
|
||||
menu->state = SHOP_MENU_STATE_BUY_SUCCESS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_11_UNUSED:
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_YouDontHaveRoom);
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
break;
|
||||
case SHOP_MENU_STATE_BUY_SUCCESS:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
if (JOY_NEW(PAD_BUTTON_A)) {
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundVendors_SetTrapNameForPrinter(2, menu->shopSelection);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundVendors_SetGoodNameForPrinter(2, menu->shopSelection);
|
||||
}
|
||||
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_ItemWasObtained);
|
||||
Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2);
|
||||
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_END_TRANSACTION:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
if (JOY_NEW(PAD_BUTTON_A)) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_DoYouNeedAnythingElse);
|
||||
menu->state = SHOP_MENU_STATE_INIT_OPTIONS_MENU;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_INIT_SELL_MENU:
|
||||
UndergroundVendors_DrawPriceWindow(menu);
|
||||
|
||||
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_SELL_GOODS + menu->vendorType);
|
||||
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_SELL_GOODS + menu->vendorType);
|
||||
menu->cursorCallback = UndergroundVendors_PrintItemDescriptionAndSellPrice;
|
||||
|
||||
if (menu->vendorType == VENDOR_TYPE_TRAPS) {
|
||||
UndergroundMenu_OpenSellTrapsMenu(menu);
|
||||
UndergroundMenu_PrintMenuDescription(menu, UndergroundNPCs_Text_TrapsOnHand);
|
||||
} else if (menu->vendorType == VENDOR_TYPE_GOODS) {
|
||||
UndergroundMenu_OpenSellGoodsMenu(menu);
|
||||
UndergroundMenu_PrintMenuDescription(menu, UndergroundNPCs_Text_GoodsOnHand);
|
||||
} else {
|
||||
UndergroundMenu_OpenSellTreasuresMenu(menu);
|
||||
UndergroundMenu_PrintMenuDescription(menu, UndergroundNPCs_Text_TreasuresOnHand);
|
||||
}
|
||||
|
||||
menu->state = SHOP_MENU_STATE_SELL_MENU;
|
||||
break;
|
||||
case SHOP_MENU_STATE_SELL_MENU:
|
||||
input = UndergroundItemListMenu_ProcessInput(menu->itemListMenu);
|
||||
ListMenu_GetListAndCursorPos(menu->itemListMenu->listMenu, &listPos, &cursorPos);
|
||||
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_SELL_GOODS + menu->vendorType, cursorPos, listPos);
|
||||
|
||||
switch (input) {
|
||||
case LIST_CANCEL:
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
UndergroundVendors_EraseCurrentMenu(menu, TRUE);
|
||||
UndergroundMenu_RemoveDescriptionWindow(menu);
|
||||
menu->state = SHOP_MENU_STATE_INIT_OPTIONS_MENU;
|
||||
break;
|
||||
case LIST_NOTHING_CHOSEN:
|
||||
break;
|
||||
default:
|
||||
if (menu->shopPriceTypes[0] != SPHERE_NONE) {
|
||||
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
|
||||
menu->shopSelection = input;
|
||||
UndergroundVendors_EraseCurrentMenu(menu, TRUE);
|
||||
UndergroundMenu_RemoveDescriptionWindow(menu);
|
||||
UndergroundVendors_PrintConfirmSellPrompt(input, menu);
|
||||
menu->state = SHOP_MENU_STATE_INIT_CONFIRM_SELL_MENU;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_INIT_CONFIRM_SELL_MENU:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
menu->yesNoMenu = Menu_MakeYesNoChoice(menu->fieldSystem->bgConfig, &sWindowTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, 11, HEAP_ID_FIELD1);
|
||||
menu->state = SHOP_MENU_STATE_CONFIRM_SELL;
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_CONFIRM_SELL:
|
||||
input = Menu_ProcessInputAndHandleExit(menu->yesNoMenu, HEAP_ID_FIELD1);
|
||||
|
||||
if (input == LIST_NOTHING_CHOSEN) {
|
||||
return;
|
||||
} else if (input == 0) {
|
||||
int result = UndergroundVendors_TrySellItem(menu);
|
||||
|
||||
if (result == RESULT_BAG_FULL) {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_YouDontHaveRoom);
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
} else {
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_AllRightLetsTrade);
|
||||
menu->state = SHOP_MENU_STATE_SELL_SUCCESS;
|
||||
}
|
||||
} else {
|
||||
menu->state = SHOP_MENU_STATE_EXIT_MESSAGE;
|
||||
}
|
||||
|
||||
menu->yesNoMenu = NULL;
|
||||
break;
|
||||
case SHOP_MENU_STATE_SELL_SUCCESS:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
if (JOY_NEW(PAD_BUTTON_A)) {
|
||||
UndergroundTextPrinter_SetTwoDigitNumber(CommManUnderground_GetMiscTextPrinter(), menu->shopPriceSizes[0]);
|
||||
UndergroundVendors_SetTreasureNameForPrinter(2, menu->shopPriceTypes[0]);
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_YouObtainedSphere);
|
||||
|
||||
Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2);
|
||||
|
||||
menu->state = SHOP_MENU_STATE_END_TRANSACTION;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SHOP_MENU_STATE_EXIT_MESSAGE:
|
||||
UndergroundVendors_PrintNPCMessage(UndergroundNPCs_Text_BeSeeingYouThen);
|
||||
menu->state = SHOP_MENU_STATE_EXIT_AFTER_TEXT;
|
||||
break;
|
||||
case SHOP_MENU_STATE_EXIT_AFTER_TEXT:
|
||||
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
|
||||
if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) {
|
||||
UndergroundVendors_EraseMessageBoxWindow();
|
||||
UndergroundVendors_FreeMenu(menu);
|
||||
CommManUnderground_ClearCurrentSysTaskInfo();
|
||||
SysTask_Done(sysTask);
|
||||
CommPlayerMan_ResumeFieldSystem();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UndergroundVendors_StartShopMenuTask(FieldSystem *fieldSystem)
|
||||
{
|
||||
int x = CommPlayer_GetXInFrontOfPlayer(CommSys_CurNetId());
|
||||
int z = CommPlayer_GetZInFrontOfPlayer(CommSys_CurNetId());
|
||||
int dir = CommPlayer_GetOppositeDir(CommPlayer_Dir(CommSys_CurNetId()));
|
||||
const int unused = 6;
|
||||
int vendorIndex;
|
||||
int vendorType = UndergroundVendors_FindVendorAtCoordinates(x, z, &vendorIndex);
|
||||
|
||||
CommManUnderground_SetStoredPosKey(UNDERGROUND_STORED_POS_KEY_GOODS_VENDOR + vendorType);
|
||||
|
||||
UndergroundMenu *menu = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
|
||||
MI_CpuClear8(menu, sizeof(UndergroundMenu));
|
||||
|
||||
menu->fieldSystem = fieldSystem;
|
||||
menu->vendorType = vendorType;
|
||||
menu->vendorIndex = vendorIndex;
|
||||
menu->string = String_Init(50 * 2, HEAP_ID_FIELD1);
|
||||
menu->fmtString = String_Init(50 * 2, HEAP_ID_FIELD1);
|
||||
menu->template = StringTemplate_Default(HEAP_ID_FIELD1);
|
||||
menu->state = SHOP_MENU_STATE_INTRO_MESSAGE;
|
||||
|
||||
Sound_PlayEffect(SEQ_SE_CONFIRM);
|
||||
menu->sysTask = SysTask_Start(UndergroundVendors_ShopMenuTask, menu, 10000);
|
||||
CommManUnderground_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
|
||||
|
||||
int objEventCount = MapHeaderData_GetNumObjectEvents(menu->fieldSystem);
|
||||
const ObjectEvent *objEventList = MapHeaderData_GetObjectEvents(menu->fieldSystem);
|
||||
|
||||
for (int i = 0; i < objEventCount; i++) {
|
||||
if (objEventList[i].x == x && objEventList[i].z == z) {
|
||||
MapObject *mapObj = MapObjMan_LocalMapObjByIndex(menu->fieldSystem->mapObjMan, i);
|
||||
MapObject_TryFace(mapObj, dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
16
src/scrcmd.c
16
src/scrcmd.c
@@ -90,7 +90,7 @@
|
||||
#include "overlay007/shop_menu.h"
|
||||
#include "overlay008/ov8_02249960.h"
|
||||
#include "overlay009/ov9_02249960.h"
|
||||
#include "overlay023/ov23_022521F0.h"
|
||||
#include "overlay023/underground_vendors.h"
|
||||
#include "overlay090/struct_ov90_021D0D80.h"
|
||||
#include "overlay098/struct_ov98_02247168.h"
|
||||
#include "overlay104/struct_ov104_02230BE4.h"
|
||||
@@ -5663,7 +5663,7 @@ static BOOL ScrCmd_19E(ScriptContext *ctx)
|
||||
u16 v3 = ScriptContext_ReadHalfWord(ctx);
|
||||
|
||||
ctx->data[0] = v3;
|
||||
*v0 = ov23_02252C98(v2, ctx->fieldSystem, MapObject_GetLocalID(*v1));
|
||||
*v0 = UndergroundVendors_ReturnNull(v2, ctx->fieldSystem, MapObject_GetLocalID(*v1));
|
||||
|
||||
ScriptContext_Pause(ctx, sub_020441C8);
|
||||
return TRUE;
|
||||
@@ -5674,9 +5674,9 @@ static BOOL sub_020441C8(ScriptContext *ctx)
|
||||
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_DATA_PTR);
|
||||
u16 *v1 = FieldSystem_GetVarPointer(ctx->fieldSystem, ctx->data[0]);
|
||||
|
||||
*v1 = ov23_02252C70(*v0);
|
||||
*v1 = UndergroundVendors_ReturnFFFE(*v0);
|
||||
|
||||
if ((*v1) == 0xfffe) {
|
||||
if (*v1 == 0xFFFE) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -5687,7 +5687,7 @@ static BOOL ScrCmd_19F(ScriptContext *ctx)
|
||||
{
|
||||
u8 *v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_MESSAGE_ID);
|
||||
|
||||
*v0 = ov23_02252C9C(ScriptContext_GetVar(ctx));
|
||||
*v0 = UndergroundVendors_PrintNPCMessage(ScriptContext_GetVar(ctx));
|
||||
ScriptContext_Pause(ctx, sub_02044240);
|
||||
|
||||
return TRUE;
|
||||
@@ -5701,7 +5701,7 @@ static BOOL sub_02044240(ScriptContext *ctx)
|
||||
|
||||
static BOOL ScrCmd_1A0(ScriptContext *ctx)
|
||||
{
|
||||
ov23_02252CD4();
|
||||
UndergroundVendors_EraseMessageBoxWindow();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -5710,7 +5710,7 @@ static BOOL ScrCmd_Unused_1A1(ScriptContext *ctx)
|
||||
u8 v0 = ScriptContext_ReadByte(ctx);
|
||||
u16 v1 = ScriptContext_GetVar(ctx);
|
||||
|
||||
ov23_02252CE0(v0, v1);
|
||||
UndergroundVendors_SetTreasureNameForPrinter(v0, v1);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -5719,7 +5719,7 @@ static BOOL ScrCmd_Unused_1A2(ScriptContext *ctx)
|
||||
u8 v0 = ScriptContext_ReadByte(ctx);
|
||||
u16 v1 = ScriptContext_GetVar(ctx);
|
||||
|
||||
ov23_02252CF4(v0, v1);
|
||||
UndergroundVendors_SetTrapNameForPrinter(v0, v1);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/charcode.h"
|
||||
#include "constants/goods.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/map_object.h"
|
||||
#include "constants/traps.h"
|
||||
#include "generated/goods.h"
|
||||
#include "generated/traps.h"
|
||||
|
||||
#include "struct_defs/underground.h"
|
||||
#include "struct_defs/underground_record.h"
|
||||
|
||||
@@ -48,9 +48,9 @@ static int sub_02099508(void)
|
||||
static const CommCmdTable Unk_020F68A4[] = {
|
||||
{ CommPlayer_RecvLocation, CommPacketSizeOf_RecvLocation, NULL },
|
||||
{ CommPlayer_RecvLocationAndInit, CommPacketSizeOf_RecvLocationAndInit, NULL },
|
||||
{ ov23_022431C4, CommPacketSizeOf_NetId, NULL },
|
||||
{ ov23_0224ACE8, CommPacketSizeOf_Nothing, NULL }, // 25
|
||||
{ ov23_0224ACF8, CommPacketSizeOf_NetId, NULL },
|
||||
{ CommManUnderground_ProcessVendorTalkRequest, CommPacketSizeOf_NetId, NULL },
|
||||
{ UndergroundPlayer_ProcessVendorTalk, CommPacketSizeOf_Nothing, NULL }, // 25
|
||||
{ UndergroundPlayer_ProcessVendorTalkServer, CommPacketSizeOf_NetId, NULL },
|
||||
{ UndergroundPlayer_ProcessOpenMenuRequest, CommPacketSizeOf_Nothing, NULL },
|
||||
{ ov23_022428D8, ov23_022428D4, NULL },
|
||||
{ UndergroundPlayer_ProcessOpenMenuEvent, CommPacketSizeOf_Variable, NULL },
|
||||
|
||||
Reference in New Issue
Block a user