Adding initial commit.
This commit is contained in:
commit
b3406aa04e
15
Build.PL
Executable file
15
Build.PL
Executable 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
11
README.md
Normal 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.
|
38
examples/all_pokemon_shiny.pl
Normal file
38
examples/all_pokemon_shiny.pl
Normal 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
26
examples/change_sex.pl
Normal 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
25
examples/enable_latias.pl
Normal 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;
|
36
examples/import_pk3_pokemon.pl
Normal file
36
examples/import_pk3_pokemon.pl
Normal 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;
|
BIN
firered event mons/251 - CELEBI - B434BCEB935C.pk3
Normal file
BIN
firered event mons/251 - CELEBI - B434BCEB935C.pk3
Normal file
Binary file not shown.
989
lib/Rsaves.pm
Normal file
989
lib/Rsaves.pm
Normal 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;
|
812
lib/Rsaves/Constants/Ruby/Flags.pm
Normal file
812
lib/Rsaves/Constants/Ruby/Flags.pm
Normal 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;
|
16
lib/Rsaves/Constants/Ruby/Global.pm
Normal file
16
lib/Rsaves/Constants/Ruby/Global.pm
Normal 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;
|
Loading…
Reference in New Issue
Block a user