mirror of
https://github.com/Lorenzooone/Pokemon-Gen3-to-Gen-X.git
synced 2026-04-26 08:37:40 -05:00
Implement special Japanese characters
This commit is contained in:
parent
284cc63b1a
commit
b757cd5c0b
|
|
@ -32,6 +32,7 @@
|
|||
#define MIN_WAITCYCLE 1
|
||||
|
||||
#define BASE_SCREEN 0
|
||||
#define TRADE_CANCEL_SCREEN 1
|
||||
#define INFO_SCREEN 3
|
||||
|
||||
void main_menu_init(struct game_data_t*, u8, u8, u8, u8*);
|
||||
|
|
@ -207,11 +208,16 @@ void trade_options_init(u8 cursor_x_pos, u8* submenu_cursor_x_pos) {
|
|||
}
|
||||
|
||||
void trade_menu_init(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) {
|
||||
set_bg_pos(BASE_SCREEN, X_OFFSET_TRADE_MENU, Y_OFFSET_TRADE_MENU);
|
||||
curr_state = TRADING_MENU;
|
||||
*cursor_y_pos = 0;
|
||||
*cursor_x_pos = 0;
|
||||
prepare_options_trade(game_data, curr_gen, own_menu);
|
||||
print_trade_menu(game_data, 1, curr_gen, 1, own_menu);
|
||||
set_screen(TRADE_CANCEL_SCREEN);
|
||||
print_trade_menu_cancel(1);
|
||||
enable_screen(TRADE_CANCEL_SCREEN);
|
||||
set_screen(BASE_SCREEN);
|
||||
set_party_sprite_counter();
|
||||
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);
|
||||
|
|
@ -224,6 +230,7 @@ void start_trade_init(struct game_data_t* game_data, u8 target, u8 region, u8 ma
|
|||
load_comm_buffer(game_data, curr_gen, region);
|
||||
init_start_state();
|
||||
set_screen(BASE_SCREEN);
|
||||
set_bg_pos(BASE_SCREEN, 0, 0);
|
||||
print_start_trade();
|
||||
disable_all_screens_but_current();
|
||||
reset_sprites_to_cursor();
|
||||
|
|
@ -239,6 +246,7 @@ void main_menu_init(struct game_data_t* game_data, u8 target, u8 region, u8 mast
|
|||
curr_state = MAIN_MENU;
|
||||
prepare_main_options(game_data);
|
||||
set_screen(BASE_SCREEN);
|
||||
set_bg_pos(BASE_SCREEN, 0, 0);
|
||||
print_main_menu(1, target, region, master);
|
||||
disable_all_screens_but_current();
|
||||
reset_sprites_to_cursor();
|
||||
|
|
@ -271,6 +279,10 @@ void return_to_trade_menu(struct game_data_t* game_data, u8 target, u8 region, u
|
|||
disable_all_screens_but_current();
|
||||
disable_all_cursors();
|
||||
enable_all_valid_sprites();
|
||||
set_screen(TRADE_CANCEL_SCREEN);
|
||||
print_trade_menu_cancel(1);
|
||||
enable_screen(TRADE_CANCEL_SCREEN);
|
||||
set_screen(BASE_SCREEN);
|
||||
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);
|
||||
prepare_flush();
|
||||
|
|
@ -413,6 +425,10 @@ int main(void)
|
|||
case TRADING_MENU:
|
||||
returned_val = handle_input_trading_menu(&cursor_y_pos, &cursor_x_pos, keys, curr_gen, own_menu);
|
||||
print_trade_menu(game_data, update, curr_gen, 0, own_menu);
|
||||
set_screen(TRADE_CANCEL_SCREEN);
|
||||
print_trade_menu_cancel(update);
|
||||
enable_screen(TRADE_CANCEL_SCREEN);
|
||||
set_screen(BASE_SCREEN);
|
||||
cursor_update_trading_menu(cursor_y_pos, cursor_x_pos);
|
||||
curr_mon = returned_val -1;
|
||||
|
||||
|
|
|
|||
|
|
@ -99,12 +99,21 @@ void print_trade_menu(struct game_data_t* game_data, u8 update, u8 curr_gen, u8
|
|||
// I tried just using printf here with left padding, but it's EXTREMELY slow
|
||||
PRINT_FUNCTION("\x01", get_pokemon_name_raw(mon));
|
||||
if(load_sprites)
|
||||
load_pokemon_sprite_raw(mon, BASE_Y_SPRITE_TRADE_MENU + (i*BASE_Y_SPRITE_INCREMENT_TRADE_MENU), (((X_TILES >> 1) << 3)*j) + BASE_X_SPRITE_TRADE_MENU);
|
||||
load_pokemon_sprite_raw(mon, BASE_Y_SPRITE_TRADE_MENU + (i*BASE_Y_SPRITE_INCREMENT_TRADE_MENU), (((X_LIMIT >> 1) << 3)*j) + BASE_X_SPRITE_TRADE_MENU);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void print_trade_menu_cancel(u8 update) {
|
||||
if(!update)
|
||||
return;
|
||||
|
||||
reset_screen(BLANK_FILL);
|
||||
|
||||
set_text_y(Y_LIMIT-1);
|
||||
PRINT_FUNCTION(" Cancel");
|
||||
set_text_x(2);
|
||||
PRINT_FUNCTION("Cancel");
|
||||
}
|
||||
|
||||
void print_offer_screen(struct game_data_t* game_data, u8 own_mon, u8 other_mon) {
|
||||
|
|
|
|||
|
|
@ -5,19 +5,9 @@
|
|||
#include "gen3_save.h"
|
||||
#include "multiboot_handler.h"
|
||||
|
||||
#define X_TILES 30
|
||||
#define BASE_Y_SPRITE_TRADE_MENU 0
|
||||
#define BASE_Y_SPRITE_INCREMENT_TRADE_MENU 24
|
||||
#define BASE_X_SPRITE_TRADE_MENU 8
|
||||
|
||||
#define BASE_Y_SPRITE_INFO_PAGE 0
|
||||
#define BASE_X_SPRITE_INFO_PAGE 0
|
||||
|
||||
#define BASE_Y_SPRITE_OFFER_MENU 0
|
||||
#define BASE_X_SPRITE_OFFER_MENU 0
|
||||
|
||||
void print_game_info(struct game_data_t*, int);
|
||||
void print_trade_menu(struct game_data_t*, u8, u8, u8, u8);
|
||||
void print_trade_menu_cancel(u8);
|
||||
void print_pokemon_pages(u8, u8, struct gen3_mon_data_unenc*, u8);
|
||||
void print_main_menu(u8, u8, u8, u8);
|
||||
void print_multiboot_mid_process(u8);
|
||||
|
|
|
|||
|
|
@ -28,10 +28,6 @@
|
|||
#define FONT_POS VRAM_START
|
||||
#define JP_FONT_POS (FONT_POS + FONT_SIZE)
|
||||
#define NUMBERS_POS (VRAM_END - (10000*2))
|
||||
#define SCREEN_REAL_WIDTH 0x100
|
||||
#define SCREEN_REAL_HEIGHT 0x100
|
||||
#define X_SIZE (SCREEN_REAL_WIDTH>>3)
|
||||
#define Y_SIZE (SCREEN_REAL_HEIGHT>>3)
|
||||
#define X_OFFSET_POS 0
|
||||
#define Y_OFFSET_POS 1
|
||||
|
||||
|
|
@ -244,6 +240,13 @@ u8 write_char(u16 character) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void write_above_char(u16 character) {
|
||||
u8 y_pos_altered = y_pos-1;
|
||||
if(!y_pos)
|
||||
y_pos_altered = Y_SIZE-1;
|
||||
screen[x_pos+(y_pos_altered*X_SIZE)] = character | (PALETTE << 12);
|
||||
}
|
||||
|
||||
int sub_printf(u8* string) {
|
||||
while((*string) != '\0')
|
||||
if(write_char(*(string++)))
|
||||
|
|
@ -254,7 +257,13 @@ int sub_printf_gen3(u8* string, u8 size_max, u8 is_jp) {
|
|||
u8 curr_pos = 0;
|
||||
while((*string) != GEN3_EOL) {
|
||||
if(is_jp) {
|
||||
if(write_char((*(string++))+FONT_TILES))
|
||||
// TODO: Fix the above characters' positions, then remove the swaps
|
||||
u8 character = *(string++);
|
||||
if((character >= GEN3_FIRST_TICKS_START && character <= GEN3_FIRST_TICKS_END) || (character >= GEN3_SECOND_TICKS_START && character <= GEN3_SECOND_TICKS_END))
|
||||
write_above_char((GENERIC_TICKS_CHAR+FONT_TILES)|VSWAP_TILE|HSWAP_TILE);
|
||||
else if((character >= GEN3_FIRST_CIRCLE_START && character <= GEN3_FIRST_CIRCLE_END) || (character >= GEN3_SECOND_CIRCLE_START && character <= GEN3_SECOND_CIRCLE_END))
|
||||
write_above_char((GENERIC_CIRCLE_CHAR+FONT_TILES)|VSWAP_TILE|HSWAP_TILE);
|
||||
if(write_char(character+FONT_TILES))
|
||||
return 0;
|
||||
}
|
||||
else if(write_char(text_gen3_to_general_int_bin[*(string++)]))
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@
|
|||
#define PRINT_FUNCTION fast_printf
|
||||
#define X_LIMIT (SCREEN_WIDTH>>3)
|
||||
#define Y_LIMIT (SCREEN_HEIGHT>>3)
|
||||
#define X_SIZE 0x20
|
||||
#define Y_SIZE 0x20
|
||||
#define SCREEN_REAL_WIDTH 0x100
|
||||
#define SCREEN_REAL_HEIGHT 0x100
|
||||
#define X_SIZE (SCREEN_REAL_WIDTH>>3)
|
||||
#define Y_SIZE (SCREEN_REAL_HEIGHT>>3)
|
||||
|
||||
#define PALETTE 0xF
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#define OAM_ADDR 0x7000000
|
||||
#define CPUFASTSET_FILL (0x1000000)
|
||||
|
||||
#define SPRITE_ALT_TILE_DISTANCE 0x10
|
||||
|
||||
#define DISABLE_SPRITE (1<<9)
|
||||
#define OFF_SCREEN_SPRITE SCREEN_HEIGHT
|
||||
|
||||
|
|
@ -208,13 +210,12 @@ void reset_sprites_to_party(){
|
|||
}
|
||||
|
||||
void move_sprites(u8 counter){
|
||||
u8 counter_kind = counter & 8;
|
||||
if(!(counter & 7)) {
|
||||
for(int i = inner_cursor_sprite+1; i < __inner_sprite_counter; i++) {
|
||||
u16 obj_attr_2 = *((u16*)(OAM_ADDR + (8*i) + 4));
|
||||
if(obj_attr_2 & 0x10)
|
||||
obj_attr_2 &= ~0x10;
|
||||
else
|
||||
obj_attr_2 |= 0x10;
|
||||
u16 obj_attr_2 = (*((u16*)(OAM_ADDR + (8*i) + 4))) & ~SPRITE_ALT_TILE_DISTANCE;
|
||||
if(counter_kind)
|
||||
obj_attr_2 |= SPRITE_ALT_TILE_DISTANCE;
|
||||
*((u16*)(OAM_ADDR + (8*i) + 4)) = obj_attr_2;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,18 @@
|
|||
#ifndef SPRITE_HANDLER__
|
||||
#define SPRITE_HANDLER__
|
||||
|
||||
#define BASE_Y_CURSOR_TRADING_MENU 16
|
||||
#define BASE_X_CURSOR_TRADING_MENU 1
|
||||
#define BASE_Y_SPRITE_INFO_PAGE 0
|
||||
#define BASE_X_SPRITE_INFO_PAGE 0
|
||||
|
||||
#define X_OFFSET_TRADE_MENU 0
|
||||
#define Y_OFFSET_TRADE_MENU -3
|
||||
#define BASE_Y_CURSOR_TRADING_MENU (16 - Y_OFFSET_TRADE_MENU)
|
||||
#define BASE_X_CURSOR_TRADING_MENU (1 - X_OFFSET_TRADE_MENU)
|
||||
#define BASE_Y_CURSOR_INCREMENT_TRADING_MENU 24
|
||||
#define BASE_X_CURSOR_INCREMENT_TRADING_MENU 120
|
||||
#define BASE_Y_SPRITE_TRADE_MENU (0 - Y_OFFSET_TRADE_MENU)
|
||||
#define BASE_Y_SPRITE_INCREMENT_TRADE_MENU 24
|
||||
#define BASE_X_SPRITE_TRADE_MENU (8 - X_OFFSET_TRADE_MENU)
|
||||
#define CURSOR_Y_POS_CANCEL 152
|
||||
#define CURSOR_X_POS_CANCEL 2
|
||||
|
||||
|
|
@ -16,6 +24,8 @@
|
|||
#define BASE_X_CURSOR_INCREMENT_TRADE_OPTIONS 120
|
||||
#define BASE_Y_CURSOR_TRADE_OPTIONS 152
|
||||
|
||||
#define BASE_Y_SPRITE_OFFER_MENU 0
|
||||
#define BASE_X_SPRITE_OFFER_MENU 0
|
||||
#define BASE_X_CURSOR_OFFER_OPTIONS 10
|
||||
#define BASE_Y_CURSOR_OFFER_OPTIONS 128
|
||||
#define BASE_X_CURSOR_INCREMENT_OFFER_OPTIONS 64
|
||||
|
|
|
|||
|
|
@ -7,6 +7,17 @@
|
|||
#define GENERIC_F_GENDER 0x89
|
||||
#define GENERIC_U_GENDER GENERIC_SPACE
|
||||
|
||||
#define GEN3_FIRST_TICKS_START 0x37
|
||||
#define GEN3_FIRST_TICKS_END 0x4A
|
||||
#define GEN3_FIRST_CIRCLE_START 0x4B
|
||||
#define GEN3_FIRST_CIRCLE_END 0x4F
|
||||
#define GEN3_SECOND_TICKS_START 0x87
|
||||
#define GEN3_SECOND_TICKS_END 0x9A
|
||||
#define GEN3_SECOND_CIRCLE_START 0x9B
|
||||
#define GEN3_SECOND_CIRCLE_END 0x9F
|
||||
#define GENERIC_TICKS_CHAR 0xFD
|
||||
#define GENERIC_CIRCLE_CHAR 0xFE
|
||||
|
||||
#define GEN3_EOL 0xFF
|
||||
#define GEN2_EOL 0x50
|
||||
#define GENERIC_EOL 0
|
||||
|
|
@ -48,4 +59,4 @@ void text_gen3_to_generic(u8*, u8*, u8, u8, u8, u8);
|
|||
void text_gen3_to_gen12(u8*, u8*, u8, u8, u8, u8);
|
||||
void text_gen12_to_gen3(u8*, u8*, u8, u8, u8, u8);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user