A tale of troubling projects, programming, and of glimpses into what Game Freak is up to in the world of Pokémon.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
///////////////////////////////////////////
void init_menu_callback(menu_evt * event) {
if (event -> active == TRUE) {
menu_type = event -> subtype_ID;
render_menu(menu_type);
lock_map_controls();
} else {
unlock_map_controls();
}
}
///////////////////////////////////////////
///////////////////////////////////////////
#define SELECT_MON 0
#define WAIT_OTHER_SELECTION 1
#define CONFIRM_SELECTION 2
#define WAIT_OTHER_CONFIRM 3
#define SEND_MON 4
#define RECEIVE_MON 5
///////////////////////////////////////////
///////////////////////////////////////////
while (_trading) {
switch (trade_state.mode) {
case SELECT_MON:
update_selectmon(trade_state);
break;
case WAIT_OTHER_SELECTION:
trade_idle();
break;
case CONFIRM_SELECTION:
trade_conf();
break;
case WAIT_OTHER_CONFIRM:
trade_idle();
break;
case SEND_MON:
send_data(trade_state);
break;
case RECEIVE_MON:
update_data(trade_state);
break;
}
}
///////////////////////////////////////////
///////////////////////////////////////////
typedef uint8_t Uint24_t[3];
typedef struct Party_mon {
uint8_t mon_index;
uint8_t h_item_index;
uint8_t move1_index;
uint8_t move2_index;
uint8_t move3_index;
uint8_t move4_index;
uint16_t ot_id;
Uint24_t exp;
uint16_t hp_ev;
uint16_t atk_ev;
uint16_t def_ev;
uint16_t spd_ev;
uint16_t spe_ev;
uint16_t indiv_val;
uint8_t move1_pp;
uint8_t move2_pp;
uint8_t move3_pp;
uint8_t move4_pp;
uint8_t frnd_val;
uint8_t cprs;
uint16_t catch_dat;
uint8_t mon_lv;
uint8_t status_cond;
uint8_t swap;
uint16_t cur_hp;
uint16_t max_hp;
uint16_t atk;
uint16_t def;
uint16_t spd;
uint16_t spa;
uint16_t spd;
};
///////////////////////////////////////////
///////////////////////////////////////////
void add_listener(list, callback) {
int last = LENGTH(list);
list[last] = callback;
list[last + 1] = NULL;
}
///////////////////////////////////////////
///////////////////////////////////////////
struct player player_data;
///////////////////////////////////////////
///////////////////////////////////////////
player_data.controls = TRUE;
player_data.event_listeners = game_state -> strength_listeners;
///////////////////////////////////////////
///////////////////////////////////////////
add_listener(player_data.event_listeners, player_strength_callback);
///////////////////////////////////////////
///////////////////////////////////////////
if (case == STR)
strength_player_event = dispatch_event(player -> event_listeners[index(STR)], & data);
///////////////////////////////////////////
///////////////////////////////////////////
void player_strength_callback(hm_evt * event) {
█ if (event -> active = TRUE) {
lock_all_controls();
} else {
unlock_all_controls();
}
}
///////////////////////////////////////////
///////////////////////////////////////////
while (&_monami_ref->ontouch) {
callback_t* callback= nullptr;
cb_args_t callback_args {};
auto add_listener = [&] (callback_t* cb) -> void noexcept {
monami_listeners.add_listener(monami_session.event_listeners, cb);
};
switch (touch_pointer.uielem) {
case monami_flags::IDLE:
&monami_data->wake();
add_listener(&monami_active_callback);
callback= nullptr;
break;
case touch_ui::TREAT_MENU:
add_listener(&treat_mode_callback);
init_treat_mode(&monami_data);
callback= nullptr;
break;
case touch_ui::TREAT_BAR_OPEN:
callback= &treat_mode_callback;
callback_args= make_tuple(touch_pointer);
break;
case monami_flags::TREAT_MODE:
callback= &mon_render_callback;
callback_args= make_tuple(monami_state, touch_pointer);
break;
case touch_ui::TOUCH_GAME_MENU:
game_menu_load();
add_listener(&minigame_menu_callback);
callback= nullptr;
break;
case touch_ui::GAME_MENU:
callback= &minigame_menu_callback;
callback_args= make_tuple(touch_pointer);
break;
case touch_ui::SELECT_EXIT:
callback= nullptr;
monami_quit(monami_state, &monami_data);
break;
case monami_flags::MON_PET:
add_listener(&mon_pet_callback);
callback= nullptr;
break;
default:
refresh_camera();
callback= &mon_render_callback;
callback_args= make_tuple(monami_state, touch_pointer);
break;
}
if (callback) {
apply(callback, callback_args);
}
}
///////////////////////////////////////////