Merge pull request #66 from Lorenzooone/give_proper

Print Give text
This commit is contained in:
jeffman 2019-08-21 21:55:42 -04:00 committed by GitHub
commit 21435861d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 702 additions and 25 deletions

54
src/c/character.h Normal file
View File

@ -0,0 +1,54 @@
#include "types.h"
typedef enum AILMENT
{
CONSCIOUS = 0,
UNCONSCIOUS = 1,
DIAMONDIZED = 2,
PARALYZED = 3,
NAUSEOUS = 4,
POISONED = 5,
SUNSTROKE = 6,
SNIFFLING = 7,
MASHROOMIZED = 8,
POSSESSED = 9,
HOMESICK = 0xA,
} AILMENT;
typedef struct CHARACTER_DATA {
// 0x00
unsigned short inventory[14];
//0x1C
unsigned int experience;
byte unknown[0xC];
unsigned int level;
unsigned short maxHp;
unsigned short currentHp;
unsigned short unknown2;
unsigned short scrollingHp;
unsigned short maxPp;
unsigned short currentPp;
unsigned short unknown3;
unsigned short scrollingPp;
AILMENT ailment;
byte flag[5];
byte unknown4[2];
byte base_atk;
byte base_def;
byte base_speed;
byte base_guts;
byte base_luck;
byte base_vitality;
byte base_iq;
byte atk;
byte def;
byte speed;
byte guts;
byte luck;
byte vitality;
byte iq;
byte unknown5[0xB];
byte equipment[4];
byte unknown6[0x7];
} CHARACTER_DATA;

View File

@ -550,3 +550,521 @@ void shop_print_items(WINDOW *window, unsigned char *items, int y_offset, int it
} }
} }
//Load proper give text into str and then go to it
//It's based on the party's status, whether the target's inventory is full or not and whether the source is the target
void give_print(byte item, byte target, byte source, WINDOW *window, byte *str)
{
bool notFullInventory = false;
int index;
struct CHARACTER_DATA *user_data = (&m2_ness_data[source]);
struct CHARACTER_DATA *target_data = (&m2_ness_data[target]);
bool incapable_user = false;
bool incapable_target = false;
for(index = 0; index < 0xE; index++)
if(target_data->inventory[index] == 0)
{
notFullInventory = true;
break;
}
if((user_data->ailment == UNCONSCIOUS) ||(user_data->ailment == DIAMONDIZED))
incapable_user = true;
if((target_data->ailment == UNCONSCIOUS) ||(target_data->ailment == DIAMONDIZED))
incapable_target = true;
index = 0;
if(source == target)
{
if(incapable_user)
setupSelf_Dead(str, &index, source, item);
else
setupSelf_Alive(str, &index, source, item);
}
else if(!notFullInventory)
{
if(!incapable_target && !incapable_user)
setupFull_Both_Alive(str, &index, source, target, item);
else if(incapable_target && incapable_user)
setupFull_Both_Dead(str, &index, source, target, item);
else if(incapable_target && !incapable_user)
setupFull_Target_Dead(str, &index, source, target, item);
else
setupFull_User_Dead(str, &index, source, target, item);
}
else
{
if(!incapable_target && !incapable_user)
setup_Both_Alive(str, &index, source, target, item);
else if(incapable_target && !incapable_user)
setup_Target_Dead(str, &index, source, target, item);
else if(!incapable_target && incapable_user)
setup_User_Dead(str, &index, source, target, item);
else
setup_Both_Dead(str, &index, source, target, item);
}
str[index++] = 0x1D;
str[index++] = 0xFF; //END
str[index++] = 0;
str[index++] = 0xFF; //END
window->text_start = str;
window->text_start2 = str;
}
void setupSelf_Alive(byte *String, int *index, byte user, byte item)
{
char rearranged[] = " rearranged ";
char own[] = " own";
char items[] = " items and the ";
char moved[] = " moved.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(user, String, index);
for (int i = 0; i < (sizeof(rearranged) - 1); i++)
String[(*index)++] = encode_ascii(rearranged[i]);
getPossessive(user, String, index);
for (int i = 0; i < (sizeof(own) - 1); i++)
String[(*index)++] = encode_ascii(own[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(items) - 1); i++)
String[(*index)++] = encode_ascii(items[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' '); //Format
String[(*index)++] = encode_ascii(' ');
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
for (int i = 0; i < (sizeof(moved) - 1); i++)
String[(*index)++] = encode_ascii(moved[i]);
}
void setupSelf_Dead(byte *String, int *index, byte user, byte item)
{
struct CHARACTER_DATA *tmp; //Get alive character
byte alive = 0;
while((alive == user))
alive++;
for(int i = alive; i < 4; i++)
{
tmp = &(m2_ness_data[i]);
if((tmp->ailment != UNCONSCIOUS) && (tmp->ailment != DIAMONDIZED))
{
alive = i;
break;
}
}
char rearranged[] = " rearranged";
char items[] = "'s items and the";
char moved[] = " moved.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(alive, String, index);
for (int i = 0; i < (sizeof(rearranged) - 1); i++)
String[(*index)++] = encode_ascii(rearranged[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' ');
String[(*index)++] = encode_ascii(' '); //Format
getCharName(user, String, index);
for (int i = 0; i < (sizeof(items) - 1); i++)
String[(*index)++] = encode_ascii(items[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' ');
String[(*index)++] = encode_ascii(' '); //Format
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
for (int i = 0; i < (sizeof(moved) - 1); i++)
String[(*index)++] = encode_ascii(moved[i]);
}
void setupFull_Both_Alive(byte *String, int *index, byte user, byte target, byte item)
{
char tried[] = " tried to give";
char the[] = " the ";
char to[] = " to ";
char but[] = "but ";
char was[] = " was already";
char carrying[] = " carrying too much stuff.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(user, String, index);
for (int i = 0; i < (sizeof(tried) - 1); i++)
String[(*index)++] = encode_ascii(tried[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
getCharName(target, String, index);
String[(*index)++] = encode_ascii(',');
String[(*index)++] = 0x2;
String[(*index)++] = 0xFF; //prompt + newline
String[(*index)++] = 0x70; //Initial bullet
for (int i = 0; i < (sizeof(but) - 1); i++)
String[(*index)++] = encode_ascii(but[i]);
getPronoun(target, String, index);
for (int i = 0; i < (sizeof(was) - 1); i++)
String[(*index)++] = encode_ascii(was[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(carrying) - 1); i++)
String[(*index)++] = encode_ascii(carrying[i]);
}
void setupFull_Target_Dead(byte *String, int *index, byte user, byte target, byte item)
{
char tried[] = " tried to add";
char the[] = " the ";
char to[] = " to ";
char s_stuff[]= "'s stuff,";
char but[] = "but there was no room for it.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(user, String, index);
for (int i = 0; i < (sizeof(tried) - 1); i++)
String[(*index)++] = encode_ascii(tried[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
getCharName(target, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
String[(*index)++] = 0x2;
String[(*index)++] = 0xFF; //prompt + newline
String[(*index)++] = 0x70; //Initial bullet
for (int i = 0; i < (sizeof(but) - 1); i++)
String[(*index)++] = encode_ascii(but[i]);
}
void setupFull_User_Dead(byte *String, int *index, byte user, byte target, byte item)
{
char tried[] = " tried to take";
char the[] = " the ";
char from[] = " from ";
char s_stuff[]= "'s stuff,";
char but[] = "but ";
char was[] = " was already";
char carrying[] = " carrying too much stuff.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(target, String, index);
for (int i = 0; i < (sizeof(tried) - 1); i++)
String[(*index)++] = encode_ascii(tried[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(from) - 1); i++)
String[(*index)++] = encode_ascii(from[i]);
getCharName(user, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
String[(*index)++] = 0x2;
String[(*index)++] = 0xFF; //prompt + newline
String[(*index)++] = 0x70; //Initial bullet
for (int i = 0; i < (sizeof(but) - 1); i++)
String[(*index)++] = encode_ascii(but[i]);
getPronoun(target, String, index);
for (int i = 0; i < (sizeof(was) - 1); i++)
String[(*index)++] = encode_ascii(was[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(carrying) - 1); i++)
String[(*index)++] = encode_ascii(carrying[i]);
}
void setupFull_Both_Dead(byte *String, int *index, byte user, byte target, byte item)
{
struct CHARACTER_DATA *tmp; //Get alive character
byte alive = 0;
while((alive == user) || (alive == target))
alive++;
for(int i = alive; i < 4; i++)
{
tmp = &(m2_ness_data[i]);
if((tmp->ailment != UNCONSCIOUS) && (tmp->ailment != DIAMONDIZED))
{
alive = i;
break;
}
}
char tried[] = " tried to add";
char s_[] = "'s ";
char to[] = " to ";
char s_stuff[]= "'s stuff,";
char but[] = "but there was no room for it.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(alive, String, index);
for (int i = 0; i < (sizeof(tried) - 1); i++)
String[(*index)++] = encode_ascii(tried[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' ');
String[(*index)++] = encode_ascii(' '); //Format
getCharName(user, String, index);
for (int i = 0; i < (sizeof(s_) - 1); i++)
String[(*index)++] = encode_ascii(s_[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
getCharName(target, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
String[(*index)++] = 0x2;
String[(*index)++] = 0xFF; //prompt + newline
String[(*index)++] = 0x70; //Initial bullet
for (int i = 0; i < (sizeof(but) - 1); i++)
String[(*index)++] = encode_ascii(but[i]);
}
void setup_Both_Alive(byte *String, int *index, byte user, byte target, byte item)
{
char gave[] = " gave";
char the[] = " the ";
char to[] = " to ";
String[(*index)++] = 0x70; //Initial bullet
getCharName(user, String, index);
for (int i = 0; i < (sizeof(gave) - 1); i++)
String[(*index)++] = encode_ascii(gave[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
getCharName(target, String, index);
String[(*index)++] = encode_ascii('.');
}
void setup_Target_Dead(byte *String, int *index, byte user, byte target, byte item)
{
char added[] = " added";
char the[] = " the ";
char to[] = " to ";
char s_stuff[] = "'s stuff.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(user, String, index);
for (int i = 0; i < (sizeof(added) - 1); i++)
String[(*index)++] = encode_ascii(added[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
getCharName(target, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
}
void setup_User_Dead(byte *String, int *index, byte user, byte target, byte item)
{
char took[] = " took";
char the[] = " the ";
char from[] = " from ";
char s_stuff[] = "'s stuff.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(target, String, index);
for (int i = 0; i < (sizeof(took) - 1); i++)
String[(*index)++] = encode_ascii(took[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(the) - 1); i++)
String[(*index)++] = encode_ascii(the[i]);
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
for (int i = 0; i < (sizeof(from) - 1); i++)
String[(*index)++] = encode_ascii(from[i]);
getCharName(user, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
}
void setup_Both_Dead(byte *String, int *index, byte user, byte target, byte item)
{
struct CHARACTER_DATA *tmp; //Get alive character
byte alive = 0;
while((alive == user) || (alive == target))
alive++;
for(int i = alive; i < 4; i++)
{
tmp = &(m2_ness_data[i]);
if((tmp->ailment != UNCONSCIOUS) && (tmp->ailment != DIAMONDIZED))
{
alive = i;
break;
}
}
char added[] = " added ";
char _s[] = "'s";
char to[] = " to";
char s_stuff[] = "'s stuff.";
String[(*index)++] = 0x70; //Initial bullet
getCharName(alive, String, index);
for (int i = 0; i < (sizeof(added) - 1); i++)
String[(*index)++] = encode_ascii(added[i]);
getCharName(user, String, index);
for (int i = 0; i < (sizeof(_s) - 1); i++)
String[(*index)++] = encode_ascii(_s[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' '); //Format
String[(*index)++] = encode_ascii(' ');
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
copy_name(String, item_str, index, 0);
for (int i = 0; i < (sizeof(to) - 1); i++)
String[(*index)++] = encode_ascii(to[i]);
String[(*index)++] = 1;
String[(*index)++] = 0xFF; //newline
String[(*index)++] = encode_ascii(' '); //Format
String[(*index)++] = encode_ascii(' ');
getCharName(target, String, index);
for (int i = 0; i < (sizeof(s_stuff) - 1); i++)
String[(*index)++] = encode_ascii(s_stuff[i]);
}

View File

@ -2,6 +2,7 @@
#define HEADER_GOODS_INCLUDED #define HEADER_GOODS_INCLUDED
#include "window.h" #include "window.h"
#include "character.h"
#include "input.h" #include "input.h"
typedef enum DIRECTION_MOVED typedef enum DIRECTION_MOVED
@ -22,6 +23,17 @@ int goods_outer_process(WINDOW* window, int y_offset, bool give);
int goods_inner_process(WINDOW *window, unsigned short *items); int goods_inner_process(WINDOW *window, unsigned short *items);
void goods_print_items(WINDOW *window, unsigned short *items, int y_offset); void goods_print_items(WINDOW *window, unsigned short *items, int y_offset);
void shop_print_items(WINDOW *window, unsigned char *items, int y_offset, int itemsnum); void shop_print_items(WINDOW *window, unsigned char *items, int y_offset, int itemsnum);
void setupSelf_Alive(byte *String, int *index, byte user, byte item);
void setupSelf_Dead(byte *String, int *index, byte user, byte item);
void setupFull_Both_Alive(byte *String, int *index, byte user, byte target, byte item);
void setupFull_Target_Dead(byte *String, int *index, byte user, byte target, byte item);
void setupFull_User_Dead(byte *String, int *index, byte user, byte target, byte item);
void setupFull_Both_Dead(byte *String, int *index, byte user, byte target, byte item);
void setup_Both_Alive(byte *String, int *index, byte user, byte target, byte item);
void setup_Target_Dead(byte *String, int *index, byte user, byte target, byte item);
void setup_User_Dead(byte *String, int *index, byte user, byte target, byte item);
void setup_Both_Dead(byte *String, int *index, byte user, byte target, byte item);
void give_print(byte item, byte target, byte source, WINDOW *window, byte *str);
extern bool m2_isequipped(int item_index); extern bool m2_isequipped(int item_index);
extern void m2_soundeffect(int index); extern void m2_soundeffect(int index);
@ -30,6 +42,8 @@ extern int m2_sub_a334c(int value);
extern int m2_sub_a3384(int value); extern int m2_sub_a3384(int value);
extern void m2_clearwindowtiles(WINDOW* window); extern void m2_clearwindowtiles(WINDOW* window);
extern int bin_to_bcd(int value, int* digit_count); extern int bin_to_bcd(int value, int* digit_count);
extern int m2_items; extern int m2_items;
extern CHARACTER_DATA m2_ness_data[];
#endif #endif

View File

@ -51,6 +51,46 @@ byte reduce_bit_depth(int row, int foreground)
return lower | (upper << 4); return lower | (upper << 4);
} }
byte getSex(byte character)
{
return character == 1 ? 1 : 0; //character 1 is Paula
}
void getPossessive(byte character, byte *str, int *index)
{
char his[] = "his";
char her[] = "her";
if(getSex(character) == 1)
for (int i = 0; i < (sizeof(her) - 1); i++)
str[(*index)++] = encode_ascii(her[i]);
else
for (int i = 0; i < (sizeof(his) - 1); i++)
str[(*index)++] = encode_ascii(his[i]);
}
void getPronoun(byte character, byte *str, int *index)
{
char he[] = "he";
char she[] = "she";
if(getSex(character) == 1)
for (int i = 0; i < (sizeof(she) - 1); i++)
str[(*index)++] = encode_ascii(she[i]);
else
for (int i = 0; i < (sizeof(he) - 1); i++)
str[(*index)++] = encode_ascii(he[i]);
}
void getCharName(byte character, byte *str, int *index)
{
copy_name(str, m2_ness_name, index, character * 7);
}
void copy_name(byte *str, byte *source, int *index, int pos)
{
while(source[pos + 1] != 0xFF)
str[(*index)++] = source[pos++];
}
int ascii_strlen(char *str) int ascii_strlen(char *str)
{ {
int len = 0; int len = 0;

View File

@ -69,8 +69,14 @@ void print_number_menu_current(byte digit, WINDOW* window);
void clear_number_menu(WINDOW* window); void clear_number_menu(WINDOW* window);
void format_cash_window(int value, int padding, byte* str); void format_cash_window(int value, int padding, byte* str);
void handle_first_window(WINDOW* window); void handle_first_window(WINDOW* window);
void getCharName(byte character, byte *str, int *index);
void copy_name(byte *str, byte *source, int *index, int pos);
byte getSex(byte character);
void getPossessive(byte character, byte *str, int *index);
void getPronoun(byte character, byte *str, int *index);
extern unsigned short m2_coord_table[]; extern unsigned short m2_coord_table[];
extern byte m2_ness_name[];
extern int m2_bits_to_nybbles[]; extern int m2_bits_to_nybbles[];
extern byte m2_nybbles_to_bits[]; extern byte m2_nybbles_to_bits[];
extern byte *m2_font_table[]; extern byte *m2_font_table[];

View File

@ -75,7 +75,7 @@ b @@store_x
//-------------------------------- //--------------------------------
// 5E FF XX: Load value into memory // 5E FF XX: Load value into memory
cmp r4,0x5E cmp r4,0x5E
bne @@end bne @@next3
mov r3,3 mov r3,3
// Get the argument // Get the argument
@ -94,6 +94,57 @@ mov r0,r1 // the jump table is 1-indexed
mov r4,r3 mov r4,r3
bl 0x80A334C // store to window memory bl 0x80A334C // store to window memory
mov r3,r4 mov r3,r4
b @@end
@@next3:
//--------------------------------
// 5D FF: Print give text
cmp r4,0x5D
bne @@end
// 5D FF should be treated as a renderable code
push {r0-r3}
mov r0,r2
bl handle_first_window
pop {r0-r3}
ldr r3,=#0x30009FB
ldrb r3,[r3,#0] //Source
ldr r2,=#m2_active_window_pc //Target
ldrb r2,[r2,#0]
ldr r1,=#0x3005230
ldr r1,[r1,#0x10] //Inventory Window
ldrh r4,[r1,#0x36] //Cursor Y
ldrh r1,[r1,#0x34] //Cursor X
lsl r4,r4,#1
cmp r1,#0
beq @@continue
add r4,r4,#1 //Selected Item number in inventory
@@continue:
lsl r4,r4,#1
ldr r0,=#0x3005200
ldr r0,[r0,#0]
push {r0} //String address
ldr r0,=#0x3001D40
mov r1,#0x6C
mul r1,r3
add r0,#0x14
add r0,r0,r1 //Inventory of source
add r0,r0,r4 //Item address
ldrh r0,[r0,#0] //Item
cmp r0,#0
beq @@EndOf5D
mov r1,r2
mov r2,r3
ldr r3,=#0x3005230
ldr r3,[r3,#0x08] //Dialogue Window
bl give_print
@@EndOf5D:
pop {r0}
mov r3,#0
sub r3,r3,#1 //r3 is now -1
//-------------------------------- //--------------------------------
@@end: @@end:

View File

@ -1415,15 +1415,7 @@ m2_coord_table_file:
// Existing subroutines/data // Existing subroutines/data
//============================================================================== //==============================================================================
.definelabel m2_ness_goods ,0x3001D54 .definelabel m2_ness_data ,0x3001D54
.definelabel m2_ness_exp ,0x3001D70
.definelabel m2_ness_maxhp ,0x3001D84
.definelabel m2_ness_curhp ,0x3001D86
.definelabel m2_ness_maxpp ,0x3001D8C
.definelabel m2_ness_curpp ,0x3001D8E
.definelabel m2_paula_goods ,0x3001DC0
.definelabel m2_jeff_goods ,0x3001E2C
.definelabel m2_poo_goods ,0x3001E98
.definelabel m2_ness_name ,0x3001F10 .definelabel m2_ness_name ,0x3001F10
.definelabel m2_old_paula_name ,0x3001F16 .definelabel m2_old_paula_name ,0x3001F16
.definelabel m2_paula_name ,0x3001F17 .definelabel m2_paula_name ,0x3001F17
@ -1459,11 +1451,13 @@ m2_coord_table_file:
.definelabel m2_psitargetwindow ,0x80B8AE0 .definelabel m2_psitargetwindow ,0x80B8AE0
.definelabel m2_isequipped ,0x80BC670 .definelabel m2_isequipped ,0x80BC670
.definelabel m2_swapwindowbuf ,0x80BD7AC .definelabel m2_swapwindowbuf ,0x80BD7AC
.definelabel m2_setup_window ,0x80BD844
.definelabel m2_strlookup ,0x80BE260 .definelabel m2_strlookup ,0x80BE260
.definelabel m2_initwindow ,0x80BE458 .definelabel m2_initwindow ,0x80BE458
.definelabel m2_statuswindow_numbers,0x80C0A5C .definelabel m2_statuswindow_numbers,0x80C0A5C
.definelabel m2_psiwindow ,0x80C1FBC .definelabel m2_psiwindow ,0x80C1FBC
.definelabel m2_drawwindow ,0x80C87D0 .definelabel m2_drawwindow ,0x80C87D0
.definelabel m2_print_window ,0x80C8BE4
.definelabel m2_printstr ,0x80C9634 .definelabel m2_printstr ,0x80C9634
.definelabel m2_printstr_hlight ,0x80C96F0 .definelabel m2_printstr_hlight ,0x80C96F0
.definelabel m2_printnextch ,0x80C980C .definelabel m2_printnextch ,0x80C980C

View File

@ -7,7 +7,12 @@ bl customcodes_parse
ldr r1,[r6] ldr r1,[r6]
// If 0, return [r6]+2; otherwise, return [r6]+r0 // If 0, return [r6]+2; otherwise, return [r6]+r0
cmp r0,#0
beq @@next beq @@next
cmp r0,#0
bge @@continue //If -1, then set this to 0
mov r0,#0
@@continue:
add r0,r0,r1 add r0,r0,r1
pop {r1-r2,pc} pop {r1-r2,pc}
@@next: @@next:
@ -1408,9 +1413,8 @@ pop {pc}
//Routine which gives the address to the party member's inventory //Routine which gives the address to the party member's inventory
get_inventory_selected: get_inventory_selected:
push {r3,lr} push {r3,lr}
ldr r0,[r5,#0x1C] //Load source pc ldr r0,=#0x30009FB //Load source pc
lsl r0,r0,#0x10 ldrb r0,[r0,#0]
asr r0,r0,#0x10
ldr r3,=#0x3001D40 //Get inventory ldr r3,=#0x3001D40 //Get inventory
mov r2,#0x6C mov r2,#0x6C
mul r0,r2 mul r0,r2
@ -1431,9 +1435,8 @@ ldr r2,[r3,#0]
lsl r2,r2,#0x10 lsl r2,r2,#0x10
asr r2,r2,#0x10 asr r2,r2,#0x10
push {r2} push {r2}
ldr r2,[r5,#0x1C] //Load source pc ldr r2,=#0x30009FB //Load source pc
lsl r2,r2,#0x10 ldrb r2,[r2,#0]
asr r2,r2,#0x10
str r2,[r3,#0] //Store it str r2,[r3,#0] //Store it
mov r2,#0 //No y offset mov r2,#0 //No y offset
@ -1462,13 +1465,10 @@ pop {pc}
//Specific Routine which calls get_print_inventory_window //Specific Routine which calls get_print_inventory_window
b9ecc_get_print_inventory_window: b9ecc_get_print_inventory_window:
push {lr} push {lr}
push {r4-r5} push {r4}
mov r5,r4
mov r4,#0x1C
sub r5,r5,r4 //Address with the windows' pc
ldr r4,=#0x3005230 ldr r4,=#0x3005230
bl get_print_inventory_window //Prints old inventory bl get_print_inventory_window //Prints old inventory
pop {r4-r5} pop {r4}
bl 0x80BD7F8 //Copies old arrangements, this includes the highlight bl 0x80BD7F8 //Copies old arrangements, this includes the highlight
pop {pc} pop {pc}

View File

@ -2158,10 +2158,10 @@
^L2139^[00 FF] ^L2139^[00 FF]
^L2140^[86 FF _L4002_][09 FF B5 00][09 FF 85 02][86 FF _L4937_]@Hello![01 FF] This is Escargo Express.[01 FF] (hee, ha, he, ha)[02 FF]@I just (hee, ha, he, ha)[01 FF] couldn't find your location...[02 FF]@...You must be somewhere[01 FF] really strange.[01 FF] (hee, ha, he, ha)[02 FF]@I've decided, honestly, that...[01 FF] I should give up.[02 FF]@I'm outta here.[01 FF] (hee, ha, he, ha)[02 FF]@Sometimes this happens,[01 FF] you know?[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF] ^L2140^[86 FF _L4002_][09 FF B5 00][09 FF 85 02][86 FF _L4937_]@Hello![01 FF] This is Escargo Express.[01 FF] (hee, ha, he, ha)[02 FF]@I just (hee, ha, he, ha)[01 FF] couldn't find your location...[02 FF]@...You must be somewhere[01 FF] really strange.[01 FF] (hee, ha, he, ha)[02 FF]@I've decided, honestly, that...[01 FF] I should give up.[02 FF]@I'm outta here.[01 FF] (hee, ha, he, ha)[02 FF]@Sometimes this happens,[01 FF] you know?[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF]
^L2141^[09 FF B4 00][09 FF B3 00][86 FF _L4937_]@Hello![01 FF] This is Mach Pizza.[01 FF] (hee, ha, he, ha)[02 FF]@...You must be somewhere[01 FF] really strange,[01 FF] (hee, ha, he, ha)...[02 FF]@I couldn't deliver the pizza.[01 FF] The pizza got really cold and[01 FF] hard, and my legs are tired...[02 FF]@I am going to give up and[01 FF] go back.[02 FF]@...I hope I can find the way[01 FF] home...[01 FF] (hee, ha, he, ha)[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF] ^L2141^[09 FF B4 00][09 FF B3 00][86 FF _L4937_]@Hello![01 FF] This is Mach Pizza.[01 FF] (hee, ha, he, ha)[02 FF]@...You must be somewhere[01 FF] really strange,[01 FF] (hee, ha, he, ha)...[02 FF]@I couldn't deliver the pizza.[01 FF] The pizza got really cold and[01 FF] hard, and my legs are tired...[02 FF]@I am going to give up and[01 FF] go back.[02 FF]@...I hope I can find the way[01 FF] home...[01 FF] (hee, ha, he, ha)[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF]
^L2142^[AB FF 00 00][88 FF][86 FF _L3633_][89 FF][87 FF][00 FF] ^L2142^[5D FF][00 FF]
^L2143^himself.[1D FF][00 FF] ^L2143^[00 FF]
^L2144^[88 FF][86 FF _L3633_][81 FF _L5455_][89 FF][87 FF][90 FF 00][1A FF 01 00].[02 FF][00 FF] ^L2144^[00 FF]
^L2145^[87 FF][90 FF 00][1A FF 01 00] ###failed.[02 FF][1D FF][00 FF] ^L2145^[00 FF]
^L2146^[88 FF][AB FF 00 00][87 FF][9A FF C4 00][81 FF _L5456_][89 FF][AB FF 00 00][B7 FF 00][82 FF _L5457_][89 FF][B9 FF 00 00 00 00][88 FF][86 FF _L3633_][81 FF _L5458_][89 FF][87 FF]@[90 FF 00][1A FF 01 00] got rid of[01 FF] the [87 FF][90 FF 00][1A FF 02 00].[1D FF][00 FF] ^L2146^[88 FF][AB FF 00 00][87 FF][9A FF C4 00][81 FF _L5456_][89 FF][AB FF 00 00][B7 FF 00][82 FF _L5457_][89 FF][B9 FF 00 00 00 00][88 FF][86 FF _L3633_][81 FF _L5458_][89 FF][87 FF]@[90 FF 00][1A FF 01 00] got rid of[01 FF] the [87 FF][90 FF 00][1A FF 02 00].[1D FF][00 FF]
^L2147^[AB FF 00 00][87 FF]@[90 FF 00][1A FF 01 00] is the only one who[01 FF] should carry[01 FF] the [87 FF][90 FF 00][1A FF 02 00].[1D FF][00 FF] ^L2147^[AB FF 00 00][87 FF]@[90 FF 00][1A FF 01 00] is the only one who[01 FF] should carry[01 FF] the [87 FF][90 FF 00][1A FF 02 00].[1D FF][00 FF]
^L2148^[AB FF 00 00]@The [90 FF 00][1A FF 02 00] is one[01 FF] of the items that can be[01 FF] equipped.[1D FF][00 FF] ^L2148^[AB FF 00 00]@The [90 FF 00][1A FF 02 00] is one[01 FF] of the items that can be[01 FF] equipped.[1D FF][00 FF]