From 6d0b5dbeb15548a933ee68bff46feb9721fb8503 Mon Sep 17 00:00:00 2001 From: tchirac Date: Sat, 9 Dec 2023 17:22:47 +0100 Subject: [PATCH 1/9] Adding touchscreen support, logo and experimental features --- README.md | 3 +- app/build.gradle | 1 + app/jni/src/src/ancilla.c | 32 +- app/jni/src/src/config.c | 4 + app/jni/src/src/dungeon.c | 22 +- app/jni/src/src/features.h | 4 + app/jni/src/src/hud.c | 10 +- app/jni/src/src/load_gfx.c | 6 +- app/jni/src/src/messaging.c | 24 +- app/jni/src/src/messaging.h | 25 + app/jni/src/src/misc.c | 40 +- app/jni/src/src/overworld.c | 14 +- app/jni/src/src/player.c | 137 +- app/jni/src/src/player.h | 341 ++++ app/jni/src/src/player_oam.c | 6 +- app/jni/src/src/sprite.c | 163 +- app/jni/src/src/sprite.h | 27 +- app/jni/src/src/sprite_main.c | 1449 +++++++++++------ app/jni/src/src/sprite_main.h | 43 +- app/jni/src/src/tagalong.c | 57 +- app/jni/src/src/variables.h | 8 +- app/src/main/assets/zelda3.ini | 6 + app/src/main/ic_launcher-playstore.png | Bin 14632 -> 47593 bytes .../java/com/dishii/zelda3/MainActivity.java | 234 ++- .../main/java/org/libsdl/app/SDLActivity.java | 4 + .../org/libsdl/app/SDLControllerManager.java | 4 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1610 -> 5449 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3466 -> 6213 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1076 -> 3129 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2127 -> 3902 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 2335 -> 9476 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5129 -> 11644 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 3660 -> 17477 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8248 -> 22379 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 5123 -> 27096 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 11991 -> 34904 bytes app/src/main/res/values/colors.xml | 10 + .../res/values/ic_launcher_background.xml | 2 +- 39 files changed, 1957 insertions(+), 721 deletions(-) diff --git a/README.md b/README.md index e0876cd..aaf5716 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,12 @@ Running the app once will create the directory.
Android 13 users: check the releases tab for the Android 13 version of the app. -NOTE: Controller only. No touch controls yet.
How to Change Settings:
Android/data/com.dishii.zelda3/files contains zelda3.ini. Use a text editor to change options.
Default Settings: -L3 Turbo button
+NOTE: by default, this file is set for screen touch control. For controllers, uncomment the appropriate line.
18:9 Aspect Ratio
Fullscreen(no android on-screen controls)
diff --git a/app/build.gradle b/app/build.gradle index 4c4f155..190e0e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,4 +72,5 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support.constraint:constraint-layout:2.0.4' } diff --git a/app/jni/src/src/ancilla.c b/app/jni/src/src/ancilla.c index a984b9d..0085e20 100644 --- a/app/jni/src/src/ancilla.c +++ b/app/jni/src/src/ancilla.c @@ -1272,7 +1272,7 @@ void Ancilla05_Boomerang(int k) { // 8890fc if (!ancilla_aux_timer[k]) { if (button_b_frames < 9 && player_handler_timer == 0) { - if (link_is_bunny_mirror || link_auxiliary_state || link_item_in_hand == 0 && (enhanced_features0 & kFeatures0_MiscBugFixes)) { + if ((link_is_bunny_mirror || link_auxiliary_state || link_item_in_hand == 0) && (enhanced_features0 & kFeatures0_MiscBugFixes)) { Boomerang_Terminate(k); return; } @@ -1359,7 +1359,7 @@ void Boomerang_StopOffScreen(int k) { // 8892ab void Boomerang_Terminate(int k) { // 8892f5 ancilla_type[k] = 0; flag_for_boomerang_in_place = 0; - if (link_item_in_hand & 0x80) { + if (link_item_in_hand & item_in_hand_boomerang) { // boomerang in hand link_item_in_hand = 0; button_mask_b_y &= ~0x40; if (!(button_mask_b_y & 0x80)) @@ -1592,7 +1592,7 @@ void Bomb_CheckSpriteAndPlayerDamage(int k) { // 889815 static const uint8 kBomb_Dmg_Speed[16] = {32, 32, 32, 32, 32, 32, 28, 28, 28, 28, 28, 28, 24, 24, 24, 24}; static const uint8 kBomb_Dmg_Zvel[16] = {16, 16, 16, 16, 16, 16, 12, 12, 12, 12, 8, 8, 8, 8, 8, 8}; static const uint8 kBomb_Dmg_Delay[16] = {32, 32, 32, 32, 32, 32, 24, 24, 24, 24, 24, 24, 16, 16, 16, 16}; - static const uint8 kBomb_Dmg_ToLink[3] = {8, 4, 2}; + static const uint8 kBomb_Dmg_ToLink[3] = {8, 4, 2}; //depending on link armor level if (ancilla_item_to_link[k] == 0 || ancilla_item_to_link[k] >= 9) return; @@ -3390,7 +3390,7 @@ void Ancilla22_ItemReceipt(int k) { // 88c38a if (ancilla_timer[k] != 17) goto endif_1; word_7E02CD = 0xDF3; - follower_indicator = 0xe; + follower_indicator = follower_indicator_HandleTrigger; goto endif_6; } @@ -3418,7 +3418,7 @@ void Ancilla22_ItemReceipt(int k) { // 88c38a item_receipt_method = 0; a = ancilla_item_to_link[k]; if (a == 23 && link_heart_pieces == 0) { - Link_ReceiveItem(0x26, 0); + Link_ReceiveItem(receiveitem_index_heart_container, 0); ancilla_type[k] = 0; flag_unk1 = 0; return; @@ -4016,7 +4016,7 @@ void Ancilla36_Flute(int k) { // 88cfaa if (Ancilla_CheckLinkCollision(k, 2, &coll_out) && !related_to_hookshot && link_auxiliary_state == 0) { ancilla_type[k] = 0; item_receipt_method = 0; - Link_ReceiveItem(0x14, 0); + Link_ReceiveItem(receiveitem_index_flute, 0); return; } } @@ -4483,7 +4483,7 @@ void Ancilla31_ByrnaSpark(int k) { // 88dc70 uint8 flags = 2; if (submodule_index == 0) { - if (current_item_y != 13) { + if (current_item_y != ciaLI_CaneOfByrna) { kill_me: link_disable_sprite_damage = 0; ancilla_type[k] = 0; @@ -4668,7 +4668,7 @@ void Ancilla27_Duck(int k) { // 88dde8 link_disable_sprite_damage = 0; byte_7E03FD = 0; countdown_for_blink = 144; - if (!((follower_indicator == 12 || follower_indicator == 13) && follower_dropped)) { + if (!((follower_indicator == follower_indicator_PurpleChess || follower_indicator == follower_indicator_BigBomb) && follower_dropped)) { Follower_Initialize(); } } @@ -4693,8 +4693,8 @@ void Ancilla27_Duck(int k) { // 88dde8 if (a == 0x2a || a == 0x1f || a == 0x30 || a == 0x31 || a == 0x41) ancilla_type[i] = 0; } - if (follower_indicator == 9) { - follower_indicator = 0; + if (follower_indicator == follower_indicator_LockSmith) { + follower_indicator = follower_indicator_noone; tagalong_var5 = 0; } } @@ -5377,9 +5377,9 @@ void Ancilla3A_BigBombExplosion(int k) { // 88f18d } } if (ancilla_item_to_link[k] == 3 && ancilla_arr3[k] == 1) { - // Changed so this is reset elsewhere. Some code depends on the value 13. - uint8 old = (enhanced_features0 & kFeatures0_MiscBugFixes) ? follower_indicator : 0; - follower_indicator = 13; + // Changed so this is reset elsewhere. Some code depends on the value 13 (follower_indicator_BigBomb). + uint8 old = (enhanced_features0 & kFeatures0_MiscBugFixes) ? follower_indicator : follower_indicator_noone; + follower_indicator = follower_indicator_BigBomb; Bomb_CheckForDestructibles(Ancilla_GetX(k), Ancilla_GetY(k), 0); // r14? follower_indicator = old; } @@ -6255,7 +6255,7 @@ void AncillaAdd_DwarfPoof(uint8 ain, uint8 yin) { // 89915f int k = Ancilla_AddAncilla(ain, yin); if (k < 0) return; - if (follower_indicator == 8) + if (follower_indicator == follower_indicator_Smith) sound_effect_1 = Link_CalculateSfxPan() | 0x14; else sound_effect_1 = Link_CalculateSfxPan() | 0x15; @@ -6271,7 +6271,7 @@ void AncillaAdd_DwarfPoof(uint8 ain, uint8 yin) { // 89915f } void AncillaAdd_BushPoof(uint16 x, uint16 y) { // 8991c3 - if (!(link_item_in_hand & 0x40)) + if (!(link_item_in_hand & item_in_hand_magic_powder)) //Ycar not magic powder in hand return; int k = Ancilla_AddAncilla(0x3f, 4); if (k >= 0) { @@ -6338,7 +6338,7 @@ void AncillaAdd_MagicPowder(uint8 a, uint8 y) { // 8992f0 Ancilla_SetXY(k, link_x_coord + kMagicPower_X[j], link_y_coord + kMagicPower_Y[j]); Ancilla_CheckTileCollision(k); byte_7E0333 = ancilla_tile_attr[k]; - if (current_item_active == 9) { + if (current_item_active == ciaLI_Lamp) { ancilla_type[k] = 0; return; } diff --git a/app/jni/src/src/config.c b/app/jni/src/src/config.c index 5ba0f5c..dd5cbf4 100644 --- a/app/jni/src/src/config.c +++ b/app/jni/src/src/config.c @@ -475,6 +475,10 @@ static bool HandleIniConfig(int section, const char *key, char *value) { return ParseBoolBit(value, &g_config.features0, kFeatures0_GameChangingBugFixes); } else if (StringEqualsNoCase(key, "CancelBirdTravel")) { return ParseBoolBit(value, &g_config.features0, kFeatures0_CancelBirdTravel); + } else if (StringEqualsNoCase(key, "Pokemode")) { + return ParseBoolBit(value, &g_config.features0, kFeatures0_Pokemode); + } else if (StringEqualsNoCase(key, "PrincessZeldaHelps")) { + return ParseBoolBit(value, &g_config.features0, kFeatures0_PrincessZeldaHelps); } } return false; diff --git a/app/jni/src/src/dungeon.c b/app/jni/src/src/dungeon.c index 544af93..07ffcfa 100644 --- a/app/jni/src/src/dungeon.c +++ b/app/jni/src/src/dungeon.c @@ -5560,7 +5560,7 @@ uint8 ThievesAttic_DrawLightenedHole(uint16 pos6, uint16 a, Point16U *pt) { // } uint8 HandleItemTileAction_Dungeon(uint16 x, uint16 y) { // 81dabb - if (!(link_item_in_hand & 2)) { + if (!(link_item_in_hand & item_in_hand_hammer)) { // not hammer in hand if (!(enhanced_features0 & kFeatures0_BreakPotsWithSword) || button_b_frames == 0 || link_sword_type == 1) return 0; @@ -5570,7 +5570,7 @@ uint8 HandleItemTileAction_Dungeon(uint16 x, uint16 y) { // 81dabb if ((tile & 0xf0) == 0x70) { uint16 tile2 = dung_replacement_tile_state[tile & 0xf]; if ((tile2 & 0xf0f0) == 0x4040) { // Hammer peg - if (!(link_item_in_hand & 2)) + if (!(link_item_in_hand & item_in_hand_hammer)) // not hammer in hand return 0; // only hammers on pegs dung_misc_objs_index = (tile & 0xf) * 2; RoomDraw_16x16Single(dung_misc_objs_index); @@ -6461,8 +6461,8 @@ void Module_PreDungeon() { // 82821e Dungeon_ResetTorchBackgroundAndPlayer(); Link_CheckBunnyStatus(); ResetThenCacheRoomEntryProperties(); - if (follower_indicator == 13) { - follower_indicator = 0; + if (follower_indicator == follower_indicator_BigBomb) { + follower_indicator = follower_indicator_noone; super_bomb_indicator_unk2 = 0; Hud_RemoveSuperBombIndicator(); } @@ -7309,8 +7309,8 @@ void Module07_0E_02_ApplyFilterIf() { // 8290a1 } void Dungeon_SyncBackgroundsFromSpiralStairs() { // 8290c7 - if (follower_indicator == 6 && BYTE(dungeon_room_index) == 100) - follower_indicator = 0; + if (follower_indicator == follower_indicator_BlindMaiden && BYTE(dungeon_room_index) == 100) + follower_indicator = follower_indicator_noone; uint8 bak = link_is_on_lower_level; link_y_coord += which_staircase_index & 4 ? 48 : -48; link_is_on_lower_level = kTeleportPitLevel2[cur_staircase_plane]; @@ -8770,7 +8770,7 @@ void CrystalCutscene_Initialize() { // 9ecce3 void CrystalCutscene_SpawnMaiden() { // 9ecd48 memset(sprite_state, 0, 16); SpriteSpawnInfo info; - int j = Sprite_SpawnDynamically(0, 0xab, &info); + int j = Sprite_SpawnDynamically(0, 0xab, &info);//Sprite_ab_CrystalMaiden sprite_x_hi[j] = link_x_coord >> 8; sprite_y_hi[j] = link_y_coord >> 8; sprite_x_lo[j] = 0x78; @@ -8779,16 +8779,16 @@ void CrystalCutscene_SpawnMaiden() { // 9ecd48 sprite_oam_flags[j] = 0xb; sprite_subtype2[j] = 0; sprite_floor[j] = 0; - sprite_A[j] = Ancilla_TerminateSelectInteractives(j); + sprite_A[j] = Ancilla_TerminateSelectInteractives(j);// returns j or 5 item_receipt_method = 0; if (BYTE(cur_palace_index_x2) == 24) { sprite_oam_flags[j] = 9; - follower_indicator = 1; + follower_indicator = follower_indicator_Zelda; } else { - follower_indicator = 6; + follower_indicator = follower_indicator_BlindMaiden; } LoadFollowerGraphics(); - follower_indicator = 0; + follower_indicator = follower_indicator_noone; dung_floor_x_offs = BG2HOFS_copy2 - link_x_coord + 0x79; dung_floor_y_offs = 0x30 - (uint8)BG1VOFS_copy2; dung_hdr_collision_2_mirror = 1; diff --git a/app/jni/src/src/features.h b/app/jni/src/src/features.h index eff4caf..1c26741 100644 --- a/app/jni/src/src/features.h +++ b/app/jni/src/src/features.h @@ -46,6 +46,10 @@ enum { kFeatures0_SwitchLRLimit = 32768, kFeatures0_DimFlashes = 65536, + + kFeatures0_Pokemode = 131072, //Ycar + + kFeatures0_PrincessZeldaHelps = 131072*2, //Ycar }; #define enhanced_features0 (*(uint32*)(g_ram+0x64c)) diff --git a/app/jni/src/src/hud.c b/app/jni/src/src/hud.c index 20647df..2e4ca97 100644 --- a/app/jni/src/src/hud.c +++ b/app/jni/src/src/hud.c @@ -4,6 +4,8 @@ #include "variables.h" #include "messaging.h" +#include "player.h" //Ycar + enum { kNewStyleInventory = 0, kHudItemCount = kNewStyleInventory ? 24 : 20, @@ -711,7 +713,7 @@ void Hud_CloseMenu() { // 8ddfba main_module_index = saved_module_for_menu; if (submodule_index) Hud_RestoreTorchBackground(); - if (current_item_y != 5 && current_item_y != 6) { + if (current_item_y != ciaLI_FireRod && current_item_y != ciaLI_IceRod) { eq_debug_variable = 2; link_debug_value_1 = 0; } else { @@ -915,8 +917,12 @@ static const ItemBoxGfx *Hud_GetIconForItem(int i) { if (i <= 0) return kHudItemEmpty; - if (i >= kHudItem_Bottle1) + if (i >= kHudItem_Bottle1){ + if (enhanced_features0 & kFeatures0_Pokemode){ + return &kHudItemFlute[link_item_flute >= 1]; //Pokemode (play it safe) + } return &kHudItemBottles[link_bottle_info[i - kHudItem_Bottle1]]; + } if (i == kHudItem_Shovel && kNewStyleInventory) return &kHudItemFlute[link_item_flute >= 1]; diff --git a/app/jni/src/src/load_gfx.c b/app/jni/src/src/load_gfx.c index 5405cd5..e908907 100644 --- a/app/jni/src/src/load_gfx.c +++ b/app/jni/src/src/load_gfx.c @@ -536,11 +536,11 @@ void LoadItemGFX_Auxiliary() { // 80d3c6 void LoadFollowerGraphics() { // 80d423 uint8 yv = 0x64; - if (follower_indicator != 1) { + if (follower_indicator != follower_indicator_Zelda) { yv = 0x66; - if (follower_indicator >= 9) { + if (follower_indicator >= follower_indicator_LockSmith) { //LockSmith or Kiki or 11 (or PurpleChess or BigBomb or 0xe) yv = 0x59; - if (follower_indicator >= 12) + if (follower_indicator >= follower_indicator_PurpleChess) //PurpleChess or BigBomb or 0xe yv = 0x58; } } diff --git a/app/jni/src/src/messaging.c b/app/jni/src/src/messaging.c index 98cb401..c1465cf 100644 --- a/app/jni/src/src/messaging.c +++ b/app/jni/src/src/messaging.c @@ -124,29 +124,7 @@ static PlayerHandlerFunc *const kMessaging_Text[] = { &Text_Render, &RenderText_PostDeathSaveOptions, }; -static const uint8 kOverworldMap_tab1[333] = { - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, - 0xde, 0xdd, 0xdc, 0xdb, 0xda, 0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xcf, 0xce, - 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, - 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, 0xaf, 0xae, 0xad, - 0xac, 0xab, 0xaa, 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0x9f, 0x9e, 0x9d, - 0x9c, 0x9b, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x8f, 0x8e, - 0x8d, 0x8c, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x81, 0x80, - 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x72, - 0x71, 0x70, 0x6f, 0x6e, 0x6d, 0x6c, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x67, 0x67, 0x66, 0x65, 0x64, - 0x63, 0x62, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x59, 0x58, 0x57, - 0x56, 0x55, 0x55, 0x54, 0x53, 0x52, 0x51, 0x51, 0x50, 0x4f, 0x4e, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, - 0x4a, 0x49, 0x48, 0x47, 0x47, 0x46, 0x45, 0x44, 0x44, 0x43, 0x42, 0x41, 0x41, 0x40, 0x3f, 0x3e, - 0x3e, 0x3d, 0x3c, 0x3c, 0x3b, 0x3a, 0x39, 0x39, 0x38, 0x37, 0x36, 0x36, 0x35, 0x34, 0x34, 0x33, - 0x32, 0x32, 0x31, 0x30, 0x2f, 0x2f, 0x2e, 0x2d, 0x2d, 0x2c, 0x2b, 0x2b, 0x2a, 0x29, 0x29, 0x28, - 0x27, 0x27, 0x26, 0x25, 0x25, 0x24, 0x23, 0x23, 0x22, 0x21, 0x21, 0x20, 0x1f, 0x1f, 0x1e, 0x1d, - 0x1d, 0x1c, 0x1c, 0x1b, 0x1a, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x17, 0x16, 0x15, 0x15, 0x14, 0x14, - 0x13, 0x12, 0x12, 0x11, 0x10, 0x10, 0xf, 0xf, 0xe, 0xe, 0xd, 0xc, 0xc, 0xb, 0xb, 0xa, - 9, 9, 8, 8, 7, 7, 6, 5, 5, 4, 4, 3, 3, 2, 1, 1, - 0, 0, 0, 0, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xf9, 0xf9, 0xf8, - 0xf7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf2, 0xf1, 0xf0, 0xef, 0xee, 0xee, 0xed, 0xec, - 0xeb, 0xea, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, -}; + static const uint8 kOverworldMapData[7] = {0x79, 0x6e, 0x6f, 0x6d, 0x7c, 0x6c, 0x7f}; static const uint8 kBirdTravel_tab1[8] = {0x7f, 0x79, 0x6c, 0x6d, 0x6e, 0x6f, 0x7c, 0x7d}; static const uint8 kBirdTravel_x_lo[8] = {0x80, 0xcf, 0x10, 0xb8, 0x30, 0x70, 0x70, 0xf0}; diff --git a/app/jni/src/src/messaging.h b/app/jni/src/src/messaging.h index 817e22c..d7f4e68 100644 --- a/app/jni/src/src/messaging.h +++ b/app/jni/src/src/messaging.h @@ -1,6 +1,31 @@ #pragma once #include "types.h" +static const uint8 kOverworldMap_tab1[333] = { + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, + 0xde, 0xdd, 0xdc, 0xdb, 0xda, 0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xcf, 0xce, + 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, + 0xbc, 0xbb, 0xba, 0xb9, 0xb8, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, 0xaf, 0xae, 0xad, + 0xac, 0xab, 0xaa, 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0x9f, 0x9e, 0x9d, + 0x9c, 0x9b, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x8f, 0x8e, + 0x8d, 0x8c, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x81, 0x80, + 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x72, + 0x71, 0x70, 0x6f, 0x6e, 0x6d, 0x6c, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x67, 0x67, 0x66, 0x65, 0x64, + 0x63, 0x62, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x59, 0x58, 0x57, + 0x56, 0x55, 0x55, 0x54, 0x53, 0x52, 0x51, 0x51, 0x50, 0x4f, 0x4e, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, + 0x4a, 0x49, 0x48, 0x47, 0x47, 0x46, 0x45, 0x44, 0x44, 0x43, 0x42, 0x41, 0x41, 0x40, 0x3f, 0x3e, + 0x3e, 0x3d, 0x3c, 0x3c, 0x3b, 0x3a, 0x39, 0x39, 0x38, 0x37, 0x36, 0x36, 0x35, 0x34, 0x34, 0x33, + 0x32, 0x32, 0x31, 0x30, 0x2f, 0x2f, 0x2e, 0x2d, 0x2d, 0x2c, 0x2b, 0x2b, 0x2a, 0x29, 0x29, 0x28, + 0x27, 0x27, 0x26, 0x25, 0x25, 0x24, 0x23, 0x23, 0x22, 0x21, 0x21, 0x20, 0x1f, 0x1f, 0x1e, 0x1d, + 0x1d, 0x1c, 0x1c, 0x1b, 0x1a, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x17, 0x16, 0x15, 0x15, 0x14, 0x14, + 0x13, 0x12, 0x12, 0x11, 0x10, 0x10, 0xf, 0xf, 0xe, 0xe, 0xd, 0xc, 0xc, 0xb, 0xb, 0xa, + 9, 9, 8, 8, 7, 7, 6, 5, 5, 4, 4, 3, 3, 2, 1, 1, + 0, 0, 0, 0, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xf9, 0xf9, 0xf8, + 0xf7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf4, 0xf3, 0xf2, 0xf2, 0xf1, 0xf0, 0xef, 0xee, 0xee, 0xed, 0xec, + 0xeb, 0xea, 0xe9, 0xe8, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, +}; + + const uint8 *GetDungmapFloorLayout(); uint8 GetOtherDungmapInfo(int count); void DungMap_4(); diff --git a/app/jni/src/src/misc.c b/app/jni/src/src/misc.c index f6989a3..aba5c29 100644 --- a/app/jni/src/src/misc.c +++ b/app/jni/src/src/misc.c @@ -58,25 +58,25 @@ const uint8 kReceiveItemGfx[76] = { 0x34, 0x35, 0x31, 0x33, 2, 0x32, 0x36, 0x37, 0x2c, 6, 0xc, 0x38, }; const uint16 kMemoryLocationToGiveItemTo[76] = { - 0xf359, 0xf359, 0xf359, 0xf359, - 0xf35a, 0xf35a, 0xf35a, 0xf345, - 0xf346, 0xf34b, 0xf342, 0xf340, - 0xf341, 0xf344, 0xf35c, 0xf347, - 0xf348, 0xf349, 0xf34a, 0xf34c, - 0xf34c, 0xf350, 0xf35c, 0xf36b, - 0xf351, 0xf352, 0xf353, 0xf354, - 0xf354, 0xf34e, 0xf356, 0xf357, - 0xf37a, 0xf34d, 0xf35b, 0xf35b, - 0xf36f, 0xf364, 0xf36c, 0xf375, - 0xf375, 0xf344, 0xf341, 0xf35c, - 0xf35c, 0xf35c, 0xf36d, 0xf36e, - 0xf36e, 0xf375, 0xf366, 0xf368, - 0xf360, 0xf360, 0xf360, 0xf374, - 0xf374, 0xf374, 0xf340, 0xf340, - 0xf35c, 0xf35c, 0xf36c, 0xf36c, - 0xf360, 0xf360, 0xf372, 0xf376, - 0xf376, 0xf373, 0xf360, 0xf360, - 0xf35c, 0xf359, 0xf34c, 0xf355, + 0xf359, 0xf359, 0xf359, 0xf359, //0:link_sword_type, 1:link_sword_type, 2:link_sword_type, 3:link_sword_type, + 0xf35a, 0xf35a, 0xf35a, 0xf345, //4:link_shield_type, 5:link_shield_type, 6:link_shield_type, 7:link_item_fire_rod, + 0xf346, 0xf34b, 0xf342, 0xf340, //8:link_item_ice_rod, link_item_hammer, link_item_hookshot, link_item_bow, + 0xf341, 0xf344, 0xf35c, 0xf347, //12:link_item_boomerang, link_item_mushroom, link_bottle_info, link_item_bombos_medallion, + 0xf348, 0xf349, 0xf34a, 0xf34c, //16link_item_ether_medallion, link_item_quake_medallion, link_item_torch, link_item_flute, + 0xf34c, 0xf350, 0xf35c, 0xf36b, //20:link_item_flute, link_item_cane_somaria, link_bottle_info, link_heart_pieces + 0xf351, 0xf352, 0xf353, 0xf354, //24:link_item_cane_byrna, link_item_cape, link_item_mirror, link_item_gloves + 0xf354, 0xf34e, 0xf356, 0xf357, //28:link_item_gloves, link_item_book_of_mudora, link_item_flippers, link_item_moon_pearl + 0xf37a, 0xf34d, 0xf35b, 0xf35b, //32:link_has_crystals, link_item_bug_net, link_armor, link_armor + 0xf36f, 0xf364, 0xf36c, 0xf375, //36:link_num_keys, link_compas, link_health_capacity, link_bomb_filler + 0xf375, 0xf344, 0xf341, 0xf35c, //40:link_bomb_filler, link_item_mushroom, link_item_boomerang, link_bottle_info + 0xf35c, 0xf35c, 0xf36d, 0xf36e, //44:link_bottle_info, link_bottle_info, link_health_current, link_magic_power + 0xf36e, 0xf375, 0xf366, 0xf368, //48:link_magic_power, link_bomb_filler, link_bigkey, link_dungeon_map + 0xf360, 0xf360, 0xf360, 0xf374, //52:link_rupees_goal, link_rupees_goal, link_rupees_goal, link_which_pendants + 0xf374, 0xf374, 0xf340, 0xf340, //56:link_which_pendants, link_which_pendants, link_item_bow, link_item_bow + 0xf35c, 0xf35c, 0xf36c, 0xf36c, //60:link_bottle_info, link_bottle_info, link_health_capacity, link_health_capacity + 0xf360, 0xf360, 0xf372, 0xf376, //64:link_rupees_goal, link_rupees_goal, link_heart_filler, link_arrow_filler + 0xf376, 0xf373, 0xf360, 0xf360, //68:link_arrow_filler, link_magic_filler, link_rupees_goal, link_rupees_goal, + 0xf35c, 0xf359, 0xf34c, 0xf355, //72:link_bottle_info, link_sword_type, link_item_flute, link_item_boots }; static const int8 kValueToGiveItemTo[76] = { 1, 2, 3, 4, @@ -857,7 +857,7 @@ void ItemReceipt_GiveBottledItem(uint8 item) { // 89893e } if ((j = FindInByteArray(kPotionList, item, 5)) >= 0) { for (int i = 0; i != 4; i++) { - if (link_bottle_info[i] == 2) { + if (link_bottle_info[i] == bottle_state_empty) { link_bottle_info[i] = j + 3; return; } diff --git a/app/jni/src/src/overworld.c b/app/jni/src/src/overworld.c index 5b24649..93e2fcc 100644 --- a/app/jni/src/src/overworld.c +++ b/app/jni/src/src/overworld.c @@ -478,8 +478,8 @@ void PreOverworld_LoadProperties() { // 8283c7 if (!(overworld_screen_index & 0x40)) Sprite_InitializeMirrorPortal(); sound_effect_ambient = sram_progress_indicator < 2 ? 1 : 5; - if (follower_indicator == 6) - follower_indicator = 0; + if (follower_indicator == follower_indicator_BlindMaiden) + follower_indicator = follower_indicator_noone; is_standing_in_doorway = 0; button_mask_b_y = 0; @@ -3293,8 +3293,8 @@ uint16 Overworld_ToolAndTileInteraction(uint16 x, uint16 y) { // 9bbd82 ((x - overworld_offset_base_x) & overworld_offset_mask_x); uint16 attr = overworld_tileattr[pos >> 1], yv; - if (!(link_item_in_hand & 2)) { - if (!(link_item_in_hand & 0x40)) { + if (!(link_item_in_hand & item_in_hand_hammer)) { // not hammer in hand + if (!(link_item_in_hand & item_in_hand_magic_powder)) { // not magic powder in hand if (attr == 0x34 || attr == 0x71 || attr == 0x35 || attr == 0x10d || attr == 0x10f || attr == 0xe1 || attr == 0xe2 || attr == 0xda || attr == 0xf8 || attr == 0x10e) { // shovelable @@ -3473,7 +3473,7 @@ void Overworld_BombTile(int x, int y) { // 9bc155 int pos = ((y - overworld_offset_base_y & overworld_offset_mask_y) << 3) + ((x >> 3) - overworld_offset_base_x & overworld_offset_mask_x); - if (follower_indicator == 13) + if (follower_indicator == follower_indicator_BigBomb) goto label_a; a = dung_bg2[pos >> 1]; @@ -3581,7 +3581,7 @@ uint16 Overworld_RevealSecret(uint16 pos) { // 9bc8a4 BYTE(dung_secrets_unk1) = 0xff; if (data != 0x84 && !(save_ow_event_info[overworld_screen_index] & 2)) { - if (overworld_screen_index == 0x5b && follower_indicator != 13) + if (overworld_screen_index == 0x5b && follower_indicator != follower_indicator_BigBomb) goto fail; sound_effect_2 = 0x1b; // The discovery chime is missing when lifting the rock covering the magic portal leading to the Ice Temple @@ -3595,7 +3595,7 @@ uint16 Overworld_RevealSecret(uint16 pos) { // 9bc8a4 } void AdjustSecretForPowder() { // 9bc943 - if (link_item_in_hand & 0x40) + if (link_item_in_hand & item_in_hand_magic_powder) // magic powder dung_secrets_unk1 = 4; } diff --git a/app/jni/src/src/player.c b/app/jni/src/src/player.c index 2ed9b5e..0ac108c 100644 --- a/app/jni/src/src/player.c +++ b/app/jni/src/src/player.c @@ -1518,7 +1518,7 @@ void LinkState_Pits() { // 8792d3 return; uint8 x = ++link_this_controls_sprite_oam; byte_7E005C = 9; - if (follower_indicator != 13 && x == 1) + if (follower_indicator != follower_indicator_BigBomb && x == 1) tagalong_var5 = x; if (x == 6) { @@ -1603,10 +1603,10 @@ void HandleDungeonLandingFromPit() { // 879520 subsubmodule_index = 0; submodule_index = 0; link_disable_sprite_damage = 0; - if (follower_indicator != 0 && follower_indicator != 3) { + if (follower_indicator != follower_indicator_noone && follower_indicator != follower_indicator_0x3) { tagalong_var5 = 0; - if (follower_indicator == 13) { - follower_indicator = 0; + if (follower_indicator == follower_indicator_BigBomb) { + follower_indicator = follower_indicator_noone; super_bomb_indicator_unk2 = 0; super_bomb_indicator_unk1 = 0; follower_dropped = 0; @@ -2009,9 +2009,9 @@ void Link_HandleYItem() { // 879b0e } if (item != current_item_active) { - if (current_item_active == 8 && (link_item_flute & 2)) + if (current_item_active == ciaLI_ShovelAndFlute && (link_item_flute & 2)) button_mask_b_y &= ~0x40; - if (current_item_active == 19 && link_cape_mode) + if (current_item_active == ciaLI_Cape && link_cape_mode) Link_ForceUnequipCape(); } @@ -2019,8 +2019,8 @@ void Link_HandleYItem() { // 879b0e if ((link_item_in_hand | link_position_mode) == 0) current_item_active = item; - if (current_item_active == 5 || current_item_active == 6) - eq_selected_rod = current_item_active - 5 + 1; + if (current_item_active == ciaLI_FireRod || current_item_active == ciaLI_IceRod) + eq_selected_rod = current_item_active - 5 + 1; //specify wether fire(=1) or ice(!=1) rod switch (current_item_active) { case 0: @@ -2287,7 +2287,7 @@ void LinkItem_Rod() { // 879eef link_delay_timer_spin_attack = kRodAnimDelays[0]; link_animation_steps = 0; player_handler_timer = 0; - link_item_in_hand = 1; + link_item_in_hand = item_in_hand_rod; //Rod in hand } HaltLinkWhenUsingItems(); link_direction &= ~0xf; @@ -2302,14 +2302,14 @@ void LinkItem_Rod() { // 879eef link_speed_setting = 0; player_handler_timer = 0; link_delay_timer_spin_attack = 0; - link_item_in_hand &= ~1; + link_item_in_hand &= ~item_in_hand_rod; //Remove rod from hand out: button_mask_b_y &= ~0x40; } void LinkItem_Hammer() { // 879f7b static const uint8 kHammerAnimDelays[] = { 3, 3, 16 }; - if (link_item_in_hand & 0x10) + if (link_item_in_hand & item_in_hand_bow) //if bow in hand return; if (!(button_mask_b_y & 0x40)) { if (is_standing_in_doorway || !(filtered_joypad_H & kJoypadH_Y)) @@ -2319,7 +2319,7 @@ void LinkItem_Hammer() { // 879f7b link_cant_change_direction |= 1; link_animation_steps = 0; player_handler_timer = 0; - link_item_in_hand = 2; + link_item_in_hand = item_in_hand_hammer; //put hammer in hand } HaltLinkWhenUsingItems(); @@ -2341,7 +2341,7 @@ void LinkItem_Hammer() { // 879f7b link_delay_timer_spin_attack = 0; button_mask_b_y &= ~0x40; link_cant_change_direction &= ~1; - link_item_in_hand &= ~2; + link_item_in_hand &= ~item_in_hand_hammer; //Remove hammer from hand } } @@ -2355,7 +2355,7 @@ void LinkItem_Bow() { // 87a006 link_delay_timer_spin_attack = kBowDelays[0]; link_animation_steps = 0; player_handler_timer = 0; - link_item_in_hand = 16; + link_item_in_hand = item_in_hand_bow; // bow/arrow in hand } HaltLinkWhenUsingItems(); link_direction &= ~0xf; @@ -2386,7 +2386,7 @@ void LinkItem_Bow() { // 87a006 link_delay_timer_spin_attack = 0; button_mask_b_y &= ~0x40; link_cant_change_direction &= ~1; - link_item_in_hand &= ~0x10; + link_item_in_hand &= ~item_in_hand_bow; //Remove bow (16) from hand if (button_b_frames >= 9) button_b_frames = 9; } @@ -2396,7 +2396,7 @@ void LinkItem_Boomerang() { // 87a0bb if (is_standing_in_doorway || !CheckYButtonPress() || flag_for_boomerang_in_place) return; link_animation_steps = 0; - link_item_in_hand = 0x80; + link_item_in_hand = item_in_hand_boomerang; //Put boomerang in hand player_handler_timer = 0; link_delay_timer_spin_attack = 7; @@ -2438,7 +2438,7 @@ void Link_ResetBoomerangYStuff() { // 87a11f } void LinkItem_Bombs() { // 87a138 - if (is_standing_in_doorway || follower_indicator == 13 || !CheckYButtonPress()) + if (is_standing_in_doorway || follower_indicator == follower_indicator_BigBomb || !CheckYButtonPress()) return; button_mask_b_y &= ~0x40; AncillaAdd_Bomb(7, enhanced_features0 & kFeatures0_MoreActiveBombs ? 3 : 1); @@ -2446,58 +2446,75 @@ void LinkItem_Bombs() { // 87a138 } void LinkItem_Bottle() { // 87a15b - if (!CheckYButtonPress()) - return; - button_mask_b_y &= ~0x40; int btidx = link_item_bottle_index - 1; uint8 b = link_bottle_info[btidx]; - if (b == 0) + if (b == bottle_state_empty || (button_mask_b_y & 0x40)){ // bottle is empty OR netAmnimation already started playing + LinkItem_Net(); + return; + } + if (!CheckYButtonPress()) + return; + button_mask_b_y &= ~0x40; + if (b == 0){ return; + } if (b < 3) { fail: - Ancilla_Sfx2_Near(60); - } else if (b == 3) { // red potion + Ancilla_Sfx2_Near(sound_fail); + } else if (b == bottle_state_redpotion) { // red potion if (link_health_capacity == link_health_current) goto fail; - link_bottle_info[btidx] = 2; + link_bottle_info[btidx] = bottle_state_empty; link_item_in_hand = 0; submodule_index = 4; saved_module_for_menu = main_module_index; main_module_index = 14; animate_heart_refill_countdown = 7; Hud_Rebuild(); - } else if (b == 4) { // green potion + } else if (b == bottle_state_greenpotion) { // green potion if (link_magic_power == 128) goto fail; - link_bottle_info[btidx] = 2; + link_bottle_info[btidx] = bottle_state_empty; link_item_in_hand = 0; submodule_index = 8; saved_module_for_menu = main_module_index; main_module_index = 14; animate_heart_refill_countdown = 7; Hud_Rebuild(); - } else if (b == 5) { // blue potion + } else if (b == bottle_state_bluepotion) { // blue potion if (link_health_capacity == link_health_current && link_magic_power == 128) goto fail; - link_bottle_info[btidx] = 2; + link_bottle_info[btidx] = bottle_state_empty; link_item_in_hand = 0; submodule_index = 9; saved_module_for_menu = main_module_index; main_module_index = 14; animate_heart_refill_countdown = 7; Hud_Rebuild(); - } else if (b == 6) { // fairy + } else if (b == bottle_state_fairy) { // fairy link_item_in_hand = 0; if (ReleaseFairy() < 0) goto fail; - link_bottle_info[btidx] = 2; + link_bottle_info[btidx] = bottle_state_empty; Hud_Rebuild(); - } else if (b == 7 || b == 8) { // bad/good bee + } else if (b == bottle_state_bee || b == bottle_state_goodbee) { // bad/good bee if (!ReleaseBeeFromBottle(btidx)) goto fail; - link_bottle_info[btidx] = 2; + link_bottle_info[btidx] = bottle_state_empty; Hud_Rebuild(); + } else //Ycar + { + if (enhanced_features0 & kFeatures0_Pokemode){ //Pokemode + { + if (!ReleaseBeeFromBottle(btidx)) + goto fail; + link_bottle_info[btidx] = bottle_state_empty; + Hud_Rebuild(); + } + } + } + } void LinkItem_Lamp() { // 87a24d @@ -2532,7 +2549,7 @@ void LinkItem_Powder() { // 87a293 player_handler_timer = 0; link_animation_steps = 0; link_direction &= ~0xf; - link_item_in_hand = 0x40; + link_item_in_hand = item_in_hand_magic_powder; //Put magic powder in hand (Ycar) } link_x_vel = link_y_vel = 0; link_direction = 0; @@ -2655,7 +2672,7 @@ void LinkItem_Ether() { // 87a494 button_mask_b_y &= ~0x40; if (is_standing_in_doorway || flag_block_link_menu || dung_savegame_state_bits & 0x8000 || !((uint8)(link_sword_type + 1) & ~1) || - follower_dropped && follower_indicator == 13) { + follower_dropped && follower_indicator == follower_indicator_BigBomb) { Ancilla_Sfx2_Near(60); return; } @@ -2704,7 +2721,7 @@ void LinkItem_Bombos() { // 87a569 button_mask_b_y &= ~0x40; if (is_standing_in_doorway || flag_block_link_menu || dung_savegame_state_bits & 0x8000 || !((uint8)(link_sword_type + 1) & ~1) || - follower_dropped && follower_indicator == 13) { + follower_dropped && follower_indicator == follower_indicator_BigBomb) { Ancilla_Sfx2_Near(60); return; } @@ -2752,7 +2769,7 @@ void LinkItem_Quake() { // 87a64b button_mask_b_y &= ~0x40; if (is_standing_in_doorway || flag_block_link_menu || dung_savegame_state_bits & 0x8000 || !((uint8)(link_sword_type + 1) & ~1) || - follower_dropped && follower_indicator == 13) { + follower_dropped && follower_indicator == follower_indicator_BigBomb) { Ancilla_Sfx2_Near(60); return; } @@ -2912,7 +2929,7 @@ void LinkItem_Mirror() { // 87a91a if (!CheckYButtonPress()) return; - if (follower_indicator == 10) { + if (follower_indicator == follower_indicator_Kiki) { dialogue_message_index = 289; Main_ShowTextMessage(); return; @@ -3026,19 +3043,19 @@ void Link_PerformDesertPrayer() { // 87aa6c void HandleFollowersAfterMirroring() { // 87aaa2 TileDetect_MainHandler(0); link_animation_steps = 0; - if (follower_indicator == 12 || follower_indicator == 13) { - if (follower_indicator == 13) { + if (follower_indicator == follower_indicator_PurpleChess || follower_indicator == follower_indicator_BigBomb) { + if (follower_indicator == follower_indicator_BigBomb) { super_bomb_indicator_unk2 = 0xfe; super_bomb_indicator_unk1 = 0; } if (follower_dropped) { follower_dropped = 0; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } - } else if (follower_indicator == 9 || follower_indicator == 10) { - follower_indicator = 0; - } else if (follower_indicator == 7 || follower_indicator == 8) { - follower_indicator ^= (7 ^ 8); + } else if (follower_indicator == follower_indicator_LockSmith || follower_indicator == follower_indicator_Kiki) { + follower_indicator = follower_indicator_noone; + } else if (follower_indicator == follower_indicator_Smithy_Frog || follower_indicator == follower_indicator_Smith) { + follower_indicator ^= (follower_indicator_Smithy_Frog ^ follower_indicator_Smith); LoadFollowerGraphics(); AncillaAdd_DwarfPoof(0x40, 4); } @@ -3293,7 +3310,7 @@ void Link_HandleCape_passive_LiftCheck() { // 87ae88 } void Player_CheckHandleCapeStuff() { // 87ae8f - if (link_cape_mode && current_item_active == 19) { + if (link_cape_mode && current_item_active == ciaLI_Cape) { if (current_item_active == current_item_y) { if (--cape_decrement_counter) return; @@ -3407,11 +3424,21 @@ bool SearchForByrnaSpark() { // 87afb5 return false; } +void LinkItem_Net_endAnimation(){ + link_var30d = 0; + player_handler_timer = 0; + button_mask_b_y &= 0x80; + link_position_mode = 0; + link_cant_change_direction &= ~1; + player_oam_x_offset = 0x80; + player_oam_y_offset = 0x80; +} + void LinkItem_Net() { // 87aff8 static const uint8 kBugNetTimers[] = { 11, 6, 7, 8, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 9, 4, 5, 6, 7, 8, 1, 2, 3, 4, 10, 8, 1, 2, 3, 4, 5, 6, 7, 8 }; - if (!(button_mask_b_y & 0x40)) { - if (is_standing_in_doorway || !CheckYButtonPress()) - return; + if (!(button_mask_b_y & 0x40)) { + if (is_standing_in_doorway || !CheckYButtonPress()){ + return;} player_handler_timer = kBugNetTimers[(link_direction_facing >> 1) * 10]; link_delay_timer_spin_attack = 3; @@ -3419,7 +3446,7 @@ void LinkItem_Net() { // 87aff8 link_position_mode = 16; link_cant_change_direction |= 1; link_animation_steps = 0; - Ancilla_Sfx2_Near(50); + Ancilla_Sfx2_Near(sound_itemNet); //play the net sound } HaltLinkWhenUsingItems(); @@ -3431,14 +3458,10 @@ void LinkItem_Net() { // 87aff8 link_delay_timer_spin_attack = 3; player_handler_timer = kBugNetTimers[(link_direction_facing >> 1) * 10 + link_var30d]; - if (link_var30d == 10) { - link_var30d = 0; - player_handler_timer = 0; - button_mask_b_y &= 0x80; - link_position_mode = 0; - link_cant_change_direction &= ~1; - player_oam_x_offset = 0x80; - player_oam_y_offset = 0x80; + if (link_var30d == 10) { // end animation + + Follower_PutInBottle(follower_indicator);//pokemode + LinkItem_Net_endAnimation(); } } diff --git a/app/jni/src/src/player.h b/app/jni/src/src/player.h index 7f4a55f..0ce769b 100644 --- a/app/jni/src/src/player.h +++ b/app/jni/src/src/player.h @@ -1,6 +1,347 @@ #pragma once #include "types.h" + + +enum{ + sound_itemNet = 50, + sound_fail = 60, +}; + +enum{ + bottle_state_empty = 2, + bottle_state_redpotion = 3, + bottle_state_greenpotion = 4, + bottle_state_bluepotion = 5, + bottle_state_fairy = 6, + bottle_state_bee = 7, + bottle_state_goodbee = 8, + + + bottle_state_09_GiantMoldorm = 9, +// bottle_state_08_Octorok = 0xa, // 0A + bottle_state_0B_Cucco = 0xb, + bottle_state_0C_OctorokStone = 0xc, + bottle_state_0D_Buzzblob = 0xd, + bottle_state_0E_Snapdragon = 0xe, + bottle_state_0F_Octoballoon = 0xf, + bottle_state_10_OctoballoonBaby = 0x10, + bottle_state_11_Hinox = 0x11, + bottle_state_12_Moblin = 0X12, + bottle_state_13_MiniHelmasaur = 0x13, + bottle_state_14_ThievesTownGrate = 0x14, + bottle_state_15_Antifairy = 0x15, + bottle_state_16_Elder_bounce = 0x16, + bottle_state_17_Hoarder = 0x17, + bottle_state_18_MiniMoldorm = 0x18, + bottle_state_19_Poe = 0x19, + bottle_state_1A_Smithy = 0x1a, + bottle_state_1B_Arrow = 0x1b, + bottle_state_1C_Statue = 0x1c, + bottle_state_1D_FluteQuest = 0x1d, + bottle_state_1E_CrystalSwitch = 0x1e, + bottle_state_1F_SickKid = 0x1f, + bottle_state_20_Sluggula = 0x20, + bottle_state_21_WaterSwitch = 0x21, + bottle_state_22_Ropa = 0x22, + bottle_state_23_RedBari = 0x23, +// bottle_state_23_RedBari = 0x24, //24 + bottle_state_25_TalkingTree = 0x25, + bottle_state_26_HardhatBeetle = 0x26, + bottle_state_27_Deadrock = 0x27, + bottle_state_28_DarkWorldHintNPC = 0x28, + bottle_state_29_HumanMulti_1 = 0x29, + bottle_state_2A_SweepingLady = 0x2a, + bottle_state_2B_Hobo = 0x2b, + bottle_state_2C_Lumberjacks = 0x2c, + bottle_state_2D_TelepathicTile = 0x2d, + bottle_state_2E_FluteKid = 0x2e, + bottle_state_2F_MazeGameLady = 0x2f, + bottle_state_30_MazeGameGuy = 0x30, + bottle_state_31_FortuneTeller = 0x31, + bottle_state_32_QuarrelBros = 0x32, + bottle_state_33_RupeePull = 0x33, + bottle_state_34_YoungSnitchLady = 0x34, + bottle_state_35_InnKeeper = 0x35, + bottle_state_36_Witch = 0x36, + bottle_state_37_Waterfall = 0x37, + bottle_state_38_EyeStatue = 0x38, + bottle_state_39_Locksmith = 0x39, + bottle_state_3A_MagicBat = 0x3a, + bottle_state_3B_DashItem = 0x3b, + bottle_state_3C_TroughBoy = 0x3c, + bottle_state_3D_OldSnitchLady = 0x3d, +// bottle_state_17_Hoarder = 0x3e, //3E + bottle_state_TutorialGuardOrBarrier = 0x3f, //3F +// bottle_state_TutorialGuardOrBarrier = 0x40, //40 + bottle_state_41_BlueGuard = 0x41, +// bottle_state_41_BlueGuard = 0x42, //42 +// bottle_state_41_BlueGuard = 0x43, //43 + bottle_state_44_BluesainBolt = 0x44, + bottle_state_45_HogSpearMan = 0x45, + bottle_state_46_BlueArcher = 0x46, + bottle_state_47_GreenBushGuard = 0x47, + bottle_state_48_RedJavelinGuard = 0x48, + bottle_state_49_RedBushGuard = 0x49, + bottle_state_4A_BombGuard = 0x4a, + bottle_state_4B_GreenKnifeGuard = 0x4b, + bottle_state_4C_Geldman = 0x4c, + bottle_state_4D_Toppo = 0x4d, + bottle_state_4E_Popo = 0x4e, +// bottle_state_4E_Popo = 0x4f, //4F + bottle_state_50_Cannonball = 0x50, + bottle_state_51_ArmosStatue = 0x51, + bottle_state_52_KingZora = 0x52, + bottle_state_53_ArmosKnight = 0x53, + bottle_state_54_Lanmolas = 0x54, + bottle_state_55_Zora = 0x55, + bottle_state_56_WalkingZora = 0x56, + bottle_state_57_DesertStatue = 0x57, + bottle_state_58_Crab = 0x58, + bottle_state_59_LostWoodsBird = 0x59, + bottle_state_5A_LostWoodsSquirrel = 0x5a, + bottle_state_5B_Spark_Clockwise = 0x5b, +// bottle_state_5B_Spark_Clockwise = 0x5c, //5C + bottle_state_5D_Roller_VerticalDownFirst = 0x5d, +// bottle_state_5D_Roller_VerticalDownFirst = 0x5e, //5E +// bottle_state_5D_Roller_VerticalDownFirst = 0x5f, //5F +// bottle_state_5D_Roller_VerticalDownFirst = 0x60, //60 + bottle_state_61_Beamos = 0x61, + bottle_state_62_MasterSword = 0x62, + bottle_state_63_DebirandoPit = 0x63, + bottle_state_64_Debirando = 0x64, + bottle_state_65_ArcheryGame = 0x65, + bottle_state_66_WallCannonVerticalLeft = 0x66, +// bottle_state_66_WallCannonVerticalLeft = 0x67, //67 +// bottle_state_66_WallCannonVerticalLeft = 0x68, //68 +// bottle_state_66_WallCannonVerticalLeft = 0x69, //69 + bottle_state_6A_BallNChain = 0x6a, + bottle_state_6B_CannonTrooper = 0x6b, + bottle_state_6C_MirrorPortal = 0x6c, + bottle_state_6D_Rat = 0x6d, + bottle_state_6E_Rope = 0x6e, + bottle_state_6F_Keese = 0x6f, //bat + bottle_state_70_KingHelmasaurFireball = 0x70, + bottle_state_71_Leever = 0x71, + bottle_state_72_FairyPond = 0x72, + bottle_state_73_UncleAndPriest = 0x73, + bottle_state_74_RunningMan = 0x74, //74 + bottle_state_75_BottleVendor = 0x75, //75 + bottle_state_76_Zelda = 0x76, +// bottle_state_15_Antifairy = 0x77, //77 + bottle_state_78_MrsSahasrahla = 0x78, + bottle_state_79_Bee = 0x79, + bottle_state_7A_Agahnim = 0x7a, + bottle_state_7B_AgahnimBalls = 0x7b, + bottle_state_7C_GreenStalfos = 0x7c, + bottle_state_7D_BigSpike = 0x7d, + bottle_state_7E_Firebar_Clockwise = 0x7e, +// bottle_state_7E_Firebar_Clockwise = 0x7f, //7F + bottle_state_80_Firesnake = 0x80, + bottle_state_81_Hover = 0x81, + bottle_state_82_AntifairyCircle = 0x82, + bottle_state_83_GreenEyegore = 0x83, +// bottle_state_83_GreenEyegore = 0x84, //84 + bottle_state_85_YellowStalfos = 0x85, + bottle_state_86_Kodongo = 0x86, + bottle_state_87_KodongoFire = 0x87, + bottle_state_88_Mothula = 0x88, + bottle_state_89_MothulaBeam = 0x89, + bottle_state_8A_SpikeBlock = 0x8a, + bottle_state_8B_Gibdo = 0x8b, + bottle_state_8C_Arrghus = 0x8c, + bottle_state_8D_Arrghi = 0x8d, + bottle_state_8E_Terrorpin = 0x8e, + bottle_state_8F_Blob = 0x8f, + bottle_state_90_Wallmaster = 0x90, + bottle_state_91_StalfosKnight = 0x91, + bottle_state_92_HelmasaurKing = 0x92, + bottle_state_93_Bumper = 0x93, + bottle_state_94_Pirogusu = 0x94, + bottle_state_95_LaserEyeLeft = 0x95, +// bottle_state_95_LaserEyeLeft = 0x96, //96 +// bottle_state_95_LaserEyeLeft = 0x97, //97 +// bottle_state_95_LaserEyeLeft = 0x98, //98 + bottle_state_99_Pengator = 0x99, + bottle_state_9A_Kyameron = 0x9a, + bottle_state_9B_Wizzrobe = 0x9b, + bottle_state_9C_Zoro = 0x9c, +// bottle_state_9C_Zoro = 0x9d, //9D + bottle_state_9E_HauntedGroveOstritch = 0x9e, + bottle_state_9F_HauntedGroveRabbit = 0x9f, + bottle_state_A0_HauntedGroveBird = 0xa0, + bottle_state_A1_Freezor = 0xa1, + bottle_state_A2_Kholdstare = 0xa2, + bottle_state_A3_KholdstareShell = 0xa3, + bottle_state_A4_FallingIce = 0xa4, + bottle_state_A5_Zazak = 0xa5, //A5 +// bottle_state_Zazak_Main = 0xa6, //A6 + bottle_state_A7_Stalfos = 0xa7, + bottle_state_A8_GreenZirro = 0xa8, +// bottle_state_A8_GreenZirro = 0xa9, + bottle_state_AA_Pikit = 0xaa, + bottle_state_AB_CrystalMaiden = 0xab, + bottle_state_AC_Apple = 0xac, + bottle_state_AD_OldMan = 0xad, + bottle_state_AE_Pipe_Down = 0xae, +// bottle_state_AE_Pipe_Down = 0xaf, //AF +// bottle_state_AE_Pipe_Down = 0xb0, //B0 +// bottle_state_AE_Pipe_Down = 0xb1, //B1 + bottle_state_B2_PlayerBee = 0xb2, // ///////////////////bee + bottle_state_B3_PedestalPlaque = 0xb3, + bottle_state_B4_PurpleChest = 0xb4, + bottle_state_B5_BombShop = 0xb5, + bottle_state_B6_Kiki = 0xb6, + bottle_state_B7_BlindMaiden = 0xb7, + bottle_state_B8_DialogueTester = 0xb8, + bottle_state_B9_BullyAndPinkBall = 0xb9, + bottle_state_BA_Whirlpool = 0xba, + bottle_state_BB_Shopkeeper = 0xbb, + bottle_state_BC_Drunkard = 0xbc, + bottle_state_BD_Vitreous = 0xbd, + bottle_state_BE_VitreousEye = 0xbe, + bottle_state_BF_Lightning = 0xbf, + bottle_state_C0_Catfish = 0xc0, + bottle_state_C1_CutsceneAgahnim = 0xc1, + bottle_state_C2_Boulder = 0xc2, + bottle_state_C3_Gibo = 0xc3, + bottle_state_C4_Thief = 0xc4, + bottle_state_C5_Medusa = 0xc5, + bottle_state_C6_4WayShooter = 0xc6, + bottle_state_C7_Pokey = 0xc7, + bottle_state_C8_BigFairy = 0xc8, + bottle_state_C9_Tektite = 0xc9, + bottle_state_CA_ChainChomp = 0xca, + bottle_state_CB_TrinexxRockHead = 0xcb, + bottle_state_CC = 0xcc, + bottle_state_CD = 0xcd, + bottle_state_CE_Blind = 0xce, + bottle_state_CF_Swamola = 0xcf, + bottle_state_D0_Lynel = 0xd0, + bottle_state_D1_BunnyBeam = 0xd1, + bottle_state_D2_FloppingFish = 0xd2, + bottle_state_D3_Stal = 0xd3, + bottle_state_D4_Landmine = 0xd4, + bottle_state_D5_DigGameGuy =0xd5 , + bottle_state_D6_Ganon = 0xd6, +// bottle_state_D6_Ganon = 0xd7, //D7 + bottle_state_D8_Heart = 0xd8, + bottle_state_D9_GreenRupee = 0xd9, + bottle_state_DA_BlueRupee = 0xda, //DA + bottle_state_DB_RedRupee = 0xdb, //DB + bottle_state_DC_1Bomb = 0xdc, //DC + bottle_state_DD_4Bombs = 0xdd, //DD + bottle_state_DE_8Bombs = 0xde, //DE + bottle_state_DF_SmallMagicFiller = 0xdf, //DF + bottle_state_E0_BigMagicFiller = 0xe0, //E0 + bottle_state_E1_5Arrows = 0xe1, //E1 + bottle_state_E2_10Arrows = 0xe2, //E2 + bottle_state_E3_Fairy = 0xe3, + bottle_state_E4_SmallKey = 0xe4, + bottle_state_E5_BigKey = 0xe5, //E5 + bottle_state_E6_CollectableShield = 0xe6, //E6 + bottle_state_E7_Mushroom = 0xe7, + bottle_state_E8_FakeSword = 0xe8, + bottle_state_E9_PotionShop = 0xe9, + bottle_state_EA_HeartContainer = 0xea, //EA + bottle_state_EB_HeartPiece = 0xeb, //EB + bottle_state_EC_ThrownItem = 0xec, + bottle_state_ED_SomariaPlatform = 0xed, + bottle_state_EE_MovableMantle = 0xee, +// bottle_state_ED_SomariaPlatform = 0xef, //EF +// bottle_state_ED_SomariaPlatform = 0xf0, //F0 +// bottle_state_ED_SomariaPlatform = 0xf1, //F1 + bottle_state_F2_MedallionTablet = 0xf2, + + + bottle_state_00_Raven = 0xf3, //00 + bottle_state_01_Vulture_bounce = 0xf4, + bottle_state_02_StalfosHead = 0xf5, + bottle_state_NULL = 0xf6, // 03 + bottle_state_04_PullSwitch_bounce = 0xf7, // 04 + bottle_state_05_PullSwitch_bounce = 0xf8, // 05 + bottle_state_06_PullSwitch_bounce = 0xf9, // 06 + bottle_state_07_PullSwitch_bounce = 0xfa, // 07 + bottle_state_08_Octorok = 0xfb, + +}; + +//static const int8 bottle_state_empty = 2; +//static const int8 bottle_state_redpotion = 3; +//static const int8 bottle_state_greenpotion = 4; +//static const int8 bottle_state_bluepotion = 5; +//static const int8 bottle_state_fairy = 6; +//static const int8 bottle_state_bee = 7; +//static const int8 bottle_state_goodbee = 8; + +static const int8 item_in_hand_rod = 1; //b00000001 +static const int8 item_in_hand_hammer = 2; //b00000010 +static const int8 item_in_hand_swordshield = 5; //b00000101 //often tested, but never assigned? +static const int8 item_in_hand_hammerorSwordRelatedMaybe = 0xa; //10 //b00001010 // sprite_main.c=>hammerRelated ; sprite.c=>swordRelated? +static const int8 item_in_hand_bow = 0x10; //16 //b00010000 +static const int8 item_in_hand_magic_powder = 0x40; //64 //b01000000 +static const int8 item_in_hand_boomerang = 0x80; //128 //b10000000 +static const int8 item_in_hand_dunno3 = 0x93;//147 = 128+16+2=1 //b10010011 //rod+hammer+bow+boomerang (not magicpowder) + +enum{ + follower_indicator_noone = 0, + follower_indicator_Zelda = 1, + follower_indicator_0x3 = 3, + follower_indicator_OldMan = 4, + follower_indicator_Uncle_Telepathy = 5, + follower_indicator_BlindMaiden = 6, + follower_indicator_Smithy_Frog = 7, + follower_indicator_Smith = 8, //Smith (not frog any more in light world) + follower_indicator_LockSmith = 9, + follower_indicator_Kiki = 10, + follower_indicator_11 = 11, + follower_indicator_PurpleChess = 12, + follower_indicator_BigBomb = 13, + follower_indicator_HandleTrigger = 0xe, + follower_indicator_Bulbazaur = 16, + follower_indicator_Squirtle = 32, + follower_indicator_Charmander = 64, +}; + +//static const uint8 follower_indicator_noone = 0; +//static const uint8 follower_indicator_Zelda = 1; +//static const uint8 follower_indicator_0x3 = 3; +//static const uint8 follower_indicator_OldMan = 4; +//static const uint8 follower_indicator_Uncle_Telepathy = 5; +//static const uint8 follower_indicator_BlindMaiden = 6; +//static const uint8 follower_indicator_Smithy_Frog = 7; +//static const uint8 follower_indicator_Smith = 8; //Smith (not frog any more in light world) +//static const uint8 follower_indicator_LockSmith = 9; +//static const uint8 follower_indicator_Kiki = 10; +//static const uint8 follower_indicator_11 = 11; +//static const uint8 follower_indicator_PurpleChess = 12; +//static const uint8 follower_indicator_BigBomb = 13; +//static const uint8 follower_indicator_HandleTrigger = 0xe; + +static const uint8 ciaLI_none = 0; //ciaLI stands for current_item_active_LinkItem +static const uint8 ciaLI_Bombs = 1; +static const uint8 ciaLI_Boomerang = 2; +static const uint8 ciaLI_Bow = 3; +static const uint8 ciaLI_Hammer = 4; +static const uint8 ciaLI_FireRod = 5; +static const uint8 ciaLI_IceRod = 6; +static const uint8 ciaLI_Net = 7; +static const uint8 ciaLI_ShovelAndFlute = 8; +static const uint8 ciaLI_Lamp = 9; +static const uint8 ciaLI_Powder = 10; +static const uint8 ciaLI_Bottle = 11; +static const uint8 ciaLI_Book = 12; +static const uint8 ciaLI_CaneOfByrna = 13; +static const uint8 ciaLI_Hookshot = 14; +static const uint8 ciaLI_Bombos = 15; +static const uint8 ciaLI_Ether = 16; +static const uint8 ciaLI_Quake = 17; +static const uint8 ciaLI_CaneOfSomaria = 18; +static const uint8 ciaLI_Cape = 19; +static const uint8 ciaLI_Mirror = 20; +static const uint8 ciaLI_Shovel = 21; +//(Ycar) + extern const uint8 kSwimmingTab1[4]; extern const uint8 kSwimmingTab2[2]; diff --git a/app/jni/src/src/player_oam.c b/app/jni/src/src/player_oam.c index 72dfabd..f3c7fd3 100644 --- a/app/jni/src/src/player_oam.c +++ b/app/jni/src/src/player_oam.c @@ -725,7 +725,7 @@ bool PlayerOam_WantInvokeSword() { link_player_handler_state != kPlayerState_SpinAttacking && link_player_handler_state != kPlayerState_SpinAttackMotion && !link_state_bits && !link_force_hold_sword_up && !link_electrocute_on_touch) { - if (link_item_in_hand & 0x40) + if (link_item_in_hand & item_in_hand_magic_powder) return false; if (link_position_mode & 0x3d || link_item_in_hand & 0x93) return true; @@ -970,7 +970,7 @@ void LinkOam_Main() { // 8da18e uint8 oam_y = kDrawSword_y[r2] + ycoord - zcoord; uint8 oam_x = kDrawSword_x[r2] + xcoord; - if ((link_item_in_hand & 2) ? (player_handler_timer == 2 && link_delay_timer_spin_attack == 15) : ((link_item_in_hand & 5) == 0)) { + if ((link_item_in_hand & item_in_hand_hammer) ? (player_handler_timer == 2 && link_delay_timer_spin_attack == 15) : ((link_item_in_hand & 5) == 0)) { player_oam_y_offset = kSwordOamYOffs[r2]; player_oam_x_offset = kSwordOamXOffs[r2]; } @@ -979,7 +979,7 @@ void LinkOam_Main() { // 8da18e assert(link_state_bits == 0); oam_pal = kPlayerOam_Rod[eq_selected_rod - 1] << 8; } - if ((link_position_mode & 8) && current_item_y == 13) + if ((link_position_mode & 8) && current_item_y == ciaLI_CaneOfByrna) oam_pal = 0x400; // cane of byrna int oam_pos = ((scratch_0_var ? kSwordStuff_oam_index_ptrs_1 : kSwordStuff_oam_index_ptrs_0)[r4loc] + sort_sprites_offset_into_oam_buffer)>>2; diff --git a/app/jni/src/src/sprite.c b/app/jni/src/src/sprite.c index f9524bb..75bdda4 100644 --- a/app/jni/src/src/sprite.c +++ b/app/jni/src/src/sprite.c @@ -80,12 +80,12 @@ static const uint8 kSprite_SimplifiedTileAttr[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const int8 kSprite_Func5_Tab3[256] = { +static const int8 kSprite_Func5_Tab3[256] = { // Sprite_CheckTileProperty returns false when ==0 0, 1, 2, 3, 2, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 1, 2, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 0, 0, 0, 1, 2,-1,-1,-1,-1,-1,-1,-1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, -1, -1, -1, -1, + 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0,-1,-1,-1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -136,17 +136,17 @@ static const uint8 kSpriteInit_Flags2[243] = { 0x83, 0x83, 0x83, }; static const uint8 kSpriteInit_Health[243] = { - 12, 6, 255, 3, 3, 3, 3, 3, 2, 12, 4, 255, 0, 3, 12, 2, + 12, 6, 255, 3, 3, 3, 3, 3, 2, 12, 4, 255, 0, 3, 12, 2, //0* 0, 20, 4, 4, 0, 255, 0, 2, 3, 8, 0, 0, 0, 0, 0, 0, 8, 3, 8, 2, 2, 0, 3, 255, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3, 3, 0, 3, 0, 0, 0, 0, 3, 2, 255, 2, 6, 4, 8, 6, 8, 6, 4, 8, 8, 8, 4, 4, 2, 2, 2, - 255, 8, 255, 48, 16, 8, 8, 255, 2, 0, 0, 255, 255, 255, 255, 255, + 255, 8, 255, 48, 16, 8, 8, 255, 2, 0, 0, 255, 255, 255, 255, 255, //5* 255, 255, 255, 255, 4, 4, 255, 255, 255, 255, 16, 3, 0, 2, 4, 1, 255, 4, 255, 0, 0, 0, 0, 255, 0, 0, 96, 255, 24, 255, 255, 255, 3, 4, 255, 16, 8, 8, 0, 255, 32, 32, 32, 32, 32, 8, 8, 4, 8, 64, 48, 255, 2, 255, 255, 255, 255, 16, 4, 2, 4, 4, 8, 8, - 8, 16, 64, 64, 8, 4, 8, 4, 4, 8, 12, 16, 0, 0, 0, 0, + 8, 16, 64, 64, 8, 4, 8, 4, 4, 8, 12, 16, 0, 0, 0, 0, //A* 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 48, 255, 255, 255, 255, 8, 0, 0, 0, 32, 0, 8, 5, 40, 40, 40, 90, 16, 24, 64, 0, 4, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, @@ -154,40 +154,40 @@ static const uint8 kSpriteInit_Health[243] = { 0, 0, 0, }; const uint8 kSpriteInit_BumpDamage[243] = { - 0x83, 0x83, 0x81, 2, 2, 2, 2, 2, 1, 0x13, 1, 1, 1, 1, 8, 1, - 1, 8, 5, 3, 0x40, 4, 0, 2, 3, 0x85, 0, 1, 0, 0x40, 0, 0, - 6, 0, 5, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0x40, 0, 0, 0, 0, 0, 0, 2, 2, - 0, 1, 1, 3, 1, 3, 1, 1, 3, 3, 3, 1, 3, 1, 1, 1, - 1, 1, 1, 0x11, 0x14, 1, 1, 2, 5, 0, 0, 4, 4, 8, 8, 8, - 8, 4, 0, 4, 3, 2, 2, 2, 2, 2, 3, 1, 0, 0, 1, 0x80, - 5, 1, 0, 0, 0, 0x40, 0, 4, 0, 0, 0x14, 4, 6, 4, 4, 4, - 4, 3, 4, 4, 4, 1, 4, 4, 0x15, 5, 4, 5, 0x15, 0x15, 3, 5, - 0, 5, 0x15, 5, 5, 6, 6, 6, 6, 5, 3, 6, 5, 5, 3, 3, - 3, 6, 0x17, 0x15, 0x15, 5, 5, 1, 0x85, 0x83, 5, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x17, 0x17, 5, - 5, 5, 4, 3, 2, 0x10, 0, 6, 0, 5, 7, 0x17, 0x17, 0x17, 0x15, 7, - 6, 0x10, 0, 3, 3, 0, 0x19, 0x19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, + 0x83, 0x83, 0x81, 2, 2, 2, 2, 2, 1, 0x13, 1, 1, 1, 1, 8, 1, //0* + 1, 8, 5, 3, 0x40, 4, 0, 2, 3, 0x85, 0, 1, 0, 0x40, 0, 0, //1* + 6, 0, 5, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, //2* + 0, 0, 0, 0, 0, 0, 0, 0x40, 0, 0, 0, 0, 0, 0, 2, 2, //3* + 0, 1, 1, 3, 1, 3, 1, 1, 3, 3, 3, 1, 3, 1, 1, 1, //4* + 1, 1, 1, 0x11, 0x14, 1, 1, 2, 5, 0, 0, 4, 4, 8, 8, 8, //5* + 8, 4, 0, 4, 3, 2, 2, 2, 2, 2, 3, 1, 0, 0, 1, 0x80, //6* + 5, 1, 0, 0, 0, 0x40, 0, 4, 0, 0, 0x14, 4, 6, 4, 4, 4, //7* + 4, 3, 4, 4, 4, 1, 4, 4, 0x15, 5, 4, 5, 0x15, 0x15, 3, 5, //8* + 0, 5, 0x15, 5, 5, 6, 6, 6, 6, 5, 3, 6, 5, 5, 3, 3, //9* + 3, 6, 0x17, 0x15, 0x15, 5, 5, 1, 0x85, 0x83, 5, 4, 0, 0, 0, 0, //A* + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x17, 0x17, 5, //B* + 5, 5, 4, 3, 2, 0x10, 0, 6, 0, 5, 7, 0x17, 0x17, 0x17, 0x15, 7, //C* + 6, 0x10, 0, 3, 3, 0, 0x19, 0x19, 0, 0, 0, 0, 0, 0, 0, 0, //D* + 0, 0, 0, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //E* + 0, 0, 0, //F* }; static const uint8 kSpriteInit_Flags3[243] = { - 0x19, 0xb, 0x1b, 0x4b, 0x41, 0x41, 0x41, 0x4d, 0x1d, 1, 0x1d, 0x19, 0x8d, 0x1b, 9, 0x9d, - 0x3d, 1, 9, 0x11, 0x40, 1, 0x4d, 0x19, 7, 0x1d, 0x59, 0x80, 0x4d, 0x40, 1, 0x49, - 0x1b, 0x41, 3, 0x13, 0x15, 0x41, 0x18, 0x1b, 0x41, 0x47, 0xf, 0x49, 0x4b, 0x4d, 0x41, 0x47, - 0x49, 0x4d, 0x49, 0x40, 0x4d, 0x47, 0x49, 0x41, 0x74, 0x47, 0x5b, 0x58, 0x51, 0x49, 0x1d, 0x5d, - 3, 0x19, 0x1b, 0x17, 0x19, 0x17, 0x19, 0x1b, 0x17, 0x17, 0x17, 0x1b, 0xd, 9, 0x19, 0x19, - 0x49, 0x5d, 0x5b, 0x49, 0xd, 3, 0x13, 0x41, 0x1b, 0x5b, 0x5d, 0x43, 0x43, 0x4d, 0x4d, 0x4d, - 0x4d, 0x4d, 0x49, 1, 0, 0x41, 0x4d, 0x4d, 0x4d, 0x4d, 0x1d, 9, 0xc4, 0xd, 0xd, 9, - 3, 3, 0x4b, 0x47, 0x47, 0x49, 0x49, 0x41, 0x47, 0x36, 0x8b, 0x49, 0x1d, 0x49, 0x43, 0x43, - 0x43, 0xb, 0x41, 0xd, 7, 0xb, 0x1d, 0x43, 0xd, 0x43, 0xd, 0x1d, 0x4d, 0x4d, 0x1b, 0x1b, - 0xa, 0xb, 0, 5, 0xd, 1, 1, 1, 1, 0xb, 5, 1, 1, 1, 7, 0x17, - 0x19, 0xd, 0xd, 0x80, 0x4d, 0x19, 0x17, 0x19, 0xb, 9, 0xd, 0x4a, 0x12, 0x49, 0xc3, 0xc3, - 0xc3, 0xc3, 0x76, 0x40, 0x59, 0x41, 0x58, 0x4f, 0x73, 0x5b, 0x44, 0x41, 0x51, 0xa, 0xb, 0xb, - 0x4b, 0, 0x40, 0x5b, 0xd, 0, 0, 0xd, 0x4b, 0xb, 0x59, 0x41, 0xb, 0xd, 1, 0xd, - 0xd, 0, 0x50, 0x4c, 0x44, 0x51, 1, 1, 0xf2, 0xf8, 0xf4, 0xf2, 0xd4, 0xd4, 0xd4, 0xf8, - 0xf8, 0xf4, 0xf4, 0xd8, 0xf8, 0xd8, 0xdf, 0xc8, 0x69, 0xc1, 0xd2, 0xd2, 0xdc, 0xc7, 0xc1, 0xc7, - 0xc7, 0xc7, 0xc1, + 0x19, 0xb, 0x1b, 0x4b, 0x41, 0x41, 0x41, 0x4d, 0x1d, 1, 0x1d, 0x19, 0x8d, 0x1b, 9, 0x9d, //0* + 0x3d, 1, 9, 0x11, 0x40, 1, 0x4d, 0x19, 7, 0x1d, 0x59, 0x80, 0x4d, 0x40, 1, 0x49, //1* + 0x1b, 0x41, 3, 0x13, 0x15, 0x41, 0x18, 0x1b, 0x41, 0x47, 0xf, 0x49, 0x4b, 0x4d, 0x41, 0x47, //2* + 0x49, 0x4d, 0x49, 0x40, 0x4d, 0x47, 0x49, 0x41, 0x74, 0x47, 0x5b, 0x58, 0x51, 0x49, 0x1d, 0x5d, //3* + 3, 0x19, 0x1b, 0x17, 0x19, 0x17, 0x19, 0x1b, 0x17, 0x17, 0x17, 0x1b, 0xd, 9, 0x19, 0x19, //4* + 0x49, 0x5d, 0x5b, 0x49, 0xd, 3, 0x13, 0x41, 0x1b, 0x5b, 0x5d, 0x43, 0x43, 0x4d, 0x4d, 0x4d, //5* + 0x4d, 0x4d, 0x49, 1, 0, 0x41, 0x4d, 0x4d, 0x4d, 0x4d, 0x1d, 9, 0xc4, 0xd, 0xd, 9, //6* + 3, 3, 0x4b, 0x47, 0x47, 0x49, 0x49, 0x41, 0x47, 0x36, 0x8b, 0x49, 0x1d, 0x49, 0x43, 0x43, //7* + 0x43, 0xb, 0x41, 0xd, 7, 0xb, 0x1d, 0x43, 0xd, 0x43, 0xd, 0x1d, 0x4d, 0x4d, 0x1b, 0x1b, //8* + 0xa, 0xb, 0, 5, 0xd, 1, 1, 1, 1, 0xb, 5, 1, 1, 1, 7, 0x17, //9* + 0x19, 0xd, 0xd, 0x80, 0x4d, 0x19, 0x17, 0x19, 0xb, 9, 0xd, 0x4a, 0x12, 0x49, 0xc3, 0xc3, //A* + 0xc3, 0xc3, 0x76, 0x40, 0x59, 0x41, 0x58, 0x4f, 0x73, 0x5b, 0x44, 0x41, 0x51, 0xa, 0xb, 0xb, //B* + 0x4b, 0, 0x40, 0x5b, 0xd, 0, 0, 0xd, 0x4b, 0xb, 0x59, 0x41, 0xb, 0xd, 1, 0xd, //C* + 0xd, 0, 0x50, 0x4c, 0x44, 0x51, 1, 1, 0xf2, 0xf8, 0xf4, 0xf2, 0xd4, 0xd4, 0xd4, 0xf8, //D* + 0xf8, 0xf4, 0xf4, 0xd8, 0xf8, 0xd8, 0xdf, 0xc8, 0x69, 0xc1, 0xd2, 0xd2, 0xdc, 0xc7, 0xc1, 0xc7, //E* + 0xc7, 0xc7, 0xc1, //F* }; static const uint8 kSpriteInit_Flags4[243] = { 0, 0, 0, 0x43, 0x43, 0x43, 0x43, 0x43, 0, 0, 0, 0, 0x1c, 0, 0, 2, @@ -1403,7 +1403,7 @@ void Sprite_HandleAbsorptionByPlayer(int k) { // 86d13c goto after_getkey; case 13: item_receipt_method = 0; - Link_ReceiveItem(0x32, 0); + Link_ReceiveItem(receiveitem_index_big_key, 0); after_getkey: sprite_N[k] = sprite_subtype[k]; dung_savegame_state_bits |= kAbsorbBigKey[sprite_die_action[k]] << 8; @@ -2081,6 +2081,41 @@ void Sprite_MoveZ(int k) { // 86e96c sprite_z[k] = z >> 8; } +ProjectSpeedRet Sprite_ProjectSpeedTowardsTarget(int k, int j, uint8 vel) { // 86e991 + if (vel == 0) { + ProjectSpeedRet rv = { 0, 0, 0, 0 }; + return rv; + } + PairU8 below = Sprite_IsBelowTarget(k, j); + uint8 r12 = sign8(below.b) ? -below.b : below.b; + + PairU8 right = Sprite_IsRightOfTarget(k, j); + uint8 r13 = sign8(right.b) ? -right.b : right.b; + uint8 t; + bool swapped = false; + if (r13 < r12) { + swapped = true; + t = r12, r12 = r13, r13 = t; + } + uint8 xvel = vel, yvel = 0; + t = 0; + do { + t += r12; + if (t >= r13) + t -= r13, yvel++; + } while (--vel); + if (swapped) + t = xvel, xvel = yvel, yvel = t; + ProjectSpeedRet rv = { + (uint8)(right.a ? -xvel : xvel), + (uint8)(below.a ? -yvel : yvel), + right.b, + below.b + + }; + return rv; +} + ProjectSpeedRet Sprite_ProjectSpeedTowardsLink(int k, uint8 vel) { // 86e991 if (vel == 0) { ProjectSpeedRet rv = { 0, 0, 0, 0 }; @@ -2116,6 +2151,13 @@ ProjectSpeedRet Sprite_ProjectSpeedTowardsLink(int k, uint8 vel) { // 86e991 return rv; } + +void Sprite_ApplySpeedTowardsTarget(int k, int j, uint8 vel) { // 86ea04 + ProjectSpeedRet pt = Sprite_ProjectSpeedTowardsTarget(k, j, vel); + sprite_x_vel[k] = pt.x; + sprite_y_vel[k] = pt.y; +} + void Sprite_ApplySpeedTowardsLink(int k, uint8 vel) { // 86ea04 ProjectSpeedRet pt = Sprite_ProjectSpeedTowardsLink(k, vel); sprite_x_vel[k] = pt.x; @@ -2156,6 +2198,18 @@ ProjectSpeedRet Sprite_ProjectSpeedTowardsLocation(int k, uint16 x, uint16 y, ui return rv; } + +uint8 Sprite_DirectionToFaceTarget(int k, int j, PointU8 *coords_out) { // 86eaa4 + PairU8 below = Sprite_IsBelowTarget(k,j); + PairU8 right = Sprite_IsRightOfTarget(k,j); + uint8 ym = sign8(below.b) ? -below.b : below.b; + tmp_counter = ym; + uint8 xm = sign8(right.b) ? -right.b : right.b; + if (coords_out) + coords_out->x = right.b, coords_out->y = below.b; + return (xm >= ym) ? right.a : below.a + 2; +} + uint8 Sprite_DirectionToFaceLink(int k, PointU8 *coords_out) { // 86eaa4 PairU8 below = Sprite_IsBelowLink(k); PairU8 right = Sprite_IsRightOfLink(k); @@ -2167,12 +2221,29 @@ uint8 Sprite_DirectionToFaceLink(int k, PointU8 *coords_out) { // 86eaa4 return (xm >= ym) ? right.a : below.a + 2; } +PairU8 Sprite_IsRightOfTarget(int k, int j) { // 86ead1 + uint16 x = Sprite_GetX(j) - Sprite_GetX(k); + PairU8 rv = { (uint8)(sign16(x) ? 1 : 0), (uint8)x }; + return rv; +} + PairU8 Sprite_IsRightOfLink(int k) { // 86ead1 uint16 x = link_x_coord - Sprite_GetX(k); PairU8 rv = { (uint8)(sign16(x) ? 1 : 0), (uint8)x }; return rv; } + +PairU8 Sprite_IsBelowTarget(int k, int j) { // 86eae8 + int t = sprite_y_lo[j] + 8; + int u = (t & 0xff) + sprite_z[k]; + int v = (u & 0xff) - sprite_y_lo[k]; + int w = sprite_y_hi[j] - sprite_y_hi[k] - (v < 0); + uint8 y = (w & 0xff) + (t >> 8) + (u >> 8); + PairU8 rv = { (uint8)(sign8(y) ? 1 : 0), (uint8)v }; + return rv; +} + PairU8 Sprite_IsBelowLink(int k) { // 86eae8 int t = BYTE(link_y_coord) + 8; int u = (t & 0xff) + sprite_z[k]; @@ -2283,7 +2354,7 @@ void Sprite_CalculateSwordDamage(int k) { // 86ed3f if (!link_is_running) a |= sign8(button_b_frames) ? 4 : sign8(button_b_frames - 9) ? 0 : 8; damage_type_determiner = kSprite_Func14_Damage[a]; - if (link_item_in_hand & 10) + if (link_item_in_hand & 10) //if 0xa in hand damage_type_determiner = 3; link_sword_delay_timer = 4; set_when_damaging_enemies = 16; @@ -2648,17 +2719,17 @@ uint8 Sprite_CheckDamageFromLink(int k) { // 86f2b4 set_when_damaging_enemies = 0; if (link_position_mode & 0x10) - return kCheckDamageFromPlayer_Carry | kCheckDamageFromPlayer_Ne; + return kCheckDamageFromPlayer_Carry | kCheckDamageFromPlayer_Net; - if (link_item_in_hand & 10) { + if (link_item_in_hand & 10) { //if 0xa in hand if (sprite_type[k] >= 0xd6) return 0; - if (sprite_state[k] == 11 && sprite_unk5[k] != 0) { + if (sprite_state[k] == 11 && sprite_unk5[k] != 0) { //seems related to mini-Moldorm recoil...(why?) sprite_state[k] = 2; sprite_delay_main[k] = 32; sprite_flags2[k] = (sprite_flags2[k] & 0xe0) | 3; SpriteSfx_QueueSfx2WithPan(k, 0x1f); - return kCheckDamageFromPlayer_Carry | kCheckDamageFromPlayer_Ne; + return kCheckDamageFromPlayer_Carry | kCheckDamageFromPlayer_Net; } } uint8 type = sprite_type[k]; @@ -2746,7 +2817,7 @@ void Player_SetupActionHitBox(SpriteHitBox *hb) { // 86f5e0 hb->r2 = hb->r3 = 16; } else { int t = 0; - if (!(link_item_in_hand & 10) && !(link_position_mode & 0x10)) { + if (!(link_item_in_hand & 10) && !(link_position_mode & 0x10)) { //if 0xa in hand if (sign8(button_b_frames)) { int x = link_x_coord - 14; int y = link_y_coord - 10; @@ -3700,7 +3771,7 @@ void Sprite_ResetAll_noDisable() { // 89c452 byte_7E0FC6 = 0; sprite_limit_instance = 0; sort_sprites_setting = 0; - if (follower_indicator != 13) + if (follower_indicator != follower_indicator_BigBomb) super_bomb_indicator_unk2 = 0xfe; memset(sprite_where_in_room, 0, 0x1000); memset(overworld_sprite_was_loaded, 0, 0x200); diff --git a/app/jni/src/src/sprite.h b/app/jni/src/src/sprite.h index e1b32f3..a6ed8e6 100644 --- a/app/jni/src/src/sprite.h +++ b/app/jni/src/src/sprite.h @@ -2,6 +2,26 @@ #include "types.h" #include "variables.h" +//Ycar: +static const uint8 receiveitem_index_sword = 0; //uncle's sword +static const uint8 receiveitem_index_master_sword = 1; +static const uint8 receiveitem_index_tempered_sword = 2; +static const uint8 receiveitem_index_bag_of_powder = 0xd; +static const uint8 receiveitem_index_shovel = 0x13; +static const uint8 receiveitem_index_flute = 0x14; +static const uint8 receiveitem_index_bottle = 0x16; +static const uint8 receiveitem_index_cane_of_byrna = 0x18; +static const uint8 receiveitem_index_mirror = 0x1a; +static const uint8 receiveitem_index_book_of_mudora = 0x1d; +static const uint8 receiveitem_index_bug_net = 0x21; +static const uint8 receiveitem_index_heart_container = 0x26; +static const uint8 receiveitem_index_mushroom = 0x29; +static const uint8 receiveitem_index_red_cauldron = 0x2e; +static const uint8 receiveitem_index_green_cauldron = 0x2f; +static const uint8 receiveitem_index_blue_cauldron = 0x30; +static const uint8 receiveitem_index_big_key = 0x32; +static const uint8 receiveitem_index_heart_something = 0x3e; +static const uint8 receiveitem_index_boots = 0x4b; typedef struct PrepOamCoordsRet { uint16 x, y; @@ -44,7 +64,7 @@ typedef struct DrawMultipleData { enum { kCheckDamageFromPlayer_Carry = 1, - kCheckDamageFromPlayer_Ne = 2, + kCheckDamageFromPlayer_Net = 2, }; static inline void SetOamHelper0(OamEnt *oam, uint16 x, uint16 y, uint8 charnum, uint8 flags, uint8 big) { @@ -174,11 +194,16 @@ void Sprite_MoveXY(int k); void Sprite_MoveX(int k); void Sprite_MoveY(int k); void Sprite_MoveZ(int k); +ProjectSpeedRet Sprite_ProjectSpeedTowardsTarget(int k, int j, uint8 vel); ProjectSpeedRet Sprite_ProjectSpeedTowardsLink(int k, uint8 vel); +void Sprite_ApplySpeedTowardsTarget(int k, int j, uint8 vel); void Sprite_ApplySpeedTowardsLink(int k, uint8 vel); ProjectSpeedRet Sprite_ProjectSpeedTowardsLocation(int k, uint16 x, uint16 y, uint8 vel); +uint8 Sprite_DirectionToFaceTarget(int k, int j, PointU8 *coords_out); uint8 Sprite_DirectionToFaceLink(int k, PointU8 *coords_out); +PairU8 Sprite_IsRightOfTarget(int k, int j); PairU8 Sprite_IsRightOfLink(int k); +PairU8 Sprite_IsBelowTarget(int k, int j); PairU8 Sprite_IsBelowLink(int k); PairU8 Sprite_IsRightOfLocation(int k, uint16 x); PairU8 Sprite_IsBelowLocation(int k, uint16 y); diff --git a/app/jni/src/src/sprite_main.c b/app/jni/src/src/sprite_main.c index 51dc044..1eace66 100644 --- a/app/jni/src/src/sprite_main.c +++ b/app/jni/src/src/sprite_main.c @@ -9,6 +9,8 @@ #include "player.h" #include "misc.h" +#include "messaging.h" + #define byte_7FFE01 (*(uint8*)(g_ram+0x1FE01)) static const int8 kSpriteKeese_Tab2[16] = {0, 8, 11, 14, 16, 14, 11, 8, 0, -8, -11, -14, -16, -14, -11, -8}; static const int8 kSpriteKeese_Tab3[16] = {-16, -14, -11, -8, 0, 8, 11, 14, 16, 14, 11, 8, 0, -9, -11, -14}; @@ -462,18 +464,18 @@ static const uint8 kGanon_Draw_Flags[204] = { }; static const uint8 kGanon_Draw_Char2[12] = { 0x40, 0x42, 0, 0, 0x42, 0x40, 0x82, 0x80, 0xa0, 0xa0, 0x80, 0x82 }; static const uint8 kGanon_Draw_Flags2[12] = { 0, 0, 0, 0x40, 0x40, 0x40, 0x40, 0x40, 0, 0x40, 0, 0 }; -static HandlerFuncK *const kSpriteActiveRoutines[243] = { - &Sprite_Raven, +static HandlerFuncK *const kSpriteActiveRoutines[243] = { // is that the actual display of the sprite? + &Sprite_00_Raven, //00 &Sprite_01_Vulture_bounce, &Sprite_02_StalfosHead, - NULL, - &Sprite_PullSwitch_bounce, - &Sprite_PullSwitch_bounce, - &Sprite_PullSwitch_bounce, - &Sprite_PullSwitch_bounce, + NULL, // 03 + &Sprite_PullSwitch_bounce, // 04 + &Sprite_PullSwitch_bounce, // 05 + &Sprite_PullSwitch_bounce, // 06 + &Sprite_PullSwitch_bounce, // 07 &Sprite_08_Octorok, &Sprite_09_GiantMoldorm, - &Sprite_08_Octorok, + &Sprite_08_Octorok, // 0A &Sprite_0B_Cucco, &Sprite_0C_OctorokStone, &Sprite_0D_Buzzblob, @@ -499,39 +501,39 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_21_WaterSwitch, &Sprite_22_Ropa, &Sprite_23_RedBari, - &Sprite_23_RedBari, + &Sprite_23_RedBari, //24 &Sprite_25_TalkingTree, &Sprite_26_HardhatBeetle, &Sprite_27_Deadrock, &Sprite_28_DarkWorldHintNPC, - &Sprite_HumanMulti_1, - &Sprite_SweepingLady, + &Sprite_29_HumanMulti_1, + &Sprite_2A_SweepingLady, &Sprite_2B_Hobo, - &Sprite_Lumberjacks, + &Sprite_2C_Lumberjacks, &Sprite_2D_TelepathicTile, &Sprite_2E_FluteKid, - &Sprite_MazeGameLady, - &Sprite_MazeGameGuy, - &Sprite_FortuneTeller, - &Sprite_QuarrelBros, + &Sprite_2F_MazeGameLady, + &Sprite_30_MazeGameGuy, + &Sprite_31_FortuneTeller, + &Sprite_32_QuarrelBros, &Sprite_33_RupeePull, - &Sprite_YoungSnitchLady, - &Sprite_InnKeeper, - &Sprite_Witch, + &Sprite_34_YoungSnitchLady, + &Sprite_35_InnKeeper, + &Sprite_36_Witch, &Sprite_37_Waterfall, &Sprite_38_EyeStatue, &Sprite_39_Locksmith, &Sprite_3A_MagicBat, - &Sprite_DashItem, - &Sprite_TroughBoy, - &Sprite_OldSnitchLady, - &Sprite_17_Hoarder, - &Sprite_TutorialGuardOrBarrier, - &Sprite_TutorialGuardOrBarrier, + &Sprite_3B_DashItem, + &Sprite_3C_TroughBoy, + &Sprite_3D_OldSnitchLady, + &Sprite_17_Hoarder, //3E + &Sprite_TutorialGuardOrBarrier, //3F + &Sprite_TutorialGuardOrBarrier, //40 // Trampoline 48 entries &Sprite_41_BlueGuard, - &Sprite_41_BlueGuard, - &Sprite_41_BlueGuard, + &Sprite_41_BlueGuard, //42 + &Sprite_41_BlueGuard, //43 &Sprite_44_BluesainBolt, &Sprite_45_HogSpearMan, &Sprite_46_BlueArcher, @@ -543,7 +545,7 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_4C_Geldman, &Sprite_4D_Toppo, &Sprite_4E_Popo, - &Sprite_4E_Popo, + &Sprite_4E_Popo, //4F &Sprite_50_Cannonball, &Sprite_51_ArmosStatue, &Sprite_52_KingZora, @@ -556,34 +558,34 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_59_LostWoodsBird, &Sprite_5A_LostWoodsSquirrel, &Sprite_5B_Spark_Clockwise, - &Sprite_5B_Spark_Clockwise, - &Sprite_5D_Roller_VerticalDownFirst, - &Sprite_5D_Roller_VerticalDownFirst, - &Sprite_5D_Roller_VerticalDownFirst, + &Sprite_5B_Spark_Clockwise, //5C &Sprite_5D_Roller_VerticalDownFirst, + &Sprite_5D_Roller_VerticalDownFirst, //5E + &Sprite_5D_Roller_VerticalDownFirst, //5F + &Sprite_5D_Roller_VerticalDownFirst, //60 &Sprite_61_Beamos, &Sprite_62_MasterSword, &Sprite_63_DebirandoPit, &Sprite_64_Debirando, &Sprite_65_ArcheryGame, &Sprite_66_WallCannonVerticalLeft, - &Sprite_66_WallCannonVerticalLeft, - &Sprite_66_WallCannonVerticalLeft, - &Sprite_66_WallCannonVerticalLeft, + &Sprite_66_WallCannonVerticalLeft,//67 + &Sprite_66_WallCannonVerticalLeft,//68 + &Sprite_66_WallCannonVerticalLeft,//69 &Sprite_6A_BallNChain, &Sprite_6B_CannonTrooper, &Sprite_6C_MirrorPortal, &Sprite_6D_Rat, &Sprite_6E_Rope, - &Sprite_6F_Keese, + &Sprite_6F_Keese,//bat &Sprite_70_KingHelmasaurFireball, &Sprite_71_Leever, &Sprite_72_FairyPond, &Sprite_73_UncleAndPriest, - &Sprite_RunningMan, - &Sprite_BottleVendor, + &Sprite_74_RunningMan, //74 + &Sprite_75_BottleVendor, //75 &Sprite_76_Zelda, - &Sprite_15_Antifairy, + &Sprite_15_Antifairy, //77 &Sprite_78_MrsSahasrahla, // Trampoline 68 entries &Sprite_79_Bee, @@ -592,12 +594,12 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_7C_GreenStalfos, &Sprite_7D_BigSpike, &Sprite_7E_Firebar_Clockwise, - &Sprite_7E_Firebar_Clockwise, + &Sprite_7E_Firebar_Clockwise, //7F &Sprite_80_Firesnake, &Sprite_81_Hover, &Sprite_82_AntifairyCircle, &Sprite_83_GreenEyegore, - &Sprite_83_GreenEyegore, + &Sprite_83_GreenEyegore,//84 &Sprite_85_YellowStalfos, &Sprite_86_Kodongo, &Sprite_87_KodongoFire, @@ -615,14 +617,14 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_93_Bumper, &Sprite_94_Pirogusu, &Sprite_95_LaserEyeLeft, - &Sprite_95_LaserEyeLeft, - &Sprite_95_LaserEyeLeft, - &Sprite_95_LaserEyeLeft, + &Sprite_95_LaserEyeLeft,//96 + &Sprite_95_LaserEyeLeft,//97 + &Sprite_95_LaserEyeLeft,//98 &Sprite_99_Pengator, &Sprite_9A_Kyameron, &Sprite_9B_Wizzrobe, &Sprite_9C_Zoro, - &Sprite_9C_Zoro, + &Sprite_9C_Zoro,//9D &Sprite_9E_HauntedGroveOstritch, &Sprite_9F_HauntedGroveRabbit, &Sprite_A0_HauntedGroveBird, @@ -630,20 +632,20 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_A2_Kholdstare, &Sprite_A3_KholdstareShell, &Sprite_A4_FallingIce, - &Sprite_Zazak_Main, - &Sprite_Zazak_Main, + &Sprite_A5_Zazak_Main,//A5 + &Sprite_A5_Zazak_Main,//A6 &Sprite_A7_Stalfos, &Sprite_A8_GreenZirro, - &Sprite_A8_GreenZirro, + &Sprite_A8_GreenZirro,//A9 &Sprite_AA_Pikit, &Sprite_AB_CrystalMaiden, &Sprite_AC_Apple, &Sprite_AD_OldMan, &Sprite_AE_Pipe_Down, - &Sprite_AE_Pipe_Down, - &Sprite_AE_Pipe_Down, - &Sprite_AE_Pipe_Down, - &Sprite_B2_PlayerBee, + &Sprite_AE_Pipe_Down,//AF + &Sprite_AE_Pipe_Down,//B0 + &Sprite_AE_Pipe_Down,//B1 + &Sprite_B2_PlayerBee,// Ycar: here is the bee &Sprite_B3_PedestalPlaque, &Sprite_B4_PurpleChest, &Sprite_B5_BombShop, @@ -681,279 +683,279 @@ static HandlerFuncK *const kSpriteActiveRoutines[243] = { &Sprite_D4_Landmine, &Sprite_D5_DigGameGuy, &Sprite_D6_Ganon, - &Sprite_D6_Ganon, + &Sprite_D6_Ganon,//D7 &Sprite_D8_Heart, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, - &Sprite_D9_GreenRupee, + &Sprite_D9_GreenRupee,//D0 //GreenRupee + &Sprite_D9_GreenRupee,//DA //BlueRupee + &Sprite_D9_GreenRupee,//DB //RedRupee + &Sprite_D9_GreenRupee,//DC //1Bomb + &Sprite_D9_GreenRupee,//DD //4Bombs + &Sprite_D9_GreenRupee,//DE //8Bombs + &Sprite_D9_GreenRupee,//DF //SmallMagic + &Sprite_D9_GreenRupee,//E0 //BigMagic + &Sprite_D9_GreenRupee,//E1 //5Arrows + &Sprite_D9_GreenRupee,//E2 //10Arrows &Sprite_E3_Fairy, &Sprite_E4_SmallKey, - &Sprite_E4_SmallKey, - &Sprite_D9_GreenRupee, + &Sprite_E4_SmallKey,//E5 + &Sprite_D9_GreenRupee,//E6 &Sprite_E7_Mushroom, &Sprite_E8_FakeSword, &Sprite_E9_PotionShop, - &Sprite_HeartContainer, - &Sprite_HeartPiece, + &Sprite_EA_HeartContainer,//EA + &Sprite_EB_HeartPiece,//EB &Sprite_EC_ThrownItem, &Sprite_ED_SomariaPlatform, &Sprite_EE_MovableMantle, - &Sprite_ED_SomariaPlatform, - &Sprite_ED_SomariaPlatform, - &Sprite_ED_SomariaPlatform, + &Sprite_ED_SomariaPlatform,//EF + &Sprite_ED_SomariaPlatform,//F0 + &Sprite_ED_SomariaPlatform,//F1 &Sprite_F2_MedallionTablet, }; static HandlerFuncK *const kSpritePrep_Main[243] = { - &SpritePrep_Raven, - &SpritePrep_Vulture, - &SpritePrep_DoNothingA, - NULL, - &SpritePrep_Switch, - &SpritePrep_DoNothingA, - &SpritePrep_Switch, - &SpritePrep_SwitchFacingUp, - &SpritePrep_Octorok, - &SpritePrep_Moldorm, - &SpritePrep_Octorok, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_Octoballoon, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_MiniHelmasaur, - &SpritePrep_ThievesTownGrate, - &SpritePrep_Antifairy, - &SpritePrep_Sage, - &SpritePrep_DoNothingA, - &SpritePrep_MiniMoldorm_bounce, - &SpritePrep_Poe, - &SpritePrep_Smithy, - &SpritePrep_DoNothingA, - &SpritePrep_Statue, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_CrystalSwitch, - &SpritePrep_SickKid, - &SpritePrep_DoNothingA, - &SpritePrep_WaterLever, - &SpritePrep_DoNothingA, - &SpritePrep_Bari, - &SpritePrep_Bari, - &SpritePrep_TalkingTree, - &SpritePrep_HardhatBeetle, - &SpritePrep_DoNothingA, - &SpritePrep_Storyteller, - &SpritePrep_Adults, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_Hobo, - &SpritePrep_MagicBat, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_FluteKid, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_FortuneTeller, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_RupeePull, - &SpritePrep_Snitch_bounce_2, - &SpritePrep_Snitch_bounce_3, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_DoNothingA, - &SpritePrep_Locksmith, - &SpritePrep_MagicBat, - &SpritePrep_BonkItem, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_Snitch_bounce_1, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_AgahnimsBarrier, - &SpritePrep_StandardGuard, - &SpritePrep_StandardGuard, - &SpritePrep_StandardGuard, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_TrooperAndArcherSoldier, - &SpritePrep_WeakGuard, - &SpritePrep_Geldman, - &SpritePrep_Kyameron, - &SpritePrep_Popo, - &SpritePrep_Popo2, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingD, - &SpritePrep_KingZora, - &SpritePrep_ArmosKnight, - &SpritePrep_Lanmolas, - &SpritePrep_SwimmingZora, - &SpritePrep_WalkingZora, - &SpritePrep_DesertStatue, - &SpritePrep_DoNothingA, - &SpritePrep_LostWoodsBird, - &SpritePrep_LostWoodsSquirrel, - &SpritePrep_Spark, - &SpritePrep_Spark, - &SpritePrep_Roller_VerticalDownFirst, - &SpritePrep_RollerUpDown, - &SpritePrep_Roller_HorizontalRightFirst, - &SpritePrep_RollerLeftRight, - &SpritePrep_DoNothingA, - &SpritePrep_MasterSword, - &SpritePrep_DebirandoPit, - &SpritePrep_FireDebirando, - &SpritePrep_ArrowGame_bounce, - &SpritePrep_WallCannon, - &SpritePrep_WallCannon, - &SpritePrep_WallCannon, - &SpritePrep_WallCannon, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_Rat, - &SpritePrep_Rope, - &SpritePrep_Keese, - &SpritePrep_DoNothingG, - &SpritePrep_FairyPond, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_UncleAndPriest_bounce, - &SpritePrep_RunningMan, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_Zelda_bounce, - &SpritePrep_Antifairy, - &SpritePrep_MrsSahasrahla, - &SpritePrep_OverworldBonkItem, - &SpritePrep_Agahnim, - &SpritePrep_DoNothingG, - &SpritePrep_GreenStalfos, - &SpritePrep_BigSpike, - &SpritePrep_FireBar, - &SpritePrep_FireBar, - &SpritePrep_DoNothingG, - &SpritePrep_DoNothingG, - &SpritePrep_AntifairyCircle, - &SpritePrep_Eyegore, - &SpritePrep_Eyegore, - &SpritePrep_DoNothingG, - &SpritePrep_Kodongo, - &SpritePrep_DoNothingG, - &SpritePrep_Mothula, - &SpritePrep_DoNothingG, - &SpritePrep_Spike, - &SpritePrep_DoNothingG, - &SpritePrep_Arrghus, - &SpritePrep_Arrghi, - &SpritePrep_DoNothingG, - &SpritePrep_Blob, - &SpritePrep_DoNothingG, - &SpritePrep_DoNothingG, - &SpritePrep_HelmasaurKing, - &SpritePrep_Bumper, - &SpritePrep_DoNothingA, - &SpritePrep_LaserEye_bounce, - &SpritePrep_LaserEye_bounce, - &SpritePrep_LaserEye_bounce, - &SpritePrep_LaserEye_bounce, - &SpritePrep_DoNothingA, - &SpritePrep_Kyameron, - &SpritePrep_DoNothingA, - &SpritePrep_Zoro, - &SpritePrep_Babasu, - &SpritePrep_HauntedGroveOstritch, - &SpritePrep_HauntedGroveAnimal, - &SpritePrep_HauntedGroveAnimal, - &SpritePrep_MoveDown_8px, - &SpritePrep_Kholdstare, - &SpritePrep_KholdstareShell, - &SpritePrep_FallingIce, - &SpritePrep_Zazakku, - &SpritePrep_Zazakku, - &SpritePrep_Stalfos, - &SpritePrep_Bomber, - &SpritePrep_Bomber, - &SpritePrep_DoNothingC, - &SpritePrep_DoNothingH, - &SpritePrep_OverworldBonkItem, - &SpritePrep_OldMan_bounce, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_NiceBee, - &SpritePrep_PedestalPlaque, - &SpritePrep_PurpleChest, - &SpritePrep_BombShoppe, - &SpritePrep_Kiki, - &SpritePrep_BlindMaiden, - &SpritePrep_DoNothingA, - &SpritePrep_BullyAndVictim, - &SpritePrep_Whirlpool, - &SpritePrep_Shopkeeper, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_Vitreous, - &SpritePrep_MiniVitreous, - &SpritePrep_DoNothingA, - &SpritePrep_Catfish, - &SpritePrep_CutsceneAgahnim, - &SpritePrep_DoNothingA, - &SpritePrep_Gibo, - &SpritePrep_DoNothingA, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_Pokey, - &SpritePrep_BigFairy, - &SpritePrep_Tektite, - &SpritePrep_Chainchomp_bounce, - &SpritePrep_Trinexx, - &SpritePrep_Trinexx, - &SpritePrep_Trinexx, - &SpritePrep_Blind, - &SpritePrep_Swamola, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_RockStal, - &SpritePrep_IgnoreProjectiles, - &SpritePrep_DiggingGameGuy_bounce, - &SpritePrep_Ganon, - &SpritePrep_Ganon, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Absorbable, - &SpritePrep_Fairy, - &SpritePrep_SmallKey, - &SpritePrep_BigKey, - &SpritePrep_ShieldPickup, - &SpritePrep_Mushroom, - &SpritePrep_FakeSword, - &SpritePrep_PotionShop, - &SpritePrep_HeartContainer, - &SpritePrep_HeartPiece, - &SpritePrep_ThrowableScenery, - &SpritePrep_DoNothingA, - &SpritePrep_Mantle, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_DoNothingA, - &SpritePrep_MedallionTable, + &SpritePrep_Raven, //00 + &SpritePrep_Vulture, //01 + &SpritePrep_DoNothingA, //02 + NULL, //03 + &SpritePrep_Switch, //04 + &SpritePrep_DoNothingA, //05 + &SpritePrep_Switch, //06 + &SpritePrep_SwitchFacingUp,//07 + &SpritePrep_Octorok, //08 + &SpritePrep_Moldorm, //09 + &SpritePrep_Octorok, //0A + &SpritePrep_DoNothingA, //0B + &SpritePrep_DoNothingA,//0C + &SpritePrep_DoNothingA,//0D + &SpritePrep_DoNothingA,//0E + &SpritePrep_Octoballoon,//0F + &SpritePrep_DoNothingA,//10 + &SpritePrep_DoNothingA,//11 + &SpritePrep_DoNothingA,//12 + &SpritePrep_MiniHelmasaur,//13 + &SpritePrep_ThievesTownGrate,//14 + &SpritePrep_Antifairy,//15 + &SpritePrep_Sage,//16 + &SpritePrep_DoNothingA,//17 + &SpritePrep_MiniMoldorm_bounce,//18 + &SpritePrep_Poe,//19 + &SpritePrep_Smithy,//1A + &SpritePrep_DoNothingA,//1B + &SpritePrep_Statue,//1C + &SpritePrep_IgnoreProjectiles,//1D + &SpritePrep_CrystalSwitch,//1E + &SpritePrep_SickKid,//1F + &SpritePrep_DoNothingA,//20 + &SpritePrep_WaterLever,//21 + &SpritePrep_DoNothingA,//22 + &SpritePrep_Bari,//23 + &SpritePrep_Bari,//24 + &SpritePrep_TalkingTree,//25 + &SpritePrep_HardhatBeetle,//26 + &SpritePrep_DoNothingA,//27 + &SpritePrep_Storyteller,//28 + &SpritePrep_Adults,//29 + &SpritePrep_IgnoreProjectiles,//2A + &SpritePrep_Hobo,//2B + &SpritePrep_MagicBat,//2C + &SpritePrep_IgnoreProjectiles,//2D + &SpritePrep_FluteKid,//2E + &SpritePrep_IgnoreProjectiles,//2F + &SpritePrep_IgnoreProjectiles,//30 + &SpritePrep_FortuneTeller,//31 + &SpritePrep_IgnoreProjectiles,//32 + &SpritePrep_RupeePull, //33 + &SpritePrep_Snitch_bounce_2,//34 + &SpritePrep_Snitch_bounce_3,//35 + &SpritePrep_IgnoreProjectiles,//36 + &SpritePrep_IgnoreProjectiles,//37 + &SpritePrep_DoNothingA,//38 + &SpritePrep_Locksmith,//39 + &SpritePrep_MagicBat,//3A + &SpritePrep_BonkItem,//3B + &SpritePrep_IgnoreProjectiles,//3C + &SpritePrep_Snitch_bounce_1,//3D + &SpritePrep_DoNothingA,//3E + &SpritePrep_DoNothingA,//3F + &SpritePrep_AgahnimsBarrier,//40 + &SpritePrep_StandardGuard,//41 + &SpritePrep_StandardGuard,//42 + &SpritePrep_StandardGuard,//43 + &SpritePrep_TrooperAndArcherSoldier,//44 + &SpritePrep_TrooperAndArcherSoldier,//45 + &SpritePrep_TrooperAndArcherSoldier,//46 + &SpritePrep_TrooperAndArcherSoldier,//47 + &SpritePrep_TrooperAndArcherSoldier,//48 + &SpritePrep_TrooperAndArcherSoldier,//49 + &SpritePrep_TrooperAndArcherSoldier,//4A + &SpritePrep_WeakGuard,//4B + &SpritePrep_Geldman,//4C + &SpritePrep_Kyameron,//4D + &SpritePrep_Popo,//4E + &SpritePrep_Popo2,//4F + &SpritePrep_DoNothingA,//50 + &SpritePrep_DoNothingD,//51 + &SpritePrep_KingZora,//52 + &SpritePrep_ArmosKnight,//53 + &SpritePrep_Lanmolas,//54 + &SpritePrep_SwimmingZora,//55 + &SpritePrep_WalkingZora,//56 + &SpritePrep_DesertStatue,//57 + &SpritePrep_DoNothingA,//58 + &SpritePrep_LostWoodsBird,//59 + &SpritePrep_LostWoodsSquirrel,//5A + &SpritePrep_Spark,//5B + &SpritePrep_Spark,//5C + &SpritePrep_Roller_VerticalDownFirst,//5D + &SpritePrep_RollerUpDown,//5E + &SpritePrep_Roller_HorizontalRightFirst,//5F + &SpritePrep_RollerLeftRight,//60 + &SpritePrep_DoNothingA,//61 + &SpritePrep_MasterSword,//62 + &SpritePrep_DebirandoPit,//63 + &SpritePrep_FireDebirando,//64 + &SpritePrep_ArrowGame_bounce,//65 + &SpritePrep_WallCannon,//66 + &SpritePrep_WallCannon,//67 + &SpritePrep_WallCannon,//68 + &SpritePrep_WallCannon,//69 + &SpritePrep_DoNothingA,//6A + &SpritePrep_DoNothingA,//6B + &SpritePrep_DoNothingA,//6C + &SpritePrep_Rat,//6D + &SpritePrep_Rope,//6E + &SpritePrep_Keese,//6F + &SpritePrep_DoNothingG,//70 + &SpritePrep_FairyPond,//71 + &SpritePrep_IgnoreProjectiles,//72 + &SpritePrep_UncleAndPriest_bounce,//73 + &SpritePrep_RunningMan,//74 + &SpritePrep_IgnoreProjectiles,//75 + &SpritePrep_Zelda_bounce,//76 + &SpritePrep_Antifairy,//77 + &SpritePrep_MrsSahasrahla,//78 + &SpritePrep_OverworldBonkItem,//79 + &SpritePrep_Agahnim,//7A + &SpritePrep_DoNothingG,//7B + &SpritePrep_GreenStalfos,//7C + &SpritePrep_BigSpike,//7D + &SpritePrep_FireBar,//7E + &SpritePrep_FireBar,//7F + &SpritePrep_DoNothingG,//80 Firesnake + &SpritePrep_DoNothingG,//81 Hover + &SpritePrep_AntifairyCircle,//82 + &SpritePrep_Eyegore,//83 + &SpritePrep_Eyegore,//84 + &SpritePrep_DoNothingG,//85 + &SpritePrep_Kodongo,//86 + &SpritePrep_DoNothingG,//87 + &SpritePrep_Mothula,//88 + &SpritePrep_DoNothingG,//89 + &SpritePrep_Spike,//8A + &SpritePrep_DoNothingG,//8B + &SpritePrep_Arrghus,//8C + &SpritePrep_Arrghi,//8D + &SpritePrep_DoNothingG,//8E + &SpritePrep_Blob,//8F + &SpritePrep_DoNothingG,//90 + &SpritePrep_DoNothingG,//91 + &SpritePrep_HelmasaurKing,//92 + &SpritePrep_Bumper,//93 + &SpritePrep_DoNothingA,//94 + &SpritePrep_LaserEye_bounce,//95 + &SpritePrep_LaserEye_bounce,//96 + &SpritePrep_LaserEye_bounce,//97 + &SpritePrep_LaserEye_bounce,//98 + &SpritePrep_DoNothingA,//99 + &SpritePrep_Kyameron,//9A + &SpritePrep_DoNothingA,//9B + &SpritePrep_Zoro,//9C + &SpritePrep_Babasu,//9D + &SpritePrep_HauntedGroveOstritch,//9E + &SpritePrep_HauntedGroveAnimal,//9F + &SpritePrep_HauntedGroveAnimal,//A0 + &SpritePrep_MoveDown_8px,//A1 + &SpritePrep_Kholdstare,//A2 + &SpritePrep_KholdstareShell,//A3 + &SpritePrep_FallingIce,//A4 + &SpritePrep_Zazakku,//A5 + &SpritePrep_Zazakku,//A6 + &SpritePrep_Stalfos,//A7 + &SpritePrep_Bomber,//A8 + &SpritePrep_Bomber,//A9 + &SpritePrep_DoNothingC,//AA + &SpritePrep_DoNothingH,//AB + &SpritePrep_OverworldBonkItem,//AC + &SpritePrep_OldMan_bounce,//AD + &SpritePrep_DoNothingA,//AE + &SpritePrep_DoNothingA,//AF + &SpritePrep_DoNothingA,//B0 + &SpritePrep_DoNothingA,//B1 + &SpritePrep_NiceBee,//B2 + &SpritePrep_PedestalPlaque,//B3 + &SpritePrep_PurpleChest,//B4 + &SpritePrep_BombShoppe,//B5 + &SpritePrep_Kiki,//B6 + &SpritePrep_BlindMaiden,//B7 + &SpritePrep_DoNothingA,//B8 + &SpritePrep_BullyAndVictim,//B9 + &SpritePrep_Whirlpool,//BA + &SpritePrep_Shopkeeper,//BB + &SpritePrep_IgnoreProjectiles,//BC + &SpritePrep_Vitreous,//BD + &SpritePrep_MiniVitreous,//BE + &SpritePrep_DoNothingA,//BF + &SpritePrep_Catfish,//C0 + &SpritePrep_CutsceneAgahnim,//C1 + &SpritePrep_DoNothingA,//C2 + &SpritePrep_Gibo,//C3 + &SpritePrep_DoNothingA,//C4 + &SpritePrep_IgnoreProjectiles,//C5 + &SpritePrep_IgnoreProjectiles,//C6 + &SpritePrep_Pokey,//C7 + &SpritePrep_BigFairy,//C8 + &SpritePrep_Tektite,//C9 + &SpritePrep_Chainchomp_bounce,//CA + &SpritePrep_Trinexx,//CB + &SpritePrep_Trinexx,//CC + &SpritePrep_Trinexx,//CD + &SpritePrep_Blind,//CE + &SpritePrep_Swamola,//CF + &SpritePrep_DoNothingA,//D0 + &SpritePrep_DoNothingA,//D1 + &SpritePrep_IgnoreProjectiles,//D2 + &SpritePrep_RockStal,//D3 + &SpritePrep_IgnoreProjectiles,//D4 + &SpritePrep_DiggingGameGuy_bounce,//D5 + &SpritePrep_Ganon,//D6 + &SpritePrep_Ganon,//D7 + &SpritePrep_Absorbable,//D8 + &SpritePrep_Absorbable,//D9 + &SpritePrep_Absorbable,//DA + &SpritePrep_Absorbable,//DB + &SpritePrep_Absorbable,//DC + &SpritePrep_Absorbable,//DD + &SpritePrep_Absorbable,//DE + &SpritePrep_Absorbable,//DF + &SpritePrep_Absorbable,//E0 + &SpritePrep_Absorbable,//E1 + &SpritePrep_Absorbable,//E2 + &SpritePrep_Fairy,//E3 + &SpritePrep_SmallKey,//E4 + &SpritePrep_BigKey,//E5 + &SpritePrep_ShieldPickup,//E6 + &SpritePrep_Mushroom,//E7 + &SpritePrep_FakeSword,//E8 + &SpritePrep_PotionShop,//E9 + &SpritePrep_HeartContainer,//EA + &SpritePrep_HeartPiece,//EB + &SpritePrep_ThrowableScenery,//EC + &SpritePrep_DoNothingA,//ED + &SpritePrep_Mantle,//EE + &SpritePrep_DoNothingA,//EF + &SpritePrep_DoNothingA,//F0 + &SpritePrep_DoNothingA,//F1 + &SpritePrep_MedallionTable,//F2 }; void Sprite_PullSwitch_bounce(int k) { @@ -1416,6 +1418,7 @@ void ChainBallTrooper_Draw(int k) { } void Sprite_6B_CannonTrooper(int k) { + Generic_PutInBottle(k, bottle_state_6B_CannonTrooper); //Pokemode if (sprite_C[k] != 0) { Sprite_Cannonball(k); return; @@ -1430,7 +1433,7 @@ void Bee_PutInBottle(int k) { if (!choice_in_multiselect_box) { int j = Sprite_Find_EmptyBottle(); if (j >= 0) { - link_bottle_info[j] = 7 + sprite_head_dir[k]; + link_bottle_info[j] = bottle_state_bee + sprite_head_dir[k]; Hud_RefreshIcon(); sprite_state[k] = 0; return; @@ -1495,7 +1498,7 @@ void Kiki_LyingInwait(int k) { Sprite_PrepOamCoord(k, &info); if (Sprite_ReturnIfInactive(k)) return; - if (link_is_bunny_mirror | link_disable_sprite_damage | countdown_for_blink || follower_indicator == 10) + if (link_is_bunny_mirror | link_disable_sprite_damage | countdown_for_blink || follower_indicator == follower_indicator_Kiki) return; if (save_ow_event_info[BYTE(overworld_screen_index)] & 0x20) return; @@ -1504,7 +1507,7 @@ void Kiki_LyingInwait(int k) { if (enhanced_features0 & kFeatures0_MiscBugFixes) follower_dropped = 0; // defuse bomb - follower_indicator = 10; + follower_indicator = follower_indicator_Kiki; tagalong_var5 = 0; LoadFollowerGraphics(); Follower_Initialize(); @@ -1537,6 +1540,7 @@ static inline int8 TrinexxHeadSin(uint16 a, uint8 b) { } void Sprite_CC(int k) { + Generic_PutInBottle(k, bottle_state_CC); //Pokemode if (!sprite_E[k]) { Sprite_Sidenexx(k); return; @@ -1551,6 +1555,7 @@ void Sprite_CC(int k) { } void Sprite_CD(int k) { + Generic_PutInBottle(k, bottle_state_CD); //Pokemode if (!sprite_E[k]) { Sprite_Sidenexx(k); return; @@ -1622,7 +1627,7 @@ void Hobo_Draw(int k) { // 84ea60 } bool Landmine_CheckDetonationFromHammer(int k) { // 84ea81 - if (!(link_item_in_hand & 10) || player_oam_y_offset == 0x80) + if (!(link_item_in_hand & 10) || player_oam_y_offset == 0x80) //if 0xa not in hand return false; SpriteHitBox hb; Player_SetupActionHitBox(&hb); @@ -1665,6 +1670,7 @@ void Sprite_SpawnSparkleGarnish(int k) { // 858008 } void Sprite_70_KingHelmasaurFireball(int k) { // 85807f + Generic_PutInBottle(k, bottle_state_70_KingHelmasaurFireball); //Pokemode static const uint8 kHelmasaurFireball_Char[3] = {0xcc, 0xcc, 0xca}; static const uint8 kHelmasaurFireball_Flags[2] = {0x33, 0x73}; static const uint8 kHelmasaurFireball_Gfx[4] = {2, 2, 1, 0}; @@ -1724,6 +1730,7 @@ void Sprite_70_KingHelmasaurFireball(int k) { // 85807f } void Sprite_66_WallCannonVerticalLeft(int k) { // 858090 + Generic_PutInBottle(k, bottle_state_66_WallCannonVerticalLeft); //Pokemode static const int8 kWallCannon_Xvel[4] = {0, 0, -16, 16}; static const int8 kWallCannon_Yvel[4] = {-16, 16, 0, 0}; static const uint8 kWallCannon_Gfx[4] = {0, 0, 2, 2}; @@ -1771,6 +1778,7 @@ void Sprite_66_WallCannonVerticalLeft(int k) { // 858090 } void Sprite_65_ArcheryGame(int k) { // 8581ff + Generic_PutInBottle(k, bottle_state_65_ArcheryGame); //Pokemode link_num_arrows = sprite_subtype[k]; if (sprite_A[k] == 0) ArcheryGame_Host(k); @@ -1889,6 +1897,7 @@ void ArcheryGame_DrawPrize(int k) { // 8584cf } void Sprite_63_DebirandoPit(int k) { // 858531 + Generic_PutInBottle(k, bottle_state_63_DebirandoPit); //Pokemode static const uint8 kDebirandoPit_OpeningGfx[4] = {5, 4, 3, 3}; static const uint8 kDebirandoPit_ClosingGfx[4] = {3, 3, 4, 5}; @@ -1994,6 +2003,7 @@ void DebirandoPit_Draw(int k) { // 8586e4 } void Sprite_64_Debirando(int k) { // 85874d + Generic_PutInBottle(k, bottle_state_64_Debirando); //Pokemode static const uint8 kDebirando_Emerge_Gfx[2] = {1, 0}; static const uint8 kDebirando_Submerge_Gfx[2] = {0, 1}; Debirando_Draw(k); @@ -2065,6 +2075,7 @@ void Debirando_Draw(int k) { // 858857 } void Sprite_62_MasterSword(int k) { // 8588c5 + Generic_PutInBottle(k, bottle_state_62_MasterSword); //Pokemode switch (sprite_subtype2[k]) { case 0: MasterSword_Main(k); break; case 1: Sprite_MasterSword_LightFountain(k); break; @@ -2127,7 +2138,7 @@ void MasterSword_Main(int k) { // 8588d6 if (!sprite_delay_main[k]) { save_ow_event_info[BYTE(overworld_screen_index)] |= 0x40; item_receipt_method = 0; - Link_ReceiveItem(1, 0); + Link_ReceiveItem(receiveitem_index_master_sword, 0); savegame_map_icons_indicator = 5; link_unk_master_sword = 0; sprite_ai_state[k] = 5; @@ -2368,6 +2379,7 @@ void MasterSword_Draw(int k) { // 858da8 } void Sprite_5D_Roller_VerticalDownFirst(int k) { // 858dde + Generic_PutInBottle(k, bottle_state_5D_Roller_VerticalDownFirst); //Pokemode static const int8 kSpikeRoller_XYvel[6] = {-16, 16, 0, 0, -16, 16}; sprite_graphics[k] = sprite_subtype2[k] >> 1 & 1 | sprite_D[k] & 2; SpikeRoller_Draw(k); @@ -2421,6 +2433,7 @@ void SpikeRoller_Draw(int k) { // 858ee3 } void Sprite_61_Beamos(int k) { // 858f54 + Generic_PutInBottle(k, bottle_state_61_Beamos); //Pokemode if (sprite_C[k] == 1) { Sprite_Beamos_Laser(k); return; @@ -2610,6 +2623,7 @@ void Sprite_Beamos_LaserHit(int k) { // 8592da } void Sprite_5B_Spark_Clockwise(int k) { // 85933f + Generic_PutInBottle(k, bottle_state_5B_Spark_Clockwise); //Pokemode static const uint8 kSpark_OamFlags[4] = {0, 0x40, 0x80, 0xc0}; static const uint8 kSpark_directions[8] = {1, 3, 2, 0, 7, 5, 6, 4}; int j; @@ -2656,6 +2670,7 @@ void Sprite_5B_Spark_Clockwise(int k) { // 85933f } void Sprite_59_LostWoodsBird(int k) { // 85940e + Generic_PutInBottle(k, bottle_state_59_LostWoodsBird); //Pokemode if (sprite_delay_aux1[k]) return; sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | (sign8(sprite_x_vel[k]) ? 0 : 0x40); @@ -2680,6 +2695,7 @@ void Sprite_59_LostWoodsBird(int k) { // 85940e } void Sprite_5A_LostWoodsSquirrel(int k) { // 859468 + Generic_PutInBottle(k, bottle_state_5A_LostWoodsSquirrel); //Pokemode if (sprite_delay_aux1[k]) return; sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | (sign8(sprite_x_vel[k]) ? 0 : 0x40); @@ -2698,6 +2714,7 @@ void Sprite_5A_LostWoodsSquirrel(int k) { // 859468 } void Sprite_58_Crab(int k) { // 8594b5 + Generic_PutInBottle(k, bottle_state_58_Crab); //Pokemode static const int8 kCrab_Xvel[4] = {28, -28, 0, 0}; static const int8 kCrab_Yvel[4] = {0, 0, 12, -12}; Crab_Draw(k); @@ -2734,6 +2751,7 @@ void Crab_Draw(int k) { // 859510 } void Sprite_57_DesertStatue(int k) { // 85956d + Generic_PutInBottle(k, bottle_state_57_DesertStatue); //Pokemode static const uint8 kDesertBarrier_NextD[4] = {3, 2, 0, 1}; DesertBarrier_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -2794,6 +2812,7 @@ void DesertBarrier_Draw(int k) { // 859626 } void Sprite_55_Zora(int k) { // 85967b + Generic_PutInBottle(k, bottle_state_55_Zora); //Pokemode if (sprite_E[k]) Sprite_Fireball(k); else @@ -2953,6 +2972,7 @@ void Zora_Draw(int k) { // 8598f5 } void Sprite_52_KingZora(int k) { // 85995b + Generic_PutInBottle(k, bottle_state_52_KingZora); //Pokemode ZoraKing_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -3147,6 +3167,7 @@ void ZoraKing_Draw(int k) { // 859cab } void Sprite_56_WalkingZora(int k) { // 859d4a + Generic_PutInBottle(k, bottle_state_56_WalkingZora); //Pokemode if (sprite_F[k]) { sprite_F[k] = 0; sprite_B[k] = 3; @@ -3304,6 +3325,7 @@ void SpriteDraw_WaterRipple(int k) { // 859ffa } void Sprite_53_ArmosKnight(int k) { // 85a036 + Generic_PutInBottle(k, bottle_state_53_ArmosKnight); //Pokemode static const uint8 kArmosKnight_Gfx1[5] = {5, 4, 3, 2, 1}; static const int8 kArmosKnight_Xv[2] = {16, -16}; @@ -3445,6 +3467,7 @@ void ArmosKnight_Draw(int k) { // 85a274 } void Sprite_54_Lanmolas(int k) { // 85a3a2 + Generic_PutInBottle(k, bottle_state_54_Lanmolas); //Pokemode static const uint8 kLanmola_RandB[8] = {0x58, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0x98}; static const uint8 kLanmola_RandC[8] = {0x68, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xa8, 0x80}; static const int8 kLanmola_ZVel[2] = {2, -2}; @@ -3640,6 +3663,7 @@ void Lanmola_Draw(int k) { // 85a64a } void Sprite_6D_Rat(int k) { // 85a8b0 + Generic_PutInBottle(k, bottle_state_6D_Rat); //Pokemode static const uint8 kSpriteRat_Tab0[16] = {0, 0, 3, 3, 1, 2, 4, 5, 1, 2, 4, 5, 0, 0, 3, 3}; static const uint8 kSpriteRat_Tab1[16] = {0, 0x40, 0, 0x40, 0, 0, 0, 0, 0x40, 0x40, 0x40, 0x40, 0x80, 0xc0, 0x80, 0xc0}; static const uint8 kSpriteRat_Tab2[8] = {10, 11, 6, 7, 2, 3, 14, 15}; @@ -3685,6 +3709,7 @@ void Sprite_6D_Rat(int k) { // 85a8b0 } void Sprite_6E_Rope(int k) { // 85a973 + Generic_PutInBottle(k, bottle_state_6E_Rope); //Pokemode int j; j = sprite_A[k]; sprite_graphics[k] = kSpriteRope_Gfx[j]; @@ -3753,6 +3778,7 @@ void Sprite_6E_Rope(int k) { // 85a973 } void Sprite_6F_Keese(int k) { // 85aa8b + Generic_PutInBottle(k, bottle_state_6F_Keese); //Pokemode static const int8 kSpriteKeese_Tab1[2] = {1, -1}; static const int8 kSpriteKeese_Tab0[4] = {2, 10, 6, 14}; @@ -3828,6 +3854,7 @@ void Sprite_SpawnPoofGarnish(int j) { // 85ab9c } void Sprite_6C_MirrorPortal(int k) { // 85af75 + Generic_PutInBottle(k, bottle_state_6C_MirrorPortal); //Pokemode if (savegame_is_darkworld) { sprite_state[k] = 0; } else { @@ -3867,6 +3894,7 @@ void Sprite_6C_MirrorPortal(int k) { // 85af75 } void Sprite_6A_BallNChain(int k) { // 85b01b + Generic_PutInBottle(k, bottle_state_6A_BallNChain); //Pokemode ChainBallTrooper_Draw(k); if (sprite_ai_state[k] < 2) HIBYTE(dungmap_var8) = 0x80; @@ -3998,6 +4026,7 @@ void SpriteDraw_BNCFlail(int k, PrepOamCoordsRet *info) { // 85b468 } void Sprite_50_Cannonball(int k) { // 85b648 + Generic_PutInBottle(k, bottle_state_50_Cannonball); //Pokemode if (!sprite_ai_state[k]) SpriteDraw_SingleLarge(k); else @@ -4034,6 +4063,7 @@ void SpriteDraw_BigCannonball(int k) { // 85b6a4 } void Sprite_51_ArmosStatue(int k) { // 85b703 + Generic_PutInBottle(k, bottle_state_51_ArmosStatue); //Pokemode Armos_Draw(k); if (sprite_F[k]) Sprite_ZeroVelocity_XY(k); @@ -4097,6 +4127,7 @@ void Armos_Draw(int k) { // 85b7ef } void Sprite_4E_Popo(int k) { // 85b80a + Generic_PutInBottle(k, bottle_state_4E_Popo); //Pokemode Bot_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -4151,6 +4182,7 @@ void Bot_Draw(int k) { // 85b89a } void Sprite_4C_Geldman(int k) { // 85b8b3 + Generic_PutInBottle(k, bottle_state_4C_Geldman); //Pokemode static const uint8 kGerudoMan_EmergeGfx[8] = {3, 2, 0, 0, 0, 0, 0, 0}; static const uint8 kGerudoMan_PursueGfx[2] = {4, 5}; static const uint8 kGerudoMan_SubmergeGfx[5] = {0, 1, 2, 3, 3}; @@ -4236,6 +4268,7 @@ void GerudoMan_Draw(int k) { // 85ba24 } void Sprite_4D_Toppo(int k) { // 85ba85 + Generic_PutInBottle(k, bottle_state_4D_Toppo); //Pokemode static const int8 kToppo_XOffs[4] = {-32, 32, 0, 0}; static const int8 kToppo_YOffs[4] = {0, 0, -32, 32}; @@ -4333,6 +4366,7 @@ void Toppo_Draw(int k) { // 85bbff } void Sprite_4B_GreenKnifeGuard(int k) { // 85bca2 + Generic_PutInBottle(k, bottle_state_4B_GreenKnifeGuard); //Pokemode sprite_graphics[k] = kSprite_Recruit_Gfx[sprite_D[k] + (sprite_subtype2[k] >> 1 & 4) ]; Recruit_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -4392,6 +4426,7 @@ void Recruit_Draw(int k) { // 85bd7e } void Sprite_4A_BombGuard(int k) { // 85be0a + Generic_PutInBottle(k, bottle_state_4A_BombGuard); //Pokemode if (sprite_C[k] == 0) { BombGuard(k); return; @@ -4555,12 +4590,36 @@ void SpriteDraw_SpriteBombExplosion(int k) { // 85c113 } void Sprite_41_BlueGuard(int k) { // 85c155 - if (sprite_C[k]) + if (sprite_C[k]){ //If it is a probe, (a guard's probe but not a guard) Probe(k); - else - Guard_Main(k); + } + else{ + Generic_PutInBottle(k, bottle_state_41_BlueGuard); //Pokemode + Guard_Main(k);} +} + +// Make Probe() target something else than Link +int FindTargetNearby(int k){ + int n = 16; + int j = k * 4 & 0xf; + do { + if (j == k || sprite_state[j] < 9 || sprite_pause[j]) + continue; + if (!(sprite_flags2[j] & 0x80)) { + if (sprite_floor[k] != sprite_floor[j] || sprite_flags4[j] & 0x40 || sprite_ignore_projectile[j]) + continue; + } else { + if (!sprite_head_dir[k] || !(sprite_bump_damage[j] & 0x40)) + continue; + } + return j; //We have found sprite j + } while (j = (j - 1) & 0xf, --n); + + return -1; //Nothing found } + + void Probe(int k) { // 85c15d SpriteAddXY(k, (int8)sprite_x_vel[k], (int8)sprite_y_vel[k]); bool is_close; @@ -4581,7 +4640,7 @@ void Probe(int k) { // 85c15d if (is_close) { int p = sprite_C[k] - 1; if (sprite_ai_state[p] != 3) { - sprite_ai_state[p] = 3; + sprite_ai_state[p] = 3; // make Guard in facing Link state if (sprite_type[p] != 0xce) { sprite_delay_main[p] = 16; sprite_subtype2[p] = 0; @@ -4620,13 +4679,15 @@ void Guard_Main(int k) { // 85c227 } if (Sprite_ReturnIfInactive(k)) return; - Guard_ParrySwordAttacks(k); - if ((Sprite_CheckDamageToLink(k) || sprite_alert_flag) && sprite_ai_state[k] < 3) { - sprite_ai_state[k] = 3; - Guard_SetTimerAndAssertTileHitBox(k, 0x20); - } else if (sprite_F[k] != 0 && sprite_F[k] >= 4) { - sprite_ai_state[k] = 4; - Guard_SetTimerAndAssertTileHitBox(k, 0x80); + if (sprite_ai_state[k]!=10){//Pokemode, when ally + Guard_ParrySwordAttacks(k); + if ((Sprite_CheckDamageToLink(k) || sprite_alert_flag) && sprite_ai_state[k] < 3) { + sprite_ai_state[k] = 3; + Guard_SetTimerAndAssertTileHitBox(k, 0x20); + } else if (sprite_F[k] != 0 && sprite_F[k] >= 4) { + sprite_ai_state[k] = 4; + Guard_SetTimerAndAssertTileHitBox(k, 0x80); + } } if (Sprite_ReturnIfRecoiling(k)) return; @@ -4641,7 +4702,7 @@ void Guard_Main(int k) { // 85c227 sprite_G[k] = 0; switch (sprite_ai_state[k]) { - case 0: + case 0:// Patrol walk Sprite_ZeroVelocity_XY(k); if (sprite_delay_main[k]) break; @@ -4659,7 +4720,7 @@ void Guard_Main(int k) { // 85c227 } sprite_delay_aux1[k] = 12; break; - case 1: { + case 1: {// Look around Sprite_Guard_SendOutProbe(k); if ((sprite_subtype[k] & 7) >= 5) { Guard_ShootProbeAndStuff(k); @@ -4696,24 +4757,45 @@ void Guard_Main(int k) { // 85c227 } break; } - case 3: + case 3:{ //Soldier is hurt case? Sprite_ZeroVelocity_XY(k); sprite_head_dir[k] = Sprite_DirectionToFaceLink(k, NULL); if (sprite_delay_main[k] == 0) { - sprite_ai_state[k] = 4; + sprite_ai_state[k] = 4; //Timer for facing still is over, now let's run towards link Guard_SetTimerAndAssertTileHitBox(k, 255); } - break; - case 4: + break;} + case 4:{ // run towards Link if (sprite_delay_main[k]) { - Soldier_Func12(k); + Soldier_Func12(k); //run towards link } else { sprite_anim_clock[k] = kSoldier_Tab1[sprite_D[k]]; Sprite_ZeroVelocity_XY(k); - sprite_ai_state[k] = 2; + sprite_ai_state[k] = 2; // back to sending probe state sprite_delay_main[k] = 160; } - break; + break;} + case 10:{ // custom (friendly) case, in Pokemode: + if (enhanced_features0 & kFeatures0_Pokemode){ + Sprite_SpawnSparkleGarnish(k); + int j = FindTargetNearby(k); + if(j>=0){ + Soldier_Func12Target(k, j); //Ycar + PlayerBee_HoneInOnTarget(j, k); //Ycar sprite hurts stuff here + }else + { //go back to Link + bool is_close; + uint16 x = Sprite_GetX(k) - link_x_coord; + uint16 y = Sprite_GetY(k) - link_y_coord; + is_close = (x < 32 && y < 32 && sprite_floor[k] == link_is_on_lower_level); + if(is_close){ + Sprite_ZeroVelocity_XY(k); + }else{ + Soldier_Func12(k); //run towards link (ycar) + } + } + } + } } } @@ -4752,6 +4834,21 @@ void Guard_SetTimerAndAssertTileHitBox(int k, uint8 a) { // 85c4d7 sprite_flags[k] = sprite_flags[k] & 0xf | 0x60; } + +void Soldier_Func12Target(int k, int j) { // Ycar + if (((k ^ frame_counter) & 0x1f) == 0) { + if (!sprite_G[k]) { + sprite_G[k] = 1; + SpriteSfx_QueueSfx3WithPan(k, 4); + } + Sprite_ApplySpeedTowardsTarget(k, j, 16); + sprite_D[k] = sprite_head_dir[k] = Sprite_DirectionToFaceTarget(k, j, NULL); + } + Guard_ApplySpeedInDirection(k); + sprite_subtype2[k]++; + Guard_TickAndUpdateBody(k); +} + void Soldier_Func12(int k) { // 85c500 if (((k ^ frame_counter) & 0x1f) == 0) { if (!sprite_G[k]) { @@ -4864,6 +4961,7 @@ void Guard_AnimateWeapon(int k, const PrepOamCoordsRet *poc) { // 85cb64 } void Sprite_45_HogSpearMan(int k) { // 85cbe0 + Generic_PutInBottle(k, bottle_state_45_HogSpearMan); //Pokemode Guard_HandleAllAnimation(k); if (Sprite_ReturnIfInactive(k)) return; @@ -4893,6 +4991,7 @@ void BoltGuard_TriggerChaseTheme(int k) { // 85cc3c } void Sprite_44_BluesainBolt(int k) { // 85cc65 + Generic_PutInBottle(k, bottle_state_44_BluesainBolt); //Pokemode PsychoTrooper_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -4944,6 +5043,7 @@ void SpriteDraw_GuardSpear(int k, PrepOamCoordsRet *info, int spr_offs) { // 85 } void Sprite_48_RedJavelinGuard(int k) { // 85cde1 + Generic_PutInBottle(k, bottle_state_48_RedJavelinGuard); //Pokemode static const uint8 kJavelinTrooper_Gfx[4] = {12, 0, 18, 8}; uint8 bak0 = sprite_graphics[k]; int j = sprite_D[k]; @@ -4958,6 +5058,7 @@ void Sprite_48_RedJavelinGuard(int k) { // 85cde1 } void Sprite_46_BlueArcher(int k) { // 85cdff + Generic_PutInBottle(k, bottle_state_46_BlueArcher); //Pokemode uint8 bak0 = sprite_graphics[k]; int j = sprite_D[k]; if (sprite_delay_aux1[k] != 0) { @@ -5151,6 +5252,7 @@ void JavelinTrooper_Draw(int k) { // 85d192 } void Sprite_49_RedBushGuard(int k) { // 85d1ac + Generic_PutInBottle(k, bottle_state_49_RedBushGuard); //Pokemode if (sprite_ai_state[k]) { if (sprite_ai_state[k] == 2) BushJavelinSoldier_Draw(k); @@ -5161,6 +5263,7 @@ void Sprite_49_RedBushGuard(int k) { // 85d1ac } void Sprite_47_GreenBushGuard(int k) { // 85d1bf + Generic_PutInBottle(k, bottle_state_47_GreenBushGuard); //Pokemode if (sprite_ai_state[k]) { if (sprite_graphics[k] >= 14) ArcherSoldier_Draw(k); @@ -5709,7 +5812,7 @@ void Uncle_AtHouse(int k) { // 85de3e } break; case 4: // Uncle_ApplyTelepathyFollower - follower_indicator = 5; + follower_indicator = follower_indicator_Uncle_Telepathy; word_7E02CD = 0xdf3; sram_progress_flags |= 0x10; sprite_state[k] = 0; @@ -5724,13 +5827,13 @@ void Uncle_InPassage(int k) { // 85df19 if (Sprite_CheckDamageToLink_same_layer(k)) Link_CancelDash(); if (Sprite_ShowMessageOnContact(k, 0xe) & 0x100) { - follower_indicator = 0; + follower_indicator = follower_indicator_noone; sprite_ai_state[k]++; } break; case 1: // GiveSwordAndShield item_receipt_method = 0; - Link_ReceiveItem(0, 0); + Link_ReceiveItem(receiveitem_index_sword, 0); sprite_ai_state[k]++; sprite_graphics[k] = 1; which_starting_point = 3; @@ -5740,8 +5843,9 @@ void Uncle_InPassage(int k) { // 85df19 } } -void Sprite_QuarrelBros(int k) { // 85e013 +void Sprite_32_QuarrelBros(int k) { // 85e013 QuarrelBros_Draw(k); + Generic_PutInBottle(k, bottle_state_32_QuarrelBros); //Pokemode if (Sprite_ReturnIfInactive(k)) return; Sprite_TrackBodyToHead(k); @@ -5781,8 +5885,9 @@ void QuarrelBros_Draw(int k) { // 85e17f } -void Sprite_YoungSnitchLady(int k) { // 85e2f2 - Sprite_OldSnitchLady(k); +void Sprite_34_YoungSnitchLady(int k) { // 85e2f2 + Generic_PutInBottle(k, bottle_state_34_YoungSnitchLady); //Pokemode + Sprite_3D_OldSnitchLady(k); } void YoungSnitchLady_Draw(int k) { // 85e37f @@ -5809,7 +5914,8 @@ void YoungSnitchLady_Draw(int k) { // 85e37f SpriteDraw_Shadow(k, &info); } -void Sprite_InnKeeper(int k) { // 85e3af +void Sprite_35_InnKeeper(int k) { // 85e3af + Generic_PutInBottle(k, bottle_state_35_InnKeeper); //Pokemode InnKeeper_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -5827,7 +5933,8 @@ void InnKeeper_Draw(int k) { // 85e3dc SpriteDraw_Shadow(k, &info); } -void Sprite_Witch(int k) { // 85e3fb +void Sprite_36_Witch(int k) { // 85e3fb + Generic_PutInBottle(k, bottle_state_36_Witch); //Pokemode Witch_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -5865,7 +5972,7 @@ void Sprite_Witch(int k) { // 85e3fb case 1: // grant cane of byrna sprite_ai_state[k] = 0; item_receipt_method = 0; - Link_ReceiveItem(0x18, 0); + Link_ReceiveItem(receiveitem_index_cane_of_byrna, 0); break; } } @@ -5942,7 +6049,8 @@ void SpritePrep_Snitches(int k) { // 85e67d sprite_x_vel[k] = -9; } -void Sprite_OldSnitchLady(int k) { // 85e6aa +void Sprite_3D_OldSnitchLady(int k) { // 85e6aa + Generic_PutInBottle(k, bottle_state_3D_OldSnitchLady); //Pokemode static const int8 kOldSnitchLady_Xd[2] = {-32, 32}; static const int8 kOldSnitchLady_Xvel[4] = {0, 0, -9, 9}; static const int8 kOldSnitchLady_Yvel[4] = {-9, 9, 0, 0}; @@ -6053,7 +6161,8 @@ void SpritePrep_RunningMan(int k) { // 85e896 sprite_ignore_projectile[k]++; } -void Sprite_RunningMan(int k) { // 85e8b2 +void Sprite_74_RunningMan(int k) { // 85e8b2 + Generic_PutInBottle(k, bottle_state_74_RunningMan); //Pokemode static const int8 kRunningMan_Xvel2[2] = {-24, 24}; static const int8 kRunningMan_Xvel[4] = {0, 0, -54, 54}; static const int8 kRunningMan_Yvel[4] = {-54, 54, 0, 0}; @@ -6156,7 +6265,8 @@ void RunningMan_Draw(int k) { // 85ea4d SpriteDraw_Shadow(k, &info); } -void Sprite_BottleVendor(int k) { // 85ea79 +void Sprite_75_BottleVendor(int k) { // 85ea79 + Generic_PutInBottle(k, bottle_state_75_BottleVendor); //Pokemode int j; sprite_A[k] = BottleVendor_Draw(k); @@ -6192,7 +6302,7 @@ void Sprite_BottleVendor(int k) { // 85ea79 break; case 2: // giving item_receipt_method = 0; - Link_ReceiveItem(0x16, 0); + Link_ReceiveItem(receiveitem_index_bottle, 0); sram_progress_indicator_3 |= 2; link_rupees_goal -= 100; sprite_ai_state[k] = 0; @@ -6242,11 +6352,73 @@ void Priest_SpawnRescuedPrincess() { // 85ec4c Sprite_SetX(k, link_x_coord); Sprite_SetY(k, link_y_coord); sprite_subtype2[k] = 1; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; sprite_ignore_projectile[k]++; sprite_flags4[k] = 3; } +void Generic_PutInBottle(int k, int bottle_state){//Pokemode: this is inspired from Bee_PutInBottle(k); + + if (enhanced_features0 & kFeatures0_Pokemode){ //Ycar having fun: allow catching her with Bug Net + if (Sprite_CheckDamageFromLink(k) & (kCheckDamageFromPlayer_Net )){ //| ~kCheckDamageFromPlayer_Carry) ) { + int j = Sprite_Find_EmptyBottle(); + if (j >= 0) { + link_bottle_info[j] = bottle_state;// + sprite_head_dir[k]; + Hud_RefreshIcon(); + sprite_state[k] = 0; //hide the sprite + + LinkItem_Net_endAnimation(); + + return; + } + //Sprite_ShowMessageUnconditional(0xca); //"No empty bottle, set if free" + LinkItem_Net_endAnimation(); + dialogue_message_index = 0xca; + Sprite_ShowMessageMinimal(); + return; + } + } +} + +void Follower_PutInBottle(int bottle_state){//Ycar this is inspired from Bee_PutInBottle(k); + if (enhanced_features0 & kFeatures0_Pokemode){ //Ycar having fun: allow catching her with Bug Net + if(follower_indicator != follower_indicator_noone){ + switch (follower_indicator) { + case follower_indicator_0x3: bottle_state = bottle_state_bee; break; + case follower_indicator_11 : bottle_state = bottle_state_bee; break; + case follower_indicator_BigBomb : bottle_state = bottle_state_B5_BombShop; break; + case follower_indicator_BlindMaiden : bottle_state = bottle_state_B7_BlindMaiden; break; + case follower_indicator_HandleTrigger : bottle_state = bottle_state_bee; break; + case follower_indicator_Kiki: bottle_state = bottle_state_B6_Kiki ; break; + case follower_indicator_LockSmith: bottle_state = bottle_state_39_Locksmith ; break; + case follower_indicator_OldMan: bottle_state = bottle_state_AD_OldMan ; break; + case follower_indicator_PurpleChess: bottle_state = bottle_state_B4_PurpleChest; break; + case follower_indicator_Smith: bottle_state = bottle_state_1A_Smithy; break; + case follower_indicator_Smithy_Frog: bottle_state = bottle_state_1A_Smithy; break; + case follower_indicator_Uncle_Telepathy: bottle_state = bottle_state_73_UncleAndPriest ; break; + case follower_indicator_Zelda: bottle_state = bottle_state_76_Zelda; break; + default : bottle_state = follower_indicator; + } + if (kCheckDamageFromPlayer_Net) { + int j = Sprite_Find_EmptyBottle(); + if (j >= 0) { + link_bottle_info[j] = bottle_state;// + sprite_head_dir[k]; + Hud_RefreshIcon(); + + //sprite_state[k] = 0; //hide the sprite + follower_indicator = follower_indicator_noone; + //Follower_NotFollowing(); + //follower_dropped = 128; + + return; + } + Sprite_ShowMessageUnconditional(0xca); //"No empty bottle, set if free" + return; + } + } + } +} + void Sprite_76_Zelda(int k) { // 85ec9e CrystalMaiden_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -6254,6 +6426,17 @@ void Sprite_76_Zelda(int k) { // 85ec9e Sprite_BehaveAsBarrier(k); if (Sprite_TrackBodyToHead(k)) Sprite_MoveXY(k); + + Generic_PutInBottle(k, bottle_state_76_Zelda); //Pokemode + + if (enhanced_features0 & kFeatures0_PrincessZeldaHelps){ // Zelda offering her help + if(sprite_ai_state[k]==10){ + follower_indicator &= follower_indicator_Zelda; + Sprite_BecomeFollower(k); + sprite_state[k] = 0; + } + } + switch (sprite_subtype2[k]) { case 0: Zelda_InCell(k); break; case 1: Zelda_EnteringSanctuary(k); break; @@ -6301,12 +6484,17 @@ void Zelda_InCell(int k) { // 85ecbf flag_is_link_immobilized = 0; which_starting_point = 2; SavePalaceDeaths(); - follower_indicator = 1; + follower_indicator = follower_indicator_Zelda; Dungeon_FlagRoomData_Quadrants(); Sprite_BecomeFollower(k); sprite_state[k] = 0; music_control = 16; break; + case 10: //Ycar: More simple transition to follower state + follower_indicator = follower_indicator_Zelda; + Sprite_BecomeFollower(k); //Ycar: I should use that more often, haha + sprite_state[k] = 0; + break; } } @@ -6359,6 +6547,12 @@ void Zelda_AtSanctuary(int k) { // 85ee0c if (j & 0x100) { sprite_D[k] = sprite_head_dir[k] = (uint8)j; link_hearts_filler = 0xa0; + + if (enhanced_features0 & kFeatures0_PrincessZeldaHelps){ //Ycar: Zelda offering her help + follower_indicator = follower_indicator_Zelda; + Sprite_BecomeFollower(k); + sprite_state[k] = 0; + } } } @@ -6373,6 +6567,7 @@ void SpritePrep_Mushroom(int k) { // 85ee53 } void Sprite_E7_Mushroom(int k) { // 85ee78 + Generic_PutInBottle(k, bottle_state_E7_Mushroom); //Pokemode SpriteDraw_SingleLarge(k); if (Sprite_CheckIfLinkIsBusy()) return; @@ -6384,13 +6579,14 @@ void Sprite_E7_Mushroom(int k) { // 85ee78 if (Sprite_CheckDamageToLink_same_layer(k)) { sprite_state[k] = 0; item_receipt_method = 0; - Link_ReceiveItem(0x29, 0); + Link_ReceiveItem(receiveitem_index_mushroom, 0); } else if ((frame_counter & 0x1f) == 0) { sprite_oam_flags[k] ^= 0x40; } } void Sprite_E8_FakeSword(int k) { // 85eeaf + Generic_PutInBottle(k, bottle_state_E8_FakeSword); //Pokemode FakeSword_Draw(k); if (Sprite_ReturnIfPaused(k)) return; @@ -6413,7 +6609,8 @@ void SpritePrep_HeartContainer(int k) { // 85ef01 HeartUpgrade_CheckIfAlreadyObtained(k); } -void Sprite_HeartContainer(int k) { // 85ef47 +void Sprite_EA_HeartContainer(int k) { // 85ef47 + Generic_PutInBottle(k, bottle_state_EA_HeartContainer); //Pokemode if (BYTE(cur_palace_index_x2) == 26) { sprite_state[k] = 0; return; @@ -6448,20 +6645,21 @@ void Sprite_HeartContainer(int k) { // 85ef47 sprite_state[k] = 0; if (sprite_A[k]) { item_receipt_method = 2; - Link_ReceiveItem(0x3e, 0); + Link_ReceiveItem(receiveitem_index_heart_something, 0); dung_savegame_state_bits |= 0x8000; return; } Link_CancelDash(); item_receipt_method = 0; - Link_ReceiveItem(0x26, 0); + Link_ReceiveItem(receiveitem_index_heart_container, 0); if (!player_is_indoors) save_ow_event_info[BYTE(overworld_screen_index)] |= 0x40; else dung_savegame_state_bits |= (sprite_x_hi[k] & 1) ? 0x2000 : 0x4000; } -void Sprite_HeartPiece(int k) { // 85f020 +void Sprite_EB_HeartPiece(int k) { // 85f020 + Generic_PutInBottle(k, bottle_state_EB_HeartPiece); //Pokemode static const uint16 kHeartPieceMsg[4] = {0x158, 0x155, 0x156, 0x157}; if (!sprite_ai_state[k]) { sprite_ai_state[k]++; @@ -6494,7 +6692,7 @@ void Sprite_HeartPiece(int k) { // 85f020 if (link_heart_pieces == 0) { Link_CancelDash(); item_receipt_method = 0; - Link_ReceiveItem(0x26, 0); + Link_ReceiveItem(receiveitem_index_heart_container, 0); } else { SpriteSfx_QueueSfx3WithPan(k, 0x2d); Sprite_ShowMessageUnconditional(kHeartPieceMsg[link_heart_pieces]); @@ -6543,7 +6741,7 @@ void Sprite_Sahasrahla(int k) { // 85f14d break; case 2: // grant boots item_receipt_method = 0; - Link_ReceiveItem(0x4b, 0); + Link_ReceiveItem(receiveitem_index_boots, 0); sprite_ai_state[k] = 3; savegame_map_icons_indicator = 3; break; @@ -6772,6 +6970,7 @@ void MagicShopAssistant_SpawnRedCauldron(int k) { // 85f5f0 } void Sprite_E9_PotionShop(int k) { // 85f633 + Generic_PutInBottle(k, bottle_state_E9_PotionShop); //Pokemode switch(sprite_subtype2[k]) { case 0: Sprite_MagicShopAssistant_Main(k); return; case 1: Sprite_BagOfPowder(k); return; @@ -6790,7 +6989,7 @@ void Sprite_BagOfPowder(int k) { // 85f644 return; Link_CancelDash(); item_receipt_method = 0; - Link_ReceiveItem(0xd, 0); + Link_ReceiveItem(receiveitem_index_bag_of_powder, 0); sprite_state[k] = 0; } @@ -6830,7 +7029,7 @@ void Sprite_GreenCauldron(int k) { // 85f68e sprite_delay_main[k] = 64; link_rupees_goal -= 60; item_receipt_method = 0; - Link_ReceiveItem(0x2f, 0); + Link_ReceiveItem(receiveitem_index_green_cauldron, 0); } void GreenPotionItem_Draw(int k) { // 85f718 @@ -6870,7 +7069,7 @@ void Sprite_BlueCauldron(int k) { // 85f72b sprite_delay_main[k] = 64; link_rupees_goal -= 160; item_receipt_method = 0; - Link_ReceiveItem(0x30, 0); + Link_ReceiveItem(receiveitem_index_blue_cauldron, 0); } void BluePotionItem_Draw(int k) { // 85f7bd @@ -6911,7 +7110,7 @@ void Sprite_RedCauldron(int k) { // 85f7d0 sprite_delay_main[k] = 64; link_rupees_goal -= 120; item_receipt_method = 0; - Link_ReceiveItem(0x2e, 0); + Link_ReceiveItem(receiveitem_index_red_cauldron, 0); } void PotionCauldron_GoBeep(int k) { // 85f846 @@ -6929,7 +7128,7 @@ void RedPotionItem_Draw(int k) { // 85f86d } bool PotionCauldron_CheckBottles() { // 85f880 - return (link_bottle_info[0] | link_bottle_info[1] | link_bottle_info[2] | link_bottle_info[3]) >= 2; + return (link_bottle_info[0] | link_bottle_info[1] | link_bottle_info[2] | link_bottle_info[3]) >= 2; //(it returns true if player has found at least one bottle) } void Sprite_MagicShopAssistant_Main(int k) { // 85f893 @@ -6965,11 +7164,17 @@ void Shopkeeper_Draw(int k) { // 85f91b SpriteDraw_Shadow(k, &info); } -void Sprite_DashItem(int k) { // 85fbf7 +void Sprite_3B_DashItem(int k) { // 85fbf7 switch (sprite_graphics[k]) { - case 0: Sprite_BookOfMudora(k); break; - case 1: Sprite_BonkKey(k); break; - case 2: Sprite_LumberjackTree(k); break; + case 0: { + Generic_PutInBottle(k, bottle_state_3B_DashItem); //Pokemode + Sprite_BookOfMudora(k); break;} + case 1: { + Generic_PutInBottle(k, bottle_state_3B_DashItem); //Pokemode + Sprite_BonkKey(k); break;} + case 2: { + Generic_PutInBottle(k, bottle_state_3B_DashItem); //Pokemode + Sprite_LumberjackTree(k); break;} } } @@ -7050,7 +7255,7 @@ void Sprite_BookOfMudora(int k) { // 85fc9e case 3: // give to player Link_CancelDash(); item_receipt_method = 0; - Link_ReceiveItem(0x1d, 0); + Link_ReceiveItem(receiveitem_index_book_of_mudora, 0); sprite_state[k] = 0; break; } @@ -7159,7 +7364,8 @@ int LumberjackTree_SpawnLeaves(int k) { // 85ff39 return j; } -void Sprite_TroughBoy(int k) { // 85ff66 +void Sprite_3C_TroughBoy(int k) { // 85ff66 + Generic_PutInBottle(k, bottle_state_3C_TroughBoy); //Pokemode TroughBoy_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -7395,13 +7601,13 @@ void SpritePrep_DoNothingC(int k) { // 86899b void SpritePrep_BlindMaiden(int k) { // 86899c if (!(save_dung_info[0xac] & 0x800)) { sprite_ignore_projectile[k]++; - if (follower_indicator != 6) { - follower_indicator = 6; + if (follower_indicator != follower_indicator_BlindMaiden) { + follower_indicator = follower_indicator_BlindMaiden; follower_dropped = 0; tagalong_var5 = 0; LoadFollowerGraphics(); Follower_Initialize(); - follower_indicator = 0; + follower_indicator = follower_indicator_noone; return; } } @@ -7450,7 +7656,7 @@ void SpritePrep_BullyAndVictim(int k) { // 868a51 } void SpritePrep_PurpleChest(int k) { // 868a59 - if (follower_indicator != 12 && !(sram_progress_indicator_3 & 16) && sram_progress_indicator_3 & 32) + if (follower_indicator != follower_indicator_PurpleChess && !(sram_progress_indicator_3 & 16) && sram_progress_indicator_3 & 32) sprite_ignore_projectile[k]++; else sprite_state[k] = 0; @@ -7459,7 +7665,7 @@ void SpritePrep_PurpleChest(int k) { // 868a59 void SpritePrep_Smithy(int k) { // 868a79 sprite_ignore_projectile[k]++; if (savegame_is_darkworld & 64) { - if (sram_progress_indicator_3 & 32 || follower_indicator != 0) + if (sram_progress_indicator_3 & 32 || follower_indicator != follower_indicator_noone) sprite_state[k] = 0; else sprite_subtype2[k] = 2; @@ -7744,11 +7950,11 @@ void SpritePrep_Kiki(int k) { // 868d46 void SpritePrep_Locksmith(int k) { // 868d59 sprite_ignore_projectile[k]++; - if (follower_indicator == 9) { + if (follower_indicator == follower_indicator_LockSmith) { sprite_state[k] = 0; return; } - if (follower_indicator == 12) { + if (follower_indicator == follower_indicator_PurpleChess) { sprite_ai_state[k] = 2; } if (sram_progress_indicator_3 & 0x10) @@ -8140,7 +8346,7 @@ void SpritePrep_ShieldPickup(int k) { // 869174 void SpritePrep_NiceBee(int k) { // 869175 uint8 or_bottle = link_bottle_info[0] | link_bottle_info[1] | link_bottle_info[2] | link_bottle_info[3]; - if (or_bottle & 8) + if (or_bottle & bottle_state_goodbee) //if any bottle has 0001000, (which is 8, ie a goodbee?) sprite_state[k] = 0; sprite_E[k]++; sprite_ignore_projectile[k]++; @@ -8270,6 +8476,7 @@ void Sprite_09_GiantMoldorm(int k) { // 869469 }; static const uint8 kGiantMoldorm_NextDir[16] = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7}; GiantMoldorm_Draw(k); + Generic_PutInBottle(k, bottle_state_09_GiantMoldorm); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (sprite_ai_state[k] == 3) { @@ -8352,6 +8559,7 @@ void Sprite_09_GiantMoldorm(int k) { // 869469 void Sprite_01_Vulture_bounce(int k) { // 869473 static const uint8 kVulture_Gfx[4] = {1, 2, 3, 2}; + Generic_PutInBottle(k, bottle_state_01_Vulture_bounce); //Pokemode sprite_obj_prio[k] |= 0x30; Vulture_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -8393,6 +8601,7 @@ void Sprite_27_Deadrock(int k) { // 86948a static const uint8 kDeadRock_OamFlags[9] = {0x40, 0x40, 0, 0, 0, 0x40, 0, 0x40, 0}; static const int8 kDeadRock_Xvel[4] = {32, -32, 0, 0}; static const int8 kDeadRock_Yvel[4] = {0, 0, 32, -32}; + Generic_PutInBottle(k, bottle_state_27_Deadrock); //Pokemode int j = (sprite_delay_aux2[k] ? (sprite_delay_aux2[k] & 4) : (sprite_ai_state[k] != 2)) ? sprite_A[k] : 8; sprite_graphics[k] = kDeadRock_Gfx[j]; sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | kDeadRock_OamFlags[j]; @@ -8468,6 +8677,7 @@ void Sprite_20_Sluggula(int k) { // 8695d9 static const uint8 kSluggula_OamFlags[8] = {0x40, 0x40, 0, 0, 0, 0, 0, 0}; static const int8 kSluggula_XYvel[6] = {16, -16, 0, 0, 16, -16}; int j = sprite_D[k] << 1 | (sprite_subtype2[k] & 8) >> 3; + Generic_PutInBottle(k, bottle_state_20_Sluggula); //Pokemode sprite_graphics[k] = kSluggula_Gfx[j]; sprite_oam_flags[k] = sprite_oam_flags[k] & 191 | kSluggula_OamFlags[j]; SpriteDraw_SingleLarge(k); @@ -8519,6 +8729,7 @@ void Sprite_19_Poe(int k) { // 869688 static const uint8 kPoe_OamFlags[2] = {0x40, 0}; static const int8 kPoe_Yvel[2] = {8, -8}; int j; + Generic_PutInBottle(k, bottle_state_19_Poe); //Pokemode sprite_D[k] = j = sprite_x_vel[k] >> 7; sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | kPoe_OamFlags[j]; if (!sprite_E[k]) @@ -8590,6 +8801,7 @@ void Sprite_18_MiniMoldorm(int k) { // 869808 static const int8 kMoldorm_Yvel[16] = {0, 9, 17, 22, 24, 22, 17, 9, 0, -9, -17, -22, -24, -22, -17, -9}; static const uint8 kMoldorm_NextDir[16] = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7}; + Generic_PutInBottle(k, bottle_state_18_MiniMoldorm); //Pokemode Moldorm_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -8651,6 +8863,7 @@ void Sprite_12_Moblin(int k) { // 8698e4 static const uint8 kMoblin_Gfx[4] = {6, 4, 0, 2}; int j; Moblin_Draw(k); + Generic_PutInBottle(k, bottle_state_12_Moblin); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (Sprite_ReturnIfRecoiling(k)) @@ -8810,6 +9023,7 @@ void Sprite_0E_Snapdragon(int k) { // 869c24 static const int8 kSnapDragon_Xvel[8] = {8, -8, 8, -8, 16, -16, 16, -16}; static const int8 kSnapDragon_Yvel[8] = {8, 8, -8, -8, 16, 16, -16, -16}; int j; + Generic_PutInBottle(k, bottle_state_0E_Snapdragon); //Pokemode sprite_graphics[k] = sprite_B[k] + kSnapDragon_Gfx[sprite_D[k]]; SnapDragon_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -8901,6 +9115,7 @@ void SnapDragon_Draw(int k) { // 869e02 void Sprite_22_Ropa(int k) { // 869e1f Ropa_Draw(k); + Generic_PutInBottle(k, bottle_state_22_Ropa); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (Sprite_ReturnIfRecoiling(k)) @@ -8954,6 +9169,7 @@ void Ropa_Draw(int k) { // 869ee5 void Sprite_11_Hinox(int k) { // 869f05 Hinox_Draw(k); + Generic_PutInBottle(k, bottle_state_11_Hinox); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (sprite_F[k]) { @@ -9111,6 +9327,7 @@ void Sprite_23_RedBari(int k) { // 86a23d static const int8 kBari_Yvel2[16] = {-16, -14, -11, -8, 0, 8, 11, 14, 16, 14, 11, 8, 0, -9, -11, -14}; static const uint8 kBari_Gfx[2] = {0, 3}; int j; + Generic_PutInBottle(k, bottle_state_23_RedBari); //Pokemode if (sign8(sprite_C[k])) { if (sprite_head_dir[k] != 16) { @@ -9234,6 +9451,7 @@ void Sprite_13_MiniHelmasaur(int k) { // 86a409 static const uint8 kHelmasaur_Gfx[8] = {3, 4, 3, 4, 2, 2, 5, 5}; static const uint8 kHelmasaur_OamFlags[8] = {0x40, 0x40, 0, 0, 0, 0x40, 0x40, 0}; int j = sprite_subtype2[k] >> 2 & 1 | sprite_D[k] << 1; + Generic_PutInBottle(k, bottle_state_13_MiniHelmasaur); //Pokemode sprite_graphics[k] = kHelmasaur_Gfx[j]; sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | kHelmasaur_OamFlags[j]; if (!((k ^ frame_counter) & 15)) { @@ -9248,6 +9466,7 @@ void Sprite_13_MiniHelmasaur(int k) { // 86a409 } void Sprite_26_HardhatBeetle(int k) { // 86a460 + Generic_PutInBottle(k, bottle_state_26_HardhatBeetle); sprite_graphics[k] = sprite_subtype2[k] >> 2 & 1; HardHatBeetle_Draw(k); HelmasaurHardHatBeetleCommon(k); @@ -9294,6 +9513,7 @@ void HardHatBeetle_Draw(int k) { // 86a4f2 void Sprite_15_Antifairy(int k) { // 86a50c SpriteDraw_Antfairy(k); + Generic_PutInBottle(k, bottle_state_15_Antifairy); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (Sprite_CheckDamageToLink(k) && sprite_delay_main[k] == 0) { @@ -9310,6 +9530,7 @@ void Sprite_15_Antifairy(int k) { // 86a50c } void Sprite_0B_Cucco(int k) { // 86a5c2 + Generic_PutInBottle(k, bottle_state_0B_Cucco); //Pokemode if (sprite_x_vel[k] != 0) sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | (sign8(sprite_x_vel[k]) ? 0 : 0x40); @@ -9468,6 +9689,7 @@ void BawkBawk(int k) { // 86a84c } void Sprite_17_Hoarder(int k) { // 86a86c + Generic_PutInBottle(k, bottle_state_17_Hoarder); //Pokemode if (sprite_ai_state[k]) Sprite_Hoarder_Frantic(k); else @@ -9600,6 +9822,7 @@ void CoveredRupeeCrab_Draw(int k) { // 86aa48 } void Sprite_EC_ThrownItem(int k) { // 86aae0 + Generic_PutInBottle(k, bottle_state_EC_ThrownItem); //Pokemode if (byte_7E0FC6 < 3) { if (sort_sprites_setting && sprite_floor[k]) { int spr_slot = 0x2c + (k & 3); @@ -9693,6 +9916,7 @@ void Sprite_TransmuteToBomb(int k) { // 86ad50 } void Sprite_28_DarkWorldHintNPC(int k) { // 86ad6f + Generic_PutInBottle(k, bottle_state_28_DarkWorldHintNPC); //Pokemode StoryTeller_1_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -9814,6 +10038,7 @@ void StoryTeller_1_Draw(int k) { // 86af1a } void Sprite_2E_FluteKid(int k) { // 86af3b + Generic_PutInBottle(k, bottle_state_2E_FluteKid); //Pokemode switch (sprite_head_dir[k]) { case 0: switch (sprite_subtype2[k]) { @@ -9919,7 +10144,7 @@ void Sprite_FluteKid_Stumpy(int k) { // 86b040 break; case 2: // grant shovel item_receipt_method = 0; - Link_ReceiveItem(0x13, 0); + Link_ReceiveItem(receiveitem_index_shovel, 0); sprite_ai_state[k] = 0; break; case 3: // wait for music @@ -9979,6 +10204,7 @@ void FluteKid_SpawnQuaver(int k) { // 86b1a5 } void Sprite_1A_Smithy(int k) { // 86b1ee + Generic_PutInBottle(k, bottle_state_1A_Smithy); //Pokemode switch (sprite_subtype2[k]) { case 0: Smithy_Main(k); break; case 1: Smithy_Spark(k); break; @@ -10038,7 +10264,7 @@ void Smithy_Frog(int k) { // 86b274 if (Sprite_ShowSolicitedMessage(k, 0xe1) & 0x100) sprite_ai_state[k] = 1; } else { - follower_indicator = 7; + follower_indicator = follower_indicator_Smithy_Frog; LoadFollowerGraphics(); Sprite_BecomeFollower(k); // zelda bug: doesn't save X sprite_state[k] = 0; @@ -10103,7 +10329,7 @@ void Smithy_Main(int k) { // 86b34e switch(sprite_ai_state[k]) { case 0: // ConversationStart sprite_C[k] = 0; - if (follower_indicator != 8) { + if (follower_indicator != follower_indicator_Smith) { if (Smithy_ListenForHammer(k)) { Sprite_ShowMessageUnconditional(0xe4); sprite_delay_aux1[k] = 96; @@ -10181,7 +10407,7 @@ void Smithy_Main(int k) { // 86b34e sprite_ai_state[k] = 0; sprite_ai_state[sprite_E[k]] = 0; item_receipt_method = 0; - Link_ReceiveItem(2, 0); + Link_ReceiveItem(receiveitem_index_tempered_sword, 0); sram_progress_indicator_3 &= ~0x80; break; case 7: // @@ -10198,7 +10424,7 @@ void Smithy_Main(int k) { // 86b34e sprite_ignore_projectile[j] = 3; } sprite_ai_state[k] = 11; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; sprite_graphics[k] = 4; break; } @@ -10210,7 +10436,7 @@ void Smithy_Main(int k) { // 86b34e } bool Smithy_ListenForHammer(int k) { // 86b43d - return sprite_delay_aux1[k] == 0 && hud_cur_item == kHudItem_Hammer && (link_item_in_hand & 2) && player_handler_timer == 2 && Sprite_CheckDamageToLink_same_layer(k); + return sprite_delay_aux1[k] == 0 && hud_cur_item == kHudItem_Hammer && (link_item_in_hand & item_in_hand_hammer) && player_handler_timer == 2 && Sprite_CheckDamageToLink_same_layer(k); } int Smithy_SpawnDwarfPal(int k) { // 86b5a6 @@ -10303,6 +10529,7 @@ void Sprite_1B_Arrow(int k) { // 86b754 static const int8 kEnemyArrow_Xvel[8] = {0, 0, 16, 16, 0, 0, -16, -16}; static const int8 kEnemyArrow_Yvel[8] = {16, 16, 0, 0, -16, -16, 0, 0}; static const uint8 kEnemyArrow_Dirs[4] = {0, 2, 1, 3}; + Generic_PutInBottle(k, bottle_state_1B_Arrow); //Pokemode EnemyArrow_Draw(k); if (Sprite_ReturnIfPaused(k)) @@ -10379,8 +10606,8 @@ void Sprite_1E_CrystalSwitch(int k) { // 86b8d0 sprite_oam_flags[k] = sprite_oam_flags[k] & ~0xe | kCrystalSwitchPal[orange_blue_barrier_state & 1]; Oam_AllocateDeferToPlayer(k); SpriteDraw_SingleLarge(k); - if (Sprite_ReturnIfInactive(k)) - return; + if (Sprite_ReturnIfInactive(k)){ + return;} if (Sprite_CheckDamageToLink_same_layer(k)) { Sprite_NullifyHookshotDrag(); link_speed_setting = 0; @@ -10389,6 +10616,7 @@ void Sprite_1E_CrystalSwitch(int k) { // 86b8d0 if (sprite_delay_main[k] == 0) { Sprite_GarnishSpawn_Sparkle(k, frame_counter & 7, GetRandomNumber() & 7); sprite_delay_main[k] = 31; + Generic_PutInBottle(k, bottle_state_1E_CrystalSwitch); //Pokemode } if (sprite_F[k] == 0) { if (sign8(button_b_frames - 9)) @@ -10401,6 +10629,7 @@ void Sprite_1E_CrystalSwitch(int k) { // 86b8d0 } void Sprite_1F_SickKid(int k) { // 86b94c + Generic_PutInBottle(k, bottle_state_1F_SickKid); //Pokemode static const int8 kBugNetKid_Gfx[8] = {0, 1, 0, 1, 0, 1, 2, -1}; static const uint8 kBugNetKid_Delay[7] = {8, 12, 8, 12, 8, 96, 16}; int j; @@ -10431,9 +10660,9 @@ void Sprite_1F_SickKid(int k) { // 86b94c sprite_ai_state[k] = 2; } break; - case 2: // grant + case 2: // grant bug net item_receipt_method = 0; - Link_ReceiveItem(0x21, 0); + Link_ReceiveItem(receiveitem_index_bug_net, 0); flag_is_link_immobilized = 0; sprite_ai_state[k] = 3; break; @@ -10446,6 +10675,7 @@ void Sprite_1F_SickKid(int k) { // 86b94c void Sprite_21_WaterSwitch(int k) { // 86b9fa PushSwitch_Draw(k); + Generic_PutInBottle(k, bottle_state_21_WaterSwitch); //Pokemode if (Sprite_ReturnIfInactive(k)) return; switch(sprite_ai_state[k]) { @@ -10596,6 +10826,7 @@ void PushSwitch_Draw(int k) { // 86bb22 } void Sprite_39_Locksmith(int k) { // 86bcac + Generic_PutInBottle(k, bottle_state_39_Locksmith); //Pokemode uint8 bak; int j; @@ -10614,13 +10845,13 @@ void Sprite_39_Locksmith(int k) { // 86bcac sprite_y_vel[k] = 1; if (!Sprite_CheckTileCollision(k)) { sprite_ai_state[k]++; - if (follower_indicator != 0) + if (follower_indicator != follower_indicator_noone) sprite_ai_state[k] = 5; } sprite_x_lo[k] = bak; break; case 1: // transition to tagalong - follower_indicator = 9; + follower_indicator = follower_indicator_LockSmith; tagalong_var5 = 0; LoadFollowerGraphics(); Follower_Initialize(); @@ -10645,10 +10876,10 @@ void Sprite_39_Locksmith(int k) { // 86bcac sprite_ai_state[k] = 2; } else { item_receipt_method = 0; - Link_ReceiveItem(0x16, 0); + Link_ReceiveItem(receiveitem_index_bottle, 0); sram_progress_indicator_3 |= 0x10; sprite_ai_state[k] = 4; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } } else { Sprite_ShowMessageUnconditional(0x10a); @@ -10678,15 +10909,19 @@ void Sprite_2B_Hobo(int k) { // 86bdc1 switch (sprite_subtype2[k]) { case 0: Sprite_Hobo_Bum(k); + Generic_PutInBottle(k, bottle_state_2B_Hobo); //Pokemode break; case 1: Sprite_Hobo_Bubble(k); + Generic_PutInBottle(k, bottle_state_2B_Hobo); //Pokemode break; case 2: Sprite_Hobo_Fire(k); + Generic_PutInBottle(k, bottle_state_2B_Hobo); //Pokemode break; case 3: Sprite_Hobo_Smoke(k); + Generic_PutInBottle(k, bottle_state_2B_Hobo); //Pokemode break; } } @@ -10735,7 +10970,7 @@ void Sprite_Hobo_Bum(int k) { // 86bdd0 sprite_graphics[k] = 1; save_ow_event_info[BYTE(overworld_screen_index)] |= 0x20; item_receipt_method = 0; - Link_ReceiveItem(0x16, 0); + Link_ReceiveItem(receiveitem_index_bottle, 0); sram_progress_indicator_3 |= 1; break; case 3: // back to sleep @@ -10843,6 +11078,7 @@ void Hobo_SpawnSmoke(int k) { // 86bfaf } void Sprite_73_UncleAndPriest(int k) { // 86bfe0 + Generic_PutInBottle(k, bottle_state_73_UncleAndPriest); //Pokemode switch (sprite_E[k]) { case 0: Sprite_Uncle(k); @@ -10875,7 +11111,7 @@ void SpritePrep_UncleAndPriest_bounce(int k) { // 86bfe5 j = 0; } else { sprite_D[k] = sprite_head_dir[k] = Sprite_DirectionToFaceLink(k, NULL) ^ 3; - if (follower_indicator == 1) { + if (follower_indicator == follower_indicator_Zelda) { sram_progress_flags |= 0x4; save_ow_event_info[0x1b] |= 0x20; sprite_delay_main[k] = 170; @@ -10911,12 +11147,12 @@ void SpritePrep_OldMan_bounce(int k) { // 86bff9 sprite_subtype2[k] = 2; return; } - if (follower_indicator == 0) { + if (follower_indicator == follower_indicator_noone) { if (link_item_mirror == 2) sprite_state[k] = 0; - follower_indicator = 4; + follower_indicator = follower_indicator_OldMan; LoadFollowerGraphics(); - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } else { sprite_state[k] = 0; LoadFollowerGraphics(); @@ -10957,6 +11193,7 @@ void Sprite_TutorialGuardOrBarrier(int k) { // 86bffe } void Sprite_F2_MedallionTablet(int k) { // 86c00d + Generic_PutInBottle(k, bottle_state_F2_MedallionTablet); //Pokemode switch (sprite_subtype2[k]) { case 0: MedallionTablet_Main(k); @@ -10969,6 +11206,7 @@ void Sprite_F2_MedallionTablet(int k) { // 86c00d void Sprite_33_RupeePull(int k) { // 86c017 PrepOamCoordsRet info; + Generic_PutInBottle(k, bottle_state_33_RupeePull); //Pokemode Sprite_PrepOamCoord(k, &info); if (Sprite_ReturnIfInactive(k)) return; @@ -10991,6 +11229,7 @@ void Sprite_33_RupeePull(int k) { // 86c017 void Sprite_14_ThievesTownGrate(int k) { // 86c01c PrepOamCoordsRet info; + Generic_PutInBottle(k, bottle_state_14_ThievesTownGrate); //Pokemode Sprite_PrepOamCoord(k, &info); if (Sprite_ReturnIfInactive(k)) return; @@ -11023,6 +11262,7 @@ void SpritePrep_Snitch_bounce_3(int k) { // 86c030 } void Sprite_37_Waterfall(int k) { // 86c03a + Generic_PutInBottle(k, bottle_state_37_Waterfall); //Pokemode switch (sprite_subtype2[k]) { case 0: Waterfall(k); break; case 1: Sprite_BatCrash(k); break; @@ -11030,6 +11270,7 @@ void Sprite_37_Waterfall(int k) { // 86c03a } void Sprite_38_EyeStatue(int k) { // 86c03f + Generic_PutInBottle(k, bottle_state_38_EyeStatue); //Pokemode if (!sprite_B[k]) { PrepOamCoordsRet info; Sprite_PrepOamCoord(k, &info); @@ -11043,6 +11284,7 @@ void Sprite_38_EyeStatue(int k) { // 86c03f } void Sprite_3A_MagicBat(int k) { // 86c044 + Generic_PutInBottle(k, bottle_state_3A_MagicBat); //Pokemode if (sprite_head_dir[k]) { Sprite_MadBatterBolt(k); return; @@ -11128,10 +11370,10 @@ void SpritePrep_Zelda_bounce(int k) { // 86c06c } sprite_ignore_projectile[k]++; sprite_D[k] = sprite_head_dir[k] = Sprite_DirectionToFaceLink(k, NULL) ^ 3; - uint8 bak0 = follower_indicator; - follower_indicator = 1; + uint8 bakup_follower_indicator = follower_indicator; + follower_indicator = follower_indicator_Zelda; LoadFollowerGraphics(); - follower_indicator = bak0; + follower_indicator = bakup_follower_indicator; if (BYTE(dungeon_room_index) == 0x12) { sprite_subtype2[k] = 2; @@ -11144,12 +11386,13 @@ void SpritePrep_Zelda_bounce(int k) { // 86c06c } } else { sprite_subtype2[k] = 0; - if (follower_indicator == 1 || (sram_progress_flags & 4)) + if (follower_indicator == follower_indicator_Zelda || (sram_progress_flags & 4)) sprite_state[k] = 0; } } void Sprite_78_MrsSahasrahla(int k) { // 86c071 + Generic_PutInBottle(k, bottle_state_78_MrsSahasrahla); //Pokemode ElderWife_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -11185,6 +11428,7 @@ void Sprite_78_MrsSahasrahla(int k) { // 86c071 void Sprite_16_Elder_bounce(int k) { // 86c08a Elder_Draw(k); + Generic_PutInBottle(k, bottle_state_16_Elder_bounce); //Pokemode if (Sprite_ReturnIfInactive(k)) return; Sprite_BehaveAsBarrier(k); @@ -11203,13 +11447,19 @@ void SpritePrep_HeartPiece(int k) { // 86c0a8 } void Sprite_2D_TelepathicTile(int k) { // 86c0b2 + Generic_PutInBottle(k, bottle_state_2D_TelepathicTile); //Pokemode assert(0); } void Sprite_25_TalkingTree(int k) { // 86c0d5 switch (sprite_subtype2[k]) { - case 0: TalkingTree_Mouth(k); break; - case 1: TalkingTree_Eye(k); break; + case 0: { + Generic_PutInBottle(k, bottle_state_25_TalkingTree); //Pokemode + TalkingTree_Mouth(k); + break;} + case 1: { + Generic_PutInBottle(k,bottle_state_D4_Landmine); //Pokemode (freezes the game?) + TalkingTree_Eye(k); break;} } } @@ -11218,6 +11468,7 @@ void Sprite_1C_Statue(int k) { // 86c0e8 static const uint8 kMovableStatue_Joypad[4] = {1, 2, 4, 8}; static const int8 kMovableStatue_Xvel[4] = {-16, 16, 0, 0}; static const int8 kMovableStatue_Yvel[4] = {0, 0, -16, 16}; + Generic_PutInBottle(k, bottle_state_1C_Statue); //Pokemode int j; if (sprite_D[k]) { sprite_D[k] = 0; @@ -11322,6 +11573,7 @@ void Statue_BlockSprites(int k) { // 86c277 void Sprite_1D_FluteQuest(int k) { // 86c2e5 PrepOamCoordsRet info; + Generic_PutInBottle(k, bottle_state_1D_FluteQuest); //Pokemode Sprite_PrepOamCoord(k, &info); if (Sprite_ReturnIfInactive(k)) return; @@ -11335,6 +11587,7 @@ void Sprite_1D_FluteQuest(int k) { // 86c2e5 } void Sprite_72_FairyPond(int k) { // 86c319 + Generic_PutInBottle(k, bottle_state_72_FairyPond); //Pokemode if (sprite_A[k]) { if (!--sprite_C[k]) sprite_state[k] = 0; @@ -11626,6 +11879,7 @@ void FaerieQueen_Draw(int k) { // 86cb26 } void Sprite_71_Leever(int k) { // 86cba2 + Generic_PutInBottle(k, bottle_state_71_Leever); //Pokemode static const uint8 kLeever_EmergeGfx[16] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 1, 2, 1, 0, 0}; static const uint8 kLeever_AttackGfx[4] = {9, 10, 11, 12}; static const uint8 kLeever_AttackSpd[2] = {12, 8}; @@ -11742,6 +11996,7 @@ void Leever_Draw(int k) { // 86ce45 } void Sprite_D8_Heart(int k) { // 86cec0 + Generic_PutInBottle(k, bottle_state_D8_Heart); //Pokemode if (SpriteDraw_AbsorbableTransient(k, true)) return; if (Sprite_ReturnIfInactive(k)) @@ -11814,8 +12069,8 @@ void Sprite_E3_Fairy(int k) { // 86cf94 if (!sprite_delay_aux4[k]) { if (Sprite_CheckDamageToLink(k)) { Sprite_HandleAbsorptionByPlayer(k); - } else if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Ne) { - sprite_ai_state[k]++; + } else if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Net) { + sprite_ai_state[k]++; //set in capture state: sprite_ai_state[k]=1; Sprite_ShowMessageUnconditional(0xc9); return; } @@ -11828,16 +12083,16 @@ void Sprite_E3_Fairy(int k) { // 86cf94 return; Faerie_HandleMovement(k); break; - case 1: // capture - if (choice_in_multiselect_box == 0) { + case 1: // capture: "catching fairy, faery" + if (choice_in_multiselect_box == 0) { //Player choses to capture int j = Sprite_Find_EmptyBottle(); - if (j >= 0) { - link_bottle_info[j] = 6; + if (j >= 0) { //Empty bottle found + link_bottle_info[j] = bottle_state_fairy; // =6 Hud_RefreshIcon(); - sprite_state[k] = 0; + sprite_state[k] = 0; // inactivate sprite return; } - Sprite_ShowMessageUnconditional(0xca); + Sprite_ShowMessageUnconditional(0xca); // "You have no choice. Just set it free." } sprite_delay_aux4[k] = 48; sprite_ai_state[k] = 0; @@ -11851,6 +12106,7 @@ void Fairy_CheckIfTouchable(int k) { // 86d011 } void Sprite_E4_SmallKey(int k) { // 86d032 + Generic_PutInBottle(k, bottle_state_E4_SmallKey); //Pokemode if (dung_savegame_state_bits & (kAbsorbBigKey[sprite_die_action[k]] << 8)) { sprite_state[k] = 0; return; @@ -11862,6 +12118,63 @@ void Sprite_E4_SmallKey(int k) { // 86d032 } void Sprite_D9_GreenRupee(int k) { // 86d04a + if (enhanced_features0 & kFeatures0_Pokemode){ + int t = sprite_type[k] - 0xd8; + switch(t) { + case 0: +// link_hearts_filler += 8; + break; + case 1: + Generic_PutInBottle(k, bottle_state_D9_GreenRupee); //Pokemode + break; + case 2: + Generic_PutInBottle(k, bottle_state_DA_BlueRupee); //Pokemode + break; + case 3: + Generic_PutInBottle(k, bottle_state_DB_RedRupee); //Pokemode + break; + case 4: + Generic_PutInBottle(k, bottle_state_DC_1Bomb); //Pokemode + break; + case 5: + Generic_PutInBottle(k, bottle_state_DD_4Bombs); //Pokemode + break; + case 6: + Generic_PutInBottle(k, bottle_state_DE_8Bombs); //Pokemode + break; + case 7: + Generic_PutInBottle(k, bottle_state_DF_SmallMagicFiller); //Pokemode + break; + case 8: + Generic_PutInBottle(k, bottle_state_E0_BigMagicFiller); //Pokemode + break; + case 9: + Generic_PutInBottle(k, bottle_state_E1_5Arrows); //Pokemode + break; + case 10: + Generic_PutInBottle(k, bottle_state_E2_10Arrows); //Pokemode + break; + case 11: +// SpriteSfx_QueueSfx2WithPan(k, 0x31); +// link_hearts_filler += 56; + break; + case 12: + Generic_PutInBottle(k, bottle_state_E4_SmallKey); //Pokemode + case 13: + Generic_PutInBottle(k, bottle_state_E5_BigKey); //Pokemode + break; + case 14: + Generic_PutInBottle(k, bottle_state_E6_CollectableShield); //Pokemode +// link_shield_type = sprite_subtype[k]; +// // Shield needs to have the right palette after pikit +// if (enhanced_features0 & kFeatures0_MiscBugFixes) +// Palette_Load_Shield(); + break; + } + } + + + Sprite_DrawRippleIfInWater(k); if (SpriteDraw_AbsorbableTransient(k, true)) return; @@ -11918,6 +12231,7 @@ void Sprite_08_Octorok(int k) { // 86d377 static const int8 kOctorock_Yvel[4] = {0, 0, 24, -24}; static const uint8 kOctorock_OamFlags[4] = {0x40, 0, 0, 0}; + Generic_PutInBottle(k, bottle_state_08_Octorok); //Pokemode int j = sprite_D[k]; if (sprite_delay_aux1[k]) sprite_D[k] = kOctorock_Dir[j]; @@ -12012,6 +12326,7 @@ void Octorock_Draw(int k) { // 86d54a } void Sprite_0C_OctorokStone(int k) { // 86d5b9 + Generic_PutInBottle(k, bottle_state_0C_OctorokStone); //Pokemode if (sprite_state[k] == 6) { SpriteDraw_OctorokStoneCrumbling(k); if (Sprite_ReturnIfPaused(k)) @@ -12049,6 +12364,7 @@ void SpriteDraw_OctorokStoneCrumbling(int k) { // 86d643 void Sprite_0F_Octoballoon(int k) { // 86d6aa static const uint8 kSprite_Octoballoon_Z[8] = {16, 17, 18, 19, 20, 19, 18, 17}; + Generic_PutInBottle(k, bottle_state_0F_Octoballoon); //Pokemode sprite_z[k] = kSprite_Octoballoon_Z[sprite_subtype2[k] >> 3 & 7]; Octoballoon_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -12130,6 +12446,7 @@ void Octoballoon_FormBabby(int k) { // 86d80e } void Sprite_10_OctoballoonBaby(int k) { // 86d853 + Generic_PutInBottle(k, bottle_state_10_OctoballoonBaby); //Pokemode if (!sprite_subtype2[k]) sprite_state[k] = 0; if (sprite_subtype2[k] >= 64 || !(sprite_subtype2[k] & 1)) @@ -12154,6 +12471,7 @@ void Sprite_10_OctoballoonBaby(int k) { // 86d853 void Sprite_0D_Buzzblob(int k) { // 86d89a static const uint8 kBuzzBlob_Gfx[4] = {0, 1, 0, 2}; static const uint8 kBuzzBlob_ObjPrio[4] = {10, 2, 8, 2}; + Generic_PutInBottle(k, bottle_state_0D_Buzzblob); //Pokemode if (sprite_delay_aux1[k]) sprite_obj_prio[k] = sprite_obj_prio[k] & 0xf1 | kBuzzBlob_ObjPrio[sprite_delay_aux1[k] >> 1 & 3]; Sprite_Cukeman(k); @@ -12208,7 +12526,7 @@ void BuzzBlob_Draw(int k) { // 86d953 void Sprite_02_StalfosHead(int k) { // 86ddb7 static const uint8 kStalfosHead_OamFlags[4] = {0, 0, 0, 0x40}; static const uint8 kStalfosHead_Gfx[4] = {0, 1, 2, 1}; - + Generic_PutInBottle(k, bottle_state_02_StalfosHead); //Pokemode sprite_floor[k] = link_is_on_lower_level; if (sprite_delay_aux1[k]) Oam_AllocateFromRegionC(8); @@ -12621,11 +12939,15 @@ bool Probe_CheckTileSolidity(int k) { // 8dc26e return kSprite_SimplifiedTileAttr[tiletype] >= 1; } -void Sprite_HumanMulti_1(int k) { // 8dc2d9 +void Sprite_29_HumanMulti_1(int k) { // 8dc2d9 + switch (sprite_subtype2[k]) { - case 0: Sprite_FluteDad(k); break; - case 1: Sprite_ThiefHideoutGuy(k); break; - case 2: Sprite_BlindsHutGuy(k); break; + case 0: {Generic_PutInBottle(k, bottle_state_29_HumanMulti_1); //Pokemode + Sprite_FluteDad(k); break;} + case 1: {Generic_PutInBottle(k, bottle_state_29_HumanMulti_1); //Pokemode + Sprite_ThiefHideoutGuy(k); break;} + case 2: {Generic_PutInBottle(k, bottle_state_29_HumanMulti_1); //Pokemode + Sprite_BlindsHutGuy(k); break;} } } @@ -12716,7 +13038,8 @@ void BlindHideoutGuy_Draw(int k) { // 8dc481 SpriteDraw_Shadow(k, &info); } -void Sprite_SweepingLady(int k) { // 8dc4ad +void Sprite_2A_SweepingLady(int k) { // 8dc4ad + Generic_PutInBottle(k, bottle_state_2A_SweepingLady); //Pokemode SweepingLady_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -12737,7 +13060,8 @@ void SweepingLady_Draw(int k) { // 8dc4eb SpriteDraw_Shadow(k, &info); } -void Sprite_Lumberjacks(int k) { // 8dc51b +void Sprite_2C_Lumberjacks(int k) { // 8dc51b + Generic_PutInBottle(k, bottle_state_2C_Lumberjacks); //Pokemode static const uint16 kLumberJackMsg[4] = {0x12c, 0x12d, 0x12e, 0x12d}; Lumberjacks_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -12802,15 +13126,17 @@ void Lumberjacks_Draw(int k) { // 8dc6ba Sprite_DrawMultiple(k, &kLumberJacks_Dmd[sprite_graphics[k] * 11], 11, NULL); } -void Sprite_FortuneTeller(int k) { // 8dc762 +void Sprite_31_FortuneTeller(int k) { // 8dc762 switch (sprite_subtype2[k]) { case 0: // fortuneteller main + Generic_PutInBottle(k, bottle_state_31_FortuneTeller); //Pokemode FortuneTeller_Draw(k); if (Sprite_ReturnIfInactive(k)) return; FortuneTeller_LightOrDarkWorld(k, savegame_is_darkworld >> 6 & 1); break; - case 1: // dwarf solidity + case 1: // dwarf solidity //=Cannot-move trap (ycar) + Generic_PutInBottle(k, bottle_state_31_FortuneTeller); //Pokemode if (Sprite_ReturnIfInactive(k)) return; if (Sprite_CheckDamageToLink_same_layer(k)) { @@ -12886,7 +13212,8 @@ void Smithy_SpawnDumbBarrierSprite(int k) { // 8dcb2a sprite_ignore_projectile[j] = 1; } -void Sprite_MazeGameLady(int k) { // 8dcb5c +void Sprite_2F_MazeGameLady(int k) { // 8dcb5c + Generic_PutInBottle(k, bottle_state_2F_MazeGameLady); //Pokemode Lady_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -12923,7 +13250,8 @@ void Sprite_MazeGameLady(int k) { // 8dcb5c } } -void Sprite_MazeGameGuy(int k) { // 8dcbf2 +void Sprite_30_MazeGameGuy(int k) { // 8dcbf2 + Generic_PutInBottle(k, bottle_state_30_MazeGameGuy); //Pokemode int j; MazeGameGuy_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -13857,6 +14185,7 @@ void Overworld_DrawWoodenDoor(uint16 pos, bool unlocked) { // 9bc952 } void Sprite_D4_Landmine(int k) { // 9d8099 + Generic_PutInBottle(k, bottle_state_D4_Landmine); //Pokemode static const uint8 kLandMine_OamFlags[4] = {4, 2, 8, 2}; Landmine_Draw(k); @@ -13899,6 +14228,7 @@ void Landmine_Draw(int k) { // 9d810c } void Sprite_D3_Stal(int k) { // 9d8129 + Generic_PutInBottle(k, bottle_state_D3_Stal); //Pokemode static const uint8 kStal_Gfx[5] = {2, 2, 1, 0, 1}; if (byte_7E0FC6 < 3) { if (!sprite_ai_state[k]) @@ -13966,6 +14296,7 @@ void Stal_Draw(int k) { // 9d820c } void Sprite_D2_FloppingFish(int k) { // 9d8235 + Generic_PutInBottle(k, bottle_state_D2_FloppingFish); //Pokemode static const int8 kFish_Xvel[8] = {0, 12, 16, 12, 0, -12, -16, -12}; static const int8 kFish_Yvel[8] = {-16, -12, 0, 12, 16, 12, 0, -12}; static const uint8 kFish_Tab1[2] = {2, 0}; @@ -14117,6 +14448,7 @@ void ChimneySmoke_Draw(int k) { // 9d8531 } void Sprite_D1_BunnyBeam(int k) { // 9d858b + Generic_PutInBottle(k, bottle_state_D1_BunnyBeam); //Pokemode if (player_is_indoors) Sprite_BunnyBeam(k); else @@ -14207,6 +14539,7 @@ void Sprite_BunnyBeam(int k) { // 9d85e0 } void Sprite_D0_Lynel(int k) { // 9d866a + Generic_PutInBottle(k, bottle_state_D0_Lynel); //Pokemode static const int8 kLynel_AttackGfx[4] = {5, 2, 8, 10}; static const int8 kLynel_Gfx[8] = {3, 0, 6, 9, 4, 1, 7, 10}; Lynel_Draw(k); @@ -14597,6 +14930,7 @@ void Ganon_SpawnSpiralBat(int k) { // 9d8e7c } void Sprite_D6_Ganon(int k) { // 9d8eb4 + Generic_PutInBottle(k, bottle_state_D6_Ganon); //Pokemode int j; if (sign8(sprite_ai_state[k])) { @@ -15218,6 +15552,7 @@ void SpritePrep_Swamola_InitializeSegments(int k) { // 9d9c80 } void Sprite_CF_Swamola(int k) { // 9d9cb0 + Generic_PutInBottle(k, bottle_state_CF_Swamola); //Pokemode static const uint8 kSwamola_Target_Dir[8] = {1, 2, 3, 4, 5, 6, 7, 8}; static const int8 kSwamola_Target_X[9] = {0, 0, 32, 32, 32, 0, -32, -32, -32}; static const int8 kSwamola_Target_Y[9] = {0, -32, -32, 0, 32, 32, 32, 0, -32}; @@ -15372,7 +15707,7 @@ void Swamola_Draw(int k) { // 9d9f64 } void SpritePrep_Blind_PrepareBattle(int k) { // 9da081 - if (follower_indicator != 6 && dung_savegame_state_bits & 0x2000) { + if (follower_indicator != follower_indicator_BlindMaiden && dung_savegame_state_bits & 0x2000) { sprite_delay_aux2[k] = 96; sprite_C[k] = 1; sprite_D[k] = 2; @@ -15467,6 +15802,7 @@ void Blind_SpawnHead(int k) { // 9da1ed } void Sprite_CE_Blind(int k) { // 9da263 + Generic_PutInBottle(k, bottle_state_CE_Blind); //Pokemode if (sign8(sprite_A[k])) Sprite_BlindLaser(k); else if (sprite_A[k] == 2) @@ -16164,6 +16500,7 @@ void Sprite_Trinexx_CheckDamageToFlashingSegment(int k) { // 9db079 } void Sprite_CB_TrinexxRockHead(int k) { // 9db0ca + Generic_PutInBottle(k, bottle_state_CB_TrinexxRockHead); //Pokemode if (overlord_x_hi[0]) { Sprite_Trinexx_FinalPhase(k); return; @@ -16722,6 +17059,7 @@ int Garnish_FlameTrail(int k, bool is_low) { // 9dbde8 } void Sprite_CA_ChainChomp(int k) { // 9dbe7d + Generic_PutInBottle(k, bottle_state_CA_ChainChomp); //Pokemode ChainChomp_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -16868,6 +17206,7 @@ void ChainChomp_Draw(int k) { // 9dc192 } void Sprite_C9_Tektite(int k) { // 9dc275 + Generic_PutInBottle(k, bottle_state_C9_Tektite); //Pokemode int j = sprite_anim_clock[k]; if (j) { sprite_ignore_projectile[k] = j; @@ -16976,6 +17315,7 @@ void Tektite_Draw(int k) { // 9dc3f5 } void Sprite_C8_BigFairy(int k) { // 9dc414 + Generic_PutInBottle(k, bottle_state_C8_BigFairy); //Pokemode if (sprite_head_dir[k]) Sprite_FairyCloud(k); else @@ -17097,6 +17437,7 @@ void FaerieCloud_Draw(int k) { // 9dc616 } void Sprite_C7_Pokey(int k) { // 9dc64f + Generic_PutInBottle(k, bottle_state_C7_Pokey); //Pokemode if (sprite_C[k]) { SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) @@ -17183,6 +17524,7 @@ void Hokbok_Draw(int k) { // 9dc77d } void Sprite_C5_Medusa(int k) { // 9dc7eb + Generic_PutInBottle(k, bottle_state_C5_Medusa); //Pokemode PrepOamCoordsRet info; Sprite_PrepOamCoord(k, &info); if (!player_is_indoors) { @@ -17214,6 +17556,7 @@ void Sprite_C5_Medusa(int k) { // 9dc7eb } void Sprite_C6_4WayShooter(int k) { // 9dc869 + Generic_PutInBottle(k, bottle_state_C6_4WayShooter); //Pokemode static const int8 kFireballJunction_X[4] = {12, -12, 0, 0}; static const int8 kFireballJunction_Y[4] = {0, 0, 12, -12}; static const int8 kFireballJunction_XYvel[6] = {0, 0, 40, -40, 0, 0}; @@ -17239,6 +17582,7 @@ void Sprite_C6_4WayShooter(int k) { // 9dc869 } void Sprite_C4_Thief(int k) { // 9dc8d8 + Generic_PutInBottle(k, bottle_state_C4_Thief); //Pokemode int j; @@ -17445,6 +17789,7 @@ void Thief_Draw(int k) { // 9dcc9e } void Sprite_C3_Gibo(int k) { // 9dcce1 + Generic_PutInBottle(k, bottle_state_C3_Gibo); //Pokemode if (sprite_B[k]) { SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) @@ -17463,7 +17808,7 @@ void Sprite_C3_Gibo(int k) { // 9dcce1 sprite_anim_clock[k]++; int j = sprite_head_dir[k], i; if (sprite_state[j] == 6) { - sprite_state[k] = sprite_state[j]; + sprite_state[k] = sprite_state[j];//=6 sprite_delay_main[k] = sprite_delay_main[j]; sprite_flags2[k] += 4; return; @@ -17581,6 +17926,7 @@ void Gibo_Draw(int k) { // 9dcf5e } void Sprite_C2_Boulder(int k) { // 9dcfcb + Generic_PutInBottle(k, bottle_state_C2_Boulder); //Pokemode if (!player_is_indoors) { Boulder_OutdoorsMain(k); return; @@ -17675,6 +18021,7 @@ void CutsceneAgahnim_SpawnZeldaOnAltar(int k) { // 9dd1fd } void Sprite_C1_CutsceneAgahnim(int k) { // 9dd234 + Generic_PutInBottle(k, bottle_state_C1_CutsceneAgahnim); //Pokemode switch (sprite_A[k]) { case 0: CutsceneAgahnim_Agahnim(k); break; case 1: Sprite_CutsceneAgahnim_Zelda(k); break; @@ -18089,17 +18436,38 @@ void Vulture_Draw(int k) { // 9ddd5e } -void Sprite_Raven(int k) { // 9ddd85 +//Pokemode:will attack enemies before going back to you +void Friendly_Attacks_Enemies_BeeStyle(int k){ + Point16U pt2; + if (!PlayerBee_FindTarget(k, &pt2)) { + pt2.x = link_x_coord + (GetRandomNumber() & 3) * 5; + pt2.y = link_y_coord + (GetRandomNumber() & 3) * 5; + } + if ((k ^ frame_counter) & 7) + return; + ProjectSpeedRet pt = Sprite_ProjectSpeedTowardsLocation(k, pt2.x, pt2.y, 32); + sprite_x_vel[k] = pt.x; + sprite_y_vel[k] = pt.y; +} + +void FriendlyGuardAttack(int k, int j){ + +} + +void Sprite_00_Raven(int k) { // 9ddd85 static const uint8 kRaven_AscendTime[2] = {16, 248}; int j; bool fleeing = false; + Generic_PutInBottle(k, bottle_state_00_Raven); //Pokemode sprite_obj_prio[k] |= 0x30; SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) return; if (Sprite_ReturnIfRecoiling(k)) return; - Sprite_CheckDamageToAndFromLink(k); + if(sprite_ai_state[k]!=10){//Ycar + Sprite_CheckDamageToAndFromLink(k); + } Sprite_MoveXY(k); switch (sprite_ai_state[k]) { case 0: { // inwait @@ -18142,7 +18510,14 @@ void Sprite_Raven(int k) { // 9ddd85 sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | j * 0x40; break; case 3: // flee - fleeing = true; + fleeing = true;//comment this for Raven stays around + goto fly; + break; + + case 10: + //Sprite_BecomeFollower(k); //uncomment this to see Raven abducting follower + Sprite_SpawnSparkleGarnish(k); + Friendly_Attacks_Enemies_BeeStyle(k); goto fly; } } @@ -18175,6 +18550,7 @@ void Vitreous_SpawnSmallerEyes(int k) { // 9ddecb } void Sprite_C0_Catfish(int k) { // 9ddf49 + Generic_PutInBottle(k, bottle_state_C0_Catfish); //Pokemode if (sprite_A[k] & 0x80) Sprite_Catfish_SplashOfWater(k); else if (sprite_A[k] == 0) @@ -18425,6 +18801,7 @@ void Sprite_Catfish_SplashOfWater(int k) { // 9de37d } void Sprite_BF_Lightning(int k) { // 9de3ed + Generic_PutInBottle(k, bottle_state_BF_Lightning); //Pokemode static const uint8 kSpriteLightning_Gfx[8] = {0, 1, 2, 3, 0, 1, 2, 3}; static const uint8 kSpriteLightning_OamFlags[8] = {0, 0, 0, 0, 0x40, 0x40, 0x40, 0x40}; static const int8 kSpriteLightning_Xoff[64] = { @@ -18467,6 +18844,7 @@ void Lightning_SpawnGarnish(int k) { // 9de475 } void Sprite_BD_Vitreous(int k) { // 9de4c8 + Generic_PutInBottle(k, bottle_state_BD_Vitreous); //Pokemode if (sprite_delay_aux4[k]) sprite_graphics[k] = 3; Vitreous_Draw(k); @@ -18605,6 +18983,7 @@ void Vitreous_Draw(int k) { // 9de716 } void Sprite_BE_VitreousEye(int k) { // 9de773 + Generic_PutInBottle(k, bottle_state_BE_VitreousEye); //Pokemode static const int8 kSprite_Vitreolus_Dx[4] = {1, 0, -1, 0}; static const int8 kSprite_Vitreolus_Dy[4] = {0, 1, 0, -1}; int j = sprite_subtype2[k] >> 4 & 3; @@ -19038,7 +19417,7 @@ void TalkingTree_Mouth(int k) { // 9df956 if (!(Sprite_ShowSolicitedMessage(k, kTalkingTree_Msgs2[j]) & 0x100)) sprite_A[k] = 0; } else { - static const uint8 kTalkingTree_Msgs[4] = {0x7e, 0x7f, 0x80, 0x81}; + static const uint8 kTalkingTree_Msgs[4] = {0x7e, 0x7f, 0x80, 0x81}; //cf dialogue.txt static const uint8 kTalkingTree_Screens[4] = {0x58, 0x5d, 0x72, 0x6b}; j = FindInByteArray(kTalkingTree_Screens, BYTE(overworld_screen_index), 4); Sprite_ShowMessageUnconditional(kTalkingTree_Msgs[j]); @@ -19154,6 +19533,7 @@ void RupeePull_SpawnPrize(int k) { // 9dfbd7 } void Sprite_D5_DigGameGuy(int k) { // 9dfc38 + Generic_PutInBottle(k, bottle_state_D5_DigGameGuy); //Pokemode DiggingGameGuy_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -19163,7 +19543,7 @@ void Sprite_D5_DigGameGuy(int k) { // 9dfc38 switch(sprite_ai_state[k]) { case 0: // intro if ((uint8)(sprite_y_lo[k] + 7) < BYTE(link_y_coord) && Sprite_DirectionToFaceLink(k, NULL) == 2) { - if (follower_indicator == 0) { + if (follower_indicator == follower_indicator_noone) { if (Sprite_ShowSolicitedMessage(k, 0x187) & 0x100) sprite_ai_state[k]++; } else { @@ -19291,6 +19671,7 @@ void HelmasaurKing_Reinitialize(int k) { // 9e8019 } void Sprite_92_HelmasaurKing(int k) { // 9e8039 + Generic_PutInBottle(k, bottle_state_92_HelmasaurKing); //Pokemode int t, j; if (sign8(sprite_C[k])) { @@ -19482,7 +19863,7 @@ void HelmasaurKing_SwingTail(int k) { // 9e82a0 } void HelmasaurKing_CheckMaskDamageFromHammer(int k) { // 9e8385 - if (sprite_C[k] >= 3 || !(link_item_in_hand & 10) || (player_oam_y_offset == 0x80)) + if (sprite_C[k] >= 3 || !(link_item_in_hand & 10) || (player_oam_y_offset == 0x80)) //return if 0xa not in hand return; SpriteHitBox hb; Player_SetupActionHitBox(&hb); @@ -19791,6 +20172,7 @@ void Sprite_MadBatterBolt(int k) { // 9e8a96 } void Sprite_AA_Pikit(int k) { // 9e8bbf + Generic_PutInBottle(k, bottle_state_AA_Pikit); //Pokemode static const uint8 kPikit_Gfx[24] = { 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, @@ -19902,6 +20284,7 @@ void Sprite_AA_Pikit(int k) { // 9e8bbf } void Sprite_A8_GreenZirro(int k) { // 9e8dd2 + Generic_PutInBottle(k, bottle_state_A8_GreenZirro); //Pokemode static const uint8 kBomber_Gfx[4] = {9, 10, 8, 7}; sprite_obj_prio[k] = 0x30; @@ -20055,6 +20438,7 @@ void StalfosBone_Draw(int k) { // 9e9040 } void Sprite_A7_Stalfos(int k) { // 9e906c + Generic_PutInBottle(k, bottle_state_A7_Stalfos); //Pokemode if (sprite_A[k]) { Sprite_StalfosBone(k); return; @@ -20111,7 +20495,7 @@ void Stalfos_Skellington(int k) { // 9e90b5 } endif_1: if (sprite_z[k] == 0) { - Sprite_Zazak_Main(k); + Sprite_A5_Zazak_Main(k); return; } sprite_graphics[k] = kStalfos_AnimState2[sprite_D[k]]; @@ -20141,7 +20525,8 @@ void Stalfos_Skellington(int k) { // 9e90b5 } } -void Sprite_Zazak_Main(int k) { // 9e919f +void Sprite_A5_Zazak_Main(int k) { // 9e919f + Generic_PutInBottle(k, bottle_state_A5_Zazak); //Pokemode static const uint8 kStalfos_AnimState1[8] = {6, 4, 0, 2, 7, 5, 1, 3}; static const uint8 kStalfos_Delay[4] = {16, 32, 64, 32}; @@ -20303,6 +20688,7 @@ void FirePhlegm_Draw(int k) { // 9e9443 } void Sprite_A3_KholdstareShell(int k) { // 9e9460 + Generic_PutInBottle(k, bottle_state_A3_KholdstareShell); //Pokemode if (Sprite_ReturnIfPaused(k)) return; PointU8 pt; @@ -20347,6 +20733,7 @@ void GenerateIceball(int k) { // 9e94dd } void Sprite_A2_Kholdstare(int k) { // 9e9518 + Generic_PutInBottle(k, bottle_state_A2_Kholdstare); //Pokemode int j; Kholdstare_Draw(k); @@ -20460,6 +20847,7 @@ void Kholdstare_SpawnPuffCloudGarnish(int k) { // 9e96a5 } void Sprite_A4_FallingIce(int k) { // 9e9710 + Generic_PutInBottle(k, bottle_state_A4_FallingIce); //Pokemode if (!sprite_C[k]) { if (Sprite_ReturnIfInactive(k)) return; @@ -20529,6 +20917,7 @@ void IceBall_Split(int k) { // 9e97cf } void Sprite_A1_Freezor(int k) { // 9e981d + Generic_PutInBottle(k, bottle_state_A1_Freezor); //Pokemode Freezor_Draw(k); if (sprite_state[k] != 9) { sprite_ai_state[k] = 3; @@ -20602,6 +20991,7 @@ void Sprite_A1_Freezor(int k) { // 9e981d } void Sprite_9E_HauntedGroveOstritch(int k) { // 9e995b + Generic_PutInBottle(k, bottle_state_9E_HauntedGroveOstritch); //Pokemode static const uint8 kFluteBoyOstrich_Gfx[4] = {0, 1, 0, 2}; FluteBoyOstrich_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -20656,6 +21046,7 @@ void FluteBoyOstrich_Draw(int k) { // 9e9a4b } void Sprite_9F_HauntedGroveRabbit(int k) { // 9e9a6d + Generic_PutInBottle(k, bottle_state_9F_HauntedGroveRabbit); //Pokemode sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | kFluteBoyAnimal_OamFlags[sprite_D[k]]; SpriteDraw_SingleLarge(k); switch (sprite_ai_state[k]) { @@ -20686,6 +21077,7 @@ void Sprite_9F_HauntedGroveRabbit(int k) { // 9e9a6d } void Sprite_A0_HauntedGroveBird(int k) { // 9e9aec + Generic_PutInBottle(k, bottle_state_A0_HauntedGroveBird); //Pokemode if (sprite_graphics[k] == 3) HauntedGroveBird_Blink(k); sprite_oam_flags[k] = sprite_oam_flags[k] & ~0x40 | kFluteBoyAnimal_OamFlags[sprite_D[k]]; @@ -20739,6 +21131,7 @@ void HauntedGroveBird_Blink(int k) { // 9e9b9c } void Sprite_9C_Zoro(int k) { // 9e9bc8 + Generic_PutInBottle(k, bottle_state_9C_Zoro); //Pokemode if (sprite_E[k]) Zoro(k); else @@ -20829,6 +21222,7 @@ void Babasu(int k) { // 9e9c6b } void Sprite_9B_Wizzrobe(int k) { // 9e9d1b + Generic_PutInBottle(k, bottle_state_9B_Wizzrobe); //Pokemode int j; if (sprite_C[k]) { Sprite_Wizzbeam(k); @@ -20914,6 +21308,7 @@ void Wizzrobe_FireBeam(int k) { // 9e9e15 } void Sprite_9A_Kyameron(int k) { // 9e9e7b + Generic_PutInBottle(k, bottle_state_9A_Kyameron); //Pokemode PrepOamCoordsRet info; if (!sprite_ai_state[k]) Sprite_PrepOamCoord(k, &info); @@ -21050,6 +21445,7 @@ void Kyameron_Draw(int k) { // 9ea158 } void Sprite_99_Pengator(int k) { // 9ea196 + Generic_PutInBottle(k, bottle_state_99_Pengator); //Pokemode static const uint8 kPengator_Gfx[4] = {5, 0, 10, 15}; sprite_graphics[k] = sprite_A[k] + kPengator_Gfx[sprite_D[k]]; Pengator_Draw(k); @@ -21198,6 +21594,7 @@ void LaserBeam_BuildUpGarnish(int k) { // 9ea488 } void Sprite_95_LaserEyeLeft(int k) { // 9ea541 + Generic_PutInBottle(k, bottle_state_95_LaserEyeLeft); //Pokemode static const uint8 kLaserEye_Dirs[4] = {2, 3, 0, 1}; if (sprite_A[k]) { Sprite_LaserBeam(k); @@ -21289,6 +21686,7 @@ void LaserEye_Draw(int k) { // 9ea708 } void Sprite_94_Pirogusu(int k) { // 9ea742 + Generic_PutInBottle(k, bottle_state_94_Pirogusu); //Pokemode static const uint8 kPirogusu_A0[4] = {2, 3, 0, 1}; static const uint8 kPirogusu_A1[8] = {9, 11, 5, 7, 5, 11, 7, 9}; static const uint8 kPirogusu_A2[8] = {16, 17, 18, 19, 12, 13, 14, 15}; @@ -21400,6 +21798,7 @@ void Pirogusu_Draw(int k) { // 9ea93b } void Sprite_93_Bumper(int k) { // 9ea982 + Generic_PutInBottle(k, bottle_state_93_Bumper); //Pokemode static const int8 kBumper_Vels[4] = { 0, 2, -2, 0 }; Bumper_Draw(k); if (Sprite_ReturnIfInactive(k)) @@ -21447,6 +21846,7 @@ void Bumper_Draw(int k) { // 9eaa8b } void Sprite_91_StalfosKnight(int k) { // 9eaaa7 + Generic_PutInBottle(k, bottle_state_91_StalfosKnight); //Pokemode int j; if (!sprite_ai_state[k]) { PrepOamCoordsRet info; @@ -21664,6 +22064,7 @@ void SpriteDraw_StalfosKnight_Head(int k, PrepOamCoordsRet *info) { // 9eae4e } void Sprite_90_Wallmaster(int k) { // 9eaea4 + Generic_PutInBottle(k, bottle_state_90_Wallmaster); //Pokemode sprite_obj_prio[k] |= 0x30; WallMaster_Draw(k); if (sprite_state[k] != 9) { @@ -21744,6 +22145,7 @@ void WallMaster_Draw(int k) { // 9eafe4 } void Sprite_8F_Blob(int k) { // 9eb002 + Generic_PutInBottle(k, bottle_state_8F_Blob); //Pokemode if (sprite_state[k] == 9 && sprite_E[k]) { sprite_E[k] = 0; sprite_x_vel[k] = 1; @@ -21888,6 +22290,7 @@ void Zol_Draw(int k) { // 9eb1c5 } void Sprite_8E_Terrorpin(int k) { // 9eb26f + Generic_PutInBottle(k, bottle_state_8E_Terrorpin); //Pokemode int j; static const int8 kTerrorpin_Xvel[8] = {8, -8, 0, 0, 12, -12, 0, 0}; static const int8 kTerrorpin_Yvel[8] = {0, 0, 8, -8, 0, 0, 12, -12}; @@ -21957,7 +22360,7 @@ void Terrorpin_CheckForHammer(int k) { // 9eb3a3 if (!(sprite_z[k] | sprite_delay_aux2[k]) && sprite_floor[k] == link_is_on_lower_level && player_oam_y_offset != 0x80 && - link_item_in_hand & 0xa) { + link_item_in_hand & 0xa) { //if 0xa in hand SpriteHitBox hb; Player_SetupActionHitBox(&hb); Terrorpin_SetUpHammerHitBox(k, &hb); @@ -21985,6 +22388,7 @@ void Terrorpin_SetUpHammerHitBox(int k, SpriteHitBox *hb) { // 9eb405 } void Sprite_8C_Arrghus(int k) { // 9eb433 + Generic_PutInBottle(k, bottle_state_8C_Arrghus); //Pokemode static const uint8 kArrghus_Gfx[9] = {1, 1, 1, 2, 2, 1, 1, 0, 0}; sprite_obj_prio[k] |= 0x30; Arrghus_Draw(k); @@ -22191,6 +22595,7 @@ void Arrghus_HandlePuffs(int k) { // 9eb8b4 } void Sprite_8D_Arrghi(int k) { // 9eb8c4 + Generic_PutInBottle(k, bottle_state_8D_Arrghi); //Pokemode static const uint8 kArrgi_Gfx[8] = {0, 1, 2, 2, 2, 2, 2, 1}; sprite_obj_prio[k] |= 0x30; @@ -22241,6 +22646,7 @@ void Sprite_8D_Arrghi(int k) { // 9eb8c4 } void Sprite_8B_Gibdo(int k) { // 9eb9a9 + Generic_PutInBottle(k, bottle_state_8B_Gibdo); //Pokemode Gibdo_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -22320,6 +22726,7 @@ void Gibdo_Draw(int k) { // 9ebb20 } void Sprite_89_MothulaBeam(int k) { // 9ebb42 + Generic_PutInBottle(k, bottle_state_89_MothulaBeam); //Pokemode SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) return; @@ -22348,6 +22755,7 @@ void Sprite_89_MothulaBeam(int k) { // 9ebb42 } void Sprite_94_Tile(int k) { // 9ebbb9 + Generic_PutInBottle(k, bottle_state_94_Pirogusu); //Pokemode sprite_obj_prio[k] = 0x30; FlyingTile_Draw(k); if (Sprite_ReturnIfPaused(k)) @@ -22415,6 +22823,7 @@ void FlyingTile_Draw(int k) { // 9ebcca } void Sprite_8A_SpikeBlock(int k) { // 9ebce8 + Generic_PutInBottle(k, bottle_state_8A_SpikeBlock); //Pokemode if (!sprite_E[k]) { SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) @@ -22494,6 +22903,7 @@ bool SpikeBlock_CheckStatueCollision(int k) { // 9ebe19 } void Sprite_88_Mothula(int k) { // 9ebe7e + Generic_PutInBottle(k, bottle_state_88_Mothula); //Pokemode if (enhanced_features0 & kFeatures0_MiscBugFixes) { // L4 sword and L3 spin slash can now damage Mothula enemy_damage_data[0x884] = 1; @@ -22659,6 +23069,7 @@ void Mothula_HandleSpikes(int k) { // 9ec088 } void Sprite_86_Kodongo(int k) { // 9ec103 + Generic_PutInBottle(k, bottle_state_86_Kodongo); //Pokemode static const int8 kKodondo_Xvel[4] = {1, -1, 0, 0}; static const int8 kKodondo_Yvel[4] = {0, 0, 1, -1}; static const uint8 kKodondo_Gfx[8] = {2, 2, 0, 5, 3, 3, 0, 5}; @@ -22737,6 +23148,7 @@ void Kodongo_SpawnFire(int k) { // 9ec223 } void Sprite_87_KodongoFire(int k) { // 9ec274 + Generic_PutInBottle(k, bottle_state_87_KodongoFire); //Pokemode static const uint8 kFlame_OamFlags[4] = { 0, 0x40, 0xc0, 0x80 }; static const int8 kFlame_Gfx[32] = { 5, 4, 3, 1, 2, 0, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, @@ -22784,6 +23196,7 @@ void Flame_Draw(int k) { // 9ec35c } void Sprite_85_YellowStalfos(int k) { // 9ec37f + Generic_PutInBottle(k, bottle_state_85_YellowStalfos); //Pokemode static const int8 kYellowStalfos_ObjPrio[6] = {0x30, 0, 0, 0, 0x30, 0}; static const int8 kYellowStalfos_Gfx[32] = { 8, 5, 1, 1, 8, 5, 1, 1, 8, 5, 1, 1, 7, 4, 2, 2, @@ -22974,6 +23387,7 @@ void SpritePrep_Eyegore(int k) { // 9ec700 } void Sprite_83_GreenEyegore(int k) { // 9ec79b + Generic_PutInBottle(k, bottle_state_83_GreenEyegore); //Pokemode static const int8 kGoriya_Xvel[32] = { 0, 16, -16, 0, 0, 13, -13, 0, 0, 13, -13, 0, 0, 0, 0, 0, 0, -24, 24, 0, 0, -16, 16, 0, 0, -16, 16, 0, 0, 0, 0, 0, @@ -23179,6 +23593,7 @@ void SpritePrep_AntifairyCircle(int k) { // 9ecb0c } void Sprite_82_AntifairyCircle(int k) { // 9ecb97 + Generic_PutInBottle(k, bottle_state_82_AntifairyCircle); //Pokemode static const int8 kBubbleGroup_Vel[2] = {1, -1}; static const uint8 kBubbleGroup_VelTarget[2] = {18, (uint8)-18}; @@ -23203,6 +23618,7 @@ void Sprite_82_AntifairyCircle(int k) { // 9ecb97 } void Sprite_81_Hover(int k) { // 9ecc02 + Generic_PutInBottle(k, bottle_state_81_Hover); //Pokemode static const int8 kHover_OamFlags[4] = {0x40, 0, 0x40, 0}; sprite_obj_prio[k] |= 48; SpriteDraw_SingleLarge(k); @@ -23252,6 +23668,7 @@ void Sprite_81_Hover(int k) { // 9ecc02 } void Sprite_AB_CrystalMaiden(int k) { // 9ece03 + Generic_PutInBottle(k, bottle_state_AB_CrystalMaiden); //Pokemode cur_sprite_x -= dung_floor_x_offs; cur_sprite_y -= dung_floor_y_offs; @@ -23337,6 +23754,7 @@ void CrystalMaiden_RunCutscene(int k) { // 9ece39 } void Sprite_7D_BigSpike(int k) { // 9ecf47 + Generic_PutInBottle(k, bottle_state_7D_BigSpike); //Pokemode static const int8 kSpikeTrap_Xvel[4] = {32, -32, 0, 0}; static const int8 kSpikeTrap_Xvel2[4] = {-16, 16, 0, 0}; static const int8 kSpikeTrap_Yvel[4] = {0, 0, 32, -32}; @@ -23386,6 +23804,7 @@ void SpikeTrap_Draw(int k) { // 9ecfff } void Sprite_7E_Firebar_Clockwise(int k) { // 9ed01a + Generic_PutInBottle(k, bottle_state_7E_Firebar_Clockwise); //Pokemode static const int8 kGuruguruBar_incr[4] = {-2, 2, -1, 1}; Firebar_Main(k); if (Sprite_ReturnIfInactive(k)) @@ -23429,6 +23848,7 @@ void Firebar_Main(int k) { // 9ed049 } void Sprite_80_Firesnake(int k) { // 9ed1d1 + Generic_PutInBottle(k, bottle_state_80_Firesnake); //Pokemode static const uint8 kWinder_OamFlags[4] = {0, 0x40, 0x80, 0xc0}; static const int8 kWinder_Xvel[4] = {24, -24, 0, 0}; static const int8 kWinder_Yvel[4] = {0, 0, 24, -24}; @@ -23472,6 +23892,7 @@ void Firesnake_SpawnFireball(int j) { // 9ed239 } void Sprite_7C_GreenStalfos(int k) { // 9ed299 + Generic_PutInBottle(k, bottle_state_7C_GreenStalfos); //Pokemode static const uint8 kGreenStalfos_Dir[4] = {4, 6, 0, 2}; static const uint8 kGreenStalfos_OamFlags[4] = {0x40, 0, 0, 0}; static const uint8 kGreenStalfos_Gfx[4] = {0, 0, 1, 2}; @@ -23508,6 +23929,7 @@ void Sprite_7C_GreenStalfos(int k) { // 9ed299 } void Sprite_7A_Agahnim(int k) { // 9ed330 + Generic_PutInBottle(k, bottle_state_7A_Agahnim); //Pokemode int j; uint8 t; static const uint8 kAgahnim_StartState[2] = {1, 6}; @@ -23834,6 +24256,7 @@ void Agahnim_Draw(int k) { // 9ed978 } void Sprite_7B_AgahnimBalls(int k) { // 9eda42 + Generic_PutInBottle(k, bottle_state_7B_AgahnimBalls); //Pokemode if (sprite_B[k]) { if (sprite_delay_main[k]) Sprite_ApplySpeedTowardsLink(k, 32); @@ -23998,28 +24421,94 @@ void InitializeSpawnedBee(int k) { // 9edc9b } int ReleaseBeeFromBottle(int x_value) { // 9edccf - static const int8 kSpawnBee_XY[8] = {8, 2, -2, -8, 10, 5, -5, -10}; - SpriteSpawnInfo info; - int j = Sprite_SpawnDynamically(x_value, 0xb2, &info); + SpriteSpawnInfo info; + int j; + int idxInsideBottle = link_bottle_info[link_item_bottle_index - 1]; + + if (enhanced_features0 & kFeatures0_Pokemode){ //Pokemode + uint8 sprite_id = 0xb2; //PlayerBee by default + if(idxInsideBottle >= 243) //after #0xF2 = 243, particular cases!! + { + switch(idxInsideBottle){ + case bottle_state_00_Raven: sprite_id = 0x00; break; + case bottle_state_01_Vulture_bounce: sprite_id = 0x01; break; + case bottle_state_02_StalfosHead: sprite_id = 0x02; break; + case bottle_state_NULL: sprite_id = 0x03; break; + case bottle_state_04_PullSwitch_bounce: sprite_id = 0x04; break; + case bottle_state_05_PullSwitch_bounce: sprite_id = 0x05; break; + case bottle_state_06_PullSwitch_bounce: sprite_id = 0x06; break; + case bottle_state_07_PullSwitch_bounce: sprite_id = 0x07; break; + case bottle_state_08_Octorok: sprite_id = 0x08; break; + } + }else if(idxInsideBottle >= 9) //below 9, bottle_state_[...] are native + { + sprite_id = idxInsideBottle; + }else{ + sprite_id = 0xb2; //PlayerBee + } + j = Sprite_SpawnDynamically(x_value, sprite_id, &info); + if (sprite_id == 0xb2){ //if bee + InitializeSpawnedBee(j); // sprite_ai_state[k] is set to 1 inside +other stuff + } + else if(sprite_id == 0x00) //Raven + { + sprite_ai_state[j] = 10; //Friendly state + } + else if(sprite_id == 0x41) //Guard + { + sprite_ai_state[j] = 10; //Friendly state + } + else if (sprite_id == 0x76)//Zelda + { + sprite_ai_state[j] = 10;// cf Zelda_InCell()=> TransitionToTagalong + } + else if(sprite_id == 0xb5) //Bombshop + { + sprite_subtype2[j] = 2; //1=Clerk, 2=Bomb, 3=SuperBomb, 3=Huff + } + + }else{ + j = Sprite_SpawnDynamically(x_value, 0xb2, &info); //bee + } + if (j >= 0) { - sprite_floor[j] = link_is_on_lower_level; - Sprite_SetX(j, link_x_coord + 8); - Sprite_SetY(j, link_y_coord + 16); - if (link_bottle_info[link_item_bottle_index - 1] == 8) - sprite_head_dir[j] = 1; - InitializeSpawnedBee(j); - sprite_x_vel[j] = kSpawnBee_XY[GetRandomNumber() & 7]; - sprite_y_vel[j] = kSpawnBee_XY[GetRandomNumber() & 7]; - sprite_delay_main[j] = 64; - sprite_A[j] = 64; + + + if (enhanced_features0 & kFeatures0_Pokemode){ //Pokemode + sprite_floor[j] = link_is_on_lower_level; + Sprite_SetX(j, link_x_coord + 16);//8); + Sprite_SetY(j, link_y_coord + 16); + if (idxInsideBottle == bottle_state_goodbee){ + sprite_head_dir[j] = 1; // make bee face South?? + } + sprite_x_vel[j] = 0;// + sprite_y_vel[j] = 0;// + sprite_delay_main[j] = 64; + sprite_graphics[j] = 0; + + + }else{ + static const int8 kSpawnBee_XY[8] = {8, 2, -2, -8, 10, 5, -5, -10}; + sprite_floor[j] = link_is_on_lower_level; + Sprite_SetX(j, link_x_coord + 8); + Sprite_SetY(j, link_y_coord + 16); + if (idxInsideBottle == bottle_state_goodbee){ + sprite_head_dir[j] = 1; //(Ycar) make bee face South?? + } + sprite_x_vel[j] = kSpawnBee_XY[GetRandomNumber() & 7]; + sprite_y_vel[j] = kSpawnBee_XY[GetRandomNumber() & 7]; + sprite_delay_main[j] = 64; + sprite_A[j] = 64; + } + } return j; } void Bee_Main(int k) { // 9edd45 Bee_HandleZ(k); - SpriteDraw_SingleSmall(k); + SpriteDraw_SingleSmall(k); // bee main Bee_HandleInteractions(k); if (Sprite_ReturnIfInactive(k)) return; @@ -24032,7 +24521,7 @@ void Bee_Main(int k) { // 9edd45 sprite_graphics[k] = (k ^ frame_counter) >> 1 & 1; if (!sprite_delay_aux4[k]) { Sprite_CheckDamageToLink(k); - if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Ne) { + if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Net) { Sprite_ShowMessageUnconditional(0xc8); sprite_ai_state[k] = 2; // put in bottle return; @@ -24055,7 +24544,7 @@ void Bee_Main(int k) { // 9edd45 int Sprite_Find_EmptyBottle() { // 9ede2e for (int i = 0; i != 4; i++) - if (link_bottle_info[i] == 2) + if (link_bottle_info[i] == bottle_state_empty) return i; return -1; } @@ -24066,6 +24555,7 @@ void Bee_HandleInteractions(int k) { // 9ede44 } void Sprite_B2_PlayerBee(int k) { // 9ede63 + Generic_PutInBottle(k, bottle_state_B2_PlayerBee); //Pokemode static const uint8 kGoodBee_Tab0[2] = {0xa, 0x14}; switch (sprite_ai_state[k]) { @@ -24073,7 +24563,7 @@ void Sprite_B2_PlayerBee(int k) { // 9ede63 if (!sprite_E[k]) { sprite_state[k] = 0; uint8 or_bottle = link_bottle_info[0] | link_bottle_info[1] | link_bottle_info[2] | link_bottle_info[3]; - if (!(or_bottle & 8)) + if (!(or_bottle & bottle_state_goodbee)) GoldBee_SpawnSelf(k); } break; @@ -24084,7 +24574,7 @@ void Sprite_B2_PlayerBee(int k) { // 9ede63 Bee_HandleInteractions(k); if (Sprite_ReturnIfInactive(k)) return; - Bee_Bzzt(k); + Bee_Bzzt(k); //bee bzzt sound Sprite_MoveXY(k); sprite_graphics[k] = (k ^ frame_counter) >> 1 & 1; if (sprite_head_dir[k]) @@ -24095,9 +24585,9 @@ void Sprite_B2_PlayerBee(int k) { // 9ede63 } if (sprite_delay_aux4[k]) return; - if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Ne) { + if (Sprite_CheckDamageFromLink(k) & kCheckDamageFromPlayer_Net) { Sprite_ShowMessageUnconditional(0xc8); - sprite_ai_state[k]++; + sprite_ai_state[k]++; //will be put in bottle return; } if ((k ^ frame_counter) & 3) @@ -24155,7 +24645,7 @@ bool PlayerBee_FindTarget(int k, Point16U *pt) { // 9edfab if (!sprite_head_dir[k] || !(sprite_bump_damage[j] & 0x40)) continue; } - PlayerBee_HoneInOnTarget(j, k); + PlayerBee_HoneInOnTarget(j, k); // bee hurts stuff here pt->x = Sprite_GetX(j) + (GetRandomNumber() & 3) * 5; pt->y = Sprite_GetY(j) + (GetRandomNumber() & 3) * 5; return true; @@ -24165,10 +24655,11 @@ bool PlayerBee_FindTarget(int k, Point16U *pt) { // 9edfab void Bee_Bzzt(int k) { // 9ee02e if (!((k ^ frame_counter) & 31)) - SpriteSfx_QueueSfx3WithPan(k, 0x2c); + SpriteSfx_QueueSfx3WithPan(k, 0x2c);//plays the bzzz sound } void Sprite_B3_PedestalPlaque(int k) { // 9ee044 + Generic_PutInBottle(k, bottle_state_B3_PedestalPlaque); //Pokemode PrepOamCoordsRet info; Sprite_PrepOamCoord(k, &info); if (Sprite_ReturnIfInactive(k)) @@ -24210,15 +24701,16 @@ void Sprite_B3_PedestalPlaque(int k) { // 9ee044 } void Sprite_B4_PurpleChest(int k) { // 9ee0dd + Generic_PutInBottle(k, bottle_state_B4_PurpleChest); //Pokemode SpriteDraw_SingleLarge(k); if (Sprite_ReturnIfInactive(k)) return; if (!sprite_ai_state[k]) { - if (Sprite_ShowMessageOnContact(k, 0x116) & 0x100 && follower_indicator == 0) + if (Sprite_ShowMessageOnContact(k, 0x116) & 0x100 && follower_indicator == follower_indicator_noone) sprite_ai_state[k] = 1; } else { sprite_state[k] = 0; - follower_indicator = 12; + follower_indicator = follower_indicator_PurpleChess; LoadFollowerGraphics(); Sprite_BecomeFollower(k); } @@ -24226,10 +24718,18 @@ void Sprite_B4_PurpleChest(int k) { // 9ee0dd void Sprite_B5_BombShop(int k) { // 9ee111 switch (sprite_subtype2[k]) { - case 0: Sprite_BombShop_Clerk(k); break; - case 1: Sprite_BombShop_Bomb(k); break; - case 2: Sprite_BombShop_SuperBomb(k); break; - case 3: Sprite_BombShop_Huff(k); break; + case 0: { + Generic_PutInBottle(k, bottle_state_B5_BombShop); //Pokemode + Sprite_BombShop_Clerk(k); break;} + case 1: { + Generic_PutInBottle(k, bottle_state_B5_BombShop); //Pokemode + Sprite_BombShop_Bomb(k); break;} + case 2: { + Generic_PutInBottle(k, bottle_state_B5_BombShop); //Pokemode + Sprite_BombShop_SuperBomb(k); break;} + case 3: { + Generic_PutInBottle(k, bottle_state_B5_BombShop); //Pokemode + Sprite_BombShop_Huff(k); break;} } } @@ -24292,7 +24792,7 @@ void Sprite_BombShop_SuperBomb(int k) { // 9ee1df Sprite_ShowMessageUnconditional(0x17c); ShopItem_PlayBeep(k); } else { - follower_indicator = 13; + follower_indicator = follower_indicator_BigBomb; LoadFollowerGraphics(); Sprite_BecomeFollower(k); sprite_state[k] = 0; @@ -24347,6 +24847,7 @@ void BombShopEntity_Draw(int k) { // 9ee2c6 } void Sprite_B6_Kiki(int k) { // 9ee2ef + Generic_PutInBottle(k, bottle_state_B6_Kiki); //Pokemode switch(sprite_subtype2[k]) { case 0: Kiki_LyingInwait(k); break; case 1: Kiki_OfferEntranceService(k); break; @@ -24407,7 +24908,7 @@ void Kiki_OfferInitialService(int k) { // 9ee3af } else { Sprite_ShowMessageUnconditional(0x120); tagalong_event_flags &= ~3; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; sprite_ai_state[k]++; flag_is_link_immobilized++; } @@ -24611,17 +25112,18 @@ bool Kiki_Draw(int k) { // 9ee859 } void Sprite_B7_BlindMaiden(int k) { // 9ee8b6 + Generic_PutInBottle(k, bottle_state_B7_BlindMaiden); //Pokemode CrystalMaiden_Draw(k); if (Sprite_ReturnIfInactive(k)) return; Sprite_TrackBodyToHead(k); sprite_head_dir[k] = Sprite_DirectionToFaceLink(k, NULL) ^ 3; if (!sprite_ai_state[k]) { - if (Sprite_ShowMessageOnContact(k, 0x122) & 0x100) + if (Sprite_ShowMessageOnContact(k, 0x122) & 0x100) //291: Ohh, thank you very much![2]You saved my life. Please take[3]me outside. sprite_ai_state[k] = 1; } else { sprite_state[k] = 0; - follower_indicator = 6; + follower_indicator = follower_indicator_BlindMaiden; LoadFollowerGraphics(); Sprite_BecomeFollower(k); } @@ -24637,7 +25139,7 @@ void OldMan_RevertToSprite(int k) { // 9ee938 sprite_ignore_projectile[j] = 1; sprite_subtype2[j] = 1; OldMan_EnableCutscene(); - follower_indicator = 0; + follower_indicator = follower_indicator_noone; link_speed_setting = 0; } @@ -24647,6 +25149,7 @@ void OldMan_EnableCutscene() { // 9ee989 } void Sprite_AD_OldMan(int k) { // 9ee992 + Generic_PutInBottle(k, bottle_state_AD_OldMan); //Pokemode static const uint16 kOldMountainManMsgs[3] = {0x9e, 0x9f, 0xa0}; int j; OldMountainMan_Draw(k); @@ -24665,7 +25168,7 @@ void Sprite_AD_OldMan(int k) { // 9ee992 } break; case 1: // switch to tagalong - follower_indicator = 4; + follower_indicator = follower_indicator_OldMan; Sprite_BecomeFollower(k); which_starting_point = 5; sprite_state[k] = 0; @@ -24679,7 +25182,7 @@ void Sprite_AD_OldMan(int k) { // 9ee992 case 0: // grant mirror sprite_ai_state[k]++; item_receipt_method = 0; - Link_ReceiveItem(0x1a, 0); + Link_ReceiveItem(receiveitem_index_mirror, 0); which_starting_point = 1; OldMan_EnableCutscene(); sprite_delay_main[k] = 48; @@ -24733,10 +25236,12 @@ void Sprite_AD_OldMan(int k) { // 9ee992 } void Sprite_B8_DialogueTester(int k) { // 9eeae7 + Generic_PutInBottle(k, bottle_state_B8_DialogueTester); //Pokemode assert(0); } void Sprite_B9_BullyAndPinkBall(int k) { // 9eeb33 + Generic_PutInBottle(k, bottle_state_B9_BullyAndPinkBall); //Pokemode switch(sprite_subtype2[k]) { case 0: Sprite_PinkBall(k); return; case 1: PinkBall_Distress(k); return; @@ -24935,6 +25440,7 @@ void Bully_HandleMessage(int k) { // 9eee25 } void Sprite_BA_Whirlpool(int k) { // 9eee5a + Generic_PutInBottle(k, bottle_state_BA_Whirlpool); //Pokemode static const uint8 kWhirlpool_OamFlags[4] = {0, 0x40, 0xc0, 0x80}; if (BYTE(overworld_screen_index) == 0x1b) { @@ -24972,6 +25478,7 @@ void Sprite_BA_Whirlpool(int k) { // 9eee5a } void Sprite_BB_Shopkeeper(int k) { // 9eeeef + Generic_PutInBottle(k, bottle_state_BB_Shopkeeper); //Pokemode switch (sprite_subtype2[k]) { case 0: Shopkeeper_StandardClerk(k); break; case 1: ChestGameGuy(k); break; @@ -25372,6 +25879,7 @@ void SpriteDraw_ShopItem(int k) { // 9ef4ce } void Sprite_AC_Apple(int k) { // 9ef515 + Generic_PutInBottle(k, bottle_state_AC_Apple); //Pokemode if (sprite_ai_state[k]) { Sprite_Apple(k); return; @@ -25435,6 +25943,7 @@ void Sprite_Apple(int k) { // 9ef57c } void Sprite_BC_Drunkard(int k) { // 9ef603 + Generic_PutInBottle(k, bottle_state_BC_Drunkard); //Pokemode DrinkingGuy_Draw(k); if (Sprite_ReturnIfInactive(k)) return; @@ -25466,6 +25975,7 @@ void SomariaPlatform_LocatePath(int k) { // 9ef640 } void Sprite_ED_SomariaPlatform(int k) { // 9ef6d4 + Generic_PutInBottle(k, bottle_state_ED_SomariaPlatform); //Pokemode (be careful wher you place that one!! => bug) switch(sprite_graphics[k]) { case 0: { SomariaPlatform_LocatePath(k); @@ -25726,6 +26236,7 @@ void SomariaPlatform_DragLink(int k) { // 9efb49 } void Sprite_AE_Pipe_Down(int k) { // 9efb7e + Generic_PutInBottle(k, bottle_state_AE_Pipe_Down); //Pokemode static const uint8 kPipe_Dirs[4] = {8, 4, 2, 1}; uint8 t; diff --git a/app/jni/src/src/sprite_main.h b/app/jni/src/src/sprite_main.h index 89608e5..bb08191 100644 --- a/app/jni/src/src/sprite_main.h +++ b/app/jni/src/src/sprite_main.h @@ -25,6 +25,8 @@ void Sprite_GoodOrBadArcheryTarget(int k); void ChainBallTrooper_Draw(int k); void Sprite_6B_CannonTrooper(int k); void Bee_PutInBottle(int k); +void Generic_PutInBottle(int k, int bottle_state); +void Follower_PutInBottle(int bottle_state); void Sprite_Wizzbeam(int k); void Kiki_LyingInwait(int k); int ChainChomp_OneMult(uint8 a, uint8 b); @@ -128,12 +130,14 @@ void BombTrooper_Draw(int k); void SpriteDraw_BombGuard_Arm(int k, PrepOamCoordsRet *info); void SpriteDraw_SpriteBombExplosion(int k); void Sprite_41_BlueGuard(int k); +int FindTargetNearby(int k); void Probe(int k); void Guard_Main(int k); void Guard_SetGlanceTo12(int k); void Guard_ShootProbeAndStuff(int k); void Guard_TickAndUpdateBody(int k); void Guard_SetTimerAndAssertTileHitBox(int k, uint8 a); +void Soldier_Func12Target(int k, int j); void Soldier_Func12(int k); void Guard_ApplySpeedInDirection(int k); void Sprite_Guard_SendOutProbe(int k); @@ -178,21 +182,21 @@ void Priest_Chillin(int k); void Sprite_Uncle(int k); void Uncle_AtHouse(int k); void Uncle_InPassage(int k); -void Sprite_QuarrelBros(int k); +void Sprite_32_QuarrelBros(int k); void QuarrelBros_Draw(int k); -void Sprite_YoungSnitchLady(int k); +void Sprite_34_YoungSnitchLady(int k); void YoungSnitchLady_Draw(int k); -void Sprite_InnKeeper(int k); +void Sprite_35_InnKeeper(int k); void InnKeeper_Draw(int k); -void Sprite_Witch(int k); +void Sprite_36_Witch(int k); void Witch_AcceptShroom(int k); void Witch_Draw(int k); void SpritePrep_Snitches(int k); -void Sprite_OldSnitchLady(int k); +void Sprite_3D_OldSnitchLady(int k); void SpritePrep_RunningMan(int k); -void Sprite_RunningMan(int k); +void Sprite_74_RunningMan(int k); void RunningMan_Draw(int k); -void Sprite_BottleVendor(int k); +void Sprite_75_BottleVendor(int k); uint8 BottleVendor_Draw(int k); void Priest_SpawnRescuedPrincess(); void Sprite_76_Zelda(int k); @@ -204,8 +208,8 @@ void Sprite_E7_Mushroom(int k); void Sprite_E8_FakeSword(int k); void FakeSword_Draw(int k); void SpritePrep_HeartContainer(int k); -void Sprite_HeartContainer(int k); -void Sprite_HeartPiece(int k); +void Sprite_EA_HeartContainer(int k); +void Sprite_EB_HeartPiece(int k); void HeartUpgrade_SetObtainedFlag(int k); void Sprite_Aginah(int k); void Sprite_Sahasrahla(int k); @@ -235,13 +239,13 @@ void RedPotionItem_Draw(int k); bool PotionCauldron_CheckBottles(); void Sprite_MagicShopAssistant_Main(int k); void Shopkeeper_Draw(int k); -void Sprite_DashItem(int k); +void Sprite_3B_DashItem(int k); void Sprite_BonkKey(int k); void Sprite_BookOfMudora(int k); void Sprite_LumberjackTree(int k); void DashTreeTop_Draw(int k); int LumberjackTree_SpawnLeaves(int k); -void Sprite_TroughBoy(int k); +void Sprite_3C_TroughBoy(int k); void TroughBoy_Draw(int k); void BottleMerchant_DetectFish(int k); void BottleMerchant_BuyFish(int k); @@ -524,23 +528,23 @@ void Freezor_Draw(int k); void Zazak_Draw(int k); void Stalfos_Draw(int k); bool Probe_CheckTileSolidity(int k); -void Sprite_HumanMulti_1(int k); +void Sprite_29_HumanMulti_1(int k); void Sprite_BlindsHutGuy(int k); void Sprite_ThiefHideoutGuy(int k); void Sprite_FluteDad(int k); void FluteBoyFather_Draw(int k); void BlindHideoutGuy_Draw(int k); -void Sprite_SweepingLady(int k); +void Sprite_2A_SweepingLady(int k); void SweepingLady_Draw(int k); -void Sprite_Lumberjacks(int k); +void Sprite_2C_Lumberjacks(int k); bool Lumberjack_CheckProximity(int k, int j); void Lumberjacks_Draw(int k); -void Sprite_FortuneTeller(int k); +void Sprite_31_FortuneTeller(int k); void FortuneTeller_PerformPseudoScience(int k); void FortuneTeller_Draw(int k); void Smithy_SpawnDumbBarrierSprite(int k); -void Sprite_MazeGameLady(int k); -void Sprite_MazeGameGuy(int k); +void Sprite_2F_MazeGameLady(int k); +void Sprite_30_MazeGameGuy(int k); void MazeGameGuy_Draw(int k); void CrystalMaiden_Draw(int k); void Priest_Draw(int k); @@ -710,7 +714,8 @@ void Sprite_ScheduleBossForDeath(int k); void Sprite_MakeBossExplosion(int k); void Sprite_MakeBossDeathExplosion_NoSound(int k); void Vulture_Draw(int k); -void Sprite_Raven(int k); +void Friendly_Attacks_Enemies_Bee_Style(int k);//Pokemode +void Sprite_00_Raven(int k); void Vitreous_SpawnSmallerEyes(int k); void Sprite_C0_Catfish(int k); void Sprite_Catfish_QuakeMedallion(int k); @@ -776,7 +781,7 @@ void Sprite_StalfosBone(int k); void StalfosBone_Draw(int k); void Sprite_A7_Stalfos(int k); void Stalfos_Skellington(int k); -void Sprite_Zazak_Main(int k); +void Sprite_A5_Zazak_Main(int k); int Sprite_SpawnFirePhlegm(int k); void Stalfos_ThrowBone(int k); void FirePhlegm_Draw(int k); diff --git a/app/jni/src/src/tagalong.c b/app/jni/src/src/tagalong.c index 5175a1d..37e084a 100644 --- a/app/jni/src/src/tagalong.c +++ b/app/jni/src/src/tagalong.c @@ -232,7 +232,7 @@ void Sprite_BecomeFollower(int k) { // 899f39 void Follower_Main() { // 899fc4 if (!follower_indicator) return; - if (follower_indicator == 0xe) { + if (follower_indicator == follower_indicator_HandleTrigger) { Follower_HandleTrigger(); return; } @@ -258,12 +258,12 @@ void Follower_NoTimedMessage() { // 89a02b return; } - if (follower_indicator == 12) { + if (follower_indicator == follower_indicator_PurpleChess) { if (link_auxiliary_state != 0) goto label_a; - } else if (follower_indicator == 13) { - if (link_auxiliary_state == 2 || player_near_pit_state == 2) + } else if (follower_indicator == follower_indicator_BigBomb) { + if (link_auxiliary_state == 2 || player_near_pit_state == 2) // about to drop the bomb? goto label_c; } else { goto label_a; @@ -275,7 +275,7 @@ void Follower_NoTimedMessage() { // 89a02b label_c: - if (follower_indicator == 13 && !player_is_indoors) { + if (follower_indicator == follower_indicator_BigBomb && !player_is_indoors) { if (link_player_handler_state == kPlayerState_Ether || link_player_handler_state == kPlayerState_Bombos || link_player_handler_state == kPlayerState_Quake) @@ -283,7 +283,7 @@ void Follower_NoTimedMessage() { // 89a02b super_bomb_indicator_unk2 = 3; super_bomb_indicator_unk1 = 0xbb; } - + // drop the bomb follower_dropped = 128; timer_tagalong_reacquire = 64; @@ -352,18 +352,18 @@ void Follower_BasicMover() { // 89a197 Follower_HandleTrigger(); - if (follower_indicator == 10 && link_auxiliary_state && countdown_for_blink) { + if (follower_indicator == follower_indicator_Kiki && link_auxiliary_state && countdown_for_blink) { int k = tagalong_var2 + 1 == 20 ? 0 : tagalong_var2 + 1; Kiki_SpawnHandler_B(k); - follower_indicator = 0; + follower_indicator = follower_indicator_noone; return; } - if (follower_indicator == 6 && dungeon_room_index == 0xac && (save_dung_info[101] & 0x100) && Follower_CheckBlindTrigger()) { + if (follower_indicator == follower_indicator_BlindMaiden && dungeon_room_index == 0xac && (save_dung_info[101] & 0x100) && Follower_CheckBlindTrigger()) { int k = tagalong_var2; uint16 x = tagalong_x_lo[k] | tagalong_x_hi[k] << 8; uint16 y = tagalong_y_lo[k] | tagalong_y_hi[k] << 8; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; Blind_SpawnFromMaiden(x, y); BYTE(dung_flag_trapdoors_down)++; BYTE(dung_cur_door_pos) = 0; @@ -415,17 +415,17 @@ void Follower_BasicMover() { // 89a197 void Follower_NotFollowing() { // 89a2b2 if (saved_tagalong_indoors != player_is_indoors) return; - if (!link_is_running && !Follower_CheckProximityToLink()) { + if (!link_is_running && !Follower_CheckProximityToLink()) { //( we get the bomb back when near it?) Follower_Initialize(); saved_tagalong_indoors = player_is_indoors; - if (follower_indicator == 13) { + if (follower_indicator == follower_indicator_BigBomb) { super_bomb_indicator_unk2 = 254; super_bomb_indicator_unk1 = 0; } follower_dropped = 0; Tagalong_Draw(); } else { - if (follower_indicator == 13 && !player_is_indoors && !super_bomb_indicator_unk2) { + if (follower_indicator == follower_indicator_BigBomb && !player_is_indoors && !super_bomb_indicator_unk2) { // Fixed so we wait a little bit if we can't spawn the ancilla if (AncillaAdd_SuperBombExplosion(0x3a, 0) >= 0) { follower_dropped = 0; @@ -437,7 +437,7 @@ void Follower_NotFollowing() { // 89a2b2 // Fixed this by clearing the follower indicator here, instead of in the ancilla // bomb code. if (enhanced_features0 & kFeatures0_MiscBugFixes) { - follower_indicator = 0; + follower_indicator = follower_indicator_noone; return; } } else { @@ -461,9 +461,9 @@ void Follower_OldMan() { // 89a318 Follower_HandleTrigger(); - if (follower_indicator == 0) { + if (follower_indicator == follower_indicator_noone) { return; - } else if (follower_indicator == 4) { + } else if (follower_indicator == follower_indicator_OldMan) { if ((int8)tagalong_z[tagalong_var2] > 0 && tagalong_var1 != tagalong_var2) { tagalong_var2 = (tagalong_var2 + 1 >= 20) ? 0 : tagalong_var2 + 1; Tagalong_Draw(); @@ -523,7 +523,7 @@ void Follower_OldManUnused() { // 89a41f void Follower_DoLayers() { // 89a450 oam_priority_value = kTagalongFlags[saved_tagalong_floor] << 8; - uint8 a = (follower_indicator == 12 || follower_indicator == 13) ? 2 : 1; + uint8 a = (follower_indicator == follower_indicator_PurpleChess || follower_indicator == follower_indicator_BigBomb) ? 2 : 1; Follower_AnimateMovement_preserved(a, saved_tagalong_x, saved_tagalong_y); } @@ -574,7 +574,7 @@ void Follower_HandleTrigger() { // 89a59e if (tmi->msg == 0x9d) { OldMan_RevertToSprite(st); } else if (tmi->msg == 0x28) { - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } Main_ShowTextMessage(); return; @@ -611,8 +611,7 @@ void Follower_AnimateMovement_preserved(uint8 ain, uint16 xin, uint16 yin) { // uint8 yt = 0, av = 0; uint8 sc = 0; - - if ((ain >> 2 & 8) && (follower_indicator == 6 || follower_indicator == 1)) { + if ((ain >> 2 & 8) && (follower_indicator == follower_indicator_BlindMaiden || follower_indicator == follower_indicator_Zelda)) { yt = 8; if (swimcoll_var7[0] | swimcoll_var7[1]) av = (frame_counter >> 1) & 4; @@ -620,9 +619,9 @@ void Follower_AnimateMovement_preserved(uint8 ain, uint16 xin, uint16 yin) { // av = (frame_counter >> 2) & 4; } else if (submodule_index == 8 || submodule_index == 14 || submodule_index == 16) { av = link_is_running ? (frame_counter & 4) : ((frame_counter >> 1) & 4); - } else if (follower_indicator == 11) { + } else if (follower_indicator == follower_indicator_11) { av = (frame_counter >> 1) & 4; - } else if ((follower_indicator == 12 || follower_indicator == 13) && follower_dropped || flag_is_link_immobilized || + } else if ((follower_indicator == follower_indicator_PurpleChess || follower_indicator == follower_indicator_BigBomb) && follower_dropped || flag_is_link_immobilized || submodule_index == 10 || main_module_index == 9 && submodule_index == 0x23 || main_module_index == 14 && (submodule_index == 1 || submodule_index == 2) || (link_y_vel | link_x_vel) == 0) { @@ -644,7 +643,7 @@ void Follower_AnimateMovement_preserved(uint8 ain, uint16 xin, uint16 yin) { // uint16 scrollx = xin - BG2HOFS_copy2; const uint8 *sk = kTagalongDraw_SprInfo0; - if (follower_indicator == 1 || follower_indicator == 6 || !(ain & 0x20)) { + if (follower_indicator == follower_indicator_Zelda || follower_indicator == follower_indicator_BlindMaiden || !(ain & 0x20)) { if (!(ain & 0xc0)) goto skip_first_sprites; if ((ain & 0x80) || (sk += 12, sc == 0)) @@ -665,7 +664,7 @@ void Follower_AnimateMovement_preserved(uint8 ain, uint16 xin, uint16 yin) { // if (pal == 7 && palette_swap_flag) pal = 0; - if (follower_indicator == 13) { + if (follower_indicator == follower_indicator_BigBomb) { // Display colorful superbomb palette also on frame 0. if (enhanced_features0 & kFeatures0_MiscBugFixes ? (super_bomb_indicator_unk2 <= 1) : (super_bomb_indicator_unk2 == 1)) pal = (frame_counter & 7); @@ -674,7 +673,7 @@ void Follower_AnimateMovement_preserved(uint8 ain, uint16 xin, uint16 yin) { // const TagalongSprXY *sprd = kTagalongDraw_SprXY + frame + (kTagalongDraw_Offs[follower_indicator] >> 3); const TagalongDmaFlags *sprf = kTagalongDmaAndFlags + frame; - if (follower_indicator != 12 && follower_indicator != 13) { + if (follower_indicator != follower_indicator_PurpleChess && follower_indicator != follower_indicator_BigBomb) { SetOam_Follower(oam, scrollx + sprd->x1, scrolly + sprd->y1, 0x20, (sprf->flags & 0xf0) | pal << 1 | (oam_priority_value >> 8), 2); oam++; @@ -698,8 +697,8 @@ bool Follower_CheckForTrigger(const TagalongMessageInfo *info) { // 89ac26 } void Follower_Disable() { // 89acf3 - if (follower_indicator == 9 || follower_indicator == 10) - follower_indicator = 0; + if (follower_indicator == follower_indicator_LockSmith || follower_indicator == follower_indicator_Kiki) + follower_indicator = follower_indicator_noone; } void Blind_SpawnFromMaiden(uint16 x, uint16 y) { // 9da03c @@ -720,7 +719,7 @@ void Blind_SpawnFromMaiden(uint16 x, uint16 y) { // 9da03c void Kiki_RevertToSprite(int k) { // 9ee66b int j = Kiki_SpawnHandlerMonke(k); sprite_subtype2[j] = 1; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } int Kiki_SpawnHandlerMonke(int k) { // 9ee67a @@ -751,6 +750,6 @@ void Kiki_SpawnHandler_B(int k) { // 9ee6d0 sprite_z[j] = 1; sprite_z_vel[j] = 16; sprite_subtype2[j] = 3; - follower_indicator = 0; + follower_indicator = follower_indicator_noone; } diff --git a/app/jni/src/src/variables.h b/app/jni/src/src/variables.h index 9f35442..1eddabb 100644 --- a/app/jni/src/src/variables.h +++ b/app/jni/src/src/variables.h @@ -275,8 +275,8 @@ #define link_picking_throw_state (*(uint8*)(g_ram+0x309)) #define some_animation_timer_steps (*(uint8*)(g_ram+0x30A)) #define some_animation_timer (*(uint8*)(g_ram+0x30B)) -#define link_var30d (*(uint8*)(g_ram+0x30D)) -#define link_var30e (*(uint8*)(g_ram+0x30E)) +#define link_var30d (*(uint8*)(g_ram+0x30D)) // animation step counter +#define link_var30e (*(uint8*)(g_ram+0x30E)) // is always 0 #define dung_floor_y_vel (*(uint16*)(g_ram+0x310)) #define dung_floor_x_vel (*(uint16*)(g_ram+0x312)) #define flag_is_sprite_to_pick_up (*(uint8*)(g_ram+0x314)) @@ -298,7 +298,7 @@ #define link_maybe_swim_faster (*(uint8*)(g_ram+0x32A)) #define swimcoll_var5 ((uint16*)(g_ram+0x32B)) #define swimcoll_var1 ((uint16*)(g_ram+0x32F)) -#define byte_7E0333 (*(uint8*)(g_ram+0x333)) +#define byte_7E0333 (*(uint8*)(g_ram+0x333)) // torch #define swimcoll_var9 ((uint16*)(g_ram+0x334)) #define swimcoll_var11 ((uint16*)(g_ram+0x338)) #define swimcoll_var7 ((uint16*)(g_ram+0x33C)) @@ -1527,4 +1527,4 @@ extern const int8 kGetBestActionToPerformOnTile_x[]; extern const int8 kGetBestActionToPerformOnTile_y[]; -#endif // ZELDA3_VARIABLES_H_ \ No newline at end of file +#endif // ZELDA3_VARIABLES_H_ diff --git a/app/src/main/assets/zelda3.ini b/app/src/main/assets/zelda3.ini index 15c4829..8fdd641 100644 --- a/app/src/main/assets/zelda3.ini +++ b/app/src/main/assets/zelda3.ini @@ -137,6 +137,12 @@ GameChangingBugFixes = 0 # Allow bird travel to be cancelled by hitting the X key CancelBirdTravel = 0 +# Capture sprites in bottles (experimental) +Pokemode = 1 + +# Zelda offers her help (experimental) +PrincessZeldaHelps = 0 + [KeyMap] # Change what keyboard keys map to the joypad diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index ad9bc9b7d432bd2561df535001a706cfd79175c8..814d1be3ac183e89bfe23312d9d45637f77a44a8 100644 GIT binary patch literal 47593 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⁡9DTOaX`5JeqqDW4CoT`{ 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
QR~fIf+-$hKGwW9vMq? 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%0A9qzl|v(9KoiMZ#JosF>4&q!#06gb2K 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 diff --git a/app/src/main/java/com/dishii/zelda3/MainActivity.java b/app/src/main/java/com/dishii/zelda3/MainActivity.java index a5a0686..43276b6 100644 --- a/app/src/main/java/com/dishii/zelda3/MainActivity.java +++ b/app/src/main/java/com/dishii/zelda3/MainActivity.java @@ -1,17 +1,36 @@ package com.dishii.zelda3; +import org.libsdl.app.SDL; import org.libsdl.app.SDLActivity; +import org.libsdl.app.SDLControllerManager; + +import android.graphics.Rect; import android.os.Bundle; import android.os.Environment; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.FileOutputStream; -import android.util.Log; + +import android.os.Handler; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.CorrectionInfo; +import android.view.inputmethod.ExtractedText; +import android.view.inputmethod.ExtractedTextRequest; +import android.view.inputmethod.InputConnection; +import android.view.inputmethod.InputContentInfo; +import android.widget.Toast; //This class is the main SDLActivity and just sets up a bunch of default files public class MainActivity extends SDLActivity { + public boolean dPad_isPressed = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -25,21 +44,15 @@ protected void onCreate(Bundle savedInstanceState) { // Create a file object for the config file File configFile = new File(externalDir, "zelda3.ini"); - File datNotice = new File(externalDir, "PLACE zelda3_assets.dat HERE"); - File saves_folder = new File(externalDir+ File.separator + "saves"); - File saves_ref_folder = new File(saves_folder + File.separator + "ref"); // Check if the folder doesn't exist, then create it saves_folder.mkdirs(); - saves_ref_folder.mkdirs(); - //copy reference saves and config to external data dir so user can change if needed. - try { AssetCopyUtil.copyAssetsToExternal(this, "saves/ref", getExternalFilesDir(null).getAbsolutePath() + "/saves/ref"); datNotice.createNewFile(); @@ -47,6 +60,7 @@ protected void onCreate(Bundle savedInstanceState) { InputStream inputStream; try { inputStream = getAssets().open("zelda3.ini"); // Replace with your actual asset file name + } catch (IOException e) { e.printStackTrace(); return; @@ -60,6 +74,212 @@ protected void onCreate(Bundle savedInstanceState) { } } + inflateOverlay(); //Ycar: To have some buttons onScreen ! + } + //Ycar: Add an overlay of buttons to the screen + public void inflateOverlay() { + LayoutInflater inflater = getLayoutInflater(); + View overlayView = inflater.inflate(R.layout.layout, null); + + // Add the overlay + ViewGroup rootView = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content); + rootView.addView(overlayView); + + // The following mapping needs to match the one in zelda3.ini + int keyCodeFor_START = KeyEvent.KEYCODE_N; + int keyCodeFor_SELECT = KeyEvent.KEYCODE_V; + int keyCodeFor_A = KeyEvent.KEYCODE_X; + int keyCodeFor_B = KeyEvent.KEYCODE_Z; + int keyCodeFor_X = KeyEvent.KEYCODE_S; + int keyCodeFor_Y = KeyEvent.KEYCODE_A; + int keyCodeFor_L = KeyEvent.KEYCODE_C; + int keyCodeFor_R = KeyEvent.KEYCODE_BACK; + int keyCodeFor_Up = KeyEvent.KEYCODE_Y; + int keyCodeFor_Down = KeyEvent.KEYCODE_H; + int keyCodeFor_Left = KeyEvent.KEYCODE_G; + int keyCodeFor_Right = KeyEvent.KEYCODE_J; + int keyCodeFor_Turbo = KeyEvent.KEYCODE_M; + + // Manage touch events from the keys + overlayView.findViewById(R.id.ButtonKeyboard).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + SDLActivity.showTextInput(10, -200, 30, 40); + } + }); + overlayView.findViewById(R.id.Button_start).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_START); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_START); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_select).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_SELECT); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_SELECT); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_A).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_A); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_A); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_B).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_B); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_B); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_X).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_X); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_X); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_Y).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_Y); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_Y); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_L).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_L); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_L); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_R).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_R); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_R); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_Turbo).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + + switch (motionEvent.getAction()) { + case MotionEvent.ACTION_DOWN: + onNativeKeyDown(keyCodeFor_Turbo); + return true; + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_Turbo); + return true; + } + return false; + } + }); + overlayView.findViewById(R.id.Button_Dpad).setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + switch(motionEvent.getAction()){ + case MotionEvent.ACTION_DOWN: + if (motionEvent.getX() > (view.getWidth()*0.67)) { + onNativeKeyDown(keyCodeFor_Right); + }else if (motionEvent.getX() < (view.getWidth()*0.33)) { + onNativeKeyDown(keyCodeFor_Left); + } + if (motionEvent.getY() > (view.getHeight()*0.67)) { + onNativeKeyDown(keyCodeFor_Down); + }else if (motionEvent.getY() < (view.getHeight()*0.33)) { + onNativeKeyDown(keyCodeFor_Up); + }else{ + } + return true; + + case MotionEvent.ACTION_UP: + onNativeKeyUp(keyCodeFor_Left); + onNativeKeyUp(keyCodeFor_Right); + onNativeKeyUp(keyCodeFor_Down); + onNativeKeyUp(keyCodeFor_Up); + return true; + + case MotionEvent.ACTION_MOVE: //Support sliding on the dpad + onNativeKeyUp(keyCodeFor_Left); + onNativeKeyUp(keyCodeFor_Right); + onNativeKeyUp(keyCodeFor_Down); + onNativeKeyUp(keyCodeFor_Up); + if (motionEvent.getX() > (view.getWidth()*0.67)) { + onNativeKeyDown(keyCodeFor_Right); + }else if (motionEvent.getX() < (view.getWidth()*0.33)) { + onNativeKeyDown(keyCodeFor_Left); + } + if (motionEvent.getY() > (view.getHeight()*0.67)) { + onNativeKeyDown(keyCodeFor_Down); + }else if (motionEvent.getY() < (view.getHeight()*0.33)) { + onNativeKeyDown(keyCodeFor_Up); + }else{ + } + return true; + } + return false; + } + }); } private void writeDataToFile(File file,InputStream inputStream) { diff --git a/app/src/main/java/org/libsdl/app/SDLActivity.java b/app/src/main/java/org/libsdl/app/SDLActivity.java index 79ddc4c..a9d9e8b 100644 --- a/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -33,6 +33,7 @@ import android.view.Gravity; import android.view.InputDevice; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.PointerIcon; import android.view.Surface; import android.view.View; @@ -50,6 +51,8 @@ import android.widget.TextView; import android.widget.Toast; +import com.dishii.zelda3.R; + import java.util.Hashtable; import java.util.Locale; @@ -1894,6 +1897,7 @@ public void run() { } // else: Activity is already being destroyed } + } /* This is a fake invisible editor view that receives the input and defines the diff --git a/app/src/main/java/org/libsdl/app/SDLControllerManager.java b/app/src/main/java/org/libsdl/app/SDLControllerManager.java index d6913f1..229406e 100644 --- a/app/src/main/java/org/libsdl/app/SDLControllerManager.java +++ b/app/src/main/java/org/libsdl/app/SDLControllerManager.java @@ -7,6 +7,7 @@ import android.content.Context; import android.os.Build; +import android.os.Bundle; import android.os.VibrationEffect; import android.os.Vibrator; import android.util.Log; @@ -14,6 +15,9 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; +import android.widget.Toast; + +import com.dishii.zelda3.R; public class SDLControllerManager diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 7353dbd..446d741 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 938c9faa36805c85e681babeb7b0d0ac2c5247dd..636404060b0d8d67d63993627dc9d01ab476c427 100644 GIT binary patch literal 5449 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 delta 1594 zcmb7^`#aMM0LHgQBQYYhigI0UNg&L3wDSSm%Maw9M9>kBghn9%>lgPnY*@STq|Ii^Z7*YC-GY zp6ai0(w$-Y&qNV_!D6w%VIjUMqajB=bSxsGespxyyXAcQ89*7us;jH3y16df__nC*Kg>M{e~o4Xz#8!HV;zC)J%MppZ8;&rM^OE&?1eSKqXmuKO_kK-uQQ@n=TRO+ET z6ZdzxT6|hsg^i63!p$w5zcz_T42_Ag`5YtQo>A2f3$eR_A z>|ru-YT{M#^MQNIUq8RkG1`ehA}a!^`_P4jg>63@G(LC`935>bS16{2wuz9JXN-rR zBmlnr`Y-_SxO4lquxBToPOqUrVeb|sZ;~VzL|Z%|5J(554|TDuxY!qkLUDP#x}Q!p z3=W2slOKfHszae#;BY&`<2c+z6@PH>%NI_qOvr`|r@-ByZ+r4gH9Kc*lwV3%ELU7- zI+Yma_G4-G1f9v0gfeNg>v<+y_`sTHut@@ea0G`t#JV_K)790r)l*+zKT)|vpf@(w zm6gF!Pg_(ei&Gm-IZaJXZ7!=x{p^h$O9Kpyj93kny|+Tt{frf0FgS5}4mVP-o+$qo z-IlUo1%-Xcf|-iRpgr#HRKA@t=HS7aZ{NOAr=^Z2s5HOG$jHR`F*HzCUjBYD$Xv4K z8R8%YWA5SMffDfu_hIMXRMtIuqw9Jm@G?(XguO-!IyRpT{_^gM=sn?fWKWAJ#Pa;jC!$U%BXyP?R8Yt-BT zc6N0w?CkW2_yWw62-<7ZK0!krEiJE&jgKdhu7Ipnk!d2YD9X8|GQl0nwy<`lk3^MqJDq;}QPG&Go&;Ii7D<0d^l zHdcqgnVFuhwZ$@|)^nqyY_OfZ{rp#-lFKD7F`fV@WAchiK)Bt)eJo<`{@KdPN-l@P z7D!bZrNSxM8G z|2{w7p$oAR8X6b`M@3m=(L`F>+I7#Ld#9Vki$o$RPjgvAQ*%^FCM&KU)vn!vKx6}y z?seD47!l!wmu_TK+V`&4LmPxbByy5Q+fi0oIkHGq4>FP1+u2Fa-VZnSFUfd$ljpZ9 zhm>oP>m@>?M9<=K&A2X}{3T9i1?1&5OR%QJ{{r~eEvo`KtpLu()%%i@H1c^d&NCVr z)*v_>9-pRmC@82Hu7V{6RU&Dbt4nuJU)g)qzm@hYb!IBVXvI>WS^xT6f>j49b!moN zM0s5e{17VC3*SuhnNUZAf_zKYt3vfkg;EJE?fEK95;UneT&|jD#KVUV^$c@>Xx*Js zX$|Z;F1#cx`N?X z4e3ZDIF%wlUcMAMoxt9SA9qI>cF7->&Hy1J2gt2@7OUsH$w3c*Joxwn T(@0Hp1g**+9q7&QI-T(ksILat diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 211af089d9d7067fdce330d1608792f438eb5dbc..c733d9b739c728de0393d66272c26b028478867d 100644 GIT binary patch literal 6213 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 a#J&JHdYV(Y_!sB^0000P)`tYSj-(1C~ky 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 M07*qoM6N<$g6=DC7XSbN delta 2115 zcmV-J2)y^c9?uYvBYy}MNkl9d#NLs?w2A5_;>)P`;2naZZd0G zB&HVI@xd^>5ZNa};5y@V?KNi#GzT*UDO-Ji^5jW!Ff5HCu~h>IOVQv>{yG&mD>nqg zC$+V;seoYCMdOUHFCGY6Pw;l3t;CkIs;jI2YS&=I^M4mMD*!(+`B&q4O->~(%|7V& z)z#HWMMcGLc5ER@bPY!SeQ6eKYotvmrfxbBsZ@Xc`t`5u7+qw~dsyw&0<1;VR%|d- zR#xT$n!;$uYLN*Ky#J#uby}j@yeRvbO28$ELYy6|9lWuuGrV8KiOpH(o65vOry>f) z>FMcj+J7+{1C&J%9z5XLhLcDxL2b#50@i|Dym)b%9dkfws;Q~T;NWn`eJ2}CWo2dm zwrf}m5&WYzh}*Ys_rjoRJ%MCRMr2sZ0vO@sZs}6QK0bf^__3@1-o1OQD6Tn%tE#G` zyu4iCNY^tT|A4SBRA*;r$7loETV)A=rs?!?Eq~m^#6(%Sa;0qEyjgL4e7sDVGDRtK zj=gs6n#`ItOENMt0{Rhp88c>#pN}3rQi}TZ>nEEwZQ@v$5_*2-%$c%#_wImxDjqRngm}GP z*MA&F=fsHq{@Mc6rx*r@Z;rAu1?**fBrA|5_`m}Lezg(GUJ&Cj^F zIGH|ux}|_o*tc(=tXZ>0d7nTT0b{_;n>W?-Lx&E@@ZrOi0dxkxA31VFedlgVCb$b1 zF39}(^Ia)u#|D`>z}!$uJswXNOyD)pWq*L3larH`_vtBqC)h=c7Rjkor)1f(Win~f zBxRT}fX`>oo-L)Nr7Hh9mw?x;TPIt$ZdJyQ9Xr-aMS`C^d9sWjKi<;eG=OQ2@uiCw zFYam?aQgJ=_u=VV&oUq{FHZ&!9xMkA9I*O|i;HE{s8N!Vk|G;7Zd82d&K=8uGk<5! zC@?Gn96xg8NM!&Dh7=SO$l=3>Wx|9Ba_iPD^_&rA3ehOL9;X5K@82)OT8y>~0JxqA z;k{4>AiZSRuwg2+rb4jq*s)^@AlvL?YS<0P%*>S0qerW%#OE}YxlZ7W0D&`V#sI^s zSFe^`yLN>%0D3AQ|1-+~DC!l;0DmrA0v|GDh@3rpmfN|Ml$5ANeDL5wW!QoR3uOQP z{VEcu(`peDAUq{~`}S3lA#k?0Z{IF6X3S6(hYpC1jTMi_quNX%I$-_!^-9jO4A`<| ziz=mx0OTWhmajfs22jw76)RMZ6V$eC+hoIr4XUi78VJ%)mMmGK`mSERs(-2!pV2_3 zN={CW@+eaxH8oX=ii#vRH&<4zT4k*VesZBNU%p(GU(O3w;fw)TXSdg`UE9+#VD8+x zUE%5HF5WbGofUF@DC&UPy4gM`9GTdd zT3Cz!05jjOb}&bY2$Z}yJ%5l#3DC&Zxh}q-us0f(jbQi4tV|sAd9;Z>oGJ*9io&Ha;n{{yf`0-zK`3kEv z0wzB&`guOuyLT_shwn}s&O)NEX9EWg{1723)|0~SN{Q-I(!YQIXn#9qyAibLHSCD< zcrxUI@r6ee?B4&A7z4a-$YxR0jT<-eI5`~Ff-U#+f$akV#Qh}rYesEZM{M)saDuF5 z*xE9ckO}pyJUEKiE?l^90FMc7tho$dTWoH+Z2Ec9-Lq%UQeq04 zI!?l%2%OOwqV70Brho8K0&0~v(}p#8A06oNc+!Z4n261ZHz?`#z)d==Zdj1n) z@Nma{8PXGJL^SgddqfSD$?U z!*{r|<}n(qP&PxL`-S!l^NXeePFa*$SXh`hXU?4Osf#*aIBh}^lte%njo_PrK09{o zNW^Wd*xZE;(FzSLB$I68Rk~0XuA_?}`*Z4`F6sKz+HD$jWl<(&Kex^|mFO9*q!ajE@TU_ePW%?f z@jq}FOhX!Yd1k@2?a74^l?p+mnOH*VZFWVYGIXL=0Ba*n!HQ9RaDsck@v2rI?8bLY6|xK2!T t`2P=YXl9#ztmn+{NY3Hh21zeR{{z)oyA~eqE8PG9002ovPDHLkV1n_24h8@K diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 24c93568e61279e737c773e110773a15e3b1bdee..1f039440be28cf58716b6b8301dccc41eca6782c 100644 GIT binary patch literal 9476 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 ZKB%O!FVWr_QOG}h05%p_^9oaZ{J$pCTi5^q diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 4568e89f753ce8461e61e7e3549b10fd70f4e2f9..a9b0428c4269b9be5556c4ea6f4d650c105548c3 100644 GIT binary patch literal 11644 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

CYY}v|iWsGv3 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 441cc0c8e37eb56cec95b7a74b4d6ea1fbb6f5dc..8ddac49e7f39e6d554440e4e2d917635e6563cd2 100644 GIT binary patch literal 17477 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 UYA!>*BLDyZ07*qoM6N<$f;?i9DgXcg literal 3660 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 V6mo$J{3GCljD(_iov2ap{{Rhn1d;#% diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 496f6628c77efae7a0005e5afa2919b812a5c797..b052982103867d4d2afd595aa3850854f2e403b2 100644 GIT binary patch literal 27096 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index 96a996745c42d69aa232a33eb34e3a07cddbba8b..6a7069224dd960486a556c08fcd9408e1fd79697 100644 GIT binary patch literal 34904 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�P9PU{;UZF?5Y#LaQfls+ScHRQJ-?MZ1{ zB*t|l;u-UilqamNsMVTEw*_yb6gq<;VA6nz1H_rdWfYY))Yf1}Pd;?Wu_p~9k~7L^ zoU_zb=^c2jnMC1rMXHzN#g@2P5wO30U!U-5+xm*Y0uZ2jI@b&(}v@?WAAS`rsuR$V|0y}x#)2hsy?>|a(~&? z%FfwBCdtH8 zWXTzgIi)hIaxjhuIDCd4pVL$kbK0;lhRw2Je;wQGUpvL`tg~T75#T*W?_S za>w33|_g`9HI zyw0k+K#QjLw_NVu1)aG~r!1Ez)YXzjv!zLE_WMh&_U|)I9a(bFO23)|+)SU`js7`0 zQ&ZcPngxy;tsEj5FFj*E;HAf>fh>_qFWA_JEI28iDv6kViN3kR%Yc`jBp#>QVk~z? zoduseZsI3A_wUlDTToD$B};QoCZUz3(hCqF%1EDf9MdIJK9a<`zBp(dq| z82b8L65~){cRRzK?XfYj!u5r#FuEtq|KIkC&b^ z_ZF2|kjVrY=+iC7bcN4Hk_5EU)OyW{$|z-s*|QIy@qB!r%kC#U-+#n@dP-Ao(BcSb zBF!Y}ZS@#5oT;~%a>pTD@_hP`6ecPf)^dTiiq>t&M7rsQtHb+v)zPqErOtS$e}&ho zzk;RZW_-%k^AET^JRv6Ujj3ME0j~NF?kTq_xRl7Q%{me zV^;X;$kLso#gI}UBx=$n5*eM`g{XQQQHN* z-61KHoTt(YgiOfg;qSvU#&jSP&{|QOHQtSQ+am(Kzv197*~L$}jUO}SJ;A^2c1Z@ zz*;e_6W4CX^Dxl&fv855WE!<#QhQcxSeS}Rgzk9F=&wjBVP|S)DcWU3A~|`KM4ZZ0 zfRRWFBYnT)`Sr)NPlTi=@~IG3p2n@nl<(Q68xG-;DIG`zv^KP6L(HDZcEsqp9Y5i! zf1jJ-W4h^@(H}uU?^=S4M48AEiE*N0iLZK&(>1&Bgk!uSsR@fE=80NXFlnMMpL@(# zcsi!3B6cHATI#UIrIy>>6LyEs*d3n|lOOGU$@}Lxz_aehGlEE8J6F-a?@7ut*p4Yp^yZpzdd8SfXl^|Dv-inQ-lOpY)vBgxEiPo@?m*ffk$q1N5v2|8 zuHycvlOCW#Ewi0>6Lc@`2l1y%-(7JQhvxq1fg_4MPO@%5g=gG-urQT8B>jB!uz zZDc!szq$XM=>SvdGB;`nELrhZ7s zBVD>?QpZv;oHE^X%P0HqbEQ5aOXQfJopP~3=`gu#5@sX zB#9?wk04Z4OP_Wu;uex3j2=G@4AY*$?};*j7OZm&)sC?~u&X{pD?^q@$R6)|Mqe&F z=rXXPaxGoBrL|im3B$0XANKgr6Vgb|0VRq_X{^a)8>!ogbu+SE4V-L*Wus79$Qhi0 z^->WfvLA0~ju|~PjFVy4DRu}!B`|`jddAc-=qp10j5sb>UI*0WQ}oRUk+t~fS|=Xqc+kg9}PO@+{-)Lhjvpfx!s@_x_dCwoTU5hc)b zOS7y&Cz5!4=o$Tim^`8dZ4H%M(AC#0?3SDoeZQw4cKFZ}qepgs55zbTvnNZOJzo=JKqNEyBROV5=Lyq9N@2eI#saz3 z5UP=!5|ck7sr*hqc)~Q`{aBo8eh9Jhq$V;|UFq<}NQ!|FCqfv>62X*_LjY+&mcPM` zq!1a+fgCea-!b+bF$7|Y=$x=3I4ziEXP|@t03ZNKL_t(Ku~R^hIzY@wuNiJV z`{uR;x|Ky&2{DnFCW4PhHO(op{jy`nX)1VMI05r&zJ-uHvH)J z0hd=Ny!E)}*Z-~e_#1!i8Mp14A8fzQd(TgKesjfM-h*lc1%i37PmoR*9$rqa2Ce zlZH(8nH&WY^AHAwswoB;MuL{|W%@vx%9obAGMiB-tH4F3CPC}^J`fm{c;ikPXQUbL)MOIF&_ zB##>gWE`<6k`R(sWUWwEgEfeAL|`P)rN~h-ozwKSqEnG>3=E@?CqWH@ibWh()ci6+ zQjmg>M(`tyT}EY1iZzF)4Tm3ZK^eaLy5-H+GhsA*`q_#fyn6~C_uw_kWOUS+P@$70 z`NY_JVwW*vMlXdjAajN)-0gu2WSa_vA_%EVq#+@GF1Z3KD0I?bfLPW^gzPh9h1kNm zkSe0BkaaH4HDm}1f~JJjh-i&yTY`Y(xumPnIE<>$%0y7RSMCEeoRkW_g!gkwBzr$yQe>aXNQr`K70Zn9pTw6?8(a*rSq+_n)iVFJ&-8mA(JP$-?KY#rKnt@OO_(V6Qu;p1S)AnG!hlr zmJT;r$X*~QR5C>zKxxRDtYevXCK1VCR7G8FY26lUnn`JWE0Xz;AOCy@Sg3PE3n7p1 zrsPqhA&n)f6BQ(d$_jD`k3!KB#R&L6}eWz4TinI6bmFm-94*Vj6&~(yaU9Lo4Q=0 zdl+teeDtKPhI1fv@WUSdROp+`A3u!z`9>4Ej_%33u-DKCY>N7XnF99Kqp;*=h1dlW zG%_iqDkt$_X%|XC$lphp&=C1q;a(!`3tDDk)Sp zDA6coW;sg%GFd|DqGyfOtt{<@+OFR4ZMEHN<8E_~z(4x=4p8eYf}peWQ$GAi1@~)= z8lpyJT?}6oh(^hbx5)~$%nqTDtP6BC&#BVOfV@O`-yFfoppwkSFQ_|+W#<09^Pui| zZCQW+IA@+Mxj2K|Ay|_@RHy__GOdD*%Umonub&97pJpyL!m<^rssQs+`U+w1`3I%| zGg&Q!i;eL5sj#1ft0~d-kVeIFf@M^!#IQ0A3)`^JhB{|l@GwrKVM2L7t3n%;H6`^i z1~1V0#6BnX0()yXSfNvfF=?WdG($x}%}un7BD4)jJ1S>bt~J(Wj+dEkF9cr&^9or(`o{y0C2@bPS*PxssFEv>dwKJ^Fz@0{NrI>&a3@VjzOv=oAknZ-N0J$V7 zh~@PC9EK~+|CV2{@(Pqp7qKubDw=uPrYi6m^c;9~!Cm2ITw0!?GXhzmvPSDF*LF2* z+Q-ko!mEca#qg+749Hzcj`~Ym}jVJE+JXn8RS=S zWbzk~p7H`mcMr#Y8EKn8FEjF`&s2Q=_su`cS$XrCf;@jzaPk$j#h_+>STyVUq|a8f-x!X5Zg z=FwGm@7KDV0QX?Wf-4hc?x8wLk&SUrR*Q>&`SAQ#|8Y}q32Au6OR#RsF_klx=1**H z{~eo`7O^wgfY0e8sylLm$V))jFGwi<6eo}`0;YeKPUx2ySnA8`v@*iLLc=cr`$n)lE4eO=w@Em$C+#CddD;y|CeKkVu49-

1-cN~kCDCB^sZ*A9kD7$p9y75suBe`p+bb<2`3K! z%?I#XZ)1LC&l_)D@=e*X{DaIVmn$xBE9e5G2u%&&ehlAzlap^9`OY_v{Hv!sKG-dI z{-bYj{r%VA4?l!I*+ERm+h?TTeFytjBER~U=XcyQp8ZS3b+_Py4_m@yXkF1De8Jt7 zFEbtWS4uhDlUrn-DWKGs1%bYjho#CXpv269#K5d>ffAI`No(_Dvwrx`f8}d`~4bQONdiN;asKB>`K`YS`{@<2K&$p4IVV)E zsnz)BZJv%I>+?i>aZ7xO2cTaffaH6Hh%e;*KSd)&?gv!-thHYyK=kquwa=GsvgkQo zna~_qm>rL5;q8;2x6g$~CzVDPMncM}zR`KTf>&y%VZ8 z;nBbTJ`cYBF&}@U=P%ADuAdwD$q42dvh&1shyP}|i2Hp{ymAm$xWzebeO8)IqF!Qv z3HLnoFY?9ZOIGj&O`jJ*Ezd~TmxaX?1$uwSUzZv7o^mARh*CP|>g<1#W%;#~W0^uO`E$`<&k7N8ud9=P0o{OKboSFvdC%RH z6H#U0G=fzfl{Rc`;PGP5o2Qz$E;0|ciA5tAJC{AvFCg$buQNtaRc7H}qZFq~K~+<2 zw#2ZeHWdpk)FEQLM@=4lD4PDpV4cM_71GqGBn1qI#x^y}ddZ+R*l-Tv1Y(O5hvkkC zlt4w49>MhBC-Mgo^VyD#-C=&i6HXzFkdFeLFSpv{sC43Mn@hfP=INeR{F6W2^8J6X z2gYpWt@P$2{8Gr?LolB2t=9H*AyHlo|I@~!)f*eb#he$ZK94(3M#H?a zG~&aHchCynAAUfbJ|cMjzZCV~j6o4&>A>D|I@LU&O}!vV+!Lr@zOmlr?DF#n?&>8G zS^0th{8tNceX(ql$!L`@)ks_QoGv;ZZAM-@3p_f{oNVMp&Hpc}q?J`E2acN5DN?6U z(NR|om1}V^74^xcpdN23`~cJ3FLB1) zv#qqsR5s&mp;c!KSc&$)Q}9N;g$na=;@~;PJxl?p5O76f|0^kiphLYIQV7eU(T5% z>2n<5;sA1QclnN-lZBM;6jZ`=^ZfSd>gR0qmmJ_f{&y`(DgK-P;TeCp`@iYN!ykp< z@qT0)3nW4i^i2G|n=<&aREpdmTlpoURxeU0^;L2rFG;Yd&)fNzPEV1~-y7x%gqpcY z)<&E;(o~n6t*>}^w&UT&$i-P^wd7vEUw%>J7sy$WgJSA5-K}PKZP;B~e0I2Xg*682 zJ^FY+9Xs?iVH9ACDx7FT5Jid!uM>x8Ii`wKwYc>u^}`eDP$OMt^c}~s#~6(@nk1Sm zV02<#59q2R$0IlWfj;lC{f_8IYM^Ni`mBYARjKb++>c?^Wx5h(;o+o1Ed$w)Ie9$65RnUv50qXB6xdZ`Kh$RS-4hlGw z{Be0PF85xZhkJ427k5y>XC0nheR})zw$=VLv8ccMcOLSa|Mq{5Ab*-wBFMxTdnP{? z1JwH7@b6!yfXyY($5zgB+MvE{OfO3~zO0PFR|E|GLNBJ2Tff481hk%;2ijxwp7r9I zi<4U}PCCxEe(w0*NpAe5MC8hZ$WGH;YYx|zp*Wu&HNb*m0N=I7H(3}?) zr}X^r?Dz{iz~?fv8jQB@tE4_uqTiND3SL75mFF}_7kP{F;@$!7OQQLuD$Bg~{!1w} zH_PUBc>Y3qqgCk^ni3@>m+t3XBv7+tizq!0j1#Q(v{lb$)p4=ycyu;!zMWXM5oa@6 zOM#@k;^p^#%}gW-BXm3A`U%`Tvvk9PzzU~YTvpUEkfw<+7I_nqOx7A>i@24oEFOqS zm~tlC3e}uqmS^a8gVfCo@+*V0vo4SWv#R zQfkRI7J*%z3vNf3#;9bO4fYG8Vef1}DMZWNs075%7_Yk~=`5Y1+^i*(O9PJ#Io&ye zLK}^$6j*gNf}D07?K-ht<4h(jt5=?)@sA3dxo2I3M6lQ^jdF19_7 z&qrQ6_nd7a^_`CY&uAz7tn}y30a8#LuN7AxE3Tha^wXN`HfY`ALdNB($eWCwVCm$c`#IRvGF!1yvcGx3qmlI|-F2DuhO088nMYaR?DrjZ_&{ z0w=%`umVZ$a4Drhs%^;tv?;cLF2U+foxSK;4kwhok(B4oZ}D5@6spn1 z4w4{YhS}Vm7)GHgCAu}}N-I^F*$LDStyKI{4$!O@NKS;H|M!sne_$tTjX0gBRGF~H&gGe*T091dFMR{Y&s{kgS7Ay0tL;JN>D*x9+9D(|zZe6FVK-d!$e6gbe8 zP}hmAn|QeFd3@IM=xpTTG_YO8a`F93>4(lKYf_}7n0n3r#&C00aojg#SyEL?>a4Mo zN6qqvIm9B*cQ>|BYqBj0&nauX2wob*tZ~b8^!ftRf_4Mic$6*QS&QK6MBQebO*kEZ zjw$aM<;Y+r{Fw!B$**PdDj*~p5iYdQ8Npc1sWm**niLj19WuSrEFL-D{g}TsCE@C;?FkDxlJ6_rd}4%dKEjzLTo- z{hp%dCaRbF`P3@SKR3nrbyEVNq&XANFA$>2g0e~}r^Pf5*H-AtTx+fW{8h5tpXmVG z)57YRrtu#|2_FujejIgN#VQm}R6t`;#rx2Ax>+G3qZC-Hy=!?ZRAbPMK~*JUpk|M@ znQRm?r#lGX6x0f;;xzgWMQSMP@|>4wL0Q4piME}%SaiI#J@U1O9j{+_&QB7nrC{w# z_b>UpXx~q(``=&4Go(oodP9F>+27RM?iZi0^^M;1swD5Lis2X9_L~t$p{tB$U8ouMrO z3!_j`5G~~*EptliG^#e}Mi(2H@7sAwWq!gus!3a2f^o!l%|iys^3zK;k$_+=d6;loFy7&!Ka!OQr+47vY1+2vK348a#Y7}Xd|YcQ3@ z+R_xuA)#F)PP!azX%?exG`cCyVqK{Y<&X$gflY|bFpshotL}*tc6Kn55N#w^xlCY0 zp>;;-NbLga#mJ-6p08aTdHcb@qqD$vEws&-jsI1;zITwPoFR0oTzoGb``d=&up;Fp zo2p?|S#&oPZJ*l%Y4j+`Xl>AyE3$@_#Vd$e7{oH^72cdzvp0OJkQ^G%7!LL7t-}xH$+Xw99BQ4jQj<8Y=UstqkrfP&| z*7Ezi2mG^7-{R!!9l!hC9pCxwfsc~od&e{W^rLgeCp*+MAxnX8p2F|Eh5xHP$MYjM zTyv~j!mqvs>22T=t`Fqh0nroG8NE=L)?!=%y(OzjRVq2Y0%bL((U`_yoGuqv5mHs6 zXEY@wX{XD}%=b*@d&0~Uk^6dQsSs(Ss9b%0zCQoagNsLhuU#xd&WYdqWgOuA{G1pA z7&wmm|0~MoZ`X}u7zf5_Am&igk6Pm@M^n`}W053;CJ=oruaL@>cwTEOOH(_XvE(RB zE)eQim|;^a%`~fuqcoO!SyR>m~V4sM<(uAdn8`Pq?CwKc)F%C*v8;0 zi!~Ob49RCkGci@ZFan*zSdFt5XB-+ujEN9u%)jU&r=4zAW1Q`kzw$RW6wBt#1ue-b(XrRSuNKr+9euI3W?wYqxXzq zLSjc1GaEH>(R4gskGysox!7ddTJBQJFBScNrt#l{u1b$12F3n4eD;3k@-sLdDza)Z zIPw%opZS#K;*y} z4*1YD-mvY1`u!H1vmTHEpVN5WbM(zs=M=7^Uq8H08nBLiulX@2w> zn`bwS+r;-yN1oIxcD>{I(;ZxOaMi=%SRCM^k3n|y-&6d!9=TO3@+A2Edz|i`aNG&Q zUdV0*ZH=phMFS_RmeuMMqb$LDrg3EQBSRR7Iijtisw{O?v#1x;wk5^Pu^Q;xo|uaR z8mn2>OIFPaqb$82=*AvNP@9HI*QD&}!;z3jrER+Os{hmN;`Ar~#<#x1kKX=@Vwy3wIiQac~<6(A! z2@#>G8qSs{Y!+J(!xSR@IB^{J90rAtBMQMeM_VsAU7fOSPq5mOa>j>=Zt6G=d-62V z_{6CUJX-WTTu)qVVyXGNV)^+CBh6kV@(Xvvt`*au*)R3n&Q*24GL9{~K0TYEd^)y#I*3Sc-D1Mw8 zewbRaSK#~7CB?}3dA3`cw{3LeHNHtmMf)j8Hw z9EKyV-;)z8?V854ggjD5#~6p%%n0>hmHgubkmMB^Gx zmuIZo6O^*}lofn}_&9RxZfF%GePm@b7i!@3 zb;pC%$aWc7G#P8<%Sh^1n6G(Pmrfq0UeR3}4!4d&S2Ip4RMk)$gH0JVjKt#+=?1h< z7!+n6XrZmeTV0w*M&oLOZrY;jdA1>KHl%uiSc^y^rHoIBlsqQ)G`eH4mBW_JW_$jL*z6#+|ZEy0&5zYs>W18jYkPom4(d~zqAZ}CVw2@d4kHq zg9YkBv3aOCIiD~Qx_4p!Lzu1;V~&hfWLQ}iZ*Ey$z~-Ui^#>8_4jisV_D@H`u%K2A z4>oVGSZoM!q@ND-Q?UadCs5#wqj3$J_LOC{CS_sK9#{@L#?ay8fFiSQw``XuIMYzu zC5>H^6V$pDr)!nOv&>7pj7rE!8~xeGftPb2350cs)u03ZNKL_t)~J$KjkEAqD=(|`S8 zL5lvthj4rf4=w!88R|D$9(?19U%Tj8+fCiHW6*u6VAMzIl0Df12UHQVMkU z&wuy7UNQCuvWh4z|D(42m&)YFBH2b;B9}3Sx~{3~x{yJPEuGUeF;#0qnuy7ha>8m$ zQ_T|yb&+8U$>WT{D#aK&K(MBwt=60@AFyiAu%l+H*KhLPnevV7Ze@@>PTcN73bvYGRt0;y_FVOQw`5L9<%ZxCJ>UDpOP2n#I)6`=g9HJ0kMp+2oJtzb<+4T%^uDbACFW-#FpBVC+m zn}OHg@VxQ1W}$o3Uu4E>gL`Ut_(Wl!X-<31B5N9zFcQ#d!b!v`N6eWnCJtn}dgAQt z8Ncy*;M90N+a9^Lz&^oW>|yDt&i1S>BC8f$V@Sr})!fjO1lJRM?*P%Dbcg$E5obYH z5F?CJVCQmHvsd_RqCZzxRvIGPbX}usyFh-uA>H-=lMCJ)As*u;K z7l5TCX^y&rrpyfx^CBE8(MT>Z))_vC`~TZJ_aNJ{y1svYYpuP{vmf{N+<6Z$FrZ`b zL1~p*MvEjG@quDUzz_?Qm?%CiUd=!L?#p|jaZ7HLSTrB z!_2@i4~Bc^-rKjI=dt%*YyI-a+UJ~oPIuqieIGM-hF(>t`gY<M}gP_gm}t{C-WF zer}0btm{ThLJyOS7?j`>e7IJ-7{5V>C+K8nIMLf=ZMERUQl!(K+3?CmS}YfTG$~dM z0^U&UTDI4Pb7u_ap0EU$lXcoS>u_5mbUR`Ciw_uUa5jbQj1!_2N|Zr}Y>xw5Lrh8 z5$-u9wkt$66f!GIAx8Mz2tIcn?jNCko9ecT;uHzOJ!TYTU}JZkGZ!AlW{wlR8*5WH zt25&Bd=5nLTGiiMa@)a4M$2}I8nMP;Bul$~tO#X^ui}LL5e;%Sc>dTD-Q46tlcY?mp(dmm%oDExmJC~?_{vGBFG=I@Nb6nZq$yxS})t$)7Ic4Wj2M^@LPj=||HYajJmxxux#ek_wTvd|$ z3ZGEXCH2&wfzLkoo%}9igv<;B1R6!-_}Hc zb2Y7L2|MRu{jxfJz@+Q({(mRItsLdOMhJchEwsv=g%a*ONa(9ZFl4!+gK2Z7Sz zOu+Q|c-vtVb0p+g&52|vw$TY?aK_PhZEo)_VOl3y-ge}FSusAXlusD!*%oczV##z_ zv2EHx3Bw^_IHd9w1(9f!Xa!&Mw+u9JAx1(J)}liQSS&_!h_>$Oo*sb>3>ptoQWxMr z%+pt?!20AD)OG*H05+mJW@q;->*qd0KkIR_b2Hk#CDBGrO5_)MJEoj&Q>>i%l4wQI zpi^2dnG`1`xc4E#{mx{iTt=6ZJMu5MHdR(4D!-{wU!|%YV&c@(sKgL!!B6G9GHp}2 zRMdU{7P+Jkb(nBGpxQl+jvu1q9--YmO}}-4PBzAx*~Su;BXzq>YW+0|=hrplurs$xaN z>83HV0r8WMeCA#*XB=4pdP{2*#SSPRjPOo`mjNeGtj;yJ)QsH+?DYE^BYR_(Q6p$U z^h5mk9Deu+j6V&n$FQ9ZEaMch88;wI;?bT->V6ep2-_D77uFpc7g~%)9mMp>@-8L> z;$TP|raoMQ)@2Lz#|q9F)FpDeR%Y=ys*Xv03f-J612F-Sgw`yLZlI~LD1tGTC6^Jf=#qjC9gV5qcs#<4#<;4iZEQiDLyZt)pbDNH4V)9DGH|<5g7GyiX``Py zM8pSdsK_`=GRZtEYTVZ45I5EDJQME$|RSnfQ zYj`#4 zk*X{yL&>J8IBk^5MV{*lg7K-*#N}W!Y7}B9J-LUTLLX=aFl7ySnF|>Si!&4gBgL12 zA_}Df6|{!|H`t}J1>4cEt?P`#4#AJn(4Vg|JWwVMvWsif!F0(8_=E@_vYFhI+H-kw z6kz2P^tW<~-GDF3PpI-9guBxjIio6VKBMa8Grh+c2!4n!Hu2+iVtE$I^Z0B)Q5l9s ziz>uJcXloAE&_-bY$e2jW%G%gjSFpd25nrcMJvn5)F%3)L83D?1|)MBQg@k()J|a9 zty~QlERtxBqD_pAEt~53ovARAgkPiqX(u`ZxTx9E4Pc$5C{qB50YZfzji`18$b@h^ z%W&-+*UE``mhkvhQooUPl$oQ*90O6dLtx;QvgT_b)70hCN#V@gK#t%t16`Ls7_6k0 z$dI?7-9j@%FcpDhkGr~x)ticeZnNt*8J63W#V(cW)oh?r_gEZFCKj&WLAl>p`CsiN zd#2OxJb4Nba`?e-dN#lLXOA)1C@_})f$~FQS<)K9f|}@gzX#aECNCE+#S9@4VuVno zS{ZE-b(vu$Yz!lXDrN%C+613Ctnm++GT??Dc09Z1lQcpZo9>94rLf~|6st*&WN+SLqb(S zzXLa|5MGcI?%by8oug_i{*Er;%TK1-i^q2fJ0n8gg_};I&*|Wvze#U-NI!%8whr+{ zs}#Aw#s%Vd%wS`K?aec6E}y~R$nrkcPB?+%r5!b$t!Jz`Cd4X6WJe6AjWzc@@5LD} zJ#ovErvNW~c3Q1}_SJXrv%hv9#>s;Mza^qS8i~$(G)g?OL%#PHVqJj0@b>E_QQ=a%0G7V@MbUatcCcNX(KGu9+ihj<>1Ng<1h3 zHM4sJDFf;Y;;5oh!)_sr$;mRoj#qG@hiDJ9l^oz{1W2cS&`~v2Q4WSM+$GvTun|{- za7$fY5n4HhShtuOOdV+n5ysInlrFe7x3yPT>aB3T<#@cT`1r;y7tXIU*mw+zEm&QF zFS{H4iW8Jy^bo_PEi47&=Pwif&Yf@~!k>H^f8TjRKZh?q0bg+=*_Sw$SDs)M$e(+X z^2N`CH3J|06nyG5#rbWvR?l#LLPYl-B=mKI7TQJ#K@mp zn+;!j;tsB4xGVW(5tE24RNf}aKT_2jVhnwq?ykBQWcHGRKY_i7b$LKYB@L3Hb{X

cL z)eUeX^4K9(P?TfF)tHvA$gD?cE!YnzkpMW`vOu9Ah(pgc4}zJJh7E9=uI7MnfN<#kx-yc@>M~pMxH7P((B;!Rf2Q~ zn&UM?HDT~fJJlxHO`GHMRf?`btxw%{xkaT;DNgX0CLL=6RSlb%HVi|sZNx2MJImxN zH(^hlq@8>6&pk~3_*upm0Fq-0jdhFXWwP zli%K>=;Z8-a`d4gTU!dekcpe&hiuHBmY@#YXaq0!!Ns1Py(Grf~AFI8P@eM`5JQu|CJqK>5DHh-2t+^3xh4^&ty_?&Ztc5ujFEOyx_h3rxXfyP6Q^#yl^grd z=H}JsvD&|#PQH`~)MH>C%l=>oK}KmLRh$$7-}k$f3i%Sd+>Ek-E>+rXip-;va?)9PYcJ+yxkZ7*SmjupSgt;3rbg*L5|J-RD>tO}-xFoH04c$e5fdI)WV zJkQB`UC1+v@h;07XW7|pvoq|oV@^@VihMj~sfhIQWlpR-i?y}qa$@N=Ry#M-&R1|I zXJW}8&0L*spaD2%L_YEp-}QX1)^Jy2l5ZE`&F}am3Lg{E{{*~te_6Rak(E8)>s6Y2 zR-C6cOYni#Lf%G$pRcGBIXsZif{~d7%DAr{hX}R!YD|Y zU`7H4FAl_zk&?sCSxh^J%n>>TMSdH_%79U*7?FB?t@q?H(#qO&`X}fvouu7brsMiJ zV`~_Cp~&r1L}2$t2o@%oUF#$|49*E3Ox5}&OJ4IH0;Oca;1|eRvBv(3RTv+ zO!d^c(?TncN&&8gu_Z2#p>#>{v4?~&OF zYoM9-IK(OOL_$-}TpMd#9kH6h-RnhOw>BL787OVd4x|mUuZ~1bB0Nziu;!5~$c0Ya zn|~uv%?LEEGX>C?;@9z!%fQ9 zNj+9fwd%Dq->AwxM2Xhi>yg>XFh_(kt#nTJ7?}}UFsb-F#CpvWBx$M2&x5{S5v;M- zrvgN+=~8F+{yK!OLiyS~Lbm6L55Pjdgz#N@kJdfPvas*(bM3|1Ob(*}G6|7}fck)j zK$MuE)zzhwK@-2OwUQJd2+lPQp;;t3;jrpt$2EH+3%bw!=v4HZ?qnT>3A6WpWDo4% z_j-T}d*t<+9i* z`$F{r5~EH@8oB+L35ymNDEAcaW)ZGnAv_hWs#gHk=AXw@c{a? z0|ij_oNO}p?G?UPz1r*6@GFq-Mfi-6{1;yhiAM@hJefW~;{;d`^>=~Z4g9-<+}5kV z2S0^Fo2;#qVmE_g@xfAhOBPLv)tI`Br!Ko!O)Z%|NX^nRacE_lan{RzVf&bX*VT)c zhE!+?yiwtIC%(;1FZu#r^J2N`fAy*!ejjK)glJnhby%ncD70h{oS#)fKa*&PX0%rG`XYrN0| z*RsIFI{_G=K|aCZXbE*nY|XT$XnGpYu{$ohYnQ6#-OtFmXx@BQMx|5J>_3CPd3K50 zBmA9K&ZsD_9|h=i`i#dr#Ng)^N$P%Hf$svn1L5oT4>dHxX;;m>xt!~-bl&-Aan?ef zA;D32!(gPevI=29?i?0}*Nn1)q7-&_4ZCAY6>@CW0+(Tot$Su?B&5wF)R-n|;r`s@ z%{QKeKb36HM|YUp!1iAuy-3WaLH>5+M5v??Fnj>v2bz7-tyXu>)mKCKVSf(q%Nk$u zqEoD{tl(^I%Sv+Stf`whtif9IDkJis$W`}cuFH{nd@asph{-4`%U~!JMSwUaGedGW zBC{nT6=fCJ9V)}I5OKIXp<=tt;cB8h=S(8vbF=U5s9wW%d8UQs=I47^KXKS_-l|?H2H!B<=emWmTR^~SM3CN$(N@ae$y|1f-GwjHB6yC zCPC>K_3;?>6;b&=G3r_~3N1YIv?6ihSpLa1e^h0F2b3~X`rh7^lQJ6pMEXZzXD9g$3FaCzTunyDOHWlK7DB#2{96a z`8YAYT+!dxNZzExd`9`gI`IJ{wMOD7D@QqY6lH;`$4UWaOlHPdafDD(6rL(7PAplT zrxU;#teN8AOi85o^FZcUJ7v~>I1_k1p!iT`=omT)!zv*}!X$^$h;ryf1^UP>s1N?DE5#*SqjH z(H`oW7-K;)R5C;y#(=Yt%tf*+0c07Inqguc`I&j94f63tVU9CF^`REn`V(WE``(AR z@c)zDeUadtd1Yy!GN>LR{BX3ohavEdz@JY}GV5}R@eXf!!&hJPwQ|>D(o?Ne7V#VZ za~;)cwm?2%;MWWIK2*L9c+a#eO7;_^gYE16u04zsy*TfsnszQVukJxRn6a8un;}Ll zS(ZV}$yymMtE((CLoSv)cj@POhAAD25PYOEsU6f#Xk}#{@_m{w(D_=OX=#o$g}D*^ zsi7E~j`Li2e{urESS!h5UF`2I zihxdw%miYX%7Pe&aV?BZq#~g%ZO}SbASOd>3rvn;QukB{pb2nSWWHcyV#7ympr$c% zSSO!}@J8lq>5P$D3D~m%C7`f`{Tg*qrZ2DXa8@d&XyO_DM&M5-^BLoK{rBI2$dhLk zm}@!t_r6^C@c;cwhNA-SA@_0}HW^klUKhE9?RC zl4f{hF`1(mF@H6tZnEeJv7`!Piek)YR8W=`x%2ee71k)@GG}MlVQVMj{DyF0$5MqZ zS$m0Ar;D*}-h^R>88qb-+XE%p*u`lkxaI-Nrij=&Z&J-ZdtB_J`9TdIW^#Oq@M%@P z)rfq2(l20L&ZD3H2ygwFzxU)v>YmI$_Ve#JLowd20a#(5tl?dC>BN^G))!!|{Gy4m zb698fVv)IqSRHDYhWF$7|)@LJ(R#dtJkuror-Avg55x%0*?Zdk4`w$C`Mu`}*+ zW*yFLLXZy2t0!1mUBNn+N~#azeJ3-gQsdd=^>am{L+KiCK}qztE&5Ar3d^sgm0UfIR}Ivbe~n5gbL?YZnk*M z-r2c@(o01#8kyJz?DgWjDKZml6DSZh5Mo6!E*R_%3FUz0)+RTvY_i%ZFt$q-PcW)_ zYz#8Ch8b$Q^p=}-3^ku^QubDn3=c5V(gl|WA zEAS(eoo^4w?liHZ^B@CevQV?4`f2(|W}(>Ge3M3}PEt4Nn$c7EB-2d7+wO*PCWLATuRv zm>Uy8mAR&rL|0S!l5sJjDhHUbL9Q3b7$Rc9^ib0ynq{I{!em`so~IHDk<@oP3G?bc z=0;ppfSI5+TNvj|A6+~_WOg=86d=yb_esm+?2#AWE7P>Hq8=EL>iK^R_?^k$*!|36 z{e&0*00*^6L_t&qe);WRd)?%0p7JczPyFmhv6-tAMKX7U){FkP1%4H{yP2SA?tp2- zsjEx@nFnV0P1;@d4OuRPU_1~Rxv&rJUG!*>{+ zliqE8x?C#VdlupSAa6u?VDe5w<@v=oyy&`0T3$D4*q?gKCm>4A2QW#z#L14^6(es) zdA082WHrqdsbkxVNu9;(4wD3%qgXYPltA`5ee`09I+<$ZXsW-9Jb3v{09+3(qAq6jd65nEII(Si|RhrHjlfMi9GDZasbWxd{gX z{{eV&&8~sXa^Cc#U%>S^uB$qPfBWx0Nz`)QS)Bqk2qN+_72b$&3S=2&3Ec~|C}zLt z%pxt5T(lud_feFz11>o3`-BVk6Dn$$5RFPX9x~kBrYJ_B0b>N0=d?S0THSu)Nz+OH z?#%H#up40!ZbufJ*5+w8L+{vgIy9f5dHteq)o}X*=r*d`syfifI?B%>{Qk6UK1P1- z4PVCfI^1=2H=zlSR@>hy(=4pX&AUy;2NC%JqP!{w?Q5JO(l(q`_JmpWDs(^X!O+pe zw&gVZ5d(Rrg}7BZpPfzKo&!uazOO+sPAFVyfUS36QhM#9v0CD zHRwIQi0|=*--fga8Dk(`-~E11t4g&0_^yZWRh1|+OTNVy`c{oRe|nbd)2+Gku-HS_ z+dV6QH;zx)T>i}F{EBsQugMHQ{>rw>@&G>wff=caryQBBwC&UNQ1j zV&rwk$|tO2-8hL;GiASZn+uOh6GmsB&y2Y4z$ECxwey%J2Y)7wGK-(&W5{LAD~tDf zx%azx@szwzFitAtI4xE_Dn{-RkvCaqe%Q6lz3mhBqQd{vzx3dBzXd%l##`V00M$V7 zV~AC4e;a+F2(Qjc*KE*ge9P1+dl}3FR*mpyGBJbvi ztMF!n*MH|%KHbFW>0gZhmfwDmY7|lg$?JDUFRzQ0K1-D@kkxQ%hU0NmsR)7uRVpz$ zG?{E0$KM#sTQK^8m7Dwg;7e|Q+CS>kLNI>eH}602|4!bO2-@nb=etDsO0n`i#>xAQ z<1u3iVlNKh^m#oN(8|Rm;vC}`i{nA#_(L(gOAOy9hJS$J118gFgz!HjPJmzd?Z3be zy2LV)Wt~|VFUF24uhgh-ih(;cB>d7@ZvS}f7wHiT$(PbcMdXh}cn8A0#+WK)qyvEw zU-Qpj$k&_Ju>xFg;{hGkFR2*4{I0{Q93h%7sV9R7E6u1vNyk2=bMP zeus#BqpIGnfg9p}Y(4r6c{>;B6A}TjQi;)X2#*kXP*px8Mn5E0{z{A@R>?ZTZC~d2 zCwJfVj8p*kOnj*A(-qY?u)DE?SmoqRw^0@Y1o;b9{R`l?qUV)Sd5uJF)WyDpXUev4 zG1NA}8_N^M@fk7v8p0ola0W4mIL5mp9)9p6oVf86);%+Y{~3D%95mi`&!;H1JQ{>h zDWRkjEB>ykyhMbrMzjU=5&A$6rLB4ZBh%AhWkm=GV_+9$2V{s+s_IA#e`<621DorI zlGy{jn;bv%^>=+fiNrJW1UP79ZDG6>6E;7fF^&-XUSs9GVsu%Id@1OQfp1ae4vm~5 zkfr$i0l?mRjklM}nO`Q+92twzvxq!`@(}Q+8u(ZYdKd?&($h#swMN}gX*90L0wol)K3kcQ(j7a@c0C{e#UQobc6E`uj7ll^djmMo}}(exJ8xQ zh;q9|y+xHv*A#72w*9cRuhKXYU&l3n6%jUK=<)b(2gKbke6g z*^!lL!~8)F_cNiM|95I{oHYj-Yw8w7#b(f1Y4O5u=<#)O>Ue>UO`vN#HXp7CMGBlu zg?tXL@Q@LlBUod58{z8NcrRk2gi$ZJdVflI3CC2cpQ)8aXgO4@i-pG<9Hm8 g<8eHW$G+qL16u<;H-H6MIsgCw07*qoM6N<$g0Q@vdH?_b literal 11991 zcmYLvWmr^Qxb_f33>`yAcT2Z0G}2vybV>~&h;(;{bcfQRq;w-CAt@cw-SzGFeAl_o zk74++_gZ__e%Afmu_Dz~<*^{IARrJ3OX01ICh*<$-vfC>V=&Q*|+)c$0A zl!N+7TW4_)X-b2O&`uIjMglD3BFi4p78KhbbzF`0KFZ3|YA&dvjrF`m*HTA66O2m? z-qRpLmQtZrY2_;sgd!)ZOEs@Ph`OmZx9}=hGiD6a3!hv(=B2c_owV#euDY#wOvFYv znD<9P*>o%Q>;Cs2mI$FZEje{vc$i!Zu35*R@W`hL=YGXRjJ_FUeq>JPw+CX4`5Ud+ zb6gPf)LupRKI!ZHx7EY1IN##ZqrXFcP2i4e#P+YU`{XfxLMY7Q4ttg3M65=ST&<0~ zf>0MCZPdrQ`!pKiqpLG11J7AQ=)MTL0q0?8f)9{I!7%hVh$>n=a#{9t&;JduO`aX? z=6Z}uzWSrtTF2QtMyOh+=OF{i)&dFP-a*M4)`< zc-8&&M^NyA={r zQ@3SnH=c4u^29xj7bTZ$=^RVOzKczY-Tkdd)nv{@6Sn?**A}&=IB4TEO7ysfjH@!F ztm3|v5=LN_en7q8I3&wyD|*w_4p-B8bF=UHqN~^}ByL0GM!lrr?lbH zkS@#tm-Cej4pffCRSWGn(tDG#WzJ!D5q*+LS211a^WM!Pj(mN*X)a@gVGIk>H}k~P zyY4x-FHWxarg4kSaeHK$TBVnEk_?Wmz!}A=!;O7+c-%yyd$f1j4Ssnul9hTz@NVv2 zFb;)DUbCL8Jtfq}#hq{PO0ZEZZk=50R8BS3bZQr+2-8?JvZElr-WNP57a#S7OJ8-I zv@>%JuRH3{>^d@XhEV>Zw6?3g!teAF%lGPQerp9)l^x-)4O{u~D?xPDh)w}-eP47Y z{tGa*v|YFX`risfUwJBPre*R2_Q71Cjs*oQ2uv;a%^m7p%jKoeyNz&A30mt!%;c9& zPb1$${g?cIvN$2$e@>{=T|O_*P}lbvZiHjEs$At%!1k7~tDhSyBsI`;PVU<~Hh=k1 zdSVgrc6h3D^aL2=#Y_%feteR!Fk|T1_+;(N?RlKs+0=|Olqr%J$Q>KwP;l~o(_An3 zZFDkk>-5{xZ}t+(QzN2qqEL)fBeyG2i%I555(5?)7uWIo&g4$dHk9s6QH?Mg{`s+V zPb7iz z=(?7cmPUBCm{lRvarUICs>cleRDUQc&1Y65YnffYohM0Ip@^fC7Fxt;L^-TpiU zb4aNEFNWgjQ-|+E_1vaYZ*k^h`M~4WaPs@@8x!_BCB_*12;s|U=I*19uqz5OmkqFZ z2skcYGH3r@X6Y~=;>>(vyL-xKgtgUqIj{5}`mfPHcg4e=KiLAftJj@lUV$9vVJVYU zF&xV=z18H=DVt0E=JVsNi_PwM4%=WXnI4_0O|;l$l%tD}752Pyy7&&Mv65eOegHnX zxX=8;Pp^w`_)ve@22I?_Hinf<^2yYeeEm!9?Xvmc!WwqWq`)dgB@?LPL__aj`%N7JYc6A4% z<~VoUSu>OK8dmki{ImL|EGH)?x_fC6Yp_CASBpkqz*8sE=5Zua4`1)GUtgRmQL><8 z-TL>*KYQXVr*PO=g(_MqbQo)hl}oz0l+kFcy%0KR^YA5g;RRd8@8I^G3}Td)_w}L6 z)YKGZfLo@wEK^*K<&T(o%T%jtwI2}o68-<~uMWP5KV44Sbc>C37vedFr;2^P z{3q>k-4ubC|E0n6#F$A;?8&8>DcKp!$yr2eeXXXTAguMO(dc4T_wzd$LYWYKuzUnCP|9JSw)F7_FuC3$ck$UDEusUFORlV0_5h ztBS70ANF57j}~?A5H;R|HGMLg>%(!V8WX9a3j;P5fp?Xil9F-^=Vo}fV7BYN+-YQO zZC#)9#1VxEKiihl=b*TW@m;cX?b?L1#B)= zdM2iZHY0ahsl`7coAY%R!Iy{5bTA@W#O5ad7r)(#nvPdsCc0zPV%sJEtNmH55`-n- z3TRj1ThPtCn(fp5Ra+Pi)e5E)HkkmsD_#L%9%44lIH$9tc2WriK1MWc03`BwrF|(w z)bm&i&dZ=VUb~6m8+5+$s598uy`^sJi&yg8x#ZqoeEr zwu{xl<2yqBHR_V7EJ0^+cJVHLI3KNbf(O^g)A=vXiR?zdM>0z@Jjbqn--m1Ai=8oV za2!!9@8d=^C+kHS01&CNOPYKSRTuVn1YM+QkqdYC2Q|}6KkW6esy~bq#TDCL>@GQX zKBe;evzz0xGS%8mm-ZIP$3OEMacJ|tW$GM>Y&a8ieD3lid#a0o*0x=;K(?&MGOzHB zIKCqaTRfw&lEeIb%5$Hp?g;4Tk8U4MI&U8Q%>r_!=Xv@bUZ&6zlVyU5IE|Id_2Yp@=hYv>sx^m#bjg9o#O-ZW$7i@?UkzSp=pdE< za-uzv$VeK;!BFLzXL}IhgByTN<7_oQHz0`~6S)F|hjF_at6B!&kg^g#}kW6+1${pdj6hn(`sFuG@+q zk5`|LJyomT{ivTHQvnNozWmDTa|@R}J_W;O= zR_N8}mhJ<45Dg|W0ekVm-bVI+d05rSYTu1Q)(_EnlV!{=*BmoeUe1Jm2e#)!n~MvUap9bgL$zpnRj9 zpT9K&-nV&t%XqH;^;!$3;1dkh!9>VqL#E8|1wMkFw$G(T4l*9EAh^Fz%lM2r^86n+sVFGDFZ^<;R=iKz$+s*R2gpU>YXPfu ziBbxhAT$O`SCNnV#k#sDyH4sEcU?$0mQ6LT+aoEg4-~|bxY$*1 z_vAXC2MSMY{&{ozwuqiZ;wuTSbqtTMEmcdPZDy_<0$0xT)Kr@Br}faEmYfb?(`!zc z$KiaK>&921uJxdK_Z*Rrt_gYiK2F$%#u6FIJWAGhOv1t$?}x}6cd-QuHE_Xe_vsYC zyVbNty$Q3kArvMD24RdE5EiCVU_Xu=4%^DSxrIwEMLwF|bCJ4moNy|A;34H+KY;a$ z51uLDxNihtLtN$lh$=95tJ~AnTm|&Yzl@uQf}mRFXEMe~|K|&;&WR%AR9r(~-8iSh z$kyRPaqtX)M${%fRyG5WemF5+FTxW=xa6Dxp;>qr2~p+{d8uY`ZYMc^ZBY~mR$ucvG(-w?n1{k zL8sd5Vn>n%bOZY^!z}CL!-{W*OUO{>k&E7wjWOkSKFs8|iw4fV$n`$fcp7Xu-_Jvn zmJN!~S4rn85G40IsA~F(1sTQ@fT-J@thD>j?x-mzQu#cd4GKq~_+4bJejU?lAKVEY z%Mz?Gpb9d({$wNl_S5s-u8m2N)8AIF*Cz$6AS*&^D4k`S+pcP-MXfzex@dRW7eop8 z;;@V0Uw17DlZa=*^y1V_p(Yp}h3?YA7?BJtPU^f6M4JK9{9%Ve*tK|d7lklK z=bI+O!#hA7Xt5>S2;oK{a%ny7>vd`lYG|i@S*5LT!Im9WLTF}kBj398!v=`kE&y0gD9C!_N@Pqof6N z*(64Vy4W`X3>xDm;|T!zZR2X)UEn>@2Sa^?^u6{xveS&EN1=nt2G=WIDGgBlAI8sD zKu0V`xTM@1Xunw@OF>Lf5FErC#3`;!mq`(TWA0ECkDc5HDC|Ts<*Ii?Mc#Q!E)8`M z$X)rtk|rVWqz9-!hryzzj+^i&@V`G*WLGesJ>|OXj+txNhG(}e(#4j^%l#LVaOoIz zQ8KN_OYv2v;EcJL{*NlL_!4)yUOS{PH+19*P&zrIWduG~uXp?z?L0GXX}&Oa9&^Ix z_%J?84w;h_30V~L5js%SD@c&JYTIY*PW)87O{fpCz<-6 zJMM6ER*5V=JI(hZmUWunlG#De#L)tM)mrFjLVEJMg5J9*o>MzO&(IU_FivY~+%IK)OXR&L-F;iZIswaFiUH^fe!-){rP;zJLXb6- zD2c6MG08dzuEqr=nVDrB52s=YKX&O=!{XjHb8B*D* zeYkt7@qemVt?Ldl_?vD2czfoT7ana&XbN<0VcnEmF>e&v4mdOb9WfbI^d-~2S|g6T zlUF+H0;-LG3GkXut2}~JPiighAa$JK8lx6hy*zQ>#jb62aOd^noTBRYny=6R zgM+7=)f*+%^<}7~7lWnExGdh6n+rJbyAo1A%GUv09*^)2z=(UNyYubwX*Jl95xg6` zFR}%#O>_zBJwrH08aay7EpX5n$Do#J@gr=g6f+`HCHRA*iU1H33Me9Uy09wyUs<6p zC`tP`15!Jhw0%iQ1{n&;{v!9xckVU- z+#W{_IY8b;9a?GkzB#<$(Ez(Shk~0G1#YvPJA`LC{a@my!bZ$kx?)Iq7l$ML)-7dA zK$s*-9@){4^QmuAwI{7++YwE1hzHh!O$oc&5EJy!QYz1B^}*CF@>sAz{tq*68E$_L z$|xd$GHg6o<=ntrkXo0`ff#^NZMHV6LnWw;WC;UA@{53h-7~*4g#V47Ry2^{vOGg% zifwM=_FUecwlp8M{oI*Mj8-JYck&Xf5%9x)Zs(In;4F3eU&0^_(0$nK*dwaQ}0Fljew2^8jt5BJ`0dN)h2LU*g}`X(Z%N zqj3w<-VR*UqG-QIi_(s{=ot{Gd@mDMJzbGx3b?SOKEp8N5QY#=m+K!^&RJ`?(Bu#p zmD3Y8f3}FFktl#~f0;ZNj+3f}wd8X_sBdzF;cH!4B@{ZAv{m@T#fT~V5Nc!@ggD|* zL@rw=d5C(HdIIXwFk$jlNlZ}Zw`%vLb!I)T5<;Q0H}t9_F!g5|67U-Nij;Vx*s!zJ zFExZA26eS9ac3to2(XOI6em+9(IQN{I86i0M$Lq4A?XrMV6^=fkjG39aycuKS84)` zZV>`PKkj_-ll>zkCNw&U%V=bXZ>}{ve2hEbP=GyT8HB)yv;+N(*JHcl211j=Bc&Pr zk5eJ!r9k8mBoq}D(X!t1B#C{N6SW4a2bm&=PLh$vimDJ#nYps~_1+^KG%%pz$&tr#%=g zf5cn5Aw66DcW()&ZdNR4u{M!^6@U2+RQ32&T6z2DD~KOZj$8osQQ8hcE&K+;AYvb? zR_8PQvm;4(QWw}2V0Iww8iCyXt)34_#jf^&Tg=a<>t~j&Mpo}f1DacLX#C94+6;H^ zjuq>=d+QB->q*DMV;r~X9I`T}8~ZANS~Kf`uA}^fIH8vI`1=okk7T?SWP`a_c|~^J zVSGrZ>bI4)fZ$ga*iLL(&lf7RE*sr>Y>=%7WFeBYzM>4E7D#g@B_BoVQU<7Ag}p%t$;XW)Wrdyg z5mbOnurTXygw60JR{{&3bGKIsOSe(1{iLD;vlaIpsYjC-lw7rA5zSATxppF(OmRZ{ zEqjX3ty{kBhA)S3bAL;(YiGoT1O`be7R^_t(6|3ojIE!fV&+wZn0enE=WLSP2TXiB zFyrqUJiEr&Cb&exK`Eei2#)wB?MPU{%3R^uAIXE;IDfZ(Hb~W}xM-B>Y1kK94yyOz z`@-O;1d!JfqVrlr8ASRJ*9z5;^bmOs3D3W<0MN|7`t$}r9*BOxq4%s;=FFJbbdgJG z*BV+ezw@zGIJ;z>}V7_cth{)fw-G)Jt$p{GYB=xnC9sfJft*r|&6O zL={L#b?dN^6vHU{ULQq*jnr-7}>H*dOSrXewz1rH^=iCIUKOm zMj*JEi0;SB8O)OlR6eKO{DnIEf4dCC&y4?j(){`^Kz7`>IIngzb*%#{Q{L2X>$J;8 zuH6VQb$aY_*yW`3SUiR3H3h_!PLik}v>$kTd3l)wuvvl$Bt7S)#wwOzG)07jdca?# z?>$A@r+D*;OO_4vYOOs#R90C+K48YX$9g=wMW)&NHMy#?GNuT+bx81Rhs1fq`0?Mi z)oI2A9Z+<7s0QdmHKR)ACF$}kIrjft^Xu1C_m>F+09dpZ@dnTv<7#D^W_U>II6ajH4LdS`2%!vU0|;?%42}q@ zsSHcNb*}xJ^C7ybe!S;DB0WTPkYt2XwAcLn9|vT>Sp4YLGNDog`1ldXIUKe? z^9g)0ke{d3H9Pcwk0^3Sw0>ya3(FEE zuk|QgsG>!QkGB~2D;^ZRb-%n~W7{U@n^xJgWOJS!a3x9T0@m@?FV4 zEAmi86tW#tp~ubf-z6Y%(1&%=G6tIUAjtwqI`6U>D`<>v(;EvS)rjK~m@%-)(b4jA zZU!JDQiLktmcOT`klB>nG*mjZe-pcL+fvK!Gqz^oC*(i&t=d=q(_s13{lH%VGfEq!V49UvJnf)bWLk+b>`k zb;kcc8-x-NHAAbfEX)cD>O1Z1>;N0?<@q)IyKFQOvSY+cxZ_Kk>>UC?iKxj($ZlRa zFVtI=w|ojfG0>L*Gu}5iuZow$v^IQpCWOz<&dhWIb{GdR%clTaOXU1wd24G6w&^~f z@KqL1nxS)^;3`&d<(6rgP^sj#(QG!y>0!KOxHM1$DWo$1-;M6y)1TUM>Dv@idZ7wHfnIIfY+C(FYp>7?WOv?VXQ#y?1Rd9X z+!{)xg9RmLW@-BqW!_oPFJXRI{LbPhA?*_8Ead)gQqms9fDoMiboHDEyZQHfQ&ni8 z*~LQnQi|U{#!^0boamco2_!S^J0LX`KGV%A^Gz+i#fW|@kp;_e7!h?^ZsuI4%?`2XA*-aZ)FhTr~AjAL0=45iq;nel5gJ%ni6uF+>8d4}KLoV*Z{D=R9R^LU7M;%R{B zmq>|Xi=@66DOy?eM?1=+Dsp ze1CBBYs%e7kmRfl9U~eZc%)X#z`=2JOQ81Vj4Qjsq*I&-tzbfG;&F#*fkuO`ROzsU& zHzFdh?sRb(B4Unr?i=6Aa?Kkmb}}t2eg7ur(E{&L-dI9i?|aJj-Xkesg<0ki`5?4G z^g|HX^C|&nLzqr3h6J^&T&E%pd5~|ekmzPYZIo4lv0Bc@=Z#n3MV~^8C16C`Gbaz# zw;)90nwmcY;Z67DfB0?Dpo4rh>bPl=3BNsG=_oU_x0N5q0ui7L=qQd!&q%h;p|Fhq}lSXWbV zt=$C!L)y<6{v|v6XN6Xos$e(87!Bpe5H0S_+Z{&R(j`KClV(4+JFjm0n)d6{Ff1~j z+M`OC>3Ue*!!QNVz)$}1PQ1B52BOCGGsC7m0)qc0w1J@GfA~{5tR>1Z7(;sT>Q|PZ z2k7hoGkOXv?dK{NP0Z| zaz=*T4bcyE2Hx|Fl=PwT)Ae4a9=vASY&%R(zHsxE%d@CR$TuEz$@e*ZLMHIv|DoN* zYbFgud}Lj8MNYz(xf&C-)Lp4{IWnOQg-=k0Iz!2RM@Zs#)0*ph06a9GB{Vgsw#^SX z=zg2!Y)oNf8w)hvUrwv(3EE9BY5)5KZ(+&WOhZ$@6#0mKk)tGH%CpY=!(gqjX#}J**yJl z^ZLNY{TU6#Ng#!4^BQDpkOqzyD4G^YGoZ?NtKvWB@>q>H@m?I%F)gDLE7w=di?rV< zfUkY zuvp2gn+EhNWjNE|4=Aee5IrJ{^Q@vz3DG_l%jr*&HHbh2jBIHD~IWA5#s!K zyy<*-zW|&AAS2lXKu~?_k4$_!jelMIEi&8jDKm@H)gMwx0t5V6MQVx}Dzpi!q-Gq%A=jT^*CKrg&;H!hV&ZIgqKvSjv!@MK)7E=E(#T&M3BO1 z@|^S^B6upxd7@Sn*10)+;Fo4K2he2w+Ryw0~Md}T;P2NM39cAjS-?eX=Q z$N;0v;#c6X)L6gu&$lAyg+Nexe;-M}^!hYi#)F?(s@cZ(!`+wH@AqR~@w5H_j8{Q! zYrr~@Ltyr$8MczjVO+ErKEbcSPq)liG?Nlltt!#te2#zn;lncGH*KLTRZ;J1@VCr`eA3mhb9QXME}vgjq*t1B$dsI$OS37boTQE@Ap zeh6odGRJv)CBj(8z-f6P>+owNmCZ!Jye~qd{*|S=&Jcm@BK8#-Uv!W(fyq@}ml=5A zHwB;VzD*k`;ub}NLo%O%b)QUv z$#5&K#o?|?m?^O)zqQUxv*yP&y1xc8MP9&CYJc-SL^{mES}!E1d;ac{!P|YRDbN4; zZe`Bc+p+fY&Z^oV54Vili-c}qgkrC53rFi8pUC7bIA!Ej^4B_QQN=!G_g*YPcfc6m z>H{d}b5HLLW+r79`^nlnWRzl0JQy1<@AN|J#|mE0<7E>7fCWn2cE_7C4e~l{Ffa8< zlEb-qt~+8c34=a8A*Sh=4~NV~aMA00RbQ7f2qGoa4OaSmbNnQ4P^dLEJ*}p$Uk2^2 zM)T^DeoV%t63xrWkdJ-EUn3t++5XS)KE0!KV$WL)B?fHKGq3LrL)_qxRQ@{C{)#U; zKHmBLj}JO25-dH*YT^qvfOT4kx|i|OIJ}j%iI!xrny**MCkP!G3LI?Ufj!@D*8JDy z1f_lM)5J?_KIUZ^tcD0x4HKAgM|GX=8)L;dPikA2Ueqc5psi*7E{it+NIDbcq9TAN za206LFTG(^8Cm0Z>+2SieVd%L4aOiMfBIJxPh`8%#J_{>tGGHf*jlsac2nsrovo21 zQGwvWgriB|OMMVw;Es@pj-rOM!SEkso~?&dsX}e;1_6>K`Xdh?adL@mU_tR_pQs2Lg8r-~KGP_W5`3V}x3n>X749gXj zA=CYQhe}i=8`FY|Gu(ZG9^$@x{GNxERMH#9So%rmy@`Q*&j{XQ^aFP&I(KOQwZXU? zjWA&SJ@!^RUtS`gM3n=96PDPzogi(O1iU;|M9 zBAc6oxf2r#5%+)lnMX^L#Fyy4MGp}jg%g-(drJ2y9Y64LNuV_bTRO-Mw9HhJlSbs* zf99KChm&d=xgPzP^YGQ!3dRw?_1T~KmIah&{HZ>btci9ZJ}qWGuAD1#7_l)eYS4}7 zYfBSm+;xMNc}E<1|FeyLd4Op*Mtc7jX_+K>x0d{z_@>jhn|swxFiVr>?BH_~lSg*O zac7}_u7!N4PcFPMr-D2NKMz40d2`MxZEkKZulWod^Vy*`ps*G0^&TWECCGPWPH^uFRYOX6g(cS}|_!n1v zsnjz=aQ@0^$}RqQVI_n&*3CZBM5@0EO@<4x3Zl(r{vw6jz>{#>&Fw(LYpe8@!8(M8 zf!ZLIRR{BISC%0H@AYKy1&M_}y)HLJ?Pg1MY>>`&RcBvQyEQP2RY5{f?qe z`$G@GnX6_2$I0JhJU^=J=p1JqOOKY3ZhFLAoR=-~7gi`{fj72pPT1YfiaU4Biqt^Q zh!{uX;cC8Y7pl&N%$S^?+E}wRH0omqa5B!&bO2I1`--S(0#97A$NPnan;2U^|IuAK zvkvnl$Zedm23G!)!bE$kjW^jWO9{TM4x9}Mok|%w2{u10M>GEiNh|29!ln?_85cL4 zm4=R&t8c6OIqjV!^MpDB_?7j}cw8rvTQ;LmgRqC_?nZWYmOY%KdiaMOl4F5N*y;CF zfoYH9Zl%wnONM93%P9y1-M5%>G@}qn8WL-8UvHo3pU{}mE?i#jad}Nz4mkzP^t!)r z|A9K6@Ds*?yZ;_oaBl6LQL_Cs3U4o24_Q`jqv4bxy20`Y?pt6Ogx_3jXk=0n*6+!c ztW6_^9WWIX1|;>1m{CR-yPjZfMD=|o8UAf4lHH+v+C#}Kg$QLa%f?T|x zYB+Usyo>)__JoqVk_Q_%jT8P(DY-ET4=U{s;+2bcJ;X_mu#nV+2c8^`0^qGxVia*-` diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3ab3e9c..cd10a14 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,14 @@ #3F51B5 #303F9F #FF4081 + #F7CF00 + #000000 + #255025 + #7deb01 + #7f90d8 + #362c83 + #d4251a + #777777 + #FFFFFF + diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml index c5d5899..bb6e8f0 100644 --- a/app/src/main/res/values/ic_launcher_background.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #FFFFFF + #FF000000 \ No newline at end of file From 15ef5569a489630730a38927b6661950c7761bc5 Mon Sep 17 00:00:00 2001 From: tchirac Date: Sat, 9 Dec 2023 21:32:13 +0100 Subject: [PATCH 2/9] adding missing files --- .../drawable-anydpi-v26/ic_launcher_round.xml | 193 ++++++++++++++++++ app/src/main/res/drawable/button_a.png | Bin 0 -> 1557 bytes app/src/main/res/drawable/button_b.png | Bin 0 -> 1428 bytes app/src/main/res/drawable/button_l.png | Bin 0 -> 514 bytes app/src/main/res/drawable/button_r.png | Bin 0 -> 522 bytes app/src/main/res/drawable/button_x.png | Bin 0 -> 1989 bytes app/src/main/res/drawable/button_y.png | Bin 0 -> 2453 bytes app/src/main/res/drawable/dpad.png | Bin 0 -> 1339 bytes app/src/main/res/drawable/ic_launcher.xml | 192 +++++++++++++++++ app/src/main/res/layout/layout.xml | 123 +++++++++++ 10 files changed, 508 insertions(+) create mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/drawable/button_a.png create mode 100644 app/src/main/res/drawable/button_b.png create mode 100644 app/src/main/res/drawable/button_l.png create mode 100644 app/src/main/res/drawable/button_r.png create mode 100644 app/src/main/res/drawable/button_x.png create mode 100644 app/src/main/res/drawable/button_y.png create mode 100644 app/src/main/res/drawable/dpad.png create mode 100644 app/src/main/res/drawable/ic_launcher.xml create mode 100644 app/src/main/res/layout/layout.xml diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6e51cf7 --- /dev/null +++ b/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/button_a.png b/app/src/main/res/drawable/button_a.png new file mode 100644 index 0000000000000000000000000000000000000000..b434b18be33a14787c88d045e1d1fdbbaef18142 GIT binary patch literal 1557 zcmV+w2I~2VP)TK~#9!?VDXs6KNF3e=~idWeZY@6k4nh(dbG7 zi9tPyu;q_hP2C z)|M7w#=h+TYSKP4o%8QG&pFR|{*Qpd@PPoBfGWTWRLj@pK#4r;D=-U80U;nLUx&RA zRr37=g^Vr%96&R$bAyi?0iFSVuS8Vt65s zVf2?0;FIF{3}EKh;4^U5E6p3~5#R$Y-~tYi8+ZiV^TLYa1o*%LoCid53lZRo7p4^> zz$Z;^XUT1Jd8Ns6a|!UlKHxa{fqpOimCZm+mc}0hj*μf9r77~e1f@;{$X#>dd$ zhJ{|3Tx*b+Ma&;3e{tNGp(qnG%=Tx=f1H(V$({f?&!4Aoa9*}4YY%YcV4mLyMA@dy z1jyy>0SXTXWZN=&z!?e`XVxS@Ue%ckm;keEV_FY5P2uBoN&@6&hOr0;Fv_+9-=_wr zT5q5?n{`JnUv`N)od~cT4lms~ckUjmt5KC+!3lK5JwWc^?Np0^dXJ|jW;}q-WYTYI zZ{Mn-7wnX6j)#ClO&_d1bf_-*GkaT`P32HFIfZ zEsc#;#+sTE6$xkt5aqtTYVNZT4OM10j8cjnT#$kM;3#@ zrGH<)o&qSTtSq%UooW_hRU*=Ml`62gTyggw>+1`|uE+1(iFaB|JJQQx^WYC@5Xn1w|91`;sqiK?71hxV72PE?AlcYusA(EAA0z3Cf(SvzP{kf z{QL?)RZB~)kg#4*2w$~G$_&Mp!3`ddP0(lr0E5L+`bT$ndp7rJOG|Z*lP9aku3h_} zAOW)?k`zU`MC)|^v@6?>98tP5oD$i<-g?F)d+=a|!D1=>+55{H8Z0J#y zQDLwhK3u5~0bx-B z=94S->@odjx0eG%BN6;JZ>~F)y}x}sPFlt8-COl$vu=|Kcor*!0Q{Tk{s~oF*zceD zGCsbz-e-Jz{(NrX9*-X`$kCvc5Rga`S2d6L2+EKY%1J2q9^2 z3k{D_iK^2z9PS}$Zwmzx*(S0gKvrE}DIfx_q*IcoZ8^!R>#hPYzH2Q7`ILW7= zBoyzVsU#wb^VnPpB8v0iWC|jR^XO~}B8v0ybQ&^p`uO~R0$iAH{_Hp600000NkvXX Hu0mjf(2>GJ>p01RnV zSad^gZEa<4bN~PV006wMvY7w?1qn$+K~#9!?OR<;TU8wY-P3lIQa%brJ_Z$0VU6Hs01Av}BwgF%Tz&wB%dbt3&c>yBJ`f-d%rvNAcPz9ju5&zB!zyV;A7vPn(0CpR8 z1E}8t($U1|=LJm5N&veJr2tw07!V(L0QB$zZYER!yA62&S^=1l7%T$l<^{~gRRFsU zS^y0IY9J2`0XWYKxW`-oyA5Ul9RLXAg#ds~UVw|40CpS70klEh=;8%T?6?4S8>#^` zBRSB^3mD!p0qi!s0H6uUg+5-urC1M5XvdG0Caj=1LdKHa*NplTA^IDMiqdr>P!k2 zz(hGlYymA$K3c*GK$95;6$oIUTmj&Lp`o5dv^S5>zn_|F&W^Z*3)~C%{XXx;#=_F_ zl5^U5CurdouR*JGzLwUX^*k= z$s?9M6>rxXjl1&zATz7fQdRwl)iM0pIHT%R0hk~(Z(o+Ex9#_P{0lC}^6+n;j&*;( z@7s0H{6g?vQE}r_jJp9xAZ=R60zTj3-P`{R{1Ggtq-3%lmC^|id8L$StgpM=j6;|S zq^&AhK&Q*pnkQoH`x2O}JwICW|dHnE!SC5Sdb%#0+#37_!8&87aCPDz=j7E#T$kLcs zZhgHnzo2%%Mx)d2efHg#MA07@yzt&IQ_&%r6B60*#nsix^&8`-CeQY~c=q?vZ+;Hm zd1mkN!x@=Rr!fq^K_EFZWP`yA!qtuSg(Yd4yh~U4+y@m5!>tfVwiMZb<3!Qz{_A$I zoSjoqz%blAf#k=L8#Y&gTCHIh!#Fdt6F?L>E zAXZK=+N|*M(1{;Lu6}-<5qT#s;7l+j=8#i2@OoF=Ll-~pVn}|Ib8sd&nYfRhDEj?g z-(8=3&F#K5Gd=aI({bgCai4d=$2j!l1H%o=ZXiQAc_Ab%PSFqbpg(ji005x&Q;!PB zdqSu}EQ9vP{%#er@=ltB<)VvZPmw{o=x=k|~ z7#PbvT^vIyZoR#+x6dz7gzdrenna%tpFh09iisI63umPKQF97ebTQ+_785Vl@DEug zQG)Lrtk=FSVD*}su`NYuCJU!w`dW2M%b)w+#r{rzTbr?V>$RwC6ynw$-`%zjlQ_LC zI-D)q9$PeS{TL_vU;Y>uUxH-yvRIK4{k}&$dP&UJ3lhtW6IyILy?3rb zyq4OI)0^)zPm(#vYjfSNyp_HyFRF0TXxqQ1XW#7CJRtE?H^#KMTlU(Y z+guOJUooBk;2?O}fARiKf3BI^TJN{7@4C5_Ou-LC)u literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/button_r.png b/app/src/main/res/drawable/button_r.png new file mode 100644 index 0000000000000000000000000000000000000000..4862c7a603223aa108923885eedca9718c03932d GIT binary patch literal 522 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=GUKK$vlBbx<}?kiEpy*OmP_x2&k3)Ut#Y3!o5BW=KSdbAE1aYF-JD%fPT_-KLog z42<=jE{-7;x8B}ZpB#+y#D%R!NT2H4GWiB2nuq)-g$DH?;p|K^8Ci1v(nzJ zvtWGemu#j~7do?{Q2e8Y@%Ip32KEn1#{FTu1|_z}%Z-W`WieRvYtP)d7f82R&)m5g zNO#Q6_H}AyDBzeLc3XHAOT%M}a7zZC^k*qg84TvnwANy8FuuwRJz{FRKYOC3A{AOSDt3&nC)t3uEQR3<9=d#Wzp$PyyH`B%d literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/button_x.png b/app/src/main/res/drawable/button_x.png new file mode 100644 index 0000000000000000000000000000000000000000..31889177280d40e49a68f19c498b663225aab9f2 GIT binary patch literal 1989 zcmV;$2RitPP)Csg^3X zplEqT0R=>?AU>+CPIc62Y_+!2&a^X5AGA@c;%Mum3_``?qr4g&(NaV$2q;3u2Ne~h z@~|P0uz`gB*enJFjFMd;^qa|#v$?x_zHiUnz4zR6Iba$BF#*6FfDHgU&2KmWO8~~2 zRxJRe0O|nLXnwT-nm~%wOuENmh_o>PM*yAx-1>O6asY(@DnW```mX>2F$aJ>0AD?j z?oEsw0M#Hx?fpXliugDHkpN7=4&(q*0aWx=2u>f#+W}Yzz#17pz zaIsLsvBwA)_W~z2Y`|K>u^Ry>Wg=nth}4b(?Kh*nKIij0zMJ{l`n8^+w7qLjQO3IW z&lTt#tC6nuhZBNV^0)*606Dq$i)RKLJ*fxROf_7qx^@9yeagIH+Dt#1F|qnzUpA1ai3bj?k}xg!D`ndoeVMYWB4_Fk3H z_IOuor}&-zUcH^Oe(hwJ06)hmw4Ihwk#{Je>@EZDIcf{w$AYo&F!X#4GD zF9rB`kF@Hp?N}!ZlP^B=4x{b+RkD9#mS&!1$Td$&04i_KR2CNi5W76{SGl6K1powm zp3$Lw!f=9kG8vPS6cTD_DKG~BWvfcHYR&0ma)nC8kXvpLhzWYpf>B&4sh91FFaC|T zU0kdj_U;atrrqZ2t@wA&r+X;zfXR;)f4;gmNoB*|A!#Fm7l6&Q9N$rh}7vy4h z|5?7Hh5^9TDYlmD)=r*7|5tva;m)e}PG4ZbEgJ&VQWYzRS(cgBELYN9fwzBeP&l8@ zArcP;N0=BJ2>?K@XeAdf&pOf0(4tir*m1!VdI1>0#@%Xb6-qNRBiRg}(e40XWo2v; z8}07m;yiQ=-6n2ZL0V$c^}8%R6FCP0@oE4g*&K@&URwOttCMUebUmJbxu(p^C;2Fg zt~?+>tmINLzQL~2Y<&T<+uhe$R-JicuU0Qip zreN6>;}??kS-y0lgZCRFCutuG@OPXV6yRXPwl4&z;sn-UYiq*)_AB2Af*?A*=J`fk z?ho;S;e0-a&4~qL*f5%4B3S02uMO+&#PeBUtJRHLMA6Brzn++?;O;0Hm_5ZN=(S z$CS!;H2~bMXq0~$m*4RT95dR&F5$qO8Egqq%k*8o7tfmViieFWZSOyL?Ns);`}Nvw zzWgTt`o%vVT%+yz;V!=OLdP*ZOs^#XG%O+qV3YMy4!0voXzj9?V{L> z%*IBtNz)aG-8=lkjRgdgU7?8!m82a!;Yd)mdwK8+m@^Y|l|t>5Sf#$NzF@wKeN^Q5j_m7&i`6Bc zZ@pBi%ejkUGqR-878wBWxCF6#yI;7e374y97b^j}Ktd&H(`PrZwB+-$PDaF93=x zQVxd%ju>G!901g6HMV@3d!qV*oP3sRY};9MGbi_cF>TKab@o{p>1wYh7dyB<9*sd; zWl@F4c?L*6ue+k^o`#v(plWXo1!@f^=q3PFbscX&0>t-JN#65BgQ~htHURR;y;YF+ zKD<;(>cJDr0k{rO@|hq-S9@#l^zpSyQU#u{6@c>qBYzsC=;G5F={CVoN$w4>NXXQM zeCMICE-=6i6aR0Sd9GUx>P=Ifg&3sU<~oZoh&N6?Da0V$I@`S%gK+b7&tmlJ?eqTu XUm$OH4M6)M00000NkvXXu0mjfl)I5g literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/button_y.png b/app/src/main/res/drawable/button_y.png new file mode 100644 index 0000000000000000000000000000000000000000..fe357a6dc1a8c8a9bb0c59607b5643183214694f GIT binary patch literal 2453 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 TEEq=P00000NkvXXu0mjfdK0TZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dpad.png b/app/src/main/res/drawable/dpad.png new file mode 100644 index 0000000000000000000000000000000000000000..72903f664c8cf1f4d758046adeb46abd274f6155 GIT binary patch literal 1339 zcmaKsjaSlV6vrQ41VWvPo^<33Iz5$@FJ)S$V5v7ELXnq#|QZE$qcjY2;9JW+z{NQMw=hz|M2-bMO7!=brQ2bH3+ZV9Z!VZ%Xzbgu?SdLWDSPqj_r(zG~0ATHCF$Ac->HEz34M>p0>4U|mq~?JB2*WgAm0$un?u zVj@!|E=bABp`PsYI(p|@;~T-@f4Ij+j~lNRp7Zfi^Z5MV-@B}(mOaiW_PR2?<~y9k zjPdG7;gxxN8XMdtk14Wq0YYbV67&3^L3<(67Z-SO(UxNKMo?(4=ITig0!Bk{HnReM zG0aD7U5w_p7&wiz6yuR2i`I<*%P5KV#8tX6P`i4-x<_V!mUk-V)mU|D!Y+Wj@wfu5h zg83YjoZW5;JYlzOYzuPsqxl-Xz*4CnI4+zvo;dRSdB5v6Ne&cjh;>re(qAfWXfD{pOWy?&s1Z}rb}5JY`usvwie>uCD{leX7saC&-E zZfNaFeqMe)eLAmZcskg@L7`MWJ+^)icw;$cS6`&YjOv z+S?SXZYdEr4m9hg<`;s6Ej$HX@pVblP?PCz#Jjrc-cqk*f@IKH)^dofi`20YYoAavKxD++tVbe)Hh_cA*0Y{|+xc+j-_-5kTh|KEVQsUMenM^s%y^ zD9);Byyy)T7uoq>>?exGL;OFd&bnbe;y){EWG&wbOZ6UHybC21lBU$(>y&fE+Q7cc1}MVI04W1?bSe{#-{KZtjOV^Lk)Eu~}8hB9R7I`N=cz)9~$S znT`?&^7UgG+})#ok)MAVM+!I^07MZdTMhQ&WNPVt?|*$5SNx?Y>6*tIB#CjzyJC{e z`q5KDiW@pzTlZ4F#IUD))k_{*-KG5MCuHIg9 n+4gMZ;^y5d&vIv{Dt+e%RJRp3Rc?r6S#}sTnjY0kVHW%ci-Tz3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml new file mode 100644 index 0000000..cd9d39d --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/layout.xml b/app/src/main/res/layout/layout.xml new file mode 100644 index 0000000..7ea5375 --- /dev/null +++ b/app/src/main/res/layout/layout.xml @@ -0,0 +1,123 @@ + + + + + +