Handle no tradeables

This commit is contained in:
Lorenzooone 2023-01-31 15:14:58 +01:00
parent 8066d40105
commit c69dc2180d
4 changed files with 60 additions and 31 deletions

View File

@ -58,7 +58,7 @@ u16 base_pos;
u8 sizes_index;
u8 syn_transmitted;
u8 has_transmitted_syn;
volatile u8 next_long_pause;
volatile u8 next_long_pause = 0;
int last_transfer_counter;
int buffer_counter;
int buffer_counter_out;

View File

@ -33,6 +33,7 @@
#define INFO_SCREEN 3
void main_menu_init(struct game_data_t*, u8, u8, u8, u8*);
void conclude_trade(struct game_data_t*, u8, u8, u8, u8*);
enum STATE {MAIN_MENU, MULTIBOOT, TRADING_MENU, INFO_MENU, START_TRADE, WAITING_DATA, TRADE_OPTIONS, NATURE_SETTING, OFFER_MENU, TRADING_ANIMATION};
enum STATE curr_state;
@ -197,26 +198,31 @@ void trade_menu_init(struct game_data_t* game_data, u8 target, u8 region, u8 mas
check_bad_trade_received(game_data, target, region, master, curr_gen, own_menu, cursor_y_pos);
}
void return_to_trade_menu(struct game_data_t* game_data, u8 target, u8 region, u8 master, u8 curr_gen, u8 own_menu, u8* cursor_y_pos, u8* cursor_x_pos) {
curr_state = TRADING_MENU;
set_screen(BASE_SCREEN);
reset_sprites_to_party();
disable_all_screens_but_current();
disable_all_cursors();
enable_all_valid_sprites();
cursor_update_trading_menu(*cursor_y_pos, *cursor_x_pos);
check_bad_trade_received(game_data, target, region, master, curr_gen, own_menu, cursor_y_pos);
void start_trade_init(struct game_data_t* game_data, u8 target, u8 region, u8 master, u8 curr_gen, u8* cursor_y_pos) {
if(is_valid_for_gen(game_data, curr_gen)) {
curr_state = START_TRADE;
load_comm_buffer(game_data, curr_gen, region);
init_start_state();
set_screen(BASE_SCREEN);
print_start_trade();
disable_all_screens_but_current();
reset_sprites_to_cursor();
disable_all_cursors();
start_transfer(master, curr_gen);
}
else
conclude_trade(game_data, target, region, master, cursor_y_pos);
}
void main_menu_init(struct game_data_t* game_data, u8 target, u8 region, u8 master, u8* cursor_y_pos) {
curr_state = MAIN_MENU;
prepare_main_options(game_data);
set_screen(BASE_SCREEN);
disable_all_screens_but_current();
print_main_menu(1, target, region, master);
*cursor_y_pos = init_cursor_y_pos_main_menu();
disable_all_screens_but_current();
reset_sprites_to_cursor();
disable_all_cursors();
*cursor_y_pos = init_cursor_y_pos_main_menu();
update_cursor_base_x(BASE_X_CURSOR_MAIN_MENU, counter);
cursor_update_main_menu(*cursor_y_pos);
}
@ -230,6 +236,22 @@ void info_menu_init(struct game_data_t* game_data, u8 cursor_x_pos, u8 curr_mon,
enable_screen(INFO_SCREEN);
}
void conclude_trade(struct game_data_t* game_data, u8 target, u8 region, u8 master, u8* cursor_y_pos) {
stop_transfer(master);
main_menu_init(game_data, target, region, master, cursor_y_pos);
}
void return_to_trade_menu(struct game_data_t* game_data, u8 target, u8 region, u8 master, u8 curr_gen, u8 own_menu, u8* cursor_y_pos, u8* cursor_x_pos) {
curr_state = TRADING_MENU;
set_screen(BASE_SCREEN);
reset_sprites_to_party();
disable_all_screens_but_current();
disable_all_cursors();
enable_all_valid_sprites();
cursor_update_trading_menu(*cursor_y_pos, *cursor_x_pos);
check_bad_trade_received(game_data, target, region, master, curr_gen, own_menu, cursor_y_pos);
}
int main(void)
{
counter = 0;
@ -305,10 +327,8 @@ int main(void)
if(curr_state == WAITING_DATA) {
if(get_trading_state() == RECEIVED_OFFER) {
int result = get_received_trade_offer();
if(result == TRADE_CANCELLED) {
stop_transfer(master);
main_menu_init(&game_data[0], target, region, master, &cursor_y_pos);
}
if(result == TRADE_CANCELLED)
conclude_trade(&game_data[0], target, region, master, &cursor_y_pos);
else if(result == WANTS_TO_CANCEL)
return_to_trade_menu(game_data, target, region, master, curr_gen, own_menu, &cursor_y_pos, &cursor_x_pos);
else {
@ -358,12 +378,7 @@ int main(void)
}
else if(returned_val > 0 && returned_val <= TOTAL_GENS) {
curr_gen = returned_val;
curr_state = START_TRADE;
init_start_state();
load_comm_buffer(&game_data[0], curr_gen, region);
start_transfer(master, curr_gen);
disable_cursor();
print_start_trade();
start_trade_init(&game_data[0], target, region, master, curr_gen, &cursor_y_pos);
}
break;
case TRADING_MENU:
@ -402,10 +417,8 @@ int main(void)
main_menu_init(&game_data[0], target, region, master, &cursor_y_pos);
break;
case START_TRADE:
if(handle_input_trade_setup(keys, curr_gen)) {
stop_transfer(master);
main_menu_init(&game_data[0], target, region, master, &cursor_y_pos);
}
if(handle_input_trade_setup(keys, curr_gen))
conclude_trade(&game_data[0], target, region, master, &cursor_y_pos);
break;
case TRADE_OPTIONS:
returned_val = handle_input_trade_options(keys, &submenu_cursor_x_pos);

View File

@ -6,25 +6,39 @@ u8 valid_options_main;
u8 options_trade[2][PARTY_SIZE];
u8 num_options_trade[2];
u8 is_valid_for_gen(struct game_data_t* game_data, u8 gen) {
if(gen == 1)
return (game_data->party_1.total > 0);
if(gen == 2)
return (game_data->party_2.total > 0);
u8 found = 0;
for(int i = 0; i < game_data->party_3.total; i++)
if(game_data->party_3_undec[i].is_valid_gen3) {
found = 1;
break;
}
return found;
}
void set_valid_options_main(struct game_data_t* game_data) {
valid_options_main = (game_data->party_1.total > 0 ? 1: 0) | (game_data->party_2.total > 0 ? 2: 0) | (game_data->party_3.total > 0 ? 4: 0);
valid_options_main = (is_valid_for_gen(game_data, 1) ? 1: 0) | (is_valid_for_gen(game_data, 2) ? 2: 0) | (is_valid_for_gen(game_data, 3) ? 4: 0);
}
void fill_options_main_array(struct game_data_t* game_data) {
u8 curr_slot = MAIN_OPTIONS_NO_OPTION;
for(int i = 0; i < MAIN_OPTIONS_NUM; i++)
options_main[i] = 0;
if(game_data->party_1.total > 0) {
if(is_valid_for_gen(game_data, 1)) {
options_main[curr_slot++] = 1;
for(int i = curr_slot; i < MAIN_OPTIONS_NUM; i++)
options_main[i] = 1;
}
if(game_data->party_2.total > 0) {
if(is_valid_for_gen(game_data, 2)) {
options_main[curr_slot++] = 2;
for(int i = curr_slot; i < MAIN_OPTIONS_NUM; i++)
options_main[i] = 2;
}
if(game_data->party_3.total > 0) {
if(is_valid_for_gen(game_data, 3)) {
options_main[curr_slot++] = 3;
for(int i = curr_slot; i < MAIN_OPTIONS_NUM; i++)
options_main[i] = 3;

View File

@ -14,6 +14,8 @@
u8 get_number_of_higher_ordered_options(u8*, u8, u8);
u8 get_number_of_lower_ordered_options(u8*, u8, u8);
u8 is_valid_for_gen(struct game_data_t*, u8);
u8* get_options_main();
u8 get_valid_options_main();
void prepare_main_options(struct game_data_t*);
@ -22,4 +24,4 @@ u8* get_options_trade(int);
u8 get_options_num_trade(int);
void prepare_options_trade(struct game_data_t*, u8, u8);
#endif
#endif