Merge pull request #121 from Lorenzooone/ImproveThe

Improve translatability of the "The " solution
This commit is contained in:
jeffman 2020-08-26 19:13:11 -04:00 committed by GitHub
commit 06da3b3237
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 91 additions and 15 deletions

View File

@ -34,6 +34,44 @@ void clear_rect_file(int x, int y, int width, int height, int pixels, unsigned s
}
}
void set_background_loaded_names()
{
set_names_to_default_background(THING_NAME_LENGTH,
set_names_to_default_background(FOOD_NAME_LENGTH,
set_names_to_default_background(DOG_NAME_LENGTH,
set_names_to_default_background(POO_NAME_LENGTH,
set_names_to_default_background(JEFF_NAME_LENGTH,
set_names_to_default_background(PAULA_NAME_LENGTH,
set_names_to_default_background(NESS_NAME_LENGTH, pc_names)))))));
}
byte* set_names_to_default_background(int maxLetters, byte *source)
{
//Reads a name and sets the bytes after it to a fixed value
int i = 0;
while(i < maxLetters + 2 && (*source) != 0xFF)
{
source++;
i++;
}
source++;
i++;
for(; i < maxLetters + 2; i++)
*(source++) = 0;
return source;
}
void copy_name_perm_mem(int maxLetters, byte *source, byte *destination)
{
//Copies the names to perm memory, but also makes the background of them a fixed value
for(int i = 0; i < maxLetters + 2; i++)
destination[i] = 0;
byte *finalSource = source + maxLetters;
while(source < finalSource && (*source) != 0xFF)
(*destination++) = (*source++);
*(destination + 1) = 0xFF;
}
unsigned short* getTilesetDest(int window_selector, int *width)
{
int *tilesetBasePtr = (int *)(0x82B79B4 + (window_selector * 20));

View File

@ -4,6 +4,14 @@
#include "types.h"
#include "vwf.h"
#define NESS_NAME_LENGTH 5
#define PAULA_NAME_LENGTH 5
#define JEFF_NAME_LENGTH 5
#define POO_NAME_LENGTH 5
#define DOG_NAME_LENGTH 6
#define FOOD_NAME_LENGTH 6
#define THING_NAME_LENGTH 6
typedef struct FILE_SELECT {
short status; // 0 = used, -1 = empty
short slot; // 0-2
@ -31,6 +39,9 @@ typedef struct FILE_SELECT {
int get_tile_number_file_select(int x, int y);
void clear_tile_file(int x, int y, int pixels);
void clear_rect_file(int x, int y, int width, int height, int pixels, unsigned short *tilesetDestPtr);
void set_background_loaded_names();
byte* set_names_to_default_background(int maxLetters, byte *source);
void copy_name_perm_mem(int maxLetters, byte *source, byte *destination);
unsigned short* getTilesetDest(int window_selector, int *width);
unsigned short getPaletteFromFileWindow(int x, int y, int window_selector);
void setPaletteToFileWindow(int x, int y, int window_selector, unsigned short palette);

View File

@ -994,6 +994,18 @@ pop {r4,pc}
// Update musical note value (for Ness' Nightmare)
.org 0x80DAF12 :: cmp r0,0xAC
//---------------------------------------------------------
// Name setup hacks (improves the "The" fix and makes it portable)
//---------------------------------------------------------
.org 0x80020AE :: bl copy_name_perm_mem
.org 0x80020BE :: bl copy_name_perm_mem
.org 0x80020CE :: bl copy_name_perm_mem
.org 0x80020DE :: bl copy_name_perm_mem
.org 0x80020EE :: bl copy_name_perm_mem
.org 0x80020FE :: bl copy_name_perm_mem
.org 0x800210E :: bl copy_name_perm_mem
.org 0x800215A :: bl _215a_load_names
//---------------------------------------------------------
// BEB6C hacks (Goods inner menu)
//---------------------------------------------------------

View File

@ -971,6 +971,14 @@ add r0,r0,r7
bx lr
.pool
//==============================================================================
//Sets the names' background to a default
_215a_load_names:
push {lr}
bl 0x8012460
bl set_background_loaded_names
pop {pc}
//==============================================================================
// Add a space between enemy name and letter in multi-enemy fights for the selection window. Called only by enemies.
dcd00_enemy_letter:
@ -1183,29 +1191,36 @@ add r2,#1
ldrb r0,[r1,r2]
cmp r0,#1 //Does this string have the the flag? If it does not, then proceed to the end
bne @@end
ldr r2,=0x50959884 //Does this string have "The "? If it does, check if it ends instantly.
ldr r2,=0x50959884 //"The "
ldr r0,[r1,#0]
cmp r0,r2
beq @@next_found_the
sub r0,r0,r2 //Does this string have "the "? If it does not, then it's a character. Proceed to the end.
cmp r0,#0x20
bne @@end
sub r2,r0,r2
cmp r2,#0
beq @@next_found_the //Does this string have "The "? If it does, proceed accordingly
cmp r2,#0x20
beq @@next_found_the //Does this string have "the "? If it does, proceed accordingly
//For the other languages: add the other things to compare to here...? Maybe you can do it in a smarter way though...
//No articles found. Go to the end
b @@end
@@next_found_the: //A starting "The " or "the " has been found
mov r2,#0xFF
lsl r2,r2,#8 //r2 has 0xFF00
ldrh r0,[r1,#4] //Load the next two bytes after "The " or "the "
cmp r0,r2 //If they're the same as r2, then it's a character. End this here.
beq @@end
//Assumes the uppercase and lowercase characters are 0x20 apart
ldr r0,=m2_cstm_last_printed
ldrb r0,[r0,#0]
cmp r0,#0x70 //Is the previous character an @?
beq @@Maius
mov r0,#0xA4 //Change The to the
beq @@Upper
mov r0,#0x20
sub r2,r0,r2 //Is this "t"? If it is, this will be 0. Otherwise, it will be 0x20
ldr r0,[r1,#0]
add r0,r0,r2 //Ensure it is the
strb r0,[r1,#0]
b @@end
@@Maius:
mov r0,#0x84 //Ensure it is The
@@Upper:
ldr r0,[r1,#0]
sub r0,r0,r2 //Ensure it is The
strb r0,[r1,#0]
@@end: