Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
2552445fcc
|
@ -1,6 +1,10 @@
|
|||
Hacking, script tool, script compiler/decompiler:
|
||||
JeffMan
|
||||
|
||||
Hacking:
|
||||
Lorenzooone
|
||||
PhoenixBound
|
||||
|
||||
Text conversion:
|
||||
JeffMan
|
||||
Lorenzooone
|
||||
|
|
|
@ -15,9 +15,13 @@ $input_c_files =
|
|||
"src/c/vwf.c",
|
||||
"src/c/locs.c",
|
||||
"src/c/goods.c",
|
||||
"src/c/fileselect.c"
|
||||
"src/c/fileselect.c",
|
||||
"src/c/status.c",
|
||||
"src/c/battle.c",
|
||||
"src/c/equip.c",
|
||||
"src/c/psi.c"
|
||||
|
||||
$base_c_address = 0x8100000;
|
||||
$base_c_address = 0x83755B8;
|
||||
$scripttool_cmd = "bin/ScriptTool/ScriptTool.dll"
|
||||
$gcc_cmd = "arm-none-eabi-gcc"
|
||||
$ld_cmd = "arm-none-eabi-ld"
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
#include "window.h"
|
||||
#include "battle.h"
|
||||
#include "number-selector.h"
|
||||
#include "locs.h"
|
||||
|
||||
//Prints enemy target window
|
||||
void printTargetOfAttack(short a, short target)
|
||||
{
|
||||
WINDOW *window = getWindow(3);
|
||||
m2_setupwindow(window, 0x9, 0x3, 0x14, 0x2);
|
||||
initWindow_buffer(window, NULL, 0);
|
||||
printstr_buffer(window, m12_battle_commands_str11, 0, 0, false); //To
|
||||
if(target != -1)
|
||||
{
|
||||
printstr_hlight_buffer(window, m12_battle_commands_str14, 8, 0, false);// " "
|
||||
short *pointer = (short*)(0x20248E0 + 0x83E);
|
||||
byte *pointer2 = (byte*)(pointer);
|
||||
short value = *pointer;
|
||||
m2_setupbattlename((a * value) + target + 1);
|
||||
byte* str = ((*((byte**)0x3005220)) + 0x4C0);
|
||||
printstr_buffer(window, str, 2, 0, false);
|
||||
if(a != 0)
|
||||
pointer2 += 0x2E;
|
||||
else
|
||||
pointer2 += 0x26;
|
||||
byte val = *(pointer2 + target);
|
||||
unsigned short ailmentTile = ailmentTileSetup((byte*)(0x2020CCF + (val * 0x94)), 0);
|
||||
if(ailmentTile >= 1)
|
||||
{
|
||||
map_tile(ailmentTile, window->window_x + 0x13, window->window_y);
|
||||
map_tile(ailmentTile + 0x20, window->window_x + 0x13, window->window_y + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
map_tile(0x1FF, window->window_x + 0x13, window->window_y);
|
||||
map_tile(0x1FF, window->window_x + 0x13, window->window_y + 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(a == 0) //a is the row here
|
||||
printstr_buffer(window, m12_battle_commands_str12, 2, 0, false); //the Front Row
|
||||
else
|
||||
printstr_buffer(window, m12_battle_commands_str13, 2, 0, false); //the Back Row
|
||||
}
|
||||
}
|
||||
|
||||
//Only implements up to Goods right now
|
||||
void printBattleMenu(byte validXs, byte validYs, byte highlighted)
|
||||
{
|
||||
unsigned short* drawValue = (unsigned short*)0x2025122;
|
||||
byte *str;
|
||||
WINDOW* window = getWindow(0);
|
||||
if(validXs & 1)
|
||||
{
|
||||
if(validYs & 1)
|
||||
{
|
||||
print_blankstr_buffer(2,1,5,(byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if((*drawValue) == 2)
|
||||
{
|
||||
print_blankstr_buffer(7,1,5,(byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
str = m12_battle_commands_str10; //Do Nothing
|
||||
}
|
||||
else if((*drawValue) == 1)
|
||||
str = m12_battle_commands_str6; //Shoot
|
||||
else
|
||||
str = m12_battle_commands_str0; //Bash
|
||||
printstr_hlight_buffer(window, str, 1, 0, highlighted & 1);
|
||||
}
|
||||
|
||||
if(validYs & 2)
|
||||
{
|
||||
print_blankstr_buffer(2,3,5,(byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if((*active_window_party_member) != 2)
|
||||
printstr_hlight_buffer(window, m12_battle_commands_str3, 1, 1, highlighted & 2); //PSI
|
||||
else
|
||||
printstr_hlight_buffer(window, m12_battle_commands_str7, 1, 1, highlighted & 2); //Spy
|
||||
}
|
||||
}
|
||||
|
||||
if(validXs & 2)
|
||||
{
|
||||
if(validYs & 1)
|
||||
{
|
||||
if((*drawValue) != 2)
|
||||
{
|
||||
print_blankstr_buffer(7,1,5,(byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
printstr_hlight_buffer(window, m12_battle_commands_str1, 6, 0, highlighted & 4); //Goods
|
||||
}
|
||||
}
|
||||
|
||||
if(validYs & 2)
|
||||
{
|
||||
print_blankstr_buffer(7,3,5,(byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if((*drawValue) != 2)
|
||||
{
|
||||
printstr_hlight_buffer(window, m12_battle_commands_str4, 6, 1, highlighted & 8); //Defend
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef HEADER_BATTLE_INCLUDED
|
||||
#define HEADER_BATTLE_INCLUDED
|
||||
|
||||
#include "vwf.h"
|
||||
|
||||
void printTargetOfAttack(short a, short target);
|
||||
void printBattleMenu(byte validXs, byte validYs, byte highlighted);
|
||||
|
||||
extern byte m12_battle_commands_str0[];
|
||||
extern byte m12_battle_commands_str1[];
|
||||
extern byte m12_battle_commands_str3[];
|
||||
extern byte m12_battle_commands_str4[];
|
||||
extern byte m12_battle_commands_str6[];
|
||||
extern byte m12_battle_commands_str7[];
|
||||
extern byte m12_battle_commands_str10[];
|
||||
extern byte m12_battle_commands_str11[];
|
||||
extern byte m12_battle_commands_str12[];
|
||||
extern byte m12_battle_commands_str13[];
|
||||
extern byte m12_battle_commands_str14[];
|
||||
|
||||
#endif
|
|
@ -0,0 +1,547 @@
|
|||
#include "window.h"
|
||||
#include "equip.h"
|
||||
#include "number-selector.h"
|
||||
#include "locs.h"
|
||||
|
||||
|
||||
int equipReadInput(WINDOW* window) //Returns the character whose window we're going in, ACTION_NONE if nothing happens or ACTION_STEPOUT if going out of this window
|
||||
{
|
||||
unsigned short previousCharacter = *active_window_party_member;
|
||||
int currentCharacter = previousCharacter;
|
||||
PAD_STATE state = *pad_state;
|
||||
PAD_STATE state_shadow = *pad_state_shadow;
|
||||
bool printed = false; //Used to avoid sound issues. If we printed, we don't make sounds
|
||||
|
||||
if(state.right && !window->hold)
|
||||
currentCharacter += 1;
|
||||
|
||||
if(state.left && !window->hold)
|
||||
currentCharacter -= 1;
|
||||
|
||||
if((state.left || state.right) && !window->hold)
|
||||
{
|
||||
window->unknown7 = 0;
|
||||
if(state.left)
|
||||
{
|
||||
if(currentCharacter < 0)
|
||||
currentCharacter = 3;
|
||||
int foundChar = currentCharacter;
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
if (foundChar < 0)
|
||||
foundChar = 3;
|
||||
if ((*pc_flags)[foundChar])
|
||||
break;
|
||||
|
||||
foundChar--;
|
||||
}
|
||||
currentCharacter = foundChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(currentCharacter > 3)
|
||||
currentCharacter = 0;
|
||||
int foundChar = currentCharacter;
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
if (foundChar > 3)
|
||||
foundChar = 0;
|
||||
if ((*pc_flags)[foundChar])
|
||||
break;
|
||||
|
||||
foundChar++;
|
||||
}
|
||||
currentCharacter = foundChar;
|
||||
}
|
||||
(*active_window_party_member) = currentCharacter;
|
||||
if(currentCharacter != previousCharacter) //Print only if needed
|
||||
{
|
||||
equipPrint(window);
|
||||
printed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(state_shadow.right || state_shadow.left)
|
||||
{
|
||||
if(state.right || state.left)
|
||||
{
|
||||
if(currentCharacter != previousCharacter)
|
||||
m2_soundeffect(0x131);
|
||||
}
|
||||
window->hold = true;
|
||||
}
|
||||
else
|
||||
window->hold = false;
|
||||
|
||||
if(state.b || state.select)
|
||||
{
|
||||
if(!printed)
|
||||
m2_soundeffect(0x12E);
|
||||
window->counter = 0;
|
||||
return ACTION_STEPOUT;
|
||||
}
|
||||
else if(state.a || state.l)
|
||||
{
|
||||
if(!printed)
|
||||
m2_soundeffect(0x12D);
|
||||
if((*pc_count) > 1)
|
||||
{
|
||||
unsigned short *arrangementBase = (*tilemap_pointer) + (((window->window_y - 1) << 5) + window->window_x + window->window_width - 4);
|
||||
unsigned short topTile = ((*tile_offset) + 0x96) | (*palette_mask) | 0x800;
|
||||
(*arrangementBase) = topTile;
|
||||
(*(arrangementBase + 1)) = topTile;
|
||||
(*(arrangementBase + 2)) = topTile;
|
||||
(*(arrangementBase + 3)) = topTile;
|
||||
}
|
||||
|
||||
window->counter = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
window->counter++;
|
||||
|
||||
if (*pc_count > 1)
|
||||
{
|
||||
// We're doing a bit of simplification here.
|
||||
// The Japanese version tries to highlight the arrow you pressed.
|
||||
// It only shows for a couple frames and it looks weird, so we're
|
||||
// just going to show the arrows and not bother with the direction indicator.
|
||||
draw_window_arrows(window, window->counter < 8);
|
||||
}
|
||||
|
||||
if (window->counter > 16)
|
||||
window->counter = 0;
|
||||
|
||||
return ACTION_NONE;
|
||||
}
|
||||
|
||||
void equippablePrint(WINDOW* window) //Prints equippable items (The innermost equip window)
|
||||
{
|
||||
unsigned short savedValue = 0;
|
||||
byte* freeSpace = free_strings_pointers[3];
|
||||
byte *none = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x2C);
|
||||
PC *character_data = &(m2_ness_data[*active_window_party_member]);
|
||||
|
||||
unsigned short* something = (unsigned short*)0x3005224;
|
||||
unsigned short* something2 = (unsigned short*)0x300522C;
|
||||
|
||||
for(int i = 0; i < 7; i++)
|
||||
freeSpace[i] = 0;
|
||||
freeSpace[7] = 0xFF;
|
||||
|
||||
int* headerAddress = (int*)(((int)vram) + ((*something2) << 0xE) + ((*tile_offset) << 5));
|
||||
map_tile(0xB3, window->window_x, window->window_y - 1);
|
||||
|
||||
unsigned short val = *something;
|
||||
if(!window->vwf_skip)
|
||||
clear_window_header(headerAddress, 8, 0x10, 0x11);
|
||||
|
||||
unsigned short* lastUsed = print_equip_header(*something, (unsigned short*)((*tilemap_pointer) + (((window->window_y - 1) << 5) + window->window_x + 1)), headerAddress, window);
|
||||
|
||||
window->vwf_skip = true;
|
||||
|
||||
if(window->cursor_x > 6) //Mode which prints only 5 items in M12. Used if one has more than 8 items of an equippable kind.
|
||||
{
|
||||
clearWindowTiles_buffer(window);
|
||||
short counter = 0;
|
||||
while(counter < 5)
|
||||
{
|
||||
int value = (window->cursor_x_base * 5) + counter;
|
||||
byte equippables;
|
||||
if(value <= 0xD)
|
||||
equippables = *(window->number_text_area + 4 + value);
|
||||
else
|
||||
equippables = 0xFF;
|
||||
if(equippables == 0xFF)
|
||||
{
|
||||
freeSpace[counter] = 0xFD;
|
||||
printstr_buffer(window, none, 1, counter, false);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte *item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[equippables - 1]);
|
||||
byte x = 1;
|
||||
if(m2_isequipped(equippables))
|
||||
{
|
||||
map_special_character(0x1DE,(window->window_x + 1), (counter << 1) + 1); //Print the E
|
||||
x++;
|
||||
}
|
||||
printstr_buffer(window, item, x, counter, false);
|
||||
freeSpace[counter] = equippables;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
||||
byte* str = NULL;
|
||||
switch(val)
|
||||
{
|
||||
case 3:
|
||||
str = m12_other_str9; //->Weapons
|
||||
break;
|
||||
case 4:
|
||||
str = m12_other_str10; //->Body
|
||||
break;
|
||||
case 5:
|
||||
str = m12_other_str11; //->Arms
|
||||
break;
|
||||
case 6:
|
||||
str = m12_other_str12; //->Other
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(str != NULL)
|
||||
savedValue = printstr_buffer(window, str, 1, 6, false); //Prints the string, savedValue is used to understand where to print "(X)"
|
||||
|
||||
int tmp = m2_div(window->cursor_x, 5);
|
||||
str = NULL;
|
||||
if(tmp <= window->cursor_x_base)
|
||||
str = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x8C);
|
||||
else
|
||||
str = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x8D + window->cursor_x_base);
|
||||
printstr_hlight_pixels_buffer(window, str, savedValue, 6 << 4, false); //Prints "(X)"
|
||||
freeSpace[5] = 0;
|
||||
freeSpace[6] = 0xFE;
|
||||
freeSpace[7] = 0xFF;
|
||||
}
|
||||
else //Prints up to 7 equippable items. It's the same as the above cycle, without the cursor_x_base stuff.
|
||||
{
|
||||
short counter = 0;
|
||||
while(counter < 7)
|
||||
{
|
||||
byte equippables = *(window->number_text_area + 4 + counter);
|
||||
|
||||
if(equippables == 0xFF)
|
||||
{
|
||||
freeSpace[counter] = 0xFD;
|
||||
freeSpace[counter + 1] = 0xFF; //Different from the cycle above
|
||||
printstr_buffer(window, none, 1, counter, false);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte *item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[equippables - 1]);
|
||||
byte x = 1;
|
||||
if(m2_isequipped(equippables))
|
||||
{
|
||||
map_special_character(0x1DE,(window->window_x + 1), (counter << 1) + 1); //Print the E
|
||||
x++;
|
||||
}
|
||||
printstr_buffer(window, item, x, counter, false);
|
||||
freeSpace[counter] = equippables;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window->loaded_code = 0;
|
||||
}
|
||||
|
||||
int equippableReadInput(WINDOW* window) //Manages input in equipment-choice innermost window. Returns the equippable item the cursor is on or ACTION_STEPOUT
|
||||
{
|
||||
byte* freeSpace = free_strings_pointers[3];
|
||||
PC *character_data = &(m2_ness_data[*active_window_party_member]);
|
||||
bool printed = (window->loaded_code == 1);
|
||||
|
||||
// Get weird sign height value
|
||||
unsigned short height = window->window_height;
|
||||
unsigned int height_sign_bit = height >> 15;
|
||||
unsigned int weird_value = (((height + height_sign_bit) << 15) >> 16);
|
||||
|
||||
// Clear cursor tiles
|
||||
map_tile(0x1FF, window->window_x, window->window_y + window->cursor_y * 2);
|
||||
map_tile(0x1FF, window->window_x, window->window_y + window->cursor_y * 2 + 1);
|
||||
|
||||
if(window->loaded_code == 1) //We're printing
|
||||
equippablePrint(window);
|
||||
|
||||
PAD_STATE state = *pad_state;
|
||||
PAD_STATE state_shadow = *pad_state_shadow;
|
||||
|
||||
unsigned short possibleEquippablesCount = window->cursor_x;
|
||||
short previousY = window->cursor_y;
|
||||
short currentY = window->cursor_y;
|
||||
|
||||
int counter = 0;
|
||||
|
||||
//Loads the total amount of items
|
||||
if(possibleEquippablesCount > 6)
|
||||
counter = 7;
|
||||
else if(weird_value > 0)
|
||||
while(counter < weird_value && freeSpace[counter] != 0xFF)
|
||||
counter++;
|
||||
|
||||
|
||||
if(state.up)
|
||||
{
|
||||
currentY--;
|
||||
if(currentY < 0)
|
||||
{
|
||||
if(window->hold)
|
||||
currentY = 0;
|
||||
else
|
||||
currentY = counter - 1;
|
||||
}
|
||||
else
|
||||
while(freeSpace[currentY] == 0)
|
||||
currentY--;
|
||||
}
|
||||
|
||||
if(state.down)
|
||||
{
|
||||
currentY++;
|
||||
if(currentY >= counter)
|
||||
{
|
||||
if(window->hold)
|
||||
currentY = counter - 1;
|
||||
else
|
||||
currentY = 0;
|
||||
}
|
||||
else
|
||||
while(freeSpace[currentY] == 0)
|
||||
currentY++;
|
||||
}
|
||||
|
||||
if(state_shadow.up || state_shadow.down)
|
||||
{
|
||||
window->counter = 0;
|
||||
if(previousY != currentY)
|
||||
m2_soundeffect(0x12F);
|
||||
window->hold = true;
|
||||
window->cursor_y = currentY;
|
||||
}
|
||||
else
|
||||
window->hold = false;
|
||||
|
||||
if(state.b || state.select)
|
||||
{
|
||||
window->counter = 0;
|
||||
m2_soundeffect(0x12E);
|
||||
return ACTION_STEPOUT;
|
||||
}
|
||||
|
||||
if((state.a || state.l) && !printed) //Avoid sound issues when going into the window
|
||||
{
|
||||
window->counter = 0xFFFF;
|
||||
if(freeSpace[window->cursor_y] == 0xFE)
|
||||
{
|
||||
m2_soundeffect(0x12D); //Do the sound only if we're changing the page. Otherwise the original code will do the appropriate sound
|
||||
window->counter = 0;
|
||||
window->cursor_x_base++;
|
||||
if(m2_div(window->cursor_x, 5) < window->cursor_x_base)
|
||||
window->cursor_x_base = 0;
|
||||
return 0xFE; //Change window counter
|
||||
}
|
||||
if(window->cursor_y + 1 < counter)
|
||||
return freeSpace[window->cursor_y]; //Equipment
|
||||
return 0xFD; //None
|
||||
}
|
||||
|
||||
if (window->counter != 0xFFFF)
|
||||
{
|
||||
window->counter++;
|
||||
|
||||
// Draw cursor for current item
|
||||
map_special_character((window->counter <= 7) ? 0x99 : 0x9A,
|
||||
window->window_x,
|
||||
window->window_y + window->cursor_y * 2);
|
||||
|
||||
if (window->counter > 0x10)
|
||||
window->counter = 0;
|
||||
}
|
||||
|
||||
if(window->cursor_y + 1 < counter)
|
||||
return freeSpace[window->cursor_y];
|
||||
return 0xFD; //None
|
||||
|
||||
|
||||
}
|
||||
|
||||
//Simplified inner equip routine (The original routine had a pointer to a table of valid cursor positions as a parameter)
|
||||
int innerEquipInput(WINDOW* window)
|
||||
{
|
||||
bool printing = !window->vwf_skip;
|
||||
window->vwf_skip = true;
|
||||
|
||||
PAD_STATE state = *pad_state;
|
||||
PAD_STATE state_shadow = *pad_state_shadow;
|
||||
|
||||
short previousY = window->cursor_y;
|
||||
short currentY = window->cursor_y;
|
||||
|
||||
// Clear cursor tiles
|
||||
map_tile(0x1FF, window->window_x, window->window_y + window->cursor_y * 2);
|
||||
map_tile(0x1FF, window->window_x, window->window_y + window->cursor_y * 2 + 1);
|
||||
|
||||
if(state.up) //This has been simplified
|
||||
{
|
||||
currentY--;
|
||||
if(currentY < 0)
|
||||
{
|
||||
if(window->hold)
|
||||
currentY = 0;
|
||||
else
|
||||
currentY = 3;
|
||||
}
|
||||
}
|
||||
|
||||
if(state.down) //This has been simplified
|
||||
{
|
||||
currentY++;
|
||||
if(currentY >= 4)
|
||||
{
|
||||
if(window->hold)
|
||||
currentY = 3;
|
||||
else
|
||||
currentY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//The game does stuff when pressing left or right, however for the equipment window this is not needed
|
||||
if(state.right) //This routine in particular did both the main overworld window and the inner equip window
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
if(state.left)
|
||||
{
|
||||
}
|
||||
|
||||
if(state_shadow.up || state_shadow.down)
|
||||
{
|
||||
window->counter = 0;
|
||||
if(previousY != currentY)
|
||||
m2_soundeffect(0x12F);
|
||||
window->hold = true;
|
||||
window->cursor_y = currentY;
|
||||
}
|
||||
else
|
||||
window->hold = false;
|
||||
|
||||
if((state.b || state.select) && (!printing))
|
||||
{
|
||||
window->counter = 0;
|
||||
m2_soundeffect(0x12E);
|
||||
window->vwf_skip = false;
|
||||
return ACTION_STEPOUT;
|
||||
}
|
||||
|
||||
|
||||
if((state.a || state.l) && (!printing))
|
||||
{
|
||||
window->counter = 0xFFFF;
|
||||
m2_soundeffect(0x12D);
|
||||
window->vwf_skip = false;
|
||||
return (window->cursor_y << 1) + ACTION_STEPIN;
|
||||
}
|
||||
|
||||
if (window->counter != 0xFFFF)
|
||||
{
|
||||
window->counter++;
|
||||
|
||||
// Draw cursor
|
||||
map_special_character((window->counter <= 7) ? 0x99 : 0x9A,
|
||||
window->window_x,
|
||||
window->window_y + window->cursor_y * 2);
|
||||
|
||||
if (window->counter > 0x10)
|
||||
window->counter = 0;
|
||||
}
|
||||
|
||||
return ACTION_NONE;
|
||||
}
|
||||
|
||||
void equipPrint(WINDOW* window) //Prints equipment
|
||||
{
|
||||
m2_hpwindow_up(*active_window_party_member);
|
||||
|
||||
// Draw window header
|
||||
map_tile(0xB3, window->window_x, window->window_y - 1);
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, *active_window_party_member);
|
||||
|
||||
PC *character_data = &(m2_ness_data[*active_window_party_member]);
|
||||
byte *nothing = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x2A);
|
||||
byte *item;
|
||||
|
||||
//Clear the previous equipment
|
||||
print_blankstr_buffer(window->window_x + 6, 1, 0xC, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
print_blankstr_buffer(window->window_x + 6, 3, 0xC, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
print_blankstr_buffer(window->window_x + 6, 5, 0xC, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
print_blankstr_buffer(window->window_x + 6, 7, 0xC, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
|
||||
//Clear the previous numbers
|
||||
print_blankstr_buffer(8, 0xB, 0x8, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
print_blankstr_buffer(8, 0xD, 0x8, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
|
||||
//Reprint the ":"s
|
||||
|
||||
print_character_with_callback_1bpp_buffer(decode_character(0x6A), ((window->window_x + 6) << 3), (0x1 << 3), (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)), &get_tile_number_with_offset, 0, *tilemap_pointer, 32, 0xC);
|
||||
print_character_with_callback_1bpp_buffer(decode_character(0x6A), ((window->window_x + 6) << 3), (0x3 << 3), (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)), &get_tile_number_with_offset, 0, *tilemap_pointer, 32, 0xC);
|
||||
print_character_with_callback_1bpp_buffer(decode_character(0x6A), ((window->window_x + 6) << 3), (0x5 << 3), (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)), &get_tile_number_with_offset, 0, *tilemap_pointer, 32, 0xC);
|
||||
print_character_with_callback_1bpp_buffer(decode_character(0x6A), ((window->window_x + 6) << 3), (0x7 << 3), (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)), &get_tile_number_with_offset, 0, *tilemap_pointer, 32, 0xC);
|
||||
|
||||
//Print the equipment
|
||||
if(character_data->equipment[0] == 0) //Weapon
|
||||
print_string_in_buffer(nothing, (((window->window_x + 7)) << 3) - 2, (0x1) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
else
|
||||
{
|
||||
item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[character_data->equipment[0] - 1]);
|
||||
map_special_character(0x1DE,(window->window_x + 7), 0x1); //Print the E
|
||||
printstr_buffer(window, item, 8, 0, false);
|
||||
}
|
||||
|
||||
if(character_data->equipment[1] == 0) //Body
|
||||
print_string_in_buffer(nothing, (((window->window_x + 7)) << 3) - 2, (0x3) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
else
|
||||
{
|
||||
item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[character_data->equipment[1] - 1]);
|
||||
map_special_character(0x1DE,(window->window_x + 7), 0x3); //Print the E
|
||||
printstr_buffer(window, item, 8, 1, false);
|
||||
}
|
||||
|
||||
if(character_data->equipment[2] == 0) //Arms
|
||||
print_string_in_buffer(nothing, (((window->window_x + 7)) << 3) - 2, (0x5) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
else
|
||||
{
|
||||
item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[character_data->equipment[2] - 1]);
|
||||
map_special_character(0x1DE,(window->window_x + 7), 0x5); //Print the E
|
||||
printstr_buffer(window, item, 8, 2, false);
|
||||
}
|
||||
|
||||
if(character_data->equipment[3] == 0) //Other
|
||||
print_string_in_buffer(nothing, (((window->window_x + 7)) << 3) - 2, (0x7) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
else
|
||||
{
|
||||
item = m2_strlookup((int*)0x8B1AF94, (byte*)0x8B1A694, character_data->goods[character_data->equipment[3] - 1]);
|
||||
map_special_character(0x1DE,(window->window_x + 7), 0x7); //Print the E
|
||||
printstr_buffer(window, item, 8, 3, false);
|
||||
}
|
||||
}
|
||||
|
||||
//Prints the numbers in the window in a formatted way
|
||||
void printNumberEquip(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight)
|
||||
{
|
||||
while((*str) == 0x50)
|
||||
{
|
||||
x += 6;
|
||||
str++;
|
||||
}
|
||||
printstr_hlight_pixels_buffer(window, str, x, y, highlight);
|
||||
}
|
||||
|
||||
//Prints Offense: and Defense:
|
||||
void printEquipWindowNumberText(WINDOW* window)
|
||||
{
|
||||
handle_first_window_buffer(window, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
printstr_hlight_pixels_buffer(window, window->text_start, 0, 3, false);
|
||||
}
|
||||
|
||||
//Prints the arrow for the numbers in the Offense/Defense menu
|
||||
void printEquipNumbersArrow(WINDOW* window)
|
||||
{
|
||||
printTinyArrow((window->window_x + 9) << 3, (window->window_y + 0) << 3);
|
||||
printTinyArrow((window->window_x + 9) << 3, (window->window_y + 2) << 3);
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef HEADER_EQUIP_INCLUDED
|
||||
#define HEADER_EQUIP_INCLUDED
|
||||
|
||||
#include "vwf.h"
|
||||
|
||||
void equipPrint(WINDOW* window);
|
||||
int equipReadInput(WINDOW* window);
|
||||
void equippablePrint(WINDOW* window);
|
||||
int equippableReadInput(WINDOW* window);
|
||||
int innerEquipInput(WINDOW* window);
|
||||
void printEquipWindowNumberText(WINDOW* window);
|
||||
void printEquipNumbersArrow(WINDOW* window);
|
||||
|
||||
|
||||
extern byte m12_other_str9[];
|
||||
extern byte m12_other_str10[];
|
||||
extern byte m12_other_str11[];
|
||||
extern byte m12_other_str12[];
|
||||
|
||||
#endif
|
|
@ -10,7 +10,14 @@ bool __attribute__((naked)) m2_isequipped(int item_index) {}
|
|||
void __attribute__((naked)) m2_soundeffect(int index) {}
|
||||
int __attribute__((naked)) m2_div(int dividend, int divisor) {}
|
||||
int __attribute__((naked)) m2_remainder(int dividend, int divisor) {}
|
||||
void __attribute__((naked)) m2_formatnumber(int value, byte* strDest, int length) {}
|
||||
int __attribute__((naked)) m2_sub_a334c(int value) {}
|
||||
int __attribute__((naked)) m2_sub_a3384(int value) {}
|
||||
void __attribute__((naked)) m2_sub_d3c50() {}
|
||||
void __attribute__((naked)) m2_sub_d6844() {}
|
||||
int __attribute__((naked)) m2_setupwindow(WINDOW* window, short window_x, short window_y, short window_width, short window_height) {}
|
||||
int __attribute__((naked)) m2_clearwindowtiles(WINDOW* window) {}
|
||||
int __attribute__((naked)) customcodes_parse_generic(int code, char* parserAddress, WINDOW* window, int* dest) {}
|
||||
void __attribute__((naked)) m2_printstr(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight) {}
|
||||
void __attribute__((naked)) m2_setupbattlename(short value) {}
|
||||
void __attribute__((naked)) store_pixels_overworld() {}
|
|
@ -189,7 +189,7 @@ void print_file_string(int x, int y, int length, byte *str, int window_selector,
|
|||
fileselect_pixels_location,
|
||||
&get_tile_number_file_select,
|
||||
tilesetDestPtr,
|
||||
width);
|
||||
width, 0x10);
|
||||
|
||||
pixelX += pixels;
|
||||
}
|
||||
|
|
|
@ -110,14 +110,15 @@ int goods_outer_process(WINDOW* window, int y_offset, bool give)
|
|||
}
|
||||
|
||||
*active_window_party_member = current_pc;
|
||||
m2_hpwindow_up(current_pc);
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, current_pc);
|
||||
|
||||
// Print item names
|
||||
if (!window->vwf_skip)
|
||||
{
|
||||
goods_print_items(window, current_items, y_offset);
|
||||
m2_hpwindow_up(current_pc); //Why were these done repeatedly? I made it so they're done only when printing, however if there is a reason why they shouldn't, feel free to put them back
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, current_pc);
|
||||
store_pixels_overworld();
|
||||
window->vwf_skip = true;
|
||||
}
|
||||
|
||||
|
@ -417,10 +418,13 @@ int goods_inner_process(WINDOW *window, unsigned short *items)
|
|||
clear_name_header(window);
|
||||
copy_name_header(window, *active_window_party_member);
|
||||
|
||||
m2_clearwindowtiles(window);
|
||||
clearWindowTiles_buffer(window);
|
||||
|
||||
if (weird_value > 0)
|
||||
{
|
||||
goods_print_items(window, items, 0);
|
||||
store_pixels_overworld();
|
||||
}
|
||||
}
|
||||
|
||||
if (state_shadow.up || state_shadow.down || state_shadow.left || state_shadow.right)
|
||||
|
@ -479,6 +483,7 @@ int goods_inner_process(WINDOW *window, unsigned short *items)
|
|||
// Erases the slot before printing. Prints blanks for null items.
|
||||
void goods_print_items(WINDOW *window, unsigned short *items, int y_offset)
|
||||
{
|
||||
byte* dest = (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER));
|
||||
int item_x = (window->window_x << 3) + 8;
|
||||
int item_y = (window->window_y + y_offset) << 3;
|
||||
|
||||
|
@ -488,7 +493,7 @@ void goods_print_items(WINDOW *window, unsigned short *items, int y_offset)
|
|||
int x = item_x + ((i & 1) * 88);
|
||||
int y = item_y + ((i >> 1) * 16);
|
||||
|
||||
print_blankstr(x >> 3, y >> 3, 11);
|
||||
print_blankstr_buffer(x >> 3, y >> 3, 11, dest);
|
||||
|
||||
if (item > 0)
|
||||
{
|
||||
|
@ -501,7 +506,7 @@ void goods_print_items(WINDOW *window, unsigned short *items, int y_offset)
|
|||
}
|
||||
|
||||
byte *item_str = m2_strlookup(m2_items_offsets, m2_items_strings, item);
|
||||
print_string(item_str, x + x_offset, y);
|
||||
print_string_in_buffer(item_str, x + x_offset, y, dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,13 +12,6 @@ typedef enum DIRECTION_MOVED
|
|||
DIRECTION_LEFT
|
||||
} MOVED;
|
||||
|
||||
typedef enum GOODS_ACTION
|
||||
{
|
||||
ACTION_NONE = 0,
|
||||
ACTION_STEPIN = 1,
|
||||
ACTION_STEPOUT = -1
|
||||
} GOODS_ACTION;
|
||||
|
||||
int goods_outer_process(WINDOW* window, int y_offset, bool give);
|
||||
int goods_inner_process(WINDOW *window, unsigned short *items);
|
||||
void goods_print_items(WINDOW *window, unsigned short *items, int y_offset);
|
||||
|
@ -35,7 +28,6 @@ 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 void m2_soundeffect(int index);
|
||||
extern int m2_div(int dividend, int divisor);
|
||||
extern int m2_sub_a334c(int value);
|
||||
|
|
12
src/c/locs.c
12
src/c/locs.c
|
@ -1,21 +1,29 @@
|
|||
#include "locs.h"
|
||||
|
||||
int *fileselect_pixels_location = (int*) 0x2015000;
|
||||
byte *cursorValues = (byte*) 0x3000A00;
|
||||
int *window_flags = (int*) 0x300130C;
|
||||
byte *character_general_data = (byte*) 0x3001D40;
|
||||
PC (*pc_stats)[4] = (PC(*)[4]) 0x3001D54;
|
||||
int *cash_on_hand = (int*) 0x30023D0;
|
||||
byte *pc_count = (byte*) 0x3001F0B;
|
||||
bool (*pc_flags)[4] = (bool(*)[4]) 0x3001F0C;
|
||||
byte *pc_names = (byte*) 0x3001F10;
|
||||
PAD_STATE *pad_state = (PAD_STATE*) 0x3002500;
|
||||
PAD_STATE *pad_state_shadow = (PAD_STATE*) 0x3002504;
|
||||
byte *script_readability = (byte*) 0x3004F08;
|
||||
unsigned short *tile_offset = (unsigned short*) 0x30051EC;
|
||||
int *first_window_flag = (int*) 0x30051F0;
|
||||
byte **free_strings_pointers = (byte**) 0x3005200;
|
||||
int **buffer_pointer = (int**) 0x3005220;
|
||||
unsigned short *palette_mask = (unsigned short*) 0x3005228;
|
||||
WINDOW **window_pointers = (WINDOW**) 0x3005230;
|
||||
short *active_window_party_member = (short*) 0x3005264;
|
||||
unsigned short **tilemap_pointer = (unsigned short**)0x3005270;
|
||||
int *fileselect_pixels_location = (int*) 0x2015000;
|
||||
unsigned short **tilemap_pointer = (unsigned short**) 0x3005270;
|
||||
int *vram = (int*) 0x6000000;
|
||||
int *m2_misc_offsets = (int*) 0x8B17EE4;
|
||||
byte *m2_misc_strings = (byte*) 0x8B17424;
|
||||
int *m2_items_offsets = (int*) 0x8B1AF94;
|
||||
byte *m2_items_strings = (byte*) 0x8B1A694;
|
||||
unsigned short *name_header_tiles = (unsigned short*) 0x8B1B8B0;
|
||||
PSIPrintInfo *psi_print_info = (PSIPrintInfo*) 0x8B2A9C0;
|
||||
|
|
12
src/c/locs.h
12
src/c/locs.h
|
@ -4,25 +4,35 @@
|
|||
#include "types.h"
|
||||
#include "pc.h"
|
||||
#include "input.h"
|
||||
#include "window.h"
|
||||
#include "psi.h"
|
||||
|
||||
extern int *fileselect_pixels_location;
|
||||
extern byte *cursorValues;
|
||||
extern int *window_flags;
|
||||
extern PC (*pc_stats)[4];
|
||||
extern int *cash_on_hand;
|
||||
extern byte *pc_count;
|
||||
extern bool (*pc_flags)[4];
|
||||
extern byte *pc_names;
|
||||
extern PAD_STATE *pad_state;
|
||||
extern PAD_STATE *pad_state_shadow;
|
||||
extern byte *script_readability;
|
||||
extern unsigned short *tile_offset;
|
||||
extern int *first_window_flag;
|
||||
extern byte **free_strings_pointers;
|
||||
extern int **buffer_pointer;
|
||||
extern unsigned short *palette_mask;
|
||||
extern WINDOW **window_pointers;
|
||||
extern short *active_window_party_member;
|
||||
extern unsigned short **tilemap_pointer;
|
||||
extern int *fileselect_pixels_location;
|
||||
extern int *vram;
|
||||
extern int *m2_misc_offsets;
|
||||
extern byte *m2_misc_strings;
|
||||
extern int *m2_items_offsets;
|
||||
extern byte *m2_items_strings;
|
||||
extern unsigned short *name_header_tiles;
|
||||
extern byte *character_general_data;
|
||||
extern PSIPrintInfo *psi_print_info;
|
||||
|
||||
#endif
|
||||
|
|
39
src/c/pc.h
39
src/c/pc.h
|
@ -12,17 +12,37 @@ typedef enum AILMENT
|
|||
NAUSEOUS = 4,
|
||||
POISONED = 5,
|
||||
SUNSTROKE = 6,
|
||||
SNIFFLING = 7,
|
||||
MASHROOMIZED = 8,
|
||||
POSSESSED = 9,
|
||||
HOMESICK = 0xA,
|
||||
SNIFFLING = 7
|
||||
} AILMENT;
|
||||
|
||||
typedef enum AILMENT2
|
||||
{
|
||||
MASHROOMIZED = 1,
|
||||
POSSESSED = 2
|
||||
} AILMENT2;
|
||||
|
||||
typedef enum AILMENT3
|
||||
{
|
||||
SLEEP = 1,
|
||||
CRYING = 2
|
||||
} AILMENT3;
|
||||
|
||||
typedef enum CHARACTER
|
||||
{
|
||||
NESS = 0,
|
||||
PAULA = 1,
|
||||
JEFF = 2,
|
||||
POO = 3
|
||||
} CHARACTER;
|
||||
|
||||
typedef struct PC {
|
||||
unsigned short goods[14];
|
||||
int experience;
|
||||
//0x20
|
||||
byte unknown[12];
|
||||
int level;
|
||||
short level;
|
||||
short unknown2a;
|
||||
//0x30
|
||||
unsigned short hp_max;
|
||||
unsigned short hp_current;
|
||||
byte hp_unknown[2]; // possibly a rolling flag + a fractional value
|
||||
|
@ -31,13 +51,14 @@ typedef struct PC {
|
|||
unsigned short pp_current;
|
||||
byte pp_unknown[2];
|
||||
unsigned short pp_rolling;
|
||||
//0x40
|
||||
AILMENT ailment;
|
||||
bool mashroomized;
|
||||
bool sleep;
|
||||
AILMENT2 ailment2;
|
||||
AILMENT3 ailment3;
|
||||
bool strange;
|
||||
bool cant_concentrate;
|
||||
bool homesick;
|
||||
byte unknown2[2];
|
||||
bool unknown2[2];
|
||||
byte offense_base;
|
||||
byte defense_base;
|
||||
byte speed_base;
|
||||
|
@ -46,6 +67,7 @@ typedef struct PC {
|
|||
byte vitality_base;
|
||||
byte iq_base;
|
||||
byte offense_effective;
|
||||
//0x50
|
||||
byte defense_effective;
|
||||
byte speed_effective;
|
||||
byte guts_effective;
|
||||
|
@ -53,6 +75,7 @@ typedef struct PC {
|
|||
byte vitality_effective;
|
||||
byte iq_effective;
|
||||
byte unknown3[11];
|
||||
//0x61
|
||||
byte equipment[4];
|
||||
byte unknown4[7];
|
||||
} PC;
|
||||
|
|
|
@ -0,0 +1,512 @@
|
|||
#include "window.h"
|
||||
#include "psi.h"
|
||||
#include "number-selector.h"
|
||||
#include "locs.h"
|
||||
|
||||
void psiWindow_buffer(CHARACTER psiCharacter, PSIWindow typeOfWindow, PSIClasses printableClasses)
|
||||
{
|
||||
PC *char_data = &(m2_ness_data[psiCharacter]);
|
||||
PSIPrintInfo *printInfo;
|
||||
int level = 0;
|
||||
int thing2 = 0;
|
||||
byte *str = 0;
|
||||
byte *boolCmpWindowType = (byte*)(&(typeOfWindow));
|
||||
byte *boolCmpPrintableClasses = (byte*)(&(printableClasses));
|
||||
byte (*possibleTargets)[3][4] = (byte(*)[3][4])cursorValues;
|
||||
WINDOW *window = getWindow(7);
|
||||
SpecialPSIFlag *SpecialPSIFlags = (SpecialPSIFlag*)(character_general_data + 0x22A);
|
||||
bool print[0x11];
|
||||
for(int i = 0; i < 0x11; i ++)
|
||||
print[i] = true;
|
||||
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
(*possibleTargets)[0][i] = 0;
|
||||
(*possibleTargets)[1][i] = 0;
|
||||
(*possibleTargets)[2][i] = 0;
|
||||
}
|
||||
|
||||
if(psiCharacter == POO && typeOfWindow.Classes_Window && printableClasses.Offense)
|
||||
{
|
||||
if(SpecialPSIFlags->Poo_Starstorm_Alpha)
|
||||
{
|
||||
printInfo = &(psi_print_info[20]);
|
||||
psiPrint_buffer(20 + 1, window, print[6 - 1], printInfo);
|
||||
print[6 - 1] = false;
|
||||
}
|
||||
if(SpecialPSIFlags->Poo_Starstorm_Omega)
|
||||
{
|
||||
printInfo = &(psi_print_info[21]);
|
||||
psiPrint_buffer(21 + 1, window, print[6 - 1], printInfo);
|
||||
print[6 - 1] = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printInfo = &(psi_print_info[0]);
|
||||
for(int i = 0; printInfo->PSIID != 0; i++)
|
||||
{
|
||||
if(psiCharacter != JEFF)
|
||||
{
|
||||
int val = psiCharacter == POO ? 2 : psiCharacter;
|
||||
level = printInfo->levelLearnt[val];
|
||||
}
|
||||
|
||||
if(level != 0)
|
||||
{
|
||||
byte *boolCmpWindowTypePrintInfo = (byte*)(&(printInfo->windowType));
|
||||
if((*boolCmpWindowType) & (*boolCmpWindowTypePrintInfo))
|
||||
{
|
||||
if(char_data->level >= level)
|
||||
{
|
||||
byte *boolCmpPrintableClassesPrintInfo = (byte*)(&(printInfo->possibleClasses));
|
||||
if((*boolCmpPrintableClasses) & (*boolCmpPrintableClassesPrintInfo))
|
||||
{
|
||||
psiPrint_buffer(i + 1, window, print[printInfo->PSIID - 1], printInfo);
|
||||
print[printInfo->PSIID - 1] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
printInfo = &(psi_print_info[i + 1]);
|
||||
}
|
||||
|
||||
if(psiCharacter == NESS && typeOfWindow.Character_Window && printableClasses.Other)
|
||||
{
|
||||
if(SpecialPSIFlags->Ness_Teleport_Alpha)
|
||||
{
|
||||
printInfo = &(psi_print_info[0x32]);
|
||||
psiPrint_buffer(0x32 + 1, window, print[0x11 - 1], printInfo);
|
||||
print[0x11 - 1] = false;
|
||||
}
|
||||
if(SpecialPSIFlags->Ness_Teleport_Beta)
|
||||
{
|
||||
printInfo = &(psi_print_info[0x33]);
|
||||
psiPrint_buffer(0x33 + 1, window, print[0x11 - 1], printInfo);
|
||||
print[0x11 - 1] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void psiTargetWindow_buffer(byte target)
|
||||
{
|
||||
WINDOW *window = getWindow(0x9); //Target Window
|
||||
PSIPrintInfo *printInfo = &(psi_print_info[target - 1]);
|
||||
byte *string_group1 = (byte*)(0x8B204E4);
|
||||
byte extract = (printInfo->PSIID);
|
||||
byte *baseStrPointer = (byte*)(&psitext);
|
||||
byte value = 0;
|
||||
byte value2 = 0;
|
||||
byte *str = 0;
|
||||
if(extract != 4)
|
||||
{
|
||||
value = (*(string_group1 + (printInfo->PSIPrintInfoID * 12)));
|
||||
value = (value * 0x64);
|
||||
value2 = (*(string_group1 + (printInfo->PSIPrintInfoID * 12) + 1));
|
||||
value2 = (value2 * 0x14);
|
||||
str = baseStrPointer + (0x11 * 0x14) + value + value2; //It doesn't use the pointer to the description the struct has but it obtains it like this...
|
||||
}
|
||||
else
|
||||
str = baseStrPointer + (0x11 * 0x14);
|
||||
printstr_hlight_buffer(window, str, 0, 0, 0);
|
||||
|
||||
str = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x1B);
|
||||
printstr_buffer(window, str, 0, 1, 0);
|
||||
|
||||
value = (*(string_group1 + (printInfo->PSIPrintInfoID * 12) + 3));
|
||||
str = (window->number_text_area + 0x12);
|
||||
m2_formatnumber(value, str, 2);
|
||||
(*(window->number_text_area + 0x14)) = 0;
|
||||
(*(window->number_text_area + 0x15)) = 0xFF;
|
||||
printstr_buffer(window, str, 7, 1, 0);
|
||||
}
|
||||
|
||||
void psiPrint_buffer(byte value, WINDOW* window, bool printPSILine, PSIPrintInfo *printInfo)
|
||||
{
|
||||
byte *str = 0;
|
||||
byte *baseStrPointer = (byte*)(&psitext);
|
||||
byte (*possibleTargets)[3][4] = (byte(*)[3][4])cursorValues;
|
||||
|
||||
if(printPSILine)
|
||||
{
|
||||
byte PSIID = printInfo->PSIID;
|
||||
str = baseStrPointer + ((PSIID - 1) * 0x14);
|
||||
printstr_hlight_buffer(window, str, 0, printInfo->YPrinting, 0);
|
||||
if(PSIID == 1)
|
||||
{
|
||||
str = (byte*)(m2_ness_name + (7 * 4) + (8 * 2)); //Go to Rockin's name
|
||||
print_string_in_buffer(str, 0x71, ((printInfo->YPrinting) + window->window_y) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
}
|
||||
}
|
||||
|
||||
byte symbol = printInfo->symbol;
|
||||
str = (byte*)(0x8B1B904 + (symbol * 3));
|
||||
printstr_hlight_buffer(window, str, printInfo->XSymbol + 1, printInfo->YPrinting, 0);
|
||||
int targetX = (((printInfo->XSymbol - 9) >> 0x1F) + printInfo->XSymbol - 9) >> 1;
|
||||
(*possibleTargets)[printInfo->YPrinting][targetX] = value;
|
||||
}
|
||||
|
||||
int PSITargetWindowInput(WINDOW* window)
|
||||
{
|
||||
|
||||
if (!(window->flags_unknown3a & 0x10))
|
||||
{
|
||||
window->flags_unknown3a |= 0x10;
|
||||
|
||||
// Draw window header
|
||||
map_tile(0xB3, window->window_x, window->window_y - 1);
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, *active_window_party_member);
|
||||
}
|
||||
|
||||
return PSITargetInput(window);
|
||||
}
|
||||
|
||||
int PSITargetInput(WINDOW* window)
|
||||
{
|
||||
short topX = window->cursor_x;
|
||||
short topY = window->cursor_y;
|
||||
short beforeX = topX;
|
||||
short beforeY = topY;
|
||||
short currentX = beforeX;
|
||||
short currentY = beforeY;
|
||||
byte (*possibleTargets)[3][4] = (byte(*)[3][4])cursorValues;
|
||||
byte target = (*possibleTargets)[currentY][currentX];
|
||||
|
||||
if(target == 0)
|
||||
{
|
||||
currentX = 0;
|
||||
for(currentY = 0; currentY < 3 && (*possibleTargets)[currentY][currentX] == 0; currentY++)
|
||||
{
|
||||
for(currentX = 0; currentX < 4 && (*possibleTargets)[currentY][currentX] == 0; currentX++);
|
||||
if(currentX == 4)
|
||||
currentX = 0;
|
||||
}
|
||||
if(currentY < 3)
|
||||
{
|
||||
topX = currentX;
|
||||
topY = currentY;
|
||||
beforeX = currentX;
|
||||
beforeY = currentY;
|
||||
}
|
||||
else
|
||||
return ACTION_ERROR;
|
||||
}
|
||||
|
||||
map_tile(0x1FF, window->window_x + (currentX * 2) + 9, window->window_y + currentY * 2);
|
||||
map_tile(0x1FF, window->window_x + (currentX * 2) + 9, window->window_y + currentY * 2 + 1);
|
||||
|
||||
PAD_STATE state = *pad_state;
|
||||
PAD_STATE state_shadow = *pad_state_shadow;
|
||||
|
||||
if(state.up)
|
||||
{
|
||||
currentY--;
|
||||
if(currentY < 0 && window->hold)
|
||||
currentY = 0;
|
||||
else if(currentY < 0)
|
||||
{
|
||||
currentY = 2;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentY--;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i = 0; (*possibleTargets)[currentY][currentX] == 0 && i <= 2;)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX--;
|
||||
if(currentX < 0)
|
||||
{
|
||||
i++;
|
||||
currentY--;
|
||||
currentX = beforeX;
|
||||
}
|
||||
if(currentY < 0)
|
||||
currentY = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beforeX = currentX;
|
||||
beforeY = currentY;
|
||||
|
||||
if(state.down)
|
||||
{
|
||||
currentY++;
|
||||
if(currentY > 2 && window->hold)
|
||||
currentY = 2;
|
||||
else if(currentY > 2)
|
||||
{
|
||||
currentY = 0;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentY++;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i = 0; (*possibleTargets)[currentY][currentX] == 0 && i <= 2;)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX--;
|
||||
if(currentX < 0)
|
||||
{
|
||||
i++;
|
||||
currentY++;
|
||||
currentX = beforeX;
|
||||
}
|
||||
if(currentY > 2)
|
||||
{
|
||||
if(window->hold)
|
||||
{
|
||||
currentY = beforeY;
|
||||
currentX = beforeX;
|
||||
break;
|
||||
}
|
||||
currentY = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beforeX = currentX;
|
||||
beforeY = currentY;
|
||||
|
||||
if(state.right)
|
||||
{
|
||||
currentX++;
|
||||
if(state_shadow.up && window->hold)
|
||||
currentX--;
|
||||
else if(currentX > 3)
|
||||
{
|
||||
if(window->hold)
|
||||
currentX = 3;
|
||||
else
|
||||
{
|
||||
currentX = 0;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0);
|
||||
else
|
||||
{
|
||||
if(state_shadow.down || state_shadow.up)
|
||||
currentX = beforeX;
|
||||
else if(currentY == 0)
|
||||
{
|
||||
short tmpX = currentX;
|
||||
while(currentY <= 1)
|
||||
{
|
||||
currentX = tmpX;
|
||||
while(currentX < 3)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX++;
|
||||
}
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentY++;
|
||||
}
|
||||
if(currentY == 2)
|
||||
{
|
||||
currentY = beforeY;
|
||||
if(window->hold)
|
||||
currentX = beforeX;
|
||||
else
|
||||
{
|
||||
currentX = 0;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
short tmpX = currentX;
|
||||
for(currentY = 2; currentY >= 0; currentY--)
|
||||
{
|
||||
currentX = tmpX;
|
||||
while(currentX < 3)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX++;
|
||||
}
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
}
|
||||
if(currentY < 0)
|
||||
{
|
||||
currentY = beforeY;
|
||||
if(window->hold)
|
||||
currentX = beforeX;
|
||||
else
|
||||
{
|
||||
currentX = 0;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beforeX = currentX;
|
||||
beforeY = currentY;
|
||||
|
||||
if(state.left)
|
||||
{
|
||||
currentX--;
|
||||
if(state_shadow.up && window->hold)
|
||||
currentX++;
|
||||
else if(currentX < 0)
|
||||
{
|
||||
if(window->hold)
|
||||
currentX = 0;
|
||||
else
|
||||
{
|
||||
currentX = 3;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0);
|
||||
else
|
||||
{
|
||||
if(state_shadow.down || state_shadow.up)
|
||||
currentX = beforeX;
|
||||
else if(currentY == 0)
|
||||
{
|
||||
short tmpX = currentX;
|
||||
while(currentY <= 1)
|
||||
{
|
||||
currentX = tmpX;
|
||||
while(currentX > 0)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX--;
|
||||
}
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentY++;
|
||||
}
|
||||
if(currentY == 2)
|
||||
{
|
||||
currentY = beforeY;
|
||||
if(window->hold)
|
||||
currentX = beforeX;
|
||||
else
|
||||
{
|
||||
currentX = 3;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX--;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
short tmpX = currentX;
|
||||
for(currentY = 2; currentY >= 0; currentY--)
|
||||
{
|
||||
currentX = tmpX;
|
||||
while(currentX > 0)
|
||||
{
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
currentX--;
|
||||
}
|
||||
if((*possibleTargets)[currentY][currentX] != 0)
|
||||
break;
|
||||
}
|
||||
if(currentY < 0)
|
||||
{
|
||||
currentY = beforeY;
|
||||
if(window->hold)
|
||||
currentX = beforeX;
|
||||
else
|
||||
{
|
||||
currentX = 3;
|
||||
while((*possibleTargets)[currentY][currentX] == 0)
|
||||
currentX--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window->cursor_x = currentX;
|
||||
window->cursor_y = currentY;
|
||||
|
||||
target = (*possibleTargets)[currentY][currentX];
|
||||
if(currentX != topX || currentY != topY)
|
||||
window->vwf_skip = false;
|
||||
|
||||
bool beforeVWF = window->vwf_skip;
|
||||
|
||||
if(!window->vwf_skip)
|
||||
{
|
||||
clear_window_buffer(getWindow(9), (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
psiTargetWindow_buffer(target);
|
||||
window->vwf_skip = true;
|
||||
}
|
||||
|
||||
if(state_shadow.right || state_shadow.left || state_shadow.up || state_shadow.down)
|
||||
{
|
||||
window->counter = 0;
|
||||
int flag = *window_flags;
|
||||
if(state.up || state.down)
|
||||
{
|
||||
if(currentY != topY)
|
||||
m2_soundeffect(0x12F);
|
||||
}
|
||||
if(state.left || state.right)
|
||||
{
|
||||
if(currentX != topX)
|
||||
m2_soundeffect(0x12E);
|
||||
}
|
||||
window->hold = true;
|
||||
}
|
||||
else
|
||||
window->hold = false;
|
||||
|
||||
if((state.b || state.select) && (beforeVWF))
|
||||
{
|
||||
m2_soundeffect(0x12E);
|
||||
window->counter = 0;
|
||||
return ACTION_STEPOUT;
|
||||
}
|
||||
|
||||
window->cursor_x_delta = target;
|
||||
|
||||
if((state.a || state.l) && (beforeVWF))
|
||||
{
|
||||
m2_soundeffect(0x12D);
|
||||
window->counter = 0xFFFF;
|
||||
return target;
|
||||
}
|
||||
|
||||
if (window->counter != 0xFFFF)
|
||||
{
|
||||
window->counter++;
|
||||
|
||||
// Draw cursor for current item
|
||||
map_special_character((window->counter <= 7) ? 0x99 : 0x9A,
|
||||
window->window_x + (window->cursor_x * 2) + 9,
|
||||
window->window_y + window->cursor_y * 2);
|
||||
|
||||
if (window->counter > 0x10)
|
||||
window->counter = 0;
|
||||
}
|
||||
|
||||
return ACTION_NONE;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
#ifndef HEADER_PSI_INCLUDED
|
||||
#define HEADER_PSI_INCLUDED
|
||||
|
||||
#include "vwf.h"
|
||||
|
||||
typedef struct PSIClasses {
|
||||
bool Offense : 1;
|
||||
bool Recover : 1;
|
||||
bool Assist : 1;
|
||||
bool Other : 1;
|
||||
} PSIClasses;
|
||||
|
||||
typedef struct PSIWindow
|
||||
{
|
||||
bool Character_Window : 1;
|
||||
bool Classes_Window : 1;
|
||||
} PSIWindow;
|
||||
|
||||
typedef struct PSIPrintInfo {
|
||||
byte PSIID;
|
||||
byte symbol;
|
||||
PSIClasses possibleClasses;
|
||||
PSIWindow windowType;
|
||||
unsigned short PSIPrintInfoID;
|
||||
byte levelLearnt[3];
|
||||
byte XSymbol;
|
||||
unsigned short YPrinting;
|
||||
byte *description;
|
||||
} PSIPrintInfo;
|
||||
|
||||
typedef struct SpecialPSIFlag {
|
||||
bool Ness_Teleport_Alpha : 1;
|
||||
bool Poo_Starstorm_Alpha : 1;
|
||||
bool Poo_Starstorm_Omega : 1;
|
||||
bool Ness_Teleport_Beta : 1;
|
||||
} SpecialPSIFlag;
|
||||
|
||||
|
||||
void psiWindow_buffer(CHARACTER psiCharacter, PSIWindow typeOfWindow, PSIClasses printableClasses);
|
||||
void psiTargetWindow_buffer(byte target);
|
||||
void psiPrint_buffer(byte value, WINDOW* window, bool printPSILine, PSIPrintInfo *printInfo);
|
||||
int PSITargetWindowInput(WINDOW* window);
|
||||
int PSITargetInput(WINDOW* window);
|
||||
|
||||
|
||||
extern PSIPrintInfo m2_psi_print_table[];
|
||||
extern int psitext;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,275 @@
|
|||
#include "window.h"
|
||||
#include "status.h"
|
||||
#include "number-selector.h"
|
||||
#include "locs.h"
|
||||
|
||||
void printNumberOfStatus(int maxLength, int value, int blankX, int y, int strX, int width)
|
||||
{
|
||||
byte str[0x10];
|
||||
int end = setNumber_getLength(value, str, maxLength);
|
||||
str[end] = 0;
|
||||
str[end + 1] = 0xFF;
|
||||
print_blankstr_buffer(blankX, y, width, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
int x = (strX - (end * 6));
|
||||
print_string_in_buffer(str, x, y << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
}
|
||||
|
||||
void printStatusSymbolArrangement(unsigned short symbolTile, WINDOW* window)
|
||||
{
|
||||
map_tile(symbolTile, window->window_x + 0xA, window->window_y + 2);
|
||||
if(symbolTile == 0x1FF)
|
||||
symbolTile -= 0x20;
|
||||
map_tile(symbolTile + 0x20, window->window_x + 0xA, window->window_y + 3);
|
||||
}
|
||||
|
||||
void printStatusString(WINDOW* window, int value)
|
||||
{
|
||||
byte *str = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, value);
|
||||
printstr_hlight_buffer(window, str, 1, 1, 0);
|
||||
}
|
||||
|
||||
int statusNumbersPrint(WINDOW* window, bool doNotPrint)
|
||||
{
|
||||
if ((!(window->flags_unknown3a & 0x10)) && !doNotPrint)
|
||||
{
|
||||
window->flags_unknown3a |= 0x10;
|
||||
|
||||
// Draw window header
|
||||
map_tile(0xB3, window->window_x, window->window_y - 1);
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, *active_window_party_member);
|
||||
}
|
||||
|
||||
if(!doNotPrint)
|
||||
{
|
||||
m2_hpwindow_up(*active_window_party_member);
|
||||
PC *character_data = &(m2_ness_data[*active_window_party_member]);
|
||||
printNumberOfStatus(2, character_data->level, 0x5, 1, 0x38, 3);
|
||||
printNumberOfStatus(3, character_data->hp_max, 0x10, 7, 0x93, 3);
|
||||
printNumberOfStatus(3, character_data->hp_rolling, 0xC, 7, 0x78, 3);
|
||||
printNumberOfStatus(3, character_data->pp_max, 0x10, 9, 0x93, 3);
|
||||
printNumberOfStatus(3, character_data->pp_rolling, 0xC, 9, 0x78, 3);
|
||||
printNumberOfStatus(7, character_data->experience, 0xC, 0xB, 0x93, 7);
|
||||
if(character_data->level < 99)
|
||||
{
|
||||
unsigned int *experienceLevelTable = (unsigned int*)0x8B1EC20;
|
||||
unsigned int experienceLevelUp = *(experienceLevelTable + ((*active_window_party_member) * 100) + character_data->level + 1);
|
||||
printNumberOfStatus(7, experienceLevelUp - character_data->experience, 2, 0xD, 0x3D, 6);
|
||||
}
|
||||
else
|
||||
print_blankstr_buffer(2, 0xD, 6, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
printNumberOfStatus(3, character_data->offense_effective, 0x19, 0x1, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->defense_effective, 0x19, 0x3, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->speed_effective, 0x19, 0x5, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->guts_effective, 0x19, 0x7, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->vitality_effective, 0x19, 0x9, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->iq_effective, 0x19, 0xB, 0xE1, 4);
|
||||
printNumberOfStatus(3, character_data->luck_effective, 0x19, 0xD, 0xE1, 4);
|
||||
print_blankstr_buffer(5, 0xF, 0x14, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if((*active_window_party_member) != JEFF)
|
||||
{
|
||||
byte *str = m2_strlookup((int*)0x8B17EE4, (byte*)0x8B17424, 0x13);
|
||||
print_string_in_buffer(str, 0x2C, (0xF) << 3, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
}
|
||||
print_blankstr_buffer(1, 0x3, 0xA, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
unsigned short symbolTile = ailmentTileSetup(&(character_data->ailment), 0);
|
||||
if(symbolTile == 0)
|
||||
{
|
||||
printStatusSymbolArrangement(0x1FF, window);
|
||||
}
|
||||
if(character_data->ailment != CONSCIOUS)
|
||||
printStatusString(window, 0x7F + character_data->ailment);
|
||||
else if(character_data->ailment2 != CONSCIOUS)
|
||||
printStatusString(window, 0x86 + character_data->ailment2);
|
||||
else if(character_data->homesick)
|
||||
printStatusString(window, 0x89);
|
||||
if(character_data->ailment != CONSCIOUS || character_data->ailment2 != CONSCIOUS || character_data->ailment3 != CONSCIOUS || character_data->strange || character_data->cant_concentrate || character_data->unknown2[0])
|
||||
{
|
||||
if(symbolTile == 0)
|
||||
return 0;
|
||||
printStatusSymbolArrangement(symbolTile, window);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
int statusReadInput(WINDOW* window)
|
||||
{
|
||||
unsigned short previousCharacter = *active_window_party_member;
|
||||
int currentCharacter = previousCharacter;
|
||||
PAD_STATE state = *pad_state;
|
||||
PAD_STATE state_shadow = *pad_state_shadow;
|
||||
|
||||
if(state.right && !window->hold)
|
||||
currentCharacter += 1;
|
||||
|
||||
if(state.left && !window->hold)
|
||||
currentCharacter -= 1;
|
||||
|
||||
if((state.left || state.right) && !window->hold)
|
||||
{
|
||||
window->unknown7 = 0;
|
||||
if(state.left)
|
||||
{
|
||||
if(currentCharacter < 0)
|
||||
currentCharacter = 3;
|
||||
int foundChar = currentCharacter;
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
if (foundChar < 0)
|
||||
foundChar = 3;
|
||||
if ((*pc_flags)[foundChar])
|
||||
break;
|
||||
|
||||
foundChar--;
|
||||
}
|
||||
currentCharacter = foundChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(currentCharacter > 3)
|
||||
currentCharacter = 0;
|
||||
int foundChar = currentCharacter;
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
if (foundChar > 3)
|
||||
foundChar = 0;
|
||||
if ((*pc_flags)[foundChar])
|
||||
break;
|
||||
|
||||
foundChar++;
|
||||
}
|
||||
currentCharacter = foundChar;
|
||||
}
|
||||
m2_hpwindow_up(currentCharacter);
|
||||
clear_name_header(window);
|
||||
copy_name_header(window, currentCharacter);
|
||||
(*active_window_party_member) = currentCharacter;
|
||||
if(currentCharacter != previousCharacter)
|
||||
statusNumbersPrint(window, false);
|
||||
}
|
||||
|
||||
if(state_shadow.right || state_shadow.left)
|
||||
{
|
||||
if(state.right || state.left)
|
||||
{
|
||||
int flag = *window_flags;
|
||||
if(flag & 0x800)
|
||||
{
|
||||
if(currentCharacter != previousCharacter)
|
||||
m2_soundeffect(0x131);
|
||||
}
|
||||
else if(currentCharacter != previousCharacter)
|
||||
m2_soundeffect(0x12E);
|
||||
}
|
||||
window->hold = true;
|
||||
}
|
||||
else
|
||||
window->hold = false;
|
||||
|
||||
if(state.b || state.select)
|
||||
{
|
||||
m2_soundeffect(0x12E);
|
||||
window->counter = 0;
|
||||
return ACTION_STEPOUT;
|
||||
}
|
||||
else if(state.a || state.l)
|
||||
{
|
||||
m2_soundeffect(0x12D);
|
||||
if(currentCharacter != JEFF)
|
||||
{
|
||||
if((*pc_count) > 1)
|
||||
{
|
||||
unsigned short *arrangementBase = (*tilemap_pointer) + (((window->window_y - 1) << 5) + window->window_x + window->window_width - 4);
|
||||
unsigned short topTile = ((*tile_offset) + 0x96) | (*palette_mask) | 0x800;
|
||||
(*arrangementBase) = topTile;
|
||||
(*(arrangementBase + 1)) = topTile;
|
||||
(*(arrangementBase + 2)) = topTile;
|
||||
(*(arrangementBase + 3)) = topTile;
|
||||
}
|
||||
window->counter = 0;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
window->counter++;
|
||||
|
||||
if (*pc_count > 1)
|
||||
{
|
||||
// We're doing a bit of simplification here.
|
||||
// The Japanese version tries to highlight the arrow you pressed.
|
||||
// It only shows for a couple frames and it looks weird, so we're
|
||||
// just going to show the arrows and not bother with the direction indicator.
|
||||
draw_window_arrows(window, window->counter < 8);
|
||||
}
|
||||
|
||||
if (window->counter > 16)
|
||||
window->counter = 0;
|
||||
|
||||
return ACTION_NONE;
|
||||
}
|
||||
|
||||
int statusWindowNumbers(WINDOW* window, bool doNotPrint)
|
||||
{
|
||||
if(statusNumbersPrint(window, doNotPrint) == 0)
|
||||
return 0;
|
||||
return statusReadInput(window);
|
||||
}
|
||||
|
||||
int statusWindowText(WINDOW* window)
|
||||
{
|
||||
if(window->redraw)
|
||||
buffer_drawwindow(window, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if(window->loaded_code != 0 && ((*script_readability) == 0))
|
||||
{
|
||||
window->delay = 0;
|
||||
while(true)
|
||||
{
|
||||
while(window->text_y >= window->window_height || window->window_y + window->text_y > 0x1F)
|
||||
properScroll(window, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
byte *str = window->text_start + window->text_offset;
|
||||
if((*(str + 1)) == 0xFF)
|
||||
{
|
||||
int returnedLength = customcodes_parse_generic(*str, str, window, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
if(returnedLength != 0)
|
||||
{
|
||||
if(returnedLength < 0)
|
||||
returnedLength = 0;
|
||||
window->text_offset += returnedLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((*str) == 1)
|
||||
{
|
||||
window->text_y += 2;
|
||||
window->text_x = 0;
|
||||
window->text_offset += 2;
|
||||
}
|
||||
else if((*str) == 0)
|
||||
{
|
||||
window->loaded_code = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
window->text_offset++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(window->text_x >= window->window_width || window->window_x + window->text_x > 0x1F)
|
||||
{
|
||||
window->text_y += 2;
|
||||
window->text_x = 0;
|
||||
}
|
||||
weld_entry_custom_buffer(window, str, 0, 0xF, (byte*)(OVERWORLD_BUFFER - ((*tile_offset) * TILESET_OFFSET_BUFFER_MULTIPLIER)));
|
||||
window->text_offset++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef HEADER_STATUS_INCLUDED
|
||||
#define HEADER_STATUS_INCLUDED
|
||||
|
||||
#include "vwf.h"
|
||||
|
||||
void printNumberOfStatus(int maxLength, int value, int blankX, int y, int strX, int width);
|
||||
void printStatusSymbolArrangement(unsigned short symbolTile, WINDOW* window);
|
||||
void printStatusString(WINDOW* window, int value);
|
||||
int statusNumbersPrint(WINDOW* window, bool doNotPrint);
|
||||
int statusReadInput(WINDOW* window);
|
||||
int statusWindowNumbers(WINDOW* window, bool doNotPrint);
|
||||
int statusWindowText(WINDOW* window);
|
||||
|
||||
#endif
|
1462
src/c/vwf.c
1462
src/c/vwf.c
File diff suppressed because it is too large
Load Diff
71
src/c/vwf.h
71
src/c/vwf.h
|
@ -7,6 +7,7 @@
|
|||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#define TILESET_OFFSET_BUFFER_MULTIPLIER 0x8
|
||||
#define CHAR_OFFSET 0x50
|
||||
#define CHAR_END 0x60
|
||||
#define YOUWON_START 0x64
|
||||
|
@ -21,17 +22,24 @@
|
|||
#define WINDOW_HEADER_Y 0x11
|
||||
#define WINDOW_HEADER_TILE (WINDOW_HEADER_X + (WINDOW_HEADER_Y * 32))
|
||||
|
||||
#define OVERWORLD_BUFFER 0x200F200
|
||||
|
||||
#define CUSTOMCC_SET_X 0x5F
|
||||
#define CUSTOMCC_ADD_X 0x60
|
||||
|
||||
byte decode_character(byte chr);
|
||||
byte encode_ascii(char chr);
|
||||
int get_tile_number(int x, int y);
|
||||
int get_tile_number_with_offset(int x, int y);
|
||||
int get_tile_number_buffer(int x, int y);
|
||||
int get_tile_number_with_offset_buffer(int x, int y);
|
||||
int ascii_strlen(char *str);
|
||||
int wrapper_count_pixels_to_tiles(byte *str, int length);
|
||||
int count_pixels_to_tiles(byte *str, int length, int startingPos);
|
||||
int expand_bit_depth(byte row, int foreground);
|
||||
byte reduce_bit_depth(int row, int foreground);
|
||||
int count_pixels_to_tiles_normal_string(byte *str, int startingPos);
|
||||
int expand_bit_depth(byte row, byte foreground);
|
||||
byte reduce_bit_depth(int row, int foregroundRow);
|
||||
void reduce_bit_depth_sp(int* TileRows, int* bufferValues);
|
||||
byte print_character(byte chr, int x, int y);
|
||||
byte print_character_formatted(byte chr, int x, int y, int font, int foreground);
|
||||
byte print_character_to_window(byte chr, WINDOW* window);
|
||||
|
@ -39,10 +47,13 @@ void print_special_character(int tile, int x, int y);
|
|||
void map_special_character(unsigned short tile, int x, int y);
|
||||
void map_tile(unsigned short tile, int x, int y);
|
||||
byte print_character_with_callback(byte chr, int x, int y, int font, int foreground,
|
||||
int *dest, int (*getTileCallback)(int, int), unsigned short *tilemapPtr, int tilemapWidth);
|
||||
int *dest, int (*getTileCallback)(int, int), unsigned short *tilemapPtr, int tilemapWidth, byte doubleTileHeight);
|
||||
byte print_character_with_callback_1bpp_buffer(byte chr, int x, int y, byte *dest, int (*getTileCallback)(int, int), int font,
|
||||
unsigned short *tilemapPtr, int tilemapWidth, byte doubleTileHeight);
|
||||
byte print_character_to_ram(byte chr, int *dest, int xOffset, int font, int foreground);
|
||||
int print_window_header_string(int *dest, byte *str, int x, int y);
|
||||
void clear_window_header(int *dest, int length, int x, int y);
|
||||
int print_window_number_header_string(int *dest, byte *str, int x, int y);
|
||||
unsigned short* print_equip_header(int type, unsigned short *tilemap, unsigned int *dest,
|
||||
WINDOW *window);
|
||||
unsigned short format_tile(unsigned short tile, bool flip_x, bool flip_y);
|
||||
|
@ -74,11 +85,53 @@ 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);
|
||||
void setupShortMainMenu_Talk_to_Goods(char *String);
|
||||
int get_pointer_jump_back(byte *character);
|
||||
void print_letter_in_buffer(WINDOW* window, byte* character, byte *dest);
|
||||
void weld_entry_custom_buffer(WINDOW *window, byte *str, int font, int foreground, byte* dest);
|
||||
byte print_character_formatted_buffer(byte chr, int x, int y, int font, int foreground, byte *dest);
|
||||
int print_window_with_buffer(WINDOW* window);
|
||||
byte print_character_with_codes(WINDOW* window, byte* dest);
|
||||
int buffer_reset_window(WINDOW* window, bool skip_redraw, byte* dest);
|
||||
void handle_first_window_buffer(WINDOW* window, byte* dest);
|
||||
void clear_window_buffer(WINDOW *window, byte* dest);
|
||||
void clear_rect_buffer(int x, int y, int width, int height, byte* dest);
|
||||
void clear_tile_buffer(int x, int y, byte* dest);
|
||||
int buffer_drawwindow(WINDOW* window, byte* dest);
|
||||
void scrolltext_buffer(WINDOW* window, byte* dest);
|
||||
void properScroll(WINDOW* window, byte* dest);
|
||||
int jumpToOffset(byte* character);
|
||||
void copy_tile_buffer(int xSource, int ySource, int xDest, int yDest, byte *dest);
|
||||
void copy_tile_up_buffer(int x, int y, byte *dest);
|
||||
void setStuffWindow_Graphics();
|
||||
void clearWindowTiles_buffer(WINDOW* window);
|
||||
int initWindow_buffer(WINDOW* window, byte* text_start, unsigned short delay_between_prints);
|
||||
int initWindow_cursor_buffer(WINDOW* window, byte* text_start, unsigned short cursor_x_delta, unsigned short unknown7a, unsigned short cursor_x_base);
|
||||
void print_blankstr_buffer(int x, int y, int width, byte *dest);
|
||||
void print_blankstr_window_buffer(int x, int y, int width, WINDOW* window);
|
||||
int print_alphabet_buffer(WINDOW* window);
|
||||
unsigned short ailmentTileSetup(byte *ailmentBase, unsigned short defaultVal);
|
||||
int setNumber_getLength(int value, byte *str, int maxLength);
|
||||
int print_string_in_buffer(byte *str, int x, int y, byte *dest);
|
||||
void printCashWindow();
|
||||
WINDOW* getWindow(int index);
|
||||
void printTinyArrow(int x, int y);
|
||||
int printstr_buffer(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight);
|
||||
int highlight_string(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight);
|
||||
void highlight_talk_to();
|
||||
unsigned short printstr_hlight_buffer(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight);
|
||||
unsigned short printstr_hlight_pixels_buffer(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight);
|
||||
void load_pixels_overworld_buffer();
|
||||
void store_pixels_overworld_buffer(int totalYs);
|
||||
void store_pixels_overworld_buffer_totalTiles(int totalTiles);
|
||||
|
||||
extern unsigned short m2_coord_table_fast_progression[];
|
||||
extern unsigned short m2_coord_table[];
|
||||
extern byte m2_ness_name[];
|
||||
extern int m2_bits_to_nybbles[];
|
||||
extern int m2_bits_to_nybbles_fast[];
|
||||
extern byte m2_nybbles_to_bits[];
|
||||
extern byte optimized_byte_4bpp_to_1bpp_table[];
|
||||
extern byte *m2_font_table[];
|
||||
extern byte m2_font_widths[];
|
||||
extern byte m2_font_heights[];
|
||||
|
@ -88,9 +141,15 @@ extern byte m12_other_str6[];
|
|||
extern byte m12_other_str7[];
|
||||
extern byte m12_other_str8[];
|
||||
extern byte m2_cstm_last_printed[];
|
||||
extern byte *m2_script_readability;
|
||||
extern int overworld_buffer;
|
||||
extern PC m2_ness_data[];
|
||||
extern int m2_arrow_tile[];
|
||||
|
||||
extern bool m2_isequipped(int item_index);
|
||||
extern void cpufastset(void *source, void *dest, int mode);
|
||||
extern byte* m2_strlookup(int *offset_table, byte *strings, int index);
|
||||
extern void m2_formatnumber(int value, byte* strDest, int length);
|
||||
extern int bin_to_bcd(int value, int* digit_count);
|
||||
extern int m2_drawwindow(WINDOW* window);
|
||||
extern int m2_resetwindow(WINDOW* window, bool skip_redraw);
|
||||
|
@ -99,3 +158,9 @@ extern int m2_div(int dividend, int divisor);
|
|||
extern int m2_remainder(int dividend, int divisor);
|
||||
extern void m2_soundeffect(int index);
|
||||
extern void m2_printstr(WINDOW* window, byte* str, unsigned short x, unsigned short y, bool highlight);
|
||||
extern int customcodes_parse_generic(int code, char* parserAddress, WINDOW* window, byte* dest);
|
||||
extern void m2_sub_d3c50();
|
||||
extern void m2_sub_d6844();
|
||||
extern int m2_setupwindow(WINDOW* window, short window_x, short window_y, short window_width, short window_height);
|
||||
extern void m2_setupbattlename(short value);
|
||||
extern void store_pixels_overworld();
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
#ifndef HEADER_WINDOW_INCLUDED
|
||||
#define HEADER_WINDOW_INCLUDED
|
||||
|
||||
#include "types.h"
|
||||
|
||||
typedef enum WINDOW_ACTION
|
||||
{
|
||||
ACTION_NONE = 0,
|
||||
ACTION_STEPIN = 1,
|
||||
ACTION_STEPOUT = -1,
|
||||
ACTION_ERROR = -2
|
||||
} WINDOW_ACTION;
|
||||
|
||||
typedef struct WINDOW {
|
||||
// 0x00
|
||||
bool enable : 1; // 0x0001 Indicates that the window is enabled.
|
||||
|
@ -20,20 +31,20 @@ typedef struct WINDOW {
|
|||
byte* menu_text;
|
||||
|
||||
// 0x10
|
||||
int unknown2;
|
||||
byte* number_text_area;
|
||||
int text_offset;
|
||||
int unknown3;
|
||||
int text_offset2;
|
||||
|
||||
// 0x20
|
||||
unsigned short window_area;
|
||||
short window_area;
|
||||
unsigned short window_x;
|
||||
unsigned short window_y;
|
||||
unsigned short window_width;
|
||||
unsigned short window_height;
|
||||
unsigned short text_x;
|
||||
unsigned short text_y;
|
||||
unsigned short unknown4;
|
||||
unsigned short delay_between_prints;
|
||||
|
||||
// 0x30
|
||||
unsigned short delay;
|
||||
|
@ -49,7 +60,10 @@ typedef struct WINDOW {
|
|||
unsigned short cursor_x_base;
|
||||
byte cursor_x_delta;
|
||||
byte unknown9a;
|
||||
int unknown9;
|
||||
byte loaded_code;
|
||||
byte unknown9[3];
|
||||
int unknown10;
|
||||
int unknown11;
|
||||
} WINDOW;
|
||||
|
||||
#endif
|
|
@ -0,0 +1 @@
|
|||
DDDDODDDôDDD˙DDDDODDOODDôODD˙ODDDôDDOôDDôôDD˙ôDDD˙DDO˙DDô˙DD˙˙DDDDODODODôDOD˙DODDOODOOODôOOD˙OODDôODOôODôôOD˙ôODD˙ODO˙ODô˙OD˙˙ODDDôDODôDôDôD˙DôDDOôDOOôDôOôD˙OôDDôôDOôôDôôôD˙ôôDD˙ôDO˙ôDô˙ôD˙˙ôDDD˙DOD˙DôD˙D˙D˙DDO˙DOO˙DôO˙D˙O˙DDô˙DOô˙Dôô˙D˙ô˙DD˙˙DO˙˙Dô˙˙D˙˙˙DDDDOODDOôDDO˙DDODODOOODOôODO˙ODODôDOOôDOôôDO˙ôDOD˙DOO˙DOô˙DO˙˙DODDOOODOOôDOO˙DOODOOOOOOOôOOO˙OOODôOOOôOOôôOO˙ôOOD˙OOO˙OOô˙OO˙˙OODDôOODôOôDôO˙DôODOôOOOôOôOôO˙OôODôôOOôôOôôôO˙ôôOD˙ôOO˙ôOô˙ôO˙˙ôODD˙OOD˙OôD˙O˙D˙ODO˙OOO˙OôO˙O˙O˙ODô˙OOô˙Oôô˙O˙ô˙OD˙˙OO˙˙Oô˙˙O˙˙˙ODDDôODDôôDDô˙DDôDODôOODôôODô˙ODôDôDôOôDôôôDô˙ôDôD˙DôO˙Dôô˙Dô˙˙DôDDOôODOôôDOô˙DOôDOOôOOOôôOOô˙OOôDôOôOôOôôôOô˙ôOôD˙OôO˙Oôô˙Oô˙˙OôDDôôODôôôDôô˙DôôDOôôOOôôôOôô˙OôôDôôôOôôôôôôô˙ôôôD˙ôôO˙ôôô˙ôô˙˙ôôDD˙ôOD˙ôôD˙ô˙D˙ôDO˙ôOO˙ôôO˙ô˙O˙ôDô˙ôOô˙ôôô˙ô˙ô˙ôD˙˙ôO˙˙ôô˙˙ô˙˙˙ôDDD˙ODD˙ôDD˙˙DD˙DOD˙OOD˙ôOD˙˙OD˙DôD˙OôD˙ôôD˙˙ôD˙D˙D˙O˙D˙ô˙D˙˙˙D˙DDO˙ODO˙ôDO˙˙DO˙DOO˙OOO˙ôOO˙˙OO˙DôO˙OôO˙ôôO˙˙ôO˙D˙O˙O˙O˙ô˙O˙˙˙O˙DDô˙ODô˙ôDô˙˙Dô˙DOô˙OOô˙ôOô˙˙Oô˙Dôô˙Oôô˙ôôô˙˙ôô˙D˙ô˙O˙ô˙ô˙ô˙˙˙ô˙DD˙˙OD˙˙ôD˙˙˙D˙˙DO˙˙OO˙˙ôO˙˙˙O˙˙Dô˙˙Oô˙˙ôô˙˙˙ô˙˙D˙˙˙O˙˙˙ô˙˙˙˙˙˙˙
|
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
33333333333333333333333333333333
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,16 +1,24 @@
|
|||
//==============================================================================
|
||||
// void parse(int code, char* parserAddress, WINDOW* window)
|
||||
// int parse_generic(int code, char* parserAddress, WINDOW* window, byte* dest)
|
||||
// In:
|
||||
// r0: code
|
||||
// r1: parser address
|
||||
// r2: window
|
||||
// r3: memory_destionation for handle_first_window_buffer
|
||||
// Out:
|
||||
// r0: control code length (0 if not matched)
|
||||
//==============================================================================
|
||||
|
||||
customcodes_parse:
|
||||
push {r3,lr}
|
||||
ldr r3,=#0x6000000
|
||||
bl customcodes_parse_generic
|
||||
pop {r3,pc}
|
||||
|
||||
customcodes_parse_generic:
|
||||
|
||||
push {r1-r5,lr}
|
||||
mov r5,r3
|
||||
mov r3,0
|
||||
mov r4,r0
|
||||
|
||||
|
@ -22,7 +30,8 @@ bne @@next
|
|||
// 60 FF should be treated as a renderable code
|
||||
push {r0-r3}
|
||||
mov r0,r2
|
||||
bl handle_first_window
|
||||
mov r1,r5
|
||||
bl handle_first_window_buffer
|
||||
pop {r0-r3}
|
||||
|
||||
mov r3,3
|
||||
|
@ -60,8 +69,9 @@ bne @@next2
|
|||
|
||||
// 5F FF should be treated as a renderable code
|
||||
push {r0-r3}
|
||||
mov r1,r5
|
||||
mov r0,r2
|
||||
bl handle_first_window
|
||||
bl handle_first_window_buffer
|
||||
pop {r0-r3}
|
||||
|
||||
mov r3,3
|
||||
|
@ -101,12 +111,13 @@ b @@end
|
|||
//--------------------------------
|
||||
// 5D FF: Print give text
|
||||
cmp r4,0x5D
|
||||
bne @@end
|
||||
bne @@next4
|
||||
|
||||
// 5D FF should be treated as a renderable code
|
||||
push {r0-r3}
|
||||
mov r1,r5
|
||||
mov r0,r2
|
||||
bl handle_first_window
|
||||
bl handle_first_window_buffer
|
||||
pop {r0-r3}
|
||||
|
||||
ldr r3,=#0x30009FB
|
||||
|
@ -145,6 +156,40 @@ bl give_print
|
|||
pop {r0}
|
||||
mov r3,#0
|
||||
sub r3,r3,#1 //r3 is now -1
|
||||
b @@end
|
||||
|
||||
@@next4:
|
||||
|
||||
//--------------------------------
|
||||
// 5C FF: Load buffer
|
||||
cmp r4,#0x5C
|
||||
bne @@next5
|
||||
bl load_pixels_overworld
|
||||
b @@end
|
||||
|
||||
@@next5:
|
||||
|
||||
//--------------------------------
|
||||
// 5B FF: Print main window (if enabled) without restore of window buffer
|
||||
cmp r4,#0x5B
|
||||
bne @@next6
|
||||
bl generic_reprinting_first_menu_talk_to_highlight
|
||||
mov r3,#2
|
||||
b @@end
|
||||
|
||||
@@next6:
|
||||
//--------------------------------
|
||||
// 5A FF: Restore the dialogue window
|
||||
cmp r4,#0x5A
|
||||
bne @@end
|
||||
ldr r0,=#0x3005230
|
||||
ldr r0,[r0,#8]
|
||||
mov r1,#0
|
||||
strh r1,[r0,#0x2A]
|
||||
strh r1,[r0,#0x2C]
|
||||
strb r1,[r0,#3]
|
||||
bl m2_drawwindow
|
||||
mov r3,#2
|
||||
|
||||
//--------------------------------
|
||||
@@end:
|
||||
|
|
398
src/m2-hack.asm
398
src/m2-hack.asm
|
@ -18,6 +18,9 @@
|
|||
.org 0x8B13424 :: .incbin "data/m2-mainfont3-empty.bin"
|
||||
.org 0x8B088A4 :: .incbin "data/m2-shifted-cursor.bin"
|
||||
.org 0x8B03384 :: .incbin "data/m2-header-bg.bin"
|
||||
.org 0x8B03964 :: .incbin "data/m2-header-bg-sigle-tile.bin"
|
||||
.org 0x8B03D64 :: .incbin "data/m2-header-bg-sigle-tile.bin"
|
||||
.org 0x8B03DE4 :: .incbin "data/m2-status-symbols.bin"
|
||||
|
||||
// Greek letters
|
||||
.org 0x8B1B907 :: db 0x8B // alpha
|
||||
|
@ -49,49 +52,329 @@ mov r3,6
|
|||
.include "m2-status-initial.asm"
|
||||
.include "m2-status-switch.asm"
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Main window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80B7D9A :: bl b7d9a_main_window_manage_input
|
||||
.org 0x80B7DD2 :: bl printCashWindow
|
||||
//.org 0x80B8A36 :: bl initWindow_buffer //Money window
|
||||
//.org 0x80B8A3C :: bl print_window_with_buffer
|
||||
.org 0x80B8890 :: bl print_window_with_buffer :: bl b8894_printCashWindowAndStore //Main window + Cash Window out of Status menu
|
||||
.org 0x80B8664 :: bl print_window_with_buffer :: bl b8894_printCashWindowAndStore //Main window + Cash Window out of PSI menu
|
||||
.org 0x80B8740 :: bl print_window_with_buffer :: bl b8894_printCashWindowAndStore //Main window + Cash Window out of Equip menu
|
||||
.org 0x80B859C :: bl print_window_with_buffer :: bl b8894_printCashWindowAndStore //Main window + Cash Window out of Goods menu
|
||||
.org 0x80B831A :: bl initWindow_buffer
|
||||
.org 0x80B8320 :: bl b8320_statusWindowTextStore
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Overworld main window/PSI class window input management hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80BEAA6 :: bl beaa6_fix_sounds
|
||||
.org 0x80BEA88 :: bl bea88_fix_sounds
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Main battle window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80DC22A :: bl dc22a_load_buffer_battle
|
||||
.org 0x80DC8C8 :: lsl r1,r0,#4 :: nop //Fixes wrong pointer
|
||||
.org 0x80DC8DE :: nop :: nop //Removes useless print
|
||||
|
||||
//---------------------------------------------------------
|
||||
// PSI battle window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80E00C8 :: bl e02c6_print_target_store
|
||||
.org 0x80E02C6 :: bl e02c6_print_target_store
|
||||
.org 0x80E0762 :: bl initWindow_buffer
|
||||
.org 0x80E0776 :: bl print_window_with_buffer
|
||||
.org 0x80E07C2 :: bl clearWindowTiles_buffer
|
||||
.org 0x80E0892 :: bl initWindow_buffer
|
||||
.org 0x80E08A6 :: bl print_window_with_buffer
|
||||
.org 0x80E0990 :: bl initWindow_buffer
|
||||
.org 0x80E0A30 :: bl initWindow_buffer
|
||||
.org 0x80E0A54 :: bl print_window_with_buffer
|
||||
.org 0x80C24A2 :: bl printstr_hlight_buffer
|
||||
.org 0x80C24B4 :: bl printstr_hlight_buffer
|
||||
.org 0x80C24CC :: bl printstr_hlight_buffer
|
||||
.org 0x80C2500 :: bl printstr_hlight_buffer
|
||||
.org 0x80C2518 :: bl printstr_hlight_buffer
|
||||
.org 0x80E08D8 :: bl e06ec_redraw_bash_psi_goods_defend
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BAC18 hacks (status window)
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80BACFC :: bl bac18_redraw_status
|
||||
.org 0x80BAC46 :: nop :: nop
|
||||
.org 0x80BAC6E :: bl bac6e_statusWindowNumbersInputManagement
|
||||
.org 0x80BAD7E :: bl printstr_buffer
|
||||
.org 0x80BAD88 :: bl initWindow_buffer
|
||||
.org 0x80BAD92 :: bl initWindow_buffer
|
||||
.org 0x80BACFC :: bl bac18_redraw_status_store
|
||||
.org 0x80BADE6 :: bl bac18_redraw_status
|
||||
.org 0x80BACEA :: bl bacea_status_psi_window
|
||||
.org 0x80BACBA :: bl print_window_with_buffer
|
||||
.org 0x80BACC4 :: bl initWindow_buffer
|
||||
.org 0x80BAD1A :: bl clearWindowTiles_buffer
|
||||
.org 0x80BADF6 :: bl initWindow_buffer
|
||||
.org 0x80BACEE :: bl bac18_clear_psi
|
||||
.org 0x80BADB0 :: bl badb0_status_inner_window
|
||||
.org 0x80BADCC :: b 0x80BADD8
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Normal PSI window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80B8C34 :: bl initWindow_buffer
|
||||
.org 0x80B8C42 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80B8C7E :: bl initWindow_buffer
|
||||
.org 0x80B8C8C :: nop :: nop
|
||||
.org 0x80B8CA8 :: bl initWindow_buffer
|
||||
.org 0x80B8CAE :: bl print_window_with_buffer
|
||||
.org 0x80B8CEA :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80B8D0C :: bl initWindow_buffer
|
||||
.org 0x80B8D16 :: bl initWindow_buffer
|
||||
.org 0x80B8D22 :: bl psiWindow_buffer
|
||||
.org 0x80B8E44 :: bl initWindow_buffer
|
||||
.org 0x80B8E62 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80B9222 :: bl initWindow_buffer
|
||||
.org 0x80B922E :: bl psiTargetWindow_buffer
|
||||
.org 0x80B916E :: bl initWindow_buffer
|
||||
.org 0x80B9174 :: bl print_window_with_buffer
|
||||
.org 0x80B9238 :: bl initWindow_buffer
|
||||
.org 0x80B9256 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80BA9FA :: bl initWindow_buffer
|
||||
.org 0x80BAA00 :: bl print_window_with_buffer
|
||||
.org 0x80BAB64 :: bl initWindow_buffer
|
||||
.org 0x80BABA6 :: bl printstr_hlight_buffer
|
||||
.org 0x80BA8AC :: bl ba8ac_load_targets_print
|
||||
.org 0x80B9100 :: bl initWindow_buffer
|
||||
.org 0x80B910C :: bl initWindow_buffer
|
||||
.org 0x80B9118 :: bl psiTargetWindow_buffer
|
||||
.org 0x80B9122 :: bl initWindow_buffer
|
||||
.org 0x80B9142 :: bl baec6_psi_window_print_buffer
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Teleport window hacks
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9030 :: bl initWindow_buffer//Opening teleport window - "Where?"
|
||||
.org 0x80B9036 :: bl print_window_with_buffer
|
||||
.org 0x80B9040 :: bl b9040_special_string
|
||||
.org 0x80B90D4 :: bl initWindow_buffer //Going back from teleport to the PSI window
|
||||
.org 0x80B90DE :: bl initWindow_buffer
|
||||
.org 0x80C5D1C :: bl initWindow_buffer //Initializes the actual teleport window
|
||||
.org 0x80C5EB0 :: bl printstr_hlight_buffer
|
||||
.org 0x80C5F46 :: bl printstr_hlight_buffer
|
||||
.org 0x80C5F80 :: bl c5f80_printstr_hlight_buffer_store_buffer // Multiple pages initial case
|
||||
.org 0x80C5EB0 :: bl printstr_hlight_buffer
|
||||
.org 0x80C6134 :: bl clearWindowTiles_buffer
|
||||
.org 0x80C61C8 :: lsl r0,r5,#3 :: add r0,r0,r5 :: nop //Proper string address
|
||||
.org 0x80C6224 :: bl printstr_hlight_buffer
|
||||
.org 0x80C625E :: bl c5f80_printstr_hlight_buffer_store_buffer // Multiple pages changing pages
|
||||
.org 0x80C5F04 :: bl c5f04_store_if_done //Only one page case
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class PSI window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80BAE1C :: bl print_window_with_buffer
|
||||
.org 0x80BAEC6 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80BAED4 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80BAEE2 :: bl baec6_psi_window_print_buffer
|
||||
.org 0x80BAEF0 :: bl baec6_psi_window_print_buffer
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Equip window generic hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80BB02C :: bl innerEquipInput
|
||||
.org 0x80B8066 :: bl printstr_hlight_buffer
|
||||
.org 0x80B8074 :: mov r3,#0x12
|
||||
.org 0x80B80A2 :: mov r1,#3 :: mov r2,#0xB :: mov r3,#0xD
|
||||
.org 0x80B8092 :: bl initWindow_buffer //Initialize equipment window
|
||||
.org 0x80B8098 :: bl print_window_with_buffer
|
||||
.org 0x80B80BE :: bl initWindow_buffer
|
||||
.org 0x80B80C4 :: bl printEquipWindowNumberText
|
||||
.org 0x80B80EA :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip //Offense Number
|
||||
.org 0x80B8112 :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip //Defense Number
|
||||
.org 0x80B8138 :: bl initWindow_buffer
|
||||
.org 0x80B813E :: bl print_window_with_buffer
|
||||
.org 0x80B814A :: bl equipPrint
|
||||
.org 0x80B8152 :: bl innerEquipInput
|
||||
.org 0x80B81A2 :: bl initWindow_buffer
|
||||
.org 0x80B81A8 :: bl print_window_with_buffer
|
||||
.org 0x80B81BC :: bl equipPrint
|
||||
.org 0x80B81CC :: bl print_equip_base_numbers
|
||||
.org 0x80BAF96 :: bl initWindow_buffer //Go to inner window from outer window
|
||||
.org 0x80BAF9C :: bl baf9c_print_window_store_buffer
|
||||
.org 0x80BAFE6 :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip //Offense Number
|
||||
.org 0x80BB00C :: mov r2,#0x37
|
||||
.org 0x80BB17C :: bl equippableReadInput
|
||||
.org 0x80BB198 :: bl printEquipNumbersArrow :: bl store_pixels_overworld :: b 0x80BB1AE //Offense Number
|
||||
.org 0x80BB1A6 :: mov r2,#0x4C :: mov r3,#0x13 :: bl bb1aa_printnumberequip_store //Defense Number
|
||||
.org 0x80BB05E :: bl initWindow_buffer
|
||||
.org 0x80BB066 :: bl print_window_with_buffer
|
||||
.org 0x80BB08A :: nop :: nop //Remove highlighting
|
||||
.org 0x80BB0A8 :: bl initWindow_buffer
|
||||
.org 0x80BB24C :: bl initWindow_buffer //Go back to outer window - Also does going back to inner (not innermost) window from weapons - not touched equipment
|
||||
.org 0x80BB254 :: bl print_window_with_buffer
|
||||
.org 0x80BB2C2 :: bl initWindow_buffer
|
||||
.org 0x80BB2CA :: bl print_window_with_buffer
|
||||
.org 0x80BB2E0 :: bl initWindow_buffer
|
||||
.org 0x80BB2E8 :: bl print_window_with_buffer
|
||||
.org 0x80BB2F6 :: bl equipPrint
|
||||
.org 0x80BB300 :: bl innerEquipInput
|
||||
.org 0x80BB33C :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BB36C :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
.org 0x80BB3FC :: bl initWindow_buffer //Go back to inner (not innermost) window from weapons - removed equipment
|
||||
.org 0x80BB404 :: bl print_window_with_buffer
|
||||
.org 0x80BB41A :: bl initWindow_buffer
|
||||
.org 0x80BB422 :: bl print_window_with_buffer
|
||||
.org 0x80BB430 :: bl equipPrint
|
||||
.org 0x80BB43A :: bl innerEquipInput
|
||||
.org 0x80BB476 :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BB4A6 :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
.org 0x80BB532 :: bl initWindow_buffer //Go back to inner (not innermost) window from weapons - equipped a weapon
|
||||
.org 0x80BB53A :: bl print_window_with_buffer
|
||||
.org 0x80BB550 :: bl initWindow_buffer
|
||||
.org 0x80BB558 :: bl print_window_with_buffer
|
||||
.org 0x80BB566 :: bl equipPrint
|
||||
.org 0x80BB570 :: bl innerEquipInput
|
||||
.org 0x80BB5AC :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BB5DC :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
.org 0x80BB9E4 :: bl initWindow_buffer //Go back to inner (not innermost) window from defensive equipment - not touched equipment
|
||||
.org 0x80BB9EC :: bl print_window_with_buffer
|
||||
.org 0x80BBA02 :: bl initWindow_buffer
|
||||
.org 0x80BBA0A :: bl print_window_with_buffer
|
||||
.org 0x80BBA18 :: bl equipPrint
|
||||
.org 0x80BBA22 :: bl innerEquipInput
|
||||
.org 0x80BBA5E :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BBA8E :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
.org 0x80BBB2C :: bl initWindow_buffer //Go back to inner (not innermost) window from defensive equipment - removed equipment
|
||||
.org 0x80BBB34 :: bl print_window_with_buffer
|
||||
.org 0x80BBB4A :: bl initWindow_buffer
|
||||
.org 0x80BBB52 :: bl print_window_with_buffer
|
||||
.org 0x80BBB60 :: bl equipPrint
|
||||
.org 0x80BBB6A :: bl innerEquipInput
|
||||
.org 0x80BBBA6 :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BBBD6 :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
.org 0x80BBC8A :: bl initWindow_buffer //Go back to inner (not innermost) window from defensive equipment - equipped something
|
||||
.org 0x80BBC92 :: bl print_window_with_buffer
|
||||
.org 0x80BBCA8 :: bl initWindow_buffer
|
||||
.org 0x80BBCB0 :: bl print_window_with_buffer
|
||||
.org 0x80BBCBE :: bl equipPrint
|
||||
.org 0x80BBCC8 :: bl innerEquipInput
|
||||
.org 0x80BBD04 :: mov r2,#0x37 :: mov r3,#3 :: bl printNumberEquip
|
||||
.org 0x80BBD34 :: mov r2,#0x37 :: mov r3,#0x13 :: bl printNumberEquip
|
||||
//When first entering the innermost menu
|
||||
.org 0x80BB6E0 :: mov r2,#0x54 :: mov r3,#3 :: bl printNumberEquip //Change second offense number's position - Weapon
|
||||
.org 0x80BB710 :: mov r2,#0x54 :: mov r3,#0x13 :: bl bb1aa_printnumberequip_store //Change second defense number's position - Weapon
|
||||
.org 0x80BB820 :: mov r2,#0x54 :: mov r3,#0x13 :: bl printNumberEquip //Change second defense number's position - Body
|
||||
.org 0x80BB950 :: mov r2,#0x54 :: mov r3,#0x13 :: bl printNumberEquip //Change second defense number's position - Arms
|
||||
.org 0x80BBE8E :: mov r2,#0x54 :: mov r3,#0x13 :: bl printNumberEquip //Change second defense number's position - Other
|
||||
.org 0x80BBEBE :: mov r2,#0x54 :: mov r3,#3 :: bl bb1aa_printnumberequip_store //Change second offense number's position - Other
|
||||
//When changing selection in the innermost menu
|
||||
.org 0x80BBDF0 :: mov r2,#0x54 :: mov r3,#0x13 :: bl printNumberEquip //Change second defense number's position - Defensive Equipment
|
||||
.org 0x80BBE20 :: mov r2,#0x54 :: mov r3,#3 :: bl bb1aa_printnumberequip_store //Change second offense number's position - Defensive Equipment
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Goods window hacks
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80B7F4E :: bl c5f80_printstr_hlight_buffer_store_buffer //Prints the balance window
|
||||
.org 0x80B7F72 :: bl initWindow_cursor_buffer //Sets up the goods window
|
||||
.org 0x80B97A8 :: bl initWindow_buffer //Prints "Who?" going into the window
|
||||
.org 0x80B97AE :: bl baf9c_print_window_store_buffer_top
|
||||
.org 0x80B992A :: bl initWindow_buffer //Prints "Who?" coming from the inner window
|
||||
.org 0x80B9930 :: bl baf9c_print_window_store_buffer_top
|
||||
.org 0x80B986E :: bl initWindow_buffer
|
||||
.org 0x80B98B8 :: bl b98b8_print_window_store_buffer_needed //Prints "Which?" going into the window
|
||||
.org 0x80B99A0 :: bl highlight_string //Highlight chosen item
|
||||
.org 0x80B9A4C :: bl baf9c_print_window_store_buffer_needed //Prints "Use\nDrop\n,etc." going into the window
|
||||
.org 0x80B9ADE :: bl initWindow_buffer
|
||||
.org 0x80BA688 :: bl baf9c_print_window_store_buffer_top //Prints "Use\nDrop\n,etc." going out of the give window
|
||||
.org 0x80BA340 :: bl initWindow_buffer //Prints "Who?" going into the window
|
||||
.org 0x80BA346 :: bl print_window_with_buffer
|
||||
.org 0x80BA37A :: bl initWindow_buffer //initiates the Give window
|
||||
.org 0x80BA7FA :: bl initWindow_buffer //initiates the inventory window out of help
|
||||
.org 0x80BA810 :: bl initWindow_buffer //initiates the options window out of help
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Goods window hacks - Stored Goods
|
||||
//---------------------------------------------------------
|
||||
|
||||
//Choose inventory
|
||||
.org 0x80BCDB4 :: bl initWindow_buffer
|
||||
//First enter window - More than one page
|
||||
.org 0x80C63BC :: bl initWindow_buffer
|
||||
.org 0x80C63CC :: bl printstr_hlight_buffer //->Stored Goods(X)
|
||||
.org 0x80C6412 :: bl printstr_hlight_buffer //Left part of the inventory
|
||||
.org 0x80C643E :: bl printstr_hlight_buffer //Right part of the inventory
|
||||
//First enter window - Only one page
|
||||
.org 0x80C6492 :: bl initWindow_buffer
|
||||
.org 0x80C64DA :: bl printstr_hlight_buffer //Left part of the inventory
|
||||
.org 0x80C6518 :: bl printstr_hlight_buffer //Right part of the inventory
|
||||
.org 0x80C694A :: bl clearWindowTiles_buffer
|
||||
//When pressing arrow to switch page
|
||||
.org 0x80C69D8 :: mov r0,#0x12 //Proper address to "->Stored Goods(3)" string
|
||||
.org 0x80C69EE :: bl printstr_hlight_buffer //->Stored Goods(X)
|
||||
.org 0x80C6A6C :: bl printstr_hlight_buffer //Left part of the inventory
|
||||
.org 0x80C6AA4 :: bl printstr_hlight_buffer //Right part of the inventory
|
||||
.org 0x80C6AC0 :: bl c6ac0_store_buffer_stored_goods_switch_page
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Goods window hacks - in battle
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80E05C0 :: lsl r1,r0,#4 :: nop //Fixes wrong pointer
|
||||
.org 0x80E05D8 :: nop :: nop //Removes useless print
|
||||
.org 0x80E0C46 :: bl initWindow_cursor_buffer //initiates the goods window in battle
|
||||
.org 0x80E0CE4 :: bl e0ce4_redraw_battle_window_first_four //Reprints the background window for the target choosing items
|
||||
.org 0x80E0D1E :: bl printstr_hlight_buffer //Prints the chosen item
|
||||
.org 0x80E0EFA :: bl initWindow_buffer :: ldr r0,[r4,#0xC] :: bl print_window_with_buffer //Out of ally target window
|
||||
.org 0x80E0FAA :: bl e0faa_redraw_battle_window_first_two
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BAEF8 hacks (equip window)
|
||||
//---------------------------------------------------------
|
||||
|
||||
// Erase offense change
|
||||
.macro erase_offense
|
||||
.macro erase_offense_buffer
|
||||
mov r0,0xC
|
||||
mov r1,0xB
|
||||
mov r2,4
|
||||
bl print_blankstr
|
||||
bl bb21c_print_blankstr_buffer
|
||||
.endmacro
|
||||
|
||||
.macro erase_defense
|
||||
.macro erase_defense_buffer
|
||||
mov r0,0xC
|
||||
mov r1,0xD
|
||||
mov r2,4
|
||||
bl print_blankstr
|
||||
bl bb21c_print_blankstr_buffer
|
||||
.endmacro
|
||||
|
||||
.org 0x80BB216 :: erase_offense
|
||||
.org 0x80BB38C :: erase_offense
|
||||
.org 0x80BB4C6 :: erase_offense
|
||||
.org 0x80BB5FC :: erase_offense
|
||||
.org 0x80BBAAE :: erase_offense
|
||||
.org 0x80BBBF6 :: erase_offense
|
||||
.org 0x80BBD54 :: erase_offense
|
||||
.macro erase_defense_buffer_store
|
||||
mov r0,0xC
|
||||
mov r1,0xD
|
||||
mov r2,4
|
||||
bl bb21c_print_blankstr_buffer_store
|
||||
.endmacro
|
||||
|
||||
.org 0x80BB216 :: erase_offense_buffer
|
||||
.org 0x80BB38C :: erase_offense_buffer
|
||||
.org 0x80BB4C6 :: erase_offense_buffer
|
||||
.org 0x80BB5FC :: erase_offense_buffer
|
||||
.org 0x80BBAAE :: erase_offense_buffer
|
||||
.org 0x80BBBF6 :: erase_offense_buffer
|
||||
.org 0x80BBD54 :: erase_offense_buffer
|
||||
|
||||
// Erase defense change
|
||||
.org 0x80BB226 :: erase_defense
|
||||
.org 0x80BBABE :: erase_defense
|
||||
.org 0x80BBC06 :: erase_defense
|
||||
.org 0x80BBD64 :: erase_defense
|
||||
.org 0x80BB226 :: erase_defense_buffer
|
||||
.org 0x80BBABE :: erase_defense_buffer_store
|
||||
.org 0x80BBC06 :: erase_defense_buffer_store
|
||||
.org 0x80BBD64 :: erase_defense_buffer_store
|
||||
|
||||
// Erase offense/defense after changing equipment
|
||||
.org 0x80BB3E2 :: bl baef8_reequip_erase
|
||||
|
@ -153,14 +436,14 @@ bl print_string
|
|||
.org 0x80C23AE :: lsr r6,r3,0xD // tiles-to-pixels
|
||||
.org 0x80C23CE :: bl c239c_print_psi :: nop :: nop :: nop
|
||||
.org 0x80C23DA :: add r4,17 // pixel width of "PSI "
|
||||
.org 0x80C23F0 :: bl print_string_hlight_pixels // print rockin'
|
||||
.org 0x80C23F0 :: bl printstr_hlight_pixels_buffer // print rockin'
|
||||
.org 0x80C2402 :: mov r0,3 :: lsl r0,r0,0x10 // pixel width of space
|
||||
.org 0x80C242E :: mov r0,0x14 // new PSI name entry length
|
||||
.org 0x80C2448
|
||||
bl print_string_hlight_pixels // print PSI name
|
||||
bl printstr_hlight_pixels_buffer // print PSI name
|
||||
mov r2,r1 // record X width
|
||||
add r2,3 // add a space
|
||||
.org 0x80C2468 :: bl print_string_hlight_pixels
|
||||
.org 0x80C2468 :: bl printstr_hlight_pixels_buffer
|
||||
|
||||
//---------------------------------------------------------
|
||||
// PSI target window hacks
|
||||
|
@ -198,6 +481,9 @@ mov r0,0x50
|
|||
//Do not redraw unless it is needed
|
||||
.org 0x80B8CD2 :: bl b8cd2_psi_window
|
||||
|
||||
//Fix multiple sounds issue when going inside the psi window
|
||||
.org 0x80B8D40 :: bl b8d40_psi_going_inner_window
|
||||
|
||||
//Sets up for the target window
|
||||
.org 0x80B8DB4 :: bl b8db4_psi_inner_window
|
||||
|
||||
|
@ -206,7 +492,7 @@ mov r0,0x50
|
|||
|
||||
// Redraw main menu when entering PSI target window
|
||||
.org 0x80B8CF8 :: bl b8bbc_redraw_menu_13to2 // 1 to 2
|
||||
.org 0x80B920C :: bl b8bbc_redraw_menu_13to2 // 3 to 2
|
||||
.org 0x80B920C :: bl b8bbc_redraw_menu_13to2_store // 3 to 2
|
||||
|
||||
//---------------------------------------------------------
|
||||
// E06EC hacks (PSI window in battle)
|
||||
|
@ -371,12 +657,26 @@ add r0,7
|
|||
lsr r0,r0,3 // pixels to tiles
|
||||
pop {pc}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Change checkerboard printing to properly handle statuses
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80D68C2 :: bl dead_name
|
||||
.org 0x80D6960 :: bl sick_name
|
||||
.org 0x80D6A8A :: bl alive_name
|
||||
.org 0x80D6B5E :: bl dead_name
|
||||
.org 0x80D6BFA :: bl sick_name
|
||||
.org 0x80D6DAC :: bl d6dac_alive_name
|
||||
|
||||
.org m2_stat_symb_checker :: .incbin "data/m2-status-symbols-checkerboard.bin"
|
||||
|
||||
//---------------------------------------------------------
|
||||
// CABF8 hacks (print checkerboard string)
|
||||
//---------------------------------------------------------
|
||||
|
||||
.org 0x80CABF8 :: push {r4-r7,lr}
|
||||
.org 0x80CAC0C
|
||||
.org 0x80CAC0A
|
||||
mov r6,1
|
||||
mov r7,0
|
||||
add sp,-4
|
||||
b @@print_checkerboard_check
|
||||
|
@ -780,12 +1080,6 @@ bl ba7be_reprint_first_menu
|
|||
.org 0x80B9AA2
|
||||
bl b9aa2_reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// C6BA2 hacks (Fixes main window after exiting the Stored Goods window)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80C6BA2
|
||||
bl c6ba2_reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BCEB0 hacks (Fixes main window after exiting the pickup menu)
|
||||
//---------------------------------------------------------
|
||||
|
@ -930,7 +1224,7 @@ nop
|
|||
//---------------------------------------------------------
|
||||
.org 0x80C5DE0 :: bl c65da_clean_print //To:
|
||||
.org 0x80C5E30 :: bl c6190_clean_print //Number on first entering the menu
|
||||
.org 0x80C6190 :: bl c6190_clean_print //Number on page change
|
||||
.org 0x80C6190 :: bl c6190_buffer_number //Number on page change
|
||||
.org 0x80C5E04 :: nop :: strh r0,[r4,#0] :: add r4,#2 :: nop ::nop //Remove extra tile
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -1203,6 +1497,7 @@ nop
|
|||
//.org 0x80BD9F6 :: mov r2,#0x16 //Jeff
|
||||
//.org 0x80BDA02 :: mov r2,#0x1B //Poo
|
||||
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Movement code hacks
|
||||
//---------------------------------------------------------
|
||||
|
@ -1213,7 +1508,6 @@ nop
|
|||
// Carpainter's timing fix
|
||||
.org 0x802A75F :: db 0x30 //Add 8 extra frames before the game can start reading again.
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// File select hacks
|
||||
//==============================================================================
|
||||
|
@ -1256,6 +1550,7 @@ nop
|
|||
|
||||
//Text Speed options
|
||||
.org 0x8003BBC :: bl _4092_print_window_store //Printing + storing pixels
|
||||
.org 0x8003C44 :: mov r3,#4 //Make highlighting the same speed for all text speeds
|
||||
.org 0x8003FA2 :: bl _4092_print_window
|
||||
.org 0x8003F8C :: mov r3,#4 //Print highlight of 4 tiles maximum
|
||||
.org 0x8003E86 :: bl _3e86_special_setup //Avoid printing when not necessary
|
||||
|
@ -1331,10 +1626,20 @@ nop
|
|||
//==============================================================================
|
||||
// Overworld player name alphabet
|
||||
//==============================================================================
|
||||
|
||||
//"Register your name" in buffer
|
||||
.org 0x80C6C54 :: bl printstr_buffer
|
||||
|
||||
//BLANK name in buffer
|
||||
.org 0x80C6C7A :: bl printstr_buffer
|
||||
|
||||
//First time entering the menu's alphabet
|
||||
.org 0x80C6D72 :: bl initWindow_buffer :: ldr r0,[r5,#0x10] :: bl c6d78_print_slphabet_store
|
||||
|
||||
//Player name printing - character is added
|
||||
.org 0x80C75B4 :: bl c75b4_overworld_naming_top_printing :: b 0x80C777A
|
||||
|
||||
//Player name printing - character is deleted via add
|
||||
//Player name printing - character is deleted via b button
|
||||
.org 0x80C780E :: bl c780e_overworld_naming_top_printing :: b 0x80C789A
|
||||
|
||||
//Player name printing - character is deleted via backspace
|
||||
|
@ -1361,6 +1666,13 @@ nop
|
|||
//Choose character table based on alphabet loaded in
|
||||
.org 0x80C7578 :: bl c7578_load_letters
|
||||
|
||||
//==============================================================================
|
||||
// Move stuff around in order to make space for the code
|
||||
//==============================================================================
|
||||
|
||||
.org 0x82D92D4 :: dw moved_graphics_table :: dw moved_graphics_table + 0x1CD2C
|
||||
.org 0x82D9BBC :: dw moved_graphics_table + 0x26618 :: dw moved_graphics_table + 0x3F818
|
||||
|
||||
//==============================================================================
|
||||
// Data files
|
||||
//==============================================================================
|
||||
|
@ -1375,6 +1687,10 @@ m2_overworld_alphabet_table:
|
|||
|
||||
.org 0x8B2C000
|
||||
|
||||
//This table MUST be 4-bytes padded
|
||||
moved_graphics_table:
|
||||
.incbin "data/moved-graphics-table.bin"
|
||||
|
||||
// Box font relocation
|
||||
m2_font_relocate:
|
||||
.incbin "data/m2-font-relocate.bin"
|
||||
|
@ -1383,6 +1699,10 @@ m2_font_relocate:
|
|||
m2_coord_table:
|
||||
.incbin "data/m2-coord-table.bin"
|
||||
|
||||
// Co-ordinate table, version which has 5 bits used for how many consecutive tiles there are after each tile
|
||||
m2_coord_table_fast_progression:
|
||||
.incbin "data/m2-coord-table-fast-progression.bin"
|
||||
|
||||
// EB fonts
|
||||
m2_font_table:
|
||||
dw m2_font_main
|
||||
|
@ -1433,6 +1753,9 @@ m2_widths_tiny:
|
|||
m2_bits_to_nybbles:
|
||||
.incbin "data/m2-bits-to-nybbles.bin"
|
||||
|
||||
m2_bits_to_nybbles_fast:
|
||||
.incbin "data/m2-bits-to-nybbles-fast.bin"
|
||||
|
||||
m2_nybbles_to_bits:
|
||||
.incbin "data/m2-nybbles-to-bits.bin"
|
||||
|
||||
|
@ -1472,11 +1795,16 @@ flyover_coffee:
|
|||
m2_coord_table_file:
|
||||
.incbin "data/m2-coord-table-file-select.bin"
|
||||
|
||||
optimized_byte_4bpp_to_1bpp_table:
|
||||
.incbin "data/optimized-byte-4bpp-to-1bpp-table.bin"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// Existing subroutines/data
|
||||
//==============================================================================
|
||||
|
||||
.definelabel buffer_subtractor ,0x0000800
|
||||
.definelabel overworld_buffer ,0x200F200
|
||||
.definelabel m2_ness_data ,0x3001D54
|
||||
.definelabel m2_ness_name ,0x3001F10
|
||||
.definelabel m2_old_paula_name ,0x3001F16
|
||||
|
@ -1516,10 +1844,12 @@ m2_coord_table_file:
|
|||
.definelabel m2_setup_window ,0x80BD844
|
||||
.definelabel m2_strlookup ,0x80BE260
|
||||
.definelabel m2_initwindow ,0x80BE458
|
||||
.definelabel m2_initwindow_cursor ,0x80BE4C8
|
||||
.definelabel m2_statuswindow_numbers,0x80C0A5C
|
||||
.definelabel m2_psiwindow ,0x80C1FBC
|
||||
.definelabel m2_drawwindow ,0x80C87D0
|
||||
.definelabel m2_print_window ,0x80C8BE4
|
||||
.definelabel m2_print_alphabet ,0x80C8FFC
|
||||
.definelabel m2_printstr ,0x80C9634
|
||||
.definelabel m2_printstr_hlight ,0x80C96F0
|
||||
.definelabel m2_printnextch ,0x80C980C
|
||||
|
@ -1527,13 +1857,19 @@ m2_coord_table_file:
|
|||
.definelabel m2_formatnumber ,0x80CA65C
|
||||
.definelabel m2_clearwindowtiles ,0x80CA834
|
||||
.definelabel m2_menuwindow ,0x80C1C98
|
||||
.definelabel m2_setupwindow ,0x80BE188
|
||||
.definelabel m2_resetwindow ,0x80BE490
|
||||
.definelabel m2_sub_d3c50 ,0x80D3C50
|
||||
.definelabel m2_hpwindow_up ,0x80D3F0C
|
||||
.definelabel m2_curhpwindow_down ,0x80D41D8
|
||||
.definelabel m2_sub_d6844 ,0x80D6844
|
||||
.definelabel m2_setupbattlename ,0x80DCD00
|
||||
.definelabel m2_stat_symb_checker ,0x8B0EDA4
|
||||
.definelabel m2_div ,0x80F49D8
|
||||
.definelabel m2_remainder ,0x80F4A70
|
||||
.definelabel m2_default_names ,0x82B9330
|
||||
.definelabel m2_items ,0x8B1D62C
|
||||
.definelabel m2_default_names ,0x82B9330
|
||||
.definelabel m2_psi_print_table ,0x8B2A9C0
|
||||
|
||||
//==============================================================================
|
||||
// Code files
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -433,7 +433,7 @@ namespace ScriptTool
|
|||
|
||||
static void CompileM12()
|
||||
{
|
||||
int baseAddress = 0xB80000;
|
||||
int baseAddress = 0xC10000;
|
||||
int referenceAddress = baseAddress;
|
||||
var buffer = new List<byte>();
|
||||
|
||||
|
@ -495,7 +495,7 @@ namespace ScriptTool
|
|||
|
||||
static void CompileM12Misc()
|
||||
{
|
||||
int referenceAddress = 0xB70000;
|
||||
int referenceAddress = 0xC00000;
|
||||
|
||||
// Item names
|
||||
CompileM12MiscStringCollection("m12-itemnames", ref referenceAddress);
|
||||
|
@ -527,10 +527,11 @@ namespace ScriptTool
|
|||
|
||||
IncludeFile.WriteLine();
|
||||
IncludeFile.WriteLine("// Fix pointers to \"PSI \"");
|
||||
IncludeFile.WriteLine(".definelabel psitext, 0x{0:X8}", psiPointer | 0x8000000);
|
||||
foreach (var address in updateAddresses)
|
||||
{
|
||||
IncludeFile.WriteLine(String.Format(".org 0x{0:X} :: dw 0x{1:X8}",
|
||||
address | 0x8000000, psiPointer | 0x8000000));
|
||||
IncludeFile.WriteLine(String.Format(".org 0x{0:X} :: dw psitext",
|
||||
address | 0x8000000));
|
||||
}
|
||||
|
||||
// PSI targets
|
||||
|
@ -693,6 +694,7 @@ namespace ScriptTool
|
|||
{
|
||||
var str = hardcodedStrings[i];
|
||||
|
||||
offsetFile.WriteLine($".definelabel {name.Replace('-', '_')}_str{i},0x{referenceAddress | 0x8000000:X}");
|
||||
foreach (int ptr in str.PointerLocations)
|
||||
{
|
||||
offsetFile.WriteLine(String.Format(".org 0x{0:X} :: dw 0x{1:X8}",
|
||||
|
|
|
@ -1804,5 +1804,71 @@
|
|||
"PointerLocation": 951280,
|
||||
"OldPointer": 493444,
|
||||
"Label": "L9000"
|
||||
},
|
||||
{
|
||||
"Index": 301,
|
||||
"PointerLocation": 658200,
|
||||
"OldPointer": 534706,
|
||||
"Label": "L3774"
|
||||
},
|
||||
{
|
||||
"Index": 302,
|
||||
"PointerLocation": 658224,
|
||||
"OldPointer": 532274,
|
||||
"Label": "L3772"
|
||||
},
|
||||
{
|
||||
"Index": 303,
|
||||
"PointerLocation": 658248,
|
||||
"OldPointer": 531267,
|
||||
"Label": "L3773"
|
||||
},
|
||||
{
|
||||
"Index": 304,
|
||||
"PointerLocation": 658252,
|
||||
"OldPointer": 533006,
|
||||
"Label": "L32003"
|
||||
},
|
||||
{
|
||||
"Index": 305,
|
||||
"PointerLocation": 616180,
|
||||
"OldPointer": 279156,
|
||||
"Label": "L314"
|
||||
},
|
||||
{
|
||||
"Index": 306,
|
||||
"PointerLocation": 616184,
|
||||
"OldPointer": 441774,
|
||||
"Label": "L1031"
|
||||
},
|
||||
{
|
||||
"Index": 307,
|
||||
"PointerLocation": 616220,
|
||||
"OldPointer": 324778,
|
||||
"Label": "L610"
|
||||
},
|
||||
{
|
||||
"Index": 308,
|
||||
"PointerLocation": 616240,
|
||||
"OldPointer": 325844,
|
||||
"Label": "L615"
|
||||
},
|
||||
{
|
||||
"Index": 309,
|
||||
"PointerLocation": 616260,
|
||||
"OldPointer": 326292,
|
||||
"Label": "L616"
|
||||
},
|
||||
{
|
||||
"Index": 310,
|
||||
"PointerLocation": 197030,
|
||||
"OldPointer": 471486,
|
||||
"Label": "L32000"
|
||||
},
|
||||
{
|
||||
"Index": 311,
|
||||
"PointerLocation": 616200,
|
||||
"OldPointer": 323841,
|
||||
"Label": "L603"
|
||||
}
|
||||
]
|
|
@ -266,49 +266,49 @@
|
|||
"OffsetLocation": 11632508,
|
||||
"OldPointer": 11630256,
|
||||
"Old": " ぶき :[01 FF] ボディ:[01 FF] うで :[01 FF] そのた:[00 FF]",
|
||||
"New": "[5F FF 08]Weapon:[01 FF][5F FF 08]Body:[01 FF][5F FF 08]Arms:[01 FF][5F FF 08]Other:[00 FF]"
|
||||
"New": "[5F FF 0E]Weapon[01 FF][5F FF 1A]Body[01 FF][5F FF 17]Arms[01 FF][5F FF 17]Other[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 38,
|
||||
"OffsetLocation": 11632512,
|
||||
"OldPointer": 11630284,
|
||||
"Old": "ぶき[00 FF]",
|
||||
"New": "Weapon[00 FF]"
|
||||
"New": "[5F FF 0E]Weapon[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 39,
|
||||
"OffsetLocation": 11632516,
|
||||
"OldPointer": 11630288,
|
||||
"Old": "ボディ[00 FF]",
|
||||
"New": "Body[00 FF]"
|
||||
"New": "[5F FF 1A]Body[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 40,
|
||||
"OffsetLocation": 11632520,
|
||||
"OldPointer": 11630293,
|
||||
"Old": "うで[00 FF]",
|
||||
"New": "Arms[00 FF]"
|
||||
"New": "[5F FF 17]Arms[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 41,
|
||||
"OffsetLocation": 11632524,
|
||||
"OldPointer": 11630297,
|
||||
"Old": "そのた[00 FF]",
|
||||
"New": "Other[00 FF]"
|
||||
"New": "[5F FF 17]Other[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 42,
|
||||
"OffsetLocation": 11632528,
|
||||
"OldPointer": 11630302,
|
||||
"Old": "(なし) [00 FF]",
|
||||
"New": "(None)[00 FF]"
|
||||
"New": "(Nothing)[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 43,
|
||||
"OffsetLocation": 11632532,
|
||||
"OldPointer": 11630314,
|
||||
"Old": " オフェンス:[01 FF]ディフェンス:[00 FF]",
|
||||
"New": "[5F FF 08]Offense:[01 FF][5F FF 08]Defense:[00 FF]"
|
||||
"New": "Offense:[01 FF]Defense:[00 FF]"
|
||||
},
|
||||
{
|
||||
"Index": 44,
|
||||
|
|
|
@ -1854,7 +1854,7 @@
|
|||
^L1859^[1C FF B0 01 _L5453_]@No problem here.[1D FF][00 FF]
|
||||
^L1860^[68 FF][1C FF 04 03 _L2214_][1C FF 49 00 _L5152_][A8 FF 01][8A FF][8D FF 01 00][9A FF 01 00][81 FF _L5153_]@Hello?[02 FF]@...Is that you, [0D FF][1B FF 0A 00]?[02 FF]@Why are you disguising your[01 FF] voice like that?[02 FF]@Who are you pretending to be?[02 FF]@Oh, well. It's not a big deal.[02 FF]@I suppose you need to have a[01 FF] sense of humor at a time like[01 FF] this.[02 FF][80 FF _L5154_]
|
||||
^L1861^[68 FF][8D FF 01 00][A8 FF 00][9A FF 01 00][82 FF _L5466_][1C FF 49 00 _L5467_][83 FF B0 02][82 FF _L5468_][92 FF 01 06 02][81 FF _L5469_][92 FF 01 01 08][81 FF _L5470_][1C FF B1 02 _L5471_][F6 FF 07 00][95 FF 07 _L5472_ _L5472_ _L5473_ _L5473_ _L5474_ _L5474_ _L5475_][00 FF]^L5472^@[0D FF]?[02 FF]@.....[02 FF]@Don't say a word; I know[01 FF] exactly what you're thinking.[02 FF]@My son, who'd have thought[01 FF] he was such a brave kid?[02 FF]@Oh, yeah... you're a hero,[01 FF] honey!...[02 FF]@Click! Beep-beep-beep...[1D FF][D4 FF 0B 00][00 FF]
|
||||
^L1862^[68 FF][1C FF 02 03 _L2214_][1C FF 49 00 _L5169_][1C FF B5 00 _L5170_][1C FF 85 02 _L5170_][1C FF B6 02 _L5170_][1C FF B7 02 _L5170_][86 FF _L3541_][81 FF _L5170_][1C FF B4 02 _L5171_][1C FF B5 02 _L5172_][86 FF _L5173_]^L5258^[86 FF _L5174_][03 FF 11 00][04 FF _L5175_][05 FF _L5176_]^L5182^[86 FF _L5177_][86 FF _L5178_][00 FF]^L5175^[F4 FF 01 00 01 00][DD FF 02 00 00 00 00 00 00 00][81 FF _L5179_][86 FF _L5180_][08 FF 85 02][CF FF 03 00][86 FF _L5178_][08 FF F2 02][00 FF]
|
||||
^L1862^[68 FF][1C FF 02 03 _L2214_][1C FF 49 00 _L5169_][1C FF B5 00 _L5170_][1C FF 85 02 _L5170_][1C FF B6 02 _L5170_][1C FF B7 02 _L5170_][86 FF _L3541_][81 FF _L5170_][1C FF B4 02 _L5171_][1C FF B5 02 _L5172_][86 FF _L5173_]^L5258^[86 FF _L5174_][03 FF 11 00][04 FF _L5175_][05 FF _L5176_]^L5182^[86 FF _L5177_][86 FF _L5178_][00 FF]^L5175^[F4 FF 01 00 01 00][DD FF 02 00 00 00 00 00 00 00][81 FF _L5179_][86 FF _L5180_][08 FF 85 02][CF FF 03 00][86 FF _L5178_][08 FF F2 02][00 FF]^L5866^[5B FF][5A FF][86 FF _L5177_][86 FF _L5178_][00 FF]
|
||||
^L1863^[68 FF]@Hello! This is Mach Pizza![01 FF][1C FF 49 00 _L5261_][86 FF _L3541_][81 FF _L5262_][1C FF B4 00 _L5262_]^L5267^ What would you like to order?[22 FF][01 FF][E7 FF 00 00][8A FF][8B FF][95 FF 03 _L5263_ _L5264_ _L5265_]^L5269^@Call again![02 FF][80 FF _L5266_]
|
||||
^L1864^[68 FF][1C FF 49 00 _L5465_][8D FF 01 00][87 FF]@Hello,[1B FF 0F 00] this is the Stoic Club.[02 FF]@Oh,[1B FF 0F 00] [90 FF 00][1A FF 01 00], [87 FF][86 FF _sirmaam_]![1B FF 14 00][01 FF] Would you like to make a[01 FF] reservation?[02 FF]@Certainly.[02 FF]@We are looking forward to[01 FF] having you here.[1B FF 0F 00] Thank you.[02 FF]@Click! Beep-beep-beep... [1D FF][D4 FF 0B 00][08 FF 51 01][00 FF]
|
||||
^L1865^[00 FF]
|
||||
|
@ -2156,7 +2156,7 @@
|
|||
^L2137^[09 FF 88 02][08 FF E5 00][86 FF _L4899_][09 FF E5 00][86 FF _L4024_][00 FF]
|
||||
^L2138^[86 FF _L4937_][09 FF BE 01][09 FF 86 02][09 FF 87 02][09 FF 88 02]@Hello![01 FF] (gasp... pant...)[02 FF]@I saw your sign[01 FF] (gasp... pant...),[02 FF]@and thought I should stop by[01 FF] and buy something.[02 FF]@I tried and tried to find it[01 FF] (gasp... pant...)[01 FF] but no such luck.[02 FF]@I think you should give this up[01 FF] and go home.[02 FF]@If you took your business more[01 FF] seriously,[02 FF]@you would be more considerate[01 FF] of your customers![02 FF][86 FF _L4938_][09 FF F2 02][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_]^L32003^[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]
|
||||
^L2142^[5D FF][00 FF]
|
||||
^L2143^[00 FF]
|
||||
|
@ -2227,7 +2227,7 @@
|
|||
^L2231^@Oh, it's my line now? Ooops!^L3409^[86 FF _L2485_][04 FF _L2240_][05 FF _L5243_]^L5243^@What the hey?[01 FF] Well, see you![1D FF][00 FF]
|
||||
^L2232^[D4 FF 05 00][01 FF]@You have too much stuff.[1D FF][00 FF]
|
||||
^L2233^[D4 FF 74 00][1B FF 3C 00][86 FF _L5525_][00 FF]
|
||||
^L2236^[86 FF _L4952_][82 FF _L5246_][F4 FF 01 00 01 00][DD FF 02 00 00 00 00 00 00 00][81 FF _L5247_]@What do you want to store?[02 FF][69 FF][86 FF _L2489_][82 FF _L5248_][88 FF][F4 FF 00 00 00 00][81 FF _L5249_][89 FF][AB FF 00 00][D4 FF 76 00]@The [90 FF 00][1A FF 02 00]?[01 FF] Don't worry, I'll keep it safe.[1B FF 0F 00][02 FF][89 FF][F3 FF 00 00 00 00]^L5250^@Do you have anything else that[01 FF] you want me to store?[03 FF 00 00][04 FF _L2236_][05 FF _L5248_][80 FF _L5248_]^L5247^@I'm sorry.[01 FF] My locker is full.[02 FF][80 FF _L5248_]
|
||||
^L2236^[86 FF _L4952_][82 FF _L5246_][F4 FF 01 00 01 00][DD FF 02 00 00 00 00 00 00 00][81 FF _L5247_]@What do you want to store?[02 FF][69 FF][86 FF _L2489_][82 FF _L5865_][88 FF][F4 FF 00 00 00 00][81 FF _L5249_][89 FF][AB FF 00 00][D4 FF 76 00][5A FF]@The [90 FF 00][1A FF 02 00]?[01 FF] Don't worry, I'll keep it safe.[1B FF 0F 00][02 FF][89 FF][F3 FF 00 00 00 00]^L5250^@Do you have anything else that[01 FF] you want me to store?[03 FF 00 00][04 FF _L2236_][05 FF _L5248_][80 FF _L5248_]^L5247^@I'm sorry.[01 FF] My locker is full.[02 FF][80 FF _L5248_]
|
||||
^L2237^@Ooops![1B FF 14 00] You seem to be[01 FF] carrying too much stuff[01 FF] already![1D FF][00 FF]
|
||||
^L2238^[D4 FF 74 00][1B FF 3C 00][8A FF][C6 FF][D4 FF 66 00][1B FF 64 00][8B FF][86 FF _L5525_][00 FF]
|
||||
^L2240^@What do you want me to do?^L5255^[03 FF 12 00][04 FF _L2236_][05 FF _L5244_][1C FF 49 00 _L5245_]@Well, take care and I'll talk to[01 FF] you later![1D FF][00 FF]^L5245^@Well, take care and talk to you[01 FF] later![02 FF]@Oh, I said <take care>![02 FF]@It just slipped out of my mouth,[02 FF]@just like I was talking to you[01 FF] when you were gone...[1D FF][00 FF]
|
||||
|
@ -4540,14 +4540,14 @@
|
|||
^L5037^[BC FF F5 00][A8 FF 01][87 FF][00 FF]
|
||||
^L5038^[9A FF 00 00]
|
||||
^L5039^[00 FF]
|
||||
^L5041^[8D FF 01 00][A8 FF 00][8A FF][8B FF][8B FF][B6 FF 02 00][8A FF][8B FF][82 FF _L5043_][87 FF][00 FF]
|
||||
^L5041^[8D FF 01 00][A8 FF 00][8A FF][8B FF][8B FF][5C FF][B6 FF 02 00][5B FF][5A FF][8A FF][8B FF][82 FF _L5043_][87 FF][00 FF]
|
||||
[A8 FF 00][82 FF _L5042_][82 FF _L2489_][82 FF _L2489_]^L5042^[87 FF][00 FF]
|
||||
^L5043^[00 FF]
|
||||
^L5044^[8D FF 01 00][A8 FF 00][8A FF][8B FF][8B FF][B6 FF 02 00][8A FF][8B FF][82 FF _L5046_][87 FF][00 FF]
|
||||
[A8 FF 00][82 FF _L5045_][82 FF _L3640_][82 FF _L3640_]^L5045^[C7 FF][87 FF][00 FF]
|
||||
^L5046^[00 FF]
|
||||
^L5047^[8B FF][00 FF]
|
||||
^L5048^[87 FF][62 FF][87 FF][8A FF][82 FF _L5047_][87 FF][91 FF 00][81 FF _L5047_][8B FF][87 FF][89 FF][80 FF _L5048_]
|
||||
^L5047^[8B FF][00 FF]^L5864^[8B FF][5B FF][5A FF][00 FF]
|
||||
^L5048^[87 FF][62 FF][87 FF][8A FF][82 FF _L5047_][87 FF][91 FF 00][81 FF _L5864_][8B FF][87 FF][89 FF][80 FF _L5048_]
|
||||
^L5049^[A8 FF 01][88 FF]@I can examine one of you for[01 FF] $[B8 FF 00][1A FF 04 00].[9C FF][69 FF][03 FF 15 00][86 FF _L4957_][95 FF 02 _L5354_ _L5355_]^L5355^@You really don't need any[01 FF] treatment?[01 FF] All right.^L5367^[86 FF _L5356_][1D FF][00 FF]^L5354^[99 FF 00 00 00 00][81 FF _L5357_][96 FF 02][81 FF _L5358_]@Who is sick?[69 FF][EC FF][01 FF][82 FF _L5355_]^L5366^[88 FF][ED FF 00 00 01 00][95 FF 08 _L5359_ _L5360_ _L5361_ _L5361_ _L5362_ _L5363_ _L5364_ _L5365_]^L5358^[8D FF 01 00][80 FF _L5366_]
|
||||
^L5051^[A8 FF 01][86 FF _L5371_][82 FF _L5372_]@Who do you want to see?[69 FF][EC FF][01 FF][82 FF _L5373_][88 FF][92 FF 00 01 02][82 FF _L5374_][89 FF][87 FF]@[90 FF 00][1A FF 01 00] was just brought[01 FF] in, and is still unconscious.[02 FF][87 FF]@Please pay $[B8 FF 00][1A FF 04 00] for[01 FF] the doctor's fee.[03 FF 00 00][86 FF _L4957_][95 FF 02 _L5375_ _L5376_]^L5376^@Your friend, right?... It's very[01 FF] serious.[1D FF][00 FF]^L5375^[99 FF 00 00 00 00][81 FF _L5377_][9B FF 00 00 00 00][9C FF][89 FF][EE FF 00 00 01 00 01 00][89 FF][EE FF 00 00 02 00 01 00][89 FF][EE FF 00 00 06 00 01 00][89 FF][87 FF][F7 FF 00 00 64 00][F8 FF 00 00 64 00][D4 FF 25 00][1B FF 32 00]@I'm so glad that you recovered,[01 FF] [90 FF 00][1A FF 01 00].[02 FF]@Come back any time you need.[1D FF][00 FF]
|
||||
^L5053^[BF FF][BC FF 01 00]^L5447^[A8 FF 01][96 FF 00][81 FF _L5445_][8D FF 00 00][82 FF _L5446_][92 FF 00 02 02][81 FF _L5446_][C0 FF][80 FF _L5447_]
|
||||
|
@ -4629,7 +4629,7 @@
|
|||
^L5172^@This is about the delivery of the[01 FF] <[90 FF A9][1A FF 02 00]>?[03 FF 00 00][04 FF _L5259_][05 FF _L5260_]^L5260^@Oh, that's not what you want?[02 FF][80 FF _L5258_]^L5259^@We'll send someone right away.[02 FF][86 FF _L5178_][08 FF B7 02][CF FF 0A 00][08 FF F2 02][00 FF]
|
||||
^L5173^@Hello! This is Escargo Express.[02 FF][BC FF 01 00][86 FF _L2177_][81 FF _L5196_]@Oh, is that you, [0D FF]?[01 FF] Big Bro![02 FF]@It's me, Tracy.[02 FF]@I'm working part-time for[01 FF] Escargo Express.[02 FF]^L5196^[00 FF]
|
||||
^L5174^[1C FF 49 00 _L5197_]@What can I do for you?[00 FF]
|
||||
^L5176^[BC FF 01 00][F5 FF][82 FF _L5183_][86 FF _L5184_]^L5194^[F1 FF][82 FF _L5182_][87 FF][88 FF][7A FF 00 00][87 FF]@[90 FF 00][1A FF 02 00]?[01 FF] Do you need anything else?[89 FF][79 FF FF 00 00 00][86 FF _L2485_][04 FF _L5185_][05 FF _L5186_][80 FF _L5186_]
|
||||
^L5176^[BC FF 01 00][F5 FF][82 FF _L5183_][86 FF _L5184_]^L5194^[F1 FF][82 FF _L5866_][87 FF][88 FF][7A FF 00 00][87 FF][5B FF][5A FF]@[90 FF 00][1A FF 02 00]?[01 FF] Do you need anything else?[89 FF][79 FF FF 00 00 00][86 FF _L2485_][04 FF _L5185_][05 FF _L5186_][80 FF _L5186_]
|
||||
^L5177^[1C FF 49 00 _L5198_][BC FF 01 00][86 FF _L2177_][81 FF _L5199_]@Come again.[02 FF][00 FF]
|
||||
^L5178^[D4 FF 0B 00]@(Click!)[1D FF][00 FF]
|
||||
^L5179^[86 FF _L5181_][80 FF _L5182_]
|
||||
|
@ -4637,8 +4637,8 @@
|
|||
^L5181^[1C FF 49 00 _L5201_]@I'm very sorry.[01 FF] Our storage lockers are all full[01 FF] right now.[02 FF][00 FF]
|
||||
^L5183^[86 FF _L5193_][80 FF _L5182_]
|
||||
^L5184^[1C FF 49 00 _L5202_]@You would like us to deliver[01 FF] something? We can deliver up[01 FF] to three things.[02 FF]@Please select the goods you[01 FF] want.[02 FF][00 FF]
|
||||
^L5185^[BC FF 01 00][F5 FF][82 FF _L5187_]@Select an item.[02 FF][F1 FF][82 FF _L5186_][87 FF][88 FF][7A FF 00 00][87 FF]@[90 FF 00][1A FF 02 00]?[01 FF] Do you need anything else?[86 FF _L2485_][04 FF _L5188_][05 FF _L5186_][80 FF _L5186_]
|
||||
^L5188^[BC FF 01 00][F5 FF][82 FF _L5187_]@Select an item.[02 FF][F1 FF][82 FF _L5186_][87 FF][88 FF][7A FF 00 00][87 FF]@[90 FF 00][1A FF 02 00]?[02 FF][89 FF][79 FF FF 00 00 00]^L5186^@Just to confirm, you're[01 FF] expecting delivery of the[02 FF][78 FF 01 00 00 00]@[90 FF 00][1A FF 02 00][78 FF 02 00 00 00][82 FF _L5189_][01 FF] [90 FF 00][1A FF 02 00][78 FF 03 00 00 00][82 FF _L5189_][01 FF] and [90 FF 00][1A FF 02 00].^L5189^[02 FF]@Is that correct?[86 FF _L2485_][04 FF _L5190_][05 FF _L5191_][80 FF _L5191_]
|
||||
^L5185^[BC FF 01 00][F5 FF][82 FF _L5187_]@Select an item.[02 FF][F1 FF][82 FF _L5867_][87 FF][88 FF][7A FF 00 00][87 FF][5B FF][5A FF]@[90 FF 00][1A FF 02 00]?[01 FF][89 FF][79 FF FF 00 00 00] Do you need anything else?[86 FF _L2485_][04 FF _L5188_][05 FF _L5186_][80 FF _L5186_]
|
||||
^L5188^[BC FF 01 00][F5 FF][82 FF _L5187_]@Select an item.[02 FF][F1 FF][82 FF _L5867_][87 FF][88 FF][7A FF 00 00][87 FF][5B FF][5A FF]@[90 FF 00][1A FF 02 00]?[02 FF][89 FF][79 FF FF 00 00 00]^L5186^@Just to confirm, you're[01 FF] expecting delivery of the[02 FF][78 FF 01 00 00 00]@[90 FF 00][1A FF 02 00][78 FF 02 00 00 00][82 FF _L5189_][01 FF] [90 FF 00][1A FF 02 00][78 FF 03 00 00 00][82 FF _L5189_][01 FF] and [90 FF 00][1A FF 02 00].^L5189^[02 FF]@Is that correct?[86 FF _L2485_][04 FF _L5190_][05 FF _L5191_][80 FF _L5191_]^L5867^[5B FF][5A FF][80 FF _L5186_]
|
||||
^L5187^[8D FF 01 00][87 FF]@We're not storing any of[01 FF] [90 FF 00][1A FF 01 00]'s stuff right now.[02 FF][80 FF _L5186_]
|
||||
^L5190^[86 FF _L5192_][08 FF B5 00][CF FF 02 00][86 FF _L5178_][08 FF F2 02][00 FF]
|
||||
^L5191^[86 FF _L4002_]@Well, please start over again.[02 FF][80 FF _L5194_]
|
||||
|
@ -4676,10 +4676,10 @@
|
|||
^L5238^@I don't think you can carry[01 FF] everything.[02 FF][78 FF 01 00 01 00]@Well, I'll leave just[01 FF] the [90 FF 00][1A FF 02 00].[02 FF][86 FF _L5240_][78 FF 02 00 01 00][77 FF 00 00][78 FF 03 00 01 00][82 FF _L5241_][77 FF 00 00]^L5241^[00 FF]
|
||||
^L5239^@I don't think you can carry[01 FF] everything.[02 FF][78 FF 01 00 01 00]@Well, I'll leave just[01 FF] the [90 FF 00][1A FF 02 00][01 FF] and[78 FF 02 00 01 00] the [90 FF 00][1A FF 02 00].[02 FF][86 FF _L5240_][78 FF 03 00 01 00][77 FF 00 00][00 FF]
|
||||
^L5240^[83 FF 49 00][BD FF 01 _L5223_][9C FF][D4 FF 76 00]@OK, here we are.[01 FF] Thank you![1D FF][C6 FF][86 FF _L4023_][86 FF _L4910_][00 FF]
|
||||
^L5244^[BC FF 01 00][F5 FF][82 FF _L5251_][91 FF FF][82 FF _L5252_]@What would you like[01 FF] returned?[02 FF][69 FF]^L5254^[F1 FF][82 FF _L5248_][87 FF][88 FF][86 FF _L5048_][82 FF _L5253_][8A FF][8B FF][D4 FF 74 00][F2 FF 00 00 00 00][AB FF 00 00]@The [90 FF 00][1A FF 02 00]?[01 FF] Take good care of it.[02 FF]@Is there anything else you want[01 FF] returned?[03 FF 00 00][04 FF _L5244_][05 FF _L5248_][80 FF _L5248_]^L5253^[87 FF][69 FF][80 FF _L5254_]
|
||||
^L5244^[BC FF 01 00][F5 FF][82 FF _L5251_][91 FF FF][82 FF _L5252_]@What would you like[01 FF] returned?[02 FF][69 FF]^L5254^[F1 FF][82 FF _L5865_][87 FF][88 FF][86 FF _L5048_][82 FF _L5253_][8A FF][8B FF][D4 FF 74 00][F2 FF 00 00 00 00][AB FF 00 00]@The [90 FF 00][1A FF 02 00]?[01 FF] Take good care of it.[02 FF]@Is there anything else you want[01 FF] returned?[03 FF 00 00][04 FF _L5244_][05 FF _L5248_][80 FF _L5248_]^L5253^[87 FF][69 FF][80 FF _L5254_]
|
||||
^L5246^@I don't think you have anything[01 FF] to store.[02 FF][80 FF _L5248_]
|
||||
^L5248^@Do you need anything else from[01 FF] me?[80 FF _L5255_]
|
||||
^L5249^@I think you should hang on to[01 FF] that.[02 FF][80 FF _L5250_]
|
||||
^L5865^[5B FF][5A FF]^L5248^@Do you need anything else from[01 FF] me?[80 FF _L5255_]
|
||||
^L5249^[5A FF]@I think you should hang on to[01 FF] that.[02 FF][80 FF _L5250_]
|
||||
^L5251^@I'm not storing any of your[01 FF] stuff.[02 FF][80 FF _L5248_]
|
||||
^L5252^@I think you are already carrying[01 FF] too many things.[02 FF][80 FF _L5248_]
|
||||
^L5261^[22 FF]@Our delivery men got tired and[01 FF] quit.[02 FF]@So, we decided to close the[01 FF] shop.[02 FF]@Thank you for consistently[01 FF] using us for all of your pizza[01 FF] needs.[1B FF 14 00][01 FF][D4 FF 0B 00] (Click!)[1D FF][00 FF]
|
||||
|
@ -4956,7 +4956,7 @@
|
|||
^L5603^[B2 FF 02 00 CC 00][1B FF 0F 00][C3 FF 01 01 02 00][D8 FF 01 00 00 00][C3 FF 03 01 02 00][D8 FF 03 00 00 00][1B FF 2D 00][6B FF 03 00][B5 FF 02 00][FC FF 27 00][1B FF 01 00][A0 FF D0 07 8E 00 01 00][9E FF][AA FF D0 07][CB FF 01 00 06 00][CB FF 03 00 06 00][1B FF B4 00]@.....[1D FF][C6 FF][1B FF 3C 00][CC FF 01 00 01 00][CC FF 03 00 01 00][1B FF B4 00][A9 FF D0 07][9E FF][FC FF 28 00][1B FF 01 00]@Oooh... I was a little dizzy,[1B FF 0F 00] but[01 FF] now I'm okay.[02 FF]@...to get to Summers... we[01 FF] need to go back to Threed.[02 FF]@Yep, somehow I know that's[01 FF] where we must go...[1D FF][C6 FF][09 FF 2F 00][08 FF 30 00][08 FF 05 03][08 FF 8F 00][86 FF _L3558_][08 FF 18 02][00 FF]
|
||||
^L5604^[09 FF 02 00][A6 FF 36 00 C4 01][A6 FF 37 00 C5 01][A6 FF 39 00 C6 01][A6 FF 38 00 C7 01][A6 FF 3A 00 C8 01]@Wow![1B FF 14 00] You guys did a lot while I[01 FF] was in the bathroom! Ha ha ha[01 FF] ha...[02 FF]@You want to get to Threed as[01 FF] soon as possible?[02 FF]@We can take you to Threed in[01 FF] our tour bus.[02 FF]@I'll get the bus and wait for you[01 FF] just outside the building...[02 FF][C6 FF][08 FF 3D 01][09 FF 3E 01][08 FF 02 00][9E FF][9D FF 01 33 _L4162_][00 FF]
|
||||
^L5605^[09 FF 18 02][9D FF 01 04 _L5606_][08 FF 0B 00][00 FF]
|
||||
^L5606^[86 FF _L3558_]^L9001^[FC FF 05 00][B0 FF C0 03 CB 00][1B FF 3C 00][B3 FF C0 03][A1 FF C0 03 C9 01][9E FF][A4 FF C0 03][C3 FF 01 02 C0 03][D8 FF 01 00 00 00][C3 FF 02 02 C0 03][D8 FF 02 00 00 00][C3 FF 03 02 C0 03][D8 FF 03 00 00 00]@Heh heh heh...[01 FF] There's no need to wait...[02 FF][C6 FF][A0 FF D0 07 CB 01 01 00][C9 FF D0 07][EB FF FF 00][A3 FF C0 03][9E FF][1B FF 3C 00][A5 FF D0 07 06 00][CA FF][A0 FF D3 07 04 03 01 00][A0 FF D0 07 CD 01 01 00][C9 FF D0 07][EB FF FF 00][9E FF][CB FF FF 00 06 00][09 FF 18 02][08 FF 17 02][C5 FF][EA FF FF 00][09 FF 3D 01][A1 FF C0 03 CE 01][9E FF]@All right... on to Threed![02 FF][C6 FF][A1 FF E2 03 CF 01][1B FF 3C 00][E6 FF E2 03][EB FF FF 00][6E FF 01 00][00 FF]
|
||||
^L5606^[86 FF _L3558_]^L9001^[FC FF 05 00][B0 FF C0 03 CB 00][1B FF 3C 00][B3 FF C0 03][A1 FF C0 03 C9 01][9E FF][A4 FF C0 03][C3 FF 01 02 C0 03][D8 FF 01 00 00 00][C3 FF 02 02 C0 03][D8 FF 02 00 00 00][C3 FF 03 02 C0 03][D8 FF 03 00 00 00]@Heh heh heh...[01 FF] There's no need to wait...[02 FF][C6 FF][A0 FF D0 07 CB 01 01 00][C9 FF D0 07][EB FF FF 00][A3 FF C0 03][9E FF][1B FF 3C 00][A5 FF D0 07 06 00][CA FF]^L32000^[A0 FF D3 07 04 03 01 00][A0 FF D0 07 CD 01 01 00][C9 FF D0 07][EB FF FF 00][9E FF][CB FF FF 00 06 00][09 FF 18 02][08 FF 17 02][C5 FF][EA FF FF 00][09 FF 3D 01][A1 FF C0 03 CE 01][9E FF]@All right... on to Threed![02 FF][C6 FF][A1 FF E2 03 CF 01][1B FF 3C 00][E6 FF E2 03][EB FF FF 00][6E FF 01 00][00 FF]
|
||||
^L5607^[9D FF 01 28 _L4238_][00 FF]
|
||||
^L5608^[A2 FF _L5609_][00 FF]
|
||||
^L5609^[EA FF FF 00][FC FF 05 00][8D FF 01 00][A4 FF EC 01][A4 FF ED 01][A4 FF EE 01][A4 FF EF 01][A4 FF F0 01][1B FF 1E 00][A3 FF EC 01][A3 FF ED 01][A3 FF EE 01][A3 FF EF 01][A3 FF F0 01][1B FF 0A 00][A4 FF EC 01][A4 FF ED 01][A4 FF EE 01][A4 FF EF 01][A4 FF F0 01][B2 FF 00 00 CC 00][1B FF 3C 00][B5 FF 00 00][A3 FF ED 01][A3 FF EE 01][A3 FF EF 01][A3 FF F0 01][6B FF 02 00][1B FF 0A 00][C4 FF 00 C1][A0 FF D0 07 8B 00 01 00][9E FF][1B FF 78 00]@(Oh,[1B FF 05 00] oh...[1B FF 14 00] you're losing[01 FF] consciousness...[02 FF]@What could be the fate of[01 FF] [0D FF] and his friend?)[1D FF][C6 FF][1B FF 01 00][86 FF _L2866_][86 FF _L2200_][08 FF 0B 00][CB FF FF 00 06 00][14 FF 10 00][A0 FF 25 01 8C 00 FF 00][A0 FF 26 01 8D 00 FF 00][EA FF FF 00][1B FF F0 00][A5 FF 25 01 06 00][CC FF 01 00 01 00][D8 FF 01 00 05 00][1B FF 1E 00][C3 FF 01 03 26 01][D8 FF 01 00 00 00][1B FF 14 00][A5 FF 26 01 06 00][A0 FF 01 00 0C 00 01 00][DA FF 01 00 07 00][1B FF 3C 00][A6 FF 01 00 15 00][9E FF][A5 FF 01 00 06 00][CC FF FF 00 01 00][EB FF FF 00][D8 FF 01 00 05 00][00 FF]
|
||||
|
|
|
@ -3601,7 +3601,7 @@
|
|||
^L5603^[B2 FF 02 00 CC 00][1B FF 0F 00][C3 FF 01 01 02 00][D8 FF 01 00 00 00][C3 FF 03 01 02 00][D8 FF 03 00 00 00][1B FF 2D 00][6B FF 03 00][B5 FF 02 00][FC FF 27 00][1B FF 01 00][A0 FF D0 07 8E 00 01 00][9E FF][AA FF D0 07][CB FF 01 00 06 00][CB FF 03 00 06 00][1B FF B4 00]◆¨¨¨。[1D FF][C6 FF][1B FF 3C 00][CC FF 01 00 01 00][CC FF 03 00 01 00][1B FF B4 00][A9 FF D0 07][9E FF][FC FF 28 00][1B FF 01 00]◆ちょっと めまいがしただけよ。[01 FF] だいじょうぶ。[02 FF]◆¨¨サマ-ズに[01 FF] いくためには¨¨。[02 FF]◆スリ-クに[01 FF] もどるひつようがあるわ。[02 FF]◆いま つよく[01 FF] それを かんじたの。[1D FF][C6 FF][09 FF 2F 00][08 FF 30 00][08 FF 05 03][08 FF 8F 00][86 FF _L3558_][08 FF 18 02][00 FF]
|
||||
^L5604^[09 FF 02 00][A6 FF 36 00 C4 01][A6 FF 37 00 C5 01][A6 FF 39 00 C6 01][A6 FF 38 00 C7 01][A6 FF 3A 00 C8 01][1B FF 1E 00]◆な-んだ[01 FF] トイレにいってるあいだに[01 FF] だいかつやく しやがって![02 FF]◆ハハハ[02 FF]◆なになに? [0E FF]ちゃん[01 FF] いまから スリ-クに[01 FF] いきたいって?[02 FF]◆OK![02 FF]◆おれたちの トラベリング・バスで[01 FF] スリ-クまで おくるぜ。[02 FF]◆ひとあしさきに[01 FF] くるまを まわしとく。[1B FF 14 00][01 FF] ビルの そとで まってるぜ![02 FF][C6 FF][08 FF 3D 01][09 FF 3E 01][08 FF 02 00][9E FF][9D FF 01 33 _L4162_][00 FF]
|
||||
^L694^◆オ-ケ-![01 FF] ノリノリで バスにのれ![02 FF][C6 FF][00 FF]
|
||||
^L5606^[86 FF _L3558_]^L9001^[FC FF 05 00][B0 FF C0 03 CB 00][1B FF 3C 00][B3 FF C0 03][A1 FF C0 03 C9 01][9E FF][A4 FF C0 03][C3 FF 01 02 C0 03][D8 FF 01 00 00 00][C3 FF 02 02 C0 03][D8 FF 02 00 00 00][C3 FF 03 02 C0 03][D8 FF 03 00 00 00]◆カッカッカッ[01 FF] えんりょは いらんわい![02 FF][C6 FF][A0 FF D0 07 CB 01 01 00][C9 FF D0 07][EB FF FF 00][A3 FF C0 03][9E FF][1B FF 3C 00][A5 FF D0 07 06 00][CA FF][A0 FF D3 07 04 03 01 00][A0 FF D0 07 CD 01 01 00][C9 FF D0 07][EB FF FF 00][9E FF][CB FF FF 00 06 00][09 FF 18 02][08 FF 17 02][C5 FF][EA FF FF 00][09 FF 3D 01][A1 FF C0 03 CE 01][9E FF]◆さあ スリ-クめざして[01 FF] しゅっぱつだ![02 FF][C6 FF][A1 FF E2 03 CF 01][1B FF 3C 00][E6 FF E2 03][EB FF FF 00][6E FF 01 00][00 FF]
|
||||
^L5606^[86 FF _L3558_]^L9001^[FC FF 05 00][B0 FF C0 03 CB 00][1B FF 3C 00][B3 FF C0 03][A1 FF C0 03 C9 01][9E FF][A4 FF C0 03][C3 FF 01 02 C0 03][D8 FF 01 00 00 00][C3 FF 02 02 C0 03][D8 FF 02 00 00 00][C3 FF 03 02 C0 03][D8 FF 03 00 00 00]◆カッカッカッ[01 FF] えんりょは いらんわい![02 FF][C6 FF][A0 FF D0 07 CB 01 01 00][C9 FF D0 07][EB FF FF 00][A3 FF C0 03][9E FF][1B FF 3C 00][A5 FF D0 07 06 00][CA FF]^L32000^[A0 FF D3 07 04 03 01 00][A0 FF D0 07 CD 01 01 00][C9 FF D0 07][EB FF FF 00][9E FF][CB FF FF 00 06 00][09 FF 18 02][08 FF 17 02][C5 FF][EA FF FF 00][09 FF 3D 01][A1 FF C0 03 CE 01][9E FF]◆さあ スリ-クめざして[01 FF] しゅっぱつだ![02 FF][C6 FF][A1 FF E2 03 CF 01][1B FF 3C 00][E6 FF E2 03][EB FF FF 00][6E FF 01 00][00 FF]
|
||||
^L1648^[CA FF][14 FF 2D 00][A0 FF 62 01 D0 01 FF 00][C9 FF 62 01][00 FF]
|
||||
^L1636^[CA FF][14 FF 2E 00][A0 FF 62 01 D1 01 FF 00][C9 FF 62 01][00 FF]
|
||||
^L1637^[CA FF][14 FF 2F 00][A0 FF 62 01 D2 01 FF 00][C9 FF 62 01][00 FF]
|
||||
|
@ -4744,7 +4744,7 @@
|
|||
^L5238^◆あれ ぜんぶは[01 FF] もてないみたいですね。[02 FF][78 FF 01 00 01 00]◆じゃ [90 FF 00][1A FF 02 00]だけ[01 FF] おわたししておきます。[02 FF][86 FF _L5240_][78 FF 02 00 01 00][77 FF 00 00][78 FF 03 00 01 00][82 FF _L5241_][77 FF 00 00]^L5241^[00 FF]
|
||||
^L5239^◆あれ ぜんぶは[01 FF] もてないみたいですね。[02 FF][78 FF 01 00 01 00]◆じゃ [90 FF 00][1A FF 02 00]と[01 FF][78 FF 02 00 01 00] [90 FF 00][1A FF 02 00]だけ[01 FF] おわたししておきます。[02 FF][86 FF _L5240_][78 FF 03 00 01 00][77 FF 00 00][00 FF]
|
||||
^L5235^◆あれ? おかね たりないですね。[01 FF] じゃ また よろしく。[86 FF _L4002_][C6 FF][86 FF _L4023_][86 FF _L4910_][00 FF]
|
||||
^L2140^[86 FF _L4002_][09 FF B5 00][09 FF 85 02][86 FF _L4937_]◆もしも-し[01 FF] エスカルゴうんそうで-す。[1B FF 14 00][01 FF] (ハアハア)[02 FF]◆おたくさまが(ハアハア)[01 FF] おいでになるばしょが[1B FF 0F 00][01 FF] みつからなくて¨¨[02 FF]◆¨¨きっと へんなところに[01 FF] いるんでしょうねぇ。[1B FF 14 00][01 FF] (ハアハア)[02 FF]◆わたし もう まごころこめて[01 FF] ¨¨あきらめましたから。[1B FF 14 00][01 FF] かえります。(ハアハア)[02 FF]◆こういうことも[01 FF] たまには あるんですねぇ。[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF]
|
||||
^L2140^[86 FF _L4002_]^L32003^[09 FF B5 00][09 FF 85 02][86 FF _L4937_]◆もしも-し[01 FF] エスカルゴうんそうで-す。[1B FF 14 00][01 FF] (ハアハア)[02 FF]◆おたくさまが(ハアハア)[01 FF] おいでになるばしょが[1B FF 0F 00][01 FF] みつからなくて¨¨[02 FF]◆¨¨きっと へんなところに[01 FF] いるんでしょうねぇ。[1B FF 14 00][01 FF] (ハアハア)[02 FF]◆わたし もう まごころこめて[01 FF] ¨¨あきらめましたから。[1B FF 14 00][01 FF] かえります。(ハアハア)[02 FF]◆こういうことも[01 FF] たまには あるんですねぇ。[02 FF][86 FF _L4938_][86 FF _L4024_][00 FF]
|
||||
^L5178^[D4 FF 0B 00]◆ガチャン ツ-ツ-ツ-。[1D FF][00 FF]
|
||||
^L5240^[83 FF 49 00][BD FF 01 _L5223_][9C FF][D4 FF 76 00]◆ハイ たしかに。[01 FF] ありやと やんした-。[1D FF][C6 FF][86 FF _L4023_][86 FF _L4910_][00 FF]
|
||||
^L5223^[BA FF 12 00 00 00][00 FF]
|
||||
|
|
Loading…
Reference in New Issue