diff --git a/examples/modifyJorgeTeam.pl b/examples/modifyJorgeTeam.pl index 0a023cd..46de1f3 100644 --- a/examples/modifyJorgeTeam.pl +++ b/examples/modifyJorgeTeam.pl @@ -9,7 +9,7 @@ use feature 'signatures'; 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 enable_mirage_island_for_pokemon parse_version_name/; use Rsaves::Constants::Global - qw/$MOVE_SPIKES $MOVE_DRILL_PECK $MOVE_HIDDEN_POWER $MOVE_TAUNT $MOVE_THUNDERBOLT $MOVE_ROAR $MOVE_THUNDER_WAVE $ITEM_LEFTOVERS/; + qw/$MOVE_SPIKES $MOVE_DRILL_PECK $MOVE_HIDDEN_POWER $MOVE_TAUNT $MOVE_THUNDERBOLT $MOVE_ROAR $MOVE_THUNDER_WAVE $ITEM_LEFTOVERS $MOVE_DRAGON_DANCE $MOVE_ROCK_SLIDE $MOVE_EARTHQUAKE $MOVE_TAUNT/; use Rsaves::Constants::Ruby::Global qw/$MALE $FEMALE/; @@ -28,14 +28,62 @@ sub start { my $pc = read_pc_storage($save); my $skarmory = $pc->{boxes}[0][5]; my $jolteon = $pc->{boxes}[0][4]; + my $larvitar = $pc->{boxes}[0][2]; modifySkarmory($skarmory); modifyJolteon($jolteon); + modifyLarvitar($larvitar); save_pc_changes( $save, $pc ); save_changes( @saves, $extra, $output ); } -sub modifyJolteon ($pokemon) { +sub modifyLarvitar($pokemon) { print Data::Dumper::Dumper $pokemon; + $pokemon->{personality} = 0x9CF2063B; + my $ivs_egg_status_and_ability = + $pokemon->{substructures}[3]{ivs_egg_status_and_ability}; + + my $ability = $ivs_egg_status_and_ability >> 31 & 1; + my $egg = $ivs_egg_status_and_ability >> 30 & 1; + my $iv_special_defense = $ivs_egg_status_and_ability >> 25 & 0x1F; + my $iv_special_attack = $ivs_egg_status_and_ability >> 20 & 0x1F; + my $iv_speed = $ivs_egg_status_and_ability >> 15 & 0x1F; + my $iv_defense = $ivs_egg_status_and_ability >> 10 & 0x1F; + my $iv_attack = $ivs_egg_status_and_ability >> 5 & 0x1F; + my $iv_hp = $ivs_egg_status_and_ability >> 0 & 0x1F; + + ( + $iv_hp, $iv_attack, $iv_defense, $iv_special_attack, + $iv_special_defense, $iv_speed, $ability + ) = ( 31, 30, 30, 23, 30, 31, 0 ); + + $ivs_egg_status_and_ability = 0; + $ivs_egg_status_and_ability |= ( ( $ability & 1 ) << 31 ); + $ivs_egg_status_and_ability |= ( ( $egg & 1 ) << 30 ); + $ivs_egg_status_and_ability |= ( ( $iv_special_defense & 0x1F ) << 25 ); + $ivs_egg_status_and_ability |= ( ( $iv_special_attack & 0x1F ) << 20 ); + $ivs_egg_status_and_ability |= ( ( $iv_speed & 0x1F ) << 15 ); + $ivs_egg_status_and_ability |= ( ( $iv_defense & 0x1F ) << 10 ); + $ivs_egg_status_and_ability |= ( ( $iv_attack & 0x1F ) << 5 ); + $ivs_egg_status_and_ability |= ( ( $iv_hp & 0x1F ) ); + $pokemon->{substructures}[3]{ivs_egg_status_and_ability} = + $ivs_egg_status_and_ability; + + $pokemon->{substructures}[2]{hp_ev} = 0; + $pokemon->{substructures}[2]{attack_ev} = 0; + $pokemon->{substructures}[2]{defense_ev} = 0; + $pokemon->{substructures}[2]{speed_ev} = 0; + $pokemon->{substructures}[2]{special_attack_ev} = 0; + $pokemon->{substructures}[2]{special_defense_ev} = 0; + + $pokemon->{substructures}[1]{movements}[0] = $MOVE_DRAGON_DANCE; + $pokemon->{substructures}[1]{movements}[1] = $MOVE_ROCK_SLIDE; + $pokemon->{substructures}[1]{movements}[2] = $MOVE_EARTHQUAKE; + $pokemon->{substructures}[1]{movements}[3] = $MOVE_TAUNT; + $pokemon->{substructures}[0]{held_item} = $ITEM_LEFTOVERS; + print Data::Dumper::Dumper $pokemon; +} + +sub modifyJolteon ($pokemon) { $pokemon->{personality} = 0x46F43BCA; my $ivs_egg_status_and_ability = $pokemon->{substructures}[3]{ivs_egg_status_and_ability}; @@ -78,7 +126,6 @@ sub modifyJolteon ($pokemon) { $pokemon->{substructures}[1]{movements}[2] = $MOVE_THUNDER_WAVE; $pokemon->{substructures}[1]{movements}[3] = $MOVE_ROAR; $pokemon->{substructures}[0]{held_item} = $ITEM_LEFTOVERS; - print Data::Dumper::Dumper $pokemon; } sub modifySkarmory ($pokemon) { diff --git a/larvitar.gba b/larvitar.gba new file mode 100644 index 0000000..307f9ce Binary files /dev/null and b/larvitar.gba differ diff --git a/larvitar.sav b/larvitar.sav new file mode 100644 index 0000000..819f3ef Binary files /dev/null and b/larvitar.sav differ