Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,17 @@ A port of Zelda3 to Android. <br>
Original Repository: https://github.com/snesrev/zelda3 <br>

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 <br>
Running the app once will create the directory. <br>
Running the app once will create the directory (the app shall crash on first launch, but the directory will be created). <br>

Android 13 users: check the releases tab for the Android 13 version of the app.

NOTE: Controller only. No touch controls yet. <br>

How to Change Settings: <br>
Android/data/com.dishii.zelda3/files contains zelda3.ini. Use a text editor to change options. <br>
Android/data/com.dishii.zelda3/files contains zelda3.ini. Use a text editor to change options within this file. <br>

Default Settings:
L3 Turbo button <br>
18:9 Aspect Ratio <br>
Fullscreen(no android on-screen controls) <br>
This branch supports both touch screen controls and bluetooth controllers. <br>
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. <br>

<h3>Instructions for creating zelda3_assets.dat on android:</h3>
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.<br>
Expand Down
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,5 @@ android {

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
}
32 changes: 16 additions & 16 deletions app/jni/src/src/ancilla.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
}
Expand All @@ -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;
}
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
Expand Down
4 changes: 4 additions & 0 deletions app/jni/src/src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
22 changes: 11 additions & 11 deletions app/jni/src/src/dungeon.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions app/jni/src/src/features.h
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
10 changes: 8 additions & 2 deletions app/jni/src/src/hud.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include "variables.h"
#include "messaging.h"

#include "player.h" //Ycar

enum {
kNewStyleInventory = 0,
kHudItemCount = kNewStyleInventory ? 24 : 20,
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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];

Expand Down
6 changes: 3 additions & 3 deletions app/jni/src/src/load_gfx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
24 changes: 1 addition & 23 deletions app/jni/src/src/messaging.c
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
25 changes: 25 additions & 0 deletions app/jni/src/src/messaging.h
Original file line number Diff line number Diff line change
@@ -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();
Expand Down
Loading