diff --git a/README.md b/README.md
index e0876cd..9126694 100644
--- a/README.md
+++ b/README.md
@@ -4,19 +4,18 @@ A port of Zelda3 to Android.
Original Repository: https://github.com/snesrev/zelda3
Use the instructions on the original repository (or below if you don't have access to a computer) to extract the zelda3_assets.dat file from your rom and put it in Android/data/com.dishii.zelda3/files
-Running the app once will create the directory.
+Running the app once will create the directory (the app shall crash on first launch, but the directory will be created).
+For this version to work, make sure your zelda3.ini file entries match these https://github.com/yeticarus/zelda3-android/blob/main/app/src/main/assets/zelda3.ini
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.
+Android/data/com.dishii.zelda3/files contains zelda3.ini. Use a text editor to change options within this file.
Default Settings:
-L3 Turbo button
-18:9 Aspect Ratio
-Fullscreen(no android on-screen controls)
+This branch supports both touch screen controls and bluetooth controllers.
+By default, the ini file is set for screen touch control. Screen buttons will apear at first touch. For using a controller, see the appropriate lines in the ini file.
Instructions for creating zelda3_assets.dat on android:
1. Download PyDroid: https://play.google.com/store/apps/details?id=ru.iiec.pydroid3&hl=en_US. Choose to skip any options that ask for money, you can do all of the following steps without paying.
@@ -30,4 +29,4 @@ Fullscreen(no android on-screen controls)
9. Navigate to where you placed the rom file. (If you are unfamiliar with terminal commands, "ls" lists the folders and files and "cd Foldername" changes the directory. An example using the 0.3 release of zelda3 above would be "cd Download" "cd zelda3-0.3" "cd zelda3-0.3" or simply "cd Download/zelda3-0.3/zelda3-0.3")
10. Paste in this command python3 assets/restool.py --extract-from-rom
11. It should pause for a while and when it finishes you should be able to see zelda3_assets.dat in the same folder as your rom. You can go ahead and copy that to the Android/data/com.dishii.zelda3/files location.
-
+12. Copy https://github.com/yeticarus/zelda3-android/blob/main/app/src/main/assets/zelda3.ini to Android/data/com.dishii.zelda3/files. Feel free to edit it to tweek options.
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..3cf5c12 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,9 @@ void Wizzrobe_FireBeam(int k) { // 9e9e15
}
void Sprite_9A_Kyameron(int k) { // 9e9e7b
+ if (!sprite_delay_main[k]){ //Condition Needed in Pokemode to avoid freezing when hitting Kyameron
+ Generic_PutInBottle(k, bottle_state_9A_Kyameron);//Pokemode
+ }
PrepOamCoordsRet info;
if (!sprite_ai_state[k])
Sprite_PrepOamCoord(k, &info);
@@ -21050,6 +21447,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 +21596,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 +21688,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 +21800,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 +21848,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 +22066,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 +22147,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 +22292,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 +22362,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 +22390,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 +22597,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 +22648,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 +22728,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 +22757,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 +22825,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 +22905,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 +23071,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 +23150,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 +23198,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 +23389,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 +23595,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 +23620,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 +23670,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 +23756,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 +23806,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 +23850,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 +23894,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 +23931,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 +24258,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 +24423,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 +24523,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 +24546,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 +24557,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 +24565,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 +24576,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 +24587,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 +24647,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 +24657,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 +24703,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 +24720,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 +24794,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 +24849,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 +24910,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 +25114,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 +25141,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 +25151,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 +25170,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 +25184,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 +25238,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 +25442,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 +25480,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 +25881,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 +25945,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 +25977,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 +26238,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..dc5c77b 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 = 0
+
+# Zelda offers her help (experimental)
+PrincessZeldaHelps = 0
+
[KeyMap]
# Change what keyboard keys map to the joypad
@@ -151,16 +157,19 @@ Controls = Up, Down, Left, Right, Right Shift, Return, x, z, s, a, c, v
# This one is suitable for AZERTY keyboards.
#Controls = Up, Down, Left, Right, Right Shift, Return, x, w, s, q, c, v
+# This default is ok for dealing with Android keyboards.
+Controls = y, h, g, j, v, n, x, z, s, a, c, v
+
CheatLife = w
CheatKeys = o
CheatWalkThroughWalls = Ctrl+e
ClearKeyLog = k
StopReplay = l
Fullscreen = Alt+Return
-Reset = Ctrl+r
+Reset = r
Pause = Shift+p
PauseDimmed = p
-Turbo = Tab
+Turbo = m
ReplayTurbo = t
WindowBigger = Ctrl+Up
WindowSmaller = Ctrl+Down
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
index ad9bc9b..814d1be 100644
Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ
diff --git a/app/src/main/java/com/dishii/zelda3/MainActivity.java b/app/src/main/java/com/dishii/zelda3/MainActivity.java
index a5a0686..5b55dfa 100644
--- a/app/src/main/java/com/dishii/zelda3/MainActivity.java
+++ b/app/src/main/java/com/dishii/zelda3/MainActivity.java
@@ -1,17 +1,37 @@
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;
+import android.widget.SeekBar;
//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 +45,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 +61,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 +75,241 @@ 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;
+
+ final boolean[] hasScreenBeenTouched = {false};
+
+ // 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.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ if (!hasScreenBeenTouched[0]) {
+ overlayView.setAlpha(1f);
+ hasScreenBeenTouched[0] = true;
+ }
+ return false;
+ }
+ });
+
+ ((SeekBar)overlayView.findViewById(R.id.seekBar_Alpha)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar view, int progress, boolean fromUser) {
+ float alpha = progress/100f;
+ overlayView.setAlpha(alpha);
+ }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+ });
+
+ 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/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 0000000..b434b18
Binary files /dev/null and b/app/src/main/res/drawable/button_a.png differ
diff --git a/app/src/main/res/drawable/button_b.png b/app/src/main/res/drawable/button_b.png
new file mode 100644
index 0000000..4de48f2
Binary files /dev/null and b/app/src/main/res/drawable/button_b.png differ
diff --git a/app/src/main/res/drawable/button_l.png b/app/src/main/res/drawable/button_l.png
new file mode 100644
index 0000000..9c9093f
Binary files /dev/null and b/app/src/main/res/drawable/button_l.png differ
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 0000000..4862c7a
Binary files /dev/null and b/app/src/main/res/drawable/button_r.png differ
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 0000000..3188917
Binary files /dev/null and b/app/src/main/res/drawable/button_x.png differ
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 0000000..fe357a6
Binary files /dev/null and b/app/src/main/res/drawable/button_y.png differ
diff --git a/app/src/main/res/drawable/dpad.png b/app/src/main/res/drawable/dpad.png
new file mode 100644
index 0000000..72903f6
Binary files /dev/null and b/app/src/main/res/drawable/dpad.png differ
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..3b27d11
--- /dev/null
+++ b/app/src/main/res/layout/layout.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 938c9fa..6364040 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
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 211af08..c733d9b 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index d2e978b..058885b 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
index e651000..c0cd551 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 24c9356..1f03944 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
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 4568e89..a9b0428 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 441cc0c..8ddac49 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
index af177ff..2584e48 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 496f662..b052982 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
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 96a9967..6a70692 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
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