Adding initial commit.

This commit is contained in:
sergiotarxz 2023-01-29 20:59:55 +01:00
commit b3406aa04e
12 changed files with 1968 additions and 0 deletions

15
Build.PL Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env perl
use Module::Build;
my $home = $ENV{HOME};
my $build = Module::Build->new(
module_name => 'Rsaves',
license => 'AGPLv3',
dist_author => 'Sergio Iglesias <contact@owlcode.tech>',
dist_abstract => 'Ruby/Sapphire save editor lib.',
requires => {
'Inline::C' => 0,
},
);
$build->create_build_script;

11
README.md Normal file
View File

@ -0,0 +1,11 @@
# Rsaves
## Work in progress pokémon ruby sav editing Perl library
TODO: Documentation.
The gba ROM is literally a backup of my own cartragide in spanish.
I have no rights over the ROM and you should not download or use it if you do
not have a copy of the same exact cartragide, it is there for debugging purposes
and it is absolutely not covered by the license of the program.

View File

@ -0,0 +1,38 @@
#!/usr/bin/env perl
use v5.34.1;
use strict;
use warnings;
use Rsaves
qw/read_save check_correct_size get_saves find_current_save_index check_correct_size find_pokemon_substruct change_gender read_pc_storage save_pc_changes enable_eon_ticket save_changes pokemon_set_shiny read_pkm_file_box/;
use Rsaves::Constants::Ruby::Global qw/$MALE $FEMALE/;
sub start {
my ( @saves_raw, $extra );
( @saves_raw[ 0, 1 ], $extra ) = read_save('ruby.sav');
check_correct_size( @saves_raw, $extra );
my @saves = get_saves(@saves_raw);
my $current_save_index = find_current_save_index(@saves);
my $save = $saves[$current_save_index];
make_all_pokemon_shiny($save);
save_changes( @saves, $extra, 'ruby1.sav' );
}
sub make_all_pokemon_shiny {
my $save = shift;
my $pc = read_pc_storage($save);
for my $box ( $pc->{boxes}->@* ) {
for my $pokemon ( $box->@* ) {
my $substructures = $pokemon->{substructures};
my $substruct0 = find_pokemon_substruct( $substructures, 0 );
if ( $substruct0->{species} ) {
pokemon_set_shiny($pokemon);
}
}
}
save_pc_changes( $save, $pc );
}
start;

26
examples/change_sex.pl Normal file
View File

@ -0,0 +1,26 @@
#!/usr/bin/env perl
use v5.34.1;
use strict;
use warnings;
use Rsaves
qw/read_save check_correct_size get_saves find_current_save_index check_correct_size find_pokemon_substruct change_gender read_pc_storage save_pc_changes enable_eon_ticket save_changes pokemon_set_shiny read_pkm_file_box/;
use Rsaves::Constants::Ruby::Global qw/$MALE $FEMALE/;
sub start {
my ( @saves_raw, $extra );
( @saves_raw[ 0, 1 ], $extra ) = read_save('ruby.sav');
check_correct_size( @saves_raw, $extra );
my @saves = get_saves(@saves_raw);
my $current_save_index = find_current_save_index(@saves);
my $save = $saves[$current_save_index];
# Easier than in real life.
# You will need to change room and voila.
change_gender( $save, $FEMALE );
save_changes( @saves, $extra, 'ruby1.sav' );
}
start;

25
examples/enable_latias.pl Normal file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env perl
use v5.34.1;
use strict;
use warnings;
use Rsaves
qw/read_save check_correct_size get_saves find_current_save_index check_correct_size find_pokemon_substruct change_gender read_pc_storage save_pc_changes enable_eon_ticket save_changes pokemon_set_shiny read_pkm_file_box/;
use Rsaves::Constants::Ruby::Global qw/$MALE $FEMALE/;
sub start {
my ( @saves_raw, $extra );
( @saves_raw[ 0, 1 ], $extra ) = read_save('ruby.sav');
check_correct_size( @saves_raw, $extra );
my @saves = get_saves(@saves_raw);
my $current_save_index = find_current_save_index(@saves);
my $save = $saves[$current_save_index];
# Sightly more complex for other flags, take a look to enable_eon_ticket to see how it works.
enable_eon_ticket($save);
save_changes( @saves, $extra, 'ruby1.sav' );
}
start;

View File

@ -0,0 +1,36 @@
#!/usr/bin/env perl
use v5.34.1;
use strict;
use warnings;
use Rsaves
qw/read_save check_correct_size get_saves find_current_save_index check_correct_size find_pokemon_substruct change_gender read_pc_storage save_pc_changes enable_eon_ticket save_changes pokemon_set_shiny read_pkm_file_box/;
sub start {
my ( @saves_raw, $extra );
( @saves_raw[ 0, 1 ], $extra ) = read_save('ruby.sav');
check_correct_size( @saves_raw, $extra );
my @saves = get_saves(@saves_raw);
my $current_save_index = find_current_save_index(@saves);
my $save = $saves[$current_save_index];
my $pc = read_pc_storage($save);
for my $i ( 0 .. 13 ) {
for my $j ( 0 .. 29 ) {
my $pokemon = $pc->{boxes}[$i][$j];
my $substructures = $pokemon->{substructures};
my $substruct0 = find_pokemon_substruct( $substructures, 0 );
if ( $substruct0->{species} == 0 ) {
# Celebi because it is almost unobtainable.
$pc->{boxes}[$i][$j] = read_pkm_file_box(
'firered event mons/251 - CELEBI - B434BCEB935C.pk3');
last;
}
}
}
save_pc_changes( $save, $pc );
save_changes( @saves, $extra, 'ruby1.sav' );
}
start;

Binary file not shown.

989
lib/Rsaves.pm Normal file
View File

@ -0,0 +1,989 @@
package Rsaves;
use v5.34.1;
use strict;
use warnings;
use Data::Dumper;
use Rsaves::Constants::Ruby::Flags qw/$FLAG_SYS_HAS_EON_TICKET/;
use Exporter;
use parent 'Exporter';
our @EXPORT_OK = (
qw/read_pc_storage save_pc_changes save_changes enable_eon_ticket
add_key_item set_flag_id change_gender read_save get_saves
find_current_save_index check_correct_size find_pokemon_substruct
read_pkm_file_box calculate_shiny_personality pokemon_set_shiny get_first_super_data set_first_super_data/
);
my $SAVE_SIZE = 57344;
my $SECTION_DATA_SIZE = 3968;
my $SECTION_AFTER_DATA_PADDING = 4084;
my $SECTION_ID_SIZE = 2;
my $SECTION_CHECKSUM_SIZE = 2;
my $SECTION_SIGNATURE_SIZE = 4;
my $SECTION_SAVE_INDEX_SIZE = 4;
my @ORDER_SECTION_WITHOUT_DATA = (qw/id checksum signature save_index/);
my @ORDER_SECTION_FIELDS = ( 'data', @ORDER_SECTION_WITHOUT_DATA );
my $TRAINER_INFO = 0;
my $TEAM_ITEMS = 1;
my $GAME_STATE = 2;
my $MISC_DATA = 3;
my $RIVAL_INFO = 4;
my $PC_BUFFER_A = 5;
my $PC_BUFFER_B = 6;
my $PC_BUFFER_C = 7;
my $PC_BUFFER_D = 8;
my $PC_BUFFER_E = 9;
my $PC_BUFFER_F = 10;
my $PC_BUFFER_G = 11;
my $PC_BUFFER_H = 12;
my $PC_BUFFER_I = 13;
my ( $FEMALE, $MALE ) = ( 1, 0 );
my $FLAGS_OFFSET = hex '1220';
my $TRAINER_FLAG_START = hex '500';
my $NUMBER_OF_TRAINERS = 693;
my $KEY_ITEMS_OFFSET = hex '5b0';
my $MAX_KEY_ITEMS = 20;
my $ITEM_EON_TICKET = 275;
my $POKEMON_NAME_LENGTH = 10;
my $OT_NAME_LENGTH = 7;
my $BOX_NAME_LENGTH = 9;
my %CHECKSUM_BYTES = (
$TRAINER_INFO => hex 'F80',
$TEAM_ITEMS => 3968,
$GAME_STATE => 3968,
$MISC_DATA => 3968,
$RIVAL_INFO => 3848,
( map { ( $_ => 3968 ) } ( $PC_BUFFER_A .. $PC_BUFFER_H ) ),
$PC_BUFFER_I => 0x83d0 - ( @{ [ $PC_BUFFER_A .. $PC_BUFFER_H ] } * 3968 ),
);
die 'Invalid number of checksum sections.'
if ( scalar keys %CHECKSUM_BYTES ) != 14;
sub _hihalf_u32 {
my $n = shift;
return (($n & 0xFFFF0000) >> 16);
}
sub _lowhalf_u32 {
my $n = shift;
return ($n & 0xFFFF);
}
sub pokemon_set_shiny {
my $pokemon = shift;
$pokemon->{personality} = calculate_shiny_personality($pokemon->{otid}, $pokemon->{personality});
}
sub calculate_shiny_personality {
my $otid = shift;
my $personality = shift;
my $wanted_three_parts_bytes = _lowhalf_u32($personality) ^ int(rand(7));
my $wanted_high_personality = _hihalf_u32($otid) ^ _lowhalf_u32($otid) ^ $wanted_three_parts_bytes;
return ($wanted_high_personality << 16) | _lowhalf_u32($personality);
}
sub get_first_super_data {
my $save = shift;
my @sections = _find_sections_save( $save, 1 .. 4 );
my $superdata = join '', map { $_->{data} } @sections;
return \$superdata;
}
sub set_first_super_data {
my $save = shift;
my $superdata = shift;
my @sections = _find_sections_save( $save, 1 .. 4 );
open my $fh, '<', $superdata;
for my $section (@sections) {
read $fh, $section->{data}, $SECTION_DATA_SIZE;
}
close $fh;
}
sub find_pokemon_substruct {
my $substructures = shift;
my $type = shift;
for my $substruct (@$substructures) {
return $substruct if $substruct->{type} == $type;
}
}
sub read_pc_storage {
my $save = shift;
my @sections = _find_sections_save( $save, $PC_BUFFER_A .. $PC_BUFFER_I );
my $superdata = join '', map { $_->{data} } @sections;
open my $fh, '<', \$superdata;
read $fh, my $read, 1;
my $current_box = unpack 'C', $read;
read $fh, $read, 3;
my $unknown = $read;
my $pc = _read_pokemon_boxes_from_fh($fh);
my @box_names;
for ( 0 .. 13 ) {
read $fh, ( my $read ), $BOX_NAME_LENGTH;
push @box_names, $read;
}
my @wallpapers;
for ( 0 .. 13 ) {
read $fh, ( my $read ), 1;
push @wallpapers, unpack 'C', $read;
}
read $fh, $read, 1 and die "Unread space";
close $fh;
return {
current_box => $current_box,
boxes => $pc,
unknown => $unknown,
boxes_names => \@box_names,
wallpapers => \@wallpapers,
};
}
sub save_pc_changes {
my $save = shift;
my $pc = shift;
my $superdata = '';
open my $fh, '>', \$superdata;
print $fh pack 'C', $pc->{current_box};
print $fh $pc->{unknown};
_write_pokemon_boxes_to_fh( $fh, $pc->{boxes} );
for (0..13) {
print $fh $pc->{boxes_names}[$_];
}
for (0..13) {
print $fh (pack 'C', $pc->{wallpapers}[$_]);
}
my $length = length $superdata;
die "Wrong pc size $length != @{[0x83d0]}" if $length != 0x83d0;
my @sections = _find_sections_save( $save, $PC_BUFFER_A .. $PC_BUFFER_I );
open $fh, '<', \$superdata;
for my $section (@sections) {
read $fh, (my $read), $SECTION_DATA_SIZE;
my $length = length $read;
$section->{data} = $read;
}
read $fh, my $read, 1 and die "Not all readed";
close $fh;
}
sub _write_pokemon_boxes_to_fh {
my $fh = shift;
my $boxes = shift;
for my $box ( $boxes->@* ) {
for my $pokemon ( $box->@* ) {
my $pokemon_raw = '';
open my $fh_pokemon, '>', \$pokemon_raw;
_write_pokemon_fh( $fh_pokemon, $pokemon );
close $fh_pokemon;
my $length = length $pokemon_raw;
die "Bad size pokemon $length" if $length != 0x50;
print $fh $pokemon_raw;
}
}
}
sub _read_pokemon_boxes_from_fh {
my $fh = shift;
my $boxes = [];
my $read;
for my $i ( 0 .. 13 ) {
my $box = [];
for my $j ( 0 .. 29 ) {
read $fh, my $pokemon_data, 0x50 or die "Failed to read 0x50 bytes";
open my $pokemon_fh, '<', \$pokemon_data;
push @$box, _read_pokemon_box_from_fh($pokemon_fh);
close $pokemon_fh;
}
push @$boxes, $box;
}
return $boxes;
}
sub read_pkm_file_box {
my $file = shift;
open my $fh, '<', $file or die "Unable to open $file";
my $file_contents = join '', <$fh>;
$file_contents = substr $file_contents, 0, 0x50;
open $fh, '<', \$file_contents;
return _read_pokemon_box_from_fh($fh, 1);
}
sub _write_pokemon_fh {
my $fh = shift;
my $pokemon = shift;
if ($pokemon->{personality} > 0xFFFFFFFF) {
die "Too big personality";
}
print $fh pack 'V', $pokemon->{personality};
print $fh pack 'V', $pokemon->{otid};
print $fh $pokemon->{nickname};
print $fh pack 'C', $pokemon->{language};
print $fh pack 'C', $pokemon->{flags_eggs};
print $fh $pokemon->{ot_name};
print $fh pack 'C', $pokemon->{markings};
my $substructures_raw = '';
{
open my $fh_substructures, '>', \$substructures_raw;
$pokemon->{checksum} = _write_pokemon_substructures_fh(
$fh_substructures,
$pokemon->{substructures},
$pokemon->{personality},
$pokemon->{otid}
);
close $fh_substructures;
}
my $length = length $substructures_raw;
die "Bad size for the whole substructures $length" if $length != 12 * 4;
print $fh pack 'v', $pokemon->{checksum};
print $fh pack 'v', $pokemon->{unknown};
print $fh $substructures_raw;
}
sub _read_pokemon_box_from_fh {
my $fh = shift;
my $is_pkm_file = shift;
# 0
read $fh, my $read, 4;
my $personality = unpack 'V', $read // die "\$personality undefined";
# 4
read $fh, $read, 4;
my $otid = unpack 'V', $read;
# 8
read $fh, $read, $POKEMON_NAME_LENGTH;
my $nickname = $read;
read $fh, $read, 1;
my $language = unpack 'C', $read;
read $fh, $read, 1;
my $flags_eggs = unpack 'C', $read;
read $fh, $read, $OT_NAME_LENGTH;
my $ot_name = $read;
read $fh, $read, 1;
my $markings = unpack 'C', $read;
read $fh, $read, 2;
my $checksum = unpack 'v', $read;
read $fh, $read, 2;
my $unknown = unpack 'v', $read;
my $substructures =
_read_pokemon_substructures_from_fh( $fh, $otid, $personality,
$checksum, $is_pkm_file );
read $fh, $read, 1 and die "You have not read all";
return {
personality => $personality,
otid => $otid,
nickname => $nickname,
language => $language,
flags_eggs => $flags_eggs,
ot_name => $ot_name,
markings => $markings,
checksum => $checksum,
unknown => $unknown,
substructures => $substructures,
};
}
sub _read_pokemon_substructures_from_fh {
my $fh = shift;
my $otid = shift;
my $personality = shift;
my $checksum = shift;
my $is_pkm_file = shift;
read $fh, my $read, ( 12 * 4 );
my $raw;
my @order_substructures;
if (!$is_pkm_file) {
$raw = _decrypt_pokemon_substructures_raw( $read, $otid, $personality,
$checksum );
@order_substructures =
_pokemon_substructures_order_by_modulo( $personality % 24 );
} else {
$raw = $read;
@order_substructures = (0, 1, 2, 3);
}
my $substructures = [];
open my $fh_raw, '<', \$raw;
for my $i (@order_substructures) {
read $fh_raw, my $substruct, 12;
open my $fh_substruct, '<', \$substruct;
push @$substructures,
_read_pokemon_substruct_n_from_fh( $fh_substruct, $i);
close $fh_substruct;
}
close $fh_raw;
read $fh, $read, 1 and die "You have not read all";
return $substructures;
}
sub _write_pokemon_substructures_fh {
my $fh = shift;
my $substructures = shift;
my $personality = shift;
my $otid = shift;
my $modulo = $personality % 24;
my $decrypted_substructures = '';
open my $fh_decrypted_substructures, '>', \$decrypted_substructures;
my @order_substructures = _pokemon_substructures_order_by_modulo($modulo);
my $substruct0 = find_pokemon_substruct( $substructures, 0 );
for my $i (@order_substructures) {
my $substruct = find_pokemon_substruct( $substructures, $i );
my $substruct_raw = '';
open my $fh_decrypted_substruct, '>', \$substruct_raw;
_write_pokemon_substruct_fh( $fh_decrypted_substruct, $substruct );
close $fh_decrypted_substruct;
my $length = length $substruct_raw;
die "Bad size substruct $i -> $length" if $length != 12;
print $fh_decrypted_substructures $substruct_raw;
}
close $fh_decrypted_substructures;
open $fh_decrypted_substructures, '<', \$decrypted_substructures;
my $checksum = _pokemon_checksum_substructures_fh($fh_decrypted_substructures);
seek $fh_decrypted_substructures, 0, 0;
my $encrypted_substructures;
open my $fh_encrypted_substructures, '>', \$encrypted_substructures;
for ( 0 .. 11 ) {
read $fh_decrypted_substructures, my $read, 4;
$read = pack 'V', ( ( ( unpack 'V', $read ) ^ $personality ) ^ $otid );
print $fh_encrypted_substructures $read;
}
close $fh_decrypted_substructures;
close $fh_encrypted_substructures;
print $fh $encrypted_substructures;
return $checksum;
}
sub _pokemon_checksum_substructures_fh {
my $fh = shift;
my $checksum = 0;
for ( 0 .. 3 ) {
for ( 0 .. 5 ) {
read $fh, my $read, 2 or die "Unable to read";
$checksum = _sum_u16( (unpack 'v', $read), $checksum );
}
}
return $checksum;
}
sub _read_pokemon_substruct_n_from_fh {
my $fh = shift;
my $type = shift;
return _read_pokemon_substruct_0_from_fh($fh) if $type == 0;
return _read_pokemon_substruct_1_from_fh($fh) if $type == 1;
return _read_pokemon_substruct_2_from_fh($fh) if $type == 2;
return _read_pokemon_substruct_3_from_fh($fh) if $type == 3;
}
sub _write_pokemon_substruct_fh {
my $fh = shift;
my $substruct = shift;
my $type = $substruct->{type};
return _write_pokemon_substruct0_fh( $fh, $substruct ) if $type == 0;
return _write_pokemon_substruct1_fh( $fh, $substruct ) if $type == 1;
return _write_pokemon_substruct2_fh( $fh, $substruct ) if $type == 2;
return _write_pokemon_substruct3_fh( $fh, $substruct ) if $type == 3;
}
{
my %translate_encoding_table;
my %translate_real_table;
{
my $counter = hex 'BB';
for my $char ( 'A' .. 'Z', 'a' .. 'z' ) {
$translate_encoding_table{ chr($counter) } = $char;
$translate_real_table{$char} = chr($counter);
$counter++;
}
$translate_real_table{'♂'} = chr(0xB5);
$translate_real_table{'♀'} = chr(0xB6);
$translate_encoding_table{ chr(0xB5) } = '♂';
$translate_encoding_table{ chr(0xB6) } = '♀';
}
sub _to_3rd_encoding {
my $text = shift;
my @chars = split '', $text;
my $return_text = '';
for my $char (@chars) {
$return_text .= $translate_real_table{$char};
}
return $return_text;
}
sub _translate_3rd_encoding {
my $text = shift;
my @chars = split '', $text;
my $return_text = '';
for my $char (@chars) {
last if ord($char) == hex 'FF';
$return_text .= $translate_encoding_table{$char} // '?';
}
return $return_text;
}
}
sub _read_pokemon_substruct_0_from_fh {
my $fh = shift;
my $read;
read $fh, $read, 2;
my $species = unpack 'v', $read;
read $fh, $read, 2;
my $held_item = unpack 'v', $read;
read $fh, $read, 4;
my $experience = unpack 'V', $read;
read $fh, $read, 1;
my $pp_bonuses = unpack 'C', $read;
read $fh, $read, 1;
my $friendship = unpack 'C', $read;
read $fh, $read, 2;
my $unknown = unpack 'v', $read;
return {
type => 0,
species => $species,
held_item => $held_item,
experience => $experience,
pp_bonuses => $pp_bonuses,
friendship => $friendship,
unknown => $unknown,
};
}
sub _write_pokemon_substruct0_fh {
my $fh = shift;
my $substruct = shift;
print $fh pack 'v', $substruct->{species};
print $fh pack 'v', $substruct->{held_item};
print $fh pack 'V', $substruct->{experience};
print $fh pack 'C', $substruct->{pp_bonuses};
print $fh pack 'C', $substruct->{friendship};
print $fh pack 'v', $substruct->{unknown};
}
sub _read_pokemon_substruct_1_from_fh {
my $fh = shift;
my $read;
my @movements;
my @pp;
for ( 0 .. 3 ) {
read $fh, $read, 2;
push @movements, unpack 'v', $read;
}
for ( 0 .. 3 ) {
read $fh, $read, 1;
push @pp, unpack 'C', $read;
}
return {
type => 1,
movements => \@movements,
pp => \@pp,
};
}
sub _write_pokemon_substruct1_fh {
my $fh = shift;
my $substruct = shift;
for my $i ( 0 .. 3 ) {
print $fh pack 'v', $substruct->{movements}[$i];
}
for my $i ( 0 .. 3 ) {
print $fh pack 'C', $substruct->{pp}[$i];
}
}
sub _read_pokemon_substruct_2_from_fh {
my $fh = shift;
my $read;
read $fh, $read, 1;
my $hp_ev = unpack 'C', $read;
read $fh, $read, 1;
my $attack_ev = unpack 'C', $read;
read $fh, $read, 1;
my $defense_ev = unpack 'C', $read;
read $fh, $read, 1;
my $speed_ev = unpack 'C', $read;
read $fh, $read, 1;
my $special_attack_ev = unpack 'C', $read;
read $fh, $read, 1;
my $special_defense_ev = unpack 'C', $read;
read $fh, $read, 1;
my $cool = unpack 'C', $read;
read $fh, $read, 1;
my $beauty = unpack 'C', $read;
read $fh, $read, 1;
my $cute = unpack 'C', $read;
read $fh, $read, 1;
my $smart = unpack 'C', $read;
read $fh, $read, 1;
my $tough = unpack 'C', $read;
read $fh, $read, 1;
my $sheen = unpack 'C', $read;
return {
type => 2,
hp_ev => $hp_ev,
attack_ev => $attack_ev,
defense_ev => $defense_ev,
speed_ev => $speed_ev,
special_attack_ev => $special_attack_ev,
special_defense_ev => $special_defense_ev,
cool => $cool,
beauty => $beauty,
cute => $cute,
smart => $smart,
tough => $tough,
sheen => $sheen,
};
}
sub _write_pokemon_substruct2_fh {
my $fh = shift;
my $substruct = shift;
print $fh pack 'C', $substruct->{hp_ev};
print $fh pack 'C', $substruct->{attack_ev};
print $fh pack 'C', $substruct->{defense_ev};
print $fh pack 'C', $substruct->{speed_ev};
print $fh pack 'C', $substruct->{special_attack_ev};
print $fh pack 'C', $substruct->{special_defense_ev};
print $fh pack 'C', $substruct->{cool};
print $fh pack 'C', $substruct->{beauty};
print $fh pack 'C', $substruct->{cute};
print $fh pack 'C', $substruct->{smart};
print $fh pack 'C', $substruct->{tough};
print $fh pack 'C', $substruct->{sheen};
}
sub _read_pokemon_substruct_3_from_fh {
my $fh = shift;
my $read;
read $fh, $read, 1;
my $pokerus = unpack 'C', $read;
read $fh, $read, 1;
my $met_location = unpack 'C', $read;
read $fh, $read, 2;
my $met_data = unpack 'v', $read;
read $fh, $read, 4;
# We do not mess with this here.
my $ivs_egg_status_and_ability = unpack 'V', $read;
read $fh, $read, 4;
my $ribbons_and_event_legal = unpack 'V', $read;
return {
type => 3,
pokerus => $pokerus,
met_location => $met_location,
met_data => $met_data,
ivs_egg_status_and_ability => $ivs_egg_status_and_ability,
ribbons_and_event_legal => $ribbons_and_event_legal,
};
}
sub _write_pokemon_substruct3_fh {
my $fh = shift;
my $substruct = shift;
print $fh pack 'C', $substruct->{pokerus};
print $fh pack 'C', $substruct->{met_location};
print $fh pack 'v', $substruct->{met_data};
print $fh pack 'V', $substruct->{ivs_egg_status_and_ability};
print $fh pack 'V', $substruct->{ribbons_and_event_legal};
}
sub _generate_permutations_array {
my $array = shift;
my @permutations;
if ( ( scalar @$array ) == 1 ) {
push @permutations, $array;
return \@permutations;
}
for ( my $i = 0 ; $i < @$array ; $i++ ) {
my @list_to_send_recursive;
for ( my $j = 0 ; $j < @$array ; $j++ ) {
next if $j == $i;
push @list_to_send_recursive, $array->[$j];
}
for my $permutation (
@{ _generate_permutations_array( \@list_to_send_recursive ) } )
{
push @permutations, [ $array->[$i], @$permutation ];
}
}
return \@permutations;
}
sub _decrypt_pokemon_substructures_raw {
my $raw = shift;
my $otid = shift;
my $personality = shift;
my $checksum = shift;
my $result = '';
open my $fh, '<', \$raw;
for ( 0 .. 11 ) {
read $fh, my $read, 4 or die "Unable to read";
$read = unpack 'V', $read;
$read ^= $otid;
$read ^= $personality;
$result .= pack 'V', $read;
}
read $fh, my $read, 1 and die "Not all read";
close $fh;
open $fh, '<', \$result;
# my @order_substructures = _pokemon_substructures_order_by_modulo($personality % 24);
# for my $substruct_n (0..3) {
# my $offset = $substruct_n * 12;
# seek $fh, $substruct_n * 12, 0;
# for (0..5) {
# read $fh, my $read, 2 or die "Unable to read";
# $read = unpack 'v', $read;
# $compare_checksum = _sum_u16($read, $compare_checksum);
# }
# }
#
my $compare_checksum = _pokemon_checksum_substructures_fh($fh);
die "Checksum $compare_checksum not equal to $checksum"
if $compare_checksum != $checksum;
close $fh;
return $result;
}
sub _pokemon_substructures_order_by_modulo {
my $modulo = shift;
my @return;
my @types_location = _pokemon_substructures_types_location($modulo);
for ( my $i = 0 ; $i < @types_location ; $i++ ) {
@return[ $types_location[$i] ] = $i;
}
return @return;
}
sub _pokemon_substructures_types_location {
my $modulo = shift;
return ( 0, 1, 2, 3 ) if $modulo == 0;
return ( 0, 1, 3, 2 ) if $modulo == 1;
return ( 0, 2, 1, 3 ) if $modulo == 2;
return ( 0, 3, 1, 2 ) if $modulo == 3;
return ( 0, 2, 3, 1 ) if $modulo == 4;
return ( 0, 3, 2, 1 ) if $modulo == 5;
return ( 1, 0, 2, 3 ) if $modulo == 6;
return ( 1, 0, 3, 2 ) if $modulo == 7;
return ( 2, 0, 1, 3 ) if $modulo == 8;
return ( 3, 0, 1, 2 ) if $modulo == 9;
return ( 2, 0, 3, 1 ) if $modulo == 10;
return ( 3, 0, 2, 1 ) if $modulo == 11;
return ( 1, 2, 0, 3 ) if $modulo == 12;
return ( 1, 3, 0, 2 ) if $modulo == 13;
return ( 2, 1, 0, 3 ) if $modulo == 14;
return ( 3, 1, 0, 2 ) if $modulo == 15;
return ( 2, 3, 0, 1 ) if $modulo == 16;
return ( 3, 2, 0, 1 ) if $modulo == 17;
return ( 1, 2, 3, 0 ) if $modulo == 18;
return ( 1, 3, 2, 0 ) if $modulo == 19;
return ( 2, 1, 3, 0 ) if $modulo == 20;
return ( 3, 1, 2, 0 ) if $modulo == 21;
return ( 2, 3, 1, 0 ) if $modulo == 22;
return ( 3, 2, 1, 0 ) if $modulo == 23;
}
sub _save_section {
my ( $content, $section ) = @_;
my $new_content = '';
$new_content .= $section->{data};
$new_content .=
"\x00" x ( $SECTION_AFTER_DATA_PADDING - $SECTION_DATA_SIZE );
$new_content .=
"\x00" x ( $SECTION_DATA_SIZE - $CHECKSUM_BYTES{ $section->{id} } );
$new_content .= pack 'v', $section->{id};
$new_content .= pack 'v', $section->{checksum};
$new_content .= pack 'V', $section->{signature};
$new_content .= pack 'V', $section->{save_index};
die
"The section size for section @{[$section->{id}]} is wrong @{[length $new_content]}."
if length $new_content != 4 * 1024;
${$content} .= $new_content;
}
sub save_changes {
my ( @saves, $extra, $filename );
( @saves[ 0, 1 ], $extra, $filename ) = @_;
my $content = '';
for my $save (@saves) {
my $counter_j = 0;
for my $section (@$save) {
die "Too much memory allocated" if length $content > 1000000;
_recalculate_checksum($section);
_save_section( \$content, $section );
}
}
$content .= $extra;
die "Save length is incorrect." if length $content != 128 * 1024;
open my $fh, '>', $filename;
print $fh $content;
close $fh;
}
sub enable_eon_ticket {
my $save = shift;
my $superdata = get_first_super_data($save);
say "Latios already enabled", return
if _check_flag_id( $save, $superdata, $FLAG_SYS_HAS_EON_TICKET );
printf "%x", $FLAG_SYS_HAS_EON_TICKET;
set_flag_id( $save, $superdata, $FLAG_SYS_HAS_EON_TICKET, 1 );
add_key_item( $save, $superdata, $ITEM_EON_TICKET );
set_first_super_data( $save, $superdata );
}
sub add_key_item {
my $save = shift;
my $superdata = shift;
my $item_id = shift;
my $result = '';
open my $fh, '<', $superdata;
read $fh, my ($read), $KEY_ITEMS_OFFSET;
$result .= $read;
LOOP: {
for my $i ( 0 .. 19 ) {
read $fh, $read, 2;
my $found_item = unpack 'v', $read;
if ( $found_item == 0 ) {
read $fh, $read, 2;
$result .= pack 'v', $item_id;
$result .= pack 'v', 1;
last LOOP;
}
$result .= $read;
read $fh, $read, 2;
my $quantity = unpack 'v', $read;
$result .= $read;
if ( $found_item == $item_id ) {
warn "$item_id already present.";
last LOOP;
}
}
die "No room to add $item_id.";
}
$result .= join '', <$fh>;
${$superdata} = $result;
close $fh;
}
sub set_flag_id {
my $save = shift;
my $superdata = shift;
my $id = shift;
my $to_set = shift;
my $offset = int( $id / 8 ) + $FLAGS_OFFSET;
my $result = '';
open my $fh, '<', $superdata;
read $fh, my ($read), $offset;
$result .= $read;
read $fh, $read, 1;
$read = unpack 'C', $read;
if ($to_set) {
$result .= pack 'C', ( $read | ( 1 << ( $id & 7 ) ) );
}
else {
$result .= pack 'C', ( $read & ~( 1 << ( $id & 7 ) ) );
}
$result .= join '', <$fh>;
${$superdata} = $result;
close $fh;
}
sub _check_flag_id {
my $save = shift;
my $superdata = shift;
my $id = shift;
my $offset = int( $id / 8 ) + $FLAGS_OFFSET;
my $flags_offset = unpack "x@{[$offset]} C", ${$superdata};
return ( $flags_offset >> ( $id & 7 ) ) & 1;
}
sub change_gender {
my $save = shift;
my $gender = shift;
my $section = _find_section_save( $save, $TRAINER_INFO );
my $new_data = '';
my $data = $section->{data};
open my $fh, '<', \$data;
read $fh, my $read, 8;
$new_data .= $read;
$new_data .= pack 'c', $gender;
read $fh, $read, 1;
$new_data .= join '', <$fh>;
$section->{data} = $new_data;
}
sub _recalculate_checksum {
my $section = shift;
my $data = $section->{data};
my $section_id = $section->{id};
my $size = $CHECKSUM_BYTES{$section_id};
my $checksum = 0;
open my $fh, '<', \$data;
for ( my $i = 0 ; $i < $size ; $i += 4 ) {
my $readed = '';
read $fh, $readed, 4;
my $to_add = unpack 'V', $readed;
$checksum = _sum_u32( $checksum, $to_add );
}
my $final_checksum = _sum_u32_to_u16( $checksum, $checksum >> 16 );
$section->{checksum} = $final_checksum;
}
use Inline C => <<'EOF';
unsigned int
_sum_u32(unsigned int a, unsigned int b) {
return a + b;
}
unsigned short
_sum_u32_to_u16(unsigned int a, unsigned int b) {
return (short) a + b;
}
unsigned short
_sum_u16(unsigned short a, unsigned short b) {
return (unsigned short) a + b;
}
EOF
sub _find_section_save {
my $save = shift;
my $section_id = shift;
for my $section (@$save) {
return $section if $section_id == $section->{id};
}
}
sub _find_sections_save {
my $save = shift;
my @section_ids = @_;
my @return;
for my $section_id (@section_ids) {
push @return, _find_section_save( $save, $section_id );
}
return @return;
}
sub find_current_save_index {
my @saves = @_;
my $max_index;
my $max_save_pos;
for my $pos ( 0 .. 1 ) {
my $save = $saves[$pos];
my $section = _find_section_save( $save, $TRAINER_INFO );
my $index = $section->{save_index};
( ( $max_index, $max_save_pos ) = ( $index, $pos ) ), next
if !defined $max_index;
if ( $index > $max_index ) {
( $max_index, $max_save_pos ) = ( $index, $pos );
}
}
return $max_save_pos;
}
sub _print_sections_debug {
my @saves = map {
[
map {
{ %$_ }
} @$_
]
} @_;
for my $save (@saves) {
say "PRINTING SAVE";
for my $section (@$save) {
say "\tPRINTING SECTION";
for my $key (@ORDER_SECTION_WITHOUT_DATA) {
say "\t\t$key = @{[sprintf('%x', $section->{$key})]}";
}
}
}
}
sub get_saves {
my @saves_raw = @_;
my @saves;
for my $save_raw (@saves_raw) {
push @saves, _get_sections($save_raw);
}
return @saves;
}
sub _get_sections {
my $content = shift;
my $sections = [];
for ( 0 .. 13 ) {
my $section;
( $content, $section ) = _get_section($content);
push @$sections, $section;
}
return $sections;
}
sub _get_section {
my $content = shift;
my $data = substr $content, 0, $SECTION_DATA_SIZE;
$content = substr $content, $SECTION_AFTER_DATA_PADDING;
my $section_id = substr $content, 0, $SECTION_ID_SIZE;
$content = substr $content, $SECTION_ID_SIZE;
my $checksum = substr $content, 0, $SECTION_CHECKSUM_SIZE;
$content = substr $content, $SECTION_CHECKSUM_SIZE;
my $signature = substr $content, 0, $SECTION_SIGNATURE_SIZE;
$content = substr $content, $SECTION_SIGNATURE_SIZE;
my $save_index = substr $content, 0, $SECTION_SAVE_INDEX_SIZE;
$content = substr $content, $SECTION_SAVE_INDEX_SIZE;
$data = substr $data, 0, $CHECKSUM_BYTES{ unpack 'v', $section_id };
return (
$content,
{
save_index => unpack( 'V', $save_index ),
signature => unpack( 'V', $signature ),
checksum => unpack( 'v', $checksum ),
id => unpack( 'v', $section_id ),
data => $data,
}
);
}
sub check_correct_size {
my @sections_raw = @_;
my $sum = 0;
for my $section (@sections_raw) {
$sum += length $section;
}
die "Incorrect size" if $sum / 1024 != 128;
}
sub read_save {
my $file = shift;
my @sections;
my $extra;
open my $fh, '<', $file or die "Unable to read $file";
my $contents = join '', <$fh>;
for ( 0 .. 1 ) {
push @sections, substr $contents, 0, $SAVE_SIZE;
$contents = substr $contents, $SAVE_SIZE;
}
$extra = $contents;
close $fh;
return ( @sections, $extra );
}
1;

View File

@ -0,0 +1,812 @@
package Rsaves::Constants::Ruby::Flags;
use v5.34.1;
use strict;
use warnings;
use Exporter;
use parent 'Exporter';
our $FLAG_SET_WALL_CLOCK = 0x51;
our $FLAG_RESCUED_BIRCH = 0x52;
our $FLAG_LINK_CONTEST_ROOM_POKEBALL = 0x56;
our $FLAG_MET_RIVAL_MOM = 0x57;
our $FLAG_BIRCH_AIDE_MET = 0x58;
our $FLAG_DECLINED_BIKE = 0x59;
our $FLAG_RECEIVED_BIKE = 0x5A;
our $FLAG_RECEIVED_WAILMER_PAIL = 0x5E;
our $FLAG_RECEIVED_POKEBLOCK_CASE = 0x5F;
our $FLAG_RECEIVED_SECRET_POWER = 0x60;
our $FLAG_TV_EXPLAINED = 0x62;
our $FLAG_MAUVILLE_GYM_BARRIERS_STATE = 0x63;
our $FLAG_MOSSDEEP_GYM_SWITCH_1 = 0x64;
our $FLAG_MOSSDEEP_GYM_SWITCH_2 = 0x65;
our $FLAG_MOSSDEEP_GYM_SWITCH_3 = 0x66;
our $FLAG_MOSSDEEP_GYM_SWITCH_4 = 0x67;
our $FLAG_OCEANIC_MUSEUM_MET_REPORTER = 0x69;
our $FLAG_RECEIVED_HM04 = 0x6A;
our $FLAG_RECEIVED_HM06 = 0x6B;
our $FLAG_RECEIVED_HM05 = 0x6D;
our $FLAG_RECEIVED_HM02 = 0x6E;
our $FLAG_MT_PYRE_ORB_STOLEN = 0x6F;
our $FLAG_EVIL_TEAM_ESCAPED_IN_SUBMARINE = 0x70;
our $FLAG_LEGENDARY_BATTLE_COMPLETED = 0x71;
our $FLAG_RECEIVED_METEORITE = 0x73;
our $FLAG_ADVENTURE_STARTED = 0x74;
our $FLAG_MET_HIDDEN_POWER_GIVER = 0x76;
our $FLAG_RECEIVED_TM31 = 0x79;
our $FLAG_RECEIVED_HM03 = 0x7A;
our $FLAG_RECEIVED_HM08 = 0x7B;
our $FLAG_DEFEATED_WALLY_VICTORY_ROAD = 0x7E;
our $FLAG_MET_PRETTY_PETAL_SHOP_OWNER = 0x7F;
our $FLAG_LEGEND_ESCAPED_SEAFLOOR_CAVERN = 0x81;
our $FLAG_DEFEATED_RIVAL_ROUTE103 = 0x82;
our $FLAG_RECEIVED_DOLL_LANETTE = 0x83;
our $FLAG_RECEIVED_POTION_OLDALE = 0x84;
our $FLAG_RECEIVED_AMULET_COIN = 0x85;
our $FLAG_PENDING_DAYCARE_EGG = 0x86;
our $FLAG_THANKED_FOR_PLAYING_WITH_WALLY = 0x87;
our $FLAG_RECEIVED_HM01 = 0x89;
our $FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY = 0x8B;
our $FLAG_RECEIVED_6_SODA_POP = 0x8C;
our $FLAG_DEFEATED_SEASHORE_HOUSE_TRAINERS = 0x8D;
our $FLAG_DEVON_GOODS_STOLEN = 0x8E;
our $FLAG_RECOVERED_DEVON_GOODS = 0x8F;
our $FLAG_RETURNED_DEVON_GOODS = 0x90;
our $FLAG_MR_BRINEY_SAILING_INTRO = 0x93;
our $FLAG_DOCK_REJECTED_DEVON_GOODS = 0x94;
our $FLAG_DELIVERED_DEVON_GOODS = 0x95;
our $FLAG_RECEIVED_CONTEST_PASS = 0x96;
our $FLAG_RECEIVED_CASTFORM = 0x97;
our $FLAG_RECEIVED_SUPER_ROD = 0x98;
our $FLAG_RUSTBORO_NPC_TRADE_COMPLETED = 0x99;
our $FLAG_PACIFIDLOG_NPC_TRADE_COMPLETED = 0x9A;
our $FLAG_FORTREE_NPC_TRADE_COMPLETED = 0x9B;
our $FLAG_UNKNOWN_9F = 0x9F;
our $FLAG_COOL_PAINTING_MADE = 0xA0;
our $FLAG_BEAUTY_PAINTING_MADE = 0xA1;
our $FLAG_CUTE_PAINTING_MADE = 0xA2;
our $FLAG_SMART_PAINTING_MADE = 0xA3;
our $FLAG_TOUGH_PAINTING_MADE = 0xA4;
our $FLAG_RECEIVED_TM39 = 0xA5;
our $FLAG_RECEIVED_TM08 = 0xA6;
our $FLAG_RECEIVED_TM34 = 0xA7;
our $FLAG_RECEIVED_TM50 = 0xA8;
our $FLAG_RECEIVED_TM42 = 0xA9;
our $FLAG_RECEIVED_TM40 = 0xAA;
our $FLAG_RECEIVED_TM04 = 0xAB;
our $FLAG_RECEIVED_TM03 = 0xAC;
our $FLAG_DECORATION_1 = 0xAD;
our $FLAG_DECORATION_2 = 0xAE;
our $FLAG_DECORATION_3 = 0xAF;
our $FLAG_DECORATION_4 = 0xB0;
our $FLAG_DECORATION_5 = 0xB1;
our $FLAG_DECORATION_6 = 0xB2;
our $FLAG_DECORATION_7 = 0xB3;
our $FLAG_DECORATION_8 = 0xB4;
our $FLAG_DECORATION_9 = 0xB5;
our $FLAG_DECORATION_10 = 0xB6;
our $FLAG_DECORATION_11 = 0xB7;
our $FLAG_DECORATION_12 = 0xB8;
our $FLAG_DECORATION_13 = 0xB9;
our $FLAG_DECORATION_14 = 0xBA;
our $FLAG_DECORATION_15 = 0xBB;
our $FLAG_RECEIVED_POKENAV = 0xBC;
our $FLAG_DELIVERED_STEVEN_LETTER = 0xBD;
our $FLAG_DEFEATED_WALLY_MAUVILLE = 0xBE;
our $FLAG_RECEIVED_SUN_STONE_MOSSDEEP = 0xC0;
our $FLAG_WALLY_SPEECH = 0xC1;
our $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_1 = 0xC2;
our $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_2 = 0xC3;
our $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_3 = 0xC4;
our $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_4 = 0xC5;
our $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_5 = 0xC6;
our $FLAG_RUSTURF_TUNNEL_OPENED = 0xC7;
our $FLAG_RECEIVED_RED_SCARF = 0xC8;
our $FLAG_RECEIVED_BLUE_SCARF = 0xC9;
our $FLAG_RECEIVED_PINK_SCARF = 0xCA;
our $FLAG_RECEIVED_GREEN_SCARF = 0xCB;
our $FLAG_RECEIVED_YELLOW_SCARF = 0xCC;
our $FLAG_ENCOUNTERED_LATIAS_OR_LATIOS = 0xCE;
our $FLAG_RECEIVED_BASEMENT_KEY = 0xD0;
our $FLAG_RECEIVED_TM24 = 0xD1;
our $FLAG_RECEIVED_RED_OR_BLUE_ORB = 0xD4;
our $FLAG_RECEIVED_PREMIER_BALL_RUSTBORO = 0xD5;
our $FLAG_ROUTE104_PROTOTYPE_COMPLETED_1 = 0xD7;
our $FLAG_ROUTE104_PROTOTYPE_COMPLETED_2 = 0xD8;
our $FLAG_MET_DIVING_TREASURE_HUNTER = 0xD9;
our $FLAG_MET_WAILMER_TRAINER = 0xDA;
our $FLAG_EVIL_LEADER_PLEASE_STOP = 0xDB;
our $FLAG_RECEIVED_GO_GOGGLES = 0xDD;
our $FLAG_WINGULL_SENT_ON_ERRAND = 0xDE;
our $FLAG_RECEIVED_MENTAL_HERB = 0xDF;
our $FLAG_WINGULL_DELIVERED_MAIL = 0xE0;
our $FLAG_RECEIVED_20_COINS = 0xE1;
our $FLAG_RECEIVED_STARTER_DOLL = 0xE2;
our $FLAG_RECEIVED_GOOD_ROD = 0xE3;
our $FLAG_REGI_DOORS_OPENED = 0xE4;
our $FLAG_RECEIVED_TM27 = 0xE5;
our $FLAG_RECEIVED_TM36 = 0xE6;
our $FLAG_RECEIVED_TM05 = 0xE7;
our $FLAG_RECEIVED_TM19 = 0xE8;
our $FLAG_RECEIVED_TM44 = 0xEA;
our $FLAG_RECEIVED_TM45 = 0xEB;
our $FLAG_RECEIVED_GLASS_ORNAMENT = 0xEC;
our $FLAG_RECEIVED_SILVER_SHIELD = 0xED;
our $FLAG_RECEIVED_GOLD_SHIELD = 0xEE;
our $FLAG_USED_STORAGE_KEY = 0xEF;
our $FLAG_USED_ROOM_1_KEY = 0xF0;
our $FLAG_USED_ROOM_2_KEY = 0xF1;
our $FLAG_USED_ROOM_4_KEY = 0xF2;
our $FLAG_USED_ROOM_6_KEY = 0xF3;
our $FLAG_MET_PROF_COSMO = 0xF4;
our $FLAG_RECEIVED_WAILMER_DOLL = 0xF5;
our $FLAG_RECEIVED_CHESTO_BERRY_ROUTE104 = 0xF6;
our $FLAG_DEFEATED_SS_TIDAL_TRAINERS = 0xF7;
our $FLAG_RECEIVED_SPELON_BERRY = 0xF8;
our $FLAG_RECEIVED_PAMTRE_BERRY = 0xF9;
our $FLAG_RECEIVED_WATMEL_BERRY = 0xFA;
our $FLAG_RECEIVED_DURIN_BERRY = 0xFB;
our $FLAG_RECEIVED_BELUE_BERRY = 0xFC;
our $FLAG_RECEIVED_CHARCOAL = 0xFE;
our $FLAG_LATIOS_OR_LATIAS_ROAMING = 0xFF;
our $FLAG_RECEIVED_REPEAT_BALL = 0x100;
our $FLAG_RECEIVED_OLD_ROD = 0x101;
our $FLAG_RECEIVED_COIN_CASE = 0x102;
our $FLAG_RETURNED_RED_OR_BLUE_ORB = 0x103;
our $FLAG_RECEIVED_TM49 = 0x104;
our $FLAG_RECEIVED_TM28 = 0x105;
our $FLAG_RECEIVED_TM09 = 0x106;
our $FLAG_ENTERED_ELITE_FOUR = 0x107;
our $FLAG_RECEIVED_TM10 = 0x108;
our $FLAG_RECEIVED_TM41 = 0x109;
our $FLAG_RECEIVED_LAVARIDGE_EGG = 0x10A;
our $FLAG_RECEIVED_FOSSIL_MON = 0x10B;
our $FLAG_SECRET_BASE_REGISTRY_ENABLED = 0x10C;
our $FLAG_RECEIVED_TM46 = 0x10D;
our $FLAG_CONTEST_SKETCH_CREATED = 0x10E;
our $FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE = 0x10F;
our $FLAG_RECEIVED_EXP_SHARE = 0x110;
our $FLAG_POKERUS_EXPLAINED = 0x111;
our $FLAG_RECEIVED_RUNNING_SHOES = 0x112;
our $FLAG_RECEIVED_QUICK_CLAW = 0x113;
our $FLAG_RECEIVED_KINGS_ROCK = 0x114;
our $FLAG_RECEIVED_MACHO_BRACE = 0x115;
our $FLAG_RECEIVED_SOOTHE_BELL = 0x116;
our $FLAG_RECEIVED_WHITE_HERB = 0x117;
our $FLAG_RECEIVED_SOFT_SAND = 0x118;
our $FLAG_RECEIVED_CLEANSE_TAG = 0x11A;
our $FLAG_RECEIVED_FOCUS_BAND = 0x11B;
our $FLAG_DECLINED_WALLY_BATTLE_MAUVILLE = 0x11C;
our $FLAG_RECEIVED_DEVON_SCOPE = 0x11D;
our $FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE = 0x11E;
our $FLAG_MET_DEVON_EMPLOYEE = 0x11F;
our $FLAG_MET_RIVAL_RUSTBORO = 0x120;
our $FLAG_RECEIVED_SILK_SCARF = 0x121;
our $FLAG_NOT_READY_FOR_BATTLE_ROUTE120 = 0x122;
our $FLAG_RECEIVED_SS_TICKET = 0x123;
our $FLAG_MET_RIVAL_LILYCOVE = 0x124;
our $FLAG_MET_RIVAL_IN_HOUSE_AFTER_LILYCOVE = 0x125;
our $FLAG_EXCHANGED_SCANNER = 0x126;
our $FLAG_KECLEON_FLED_FORTREE = 0x127;
our $FLAG_PETALBURG_MART_EXPANDED_ITEMS = 0x128;
our $FLAG_RECEIVED_MIRACLE_SEED = 0x129;
our $FLAG_RECEIVED_BELDUM = 0x12A;
our $FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK = 0x12B;
our $FLAG_MET_FANCLUB_YOUNGER_BROTHER = 0x12C;
our $FLAG_RIVAL_LEFT_FOR_ROUTE103 = 0x12D;
our $FLAG_OMIT_DIVE_FROM_STEVEN_LETTER = 0x12E;
our $FLAG_HIDDEN_ITEMS_START = 0x258;
our $FLAG_HIDDEN_ITEM_0 = 0x258;
our $FLAG_HIDDEN_ITEM_1 = 0x259;
our $FLAG_HIDDEN_ITEM_2 = 0x25A;
our $FLAG_HIDDEN_ITEM_3 = 0x25B;
our $FLAG_HIDDEN_ITEM_4 = 0x25C;
our $FLAG_HIDDEN_ITEM_5 = 0x25D;
our $FLAG_HIDDEN_ITEM_6 = 0x25E;
our $FLAG_HIDDEN_ITEM_7 = 0x25F;
our $FLAG_HIDDEN_ITEM_8 = 0x260;
our $FLAG_HIDDEN_ITEM_9 = 0x261;
our $FLAG_HIDDEN_ITEM_A = 0x262;
our $FLAG_HIDDEN_ITEM_B = 0x263;
our $FLAG_HIDDEN_ITEM_C = 0x264;
our $FLAG_HIDDEN_ITEM_D = 0x265;
our $FLAG_HIDDEN_ITEM_E = 0x266;
our $FLAG_HIDDEN_ITEM_F = 0x267;
our $FLAG_HIDDEN_ITEM_10 = 0x268;
our $FLAG_HIDDEN_ITEM_11 = 0x269;
our $FLAG_HIDDEN_ITEM_12 = 0x26A;
our $FLAG_HIDDEN_ITEM_13 = 0x26B;
our $FLAG_HIDDEN_ITEM_14 = 0x26C;
our $FLAG_HIDDEN_ITEM_15 = 0x26D;
our $FLAG_HIDDEN_ITEM_16 = 0x26E;
our $FLAG_HIDDEN_ITEM_17 = 0x26F;
our $FLAG_HIDDEN_ITEM_18 = 0x270;
our $FLAG_HIDDEN_ITEM_19 = 0x271;
our $FLAG_HIDDEN_ITEM_1A = 0x272;
our $FLAG_HIDDEN_ITEM_1B = 0x273;
our $FLAG_HIDDEN_ITEM_1C = 0x274;
our $FLAG_HIDDEN_ITEM_1D = 0x275;
our $FLAG_HIDDEN_ITEM_1E = 0x276;
our $FLAG_HIDDEN_ITEM_1F = 0x277;
our $FLAG_HIDDEN_ITEM_20 = 0x278;
our $FLAG_HIDDEN_ITEM_21 = 0x279;
our $FLAG_HIDDEN_ITEM_22 = 0x27A;
our $FLAG_HIDDEN_ITEM_23 = 0x27B;
our $FLAG_HIDDEN_ITEM_24 = 0x27C;
our $FLAG_HIDDEN_ITEM_25 = 0x27D;
our $FLAG_HIDDEN_ITEM_26 = 0x27E;
our $FLAG_HIDDEN_ITEM_27 = 0x27F;
our $FLAG_HIDDEN_ITEM_28 = 0x280;
our $FLAG_HIDDEN_ITEM_29 = 0x281;
our $FLAG_HIDDEN_ITEM_2A = 0x282;
our $FLAG_HIDDEN_ITEM_2B = 0x283;
our $FLAG_HIDDEN_ITEM_2C = 0x284;
our $FLAG_HIDDEN_ITEM_2D = 0x285;
our $FLAG_HIDDEN_ITEM_2E = 0x286;
our $FLAG_HIDDEN_ITEM_2F = 0x287;
our $FLAG_HIDDEN_ITEM_30 = 0x288;
our $FLAG_HIDDEN_ITEM_31 = 0x289;
our $FLAG_HIDDEN_ITEM_32 = 0x28A;
our $FLAG_HIDDEN_ITEM_33 = 0x28B;
our $FLAG_HIDDEN_ITEM_34 = 0x28C;
our $FLAG_HIDDEN_ITEM_35 = 0x28D;
our $FLAG_HIDDEN_ITEM_36 = 0x28E;
our $FLAG_HIDDEN_ITEM_37 = 0x28F;
our $FLAG_HIDDEN_ITEM_38 = 0x290;
our $FLAG_HIDDEN_ITEM_39 = 0x291;
our $FLAG_HIDDEN_ITEM_3A = 0x292;
our $FLAG_HIDDEN_ITEM_3B = 0x293;
our $FLAG_HIDDEN_ITEM_3C = 0x294;
our $FLAG_HIDDEN_ITEM_3D = 0x295;
our $FLAG_HIDDEN_ITEM_3E = 0x296;
our $FLAG_HIDDEN_ITEM_3F = 0x297;
our $FLAG_HIDDEN_ITEM_40 = 0x298;
our $FLAG_HIDDEN_ITEM_41 = 0x299;
our $FLAG_HIDDEN_ITEM_42 = 0x29A;
our $FLAG_HIDDEN_ITEM_43 = 0x29B;
our $FLAG_HIDDEN_ITEM_44 = 0x29C;
our $FLAG_HIDDEN_ITEM_45 = 0x29D;
our $FLAG_HIDDEN_ITEM_46 = 0x29E;
our $FLAG_HIDDEN_ITEM_47 = 0x29F;
our $FLAG_HIDDEN_ITEM_48 = 0x2A0;
our $FLAG_HIDDEN_ITEM_49 = 0x2A1;
our $FLAG_HIDDEN_ITEM_4A = 0x2A2;
our $FLAG_HIDDEN_ITEM_4B = 0x2A3;
our $FLAG_HIDDEN_ITEM_4C = 0x2A4;
our $FLAG_HIDDEN_ITEM_4D = 0x2A5;
our $FLAG_HIDDEN_ITEM_4E = 0x2A6;
our $FLAG_HIDDEN_ITEM_4F = 0x2A7;
our $FLAG_HIDDEN_ITEM_50 = 0x2A8;
our $FLAG_HIDDEN_ITEM_51 = 0x2A9;
our $FLAG_HIDDEN_ITEM_52 = 0x2AA;
our $FLAG_HIDDEN_ITEM_53 = 0x2AB;
our $FLAG_HIDDEN_ITEM_54 = 0x2AC;
our $FLAG_HIDDEN_ITEM_55 = 0x2AD;
our $FLAG_HIDDEN_ITEM_56 = 0x2AE;
our $FLAG_HIDDEN_ITEM_57 = 0x2AF;
our $FLAG_HIDDEN_ITEM_58 = 0x2B0;
our $FLAG_HIDDEN_ITEM_59 = 0x2B1;
our $FLAG_HIDDEN_ITEM_5A = 0x2B2;
our $FLAG_HIDDEN_ITEM_5B = 0x2B3;
our $FLAG_HIDDEN_ITEM_5C = 0x2B4;
our $FLAG_HIDDEN_ITEM_5D = 0x2B5;
our $FLAG_HIDDEN_ITEM_5E = 0x2B6;
our $FLAG_HIDDEN_ITEM_5F = 0x2B7;
our $FLAG_HIDDEN_ITEM_BLACK_GLASSES = 0x2B8;
our $FLAG_HIDDEN_ITEM_61 = 0x2B9;
our $FLAG_HIDE_BIRCH_STARTERS_BAG = 0x2BC;
our $FLAG_HIDE_BIRCH_BATTLE_POOCHYENA = 0x2D0;
our $FLAG_HIDE_BIRCH_IN_LAB = 0x2D1;
our $FLAG_HIDE_MAY_UPSTAIRS = 0x2D2;
our $FLAG_HIDE_RIVAL_ROUTE103 = 0x2D3;
our $FLAG_HIDE_DEVON_PETALBURG_WOODS = 0x2D4;
our $FLAG_HIDE_EVIL_TEAM_PETALBURG_WOODS = 0x2D5;
our $FLAG_HIDE_WALLY_PETALBURG = 0x2D6;
our $FLAG_HIDE_STEVENS_LETTER = 0x2D7;
our $FLAG_HIDE_WALLY_MOM_PETALBURG_1 = 0x2D8;
our $FLAG_HIDE_GRUNT_RUSTBORO = 0x2DB;
our $FLAG_HIDE_DEVON_RUSTBORO = 0x2DC;
our $FLAG_HIDE_SLEEPING_MON_SEAFLOOR_CAVERN = 0x2DD;
our $FLAG_HIDE_NORMAN_LITTLEROOT = 0x2DE;
our $FLAG_UNKNOWN_2E1 = 0x2E1;
our $FLAG_HIDE_MR_BRINEY_ROUTE104 = 0x2E2;
our $FLAG_HIDE_MR_BRINEY_ROUTE104_HOUSE = 0x2E3;
our $FLAG_HIDE_MR_BRINEY_DEWFORD_TOWN = 0x2E4;
our $FLAG_HIDE_MR_BRINEY_ROUTE109 = 0x2E5;
our $FLAG_HIDE_MR_BRINEY_BOAT_ROUTE104 = 0x2E6;
our $FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD = 0x2E7;
our $FLAG_HIDE_MR_BRINEY_BOAT_ROUTE109 = 0x2E8;
our $FLAG_UNKNOWN_2EB = 0x2EB;
our $FLAG_UNKNOWN_2EC = 0x2EC;
our $FLAG_UNKNOWN_2ED = 0x2ED;
our $FLAG_HIDE_POOCHYENA_ROUTE101 = 0x2EE;
our $FLAG_HIDE_WALLY_DEFEATED_VICTORY_ROAD = 0x2EF;
our $FLAG_HIDE_MOM_LITTLEROOT = 0x2F0;
our $FLAG_HIDE_MACHOKE_MOVER_1 = 0x2F2;
our $FLAG_HIDE_MACHOKE_MOVER_2 = 0x2F3;
our $FLAG_UNKNOWN_2F4 = 0x2F4;
our $FLAG_HIDE_MOM_UPSTAIRS = 0x2F5;
our $FLAG_HIDE_BRENDAN_MOM_DOWNSTAIRS = 0x2F6;
our $FLAG_HIDE_MAY_MOM_DOWNSTAIRS = 0x2F7;
our $FLAG_HIDE_BRENDAN_UPSTAIRS = 0x2F8;
our $FLAG_HIDE_MOVING_TRUCK_BRENDAN = 0x2F9;
our $FLAG_HIDE_MOVING_TRUCK_MAY = 0x2FA;
our $FLAG_HIDE_VICTOR_WINSTRATE = 0x300;
our $FLAG_HIDE_VICTORIA_WINSTRATE = 0x301;
our $FLAG_HIDE_VIVI_WINSTRATE = 0x302;
our $FLAG_HIDE_VICKI_WINSTRATE = 0x303;
our $FLAG_HIDE_NORMAN_PETALBURG_GYM = 0x304;
our $FLAG_HIDE_RAYQUAZA = 0x305;
our $FLAG_HIDE_LILYCOVE_CONTEST_ATTENDENT_1 = 0x306;
our $FLAG_HIDE_LILYCOVE_MUSEUM_CURATOR = 0x307;
our $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_LADY = 0x308;
our $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_GIRL = 0x309;
our $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_MAN = 0x30A;
our $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTER = 0x30B;
our $FLAG_HIDE_LILYCOVE_MUSEUM_VISITORS = 0x30C;
our $FLAG_HIDE_PETALBURG_GYM_GUIDE = 0x30D;
our $FLAG_UNKNOWN_30E = 0x30E;
our $FLAG_UNKNOWN_30F = 0x30F;
our $FLAG_HIDE_BRENDAN_MOM = 0x310;
our $FLAG_HIDE_MAY_MOM = 0x311;
our $FLAG_HIDE_FANCLUB_OLD_LADY = 0x315;
our $FLAG_HIDE_FANCLUB_BOY = 0x316;
our $FLAG_HIDE_FANCLUB_LITTLE_BOY = 0x317;
our $FLAG_HIDE_FANCLUB_LADY = 0x318;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE111_1 = 0x31C;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE118_1 = 0x31D;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE120_1 = 0x31E;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE111_2 = 0x31F;
our $FLAG_HIDE_CONTEST_REPORTER_FALLARBOR = 0x320;
our $FLAG_HIDE_CONTEST_REPORTER_VERDANTURF = 0x321;
our $FLAG_HIDE_CONTEST_REPORTER_LILYCOVE = 0x322;
our $FLAG_HIDE_CONTEST_REPORTER_SLATEPORT = 0x323;
our $FLAG_HIDE_WALLY_MAUVILLE = 0x324;
our $FLAG_HIDE_WALLY_FATHER_MAUVILLE = 0x325;
our $FLAG_HIDE_WALLY_WANDAS_HOUSE = 0x326;
our $FLAG_HIDE_BOYFRIEND_RUSTURF_TUNNEL = 0x327;
our $FLAG_HIDE_BOYFRIEND_WANDAS_HOUSE = 0x328;
our $FLAG_HIDE_WALLY_FATHER_WANDAS_HOUSE = 0x329;
our $FLAG_HIDE_WALLY_FATHER_PETALBURG = 0x32B;
our $FLAG_HIDE_WALLY_MOTHER_PETALBURG = 0x32C;
our $FLAG_HIDE_LOST_GLASSES_MAN = 0x32D;
our $FLAG_HIDE_RIVAL_RUSTBORO = 0x32E;
our $FLAG_HIDE_WALLACE_SOOTOPOLIS_GYM = 0x32F;
our $FLAG_HIDE_WALLACE_SOOTOPOLIS = 0x330;
our $FLAG_HIDE_GRUNTS_BLOCKING_CABLE_CAR = 0x333;
our $FLAG_HIDE_GRUNT_1_BLOCKING_HIDEOUT = 0x335;
our $FLAG_HIDE_GRUNT_2_BLOCKING_HIDEOUT = 0x336;
our $FLAG_UNKNOWN_337 = 0x337;
our $FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN = 0x339;
our $FLAG_HIDE_EVIL_LEADER_SEAFLOOR_CAVERN = 0x33C;
our $FLAG_HIDE_OTHER_LEADER_SEAFLOOR_CAVERN = 0x33D;
our $FLAG_HIDE_OTHER_TEAM_GRUNTS_SEAFLOOR_CAVERN = 0x33F;
our $FLAG_HIDE_STEVEN_GRANITE_CAVE = 0x341;
our $FLAG_HIDE_STEVEN_ROUTE128 = 0x342;
our $FLAG_HIDE_GABBY_AND_TY_SLATEPORT = 0x343;
our $FLAG_HIDE_STERN_SLATEPORT = 0x348;
our $FLAG_HIDE_STERN_SLATEPORT_HARBOR = 0x349;
our $FLAG_UNKNOWN_34B = 0x34B;
our $FLAG_UNKNOWN_34C = 0x34C;
our $FLAG_HIDE_GRUNT_1_SLATEPORT_HARBOR = 0x34D;
our $FLAG_HIDE_GRUNT_2_SLATEPORT_HARBOR = 0x34E;
our $FLAG_UNKNOWN_34F = 0x34F;
our $FLAG_HIDE_SUBMARINE_SHADOW_SLATEPORT_HARBOR = 0x350;
our $FLAG_HIDE_MAY_PICHU_DOLL = 0x351;
our $FLAG_HIDE_RIVAL_ROUTE119 = 0x353;
our $FLAG_HIDE_GRUNTS_LILYCOVE = 0x354;
our $FLAG_HIDE_SOOTOPOLIS_RESIDENTS = 0x356;
our $FLAG_HIDE_CAVE_OF_ORIGIN_ENTRANCE_WOMAN_1 = 0x357;
our $FLAG_HIDE_CAVE_OF_ORIGIN_ENTRANCE_WOMAN_2 = 0x358;
our $FLAG_HIDE_WALLY_BATTLE_VICTORY_ROAD = 0x35A;
our $FLAG_HIDE_AWAKENED_MON_SEAFLOOR_CAVERN = 0x35B;
our $FLAG_HIDE_SS_TIDAL_SLATEPORT_HARBOR = 0x35C;
our $FLAG_HIDE_SS_TIDAL_LILYCOVE_HARBOR = 0x35D;
our $FLAG_HIDE_WALLY_PETALBURG_GYM = 0x362;
our $FLAG_UNKNOWN_363 = 0x363;
our $FLAG_HIDE_FAT_MAN_LITTLEROOT = 0x364;
our $FLAG_HIDE_BRINEY_SLATEPORT_SHIPYARD = 0x365;
our $FLAG_HIDE_LANETTE = 0x366;
our $FLAG_HIDE_LANETTE_FALLARBOR = 0x367;
our $FLAG_HIDE_TRICKMASTER_ENTRANCE = 0x368;
our $FLAG_HIDE_MT_CHIMNEY_PEOPLE = 0x36D;
our $FLAG_HIDE_GRUNT_RUSTURF_TUNNEL = 0x36E;
our $FLAG_HIDE_BRINEY_RUSTURF_TUNNEL = 0x36F;
our $FLAG_HIDE_PEEKO_RUSTURF_TUNNEL = 0x370;
our $FLAG_HIDE_PEEKO_BRINEY_HOUSE = 0x371;
our $FLAG_HIDE_EVIL_TEAM_SLATEPORT = 0x372;
our $FLAG_HIDE_EVIL_TEAM_OCEANIC_MUSEUM = 0x373;
our $FLAG_HIDE_GRUNT_1_OCEANIC_MUSEUM_2F = 0x374;
our $FLAG_HIDE_GRUNT_2_OCEANIC_MUSEUM_2F = 0x375;
our $FLAG_HIDE_EVIL_TEAM_LEADER_OCEANIC_MUSEUM_2F = 0x376;
our $FLAG_HIDE_STERN_OCEANIC_MUSEUM_2F = 0x377;
our $FLAG_HIDE_BATTLE_TOWER_OPPONENT = 0x378;
our $FLAG_HIDE_RIVAL_BIRCH_LAB = 0x379;
our $FLAG_HIDE_EVIL_TEAM_WEATHER_INSTITUTE = 0x37A;
our $FLAG_HIDE_BRINEY_ROUTE116 = 0x37B;
our $FLAG_HIDE_WEATHER_INSTITUTE_WORKERS_1F = 0x37C;
our $FLAG_HIDE_WEATHER_INSTITUTE_WORKERS_2F = 0x37D;
our $FLAG_HIDE_TUNNER_DIGGER_ROUTE116 = 0x37E;
our $FLAG_HIDE_ARTIST_LILCOVE_CONTEST = 0x37F;
our $FLAG_UNKNOWN_BIRCH_380 = 0x380;
our $FLAG_HIDE_BIRCH_ROUTE101 = 0x381;
our $FLAG_HIDE_BIRCH_ROUTE103 = 0x382;
our $FLAG_HIDE_TRICKMASTER_END = 0x383;
our $FLAG_HIDE_EVIL_TEAM_ROUTE110 = 0x384;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE118_2 = 0x385;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE120_2 = 0x386;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE111_3 = 0x387;
our $FLAG_HIDE_GABBY_AND_TY_ROUTE118_3 = 0x388;
our $FLAG_HIDE_WORKERS_SLATEPORT_HARBOR = 0x389;
our $FLAG_HIDE_FLOWER_SHOP_WORKER_OUTSIDE = 0x38A;
our $FLAG_HIDE_AZURILL_FALLARBOR = 0x38B;
our $FLAG_HIDE_FERRY_ATTENDANT_LILYCOVE = 0x38C;
our $FLAG_HIDE_FERRY_SAILOR_LILYCOVE = 0x38D;
our $FLAG_HIDE_LATIOS_OR_LATIAS_FLYING = 0x38E;
our $FLAG_HIDE_LATIOS_OR_LATIAS_STATIONARY = 0x38F;
our $FLAG_HIDE_WATTSON_MAUVILLE = 0x390;
our $FLAG_HIDE_WATTSON_MAUVILLE_GYM = 0x391;
our $FLAG_HIDE_GRUNTS_ROUTE121 = 0x392;
our $FLAG_UNKNOWN_393 = 0x393;
our $FLAG_HIDE_LEADER_MT_PYRE_SUMMIT = 0x394;
our $FLAG_HIDE_GRUNTS_MT_PYRE_SUMMIT = 0x395;
our $FLAG_HIDE_REPORTER_BATTLE_TOWER = 0x396;
our $FLAG_HIDE_RIVAL_ROUTE110 = 0x397;
our $FLAG_HIDE_RIVAL_CHAMPIONS_ROOM = 0x398;
our $FLAG_HIDE_BIRCH_CHAMPIONS_ROOM = 0x399;
our $FLAG_HIDE_RIVAL_ON_BIKE_ROUTE110 = 0x39A;
our $FLAG_HIDE_RIVAL_ROUTE119_ON_BIKE = 0x39B;
our $FLAG_HIDE_GRUNTS_HIDEOUTS = 0x39C;
our $FLAG_HIDE_LILYCOVE_MOTEL_PEOPLE = 0x39D;
our $FLAG_HIDE_EVIL_TEAM_MT_CHIMNEY = 0x39E;
our $FLAG_HIDE_OTHER_TEAM_MT_CHIMNEY = 0x39F;
our $FLAG_HIDE_PROF_COSMO_FALLARBOR = 0x3A0;
our $FLAG_HIDE_RIVAL_LAVARIDGE_1 = 0x3A1;
our $FLAG_HIDE_RIVAL_LAVARIDGE_2 = 0x3A2;
our $FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1 = 0x3A3;
our $FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2 = 0x3A4;
our $FLAG_HIDE_WINGULL_FORTREE_HOUSE = 0x3A5;
our $FLAG_HIDE_WINGULL_MOSSDEEP_HOUSE = 0x3A6;
our $FLAG_HIDE_REGIROCK = 0x3A7;
our $FLAG_HIDE_REGICE = 0x3A8;
our $FLAG_HIDE_REGISTEEL = 0x3A9;
our $FLAG_HIDE_GRUNTS_METEOR_FALLS_1F = 0x3AA;
our $FLAG_HIDE_OTHER_TEAM_METEOR_FALLS_1F = 0x3AB;
our $FLAG_HIDE_SLUDGE_BOMB_MAN_DEWFORD_HALL = 0x3AC;
our $FLAG_HIDE_AWARD_MAN_BATTLE_TOWER = 0x3AD;
our $FLAG_HIDE_PROF_COSMO_METEOR_FALLS = 0x3AE;
our $FLAG_HIDE_SUBMARINE_SHADOW_HIDEOUT = 0x3AF;
our $FLAG_HIDE_EVIL_LEADER_ROUTE128 = 0x3B0;
our $FLAG_HIDE_OTHER_LEADER_ROUTE128 = 0x3B1;
our $FLAG_HIDE_EVIL_TEAM_GRUNTS_SEAFLOOR_CAVERN = 0x3B2;
our $FLAG_HIDE_DEVON_EMPLOYEE_ROUTE116 = 0x3B3;
our $FLAG_HIDE_TM_SALESMAN_SLATEPORT = 0x3B4;
our $FLAG_HIDE_EMPLOYEE_DEVON_CORP_3F = 0x3B5;
our $FLAG_HIDE_BRINEY_AND_PEEKO_SS_TIDAL = 0x3B6;
our $FLAG_HIDE_TM_49_GIVER_SS_TIDAL = 0x3B7;
our $FLAG_HIDE_TOOK_SHOAL_SALT_1 = 0x3B8;
our $FLAG_HIDE_TOOK_SHOAL_SALT_2 = 0x3B9;
our $FLAG_HIDE_TOOK_SHOAL_SALT_3 = 0x3BA;
our $FLAG_HIDE_TOOK_SHOAL_SALT_4 = 0x3BB;
our $FLAG_HIDE_TOOK_SHOAL_SHELL_1 = 0x3BC;
our $FLAG_HIDE_TOOK_SHOAL_SHELL_2 = 0x3BD;
our $FLAG_HIDE_TOOK_SHOAL_SHELL_3 = 0x3BE;
our $FLAG_HIDE_TOOK_SHOAL_SHELL_4 = 0x3BF;
our $FLAG_HIDE_SECRET_POWER_MAN = 0x3C0;
our $FLAG_HIDE_OCEANIC_MUSEUM_VISITORS = 0x3C1;
our $FLAG_HIDE_ROOFTOP_LADY_LILYCOVE_MART = 0x3C2;
our $FLAG_HIDE_ROOT_FOSSIL = 0x3C3;
our $FLAG_HIDE_CLAW_FOSSIL = 0x3C4;
our $FLAG_HIDE_SCARED_GRUNT_OCEANIC_MUSEUM = 0x3C5;
our $FLAG_HIDE_STEVEN_ROUTE118 = 0x3C6;
our $FLAG_HIDE_STEVEN_STEVENS_HOUSE = 0x3C7;
our $FLAG_HIDE_BELDUM_BALL_STEVENS_HOUSE = 0x3C8;
our $FLAG_HIDE_KECLEON_FORTREE = 0x3C9;
our $FLAG_HIDE_KECLEON_ROUTE120_1 = 0x3CA;
our $FLAG_HIDE_RIVAL_LILYCOVE_MART = 0x3CB;
our $FLAG_HIDE_STEVEN_ROUTE120 = 0x3CC;
our $FLAG_HIDE_STEVEN_SOOTOPOLIS = 0x3CD;
our $FLAG_HIDE_VOLTORB_1_NEW_MAUVILLE = 0x3CE;
our $FLAG_HIDE_VOLTORB_2_NEW_MAUVILLE = 0x3CF;
our $FLAG_HIDE_VOLTORB_3_NEW_MAUVILLE = 0x3D0;
our $FLAG_HIDE_ELECTRODE_1_HIDEOUT = 0x3D1;
our $FLAG_HIDE_ELECTRODE_2_HIDEOUT = 0x3D2;
our $FLAG_HIDE_RIVAL_OLDALE_TOWN = 0x3D3;
our $FLAG_HIDE_UNDERWATER_SUBMARINE_INTERACTION = 0x3D4;
our $FLAG_HIDE_KECLEON_ROUTE120_2 = 0x3D5;
our $FLAG_HIDE_KECLEON_ROUTE120_3 = 0x3D6;
our $FLAG_HIDE_GIRLFRIEND_RUSTURF_TUNNEL = 0x3D7;
our $FLAG_HIDE_GIRLFRIEND_WANDAS_HOUSE = 0x3D8;
our $FLAG_HIDE_KECLEON_ROUTE120_4 = 0x3D9;
our $FLAG_HIDE_KECLEON_ROUTE120_5 = 0x3DA;
our $FLAG_HIDE_KECLEON_ROUTE120_6 = 0x3DB;
our $FLAG_HIDE_KECLEON_ROUTE120_7 = 0x3DC;
our $FLAG_HIDE_KECLEON_ROUTE119_1 = 0x3DD;
our $FLAG_HIDE_KECLEON_ROUTE119_2 = 0x3DE;
our $FLAG_HIDE_BOY_ROUTE101 = 0x3DF;
our $FLAG_ITEM_ROUTE102_1 = 0x3E8;
our $FLAG_ITEM_ROUTE116_1 = 0x3E9;
our $FLAG_ITEM_ROUTE104_1 = 0x3EA;
our $FLAG_ITEM_ROUTE105_1 = 0x3EB;
our $FLAG_ITEM_ROUTE106_1 = 0x3EC;
our $FLAG_ITEM_ROUTE109_1 = 0x3ED;
our $FLAG_ITEM_ROUTE110_1 = 0x3EE;
our $FLAG_ITEM_ROUTE110_2 = 0x3EF;
our $FLAG_ITEM_ROUTE111_1 = 0x3F0;
our $FLAG_ITEM_ROUTE111_2 = 0x3F1;
our $FLAG_ITEM_ROUTE111_3 = 0x3F2;
our $FLAG_ITEM_ROUTE112_1 = 0x3F3;
our $FLAG_ITEM_ROUTE113_1 = 0x3F4;
our $FLAG_ITEM_ROUTE113_2 = 0x3F5;
our $FLAG_ITEM_ROUTE114_1 = 0x3F6;
our $FLAG_ITEM_ROUTE114_2 = 0x3F7;
our $FLAG_ITEM_ROUTE115_1 = 0x3F8;
our $FLAG_ITEM_ROUTE115_2 = 0x3F9;
our $FLAG_ITEM_ROUTE115_3 = 0x3FA;
our $FLAG_ITEM_ROUTE116_2 = 0x3FB;
our $FLAG_ITEM_ROUTE116_3 = 0x3FC;
our $FLAG_ITEM_ROUTE116_4 = 0x3FD;
our $FLAG_ITEM_ROUTE117_1 = 0x3FE;
our $FLAG_ITEM_ROUTE117_2 = 0x3FF;
our $FLAG_ITEM_ROUTE119_1 = 0x400;
our $FLAG_ITEM_ROUTE119_2 = 0x401;
our $FLAG_ITEM_ROUTE119_3 = 0x402;
our $FLAG_ITEM_ROUTE119_4 = 0x403;
our $FLAG_ITEM_ROUTE119_5 = 0x404;
our $FLAG_ITEM_ROUTE119_6 = 0x405;
our $FLAG_ITEM_ROUTE120_1 = 0x406;
our $FLAG_ITEM_ROUTE120_2 = 0x407;
our $FLAG_ITEM_ROUTE123_1 = 0x408;
our $FLAG_ITEM_ROUTE123_2 = 0x409;
our $FLAG_ITEM_ROUTE127_1 = 0x40A;
our $FLAG_ITEM_ROUTE127_2 = 0x40B;
our $FLAG_ITEM_ROUTE132_1 = 0x40C;
our $FLAG_ITEM_ROUTE133_1 = 0x40D;
our $FLAG_ITEM_ROUTE133_2 = 0x40E;
our $FLAG_ITEM_PETALBURG_1 = 0x40F;
our $FLAG_ITEM_PETALBURG_2 = 0x410;
our $FLAG_ITEM_RUSTBORO_1 = 0x411;
our $FLAG_ITEM_LILYCOVE_1 = 0x412;
our $FLAG_ITEM_MOSSDEEP_1 = 0x413;
our $FLAG_ITEM_METEOR_FALLS_1F_1R_1 = 0x414;
our $FLAG_ITEM_METEOR_FALLS_1F_1R_2 = 0x415;
our $FLAG_ITEM_METEOR_FALLS_1F_1R_3 = 0x416;
our $FLAG_ITEM_METEOR_FALLS_1F_1R_4 = 0x417;
our $FLAG_ITEM_RUSTURF_TUNNEL_1 = 0x418;
our $FLAG_ITEM_RUSTURF_TUNNEL_2 = 0x419;
our $FLAG_ITEM_GRANITE_CAVE_1F_1 = 0x41A;
our $FLAG_ITEM_GRANITE_CAVE_B1F_1 = 0x41B;
our $FLAG_ITEM_MT_PYRE_5F_1 = 0x41C;
our $FLAG_ITEM_GRANITE_CAVE_B2F_1 = 0x41D;
our $FLAG_ITEM_GRANITE_CAVE_B2F_2 = 0x41E;
our $FLAG_ITEM_PETALBURG_WOODS_1 = 0x41F;
our $FLAG_ITEM_PETALBURG_WOODS_2 = 0x420;
our $FLAG_ITEM_ROUTE104_2 = 0x421;
our $FLAG_ITEM_PETALBURG_WOODS_3 = 0x422;
our $FLAG_ITEM_CAVE_OF_ORIGIN_B3F_1 = 0x423;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_1_1 = 0x424;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_1 = 0x425;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_2 = 0x426;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_1 = 0x427;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_2 = 0x428;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_4_1 = 0x429;
our $FLAG_ITEM_ROUTE124_1 = 0x42A;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_6_1 = 0x42B;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_7_1 = 0x42C;
our $FLAG_ITEM_TRICK_HOUSE_PUZZLE_8_1 = 0x42D;
our $FLAG_ITEM_JAGGED_PASS_1 = 0x42E;
our $FLAG_ITEM_AQUA_HIDEOUT_B1F_1 = 0x42F;
our $FLAG_ITEM_AQUA_HIDEOUT_B2F_1 = 0x430;
our $FLAG_ITEM_MT_PYRE_EXTERIOR_1 = 0x431;
our $FLAG_ITEM_MT_PYRE_EXTERIOR_2 = 0x432;
our $FLAG_ITEM_NEW_MAUVILLE_INSIDE_1 = 0x433;
our $FLAG_ITEM_NEW_MAUVILLE_INSIDE_2 = 0x434;
our $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_1 = 0x435;
our $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_2 = 0x436;
our $FLAG_ITEM_SCORCHED_SLAB_1 = 0x437;
our $FLAG_ITEM_METEOR_FALLS_B1F_2R_1 = 0x438;
our $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ENTRANCE_1 = 0x439;
our $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_INNER_ROOM_1 = 0x43A;
our $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM_1 = 0x43B;
our $FLAG_ITEM_VICTORY_ROAD_1F_1 = 0x43C;
our $FLAG_ITEM_VICTORY_ROAD_1F_2 = 0x43D;
our $FLAG_ITEM_VICTORY_ROAD_B1F_1 = 0x43E;
our $FLAG_ITEM_VICTORY_ROAD_B1F_2 = 0x43F;
our $FLAG_ITEM_VICTORY_ROAD_B2F_1 = 0x440;
our $FLAG_ITEM_MT_PYRE_6F_1 = 0x441;
our $FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_1 = 0x442;
our $FLAG_ITEM_FIERY_PATH_1 = 0x443;
our $FLAG_ITEM_ROUTE124_2 = 0x444;
our $FLAG_ITEM_ROUTE124_3 = 0x445;
our $FLAG_ITEM_SAFARI_ZONE_NORTHWEST_1 = 0x446;
our $FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_1 = 0x447;
our $FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_1 = 0x448;
our $FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_1 = 0x449;
our $FLAG_ITEM_ABANDONED_SHIP_ROOM_B1F_1 = 0x44A;
our $FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_1 = 0x44B;
our $FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_1 = 0x44C;
our $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_3 = 0x44D;
our $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_4 = 0x44E;
our $FLAG_ITEM_ROUTE121_1 = 0x44F;
our $FLAG_ITEM_ROUTE123_3 = 0x450;
our $FLAG_ITEM_ROUTE126_1 = 0x451;
our $FLAG_ITEM_ROUTE119_7 = 0x452;
our $FLAG_ITEM_ROUTE120_3 = 0x453;
our $FLAG_ITEM_ROUTE120_4 = 0x454;
our $FLAG_ITEM_ROUTE123_4 = 0x455;
our $FLAG_ITEM_NEW_MAUVILLE_INSIDE_3 = 0x456;
our $FLAG_ITEM_FIERY_PATH_2 = 0x457;
our $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ICE_ROOM_1 = 0x458;
our $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ICE_ROOM_2 = 0x459;
our $FLAG_ITEM_ROUTE103_1 = 0x45A;
our $FLAG_ITEM_ROUTE104_3 = 0x45B;
our $FLAG_ITEM_MAUVILLE_1 = 0x45C;
our $FLAG_ITEM_PETALBURG_WOODS_4 = 0x45D;
our $FLAG_ITEM_ROUTE115_4 = 0x45E;
our $FLAG_ITEM_SAFARI_ZONE_NORTHEAST_1 = 0x45F;
our $FLAG_ITEM_MT_PYRE_3F_1 = 0x460;
our $FLAG_ITEM_ROUTE118_1 = 0x461;
our $FLAG_ITEM_NEW_MAUVILLE_INSIDE_4 = 0x462;
our $FLAG_ITEM_NEW_MAUVILLE_INSIDE_5 = 0x463;
our $FLAG_ITEM_AQUA_HIDEOUT_B1F_2 = 0x464;
our $FLAG_ITEM_MAGMA_HIDEOUT_B1F_1 = 0x465;
our $FLAG_ITEM_MAGMA_HIDEOUT_B1F_2 = 0x466;
our $FLAG_ITEM_MAGMA_HIDEOUT_B2F_1 = 0x467;
our $FLAG_ITEM_MT_PYRE_2F_1 = 0x469;
our $FLAG_ITEM_MT_PYRE_4F_1 = 0x46A;
our $FLAG_ITEM_SAFARI_ZONE_SOUTHWEST = 0x46B;
our $FLAG_ITEM_AQUA_HIDEOUT_B1F_3 = 0x46C;
our $FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 = 0x46D;
our $FLAG_ITEM_MAGMA_HIDEOUT_B1F_3 = 0x46E;
our $FLAG_ITEM_ROUTE104_4 = 0x46F;
our $FLAG_DEFEATED_RUSTBORO_GYM = 0x4B1;
our $FLAG_DEFEATED_DEWFORD_GYM = 0x4B4;
our $FLAG_DEFEATED_MAUVILLE_GYM = 0x4B8;
our $FLAG_DEFEATED_LAVARIDGE_GYM = 0x4BD;
our $FLAG_DEFEATED_PETALBURG_GYM = 0x4C1;
our $FLAG_DEFEATED_FORTREE_GYM = 0x4C9;
our $FLAG_DEFEATED_MOSSDEEP_GYM = 0x4CD;
our $FLAG_DEFEATED_SOOTOPOLIS_GYM = 0x4D4;
our $FLAG_DEFEATED_ELITE_4_SYDNEY = 0x4DD;
our $FLAG_DEFEATED_ELITE_4_PHOEBE = 0x4DE;
our $FLAG_DEFEATED_ELITE_4_GLACIA = 0x4DF;
our $FLAG_DEFEATED_ELITE_4_DRAKE = 0x4E0;
our $TRAINER_FLAG_START = 0x500;
our $NUMBER_OF_TRAINERS = 693;
our $SYSTEM_FLAGS = ( $TRAINER_FLAG_START + $NUMBER_OF_TRAINERS + 0x4B );
our $FLAG_SYS_POKEMON_GET = ( $SYSTEM_FLAGS + 0x00 );
our $FLAG_SYS_POKEDEX_GET = ( $SYSTEM_FLAGS + 0x01 );
our $FLAG_SYS_POKENAV_GET = ( $SYSTEM_FLAGS + 0x02 );
our $FLAG_SYS_GAME_CLEAR = ( $SYSTEM_FLAGS + 0x04 );
our $FLAG_SYS_CHAT_USED = ( $SYSTEM_FLAGS + 0x05 );
our $FLAG_SYS_HIPSTER_MEET = ( $SYSTEM_FLAGS + 0x06 );
our $FLAG_BADGE01_GET = ( $SYSTEM_FLAGS + 0x07 );
our $FLAG_BADGE02_GET = ( $SYSTEM_FLAGS + 0x08 );
our $FLAG_BADGE03_GET = ( $SYSTEM_FLAGS + 0x09 );
our $FLAG_BADGE04_GET = ( $SYSTEM_FLAGS + 0x0A );
our $FLAG_BADGE05_GET = ( $SYSTEM_FLAGS + 0x0B );
our $FLAG_BADGE06_GET = ( $SYSTEM_FLAGS + 0x0C );
our $FLAG_BADGE07_GET = ( $SYSTEM_FLAGS + 0x0D );
our $FLAG_BADGE08_GET = ( $SYSTEM_FLAGS + 0x0E );
our $FLAG_VISITED_LITTLEROOT_TOWN = ( $SYSTEM_FLAGS + 0x0F );
our $FLAG_VISITED_OLDALE_TOWN = ( $SYSTEM_FLAGS + 0x10 );
our $FLAG_VISITED_DEWFORD_TOWN = ( $SYSTEM_FLAGS + 0x11 );
our $FLAG_VISITED_LAVARIDGE_TOWN = ( $SYSTEM_FLAGS + 0x12 );
our $FLAG_VISITED_FALLARBOR_TOWN = ( $SYSTEM_FLAGS + 0x13 );
our $FLAG_VISITED_VERDANTURF_TOWN = ( $SYSTEM_FLAGS + 0x14 );
our $FLAG_VISITED_PACIFIDLOG_TOWN = ( $SYSTEM_FLAGS + 0x15 );
our $FLAG_VISITED_PETALBURG_CITY = ( $SYSTEM_FLAGS + 0x16 );
our $FLAG_VISITED_SLATEPORT_CITY = ( $SYSTEM_FLAGS + 0x17 );
our $FLAG_VISITED_MAUVILLE_CITY = ( $SYSTEM_FLAGS + 0x18 );
our $FLAG_VISITED_RUSTBORO_CITY = ( $SYSTEM_FLAGS + 0x19 );
our $FLAG_VISITED_FORTREE_CITY = ( $SYSTEM_FLAGS + 0x1A );
our $FLAG_VISITED_LILYCOVE_CITY = ( $SYSTEM_FLAGS + 0x1B );
our $FLAG_VISITED_MOSSDEEP_CITY = ( $SYSTEM_FLAGS + 0x1C );
our $FLAG_VISITED_SOOTOPOLIS_CITY = ( $SYSTEM_FLAGS + 0x1D );
our $FLAG_VISITED_EVER_GRANDE_CITY = ( $SYSTEM_FLAGS + 0x1E );
our $FLAG_SYS_USE_FLASH = ( $SYSTEM_FLAGS + 0x28 );
our $FLAG_SYS_USE_STRENGTH = ( $SYSTEM_FLAGS + 0x29 );
our $FLAG_SYS_WEATHER_CTRL = ( $SYSTEM_FLAGS + 0x2A );
our $FLAG_SYS_CYCLING_ROAD = ( $SYSTEM_FLAGS + 0x2B );
our $FLAG_SYS_SAFARI_MODE = ( $SYSTEM_FLAGS + 0x2C );
our $FLAG_SYS_CRUISE_MODE = ( $SYSTEM_FLAGS + 0x2D );
our $FLAG_SYS_TV_HOME = ( $SYSTEM_FLAGS + 0x30 );
our $FLAG_SYS_TV_WATCH = ( $SYSTEM_FLAGS + 0x31 );
our $FLAG_SYS_TV_START = ( $SYSTEM_FLAGS + 0x32 );
our $FLAG_SYS_POPWORD_INPUT = ( $SYSTEM_FLAGS + 0x33 );
our $FLAG_SYS_MIX_RECORD = ( $SYSTEM_FLAGS + 0x34 );
our $FLAG_SYS_CLOCK_SET = ( $SYSTEM_FLAGS + 0x35 );
our $FLAG_SYS_NATIONAL_DEX = ( $SYSTEM_FLAGS + 0x36 );
our $FLAG_SYS_CAVE_SHIP = ( $SYSTEM_FLAGS + 0x37 );
our $FLAG_SYS_CAVE_WONDER = ( $SYSTEM_FLAGS + 0x38 );
our $FLAG_SYS_CAVE_BATTLE = ( $SYSTEM_FLAGS + 0x39 );
our $FLAG_SYS_SHOAL_TIDE = ( $SYSTEM_FLAGS + 0x3A );
our $FLAG_SYS_RIBBON_GET = ( $SYSTEM_FLAGS + 0x3B );
our $FLAG_LANDMARK_FLOWER_SHOP = ( $SYSTEM_FLAGS + 0x3C );
our $FLAG_LANDMARK_MR_BRINEY_HOUSE = ( $SYSTEM_FLAGS + 0x3D );
our $FLAG_LANDMARK_ABANDONED_SHIP = ( $SYSTEM_FLAGS + 0x3E );
our $FLAG_LANDMARK_SEASHORE_HOUSE = ( $SYSTEM_FLAGS + 0x3F );
our $FLAG_LANDMARK_NEW_MAUVILLE = ( $SYSTEM_FLAGS + 0x40 );
our $FLAG_LANDMARK_OLD_LADY_REST_SHOP = ( $SYSTEM_FLAGS + 0x41 );
our $FLAG_LANDMARK_TRICK_HOUSE = ( $SYSTEM_FLAGS + 0x42 );
our $FLAG_LANDMARK_WINSTRATE_FAMILY = ( $SYSTEM_FLAGS + 0x43 );
our $FLAG_LANDMARK_GLASS_WORKSHOP = ( $SYSTEM_FLAGS + 0x44 );
our $FLAG_LANDMARK_LANETTES_HOUSE = ( $SYSTEM_FLAGS + 0x45 );
our $FLAG_LANDMARK_POKEMON_DAYCARE = ( $SYSTEM_FLAGS + 0x46 );
our $FLAG_LANDMARK_SEAFLOOR_CAVERN = ( $SYSTEM_FLAGS + 0x47 );
our $FLAG_LANDMARK_BATTLE_TOWER = ( $SYSTEM_FLAGS + 0x48 );
our $FLAG_LANDMARK_SOUTHERN_ISLAND = ( $SYSTEM_FLAGS + 0x49 );
our $FLAG_LANDMARK_FIERY_PATH = ( $SYSTEM_FLAGS + 0x4A );
our $FLAG_SYS_PC_LANETTE = ( $SYSTEM_FLAGS + 0x4B );
our $FLAG_SYS_EXDATA_ENABLE = ( $SYSTEM_FLAGS + 0x4C );
our $FLAG_SYS_ENC_UP_ITEM = ( $SYSTEM_FLAGS + 0x4D );
our $FLAG_SYS_ENC_DOWN_ITEM = ( $SYSTEM_FLAGS + 0x4E );
our $FLAG_SYS_BRAILLE_DIG = ( $SYSTEM_FLAGS + 0x4F );
our $FLAG_SYS_BRAILLE_STRENGTH = ( $SYSTEM_FLAGS + 0x50 );
our $FLAG_SYS_BRAILLE_WAIT = ( $SYSTEM_FLAGS + 0x51 );
our $FLAG_SYS_BRAILLE_FLY = ( $SYSTEM_FLAGS + 0x52 );
our $FLAG_SYS_HAS_EON_TICKET = ( $SYSTEM_FLAGS + 0x53 );
our $FLAG_SYS_POKEMON_LEAGUE_FLY = ( $SYSTEM_FLAGS + 0x54 );
our $FLAG_LANDMARK_ISLAND_CAVE = ( $SYSTEM_FLAGS + 0x55 );
our $FLAG_LANDMARK_DESERT_RUINS = ( $SYSTEM_FLAGS + 0x56 );
our $FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE = ( $SYSTEM_FLAGS + 0x57 );
our $FLAG_LANDMARK_SCORCHED_SLAB = ( $SYSTEM_FLAGS + 0x58 );
our $FLAG_LANDMARK_ANCIENT_TOMB = ( $SYSTEM_FLAGS + 0x59 );
our $FLAG_LANDMARK_TUNNELERS_REST_HOUSE = ( $SYSTEM_FLAGS + 0x5A );
our $FLAG_LANDMARK_HUNTERS_HOUSE = ( $SYSTEM_FLAGS + 0x5B );
our $FLAG_LANDMARK_SEALED_CHAMBER = ( $SYSTEM_FLAGS + 0x5C );
our $FLAG_SYS_TV_LATI = ( $SYSTEM_FLAGS + 0x5D );
our $FLAG_LANDMARK_SKY_PILLAR = ( $SYSTEM_FLAGS + 0x5E );
our $FLAG_SYS_SHOAL_ITEM = ( $SYSTEM_FLAGS + 0x5F );
our $FLAG_SYS_B_DASH = ( $SYSTEM_FLAGS + 0x60 );
our $FLAG_SYS_CTRL_OBJ_DELETE = ( $SYSTEM_FLAGS + 0x61 );
our $FLAG_SYS_RESET_RTC_ENABLE = ( $SYSTEM_FLAGS + 0x62 );
our $FLAG_LANDMARK_BERRY_MASTERS_HOUSE = ( $SYSTEM_FLAGS + 0x63 );
our $DAILY_FLAGS_START = ( $SYSTEM_FLAGS + 0xC0 );
our $FLAG_DAILY_RECEIVED_BERRY_FALLARBOR = ( $SYSTEM_FLAGS + 0xC1 );
our $FLAG_DAILY_UNKNOWN_8C2 = ( $SYSTEM_FLAGS + 0xC2 );
our $FLAG_DAILY_PICKED_LOTTO_TICKET = ( $SYSTEM_FLAGS + 0xCA );
our $FLAG_DAILY_RECEIVED_BERRY_ROUTE114 = ( $SYSTEM_FLAGS + 0xCB );
our $FLAG_DAILY_RECEIVED_BERRY_ROUTE111 = ( $SYSTEM_FLAGS + 0xCC );
our $FLAG_DAILY_RECEIVED_BERRY_FROM_BERRYMASTER = ( $SYSTEM_FLAGS + 0xCD );
our $FLAG_DAILY_RECEIVED_BERRY_ROUTE120 = ( $SYSTEM_FLAGS + 0xCE );
our $FLAG_DAILY_RECEIVED_BERRY_LILYCOVE = ( $SYSTEM_FLAGS + 0xCF );
our $FLAG_DAILY_RECEIVED_BERRY_FLOWER_SHOP = ( $SYSTEM_FLAGS + 0xD0 );
our $FLAG_DAILY_RECEIVED_BERRY_FROM_BERRYMASTER_WIFE = ( $SYSTEM_FLAGS + 0xD1 );
our $FLAG_DAILY_RECEIVED_BERRY_SOOTOPOLIS = ( $SYSTEM_FLAGS + 0xD2 );
our @EXPORT_OK =
qw/$FLAG_SET_WALL_CLOCK $FLAG_RESCUED_BIRCH $FLAG_LINK_CONTEST_ROOM_POKEBALL $FLAG_MET_RIVAL_MOM $FLAG_BIRCH_AIDE_MET $FLAG_DECLINED_BIKE $FLAG_RECEIVED_BIKE $FLAG_RECEIVED_WAILMER_PAIL $FLAG_RECEIVED_POKEBLOCK_CASE $FLAG_RECEIVED_SECRET_POWER $FLAG_TV_EXPLAINED $FLAG_MAUVILLE_GYM_BARRIERS_STATE $FLAG_MOSSDEEP_GYM_SWITCH_1 $FLAG_MOSSDEEP_GYM_SWITCH_2 $FLAG_MOSSDEEP_GYM_SWITCH_3 $FLAG_MOSSDEEP_GYM_SWITCH_4 $FLAG_OCEANIC_MUSEUM_MET_REPORTER $FLAG_RECEIVED_HM04 $FLAG_RECEIVED_HM06 $FLAG_RECEIVED_HM05 $FLAG_RECEIVED_HM02 $FLAG_MT_PYRE_ORB_STOLEN $FLAG_EVIL_TEAM_ESCAPED_IN_SUBMARINE $FLAG_LEGENDARY_BATTLE_COMPLETED $FLAG_RECEIVED_METEORITE $FLAG_ADVENTURE_STARTED $FLAG_MET_HIDDEN_POWER_GIVER $FLAG_RECEIVED_TM31 $FLAG_RECEIVED_HM03 $FLAG_RECEIVED_HM08 $FLAG_DEFEATED_WALLY_VICTORY_ROAD $FLAG_MET_PRETTY_PETAL_SHOP_OWNER $FLAG_LEGEND_ESCAPED_SEAFLOOR_CAVERN $FLAG_DEFEATED_RIVAL_ROUTE103 $FLAG_RECEIVED_DOLL_LANETTE $FLAG_RECEIVED_POTION_OLDALE $FLAG_RECEIVED_AMULET_COIN $FLAG_PENDING_DAYCARE_EGG $FLAG_THANKED_FOR_PLAYING_WITH_WALLY $FLAG_RECEIVED_HM01 $FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY $FLAG_RECEIVED_6_SODA_POP $FLAG_DEFEATED_SEASHORE_HOUSE_TRAINER $FLAG_DEVON_GOODS_STOLEN $FLAG_RECOVERED_DEVON_GOODS $FLAG_RETURNED_DEVON_GOODS $FLAG_MR_BRINEY_SAILING_INTRO $FLAG_DOCK_REJECTED_DEVON_GOODS $FLAG_DELIVERED_DEVON_GOODS $FLAG_RECEIVED_CONTEST_PASS $FLAG_RECEIVED_CASTFORM $FLAG_RECEIVED_SUPER_ROD $FLAG_RUSTBORO_NPC_TRADE_COMPLETED $FLAG_PACIFIDLOG_NPC_TRADE_COMPLETED $FLAG_FORTREE_NPC_TRADE_COMPLETED $FLAG_UNKNOWN_9F $FLAG_COOL_PAINTING_MADE $FLAG_BEAUTY_PAINTING_MADE $FLAG_CUTE_PAINTING_MADE $FLAG_SMART_PAINTING_MADE $FLAG_TOUGH_PAINTING_MADE $FLAG_RECEIVED_TM39 $FLAG_RECEIVED_TM08 $FLAG_RECEIVED_TM34 $FLAG_RECEIVED_TM50 $FLAG_RECEIVED_TM42 $FLAG_RECEIVED_TM40 $FLAG_RECEIVED_TM04 $FLAG_RECEIVED_TM03 $FLAG_DECORATION_1 $FLAG_DECORATION_2 $FLAG_DECORATION_3 $FLAG_DECORATION_4 $FLAG_DECORATION_5 $FLAG_DECORATION_6 $FLAG_DECORATION_7 $FLAG_DECORATION_8 $FLAG_DECORATION_9 $FLAG_DECORATION_10 $FLAG_DECORATION_11 $FLAG_DECORATION_12 $FLAG_DECORATION_13 $FLAG_DECORATION_14 $FLAG_DECORATION_15 $FLAG_RECEIVED_POKENAV $FLAG_DELIVERED_STEVEN_LETTER $FLAG_DEFEATED_WALLY_MAUVILLE $FLAG_RECEIVED_SUN_STONE_MOSSDEEP $FLAG_WALLY_SPEECH $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_1 $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_2 $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_3 $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_4 $FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_5 $FLAG_RUSTURF_TUNNEL_OPENED $FLAG_RECEIVED_RED_SCARF $FLAG_RECEIVED_BLUE_SCARF $FLAG_RECEIVED_PINK_SCARF $FLAG_RECEIVED_GREEN_SCARF $FLAG_RECEIVED_YELLOW_SCARF $FLAG_ENCOUNTERED_LATIAS_OR_LATIOS $FLAG_RECEIVED_BASEMENT_KEY $FLAG_RECEIVED_TM24 $FLAG_RECEIVED_RED_OR_BLUE_ORB $FLAG_RECEIVED_PREMIER_BALL_RUSTBORO $FLAG_ROUTE104_PROTOTYPE_COMPLETED_1 $FLAG_ROUTE104_PROTOTYPE_COMPLETED_2 $FLAG_MET_DIVING_TREASURE_HUNTER $FLAG_MET_WAILMER_TRAINER $FLAG_EVIL_LEADER_PLEASE_STOP $FLAG_RECEIVED_GO_GOGGLES $FLAG_WINGULL_SENT_ON_ERRAND $FLAG_RECEIVED_MENTAL_HERB/;
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_WINGULL_DELIVERED_MAIL $FLAG_RECEIVED_20_COINS $FLAG_RECEIVED_STARTER_DOLL $FLAG_RECEIVED_GOOD_ROD $FLAG_REGI_DOORS_OPENED $FLAG_RECEIVED_TM27 $FLAG_RECEIVED_TM36 $FLAG_RECEIVED_TM05 $FLAG_RECEIVED_TM19 $FLAG_RECEIVED_TM44 $FLAG_RECEIVED_TM45 $FLAG_RECEIVED_GLASS_ORNAMENT $FLAG_RECEIVED_SILVER_SHIELD $FLAG_RECEIVED_GOLD_SHIELD $FLAG_USED_STORAGE_KEY $FLAG_USED_ROOM_1_KEY $FLAG_USED_ROOM_2_KEY $FLAG_USED_ROOM_4_KEY $FLAG_USED_ROOM_6_KEY $FLAG_MET_PROF_COSMO $FLAG_RECEIVED_WAILMER_DOLL $FLAG_RECEIVED_CHESTO_BERRY_ROUTE104 $FLAG_DEFEATED_SS_TIDAL_TRAINERS $FLAG_RECEIVED_SPELON_BERRY $FLAG_RECEIVED_PAMTRE_BERRY $FLAG_RECEIVED_WATMEL_BERRY $FLAG_RECEIVED_DURIN_BERRY $FLAG_RECEIVED_BELUE_BERRY $FLAG_RECEIVED_CHARCOAL $FLAG_LATIOS_OR_LATIAS_ROAMING $FLAG_RECEIVED_REPEAT_BALL $FLAG_RECEIVED_OLD_ROD $FLAG_RECEIVED_COIN_CASE $FLAG_RETURNED_RED_OR_BLUE_ORB $FLAG_RECEIVED_TM49 $FLAG_RECEIVED_TM28 $FLAG_RECEIVED_TM09 $FLAG_ENTERED_ELITE_FOUR $FLAG_RECEIVED_TM10 $FLAG_RECEIVED_TM41 $FLAG_RECEIVED_LAVARIDGE_EGG $FLAG_RECEIVED_FOSSIL_MON $FLAG_SECRET_BASE_REGISTRY_ENABLED $FLAG_RECEIVED_TM46 $FLAG_CONTEST_SKETCH_CREATED $FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE $FLAG_RECEIVED_EXP_SHARE $FLAG_POKERUS_EXPLAINED $FLAG_RECEIVED_RUNNING_SHOES $FLAG_RECEIVED_QUICK_CLAW $FLAG_RECEIVED_KINGS_ROCK $FLAG_RECEIVED_MACHO_BRACE $FLAG_RECEIVED_SOOTHE_BELL $FLAG_RECEIVED_WHITE_HERB $FLAG_RECEIVED_SOFT_SAND $FLAG_RECEIVED_CLEANSE_TAG $FLAG_RECEIVED_FOCUS_BAND $FLAG_DECLINED_WALLY_BATTLE_MAUVILLE $FLAG_RECEIVED_DEVON_SCOPE $FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE $FLAG_MET_DEVON_EMPLOYEE $FLAG_MET_RIVAL_RUSTBORO $FLAG_RECEIVED_SILK_SCARF $FLAG_NOT_READY_FOR_BATTLE_ROUTE120 $FLAG_RECEIVED_SS_TICKET $FLAG_MET_RIVAL_LILYCOVE $FLAG_MET_RIVAL_IN_HOUSE_AFTER_LILYCOVE $FLAG_EXCHANGED_SCANNER $FLAG_KECLEON_FLED_FORTREE $FLAG_PETALBURG_MART_EXPANDED_ITEMS $FLAG_RECEIVED_MIRACLE_SEED $FLAG_RECEIVED_BELDUM $FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK $FLAG_MET_FANCLUB_YOUNGER_BROTHER $FLAG_RIVAL_LEFT_FOR_ROUTE103 $FLAG_OMIT_DIVE_FROM_STEVEN_LETTER $FLAG_HIDDEN_ITEMS_START $FLAG_HIDDEN_ITEM_0 $FLAG_HIDDEN_ITEM_1 $FLAG_HIDDEN_ITEM_2 $FLAG_HIDDEN_ITEM_3 $FLAG_HIDDEN_ITEM_4 $FLAG_HIDDEN_ITEM_5 $FLAG_HIDDEN_ITEM_6 $FLAG_HIDDEN_ITEM_7 $FLAG_HIDDEN_ITEM_8 $FLAG_HIDDEN_ITEM_9 $FLAG_HIDDEN_ITEM_A $FLAG_HIDDEN_ITEM_B $FLAG_HIDDEN_ITEM_C $FLAG_HIDDEN_ITEM_D $FLAG_HIDDEN_ITEM_E $FLAG_HIDDEN_ITEM_F $FLAG_HIDDEN_ITEM_10 $FLAG_HIDDEN_ITEM_11 $FLAG_HIDDEN_ITEM_12 $FLAG_HIDDEN_ITEM_13 $FLAG_HIDDEN_ITEM_14 $FLAG_HIDDEN_ITEM_15 $FLAG_HIDDEN_ITEM_16 $FLAG_HIDDEN_ITEM_17 $FLAG_HIDDEN_ITEM_18 $FLAG_HIDDEN_ITEM_19 $FLAG_HIDDEN_ITEM_1A $FLAG_HIDDEN_ITEM_1B $FLAG_HIDDEN_ITEM_1C $FLAG_HIDDEN_ITEM_1D $FLAG_HIDDEN_ITEM_1E $FLAG_HIDDEN_ITEM_1F $FLAG_HIDDEN_ITEM_20 $FLAG_HIDDEN_ITEM_21 $FLAG_HIDDEN_ITEM_22 $FLAG_HIDDEN_ITEM_23 $FLAG_HIDDEN_ITEM_24 $FLAG_HIDDEN_ITEM_25 $FLAG_HIDDEN_ITEM_26 $FLAG_HIDDEN_ITEM_27 $FLAG_HIDDEN_ITEM_28 $FLAG_HIDDEN_ITEM_29 $FLAG_HIDDEN_ITEM_2A $FLAG_HIDDEN_ITEM_2B/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_HIDDEN_ITEM_2C $FLAG_HIDDEN_ITEM_2D $FLAG_HIDDEN_ITEM_2E $FLAG_HIDDEN_ITEM_2F $FLAG_HIDDEN_ITEM_30 $FLAG_HIDDEN_ITEM_31 $FLAG_HIDDEN_ITEM_32 $FLAG_HIDDEN_ITEM_33 $FLAG_HIDDEN_ITEM_34 $FLAG_HIDDEN_ITEM_35 $FLAG_HIDDEN_ITEM_36 $FLAG_HIDDEN_ITEM_37 $FLAG_HIDDEN_ITEM_38 $FLAG_HIDDEN_ITEM_39 $FLAG_HIDDEN_ITEM_3A $FLAG_HIDDEN_ITEM_3B $FLAG_HIDDEN_ITEM_3C $FLAG_HIDDEN_ITEM_3D $FLAG_HIDDEN_ITEM_3E $FLAG_HIDDEN_ITEM_3F $FLAG_HIDDEN_ITEM_40 $FLAG_HIDDEN_ITEM_41 $FLAG_HIDDEN_ITEM_42 $FLAG_HIDDEN_ITEM_43 $FLAG_HIDDEN_ITEM_44 $FLAG_HIDDEN_ITEM_45 $FLAG_HIDDEN_ITEM_46 $FLAG_HIDDEN_ITEM_47 $FLAG_HIDDEN_ITEM_48 $FLAG_HIDDEN_ITEM_49 $FLAG_HIDDEN_ITEM_4A $FLAG_HIDDEN_ITEM_4B $FLAG_HIDDEN_ITEM_4C $FLAG_HIDDEN_ITEM_4D $FLAG_HIDDEN_ITEM_4E $FLAG_HIDDEN_ITEM_4F $FLAG_HIDDEN_ITEM_50 $FLAG_HIDDEN_ITEM_51 $FLAG_HIDDEN_ITEM_52 $FLAG_HIDDEN_ITEM_53 $FLAG_HIDDEN_ITEM_54 $FLAG_HIDDEN_ITEM_55 $FLAG_HIDDEN_ITEM_56 $FLAG_HIDDEN_ITEM_57 $FLAG_HIDDEN_ITEM_58 $FLAG_HIDDEN_ITEM_59 $FLAG_HIDDEN_ITEM_5A $FLAG_HIDDEN_ITEM_5B $FLAG_HIDDEN_ITEM_5C $FLAG_HIDDEN_ITEM_5D $FLAG_HIDDEN_ITEM_5E $FLAG_HIDDEN_ITEM_5F $FLAG_HIDDEN_ITEM_BLACK_GLASSES $FLAG_HIDDEN_ITEM_61 $FLAG_HIDE_BIRCH_STARTERS_BAG $FLAG_HIDE_BIRCH_BATTLE_POOCHYENA $FLAG_HIDE_BIRCH_IN_LAB $FLAG_HIDE_MAY_UPSTAIRS $FLAG_HIDE_RIVAL_ROUTE103 $FLAG_HIDE_DEVON_PETALBURG_WOODS $FLAG_HIDE_EVIL_TEAM_PETALBURG_WOODS $FLAG_HIDE_WALLY_PETALBURG $FLAG_HIDE_STEVENS_LETTER $FLAG_HIDE_WALLY_MOM_PETALBURG_1 $FLAG_HIDE_GRUNT_RUSTBORO $FLAG_HIDE_DEVON_RUSTBORO $FLAG_HIDE_SLEEPING_MON_SEAFLOOR_CAVERN $FLAG_HIDE_NORMAN_LITTLEROOT $FLAG_UNKNOWN_2E1 $FLAG_HIDE_MR_BRINEY_ROUTE104 $FLAG_HIDE_MR_BRINEY_ROUTE104_HOUSE $FLAG_HIDE_MR_BRINEY_DEWFORD_TOWN $FLAG_HIDE_MR_BRINEY_ROUTE109 $FLAG_HIDE_MR_BRINEY_BOAT_ROUTE104 $FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD $FLAG_HIDE_MR_BRINEY_BOAT_ROUTE109 $FLAG_UNKNOWN_2EB $FLAG_UNKNOWN_2EC $FLAG_UNKNOWN_2ED $FLAG_HIDE_POOCHYENA_ROUTE101 $FLAG_HIDE_WALLY_DEFEATED_VICTORY_ROAD $FLAG_HIDE_MOM_LITTLEROOT $FLAG_HIDE_MACHOKE_MOVER_1 $FLAG_HIDE_MACHOKE_MOVER_2 $FLAG_UNKNOWN_2F4 $FLAG_HIDE_MOM_UPSTAIRS $FLAG_HIDE_BRENDAN_MOM_DOWNSTAIRS $FLAG_HIDE_MAY_MOM_DOWNSTAIRS $FLAG_HIDE_BRENDAN_UPSTAIRS $FLAG_HIDE_MOVING_TRUCK_BRENDAN $FLAG_HIDE_MOVING_TRUCK_MAY $FLAG_HIDE_VICTOR_WINSTRATE $FLAG_HIDE_VICTORIA_WINSTRATE $FLAG_HIDE_VIVI_WINSTRATE $FLAG_HIDE_VICKI_WINSTRATE $FLAG_HIDE_NORMAN_PETALBURG_GYM $FLAG_HIDE_RAYQUAZA $FLAG_HIDE_LILYCOVE_CONTEST_ATTENDENT_1 $FLAG_HIDE_LILYCOVE_MUSEUM_CURATOR $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_LADY $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_GIRL $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTING_MAN $FLAG_HIDE_LILYCOVE_MUSEUM_PAINTER $FLAG_HIDE_LILYCOVE_MUSEUM_VISITORS $FLAG_HIDE_PETALBURG_GYM_GUIDE $FLAG_UNKNOWN_30E $FLAG_UNKNOWN_30F $FLAG_HIDE_BRENDAN_MOM $FLAG_HIDE_MAY_MOM $FLAG_HIDE_FANCLUB_OLD_LADY $FLAG_HIDE_FANCLUB_BOY $FLAG_HIDE_FANCLUB_LITTLE_BOY $FLAG_HIDE_FANCLUB_LADY $FLAG_HIDE_GABBY_AND_TY_ROUTE111_1 $FLAG_HIDE_GABBY_AND_TY_ROUTE118_1 $FLAG_HIDE_GABBY_AND_TY_ROUTE120_1/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_HIDE_GABBY_AND_TY_ROUTE111_2 $FLAG_HIDE_CONTEST_REPORTER_FALLARBOR $FLAG_HIDE_CONTEST_REPORTER_VERDANTURF $FLAG_HIDE_CONTEST_REPORTER_LILYCOVE $FLAG_HIDE_CONTEST_REPORTER_SLATEPORT $FLAG_HIDE_WALLY_MAUVILLE $FLAG_HIDE_WALLY_FATHER_MAUVILLE $FLAG_HIDE_WALLY_WANDAS_HOUSE $FLAG_HIDE_BOYFRIEND_RUSTURF_TUNNEL $FLAG_HIDE_BOYFRIEND_WANDAS_HOUSE $FLAG_HIDE_WALLY_FATHER_WANDAS_HOUSE $FLAG_HIDE_WALLY_FATHER_PETALBURG $FLAG_HIDE_WALLY_MOTHER_PETALBURG $FLAG_HIDE_LOST_GLASSES_MAN $FLAG_HIDE_RIVAL_RUSTBORO $FLAG_HIDE_WALLACE_SOOTOPOLIS_GYM $FLAG_HIDE_WALLACE_SOOTOPOLIS $FLAG_HIDE_GRUNTS_BLOCKING_CABLE_CAR $FLAG_HIDE_GRUNT_1_BLOCKING_HIDEOUT $FLAG_HIDE_GRUNT_2_BLOCKING_HIDEOUT $FLAG_UNKNOWN_337 $FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN $FLAG_HIDE_EVIL_LEADER_SEAFLOOR_CAVERN $FLAG_HIDE_OTHER_LEADER_SEAFLOOR_CAVERN $FLAG_HIDE_OTHER_TEAM_GRUNTS_SEAFLOOR_CAVERN $FLAG_HIDE_STEVEN_GRANITE_CAVE $FLAG_HIDE_STEVEN_ROUTE128 $FLAG_HIDE_GABBY_AND_TY_SLATEPORT $FLAG_HIDE_STERN_SLATEPORT $FLAG_HIDE_STERN_SLATEPORT_HARBOR $FLAG_UNKNOWN_34B $FLAG_UNKNOWN_34C $FLAG_HIDE_GRUNT_1_SLATEPORT_HARBOR $FLAG_HIDE_GRUNT_2_SLATEPORT_HARBOR $FLAG_UNKNOWN_34F $FLAG_HIDE_SUBMARINE_SHADOW_SLATEPORT_HARBOR $FLAG_HIDE_MAY_PICHU_DOLL $FLAG_HIDE_RIVAL_ROUTE119 $FLAG_HIDE_GRUNTS_LILYCOVE $FLAG_HIDE_SOOTOPOLIS_RESIDENTS $FLAG_HIDE_CAVE_OF_ORIGIN_ENTRANCE_WOMAN_1 $FLAG_HIDE_CAVE_OF_ORIGIN_ENTRANCE_WOMAN_2 $FLAG_HIDE_WALLY_BATTLE_VICTORY_ROAD $FLAG_HIDE_AWAKENED_MON_SEAFLOOR_CAVERN $FLAG_HIDE_SS_TIDAL_SLATEPORT_HARBOR $FLAG_HIDE_SS_TIDAL_LILYCOVE_HARBOR $FLAG_HIDE_WALLY_PETALBURG_GYM $FLAG_UNKNOWN_363 $FLAG_HIDE_FAT_MAN_LITTLEROOT $FLAG_HIDE_BRINEY_SLATEPORT_SHIPYARD $FLAG_HIDE_LANETTE $FLAG_HIDE_LANETTE_FALLARBOR $FLAG_HIDE_TRICKMASTER_ENTRANCE $FLAG_HIDE_MT_CHIMNEY_PEOPLE $FLAG_HIDE_GRUNT_RUSTURF_TUNNEL $FLAG_HIDE_BRINEY_RUSTURF_TUNNEL $FLAG_HIDE_PEEKO_RUSTURF_TUNNEL $FLAG_HIDE_PEEKO_BRINEY_HOUSE $FLAG_HIDE_EVIL_TEAM_SLATEPORT $FLAG_HIDE_EVIL_TEAM_OCEANIC_MUSEUM $FLAG_HIDE_GRUNT_1_OCEANIC_MUSEUM_2F $FLAG_HIDE_GRUNT_2_OCEANIC_MUSEUM_2F $FLAG_HIDE_EVIL_TEAM_LEADER_OCEANIC_MUSEUM_2F $FLAG_HIDE_STERN_OCEANIC_MUSEUM_2F $FLAG_HIDE_BATTLE_TOWER_OPPONENT $FLAG_HIDE_RIVAL_BIRCH_LAB $FLAG_HIDE_EVIL_TEAM_WEATHER_INSTITUTE $FLAG_HIDE_BRINEY_ROUTE116 $FLAG_HIDE_WEATHER_INSTITUTE_WORKERS_1F $FLAG_HIDE_WEATHER_INSTITUTE_WORKERS_2F $FLAG_HIDE_TUNNER_DIGGER_ROUTE116 $FLAG_HIDE_ARTIST_LILCOVE_CONTEST $FLAG_UNKNOWN_BIRCH_380 $FLAG_HIDE_BIRCH_ROUTE101 $FLAG_HIDE_BIRCH_ROUTE103 $FLAG_HIDE_TRICKMASTER_END $FLAG_HIDE_EVIL_TEAM_ROUTE110 $FLAG_HIDE_GABBY_AND_TY_ROUTE118_2 $FLAG_HIDE_GABBY_AND_TY_ROUTE120_2 $FLAG_HIDE_GABBY_AND_TY_ROUTE111_3 $FLAG_HIDE_GABBY_AND_TY_ROUTE118_3 $FLAG_HIDE_WORKERS_SLATEPORT_HARBOR $FLAG_HIDE_FLOWER_SHOP_WORKER_OUTSIDE $FLAG_HIDE_AZURILL_FALLARBOR $FLAG_HIDE_FERRY_ATTENDANT_LILYCOVE $FLAG_HIDE_FERRY_SAILOR_LILYCOVE $FLAG_HIDE_LATIOS_OR_LATIAS_FLYING $FLAG_HIDE_LATIOS_OR_LATIAS_STATIONARY $FLAG_HIDE_WATTSON_MAUVILLE $FLAG_HIDE_WATTSON_MAUVILLE_GYM/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_HIDE_GRUNTS_ROUTE121 $FLAG_UNKNOWN_393 $FLAG_HIDE_LEADER_MT_PYRE_SUMMIT $FLAG_HIDE_GRUNTS_MT_PYRE_SUMMIT $FLAG_HIDE_REPORTER_BATTLE_TOWER $FLAG_HIDE_RIVAL_ROUTE110 $FLAG_HIDE_RIVAL_CHAMPIONS_ROOM $FLAG_HIDE_BIRCH_CHAMPIONS_ROOM $FLAG_HIDE_RIVAL_ON_BIKE_ROUTE110 $FLAG_HIDE_RIVAL_ROUTE119_ON_BIKE $FLAG_HIDE_GRUNTS_HIDEOUTS $FLAG_HIDE_LILYCOVE_MOTEL_PEOPLE $FLAG_HIDE_EVIL_TEAM_MT_CHIMNEY $FLAG_HIDE_OTHER_TEAM_MT_CHIMNEY $FLAG_HIDE_PROF_COSMO_FALLARBOR $FLAG_HIDE_RIVAL_LAVARIDGE_1 $FLAG_HIDE_RIVAL_LAVARIDGE_2 $FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1 $FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2 $FLAG_HIDE_WINGULL_FORTREE_HOUSE $FLAG_HIDE_WINGULL_MOSSDEEP_HOUSE $FLAG_HIDE_REGIROCK $FLAG_HIDE_REGICE $FLAG_HIDE_REGISTEEL $FLAG_HIDE_GRUNTS_METEOR_FALLS_1F $FLAG_HIDE_OTHER_TEAM_METEOR_FALLS_1F $FLAG_HIDE_SLUDGE_BOMB_MAN_DEWFORD_HALL $FLAG_HIDE_AWARD_MAN_BATTLE_TOWER $FLAG_HIDE_PROF_COSMO_METEOR_FALLS $FLAG_HIDE_SUBMARINE_SHADOW_HIDEOUT $FLAG_HIDE_EVIL_LEADER_ROUTE128 $FLAG_HIDE_OTHER_LEADER_ROUTE128 $FLAG_HIDE_EVIL_TEAM_GRUNTS_SEAFLOOR_CAVERN $FLAG_HIDE_DEVON_EMPLOYEE_ROUTE116 $FLAG_HIDE_TM_SALESMAN_SLATEPORT $FLAG_HIDE_EMPLOYEE_DEVON_CORP_3F $FLAG_HIDE_BRINEY_AND_PEEKO_SS_TIDAL $FLAG_HIDE_TM_49_GIVER_SS_TIDAL $FLAG_HIDE_TOOK_SHOAL_SALT_1 $FLAG_HIDE_TOOK_SHOAL_SALT_2 $FLAG_HIDE_TOOK_SHOAL_SALT_3 $FLAG_HIDE_TOOK_SHOAL_SALT_4 $FLAG_HIDE_TOOK_SHOAL_SHELL_1 $FLAG_HIDE_TOOK_SHOAL_SHELL_2 $FLAG_HIDE_TOOK_SHOAL_SHELL_3 $FLAG_HIDE_TOOK_SHOAL_SHELL_4 $FLAG_HIDE_SECRET_POWER_MAN $FLAG_HIDE_OCEANIC_MUSEUM_VISITORS $FLAG_HIDE_ROOFTOP_LADY_LILYCOVE_MART $FLAG_HIDE_ROOT_FOSSIL $FLAG_HIDE_CLAW_FOSSIL $FLAG_HIDE_SCARED_GRUNT_OCEANIC_MUSEUM $FLAG_HIDE_STEVEN_ROUTE118 $FLAG_HIDE_STEVEN_STEVENS_HOUSE $FLAG_HIDE_BELDUM_BALL_STEVENS_HOUSE $FLAG_HIDE_KECLEON_FORTREE $FLAG_HIDE_KECLEON_ROUTE120_1 $FLAG_HIDE_RIVAL_LILYCOVE_MART $FLAG_HIDE_STEVEN_ROUTE120 $FLAG_HIDE_STEVEN_SOOTOPOLIS $FLAG_HIDE_VOLTORB_1_NEW_MAUVILLE $FLAG_HIDE_VOLTORB_2_NEW_MAUVILLE $FLAG_HIDE_VOLTORB_3_NEW_MAUVILLE $FLAG_HIDE_ELECTRODE_1_HIDEOUT $FLAG_HIDE_ELECTRODE_2_HIDEOUT $FLAG_HIDE_RIVAL_OLDALE_TOWN $FLAG_HIDE_UNDERWATER_SUBMARINE_INTERACTION $FLAG_HIDE_KECLEON_ROUTE120_2 $FLAG_HIDE_KECLEON_ROUTE120_3 $FLAG_HIDE_GIRLFRIEND_RUSTURF_TUNNEL $FLAG_HIDE_GIRLFRIEND_WANDAS_HOUSE $FLAG_HIDE_KECLEON_ROUTE120_4 $FLAG_HIDE_KECLEON_ROUTE120_5 $FLAG_HIDE_KECLEON_ROUTE120_6 $FLAG_HIDE_KECLEON_ROUTE120_7 $FLAG_HIDE_KECLEON_ROUTE119_1 $FLAG_HIDE_KECLEON_ROUTE119_2 $FLAG_HIDE_BOY_ROUTE101 $FLAG_ITEM_ROUTE102_1 $FLAG_ITEM_ROUTE116_1 $FLAG_ITEM_ROUTE104_1 $FLAG_ITEM_ROUTE105_1 $FLAG_ITEM_ROUTE106_1 $FLAG_ITEM_ROUTE109_1 $FLAG_ITEM_ROUTE110_1 $FLAG_ITEM_ROUTE110_2 $FLAG_ITEM_ROUTE111_1 $FLAG_ITEM_ROUTE111_2 $FLAG_ITEM_ROUTE111_3 $FLAG_ITEM_ROUTE112_1 $FLAG_ITEM_ROUTE113_1 $FLAG_ITEM_ROUTE113_2 $FLAG_ITEM_ROUTE114_1 $FLAG_ITEM_ROUTE114_2 $FLAG_ITEM_ROUTE115_1 $FLAG_ITEM_ROUTE115_2 $FLAG_ITEM_ROUTE115_3 $FLAG_ITEM_ROUTE116_2 $FLAG_ITEM_ROUTE116_3 $FLAG_ITEM_ROUTE116_4 $FLAG_ITEM_ROUTE117_1 $FLAG_ITEM_ROUTE117_2/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_ITEM_ROUTE119_1 $FLAG_ITEM_ROUTE119_2 $FLAG_ITEM_ROUTE119_3 $FLAG_ITEM_ROUTE119_4 $FLAG_ITEM_ROUTE119_5 $FLAG_ITEM_ROUTE119_6 $FLAG_ITEM_ROUTE120_1 $FLAG_ITEM_ROUTE120_2 $FLAG_ITEM_ROUTE123_1 $FLAG_ITEM_ROUTE123_2 $FLAG_ITEM_ROUTE127_1 $FLAG_ITEM_ROUTE127_2 $FLAG_ITEM_ROUTE132_1 $FLAG_ITEM_ROUTE133_1 $FLAG_ITEM_ROUTE133_2 $FLAG_ITEM_PETALBURG_1 $FLAG_ITEM_PETALBURG_2 $FLAG_ITEM_RUSTBORO_1 $FLAG_ITEM_LILYCOVE_1 $FLAG_ITEM_MOSSDEEP_1 $FLAG_ITEM_METEOR_FALLS_1F_1R_1 $FLAG_ITEM_METEOR_FALLS_1F_1R_2 $FLAG_ITEM_METEOR_FALLS_1F_1R_3 $FLAG_ITEM_METEOR_FALLS_1F_1R_4 $FLAG_ITEM_RUSTURF_TUNNEL_1 $FLAG_ITEM_RUSTURF_TUNNEL_2 $FLAG_ITEM_GRANITE_CAVE_1F_1 $FLAG_ITEM_GRANITE_CAVE_B1F_1 $FLAG_ITEM_MT_PYRE_5F_1 $FLAG_ITEM_GRANITE_CAVE_B2F_1 $FLAG_ITEM_GRANITE_CAVE_B2F_2 $FLAG_ITEM_PETALBURG_WOODS_1 $FLAG_ITEM_PETALBURG_WOODS_2 $FLAG_ITEM_ROUTE104_2 $FLAG_ITEM_PETALBURG_WOODS_3 $FLAG_ITEM_CAVE_OF_ORIGIN_B3F_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_1_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_2 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_2 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_4_1 $FLAG_ITEM_ROUTE124_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_6_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_7_1 $FLAG_ITEM_TRICK_HOUSE_PUZZLE_8_1 $FLAG_ITEM_JAGGED_PASS_1 $FLAG_ITEM_AQUA_HIDEOUT_B1F_1 $FLAG_ITEM_AQUA_HIDEOUT_B2F_1 $FLAG_ITEM_MT_PYRE_EXTERIOR_1 $FLAG_ITEM_MT_PYRE_EXTERIOR_2 $FLAG_ITEM_NEW_MAUVILLE_INSIDE_1 $FLAG_ITEM_NEW_MAUVILLE_INSIDE_2 $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_1 $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_2 $FLAG_ITEM_SCORCHED_SLAB_1 $FLAG_ITEM_METEOR_FALLS_B1F_2R_1 $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ENTRANCE_1 $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_INNER_ROOM_1 $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM_1 $FLAG_ITEM_VICTORY_ROAD_1F_1 $FLAG_ITEM_VICTORY_ROAD_1F_2 $FLAG_ITEM_VICTORY_ROAD_B1F_1 $FLAG_ITEM_VICTORY_ROAD_B1F_2 $FLAG_ITEM_VICTORY_ROAD_B2F_1 $FLAG_ITEM_MT_PYRE_6F_1 $FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_1 $FLAG_ITEM_FIERY_PATH_1 $FLAG_ITEM_ROUTE124_2 $FLAG_ITEM_ROUTE124_3 $FLAG_ITEM_SAFARI_ZONE_NORTHWEST_1 $FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_1 $FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_1 $FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_1 $FLAG_ITEM_ABANDONED_SHIP_ROOM_B1F_1 $FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_1 $FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_1 $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_3 $FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS_4 $FLAG_ITEM_ROUTE121_1 $FLAG_ITEM_ROUTE123_3 $FLAG_ITEM_ROUTE126_1 $FLAG_ITEM_ROUTE119_7 $FLAG_ITEM_ROUTE120_3 $FLAG_ITEM_ROUTE120_4 $FLAG_ITEM_ROUTE123_4 $FLAG_ITEM_NEW_MAUVILLE_INSIDE_3 $FLAG_ITEM_FIERY_PATH_2 $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ICE_ROOM_1 $FLAG_ITEM_SHOAL_CAVE_LOW_TIDE_ICE_ROOM_2 $FLAG_ITEM_ROUTE103_1 $FLAG_ITEM_ROUTE104_3 $FLAG_ITEM_MAUVILLE_1 $FLAG_ITEM_PETALBURG_WOODS_4 $FLAG_ITEM_ROUTE115_4 $FLAG_ITEM_SAFARI_ZONE_NORTHEAST_1 $FLAG_ITEM_MT_PYRE_3F_1 $FLAG_ITEM_ROUTE118_1 $FLAG_ITEM_NEW_MAUVILLE_INSIDE_4 $FLAG_ITEM_NEW_MAUVILLE_INSIDE_5 $FLAG_ITEM_AQUA_HIDEOUT_B1F_2/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_ITEM_MAGMA_HIDEOUT_B1F_1 $FLAG_ITEM_MAGMA_HIDEOUT_B1F_2 $FLAG_ITEM_MAGMA_HIDEOUT_B2F_1 $FLAG_ITEM_MT_PYRE_2F_1 $FLAG_ITEM_MT_PYRE_4F_1 $FLAG_ITEM_SAFARI_ZONE_SOUTHWEST $FLAG_ITEM_AQUA_HIDEOUT_B1F_3 $FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 $FLAG_ITEM_MAGMA_HIDEOUT_B1F_3 $FLAG_ITEM_ROUTE104_4 $FLAG_DEFEATED_RUSTBORO_GYM $FLAG_DEFEATED_DEWFORD_GYM $FLAG_DEFEATED_MAUVILLE_GYM $FLAG_DEFEATED_LAVARIDGE_GYM $FLAG_DEFEATED_PETALBURG_GYM $FLAG_DEFEATED_FORTREE_GYM $FLAG_DEFEATED_MOSSDEEP_GYM $FLAG_DEFEATED_SOOTOPOLIS_GYM $FLAG_DEFEATED_ELITE_4_SYDNEY $FLAG_DEFEATED_ELITE_4_PHOEBE $FLAG_DEFEATED_ELITE_4_GLACIA $FLAG_DEFEATED_ELITE_4_DRAKE $TRAINER_FLAG_START $NUMBER_OF_TRAINERS $SYSTEM_FLAGS $FLAG_SYS_POKEMON_GET $FLAG_SYS_POKEDEX_GET $FLAG_SYS_POKENAV_GET $FLAG_SYS_GAME_CLEAR $FLAG_SYS_CHAT_USED $FLAG_SYS_HIPSTER_MEET $FLAG_BADGE01_GET $FLAG_BADGE02_GET $FLAG_BADGE03_GET $FLAG_BADGE04_GET $FLAG_BADGE05_GET $FLAG_BADGE06_GET $FLAG_BADGE07_GET $FLAG_BADGE08_GET $FLAG_VISITED_LITTLEROOT_TOWN $FLAG_VISITED_OLDALE_TOWN $FLAG_VISITED_DEWFORD_TOWN $FLAG_VISITED_LAVARIDGE_TOWN $FLAG_VISITED_FALLARBOR_TOWN $FLAG_VISITED_VERDANTURF_TOWN $FLAG_VISITED_PACIFIDLOG_TOWN $FLAG_VISITED_PETALBURG_CITY $FLAG_VISITED_SLATEPORT_CITY $FLAG_VISITED_MAUVILLE_CITY $FLAG_VISITED_RUSTBORO_CITY $FLAG_VISITED_FORTREE_CITY $FLAG_VISITED_LILYCOVE_CITY $FLAG_VISITED_MOSSDEEP_CITY $FLAG_VISITED_SOOTOPOLIS_CITY $FLAG_VISITED_EVER_GRANDE_CITY $FLAG_SYS_USE_FLASH $FLAG_SYS_USE_STRENGTH $FLAG_SYS_WEATHER_CTRL $FLAG_SYS_CYCLING_ROAD $FLAG_SYS_SAFARI_MODE $FLAG_SYS_CRUISE_MODE $FLAG_SYS_TV_HOME $FLAG_SYS_TV_WATCH $FLAG_SYS_TV_START $FLAG_SYS_POPWORD_INPUT $FLAG_SYS_MIX_RECORD $FLAG_SYS_CLOCK_SET $FLAG_SYS_NATIONAL_DEX $FLAG_SYS_CAVE_SHIP $FLAG_SYS_CAVE_WONDER $FLAG_SYS_CAVE_BATTLE $FLAG_SYS_SHOAL_TIDE $FLAG_SYS_RIBBON_GET $FLAG_LANDMARK_FLOWER_SHOP $FLAG_LANDMARK_MR_BRINEY_HOUSE $FLAG_LANDMARK_ABANDONED_SHIP $FLAG_LANDMARK_SEASHORE_HOUSE $FLAG_LANDMARK_NEW_MAUVILLE $FLAG_LANDMARK_OLD_LADY_REST_SHOP $FLAG_LANDMARK_TRICK_HOUSE $FLAG_LANDMARK_WINSTRATE_FAMILY $FLAG_LANDMARK_GLASS_WORKSHOP $FLAG_LANDMARK_LANETTES_HOUSE $FLAG_LANDMARK_POKEMON_DAYCARE $FLAG_LANDMARK_SEAFLOOR_CAVERN $FLAG_LANDMARK_BATTLE_TOWER $FLAG_LANDMARK_SOUTHERN_ISLAND $FLAG_LANDMARK_FIERY_PATH $FLAG_SYS_PC_LANETTE $FLAG_SYS_EXDATA_ENABLE $FLAG_SYS_ENC_UP_ITEM $FLAG_SYS_ENC_DOWN_ITEM $FLAG_SYS_BRAILLE_DIG $FLAG_SYS_BRAILLE_STRENGTH $FLAG_SYS_BRAILLE_WAIT $FLAG_SYS_BRAILLE_FLY $FLAG_SYS_HAS_EON_TICKET $FLAG_SYS_POKEMON_LEAGUE_FLY $FLAG_LANDMARK_ISLAND_CAVE $FLAG_LANDMARK_DESERT_RUINS $FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE $FLAG_LANDMARK_SCORCHED_SLAB $FLAG_LANDMARK_ANCIENT_TOMB $FLAG_LANDMARK_TUNNELERS_REST_HOUSE $FLAG_LANDMARK_HUNTERS_HOUSE $FLAG_LANDMARK_SEALED_CHAMBER $FLAG_SYS_TV_LATI $FLAG_LANDMARK_SKY_PILLAR $FLAG_SYS_SHOAL_ITEM $FLAG_SYS_B_DASH $FLAG_SYS_CTRL_OBJ_DELETE $FLAG_SYS_RESET_RTC_ENABLE $FLAG_LANDMARK_BERRY_MASTERS_HOUSE $DAILY_FLAGS_START $FLAG_DAILY_RECEIVED_BERRY_FALLARBOR/
);
@EXPORT_OK = (
@EXPORT_OK,
qw/$FLAG_DAILY_UNKNOWN_8C2 $FLAG_DAILY_PICKED_LOTTO_TICKET $FLAG_DAILY_RECEIVED_BERRY_ROUTE114 $FLAG_DAILY_RECEIVED_BERRY_ROUTE111 $FLAG_DAILY_RECEIVED_BERRY_FROM_BERRYMASTER $FLAG_DAILY_RECEIVED_BERRY_ROUTE120 $FLAG_DAILY_RECEIVED_BERRY_LILYCOVE $FLAG_DAILY_RECEIVED_BERRY_FLOWER_SHOP $FLAG_DAILY_RECEIVED_BERRY_FROM_BERRYMASTER_WIFE $FLAG_DAILY_RECEIVED_BERRY_SOOTOPOLIS/
);
1;

View File

@ -0,0 +1,16 @@
package Rsaves::Constants::Ruby::Global;
use v5.34.1;
use strict;
use warnings;
use Exporter;
use parent 'Exporter';
our $MALE = 0;
our $FEMALE = 1;
our @EXPORT_OK = qw/$MALE $FEMALE/;
1;

BIN
ruby.gba Normal file

Binary file not shown.

BIN
ruby.sav Normal file

Binary file not shown.