Author SHA1 Message Date
karafruit 079a3ae9a8 Fix max frame count 2026-06-08 16:11:51 -05:00
karafruit 88d731cf9b Merge branch 'beta' into pikit_mode_merge 2026-06-07 13:39:04 -05:00
karafruit 6bf2051bab Generic small keys don't despawn from shops 2026-06-07 13:14:39 -05:00
karafruit fa8f705bf9 Add map time to credits 2026-06-07 13:08:04 -05:00
karafruit 66e095306c Minor fixups 2026-06-07 01:28:16 -05:00
karafruit dc05aca244 Minor fixups 2026-06-07 01:27:54 -05:00
karafruit 440beffc94 Merge branch 'beta' into pikit_mode 2026-06-06 12:43:06 -05:00
karafruit 3c17ec5d48 Implement checking for what maps can be viewed 2026-06-06 12:36:00 -05:00
karafruit 0264a85511 Add shop shield handling, credits counter, softlock protection 2026-06-05 01:07:17 -05:00
karafruit 9843d72327 Add NYI indicator to map swap mode 2026-06-04 22:02:43 -05:00
karafruit 04196daf5f Rework map/hud loot icons to be more independent 2026-06-03 20:50:55 -05:00
karafruit 6b3a05b9de Fix map/compass icons 2026-05-28 22:34:51 -05:00
karafruit 4168bdbeb6 Shift item tiers slightly -> map above compass, small keys in dungeon higher 2026-05-28 06:29:14 -05:00
karafruit 67a1ebb50c Update crystal indicator icons on HUD 2026-05-27 23:16:04 -05:00
karafruit 85ea4477d2 NPC icon for NPC requiring item turnin; include standing items in loot
HUD as well
2026-05-27 23:01:02 -05:00
karafruit 05172929a3 Clean up loot icon room transition handling 2026-05-25 00:16:48 -05:00
karafruit e749b6d6bc Fix several foutonFindings:
- Dark Palace -> Palace of Darkness
- show dungeon name for multi keys
- fix IP block drop lock
- HUD improvements
2026-05-24 19:09:33 -05:00
karafruit 333159ac53 Unify standard escape ammo fills 2026-05-19 22:44:21 -05:00
karafruit 2f404873b8 Fix dungeon indicator not updating on falling into dungeons 2026-05-16 21:27:22 -05:00
karafruit fd3f7f4513 Fix loothud on door rando transitions 2026-05-16 21:10:09 -05:00
karafruit 2477918df9 Bugfixes 2026-05-13 00:58:23 -05:00
karafruit a52f0d71fb Fix compass toggle check and eastern palace split room 2026-05-11 22:21:08 -05:00
karafruit 85a4abbe7b Fix map/icon issues 2026-05-04 17:49:23 -05:00
karafruit d7503ad0f3 Add setting to cap hud/cave loot 2026-05-04 08:52:11 -05:00
karafruit fbd4efc447 Update version 2026-05-04 00:38:06 -05:00
karafruit ec0bb02a53 Merge branch 'codemann_OWMain' into beta 2026-05-04 00:35:52 -05:00
karafruit 80c0f47b1c Show level of current loot in HUD 2026-05-04 00:14:09 -05:00
karafruit b58641ad90 extra keys display 2026-05-03 17:06:30 -05:00
karafruit 031a444a4a Merge commit '9174bbfba54f94ff51c149ba5d3f9e754dbf61a1' into codemann_OWMain 2026-05-02 23:41:40 -05:00
karafruit 0f36eca4ab Add more shield logic 2026-05-02 23:22:37 -05:00
codemann8 9174bbfba5 Fix for Kiki unfollowing after certain entrance transition conditions 2026-03-15 16:59:19 -05:00
codemann8 37caff7bcf Fixed bug with MSU-1 GT2 track not falling back to GT track 2026-03-15 14:19:12 -05:00
codemann8 6fb81c0aa8 Fix buffer sword slash when dashing into water 2026-03-15 10:55:57 -05:00
codemann8 6609253059 Merged in DR v1.5.5 2026-03-03 07:59:14 -06:00
aerinon d0f4651130 fix: skip key counter with universal keys 2026-02-11 10:49:57 -07:00
karafruit bd722bef33 Fix dig game 2026-02-08 00:33:19 -06:00
karafruit 9208d06f3a Fix bonk torches and smithy 2026-02-07 23:52:47 -06:00
karafruit 2a31b7763b Fix small chest bug 2026-02-07 21:23:01 -06:00
karafruit 779c9a27ce Shield handling for pots and enemy drops and a few more NPCs 2026-02-07 16:51:21 -06:00
karafruit 381868c3ce Heart pieces and containers shielding, fix some GFX (swords) 2026-02-05 22:10:53 -06:00
karafruit 57591e1ef8 Merge in OWRando fixes (#3)
Reviewed-on: #3
2026-02-03 23:48:20 +00:00
karafruit f6c0de88fb Make valuable items all look like shields, implement a few NPCs 2026-02-01 23:25:24 -06:00
karafruit f609727647 Start link with home-pikit telling him to bring shields 2026-02-01 21:33:44 -06:00
karafruit 2dcfd8e67a First pass at pikit mode 2026-02-01 00:10:55 -06:00
karafruit ed2746a27b Update map coordinates and fix red crystals showing junk 2026-01-31 13:01:14 -06:00
karafruit f8917c461a Merge remote-tracking branch 'codemann/OWMain' into codemann_OWMain 2026-01-31 08:47:00 -06:00
karafruit 5dd62441a8 Pull in OW Fog and Grid Map (#2)
Reviewed-on: #2
2026-01-31 14:41:47 +00:00
karafruit ab60e3fd35 Remove error beep from doors map navigation 2026-01-31 08:37:20 -06:00
codemann8 bf2bd1974d Fix buffered sword issue when transitioning to water with sword out 2026-01-29 21:26:19 -06:00
codemann8 c438e9fc3c Merge branch 'OWMain' of https://github.com/codemann8/z3randomizer into OWMain 2026-01-29 20:52:54 -06:00
codemann8 17943f9904 Fix Link sprite using vanilla coords on map check in Special OW 2026-01-29 20:52:25 -06:00
codemann8 41c520fe90 Fix Link sprite using vanilla coords on map check in Special OW 2026-01-28 22:50:20 -06:00
codemann8 9fc26e8710 Fixed palette issue with map checks when Link stands in grass/water 2026-01-28 18:40:33 -06:00
karafruit 482381fe53 Add lower-layer headers to doors/stairs in IP tile theme 2026-01-27 21:21:23 -06:00
karafruit 2b3b50fc5c Initialize $72 before loading palette for OW map 2026-01-27 00:19:56 -06:00
karafruit b7c32fdfb1 Bump GK Rom version 2026-01-25 21:48:20 -06:00
karafruit ec1083a2e5 Fix reference to now-removed UWSpritesPointer 2026-01-25 21:31:39 -06:00
karafruit 53d2a7606a Merge remote-tracking branch 'codemann/OWMain' into codemann_OWMain 2026-01-25 21:15:13 -06:00
karafruit 37ee113f9d Merge in dungeon map changes (#1)
known issues:
- in-room stairs in door shuffle draw slightly bugged sometimes
- entrance sprites in non-doors are sometimes drawn on the wrong floor
- in some modes, sanctuary will open HC map instead of sewers/HC2 map

Reviewed-on: #1
Co-authored-by: Kara Alexandra <ardnaxelarak@gmail.com>
Co-committed-by: Kara Alexandra <ardnaxelarak@gmail.com>
2026-01-25 22:43:02 +00:00
karafruit 5831117e36 Fix light cone not showing after torches extinguish 2026-01-16 18:28:21 -06:00
aerinon cc635ddb78 fix: consistency for dungeon counter settings 2026-01-16 15:29:26 -07:00
aerinon c5aaa07f3e feat: king tomb bonk fix 2026-01-15 15:47:23 -07:00
karafruit 420f2477fc Invert bitfield for pseudoflute 2026-01-15 04:05:30 -06:00
karafruit 727c265811 Fix/update (de)compress utils 2026-01-15 03:37:02 -06:00
karafruit 8de358d99f (de)compression src fixes and windows binaries 2025-12-30 16:35:43 -06:00
karafruit 1ba813f068 Add src and linux binaries for (de)compression code 2025-12-28 14:30:49 -06:00
karafruit 13372307c2 Include bosses in option to make baserom playable 2025-12-28 14:29:18 -06:00
karafruit 63e8d5687b Fix timer and add drop-to-ganon mode 2025-12-14 11:10:23 -06:00
karafruit a6ad4c082b Finish pseudoflute 2025-12-13 22:48:03 -06:00
karafruit 74d9c72cc8 Pseudoflute 2025-12-13 19:06:11 -06:00
karafruit 18a73e3b88 Add flag to make the baserom work 2025-12-12 21:33:08 -06:00
karafruit 4f0703ea62 Merge remote-tracking branch 'codemann/OWMain' into GKNew 2025-12-12 18:16:07 -06:00
karafruit 9b7e5646b3 Improve junk item configuration 2025-09-05 20:47:36 -05:00
karafruit e4f9c4cffc Add variable ganon vulnerability mode 2025-09-03 19:53:10 -05:00
karafruit cef41b1674 Merge branch 'OWMain' into GKNew 2025-09-01 10:56:43 -05:00
karafruit 02b07528bb Merge branch 'OWmain' into GKNew 2025-07-22 11:33:34 -05:00
karafruit 9256f48f5e Merge branch 'OWMain' into GKNew 2025-07-01 14:08:48 -05:00
karafruit 2344f9490e copy skulls manually instead of DMA 2025-05-18 02:56:13 -05:00
karafruit 642aec9112 Fix gloom heart icons to be loaded via DMA 2025-05-18 02:32:39 -05:00
karafruit bc0f396275 Challenge modes: OHKO and Gloom 2025-05-18 00:59:34 -05:00
karafruit a3f892975f Merge branch 'OWMain' into GKNew 2025-05-04 15:18:54 -05:00
karafruit e92aa018e3 Multiworld junk item shortening 2025-03-17 19:02:02 -05:00
karafruit 66e4e91beb Dashing mimics and crystal books 2025-03-09 16:42:54 -05:00
karafruit bc966c0f99 Dark room modes 2025-03-09 13:25:22 -05:00
113 changed files with 10550 additions and 920 deletions
+44 -2
View File
@@ -50,6 +50,7 @@ dw !ROM_VERSION_HIGH
function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<0))
; Feature flags, run asar with -DFEATURE_X=1 to enable
!FEATURE_FIX_BASEROM ?= 0
;================================================================================
@@ -180,7 +181,7 @@ incsrc toast.asm
incsrc fastcredits.asm
incsrc msu.asm
incsrc menu/overworldmap.asm ; Overwrites some code in bank $8A
incsrc dungeonmap.asm
incsrc bossicons.asm
incsrc hextodec.asm
incsrc multiworld.asm
incsrc textrenderer.asm
@@ -203,6 +204,26 @@ incsrc inventory.asm
incsrc menu/hudalpha.asm
warnpc $A38000
org $B98000
incsrc gk/crystalswitchbook.asm
incsrc gk/mimicdash.asm
incsrc gk/gloom.asm
incsrc gk/special_weapons.asm
incsrc gk/variable_ganon_vulnerability.asm
incsrc gk/pseudoflute.asm
incsrc gk/fast_junk.asm
incsrc gk/dungeon_maps.asm
incsrc gk/dungeon_indicator.asm
incsrc pikit.asm
print "End of B9: ", pc
warnpc $B9EE00
org $B9EE00
incsrc gk_meta.asm
org $B9F000
incsrc gk/settings.asm
org $A38000
incsrc stats/credits.asm ; Statically mapped
incsrc stats/main.asm
@@ -245,7 +266,7 @@ warnpc $B1A000
org $B1A000
GFX_HUD_Items:
incbin "menu/drsheetdc.2bppc"
incbin "menu/dr_sheet_dc.2bppc"
warnpc $B1A800
org $B1A800
@@ -298,6 +319,26 @@ NewFontInverted:
incbin "data/newfont_inverted.bin"
SmallCharacters:
incbin "data/smallchars.2bpp"
DungeonMapIcons1:
incbin "menu/map_icons_1.3bppc"
DungeonMapIcons2:
incbin "menu/map_icons_2.3bppc"
DungeonMapIcons3:
incbin "menu/map_icons_3.3bppc"
DungeonMapIcons4:
incbin "menu/map_icons_4.3bppc"
DungeonMapIcons5:
incbin "menu/map_icons_5.3bppc"
DungeonMapIcons6:
incbin "menu/map_icons_6.3bppc"
DungeonMapDoorConnectors:
incbin "menu/door_connectors.3bppc"
MapSheetD4:
incbin "menu/map_sheet_d4.3bppc"
DRSheet14:
incbin "menu/dr_sheet_14.3bppc"
org $8CD7DF
incsrc data/playernamecharmap.asm
org $8CE73D
@@ -355,6 +396,7 @@ warnpc $B08000
;$33 Graphics Bank
;$36 reserved for Enemizer
;$37 Room data if needed for DR/Pottery/Enemizer
;$39 GwaaKiwi Code Bank
;$3A reserved for downstream use
;$3B reserved for downstream use
;$3F reserved for internal debugging
Binary file not shown.
Binary file not shown.
+249
View File
@@ -0,0 +1,249 @@
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/stat.h>
const int MAXLENGTH = 0x300;
struct section {
int mode;
int length;
unsigned char data[2];
int datalength;
};
int find_duplicate(off_t loc, off_t size, unsigned char buf[], struct section *out) {
int i, j;
struct section result;
result.mode = 4;
result.length = 0;
for (i = 0; i < loc && i < 0x10000; i++) {
if (buf[i] != buf[loc]) {
continue;
}
for (j = 0; j < MAXLENGTH; j++) {
if (buf[i + j] != buf[loc + j]) {
break;
}
}
if (j > result.length) {
result.length = j;
result.data[0] = i & 0xFF;
result.data[1] = (i >> 8) & 0xFF;
result.datalength = 2;
}
}
if (result.length < 4) {
return -1;
}
*out = result;
return 0;
}
int find_repeat_byte(off_t loc, off_t size, unsigned char buf[], struct section *out) {
int i;
for (i = 0; i < MAXLENGTH && loc + i < size; i++) {
if (buf[loc + i] != buf[loc]) {
break;
}
}
if (i > 2) {
struct section result;
result.mode = 1;
result.length = i;
result.data[0] = buf[loc];
result.datalength = 1;
*out = result;
return 0;
}
return -1;
}
int find_repeat_word(off_t loc, off_t size, unsigned char buf[], struct section *out) {
int i;
for (i = 0; i < MAXLENGTH && loc + i + 1 < size; i += 1) {
if (buf[loc + i] != buf[loc + (i & 1)]) {
break;
}
}
if (i > 3) {
struct section result;
result.mode = 2;
result.length = i;
result.data[0] = buf[loc];
result.data[1] = buf[loc + 1];
result.datalength = 2;
*out = result;
return 0;
}
return -1;
}
int find_incrementing_byte(off_t loc, off_t size, unsigned char buf[], struct section *out) {
int i;
for (i = 0; i < MAXLENGTH && loc + i < size; i++) {
if (buf[loc] + i < i) {
break;
}
if (buf[loc + i] != buf[loc] + i) {
break;
}
}
if (i > 2) {
struct section result;
result.mode = 3;
result.length = i;
result.data[0] = buf[loc];
result.datalength = 1;
*out = result;
return 0;
}
return -1;
}
int get_section(off_t loc, off_t size, unsigned char buf[], struct section *out) {
struct section best, current;
best.length = 0;
if (!find_repeat_byte(loc, size, buf, &current)) {
if (current.length > best.length) {
best = current;
}
}
if (!find_repeat_word(loc, size, buf, &current)) {
if (current.length > best.length) {
best = current;
}
}
if (!find_incrementing_byte(loc, size, buf, &current)) {
if (current.length > best.length) {
best = current;
}
}
if (!find_duplicate(loc, size, buf, &current)) {
if (current.length > best.length) {
best = current;
}
}
if (best.length > 0) {
// printf("byte %06X: mode %d length %02X\n", loc, best.mode, best.length);
*out = best;
return 0;
} else {
return -1;
}
}
int write_section(struct section section, unsigned char data[], unsigned char buf[], int loc) {
int nloc = loc;
int len = section.length - 1;
if (len > 0x1F) {
buf[nloc++] = 0xE0 | (section.mode << 2) | (len >> 8);
buf[nloc++] = len & 0xFF;
} else {
buf[nloc++] = (section.mode << 5) | len;
}
for (int i = 0; i < section.datalength; i++) {
buf[nloc++] = data[i];
}
return nloc;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Usage: %s infile outfile [start [length]]\n", argv[0]);
return 1;
}
off_t seek = 0;
if (argc > 3) {
seek = strtol(argv[3], NULL, 0);
}
FILE *inptr;
if ((inptr = fopen(argv[1], "rb")) == NULL) {
printf("%s does not exist.\n", argv[1]);
return 1;
}
int fd = fileno(inptr);
if (fd < 0) {
printf("Error stating file: %s\n", argv[1]);
return 1;
}
struct stat buf;
if (fstat(fd, &buf) != 0) {
printf("Error stating file: %s\n", argv[1]);
return 1;
}
off_t size = buf.st_size - seek;
if (argc > 4) {
size = strtol(argv[4], NULL, 0);
}
unsigned char inbuf[size];
fseek(inptr, seek, SEEK_SET);
if (fread(inbuf, 1, size, inptr) < size) {
printf("Error reading file: %s\n", argv[1]);
return 1;
}
fclose(inptr);
unsigned char outbuf[size * 2];
unsigned char m0data[MAXLENGTH];
int oloc = 0;
struct section m0;
m0.mode = 0;
m0.length = 0;
int i;
off_t loc = 0;
while (loc < size) {
struct section section;
if (!get_section(loc, size, inbuf, &section)) {
if (m0.length > 0) {
m0.datalength = m0.length;
oloc = write_section(m0, m0data, outbuf, oloc);
m0.length = 0;
}
oloc = write_section(section, section.data, outbuf, oloc);
loc += section.length;
} else {
if (m0.length == MAXLENGTH) {
m0.datalength = m0.length;
oloc = write_section(m0, m0data, outbuf, oloc);
m0.length = 0;
}
m0data[m0.length++] = inbuf[loc];
loc += 1;
}
}
if (m0.length > 0) {
m0.datalength = m0.length;
oloc = write_section(m0, m0data, outbuf, oloc);
m0.length = 0;
}
outbuf[oloc++] = 0xFF;
FILE *outptr;
if ((outptr = fopen(argv[2], "wb")) == NULL) {
printf("Error opening file: %s\n", argv[2]);
return 1;
}
if (fwrite(outbuf, 1, oloc, outptr) < oloc) {
printf("Error writing to file: %s\n", argv[2]);
return 1;
}
fclose(outptr);
printf("Input file: %lX bytes. Compressed: %X bytes.\n", size, oloc);
return 0;
}
+155
View File
@@ -0,0 +1,155 @@
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/stat.h>
struct section {
int mode;
int length;
unsigned char data[2];
int datalength;
};
int read_section(unsigned char buf[], int loc, struct section *out) {
int nloc = loc;
unsigned char header = buf[nloc++];
if (header == 0xFF) {
return -1;
}
struct section result;
result.data[0] = buf[loc];
result.datalength = 1;
if ((header & 0xE0) == 0xE0) {
result.mode = (header & 0x1C) >> 2;
result.length = (((header & 0x03) << 8) | buf[nloc++]) + 1;
} else {
result.mode = (header & 0xE0) >> 5;
result.length = (header & 0x1F) + 1;
}
switch (result.mode) {
case 0:
result.datalength = 0;
break;
case 1:
result.datalength = 1;
break;
case 2:
result.datalength = 2;
break;
case 3:
result.datalength = 1;
break;
case 4:
result.datalength = 2;
break;
}
for (int i = 0; i < result.datalength; i++) {
result.data[i] = buf[nloc++];
}
*out = result;
return nloc;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Usage: %s infile outfile [start [length]]\n", argv[0]);
return 1;
}
off_t seek = 0;
if (argc > 3) {
seek = strtol(argv[3], NULL, 0);
}
FILE *inptr;
if ((inptr = fopen(argv[1], "rb")) == NULL) {
printf("%s does not exist.\n", argv[1]);
return 1;
}
int fd = fileno(inptr);
if (fd < 0) {
printf("Error stating file: %s\n", argv[1]);
return 1;
}
struct stat buf;
if (fstat(fd, &buf) != 0) {
printf("Error stating file: %s\n", argv[1]);
return 1;
}
off_t size = buf.st_size - seek;
if (argc > 4) {
size = strtol(argv[4], NULL, 0);
}
fseek(inptr, seek, SEEK_SET);
unsigned char inbuf[size];
if (fread(inbuf, 1, size, inptr) < size) {
printf("Error reading file: %s\n", argv[1]);
return 1;
}
fclose(inptr);
unsigned char outbuf[size * 256];
int oloc = 0;
struct section section;
int i;
off_t loc = 0;
while ((loc = read_section(inbuf, loc, &section)) >= 0) {
if (section.mode == 0) {
for (i = 0; i < section.length; i++) {
outbuf[oloc++] = inbuf[loc++];
}
} else if (section.mode == 1) {
for (i = 0; i < section.length; i++) {
outbuf[oloc++] = section.data[0];
}
} else if (section.mode == 2) {
for (i = 0; i < section.length; i++) {
outbuf[oloc++] = section.data[0];
if (++i < section.length) {
outbuf[oloc++] = section.data[1];
}
}
} else if (section.mode == 3) {
for (i = 0; i < section.length; i++) {
outbuf[oloc++] = (section.data[0] + i) & 0xff;
}
} else if (section.mode == 4) {
int offset = section.data[0] | (section.data[1] << 8);
for (i = 0; i < section.length; i++) {
outbuf[oloc++] = outbuf[offset + i];
}
}
}
FILE *outptr;
if ((outptr = fopen(argv[2], "wb")) == NULL) {
printf("Error opening file: %s\n", argv[2]);
return 1;
}
if (fwrite(outbuf, 1, oloc, outptr) < oloc) {
printf("Error writing to file: %s\n", argv[2]);
return 1;
}
fclose(outptr);
printf("Input file: %lX bytes. Decompressed: %X bytes.\n", size, oloc);
return 0;
}
Binary file not shown.
Binary file not shown.
+12 -1
View File
@@ -53,13 +53,24 @@ RTL
GiveBonkItem:
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
LDA.w SprSourceItemId, X
PHY : TAY
JSL ShieldCheck
TYA : PLY
BCS +
STZ.w $0DD0, X
PLA : PLA : PLA ; remove the stored return address
JML $85FC9D
+
JSR AbsorbKeyCheck : BCC .notKey
PHY : LDY.b #$24 : JSL AddInventory : PLY ; do inventory processing for a small key
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
LDA.b #$2F : JSL Sound_SetSfx3PanLong
LDA.b #$01 : STA.l UpdateHUDFlag
RTL
.notKey
.notKey
PHY : TAY : JSL Link_ReceiveItem : PLY
RTL
;--------------------------------------------------------------------------------
+1 -1
View File
@@ -24,7 +24,7 @@ DoDungeonMapBossIcon:
; get sprite pointer for room
LDA.b [Scrap00], Y
STA.b Scrap00 ; pointer in $00
LDA.w #UWSpritesData>>16 : STA.b Scrap02 ; set the bank to 28 for now
LDA.w #bank(UWSpritesData) : STA.b Scrap02
LDY.w #$0001 ; to skip the "sort"
; get first byte to make sure it isn't an empty room
+1 -8
View File
@@ -246,7 +246,7 @@ FixSwimBump:
.normal
LDA.b LinkJumping : BNE .continue ; what we wrote over
.not_diving
PLA : PLA : PEA.w $87964E ; skip ahead, not diving
PLA : PLA : PEA.w $87964D ; skip ahead, not diving
.continue
RTL
;--------------------------------------------------------------------------------
@@ -290,10 +290,3 @@ ParadoxCaveGfxFix:
LDX.w #$00C0 : STX.w DAS0L
BRA .uploadLine
;--------------------------------------------------------------------------------
SetItemRiseTimer:
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
LDA.b #$38 : STA.w AncillaTimer, X
RTL
.not_from_chest
TYA : STA.w AncillaTimer, X ; What we wrote over
RTL
+2 -2
View File
@@ -49,14 +49,14 @@ InvertDPad_DPadLROnly:
LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
STA.b Scrap00
STA.b Scrap01
JML InvertDPadReturn
InvertDPad_DPadUDOnly:
LDA.w JOY1L : STA.b Scrap00
LDA.w JOY1H
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
STA.b Scrap00
STA.b Scrap01
JML InvertDPadReturn
InvertDPad:
+50 -25
View File
@@ -146,32 +146,57 @@ macro SetMinimum(base,filler,compare)
endmacro
RefreshRainAmmo:
LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
RTL
.rain
LDA.l StartingEntrance
+ CMP.b #$03 : BNE + ; Uncle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ +++
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Uncle)
+++ BRA .done
+ CMP.b #$02 : BNE + ; Cell
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Cell)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Cell)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Cell)
BRA .done
+ CMP.b #$04 : BNE + ; Mantle
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Mantle)
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Mantle)
LDA.l ArrowMode : BEQ ++
LDA.l BowEquipment : BEQ .done
++ %SetMinimum(CurrentArrows,ArrowsFiller,RainDeathRefillArrows_Mantle)
+
.done
RTL
.rain
LDA.l StartingEntrance : BEQ .uncle
CMP.b #$03 : BNE + ; Uncle
.uncle
LDA.l RainDeathRefillMagic_Uncle : JSR .refillMagic
LDA.l RainDeathRefillBombs_Uncle : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Uncle : JSR .refillArrows
BRA .done
+ CMP.b #$02 : BNE + ; Cell
LDA.l RainDeathRefillMagic_Cell : JSR .refillMagic
LDA.l RainDeathRefillBombs_Cell : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Cell : JSR .refillArrows
BRA .done
+ CMP.b #$04 : BNE + ; Mantle
LDA.l RainDeathRefillMagic_Mantle : JSR .refillMagic
LDA.l RainDeathRefillBombs_Mantle : JSR .refillBombs
LDA.l ArrowMode : BNE .rupeeBow
LDA.l RainDeathRefillArrows_Mantle : JSR .refillArrows
BRA .done
+ BRA .done
.rupeeBow
REP #$20
LDA.l RainDeathRefillRupeeBow : JSR .refillRupees
SEP #$20
.done
RTL
.refillMagic
SEC : SBC.l CurrentMagic : BCC +
STA.l MagicFiller
+ RTS
.refillBombs
SEC : SBC.l BombsEquipment : BCC +
STA.l BombsFiller
+ RTS
.refillArrows
SEC : SBC.l CurrentArrows : BCC +
STA.l ArrowsFiller
+ RTS
.refillRupees
CMP.l CurrentRupees : BCC +
STA.l CurrentRupees
+ RTS
;--------------------------------------------------------------------------------
SetEscapeAssist:
LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1
View File
@@ -29,3 +29,4 @@ Z=33
'=35
-=36
.=37
*=FF
BIN
View File
Binary file not shown.
+16 -3
View File
@@ -78,10 +78,23 @@ JML Dungeon_OpenKeyedObject_nextChest
LDA.l ChestData, X : ASL A : BCC .smallChest
JML Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783)
PHY
LDY.b Scrap0C
JSL ShieldCheck
STY.b Scrap0C
PLY
BCC .couldntFindChest
JML Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783)
.smallChest
JML Dungeon_OpenKeyedObject_smallChest
PHY
LDY.b Scrap0C
JSL ShieldCheck
STY.b Scrap0C
PLY
BCC .couldntFindChest
JML Dungeon_OpenKeyedObject_smallChest
.couldntFindChest
JML Dungeon_OpenKeyedObject_couldntFindChest
JML Dungeon_OpenKeyedObject_couldntFindChest
;--------------------------------------------------------------------------------
+126 -72
View File
@@ -61,73 +61,84 @@ LoadDialogAddressIndirect:
RTL
;--------------------------------------------------------------------------------
FreeDungeonItemNotice:
STA.l ScratchBufferV
STA.l ScratchBufferV
PHA : PHX : PHY
PHP
PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers
PEI.b (Scrap00)
LDA.b Scrap02 : PHA
LDA.l ScratchBufferNV : PHA
LDA.l ScratchBufferNV+1 : PHA
PHA : PHX : PHY
PHP
PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers
PEI.b (Scrap00)
LDA.b Scrap02 : PHA
LDA.l ScratchBufferNV : PHA
LDA.l ScratchBufferNV+1 : PHA
;--------------------------------
LDA.l FreeItemText : BNE + : JMP .skip : +
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
LDA.b #$2F ; if not from our world, show all dungeon item and crystal notices
+ ORA.l FreeItemText : BNE + : JMP .skip : +
STA.b Scrap00
LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for general small key
LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
%CopyDialog(Notice_SmallKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for general compass
LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
%CopyDialog(Notice_CompassOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for general map
LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
%CopyDialog(Notice_MapOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for general big key
LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
%CopyDialog(Notice_BigKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self)
JMP .done
+
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
+ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for dungeon map
LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of...
%CopyDialog(Notice_MapOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
+ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for dungeon compass
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
%CopyDialog(Notice_CompassOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
+ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for dungeon big key
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf)
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
+ LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for dungeon small key
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf)
LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
BRA .dungeon
+ : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
+ LDA.b Scrap00 : AND.b #$20 : BEQ + ; show message for crystal
LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
CMP.b #$B7 : !BGE +
CMP.b #$B7 : !BGE +
%CopyDialog(Notice_Crystal)
JMP .crystal
+
JMP .skip ; it's not something we are going to give a notice for
+ JMP .skip ; it's not something we are going to give a notice for
.dungeon
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
@@ -139,23 +150,26 @@ FreeDungeonItemNotice:
LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys
+
LDA.l ScratchBufferNV+1
ASL : TAX
REP #$20
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
CMP.w DungeonID : BNE +
BRA .self_notice
.hc_sewers
LDA.w DungeonID : CMP.w #$0003 : BCS +
.self_notice
SEP #$20
LDA.l FreeItemText : AND.b #$40 : BEQ ++
LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1
JMP .skip
++
%CopyDialog(Notice_Self)
JMP .done
+
SEP #$20
ASL : TAX
REP #$20
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : AND.w #$00FF : BNE +
LDA.l DungeonItemIDMap, X : CMP.w #$0003 : BCC .hc_sewers
CMP.w DungeonID : BNE +
BRA .self_notice
.hc_sewers
LDA.w DungeonID : CMP.w #$0003 : BCS +
.self_notice
SEP #$20
LDA.l FreeItemText : AND.b #$40 : BEQ ++
LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1
JMP .skip
++
%CopyDialog(Notice_Self)
JMP .done
+
SEP #$20
LDA.l ScratchBufferNV+1
CMP.b #$00 : BNE + ; ...light world
%CopyDialog(Notice_LightWorld) : JMP .done
@@ -190,9 +204,9 @@ FreeDungeonItemNotice:
+ : CMP.b #$0F : BNE + ; ...sewers
%CopyDialog(Notice_Sewers)
+
JMP .done
JMP .done
.crystal
.crystal
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.l ScratchBufferV
AND.b #$0F ; looking at low bits only
@@ -210,7 +224,7 @@ FreeDungeonItemNotice:
%CopyDialog(Notice_Four) : JMP .done
+ : CMP.b #$06 : BNE +
%CopyDialog(Notice_Three) : JMP .done
+
+
.done
@@ -220,14 +234,14 @@ FreeDungeonItemNotice:
;--------------------------------
.skip
PLA : STA.l ScratchBufferNV+1
PLA : STA.l ScratchBufferNV
PLA : STA.b Scrap02
REP #$20
PLA : STA.b Scrap00
PLB
PLP
PLY : PLX : PLA
PLA : STA.l ScratchBufferNV+1
PLA : STA.l ScratchBufferNV
PLA : STA.b Scrap02
REP #$20
PLA : STA.b Scrap00
PLB
PLP
PLY : PLX : PLA
RTL
;--------------------------------------------------------------------------------
@@ -284,28 +298,68 @@ RTL
; s = silver arrow bow
; p = 2nd progressive bow
DialogGanon2:
LDA.b #$01 : JSL CheckConditionPass
LDA.b #$01 : JSL CheckConditionPass
REP #$20
BCS +
LDA.w #$018D : BRA ++
+
LDA.l BowTracking
REP #$20
BCS +
LDA.w #$018D : JMP .done
+
LDA.l GanonVulnerabilityItem : AND.w #$00FF
BEQ .silver_arrows
CMP.w #$0001 : BEQ .silver_arrows
CMP.w #$0004 : BEQ .bombs
CMP.w #$0005 : BEQ .powder
CMP.w #$0010 : BEQ .bee
BIT.w #$0080 : BNE + ; branch if bow
LDA.w #$0192 : BRA ++
+
BIT.w #$0040 : BEQ + ; branch if no silvers
LDA.w #$0195 : BRA ++
+
BIT.w #$0020 : BNE + ; branch if p bow
LDA.w #$0194 : BRA ++
+
LDA.w #$0193 : BRA ++
++
STA.w TextID
SEP #$20
JSL Sprite_ShowMessageMinimal_Alt
PHX : TAX
LDA.l EquipmentWRAM-1, X
PLX
AND.w #$00FF : BNE .have
BRA .dont_have
.silver_arrows
LDA.l BowTracking
BIT.w #$0080 : BEQ .dont_have ; no bow
BIT.w #$0040 : BNE .have ; have silvers
BIT.w #$0020 : BNE +
LDA.w #$0194 : BRA .done ; have p bow
+ LDA.w #$0193 : BRA .done ; don't have p bow
.dont_have
LDA.w #$0192 : BRA .done
.have
LDA.w #$0195 : BRA .done
.bombs
LDA.l BombsEquipment : AND.w #$00FF : BNE .have
LDA.l InfiniteBombs : AND.w #$00FF : BNE .have
BRA .dont_have
.powder
LDA.l InventoryTracking : BIT.w #$0010 : BNE .have
BRA .dont_have
.bee
LDA.l BottleContentsOne : AND.w #$00FF
CMP.w #$0007 : BEQ .have
CMP.w #$0008 : BEQ .have
LDA.l BottleContentsTwo : AND.w #$00FF
CMP.w #$0007 : BEQ .have
CMP.w #$0008 : BEQ .have
LDA.l BottleContentsThree : AND.w #$00FF
CMP.w #$0007 : BEQ .have
CMP.w #$0008 : BEQ .have
LDA.l BottleContentsFour : AND.w #$00FF
CMP.w #$0007 : BEQ .have
CMP.w #$0008 : BEQ .have
BRA .dont_have
.done
STA.w TextID
SEP #$20
JSL Sprite_ShowMessageMinimal_Alt
RTL
;--------------------------------------------------------------------------------
DialogEtherTablet:
+2 -2
View File
@@ -599,7 +599,7 @@ skip $10
BigKeyStatus: ;27f040 (status 2 indicate BnC guard)
dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0000, $0000
DungeonReminderTable: ;27f060
dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C, $0000, $0000
dw $2DA4, $2DA4, $2DA5, $2DA6, $2DA8, $2DAA, $2DA9, $2DAE, $2DAB, $2DAD, $2DA7, $2DAC, $2DAF, $2DB0, $0000, $0000
TotalLocationsLow: ;27f080
db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07, $00, $00
TotalLocationsHigh: ;27f090
@@ -696,4 +696,4 @@ dw $ffff
OldManDarkWorld:
dw $ffff
OldManRetrievalWorld:
dw $0000
dw $0000
+169 -97
View File
@@ -1,10 +1,12 @@
!BlankTile = $207F
!SlashTile = $2830
!PlusTile = $2404
!HyphenTile = $2405
!LTile = $2D68
!DTile = $2D60
!RedSquare = $345E
!BlueSquare = $2C5E
!BossIcon = $253C
!NPCIcon = $253B
DrHudOverride:
PHB
@@ -29,6 +31,13 @@ DRHUD_DrawIndicators:
LDA.b FrameCounter : AND.b #$10 : BEQ DRHUD_EnemyDropIndicator
DRHUD_BossIndicator:
LDA.w DungeonID : CMP.b #$FF : BNE .in_dungeon
LDA.w NpcItemIndicator : BEQ .early_exit
LDA.l HudItems_enabled : BEQ .early_exit
REP #$10
LDY.w #!NPCIcon : STY.w HUDMultiIndicator
JMP DRHUD_Finished
.in_dungeon
LDA.l DRMode : BNE .continue
.early_exit
REP #$10
@@ -45,10 +54,10 @@ DRHUD_BossIndicator:
LDA.w CompassField : AND.l DungeonMask, x
SEP #$20
BEQ .draw_indicator
LDA.l CompassBossIndicator, x : CMP.b RoomIndex : BNE .draw_indicator
LDY.w #!RedSquare
LDA.l CompassBossIndicator, x : CMP.b RoomIndex : BNE .draw_indicator
LDY.w #!BossIcon
.draw_indicator
STY.w HUDMultiIndicator
STY.w HUDMultiIndicator
BRA DRHUD_DrawCurrentDungeonIndicator
DRHUD_EnemyDropIndicator:
@@ -59,17 +68,24 @@ DRHUD_EnemyDropIndicator:
SEP #$10 : TAX : REP #$10
DRHUD_DrawCurrentDungeonIndicator: ; mX
LDA.l DRMode : BIT.b #$02 : BEQ DRHUD_Finished
LDY.w #!BlankTile
LDA.w CurrentHealth : BEQ .draw_indicator
LDA.l DRMode : BIT.b #$02 : BNE + : JMP DRHUD_Finished : +
LDY.w #!BlankTile
LDA.w CurrentHealth : BEQ .draw_indicator
REP #$20 : LDA.l DungeonReminderTable,X : TAY
SEP #$20
LDA.b GameMode
CMP.b #$0E : BNE .get_indicator
LDA.b GameSubMode
CMP.b #$03 : BNE .get_indicator
LDA.w SubModuleInterface
CMP.b #$06 : BEQ .draw_indicator
.get_indicator
LDY.w #$2C28
.draw_indicator
STY.w HUDCurrentDungeonWorld
DRHUD_DrawKeyCounter:
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
LDA.l DRFlags : AND.b #$04 : BEQ .to_finished
LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished
REP #$20
BIT.w #$0002 : BNE .skip_map_check
@@ -82,8 +98,17 @@ DRHUD_DrawKeyCounter:
LDA.l GenericKeys : LSR : BCS .total_only
LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained
LDA.w #!SlashTile : STA.w HUDKeysSlash
LDA.l ExtraChestKeys, X : AND.w #$00FF : BEQ .total_only
JSR ConvertToDisplay : STA.w HUDKeysExtraCount
LDA.w #!PlusTile : STA.w HUDKeysExtraPlus
.total_only
LDA.l ChestKeys, x : JSR ConvertToDisplay : STA.w HUDKeysTotal
SEP #$20
LDA.l ChestKeys, X : SEC : SBC.l ExtraChestKeys, X
REP #$20
JSR ConvertToDisplay : STA.w HUDKeysTotal
.to_finished
JMP DRHUD_Finished
OWRHUD_DrawWorldIndicator:
@@ -117,99 +142,100 @@ dw $0000, $0000, $0000, $0000, $000a, $000a, $000a, $0014, $000a, $0014, $0000,
DrHudDungeonItemsAdditions:
{
jsl DrawHUDDungeonItems
lda.l DRMode : cmp.b #$02 : beq + : rtl : +
jsl DrawHUDDungeonItems
lda.l DRMode : cmp.b #$02 : beq + : rtl : +
phx : phy : php
rep #$30
phx : phy : php
rep #$30
lda.w #$24f5 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
sta.w $1644 : sta.w $164a : sta.w $1652 : sta.w $1662 : sta.w $1684 : sta.w $16c4
ldx.w #$0000
- sta.w $1704, x : sta.w $170e, x : sta.w $1718, x
inx #2 : cpx.w #$0008 : !BLT -
lda.w #$24f5 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
sta.w $1644 : sta.w $164a : sta.w $1652 : sta.w $1662 : sta.w $1684 : sta.w $16c4
ldx.w #$0000
- sta.w $1704, x : sta.w $170e, x : sta.w $1718, x
inx #2 : cpx.w #$0008 : !BLT -
lda.l HudFlag : and.w #$0020 : beq + : JMP ++ : +
lda.l HUDDungeonItems : and.w #$0007 : bne + : JMP ++ : +
; bk symbols
lda.l HudFlag : and.w #$0020 : beq + : JMP ++ : +
lda.l HUDDungeonItems : and.w #$001F : bne + : JMP ++ : +
; bk symbols
lda.w #$2811 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
; sm symbols
lda.w #$2810 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
; blank out stuff
lda.w #$24f5 : sta.w $1724
; blank out stuff
lda.w #$24f5 : sta.w $1724
ldx.w #$0002
- lda.w #$0000 : !ADD.l RowOffsets,x : !ADD.l ColumnOffsets, x : tay
lda.l DungeonReminderTable, x : sta.w $1644, y : iny #2
lda.w #$24f5 : sta.w $1644, y
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
jsr BkStatus : sta.w $1644, y : bra .smallKey ; big key status
+ lda.l BigKeyField : and.l DungeonMask, x : beq .smallKey
lda.w #$2826 : sta.w $1644, y
.smallKey
+ iny #2
ldx.w #$0002
- lda.w #$0000 : !ADD.l RowOffsets,x : !ADD.l ColumnOffsets, x : tay
JSR BossStatus : STA.w $1644, Y
INY #2
lda.w #$24f5 : sta.w $1644, y
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
jsr BkStatus : sta.w $1644, y : bra .smallKey ; big key status
+ lda.l BigKeyField : and.l DungeonMask, x : beq .smallKey
lda.w #$2826 : sta.w $1644, y
.smallKey
+ iny #2
cpx.w #$001a : bne +
tya : !ADD.w #$003c : tay
+ stx.b Scrap00
txa : lsr : tax
lda.w #$24f5 : sta.w $1644, y
lda.l GenericKeys : and.w #$00FF : bne +
lda.l DungeonKeys, x : and.w #$00FF : beq +
jsr ConvertToDisplay2 : sta.w $1644, y
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
phx : ldx.b Scrap00
+ stx.b Scrap00
txa : lsr : tax
lda.w #$24f5 : sta.w $1644, y
lda.l GenericKeys : and.w #$00FF : bne +
lda.l DungeonKeys, x : and.w #$00FF : beq +
jsr ConvertToDisplay2 : sta.w $1644, y
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
phx : ldx.b Scrap00
LDA.l MapField : ORA.l MapCountDisplay : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
plx : sep #$30 : lda.l ChestKeys, x : sta.b Scrap02
lda.l GenericKeys : bne +++
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
+++ lda.b Scrap02
rep #$30
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
bra .skipStack
plx : sep #$30 : lda.l ChestKeys, x : sta.b Scrap02
lda.l GenericKeys : bne +++
lda.b Scrap02 : !SUB.l DungeonCollectedKeys, x : sta.b Scrap02
+++ lda.b Scrap02
rep #$30
jsr ConvertToDisplay2 : sta.w $1644, y ; small key totals
bra .skipStack
.key_info_done
plx
.skipStack iny #2
cpx.w #$000d : beq +
lda.w #$24f5 : sta.w $1644, y
+
ldx.b Scrap00
+ inx #2 : cpx.w #$001b : bcs ++ : JMP -
++
lda.l HudFlag : and.w #$0020 : bne + : JMP ++ : +
; map symbols
lda.w #$2821 : sta.w $1606 : sta.w $1610 : sta.w $161a
; compass symbols
lda.w #$2c20 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
; blank out a couple thing from old hud
lda.w #$24f5 : sta.w $1624 : sta.w $1724
ldx.w #$0002
- lda.w #$0000 ; start of hud area
!ADD.l RowOffsets, x : !ADD.l ColumnOffsets, x : tay
lda.l DungeonReminderTable, x : sta.w $1644, y
iny #2
lda.w #$24f5 : sta.w $1644, y ; blank out map spot
lda.l MapField : ora.l MapCountDisplay : ora.l MapOverlay
and.l DungeonMask, x : beq + ; must have map
JSR MapIndicatorShort : STA.w $1644, Y
plx
.skipStack iny #2
cpx.w #$000d : beq +
lda.w #$24f5 : sta.w $1644, y
+
ldx.b Scrap00
+ inx #2 : cpx.w #$001b : bcs ++ : JMP -
++
lda.l HudFlag : and.w #$0020 : bne + : JMP ++ : +
; map symbols
lda.w #$2821 : sta.w $1606 : sta.w $1610 : sta.w $161a
; compass symbols
lda.w #$2c20 : sta.w $160a : sta.w $1614 : sta.w $161e : sta.w $16e4
; blank out a couple thing from old hud
lda.w #$24f5 : sta.w $1624 : sta.w $1724
ldx.w #$0002
- lda.w #$0000 ; start of hud area
!ADD.l RowOffsets, x : !ADD.l ColumnOffsets, x : tay
JSR BossStatus : STA.w $1644, Y
INY #2
lda.w #$24f5 : sta.w $1644, y ; blank out map spot
lda.l MapField : ora.l MapCountDisplay : ora.l MapOverlay
and.l DungeonMask, x : beq + ; must have map
JSR MapIndicatorShort : STA.w $1644, Y
+ iny #2
cpx.w #$001a : bne +
cpx.w #$001a : bne +
tya : !ADD.w #$003c : tay
+ lda.l CompassField : ora.l CompassCountDisplay
and.l DungeonMask, x : beq + ; must have compass
phx ; total chest counts
LDA.l CompassTotalsWRAM, x : !SUB.l DungeonLocationsChecked, x
SEP #$30 : JSR HudHexToDec2DigitCopy : REP #$30
lda.b Scrap06 : jsr ConvertToDisplay2 : sta.w $1644, y : iny #2
lda.b Scrap07 : jsr ConvertToDisplay2 : sta.w $1644, y
plx
bra .skipBlanks
phx ; total chest counts
LDA.l CompassTotalsWRAM, x : !SUB.l DungeonLocationsChecked, x
SEP #$30 : JSR HudHexToDec2DigitCopy : REP #$30
lda.b Scrap06 : jsr ConvertToDisplay2 : sta.w $1644, y : iny #2
lda.b Scrap07 : jsr ConvertToDisplay2 : sta.w $1644, y
plx
bra .skipBlanks
+ lda.w #$24f5 : sta.w $1644, y : iny #2 : sta.w $1644, y
.skipBlanks iny #2
cpx.w #$001a : beq +
.skipBlanks iny #2
cpx.w #$001a : beq +
lda.w #$24f5 : sta.w $1644, y ; blank out spot
+ inx #2 : cpx.w #$001b : !BGE ++ : JMP -
++
plp : ply : plx : rtl
+ inx #2 : cpx.w #$001b : !BGE ++ : JMP -
++
plp : ply : plx : rtl
}
MapIndicatorLong:
@@ -249,17 +275,63 @@ BkStatus:
+ lda.w #$24f5 : rts ; black otherwise
+++ lda.w #$2826 : rts ; check mark
ConvertToDisplay:
and.w #$00ff : cmp.w #$000a : !BLT +
!ADD.w #$2519 : rts
+ !ADD.w #$2490 : rts
BossStatus:
LDA.l HUDDungeonItems : BIT.w #$0010 : BEQ .normal
PHX
LDA.l DungeonMapBossRooms, X
CMP.w #$000F
BEQ .no_boss
ASL A
TAX
LDA.l SaveDataWRAM, X
PLX
BIT.w #$0800
BEQ .boss_alive
ConvertToDisplay2:
and.w #$00ff : beq ++
cmp.w #$000a : !BLT +
!ADD.w #$2517 : rts ; 2580 with 258A as "A" for non transparent digits
+ !ADD.w #$2816 : rts
++ lda.w #$2827 : rts ; 0/O for 0 or placeholder digit ;2483
.boss_dead
LDA.l HudFlag : BIT.w #$0020 : BNE .skull
; palette 3 - white
LDA.l DungeonReminderTable, X : AND.w #$E3FF : ORA.w #$0C00 : RTS
.skull
LDA.w #$280F : RTS
.no_boss
PLX
; palette 0 - light gray
LDA.l DungeonReminderTable, X : AND.w #$E3FF : RTS
.boss_alive
; palette 4 - gray
LDA.l DungeonReminderTable, X : AND.w #$E3FF : ORA.w #$1000 : RTS
.normal
; default palette 3 - white
LDA.l DungeonReminderTable, X : RTS
ConvertToDisplay: ; transparent background
AND.w #$00FF
CMP.w #$000A : BCC .under10
CMP.w #$000C : BCC .under12
.over11
CLC : ADC.w #$2553 : RTS
.under12
CLC : ADC.w #$2519 : RTS
.under10
CLC : ADC.w #$2490 : RTS
ConvertToDisplay2: ; solid background
AND.w #$00FF : BEQ .zero
CMP.w #$000A : BCC .under10
CMP.w #$000C : BCC .under12
.over11
CLC : ADC.w #$2580 : RTS
.under12
CLC : ADC.w #$2517 : RTS
.under10
CLC : ADC.w #$2816 : RTS
.zero
LDA.w #$2827 : RTS
CountAbsorbedKeys:
JML IncrementSmallKeysNoPrimary
+11 -5
View File
@@ -21,14 +21,18 @@ SpiralWarp: {
lda.w $045e : cmp.b #$5e : beq .gtg ; abort if not spiral - intended room is in A!
cmp.b #$5f : beq .gtg
cmp.b #$26 : beq .inroom
.abort
SEP #$30 : stz.w $045e : lda.b PreviousRoom : and.b #$0f : rtl ; clear,run hijacked code and get out
.inroom
.abort
SEP #$30
stz.w $045e
lda.b PreviousRoom : and.b #$0f
rtl ; clear,run hijacked code and get out
.inroom
jsr InroomStairsWarp
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
rtl
.gtg
.gtg
phb : phk : plb : phx : phy ; push stuff
jsr LookupSpiralOffset
rep #$30 : and.w #$00FF : asl #2 : tax
@@ -81,6 +85,7 @@ SpiralWarp: {
ldy.b #$01 : jsr SetCamera
jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed
lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking
rtl
@@ -261,6 +266,7 @@ InroomStairsWarp: {
.skipCamera
jsr StairCleanup
ply : plx : plb ; pull the stuff we pushed
rts
}
@@ -335,4 +341,4 @@ SpiralPriorityHack: {
lda.b #$01 : rtl ; always skip the priority code - until I figure out how to fix it
+ lda.w $0462 : and.b #$04 ; what we wrote over
rtl
}
}
+21 -11
View File
@@ -88,6 +88,7 @@ RTL
PrizeReceiveItem:
PHA
LDA.b #$00 : STA.l BossDropTouched
JSL BossPrizeGetPlayer : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
CMP.b #$6A : BNE +
@@ -105,7 +106,7 @@ RTL
SetItemPose:
PHA
LDA.w DungeonID : BMI .one_handed
LDA.w RoomItemsTaken : BIT.b #$80 : BNE +
JSL CheckBossDropTouched : BNE +
.one_handed
PLA
JML Link_ReceiveItem_not_cool_pose
@@ -134,7 +135,7 @@ SetCutsceneFlag:
PHX
LDY.b #$01 ; wrote over
LDA.w DungeonID : BMI .no_cutscene
LDA.w RoomItemsTaken : BIT.b #$80 : BNE .dungeon_prize
JSL CheckBossDropTouched : BNE .dungeon_prize
.no_cutscene
SEP #$30
PLX
@@ -155,7 +156,7 @@ AnimatePrizeCutscene:
LDA.w ItemReceiptMethod : CMP.b #$03 : BNE +
JSR CrystalOrPendantBehavior : BCC +
LDA.w DungeonID : BMI +
LDA.w RoomItemsTaken : BIT.b #$80 : BEQ +
JSL CheckBossDropTouched : BEQ +
SEC
RTL
+
@@ -172,13 +173,13 @@ PrizeDropSparkle:
RTL
HandleDropSFX:
LDA.w RoomItemsTaken : BIT.b #$80 : BEQ .no_sound
JSR CrystalOrPendantBehavior : BCC .no_sound
SEC
RTL
.no_sound
CLC
RTL
JSL CheckBossDropTouched : BEQ .no_sound
JSR CrystalOrPendantBehavior : BCC .no_sound
SEC
RTL
.no_sound
CLC
RTL
HandleCrystalsField:
TAX
@@ -192,7 +193,7 @@ RTL
MaybeKeepLootID:
PHA
LDA.w DungeonID : BMI .no_prize
LDA.w RoomItemsTaken : BIT.b #$80 : BNE .prize
JSL CheckBossDropTouched : BNE .prize
.no_prize
STZ.w ItemReceiptID
STZ.w ItemReceiptPose
@@ -216,6 +217,15 @@ CheckSpawnPrize:
SEP #$21
RTL
CheckBossDropTouched:
; Out: z - boss drop not touched
LDA.w RoomItemsTaken
AND.b #$80
BNE .done
LDA.l BossDropTouched
.done
RTL
CheckDungeonCompletion:
LDX.w DungeonID
REP #$20
+10 -8
View File
@@ -11,14 +11,16 @@ Sprite_ResetAll: ; Bank09.asm(1344)
;================================================================================
; On Room Transition -> Move Sprite depending on the room loaded
;--------------------------------------------------------------------------------
org $828979 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $828C16 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $829338 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $828256 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
if not(!FEATURE_FIX_BASEROM)
org $828979 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $828C16 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $829338 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
org $828256 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114
JSL boss_move
endif
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
@@ -61,7 +61,3 @@ LDA.b [Scrap00],Y
org $89C416
LDA.b [Scrap00],Y
+23 -22
View File
@@ -1,7 +1,8 @@
LoadUnderworldSprites:
STA.b Scrap00 ; part one of what we replaced
LDA.w #UWSpritesData>>16 : STA.b Scrap02 ; set the bank to 28 for now
LDA.w $048E
LDA.w #UWSpritesData>>16 ; set the bank to 28 for now
STA.b Scrap02
LDA.w $048E
RTL
GetSpriteSlot16Bit:
@@ -11,37 +12,37 @@ GetSpriteSlot16Bit:
RTL
GeldmanDrawOverride:
PLA : PLA : PLA ; fix the call stack
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
PLA : PLA : PLA ; fix the call stack
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
LDA.b #$01
STA.w $0DC0,X
JML Sprite_4C_Geldman_do_indeed_draw
LDA.b #$01
STA.w $0DC0,X
JML Sprite_4C_Geldman_do_indeed_draw
.vanilla
JSL Sprite_PrepOAMCoordLong
JML Sprite_4C_Geldman_continue
JSL Sprite_PrepOAMCoordLong
JML Sprite_4C_Geldman_continue
StalfosKnightDrawOverride:
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
JSL Sprite_PrepOAMCoordLong
LDA.b #$12
JML Sprite_DrawShadowLong
JSL Sprite_PrepOAMCoordLong
LDA.b #$12
JML Sprite_DrawShadowLong
.vanilla
JSL Sprite_PrepOAMCoordLong
RTL
JSL Sprite_PrepOAMCoordLong
RTL
BlobDrawOverride:
PLA : PLA : PLA ; fix the call stack
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
PLA : PLA : PLA ; fix the call stack
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
LDA.b #$05
STA.w $0DC0,X
LDA.b #$05
STA.w $0DC0,X
JML SpriteDraw_Blob_head_popping_out
JML SpriteDraw_Blob_head_popping_out
.vanilla
JSL Sprite_PrepOAMCoordLong
JML SpriteDraw_Blob_bad_gfx
JSL Sprite_PrepOAMCoordLong
JML SpriteDraw_Blob_bad_gfx
+40 -25
View File
@@ -38,7 +38,7 @@ RTL
OnPlayerDead:
PHA
JSL SetDeathWorldChecked
JSL DynamicDropGFXClear
JSL DynamicDropGFXClear
JSL SetSilverBowMode
JSL RefreshRainAmmo
PLA
@@ -79,30 +79,20 @@ RTL
;--------------------------------------------------------------------------------
OnUncleItemGet:
PHA
LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA.l InfiniteMagic : +
BIT.b #$02 : BEQ + : STA.l InfiniteBombs : +
BIT.b #$01 : BEQ + : STA.l InfiniteArrows : +
LDA.l UncleItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem
LDA.l UncleRefill : BIT.b #$04 : BEQ + : LDA.b #$80 : STA.l MagicFiller : + ; refill magic
LDA.l UncleRefill : BIT.b #$02 : BEQ + : LDA.b #50 : STA.l BombsFiller : + ; refill bombs
LDA.l UncleRefill : BIT.b #$01 : BEQ + ; refill arrows
LDA.b #70 : STA.l ArrowsFiller
LDA.l ProgressIndicator : BNE +
LDA.b #$01 : STA.l ProgressIndicator ; set rain state
JSL SetEscapeAssist
JSL RefreshRainAmmo
; grant arrows if we started with a bow in retro mode
LDA.l ArrowMode : BEQ +
LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; enable bow toggle
REP #$20 ; set 16-bit accumulator
LDA.l CurrentRupees : !ADD.l FreeUncleItemAmount : STA.l CurrentRupees ; rupee arrows, so also give the player some money to start
SEP #$20 ; set 8-bit accumulator
LDA.l RainDeathRefillRupeeBow : ORA.l RainDeathRefillRupeeBow+1 : BEQ +
LDA.b #$01 : STA.l ArrowsFiller
+
LDA.l ProgressIndicator : BNE +
LDA.b #$01 : STA.l ProgressIndicator ; handle rain state
+
RTL
;--------------------------------------------------------------------------------
OnAga1Defeated:
@@ -201,12 +191,12 @@ OnNewFile:
STZ.w TreePullKills
STZ.w TreePullHits
STZ.w PrizePackIndexes
STZ.w PrizePackIndexes+1
STZ.w PrizePackIndexes+2
STZ.w PrizePackIndexes+3
STZ.w PrizePackIndexes+4
STZ.w PrizePackIndexes+5
STZ.w PrizePackIndexes+6
STZ.w PrizePackIndexes+1
STZ.w PrizePackIndexes+2
STZ.w PrizePackIndexes+3
STZ.w PrizePackIndexes+4
STZ.w PrizePackIndexes+5
STZ.w PrizePackIndexes+6
LDA.b #$00 : STA.l MosaicLevel
JSL InitRNGPointerTable
PLP : PLX
@@ -217,18 +207,37 @@ OnInitFileSelect:
JSL EnableForceBlank
RTL
;--------------------------------------------------------------------------------
OnGloomDamage:
LDA.b #$01
STA.l UpdateHUDFlag
LDA.l MaximumHealth
SEC : SBC.b #$08
STA.l CurrentHealth
BEQ +
STA.l MaximumHealth
+ RTL
;--------------------------------------------------------------------------------
OnLinkDamaged:
JSL IncrementDamageTakenCounter_Arb
LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom
JML OHKOTimer
.gloom
STZ.b $00
JML OnGloomDamage
;--------------------------------------------------------------------------------
;OnEnterWater:
; JSL UnequipCapeQuiet ; what we wrote over
;RTL
;--------------------------------------------------------------------------------
OnLinkDamagedFromPit:
LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom
JSL OHKOTimer
BRA +
.gloom
JSL OnGloomDamage
CLC : ADC.b #$08 : STA.l CurrentHealth
LDA.l AllowAccidentalMajorGlitch
+ LDA.l AllowAccidentalMajorGlitch
BEQ ++
-- LDA.b #$14 : STA.b GameSubMode ; thing we wrote over
@@ -240,7 +249,12 @@ OnLinkDamagedFromPit:
RTL
;--------------------------------------------------------------------------------
OnLinkDamagedFromPitOutdoors:
LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom
JML OHKOTimer ; make sure this is last
.gloom
JSL OnGloomDamage
CLC : ADC.b #$08
RTL
;--------------------------------------------------------------------------------
OnOWTransition:
JSL FloodGateReset
@@ -253,6 +267,7 @@ OnOWTransition:
RTL
;--------------------------------------------------------------------------------
OnLoadDuckMap:
JSL SelectFirstFluteSpot
LDA.l DuckMapFlag
BNE +
INC : STA.l DuckMapFlag
+6
View File
@@ -248,8 +248,12 @@ DrawPlayerFileShared:
; Flute
LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ +
LDA.l $7003C2 : AND.w #$00FF : BNE .pseudo
%fs_drawItem(7,16,FileSelectItems_flute)
BRA ++
.pseudo
%fs_drawItem(7,16,FileSelectItems_flute_green)
BRA ++
+
%fs_drawItemGray(7,16,FileSelectItems_flute)
++
@@ -539,6 +543,8 @@ FileSelectItems:
dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN
.flute
dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE
.flute_green
dw #$0266|!FS_COLOR_GREEN, #$0267|!FS_COLOR_GREEN, #$0276|!FS_COLOR_GREEN, #$0277|!FS_COLOR_GREEN
.book
dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN
.redcane
+1
View File
@@ -857,6 +857,7 @@ RTL
Kiki_DontScareTheMonke:
LDA.b LinkJumping : BEQ .return
CMP.b #$02 : BEQ .no_spook ; needed for quake usage
LDA.b GameMode : CMP.b #$0F : BEQ .no_spook ; needed for entrance transitions
LDA.w NoDamage : BNE .no_spook
LDA.w LinkThud : BNE .no_spook
.spook
+48 -41
View File
@@ -2,21 +2,28 @@
; Frame Hook
;--------------------------------------------------------------------------------
FrameHookAction:
JSL Module_MainRouting
JSL CheckMusicLoadRequest
PHP : REP #$30 : PHA
SEP #$20
LDA.l StatsLocked : BNE ++
REP #$20 ; set 16-bit accumulator
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
+
LDA.l GameMode : CMP.w #$010E : BNE ++ ; move this to nmi hook?
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
++
REP #$30 : PLA : PLP
JSL Module_MainRouting
JSL CheckMusicLoadRequest
PHP : REP #$30 : PHA
SEP #$20
LDA.l StatsLocked : BNE ++
REP #$20 ; set 16-bit accumulator
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
+
; move this to nmi hook?
LDA.l GameMode : CMP.w #$010E : BNE +
; item select menu
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
+
LDA.l GameMode : CMP.w #$030E : BEQ .map ; underworld map
LDA.l GameMode : CMP.w #$070E : BNE ++ ; overworld map
.map
LDA.l MapFrames : INC : STA.l MapFrames : BNE ++
LDA.l MapFrames+2 : INC : STA.l MapFrames+2
++
REP #$30 : PLA : PLP
RTL
!NMI_MW = "$7F5047"
@@ -47,37 +54,37 @@ JML NMIHookReturn
;--------------------------------------------------------------------------------
PostNMIHookAction:
LDA.w NMIAux : BEQ +
PHK : PEA.w .return-1 ; push stack for RTL return
JMP.w [NMIAux]
.return
STZ.w NMIAux ; zero bank byte of NMI hook pointer
+
JSR TransferItemGFX
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
LDA.w NMIAux : BEQ +
PHK : PEA.w .return-1 ; push stack for RTL return
JMP.w [NMIAux]
.return
STZ.w NMIAux ; zero bank byte of NMI hook pointer
+
JSR TransferItemGFX
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
JML PostNMIHookReturn
;--------------------------------------------------------------------------------
TransferItemGFX:
; Only used for shops now but could be used for anything. We should look at how door rando does this
; and try to unify one approach.
REP #$30
LDX.w ItemStackPtr : BEQ .done
TXA : BIT.w #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.)
DEX #2
-
LDA.l ItemGFXStack,X : STA.w ItemGFXPtr
LDA.l ItemTargetStack,X : STA.w ItemGFXTarget
PHX
JSL TransferItemToVRAM
REP #$10
PLX
DEX #2
BPL -
REP #$30
LDX.w ItemStackPtr : BEQ .done
TXA : BIT.w #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.)
DEX #2
-
LDA.l ItemGFXStack,X : STA.w ItemGFXPtr
LDA.l ItemTargetStack,X : STA.w ItemGFXTarget
PHX
JSL TransferItemToVRAM
REP #$10
PLX
DEX #2
BPL -
STZ.w ItemStackPtr
.done
SEP #$30
STZ.w ItemStackPtr
.done
SEP #$30
RTS
.fail
BRK #$00
.fail
BRK #$00
+108
View File
@@ -0,0 +1,108 @@
; we want the icons indicating what is left in a room to blink
; but we don't want to redraw to BG1 every few frames
; so we duplicate the left side of BG1 to a lower portion and just toggle vertical scroll
BlinkLoot:
; do not show icons if we're scrolling
LDA.w $0210
BNE .hide
LDA.b FrameCounter
AND.b #$20
BEQ .show
.hide
LDA.b #$01
.show
STZ.b $E6
STA.w $E7
JSL $8AE96B
RTL
StartDoubleWrite:
; what we wrote over
LDA.l DRMode
BEQ .draw
INC.w $020D ; next subsubmode
PLA : PLA : PLA ; pull our jump to here off the stack
PLB
RTL
.draw
REP #$30
STZ.w GFXStripes
STZ.w $021B
RTL
CheckDoubleWrite:
LDA.w $021C
BNE .done
LDA.b #$08
STA.w $021C
REP #$30
JML $8AE20B
.done
; what we wrote over
REP #$10
LDY.w GFXStripes
LDA.b #$FF
JML $8AE2E7
DrawMountain:
LDX.w GFXStripes
PHX
LDY.w #$0000
.next_word
LDA.w $8AEFEF, Y
STA.w GFXStripes+2, X
INX : INX
INY : INY
CPY.w #$002A
BCC .next_word
PLY
LDA.w $021B
BEQ .done
; if second copy of mountain, adjust VRAM addresses
SEP #$20
LDA.w GFXStripes+$02, Y
ORA.w $021C
STA.w GFXStripes+$02, Y
LDA.w GFXStripes+$08, Y
ORA.w $021C
STA.w GFXStripes+$08, Y
LDA.w GFXStripes+$10, Y
ORA.w $021C
STA.w GFXStripes+$10, Y
LDA.w GFXStripes+$20, Y
ORA.w $021C
STA.w GFXStripes+$20, Y
LDA.w GFXStripes+$26, Y
ORA.w $021C
STA.w GFXStripes+$26, Y
REP #$20
.done
RTL
WriteBigEndianAddressX:
ORA.w $021B
XBA
STA.w GFXStripes+2, X
AND.w #$FFF7
RTL
WriteBigEndianAddressY:
ORA.w $021B
XBA
STA.w GFXStripes+2, Y
AND.w #$FFF7
RTL
+793
View File
@@ -0,0 +1,793 @@
; A = room_id
; out A = level of loot
CheckMapLoot:
PHP
REP #$30
PHX
STA.b $CA
LDA.b $0E : PHA
LDA.l MapItems_default
AND.w #$00FF
STA.b $0E
LDA.b $CA
AND.w #$01FF
ASL A
TAX
LDA.l SaveDataWRAM, X
AND.w #$000F
BEQ +
LDA.l MapItems_visited_tile
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+ LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ .skip_dungeon_checks
TAX
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l MapItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l MapItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+
.skip_dungeon_checks
JMP GetLootLevelAndCleanUp
; A = room_id
; out A = level of loot
CheckHudLoot:
PHP
REP #$30
PHX
STA.b $CA
LDA.b $0E : PHA
+ LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ .cave
TAX
LDA.l HudItems_default_dungeon
AND.w #$00FF
STA.b $0E
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+
BRA GetLootLevelAndCleanUp
.cave
LDA.l HudItems_cave
AND.w #$00FF
STA.b $0E
; intentional fall-through
GetLootLevelAndCleanUp:
STZ.b $02
LDA.b $0E
AND.w #$00FF
BEQ +
JSL GetLootLevel
+
PLA : STA.b $0E
PLX
PLP
LDA.b $02
RTL
; $CA = room_id
; $0E = level of details to return
; (1 - presence, 2 - compass or presence, 3 - value)
; out $02 = level of loot
GetLootLevel:
PHP
REP #$30
PHB : PHX : PHY
LDA.b $06 : PHA
STZ.b $02 ; best item class found
LDA.l ItemSources : BIT.w #$0001 : BEQ +
JSR CheckChests
+
LDA.l ItemSources : BIT.w #$0002 : BEQ +
JSR CheckPots
+
LDA.l ItemSources : BIT.w #$0004 : BEQ +
JSR CheckEnemies
+
LDA.l ItemSources : BIT.w #$0008 : BEQ +
JSR CheckMisc
JSR CheckMisc2
+
LDA.l ItemSources : BIT.w #$0010 : BEQ +
JSR CheckPrize
+
JSR CheckNpcs
.done
PLA : STA.b $06
PLY : PLX : PLB
PLP
RTL
CheckChests:
LDA.b $CA
AND.w #$01FF
STA.b $00
ASL A
TAX
LDA.w #($81<<8)
PHA
PLB : PLB
LDA.w #$0008
STA.b $04
STZ.b $06
LDY.w #$FFFD
.increment_mask
LDA.b $04
ASL A
STA.b $04
.next_chest
INY #3
CPY.w #$01F8
BCS .done
LDA.w RoomData_ChestItems, Y
AND.w #$7FFF
CMP.b $00
BNE .next_chest
LDA.b $06
JSR CheckChestSection
INC.b $06
BCC .increment_mask
LDA.l SaveDataWRAM, X
AND.b $04
BNE .increment_mask ; already got item
LDA.w RoomData_ChestItems+2, Y
AND.w #$00FF
JSR GetLootClass
BRA .increment_mask
.done
RTS
CheckMisc:
; this includes bosses, bonk torches, and standing items (in caves + hera cage key)
; all dungeon items in this section are in section 1 of split sections
; for cave items we'll always know what section we're in
; but for dungeon items, we won't have a section specified in door rando
; so if we don't have a section, assume it's 1, and it'll match all the dungeon items anyway
LDA.b $CA
BIT.w #$F000
BNE +
ORA.w #$1000
+
AND.w #$F1FF
STA.b $04
LDX.w #$FFFA
.next_misc
INX #6
LDA.l MiscLocations, X
BPL .check
RTS
.check
CMP.b $04
BNE .next_misc
TXY
AND.w #$01FF
CMP.b RoomIndex
BEQ .current_room
ASL A
TAX
LDA.l SaveDataWRAM, X
BRA .continue
.current_room
LDA.w RoomItemsTaken ; if checking our current room, $0403 has fresher flags
ASL #4
.continue
STA.b $04
TYX
LDA.l MiscLocations+2, X ; get bit of room data to check
AND.w #$00FF
ASL A
TAX
LDA.l DungeonMask, X
TYX
BIT.b $04
BNE .next_misc ; continue checking if we already got the item
LDA.l MiscLocations+4, X
STA.b $05
LDA.l MiscLocations+3, X
STA.b $04
LDA.b [$04]
AND.w #$00FF
JSR GetLootClass
BRA .next_misc
CheckMisc2:
; this currently only includes the library and Uncle
; so let's just hard-code them for now
LDA.b $CA
CMP.w #$2107 : BNE +
LDA.l NpcFlags : AND.w #$0080 : BNE +
LDA.l LibraryItem : AND.w #$00FF : JSR GetLootClass
+
LDA.b $CA
CMP.w #$1055 : BNE +
LDA.l ProgressFlags : AND.w #$0001 : BNE +
LDA.l UncleItem : AND.w #$00FF : JSR GetLootClass
+
RTS
CheckPrize:
LDA.b $CA
AND.w #$01FF
STA.b $04
LDX.w #$FFFD
.next_prize
INX #3
LDA.l PrizeLocations, X
BPL .check
RTS
.check
CMP.b $04
BNE .next_prize
TXY
ASL A
TAX
LDA.l SaveDataWRAM, X
TYX
BIT.w #$0800
BNE .next_prize
LDA.l PrizeLocations+2, X ; get which prize to look at
AND.w #$00FF
TAX
LDA.l DungeonPrizeReceiptID, X
TYX
AND.w #$00FF
JSR GetLootClass
BRA .next_prize
CheckNpcs:
LDA.b $CA
LDX.w #$FFFA
.next_npc
INX #6
LDA.l NpcItems, X
BMI .nope
CMP.b $CA
BNE .next_npc
LDA.l NpcItems+3, X ; get location of data to check
STA.b $05
LDA.l NpcItems+2, X
STA.b $04
LDA.b [$04]
AND.w #$00FF
AND.l NpcItems+5, X
BNE .next_npc
.yep
LDA.w NpcItemIndicator
ORA.w #$0001
STA.w NpcItemIndicator
RTS
.nope
LDA.w NpcItemIndicator
AND.w #$FF00
STA.w NpcItemIndicator
RTS
CheckPots:
LDA.b $CA
AND.w #$01FF
ASL A
TAX
LDA.l UWPotsPointers, X
STA.b $04
LDA.w #bank(UWPotsData)
STA.b $06
LDY.w #$0000
LDX.w #$FFFF
.next_pot
LDA.b [$04], Y
CMP.w #$FFFF : BEQ .done
INX : INY : INY
BIT.w #$4000 : BNE .multi_item ; marked as multi item
BIT.w #$8000 : BNE .major_item ; marked as major item
LDA.b [$04], Y
AND.w #$00FF
CMP.w #$0008 : BEQ .small_key
LDA.l PotCountMode
BEQ +
JSR CheckJunkPot
+
INY
BRA .next_pot
.small_key
LDA.w #$8000 : STA.b $08
LDA.w #$0024
PHA
PHX
INY
BRA .mask_set
.multi_item
LDA.b [$04], Y
PHX
AND.w #$00FF
ASL A
TAX
LDA.l PotMultiWorldTable, X
PLX
BRA .item_id_set
.major_item
LDA.b [$04], Y
.item_id_set
PHA
PHX
INY
TXA : ASL A
TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set
TXA
JSR CheckPotSection
BCS +
PLX
PLA
BRA .next_pot
+
LDA.b $CA
AND.w #$01FF
ASL A
TAX
if !FEATURE_FIX_BASEROM
LDA.l SpriteDropData, X
else
LDA.l RoomPotData, X
endif
PLX
AND.b $08
BEQ .not_obtained
PLA
BRA .next_pot
.not_obtained
PLA
AND.w #$00FF
JSR GetLootClass
BRA .next_pot
.done
RTS
CheckJunkPot:
LDA.b [$04], Y
PHA
PHX
TXA : ASL A : TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A
JSR CheckPotSection
BCS +
PLX
PLA
RTS
+
LDA.b $CA
AND.w #$01FF
ASL A
TAX
LDA.l PotCollectionRateTable, X
AND.b $08
BEQ .not_important
if !FEATURE_FIX_BASEROM
LDA.l SpriteDropData, X
else
LDA.l RoomPotData, X
endif
AND.b $08
BNE .not_important
PLX
PLA
AND.w #$00FF
JSR GetPotJunkClass
RTS
.not_important
PLX
PLA
RTS
CheckEnemies:
LDA.b $CA
AND.w #$01FF
ASL A
TAX
; get sprite pointer table
LDA.l $89C298 : STA.b $04
LDA.w #$0089 : STA.b $06
TXY
; get sprite pointer for room
LDA.b [$04], Y
INC A ; skip the layered/unlayered indicator
STA.b $04
LDA.w #bank(UWSpritesData)
STA.b $06
LDY.w #$0000
LDX.w #$FFFF
.next_enemy
LDA.b [$04], Y
AND.w #$00FF
CMP.w #$00FF
BNE +
JMP .done
+
LDA.b [$04], Y
AND.w #$E000
CMP.w #$E000
BEQ .overlord
INY : INY
LDA.b [$04], Y
AND.w #$00FF
CMP.w #$00F8 : BEQ .major ; major item
CMP.w #$00F9 : BEQ .major ; major item in other world
CMP.w #$00E4 : BEQ .vanilla_key
INY
INX
BRA .next_enemy
.overlord
INY : INY : INY
BRA .next_enemy
.vanilla_key
DEY : DEY
LDA.w #$8000 : STA.b $08
LDA.b [$04], Y
INY #3
AND.w #$00FF
CMP.w #$00FD ; big key
BEQ .big_key
CMP.w #$00FE ; small key
BEQ .small_key
; false alarm -- probably hera basement key
INX ; since it's an actual sprite it advances the counter
BRA .next_enemy
.small_key
LDA.w #$0024
PHA : PHX
BRA .mask_set
.big_key
LDA.w #$0032
PHA : PHX
BRA .mask_set
.major
DEY : DEY
LDA.b [$04], Y
AND.w #$00FF
.proceed
INY : INY : INY
PHA
PHX
TXA : ASL A
TAX
LDA.l DungeonMask, X : STA.b $08
TXA : LSR A : TAX
.mask_set
TXA
JSR CheckEnemySection
BCS +
PLX
PLA
JMP .next_enemy
+
LDA.b $CA
AND.w #$01FF
ASL A
TAX
LDA.l SpriteDropData, X
PLX
AND.b $08
BEQ .not_obtained
PLA
JMP .next_enemy
.not_obtained
PLA
AND.w #$00FF
JSR GetLootClass
JMP .next_enemy
.done
RTS
; A = item id
; updates "best loot" value if better
GetLootClass:
PHX
TAX
CMP.w #$0025 : BEQ .compass
AND.w #$00F0
CMP.w #$0080 : BNE .not_compass
.compass
LDA.b $0E
AND.w #$00FF
CMP.w #$0002
BEQ .check_value
.not_compass
LDA.b $0E
BEQ .done
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
LDA.l LootTypeMapping, X
AND.w #$00FF
.value_set
CMP.b $02
BCC .done
STA.b $02
.done
PLX
RTS
; A = item id
; updates "best loot" value if better
GetPotJunkClass:
PHX
TAX
LDA.b $0E
BEQ .done
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
; hardcode as junk for now
LDA.w #$0002
.value_set
CMP.b $02
BCC .done
STA.b $02
.done
PLX
RTS
macro DefineGetFooSection(type, offset)
Get<type>Section:
PHX
LDA.b $CA
AND.w #$01FF
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $CE
BEQ .found
INX
.check_next_section
PHX
LDA.l SplitRooms+<offset>, X
TAX
-
LDA.l SplitRooms, X
AND.w #$00FF
CMP.w #$00FF
BEQ .not_this_section
CMP.b $CC
BEQ .plx_found
INX
BRA -
.not_this_section
PLX
TXA : CLC : ADC.w #$000D : TAX
DEC.b $CE
BNE .check_next_section
BRA .found
.plx_found
PLX
.found
PLX
LDA.b $CE
RTS
endmacro
macro DefineCheckFooSection(type)
Check<type>Section:
STA.b $CC
LDA.b $CB
AND.w #$00F0
BEQ .yes
JSR Get<type>Section
LDA.b $CB
AND.w #$00F0
LSR A : LSR A : LSR A : LSR A
DEC A
CMP.b $CE
BEQ .yes
.no
CLC
RTS
.yes
SEC
RTS
endmacro
%DefineGetFooSection(Door, 3)
%DefineGetFooSection(Stair, 5)
%DefineGetFooSection(Chest, 7)
%DefineGetFooSection(Pot, 9)
%DefineGetFooSection(Enemy, 11)
%DefineCheckFooSection(Door)
%DefineCheckFooSection(Stair)
%DefineCheckFooSection(Chest)
%DefineCheckFooSection(Pot)
%DefineCheckFooSection(Enemy)
GetIncomingStairSection:
PHX
AND.w #$0300
XBA
ASL A
TAX
LDA.l $8098D8, X
STA.b $CC
LDA.b $CA
AND.w #$00FF
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $CE
BEQ .found
INX
.check_next_section
LDA.l SplitRooms+0, X
AND.w #$00FF
AND.b $CC
BNE .found
TXA : CLC : ADC.w #$000D : TAX
DEC.b $CE
BNE .check_next_section
BRA .found
.found
PLX
LDA.b $CE
RTS
+52
View File
@@ -0,0 +1,52 @@
pushpc
org $87A46E
JSL CheckBookTriggerSwitch
BCS +
skip 15
+
org $8296A8
JSL FinishPegChange
pullpc
FinishPegChange:
LDA.b #$20
TRB.w $037A
STZ.b $B0
STZ.b $11
RTL
CheckBookTriggerSwitch:
LDA.l CrystalSwitchBook
BEQ +
LDA.b $10
CMP.b #$07
BNE +
LDA.l $7EC172
EOR.b #$01
STA.l $7EC172
LDA.b #$16
STA.b $11
LDA.b #$20
TSB.w $037A
LDA.b #$25
JSL $8DBB8A
SEC
BRA .done
+ CLC
.done
; what we wrote over
LDA.b $3A
AND.b #$BF
STA.b $3A
RTL
+43
View File
@@ -0,0 +1,43 @@
DoorConnectionTiles:
.vertical
dw $0000, $0000 ; $00
dw $01C0, $0000 ; $01 left -> left
dw $01D0, $01D1 ; $02 left -> middle
dw $81C3, $41C3 ; $03 left -> right
dw $81D0, $81D1 ; $04 middle -> left
dw $01C1, $41C1 ; $05 middle -> middle
dw $C1D1, $C1D0 ; $06 middle -> right
dw $01C3, $C1C3 ; $07 right -> left
dw $41D1, $41D0 ; $08 right -> middle
dw $0000, $01C0 ; $09 right -> right
dw $41C2, $41C1 ; $0A left-middle -> left-middle
dw $81D2, $C1D0 ; $0B left-middle -> left-right
dw $41D3, $81D3 ; $0C left-middle -> middle-right
dw $01D2, $41D0 ; $0D left-right -> left-middle
dw $01C0, $01C0 ; $0E left-right -> left-right
dw $01D0, $41D2 ; $0F left-right -> middle-right
dw $C1D3, $01D3 ; $10 middle-right -> left-middle
dw $81D0, $C1D2 ; $11 middle-right -> left-right
dw $01C1, $01C2 ; $12 middle-right -> middle-right
dw $41C2, $01C2 ; $13 triple -> triple
.horizontal
dw $0300, $0300 ; $00
dw $01C4, $0300 ; $01 top -> top
dw $C1D4, $C1D5 ; $02 top -> middle
dw $81C7, $41C7 ; $03 top -> bottom
dw $81D4, $81D5 ; $04 middle -> top
dw $01C5, $81C5 ; $05 middle -> middle
dw $01D5, $01D4 ; $06 middle -> bottom
dw $C1C7, $01C7 ; $07 bottom -> top
dw $41D5, $41D4 ; $08 bottom -> middle
dw $0300, $01C4 ; $09 bottom -> bottom
dw $41C6, $41C5 ; $0A top-middle -> top-middle
dw $41D6, $01D4 ; $0B top-middle -> top-bottom
dw $41D7, $81D7 ; $0C top-middle -> middle-bottom
dw $01D6, $41D4 ; $0D top-bottom -> top-middle
dw $01C4, $01C4 ; $0E top-bottom -> top-bottom
dw $C1D4, $81D6 ; $0F top-bottom -> middle-bottom
dw $C1D7, $01D7 ; $10 middle-bottom -> top-middle
dw $81D4, $C1D6 ; $11 middle-bottom -> top-bottom
dw $01C5, $01C6 ; $12 middle-bottom -> middle-bottom
dw $81C6, $01C6 ; $13 triple -> triple
+309
View File
@@ -0,0 +1,309 @@
DoorSlotsSprites:
; center
dw $48A8
; north
dw $2090, $20A8, $20C0
dw $2098, $20B8
; west
dw $3080, $4880, $6080
dw $3880, $5880
; south
dw $7090, $70A8, $70C0
dw $7098, $70B8
; east
dw $30D0, $48D0, $60D0
dw $38D0, $58D0
; stairs
dw $B080, $B098, $B0B0
; drop/warp
dw $B0D0
DoorSlotsBG1:
; center
dw $1135
; north
dw $1092, $1095, $1098
dw $1093, $1097
; west
dw $10D0, $1130, $1190
dw $10F0, $1170
; south
dw $11D2, $11D5, $11D8
dw $11D3, $11D7
; east
dw $10DA, $113A, $119A
dw $10FA, $117A
; stairs
dw $12D0, $12D3, $12D6
; drop/warp
dw $12DA
DoorSlotsBG2:
; center
dw $0000
; north
dw $FEBA, $FEC0, $FEC6
dw $FEBC, $FEC4
; west
dw $FF36, $FFF6, $00B6
dw $FF76, $0076
; south
dw $013A, $0140, $0146
dw $013C, $0144
; east
dw $FF4A, $000A, $00CA
dw $FF8A, $008A
; stairs
dw $0336, $033C, $0342
; drop/warp
dw $034A
DoorSlotSides:
db $02, $0C, $16, $20
DoorSlotOffsets:
db $02, $02, $06, $00
; up, left, down, right
NextCursorSlot:
db $80, $81, $82, $83
; top
db $FF, $C1, $00, $04
db $FF, $04, $00, $05
db $FF, $05, $00, $C3
db $FF, $01, $00, $02
db $FF, $02, $00, $03
; left
db $C0, $FF, $09, $00
db $09, $FF, $0A, $00
db $0A, $FF, $C2, $00
db $06, $FF, $07, $00
db $07, $FF, $08, $00
; bottom
db $00, $E1, $85, $0E
db $00, $0E, $85, $0F
db $00, $0F, $85, $E3
db $00, $0B, $85, $0C
db $00, $0C, $85, $0D
; right
db $E0, $00, $13, $FF
db $13, $00, $14, $FF
db $14, $00, $E2, $FF
db $10, $00, $11, $FF
db $11, $00, $12, $FF
; stairs
db $84, $18, $FF, $16
db $84, $15, $FF, $17
db $84, $16, $FF, $18
; drop/warp
db $84, $17, $FF, $15
NextCursorSpecial:
.center
db $02, $04, $05, $01, $03, $FF
db $07, $09, $0A, $06, $08, $FF
db $0C, $0E, $0F, $0B, $0D, $15, $16, $17, $18, $FF
db $11, $13, $14, $10, $12, $FF
db $0C, $0E, $0F, $0B, $0D, $00, $FF
db $17, $16, $15, $18, $FF
.center_offset
db $00, $06, $0C, $16, $1C, $23
.start_index
db $01, $06, $0B, $10, $15
.start_direction
db $03, $02, $03, $02, $03
.end_index
db $03, $08, $0D, $12, $18
.end_direction
db $01, $00, $01, $00, $01
SingleEdgeCurrentRoomConnectors:
.north
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
dw $01C1, $41C1, $81D0, $81D1, $01C0, $0300 ; left -> middle
dw $41D1, $41D0, $01C1, $41C1, $81D0, $81D1 ; left -> right
dw $01C0, $0300, $01D0, $01D1, $01C1, $41C1 ; middle -> left
dw $01C1, $41C1, $01C1, $41C1, $01C1, $41C1 ; middle -> middle
dw $0300, $01C0, $41D1, $41D0, $01C1, $41C1 ; middle -> right
dw $01D0, $01D1, $01C1, $41C1, $C1D1, $C1D0 ; right -> left
dw $01C1, $41C1, $C1D1, $C1D0, $0300, $01C0 ; right -> middle
dw $0300, $01C0, $0300, $01C0, $0300, $01C0 ; right -> right
.west
dw $01C4, $01C4, $01C4, $0300, $0300, $0300 ; top -> top
dw $01C5, $81D4, $01C4, $C1C5, $81D5, $0300 ; top -> middle
dw $41D5, $01C5, $81D4, $41D4, $C1C5, $81D5 ; top -> bottom
dw $01C4, $C1D4, $01C5, $0300, $C1D5, $C1C5 ; middle -> top
dw $01C5, $01C5, $01C5, $C1C5, $C1C5, $C1C5 ; middle -> middle
dw $0300, $41D5, $01C5, $01C4, $41D4, $C1C5 ; middle -> bottom
dw $C1D4, $01C5, $01D5, $C1D5, $C1C5, $01D4 ; bottom -> top
dw $01C5, $01D5, $0300, $C1C5, $01D4, $01C4 ; bottom -> middle
dw $0300, $0300, $0300, $01C4, $01C4, $01C4 ; bottom -> bottom
.south
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
dw $01C0, $0300, $01D0, $01D1, $01C1, $41C1 ; left -> middle
dw $01D0, $01D1, $01C1, $41C1, $C1D1, $C1D0 ; left -> right
dw $01C1, $41C1, $81D0, $81D1, $01C0, $0300 ; middle -> left
dw $01C1, $41C1, $01C1, $41C1, $01C1, $41C1 ; middle -> middle
dw $01C1, $41C1, $C1D1, $C1D0, $0300, $01C0 ; middle -> right
dw $41D1, $41D0, $01C1, $41C1, $81D0, $81D1 ; right -> left
dw $0300, $01C0, $41D1, $41D0, $01C1, $41C1 ; right -> middle
dw $0300, $01C0, $0300, $01C0, $0300, $01C0 ; right -> right
.east
dw $01C4, $01C4, $01C4, $0300, $0300, $0300 ; top -> top
dw $01C4, $C1D4, $01C5, $0300, $C1D5, $81C5 ; top -> middle
dw $C1D4, $01C5, $01D5, $C1D5, $81C5, $01D4 ; top -> bottom
dw $01C5, $81D4, $01C4, $81C5, $81D5, $0300 ; middle -> top
dw $01C5, $01C5, $01C5, $81C5, $81C5, $81C5 ; middle -> middle
dw $01C5, $01D5, $0300, $81C5, $01D4, $01C4 ; middle -> bottom
dw $41D5, $01C5, $81D4, $41D4, $81C5, $81D5 ; bottom -> top
dw $0300, $41D5, $01C5, $01C4, $41D4, $81C5 ; bottom -> middle
dw $0300, $0300, $0300, $01C4, $01C4, $01C4 ; bottom -> bottom
QuadrantMasks:
; north
dw $0008, $000C, $0004
; west
dw $0008, $000A, $0002
; south
dw $0002, $0003, $0001
; east
dw $0004, $0005, $0001
EntranceQuadrantMasks:
dw $0002
dw $0003
dw $0001
DropdownQuadrantMasks:
dw $0008
dw $000C
dw $0004
MultiConnectorMapping:
.two
db $02, $00
.three
db $02, $01, $00
MultiConnectorTiles:
.north
..two
dw $41C7, $81C7, $C1C7, $01C7
..three
dw $41C7, $01C4, $81F7, $C1F7, $01C4, $01C7
.west
..two
dw $81C7, $41C7, $C1C7, $01C7
..three
dw $81C7, $01C0, $41E7, $C1E7, $01C0, $01C7
.south
..two
dw $C1C7, $01C7, $41C7, $81C7
..three
dw $C1C7, $01C4, $01F7, $41F7, $01C4, $81C7
.east
..two
dw $C1C7, $01C7, $81C7, $41C7
..three
dw $C1C7, $01C0, $01E7, $81E7, $01C0, $41C7
.direction_index
db $00, $14, $28, $3C
.start_offset
..two
dw $FF7E, $FFBC, $00BE, $FFC6
..three
dw $FF7C, $FF7C, $00BC, $FF86
.increment
db $02, $40
EdgePositions:
.north
db $01, $00 ; HC Basement
db $02 ; Desert West Wing
db $00, $01, $02 ; Desert Lobby
db $00 ; Desert East Wing
db $01, $02 ; TT
db $00, $01 ; different TT
.west
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $00, $02 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest
.south
db $01, $00 ; HC Basement
db $02 ; Desert West Wing
db $00, $01, $02 ; Desert Lobby
db $00 ; Desert East Wing
db $01, $02 ; TT
db $00, $01 ; different TT
.east
db $02 ; TT Attic
db $02, $02 ; Desert North Hall
db $02, $00 ; HC Basement
db $00 ; Desert East Wing
db $02, $00 ; TT Triple
db $02 ; TT Big Key Chest
EdgeConnectionIndices:
; North
dw $0182, $0000
dw $0082, $0003
dw $0283, $0006
dw $0084, $0009
dw $0184, $000C
dw $0284, $000F
dw $0085, $0012
dw $01DB, $0015
dw $02DB, $0018
dw $00DC, $001B
dw $01DC, $001E
; South
dw $0772, $0021
dw $0672, $0024
dw $0873, $0027
dw $0674, $002A
dw $0774, $002D
dw $0874, $0030
dw $0675, $0033
dw $07CB, $0036
dw $08CB, $0039
dw $06CC, $003C
dw $07CC, $003F
; West
dw $0565, $0042
dw $0574, $0045
dw $0575, $0048
dw $0582, $004B
dw $0382, $004E
dw $0385, $0051
dw $05CC, $0054
dw $03CC, $0057
dw $05DC, $005A
; East
dw $0B64, $005D
dw $0B73, $0060
dw $0B74, $0063
dw $0981, $0066
dw $0B81, $0069
dw $0984, $006C
dw $0BCB, $006F
dw $09CB, $0072
dw $0BDB, $0075
dw $FFFF
InRoomConnectionIndices:
dw $020B, $0000
dw $081B, $0002
dw $023F, $0004
dw $081F, $0006
dw $007E, $0008
dw $065E, $000A
dw $0296, $000C
dw $083D, $000E
dw $FFFF
+26
View File
@@ -0,0 +1,26 @@
dw $200C
dw $100E
dw $2012
dw $1023
dw $1024
dw $2028
dw $204A
dw $4056
dw $4057
dw $4058
dw $4059
dw $1060
dw $2061
dw $4062
dw $4063
dw $2077
dw $4083
dw $2084
dw $1085
dw $4098
dw $20C9
dw $40D5
dw $10D6
dw $20DB
dw $40E0
dw $FFFF
+38
View File
@@ -0,0 +1,38 @@
FallTable:
dw $1007, $1017 ; Moldorm Arena
dw $1017, $1027 ; Below Moldorm drop to Big Chest
dw $101E, $103E ; IP first drop
dw $1027, $1031 ; ToH Big Chest drop
dw $1031, $1077 ; Second Floor ToH
dw $1039, $1029 ; Mothula drop
dw $103A, $100A ; Pod front drop
dw $103D, $1096 ; GT Torches drop
dw $104D, $10A6 ; Moldorm 2 drop
dw $1054, $1034 ; Left side Swamp
dw $105E, $107E ; IP drop to tall icy room
dw $107E, $109E ; Freezors drop (to big chest)
dw $208C, $101C ; Ice Armos drop
dw $1097, $10D1 ; Mire Cutscene
dw $109E, $10BE ; IP Big Chest tile (push blocks)
dw $10CE, $10DE ; Kholdstare drop
; db $65, $AC ; TT Attic
; db $77, $A7 ; ToH drop to fairy room (Herapot)
; db $A9, $89 ; EP drop to fairy room
; db $BE, $4F ; IP drop to fairy room
dw $FFFF
WarpTable:
dw $2009, $104B ; PoD Basement (start)
dw $100A, $1009 ; PoD Stalfos Basement
dw $100B, $206A ; PoD Turtle Room to Boss
dw $104B, $2009 ; PoD Basement (mimics)
dw $207B, $209D ; GT post-compass island hardhat
dw $207D, $109B ; GT warp maze
dw $109D, $307B ; GT compass room
dw $109B, $207D ; GT warp maze
dw $10B1, $20B2 ; South of Fishbone warp
dw $10D1, $10B1 ; Mire Big Key Chest warp
; db $89, $A9 ; EP Fairy Room
; db $A7, $17 ; ToH Fairy Room
; db $4F, $BE ; IP Fairy Room
dw $FFFF
+276
View File
@@ -0,0 +1,276 @@
!TIER_UNKNOWN = $01
!TIER_JUNK = $02
!TIER_LOW_KEY = $03
!TIER_HEALTH = $05
!TIER_MINOR = $06
!TIER_COMPASS = $07
!TIER_MAP = $08
!TIER_SM_KEY = $09
!TIER_BIG_KEY = $0A
!TIER_MAJOR = $0B
!TIER_PENDANT = $0C
!TIER_CRYSTAL = $0D
!TIER_TFP = $0E
!TIER_TFORCE = $0F
db !TIER_MAJOR ; 00 - Fighter Sword and Shield
db !TIER_MAJOR ; 01 - Master Sword
db !TIER_MAJOR ; 02 - Tempered Sword
db !TIER_MAJOR ; 03 - Butter Sword
db !TIER_JUNK ; 04 - Fighter Shield
db !TIER_MINOR ; 05 - Fire Shield
db !TIER_MINOR ; 06 - Mirror Shield
db !TIER_MAJOR ; 07 - Fire Rod
db !TIER_MAJOR ; 08 - Ice Rod
db !TIER_MAJOR ; 09 - Hammer
db !TIER_MAJOR ; 0A - Hookshot
db !TIER_MAJOR ; 0B - Bow
db !TIER_MINOR ; 0C - Boomerang
db !TIER_MINOR ; 0D - Powder
db !TIER_JUNK ; 0E - Bottle Refill (bee)
db !TIER_MAJOR ; 0F - Bombos
db !TIER_MAJOR ; 10 - Ether
db !TIER_MAJOR ; 11 - Quake
db !TIER_MAJOR ; 12 - Lamp
db !TIER_MINOR ; 13 - Shovel
db !TIER_MAJOR ; 14 - Flute
db !TIER_MAJOR ; 15 - Somaria
db !TIER_MINOR ; 16 - Bottle
db !TIER_HEALTH ; 17 - Heartpiece
db !TIER_MINOR ; 18 - Byrna
db !TIER_MINOR ; 19 - Cape
db !TIER_MAJOR ; 1A - Mirror
db !TIER_MAJOR ; 1B - Glove
db !TIER_MAJOR ; 1C - Mitts
db !TIER_MAJOR ; 1D - Book
db !TIER_MAJOR ; 1E - Flippers
db !TIER_MAJOR ; 1F - Pearl
db !TIER_CRYSTAL ; 20 - Crystal
db !TIER_MINOR ; 21 - Net
db !TIER_MINOR ; 22 - Blue Mail
db !TIER_MINOR ; 23 - Red Mail
db !TIER_SM_KEY ; 24 - Small Key
db !TIER_COMPASS ; 25 - Compass
db !TIER_HEALTH ; 26 - Heart Container from 4/4
db !TIER_JUNK ; 27 - Bomb
db !TIER_JUNK ; 28 - 3 bombs
db !TIER_MINOR ; 29 - Mushroom
db !TIER_MINOR ; 2A - Red boomerang
db !TIER_MINOR ; 2B - Full bottle (red)
db !TIER_MINOR ; 2C - Full bottle (green)
db !TIER_MINOR ; 2D - Full bottle (blue)
db !TIER_HEALTH ; 2E - Potion refill (red)
db !TIER_HEALTH ; 2F - Potion refill (green)
db !TIER_HEALTH ; 30 - Potion refill (blue)
db !TIER_JUNK ; 31 - 10 bombs
db !TIER_BIG_KEY ; 32 - Big key
db !TIER_MAP ; 33 - Map
db !TIER_JUNK ; 34 - 1 rupee
db !TIER_JUNK ; 35 - 5 rupees
db !TIER_JUNK ; 36 - 20 rupees
db !TIER_PENDANT ; 37 - Green pendant
db !TIER_PENDANT ; 38 - Blue pendant
db !TIER_PENDANT ; 39 - Red pendant
db !TIER_MAJOR ; 3A - Tossed bow
db !TIER_MAJOR ; 3B - Silvers
db !TIER_MINOR ; 3C - Full bottle (bee)
db !TIER_MINOR ; 3D - Full bottle (fairy)
db !TIER_HEALTH ; 3E - Boss heart
db !TIER_HEALTH ; 3F - Sanc heart
db !TIER_JUNK ; 40 - 100 rupees
db !TIER_JUNK ; 41 - 50 rupees
db !TIER_JUNK ; 42 - Heart
db !TIER_JUNK ; 43 - Arrow
db !TIER_JUNK ; 44 - 10 arrows
db !TIER_JUNK ; 45 - Small magic
db !TIER_JUNK ; 46 - 300 rupees
db !TIER_JUNK ; 47 - 20 rupees green
db !TIER_MINOR ; 48 - Full bottle (good bee)
db !TIER_MAJOR ; 49 - Tossed fighter sword
db !TIER_MAJOR ; 4A - Active Flute
db !TIER_MAJOR ; 4B - Boots
db !TIER_MINOR ; 4C - Bomb capacity (50)
db !TIER_MINOR ; 4D - Arrow capacity (70)
db !TIER_MINOR ; 4E - 1/2 magic
db !TIER_MINOR ; 4F - 1/4 magic
db !TIER_MAJOR ; 50 - Safe master sword
db !TIER_MINOR ; 51 - Bomb capacity (+5)
db !TIER_MINOR ; 52 - Bomb capacity (+10)
db !TIER_MINOR ; 53 - Arrow capacity (+5)
db !TIER_MINOR ; 54 - Arrow capacity (+10)
db !TIER_JUNK ; 55 - Programmable item 1
db !TIER_JUNK ; 56 - Programmable item 2
db !TIER_JUNK ; 57 - Programmable item 3
db !TIER_MAJOR ; 58 - Upgrade-only silver arrows
db !TIER_JUNK ; 59 - Rupoor
db !TIER_JUNK ; 5A - Nothing
db !TIER_JUNK ; 5B - Red clock
db !TIER_JUNK ; 5C - Blue clock
db !TIER_JUNK ; 5D - Green clock
db !TIER_MAJOR ; 5E - Progressive sword
db !TIER_MINOR ; 5F - Progressive shield
db !TIER_MINOR ; 60 - Progressive armor
db !TIER_MAJOR ; 61 - Progressive glove
db !TIER_JUNK ; 62 - RNG pool item (single)
db !TIER_JUNK ; 63 - RNG pool item (multi)
db !TIER_MAJOR ; 64 - Progressive bow
db !TIER_MAJOR ; 65 - Progressive bow
db !TIER_JUNK ; 66 -
db !TIER_JUNK ; 67 -
db !TIER_JUNK ; 68 -
db !TIER_JUNK ; 69 -
db !TIER_TFORCE ; 6A - Triforce
db !TIER_TFP ; 6B - Power star
db !TIER_TFP ; 6C - Triforce Piece
db !TIER_JUNK ; 6D - Server request item
db !TIER_JUNK ; 6E - Server request item (dungeon drop)
db !TIER_JUNK ; 6F -
db !TIER_MAP ; 70 - Map of Light World
db !TIER_MAP ; 71 - Map of Dark World
db !TIER_MAP ; 72 - Map of Ganon's Tower
db !TIER_MAP ; 73 - Map of Turtle Rock
db !TIER_MAP ; 74 - Map of Thieves' Town
db !TIER_MAP ; 75 - Map of Tower of Hera
db !TIER_MAP ; 76 - Map of Ice Palace
db !TIER_MAP ; 77 - Map of Skull Woods
db !TIER_MAP ; 78 - Map of Misery Mire
db !TIER_MAP ; 79 - Map of Dark Palace
db !TIER_MAP ; 7A - Map of Swamp Palace
db !TIER_MAP ; 7B - Map of Agahnim's Tower
db !TIER_MAP ; 7C - Map of Desert Palace
db !TIER_MAP ; 7D - Map of Eastern Palace
db !TIER_MAP ; 7E - Map of Hyrule Castle
db !TIER_MAP ; 7F - Map of Sewers
db !TIER_COMPASS ; 80 - Compass of Light World
db !TIER_COMPASS ; 81 - Compass of Dark World
db !TIER_COMPASS ; 82 - Compass of Ganon's Tower
db !TIER_COMPASS ; 83 - Compass of Turtle Rock
db !TIER_COMPASS ; 84 - Compass of Thieves' Town
db !TIER_COMPASS ; 85 - Compass of Tower of Hera
db !TIER_COMPASS ; 86 - Compass of Ice Palace
db !TIER_COMPASS ; 87 - Compass of Skull Woods
db !TIER_COMPASS ; 88 - Compass of Misery Mire
db !TIER_COMPASS ; 89 - Compass of Dark Palace
db !TIER_COMPASS ; 8A - Compass of Swamp Palace
db !TIER_COMPASS ; 8B - Compass of Agahnim's Tower
db !TIER_COMPASS ; 8C - Compass of Desert Palace
db !TIER_COMPASS ; 8D - Compass of Eastern Palace
db !TIER_COMPASS ; 8E - Compass of Hyrule Castle
db !TIER_COMPASS ; 8F - Compass of Sewers
db !TIER_BIG_KEY ; 90 - Skull key
db !TIER_BIG_KEY ; 91 - Reserved
db !TIER_BIG_KEY ; 92 - Big key of Ganon's Tower
db !TIER_BIG_KEY ; 93 - Big key of Turtle Rock
db !TIER_BIG_KEY ; 94 - Big key of Thieves' Town
db !TIER_BIG_KEY ; 95 - Big key of Tower of Hera
db !TIER_BIG_KEY ; 96 - Big key of Ice Palace
db !TIER_BIG_KEY ; 97 - Big key of Skull Woods
db !TIER_BIG_KEY ; 98 - Big key of Misery Mire
db !TIER_BIG_KEY ; 99 - Big key of Dark Palace
db !TIER_BIG_KEY ; 9A - Big key of Swamp Palace
db !TIER_BIG_KEY ; 9B - Big key of Agahnim's Tower
db !TIER_BIG_KEY ; 9C - Big key of Desert Palace
db !TIER_BIG_KEY ; 9D - Big key of Eastern Palace
db !TIER_BIG_KEY ; 9E - Big key of Hyrule Castle
db !TIER_BIG_KEY ; 9F - Big key of Sewers
db !TIER_SM_KEY ; A0 - Small key of Sewers
db !TIER_SM_KEY ; A1 - Small key of Hyrule Castle
db !TIER_SM_KEY ; A2 - Small key of Eastern Palace
db !TIER_SM_KEY ; A3 - Small key of Desert Palace
db !TIER_SM_KEY ; A4 - Small key of Agahnim's Tower
db !TIER_SM_KEY ; A5 - Small key of Swamp Palace
db !TIER_SM_KEY ; A6 - Small key of Dark Palace
db !TIER_SM_KEY ; A7 - Small key of Misery Mire
db !TIER_SM_KEY ; A8 - Small key of Skull Woods
db !TIER_SM_KEY ; A9 - Small key of Ice Palace
db !TIER_SM_KEY ; AA - Small key of Tower of Hera
db !TIER_SM_KEY ; AB - Small key of Thieves' Town
db !TIER_SM_KEY ; AC - Small key of Turtle Rock
db !TIER_SM_KEY ; AD - Small key of Ganon's Tower
db !TIER_JUNK ; AE - Reserved
db !TIER_LOW_KEY ; AF - Generic small key
db !TIER_CRYSTAL ; B0 - Crystal 6
db !TIER_CRYSTAL ; B1 - Crystal 1
db !TIER_CRYSTAL ; B2 - Crystal 5
db !TIER_CRYSTAL ; B3 - Crystal 7
db !TIER_CRYSTAL ; B4 - Crystal 2
db !TIER_CRYSTAL ; B5 - Crystal 4
db !TIER_CRYSTAL ; B6 - Crystal 3
db !TIER_JUNK ; B7 - Reserved
db !TIER_JUNK ; B8 -
db !TIER_JUNK ; B9 -
db !TIER_JUNK ; BA -
db !TIER_JUNK ; BB -
db !TIER_JUNK ; BC -
db !TIER_JUNK ; BD -
db !TIER_JUNK ; BE -
db !TIER_JUNK ; BF -
db !TIER_JUNK ; C0 -
db !TIER_JUNK ; C1 -
db !TIER_JUNK ; C2 -
db !TIER_JUNK ; C3 -
db !TIER_JUNK ; C4 -
db !TIER_JUNK ; C5 -
db !TIER_JUNK ; C6 -
db !TIER_JUNK ; C7 -
db !TIER_JUNK ; C8 -
db !TIER_JUNK ; C9 -
db !TIER_JUNK ; CA -
db !TIER_JUNK ; CB -
db !TIER_JUNK ; CC -
db !TIER_JUNK ; CD -
db !TIER_JUNK ; CE -
db !TIER_JUNK ; CF -
db !TIER_JUNK ; D0 - Bee trap
db !TIER_JUNK ; D1 - Apples
db !TIER_JUNK ; D2 - Fairy
db !TIER_JUNK ; D3 - Chicken
db !TIER_JUNK ; D4 - Big Magic
db !TIER_JUNK ; D5 - 5 Arrows
db !TIER_JUNK ; D6 - Good Bee
db !TIER_JUNK ; D7 -
db !TIER_JUNK ; D8 -
db !TIER_JUNK ; D9 -
db !TIER_JUNK ; DA -
db !TIER_JUNK ; DB -
db !TIER_JUNK ; DC -
db !TIER_JUNK ; DD -
db !TIER_JUNK ; DE -
db !TIER_JUNK ; DF -
db !TIER_JUNK ; E0 -
db !TIER_JUNK ; E1 -
db !TIER_JUNK ; E2 -
db !TIER_JUNK ; E3 -
db !TIER_JUNK ; E4 -
db !TIER_JUNK ; E5 -
db !TIER_JUNK ; E6 -
db !TIER_JUNK ; E7 -
db !TIER_JUNK ; E8 -
db !TIER_JUNK ; E9 -
db !TIER_JUNK ; EA -
db !TIER_JUNK ; EB -
db !TIER_JUNK ; EC -
db !TIER_JUNK ; ED -
db !TIER_JUNK ; EE -
db !TIER_JUNK ; EF -
db !TIER_JUNK ; F0 -
db !TIER_JUNK ; F1 -
db !TIER_JUNK ; F2 -
db !TIER_JUNK ; F3 -
db !TIER_JUNK ; F4 -
db !TIER_JUNK ; F5 -
db !TIER_JUNK ; F6 -
db !TIER_JUNK ; F7 -
db !TIER_JUNK ; F8 -
db !TIER_JUNK ; F9 -
db !TIER_JUNK ; FA -
db !TIER_JUNK ; FB -
db !TIER_JUNK ; FC -
db !TIER_JUNK ; FD -
db !TIER_JUNK ; FE - Server request (async)
db !TIER_JUNK ; FF -
+261
View File
@@ -0,0 +1,261 @@
db $00 ; 00 - Fighter Sword and Shield
db $00 ; 01 - Master Sword
db $00 ; 02 - Tempered Sword
db $00 ; 03 - Butter Sword
db $00 ; 04 - Fighter Shield
db $00 ; 05 - Fire Shield
db $00 ; 06 - Mirror Shield
db $00 ; 07 - Fire Rod
db $00 ; 08 - Ice Rod
db $00 ; 09 - Hammer
db $00 ; 0A - Hookshot
db $00 ; 0B - Bow
db $00 ; 0C - Boomerang
db $00 ; 0D - Powder
db $00 ; 0E - Bottle Refill (bee)
db $00 ; 0F - Bombos
db $00 ; 10 - Ether
db $00 ; 11 - Quake
db $00 ; 12 - Lamp
db $00 ; 13 - Shovel
db $00 ; 14 - Flute
db $00 ; 15 - Somaria
db $00 ; 16 - Bottle
db $00 ; 17 - Heartpiece
db $00 ; 18 - Byrna
db $00 ; 19 - Cape
db $00 ; 1A - Mirror
db $00 ; 1B - Glove
db $00 ; 1C - Mitts
db $00 ; 1D - Book
db $00 ; 1E - Flippers
db $00 ; 1F - Pearl
db $00 ; 20 - Crystal
db $00 ; 21 - Net
db $00 ; 22 - Blue Mail
db $00 ; 23 - Red Mail
db $00 ; 24 - Small Key
db $00 ; 25 - Compass
db $00 ; 26 - Heart Container from 4/4
db $01 ; 27 - Bomb
db $01 ; 28 - 3 bombs
db $00 ; 29 - Mushroom
db $00 ; 2A - Red boomerang
db $00 ; 2B - Full bottle (red)
db $00 ; 2C - Full bottle (green)
db $00 ; 2D - Full bottle (blue)
db $00 ; 2E - Potion refill (red)
db $00 ; 2F - Potion refill (green)
db $00 ; 30 - Potion refill (blue)
db $01 ; 31 - 10 bombs
db $00 ; 32 - Big key
db $00 ; 33 - Map
db $01 ; 34 - 1 rupee
db $01 ; 35 - 5 rupees
db $01 ; 36 - 20 rupees
db $00 ; 37 - Green pendant
db $00 ; 38 - Blue pendant
db $00 ; 39 - Red pendant
db $00 ; 3A - Tossed bow
db $00 ; 3B - Silvers
db $00 ; 3C - Full bottle (bee)
db $00 ; 3D - Full bottle (fairy)
db $00 ; 3E - Boss heart
db $00 ; 3F - Sanc heart
db $01 ; 40 - 100 rupees
db $01 ; 41 - 50 rupees
db $01 ; 42 - Heart
db $01 ; 43 - Arrow
db $01 ; 44 - 10 arrows
db $01 ; 45 - Small magic
db $01 ; 46 - 300 rupees
db $01 ; 47 - 20 rupees green
db $00 ; 48 - Full bottle (good bee)
db $00 ; 49 - Tossed fighter sword
db $00 ; 4A - Active Flute
db $00 ; 4B - Boots
db $00 ; 4C - Bomb capacity (50)
db $00 ; 4D - Arrow capacity (70)
db $00 ; 4E - 1/2 magic
db $00 ; 4F - 1/4 magic
db $00 ; 50 - Safe master sword
db $00 ; 51 - Bomb capacity (+5)
db $00 ; 52 - Bomb capacity (+10)
db $00 ; 53 - Arrow capacity (+5)
db $00 ; 54 - Arrow capacity (+10)
db $00 ; 55 - Programmable item 1
db $00 ; 56 - Programmable item 2
db $00 ; 57 - Programmable item 3
db $00 ; 58 - Upgrade-only silver arrows
db $01 ; 59 - Rupoor
db $01 ; 5A - Nothing
db $00 ; 5B - Red clock
db $00 ; 5C - Blue clock
db $00 ; 5D - Green clock
db $00 ; 5E - Progressive sword
db $00 ; 5F - Progressive shield
db $00 ; 60 - Progressive armor
db $00 ; 61 - Progressive glove
db $00 ; 62 - RNG pool item (single)
db $00 ; 63 - RNG pool item (multi)
db $00 ; 64 - Progressive bow
db $00 ; 65 - Progressive bow
db $00 ; 66 -
db $00 ; 67 -
db $00 ; 68 -
db $00 ; 69 -
db $00 ; 6A - Triforce
db $01 ; 6B - Power star
db $01 ; 6C - Triforce Piece
db $00 ; 6D - Server request item
db $00 ; 6E - Server request item (dungeon drop)
db $00 ; 6F -
db $00 ; 70 - Map of Light World
db $00 ; 71 - Map of Dark World
db $00 ; 72 - Map of Ganon's Tower
db $00 ; 73 - Map of Turtle Rock
db $00 ; 74 - Map of Thieves' Town
db $00 ; 75 - Map of Tower of Hera
db $00 ; 76 - Map of Ice Palace
db $00 ; 77 - Map of Skull Woods
db $00 ; 78 - Map of Misery Mire
db $00 ; 79 - Map of Dark Palace
db $00 ; 7A - Map of Swamp Palace
db $00 ; 7B - Map of Agahnim's Tower
db $00 ; 7C - Map of Desert Palace
db $00 ; 7D - Map of Eastern Palace
db $00 ; 7E - Map of Hyrule Castle
db $00 ; 7F - Map of Sewers
db $00 ; 80 - Compass of Light World
db $00 ; 81 - Compass of Dark World
db $00 ; 82 - Compass of Ganon's Tower
db $00 ; 83 - Compass of Turtle Rock
db $00 ; 84 - Compass of Thieves' Town
db $00 ; 85 - Compass of Tower of Hera
db $00 ; 86 - Compass of Ice Palace
db $00 ; 87 - Compass of Skull Woods
db $00 ; 88 - Compass of Misery Mire
db $00 ; 89 - Compass of Dark Palace
db $00 ; 8A - Compass of Swamp Palace
db $00 ; 8B - Compass of Agahnim's Tower
db $00 ; 8C - Compass of Desert Palace
db $00 ; 8D - Compass of Eastern Palace
db $00 ; 8E - Compass of Hyrule Castle
db $00 ; 8F - Compass of Sewers
db $00 ; 90 - Skull key
db $00 ; 91 - Reserved
db $00 ; 92 - Big key of Ganon's Tower
db $00 ; 93 - Big key of Turtle Rock
db $00 ; 94 - Big key of Thieves' Town
db $00 ; 95 - Big key of Tower of Hera
db $00 ; 96 - Big key of Ice Palace
db $00 ; 97 - Big key of Skull Woods
db $00 ; 98 - Big key of Misery Mire
db $00 ; 99 - Big key of Dark Palace
db $00 ; 9A - Big key of Swamp Palace
db $00 ; 9B - Big key of Agahnim's Tower
db $00 ; 9C - Big key of Desert Palace
db $00 ; 9D - Big key of Eastern Palace
db $00 ; 9E - Big key of Hyrule Castle
db $00 ; 9F - Big key of Sewers
db $00 ; A0 - Small key of Sewers
db $00 ; A1 - Small key of Hyrule Castle
db $00 ; A2 - Small key of Eastern Palace
db $00 ; A3 - Small key of Desert Palace
db $00 ; A4 - Small key of Agahnim's Tower
db $00 ; A5 - Small key of Swamp Palace
db $00 ; A6 - Small key of Dark Palace
db $00 ; A7 - Small key of Misery Mire
db $00 ; A8 - Small key of Skull Woods
db $00 ; A9 - Small key of Ice Palace
db $00 ; AA - Small key of Tower of Hera
db $00 ; AB - Small key of Thieves' Town
db $00 ; AC - Small key of Turtle Rock
db $00 ; AD - Small key of Ganon's Tower
db $00 ; AE - Reserved
db $00 ; AF - Generic small key
db $00 ; B0 - Crystal 6
db $00 ; B1 - Crystal 1
db $00 ; B2 - Crystal 5
db $00 ; B3 - Crystal 7
db $00 ; B4 - Crystal 2
db $00 ; B5 - Crystal 4
db $00 ; B6 - Crystal 3
db $00 ; B7 - Reserved
db $00 ; B8 -
db $00 ; B9 -
db $00 ; BA -
db $00 ; BB -
db $00 ; BC -
db $00 ; BD -
db $00 ; BE -
db $00 ; BF -
db $00 ; C0 -
db $00 ; C1 -
db $00 ; C2 -
db $00 ; C3 -
db $00 ; C4 -
db $00 ; C5 -
db $00 ; C6 -
db $00 ; C7 -
db $00 ; C8 -
db $00 ; C9 -
db $00 ; CA -
db $00 ; CB -
db $00 ; CC -
db $00 ; CD -
db $00 ; CE -
db $00 ; CF -
db $01 ; D0 - Bee trap
db $01 ; D1 - Apples
db $01 ; D2 - Fairy
db $01 ; D3 - Chicken
db $01 ; D4 - Big Magic
db $01 ; D5 - 5 Arrows
db $01 ; D6 - Good Bee
db $00 ; D7 -
db $00 ; D8 -
db $00 ; D9 -
db $00 ; DA -
db $00 ; DB -
db $00 ; DC -
db $00 ; DD -
db $00 ; DE -
db $00 ; DF -
db $00 ; E0 -
db $00 ; E1 -
db $00 ; E2 -
db $00 ; E3 -
db $00 ; E4 -
db $00 ; E5 -
db $00 ; E6 -
db $00 ; E7 -
db $00 ; E8 -
db $00 ; E9 -
db $00 ; EA -
db $00 ; EB -
db $00 ; EC -
db $00 ; ED -
db $00 ; EE -
db $00 ; EF -
db $00 ; F0 -
db $00 ; F1 -
db $00 ; F2 -
db $00 ; F3 -
db $00 ; F4 -
db $00 ; F5 -
db $00 ; F6 -
db $00 ; F7 -
db $00 ; F8 -
db $00 ; F9 -
db $00 ; FA -
db $00 ; FB -
db $00 ; FC -
db $00 ; FD -
db $00 ; FE - Server request (async)
db $00 ; FF -
+87
View File
@@ -0,0 +1,87 @@
SpiralPropsIndex:
db $00, $04, $07, $00, $01, $00, $00, $0D, $00, $10, $04, $00, $15, $00, $0A, $00
db $00, $07, $00, $00, $00, $01, $07, $1C, $00, $00, $21, $00, $26, $07, $0A, $00
db $00, $00, $00, $00, $00, $00, $29, $30, $01, $00, $00, $00, $00, $00, $00, $00
db $00, $35, $00, $00, $3A, $00, $00, $00, $01, $00, $04, $00, $00, $00, $00, $3D
db $40, $07, $07, $00, $00, $01, $00, $00, $00, $00, $43, $00, $07, $07, $07, $00
db $00, $00, $00, $01, $48, $00, $00, $00, $00, $00, $00, $00, $07, $07, $00, $4B
db $00, $00, $00, $01, $50, $00, $07, $00, $00, $00, $53, $01, $01, $00, $58, $00
; 0 1 2 3 4 5 6 7 8 9 a b c d e f
db $5B, $01, $04, $00, $00, $00, $60, $67, $00, $00, $00, $00, $00, $00, $00, $6E
db $01, $00, $00, $00, $00, $00, $00, $71, $00, $00, $00, $00, $76, $00, $04, $00
db $00, $07, $00, $04, $00, $00, $00, $01, $7D, $0A, $00, $00, $00, $00, $04, $00
db $01, $00, $04, $00, $00, $01, $07, $00, $00, $00, $00, $0A, $00, $00, $07, $00
db $80, $00, $00, $00, $00, $01, $01, $00, $00, $00, $00, $00, $01, $00, $07, $00
db $85, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
db $8A, $92, $8F, $00, $00, $00, $00, $00, $00, $00, $0A, $00, $00, $00, $00, $00
db $04
SpiralProps:
db $00 ;null row
db $01, $00, $00 ; ($01) Single Top-Left Staircase
db $01, $00, $01 ; ($04) Single Top-Middle Staircase
db $01, $00, $02 ; ($07) Single Top-Right Staircase
db $01, $00, $05 ; ($0A) Single Staircase at Top of Bottom Left Quadrant
db $01, $00, $04 ; ($0D) Moldorm
db $02, $01, $00, $00, $02 ; ($10) Pod Basement
db $03, $01, $0A, $02, $01, $00, $0B ; ($15) GT Entrance
db $02, $01, $03, $00, $04 ; ($1C) Hera Below Moldorm
db $02, $00, $01, $01, $0B ; ($21) PoD Bridge
db $01, $00, $08 ; ($26) GT Ice Armos
db $03, $00, $01, $01, $0B, $02, $09 ; ($29) Swamp Statue
db $02, $01, $03, $00, $04 ; ($30) Hera Big Chest
db $02, $00, $04, $02, $09 ; ($35) Hera Startiles (middle value unused)
db $01, $00, $08 ; ($3A) West Swamp
db $01, $00, $05 ; ($3D) Ice Hamlift
db $01, $00, $07 ; ($40) Aga Guards
db $02, $01, $00, $00, $02 ; ($43) Pod Entrance
db $01, $00, $08 ; ($48) Swamp Attic
db $02, $03, $0C, $04, $06 ; ($4B) Ice U (1st three values unused)
db $01, $00, $05 ; ($50) TT Attic Left
db $02, $00, $01, $01, $0B ; ($53) Pod Rupees
db $01, $00, $04 ; ($58) Ice Gators
db $02, $01, $0A, $02, $01 ; ($5B) HC Tiny (first value placeholder)
db $03, $00, $01, $01, $0B, $02, $09 ; ($60) Swamp Sunken
db $03, $01, $00, $03, $08, $02, $09 ; ($67) Hera Entrance (first value unused)
db $01, $00, $08 ; ($6E) Ice Hookshot
db $02, $01, $00, $03, $08 ; ($71) Hera Basement (first and third values unused)
db $03, $01, $00, $00, $02, $03, $08 ; ($76) GT Circle (third value unused)
db $01, $00, $07 ; ($7D) Mire Entrance
db $02, $00, $02, $02, $09 ; ($80) Tower Usains (2nd value unused)
db $02, $00, $02, $02, $09 ; ($85) Tower Dark2 (2nd value unused)
db $02, $00, $02, $02, $09 ; ($8A) Tower Dark1 (2nd value unused)
db $01, $00, $09 ; ($8F) Mire2
db $01, $00, $0A ; ($92) Mire south of Torch Room
SpiralLabelOffsets:
db 1, -9
db 5, -9
db 9, -9
db -6, -1
db 15, -1
db 1, -1
db 5, -1
db 9, -1
db -6, 7
db 15, 7
db -3, -9
db 13, -9
db -3, -1
db 13, -1
SpiralLabelQuadrantMasks:
dw $0008
dw $000C
dw $0004
dw $0008
dw $0004
dw $0002
dw $0003
dw $0001
dw $0002
dw $0001
dw $0008
dw $0004
dw $0002
dw $0001
+929
View File
@@ -0,0 +1,929 @@
IncomingDoorMap:
; north
db $06, $07, $08
; west
db $09, $0A, $0B
; south
db $00, $01, $02
; east
db $03, $04, $05
macro d(label)
dw <label>-SplitRooms
endmacro
macro sq(byte)
db <byte>
endmacro
SplitRooms:
; 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.09) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.14) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.1a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.2a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.35) : %d(.36) : %d(.37)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.57)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.6a) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.74) : %d(.75) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.7b) : %d(.7c) : %d(.7d) : %d(.no) : %d(.no)
; 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F
%d(.no) : %d(.no) : %d(.82) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.87)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.8c) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.9d) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.a2) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.a9) : %d(.aa) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.b2) : %d(.no) : %d(.no) : %d(.no) : %d(.b6) : %d(.no)
%d(.no) : %d(.b9) : %d(.no) : %d(.no) : %d(.bc) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.c7)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.d1) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.d6) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.db) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
; E0
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
; F0
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.no)
; 100
%d(.no) : %d(.101) : %d(.no) : %d(.103) : %d(.no) : %d(.no) : %d(.106) : %d(.107)
%d(.no) : %d(.no) : %d(.no) : %d(.no) : %d(.10c) : %d(.no) : %d(.10e) : %d(.no)
; 110
%d(.no) : %d(.no) : %d(.112) : %d(.no) : %d(.114) : %d(.115) : %d(.no) : %d(.no)
%d(.no) : %d(.no) : %d(.no) : %d(.11b) : %d(.11c) : %d(.no) : %d(.11e) : %d(.11f)
; 120
%d(.120) : %d(.no) : %d(.122) : %d(.no) : %d(.124) : %d(.125) : %d(.126) : %d(.127)
.no
db $00
.no_items
db $FF
.09
db $01
%sq($04)
%d(..areas) : %d(.no_items) : %d(..stairs)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $80
db $FF
..stairs
db $01
db $FF
..enemies
db $02
db $FF
.14
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas3
db $03, $C0, $FF, $00, $50
db $03, $00, $28, $30, $50
db $03, $30, $50, $D0, $FF
db $FF
..doors3
db $03, $06, $09
db $FF
..areas2
db $03, $B0, $D0, $D0, $FF
db $03, $30, $50, $00, $28
db $FF
..doors2
db $00, $08
db $FF
.1a ; PoD Big Chest (2) // Falling bridge and such (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $2C, $70, $98
db $FF
..doors
db $04
db $FF
..chests
db $00
db $FF
.2a ; PoD Arena Right-Side Chest (2) // Arena (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $D8, $FF, $A8, $C8
db $FF
..doors
db $0B
db $FF
..chests
db $00
db $FF
.35 ; Swamp BK Chest (2) // Swamp second trench (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $70, $00, $80
db $FF
..doors
db $03
db $FF
..chests
db $00
db $FF
..pots
db $01, $02, $03, $04, $05
db $FF
.36 ; Swamp Big Lobby (1) // Tiny Top-Right Blocked Corner (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $D4, $FF, $00, $48
db $FF
..doors
db $09
db $FF
..pots
db $00, $01
db $FF
.37 ; Swamp Second Chest (2) // Swamp first trench (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $90, $FF, $00, $80
db $FF
..doors
db $09
db $FF
..chests
db $00
db $FF
..enemies
db $02, $03
db $FF
.57 ; SW pot cage (2) // middle section (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08, $0B
db $FF
..chests
db $01
db $FF
..pots
db $02, $03, $04, $05
db $FF
..enemies
db $08, $09, $0A, $0B
db $FF
.6a ; pre-helmasaur-king (2) // PoD rupee basement (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $B4, $C4, $00, $B4
db $03, $A8, $D0, $B0, $D0
db $FF
..doors
db $02
db $FF
..enemies
db $00, $01, $04, $05
db $FF
.74 ; desert north -- trapped area (2) // everything else (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $4C, $C4, $CC, $FF
db $FF
..doors
db $07
db $FF
..enemies
db $06, $07
db $FF
.75 ; desert cannonball (2) // desert northeast + trap room (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..chests
db $00
db $FF
..enemies
db $06, $07
db $FF
.7b ; GT post-compass (3) // island hardhat (2) // DMs room (1)
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(..pots3) : %d(..enemies3)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies2)
..areas3
db $03, $00, $FF, $00, $80
db $FF
..doors3
db $09
db $FF
..pots3
db $00, $01, $02, $03, $04
db $FF
..enemies3
db $00, $01
db $FF
..areas2
db $03, $80, $FF, $80, $FF
db $FF
..doors2
db $0B
db $FF
..enemies2
db $06, $07
db $FF
.7c ; GT falling bridge // rando room
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
..doors
db $03, $05
db $FF
..pots
db $00, $01, $02, $03
db $FF
..enemies
db $01, $02, $03, $04
db $FF
.7d ; GT warp maze (section next to rando room)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $FF, $00, $80
db $03, $00, $80, $80, $FF
db $03, $CA, $DA, $9A, $A6
db $FF
..doors
db $05
db $FF
..chests
db $00
db $FF
..pots
db $00, $01, $02, $03
db $FF
..enemies
db $00, $01, $02, $03, $09
db $FF
.82 ; HC Basement (1) + catwalk (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $20, $00, $50
db $FF
..doors
db $00, $03
db $FF
.87 ; Hera basement: cage (0) // torches (1)
db $01
%sq($08)
%d(..areas) : %d(.no_items) : %d(..stairs)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $FF, $00, $80
db $03, $80, $FF, $80, $FF
db $FF
..stairs
db $00
db $FF
..chests
db $00
db $FF
..pots
db $00, $01, $02, $03, $04, $05, $06, $07
db $FF
..enemies
db $00, $01, $02, $05, $06, $09, $0C
db $FF
.8c
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08
db $FF
..chests
db $03
db $FF
..pots
db $02, $03, $04, $05, $06
db $FF
..enemies
db $06, $07, $09
db $FF
.9d
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $FF, $80, $FF
db $FF
..doors
db $05
db $FF
..enemies
db $06, $07, $08
db $FF
.a2 ; Mire abyss -- EW bridge (2), stairs to basement + hookable chest (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $FF, $70, $84
db $FF
..doors
db $04, $0A
db $FF
.a9
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $40, $70, $FF
db $03, $00, $FF, $A0, $FF
db $03, $C0, $FF, $70, $FF
db $FF
..doors
db $04, $07, $0A
db $FF
..pots
db $04, $05, $06, $07
db $FF
.aa
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $02, $00, $80, $00, $FF
db $01, $34, $44, $B4, $FF
db $FF
..doors
db $03, $06
db $FF
.b2
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $02, $00, $FF, $00, $80
db $03, $60, $A0, $00, $40
db $FF
..doors
db $01, $09
db $FF
..pots
db $00, $01, $02, $03, $04, $05, $06
db $FF
..enemies
db $00, $01, $02, $03, $04
db $FF
.b6
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..pots
db $00
db $FF
..enemies
db $04
db $FF
.b9
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $20, $28, $60
db $01, $E0, $FF, $28, $60
db $01, $00, $FF, $58, $60
db $FF
..doors
db $03, $09
db $FF
.bc
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $2C, $4C, $CA, $FF
db $FF
..doors
db $06
db $FF
..pots
db $0C, $0D
db $FF
.c7 ; TR Torch Maze (1) // Tiny Bottom-Left Blocked Corner (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $00, $1C, $A8, $FF
db $FF
..doors
db $05
db $FF
..pots
db $02, $03
db $FF
.d1
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $A8
db $FF
..doors
db $02
db $FF
..pots
db $02, $03, $04, $05
db $FF
..enemies
db $00, $01, $07
db $FF
.d6
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $80, $00, $FF
db $FF
..doors
db $00
db $FF
..chests
db $00
db $FF
..enemies
db $00, $01, $02
db $FF
.db
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $02, $B0, $FF, $90, $C0
db $FF
..doors
db $0B
db $FF
..chests
db $01
db $FF
.101 ; East Snitch House (2) // West Snitch House (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $FF
..enemies
db $00
db $FF
.103 ; Man With Beds (3) // Front of Tavern (2) // Back of Tavern (1)
db $02
%sq($00)
%d(..areas3) : %d(..doors3) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies3)
%sq($00)
%d(..areas2) : %d(..doors2) : %d(.no_items)
%d(.no_items) : %d(..pots2) : %d(..enemies2)
..areas3
db $03, $80, $FF, $00, $FF
db $FF
..doors3
db $08
db $FF
..enemies3
db $02
db $FF
..areas2
db $03, $00, $7F, $50, $FF
db $FF
..doors2
db $06
db $FF
..pots2
db $02
db $FF
..enemies2
db $00
db $01
db $FF
.106 ; VoO Chest Game (2) // Brewery (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.107 ; Library (2) // Bomb Refill Hut (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
.10c ; Mimic Cave (2) // Hookshot Fairy Pot (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $00
db $FF
..enemies
db $04
db $05
db $06
db $07
db $FF
.10e ; Storyteller (2) // Storyteller (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $FF
..pots
db $FF
..enemies
db $00
db $FF
.112 ; Dark Chapel (2) // Store (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.114 ; Waterfall Fairy (2) // Hint NPC (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..chests
db $00
db $01
db $FF
..enemies
db $00
db $FF
.115 ; Capacity Fairy (1) // Healing Fairy (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $80, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $FF
.11b ; Cave 45 (2) // Graveyard Ledge (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $01
db $02
db $03
db $04
db $05
db $FF
..enemies
db $01
db $FF
.11c ; Bomb Shop (2) // C-Shaped House (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.11e ; Long Fairy Cave (2) // Hype Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $01
db $02
db $03
db $FF
.11f ; Lumberjack House (1) // Store (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $FF
.120 ; Ice Rod Cave (1) // Cool Bee Cave (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $80, $FF, $00, $FF
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..enemies
db $00
db $01
db $02
db $FF
.122 ; Fortune Teller (2) // Other Fortune Teller (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $00
db $FF
.124 ; 50-Rupee Cave (1) // Bonk Rocks (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(..chests) : %d(.no_items) : %d(.no_items)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..chests
db $00
db $FF
.125 ; 20-Rupee Cave (2) // Spiky Hint Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..pots
db $00
db $01
db $02
db $03
db $FF
..enemies
db $00
db $FF
.126 ; Bonk Fairy Pool (2) // Checkerboard Cave (1)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(.no_items) : %d(..enemies)
..areas
db $03, $00, $7F, $00, $FF
db $FF
..doors
db $06
db $FF
..enemies
db $01
db $02
db $03
db $04
db $FF
.127 ; Hammer Pegs Cave (1) // Fake Dark Lake Hylia Spike Hint Cave (2)
db $01
%sq($00)
%d(..areas) : %d(..doors) : %d(.no_items)
%d(.no_items) : %d(..pots) : %d(.no_items)
..areas
db $03, $80, $FF, $00, $FF
db $FF
..doors
db $08
db $FF
..pots
db $04
db $05
db $06
db $07
db $FF
+258
View File
@@ -0,0 +1,258 @@
dw $FFFF, $83A5, $FFFF, $FFFF ; 00
dw $C388, $8388, $FFFF, $FFFF ; 01
dw $4348, $034A, $4342, $0342 ; 02
dw $FFFF, $FFFF, $438F, $FFFF ; 03 - Houlihan
dw $039A, $038F, $4365, $C39B ; 04
dw $FFFF, $FFFF, $FFFF, $FFFF ; 05 - unused
dw $FFFF, $FFFF, $438F, $FFFF ; 06 - Arrghus
dw $0100, $0101, $4111, $0111 ; 07 - Moldorm
dw $FFFF, $FFFF, $43B2, $03B2 ; 08 - useless fairy entrance
dw $C3A6, $837B, $FFFF, $FFFF ; 09
dw $C398, $835F, $FFFF, $FFFF ; 0A
dw $039B, $439C, $839B, $0381 ; 0B
dw $C371, $8371, $4354, $0354 ; 0C
dw $FFFF, $FFFF, $438F, $FFFF ; 0D - Aga 2
dw $FFFF, $FFFF, $8399, $439B ; 0E
dw $FFFF, $FFFF, $FFFF, $FFFF ; 0F - unused and should never be used, treated as non-id
dw $C340, $8340, $4350, $0340 ; 10
dw $83B7, $C3AC, $03B7, $438A ; 11
dw $C354, $8354, $4354, $0354 ; 12
dw $FFFF, $83B7, $FFFF, $03B7 ; 13
dw $012E, $012F, $013E, $013F ; 14
dw $C374, $8340, $4341, $0340 ; 15
dw $0108, $0109, $436B, $036B ; 16
dw $4104, $0104, $4114, $0114 ; 17
dw $C3B5, $FFFF, $43B4, $FFFF ; 18 - useless fairy drop
dw $FFFF, $8369, $FFFF, $035A ; 19
dw $03E7, $03E8, $03F7, $0361 ; 1A
dw $039B, $439C, $4361, $FFFF ; 1B
dw $038F, $038F, $037E, $C39B ; 1C
dw $C3B2, $83A7, $FFFF, $FFFF ; 1D
dw $FFFF, $4391, $0122, $0123 ; 1E
dw $FFFF, $FFFF, $4360, $C399 ; 1F
dw $FFFF, $FFFF, $438F, $FFFF ; 20
dw $4348, $0363, $C348, $8368 ; 21
dw $FFFF, $FFFF, $4368, $0348 ; 22
dw $FFFF, $FFFF, $FFFF, $039B ; 23
dw $4365, $0365, $0132, $0133 ; 24
dw $FFFF, $FFFF, $FFFF, $FFFF ; 25 - unused
dw $039B, $03E4, $4363, $0382 ; 26
dw $4104, $0104, $4114, $0114 ; 27
dw $C3A5, $FFFF, $4358, $0348 ; 28
dw $FFFF, $FFFF, $FFFF, $0396 ; 29 - Mothula
dw $C350, $8352, $4350, $03F8 ; 2A
dw $C36A, $FFFF, $03F9, $C38D ; 2B
dw $C340, $8340, $4350, $0350 ; 2C - hookshot cave back
dw $FFFF, $FFFF, $FFFF, $FFFF ; 2D - unused
dw $FFFF, $838F, $FFFF, $FFFF ; 2E
dw $C3B4, $FFFF, $436E, $03B2 ; 2F - Kakariko well
dw $C361, $FFFF, $839A, $FFFF ; 30 - inset stairs if possible
dw $0124, $0125, $0134, $0135 ; 31
dw $43C4, $03C4, $43D4, $03D4 ; 32
dw $FFFF, $FFFF, $438F, $FFFF ; 33
dw $0129, $012A, $0139, $013A ; 34
dw $C38D, $039B, $43B1, $037D ; 35
dw $0118, $0119, $0128, $4128 ; 36
dw $439B, $838D, $437D, $03B1 ; 37
dw $C3AC, $FFFF, $43B7, $FFFF ; 38
dw $FFFF, $FFFF, $039B, $0381 ; 39
dw $03C2, $03C3, $43D3, $03D3 ; 3A - make bespoke if feasible
dw $C3A5, $FFFF, $43B5, $FFFF ; 3B - inset stairs if feasible
dw $C340, $8350, $4340, $0350 ; 3C - hookshot cave front
dw $039B, $439B, $0361, $838E ; 3D
dw $FFFF, $438F, $43B2, $0373 ; 3E
dw $FFFF, $FFFF, $0130, $C399 ; 3F
dw $C3A5, $FFFF, $4372, $C399 ; 40 - inset stairs if feasible
dw $03C5, $03C6, $03D5, $03D6 ; 41
dw $03E9, $03EA, $FFFF, $FFFF ; 42
dw $C3B2, $03B2, $FFFF, $0361 ; 43
dw $038D, $839F, $838D, $039F ; 44
dw $C3AB, $83B4, $4364, $43B7 ; 45
dw $C375, $8375, $4373, $0373 ; 46
dw $FFFF, $FFFF, $FFFF, $FFFF ; 47 - unused
dw $FFFF, $FFFF, $FFFF, $FFFF ; 48 - unused
dw $839B, $8372, $039B, $0372 ; 49
dw $03E2, $03E3, $0386, $4386 ; 4A
dw $C361, $4391, $4373, $0373 ; 4B
dw $FFFF, $83A5, $FFFF, $03B7 ; 4C
dw $0102, $0103, $0112, $0113 ; 4D
dw $839B, $439C, $FFFF, $FFFF ; 4E
dw $FFFF, $8396, $838D, $FFFF ; 4F
dw $FFFF, $83B7, $FFFF, $03B5 ; 50
dw $C354, $8354, $4384, $0384 ; 51
dw $C3B7, $FFFF, $4359, $0348 ; 52
dw $039A, $83B5, $839B, $43B7 ; 53
dw $C390, $8390, $4380, $0340 ; 54
dw $C340, $8340, $4350, $0340 ; 55 - secret passage
dw $038F, $83B4, $4365, $039F ; 56
dw $039B, $438D, $0365, $039B ; 57
dw $C372, $439B, $0383, $0365 ; 58 - split
dw $838A, $8372, $03D1, $0372 ; 59
dw $FFFF, $FFFF, $FFFF, $038F ; 5A - Helmasaur King
dw $FFFF, $83B7, $FFFF, $03B5 ; 5B
dw $C3B1, $83AA, $FFFF, $838F ; 5C
dw $039B, $C399, $0361, $FFFF ; 5D
dw $FFFF, $0110, $839C, $0123 ; 5E
dw $FFFF, $FFFF, $43BB, $FFFF ; 5F
dw $FFFF, $8379, $FFFF, $036A ; 60
dw $C387, $8385, $4356, $0356 ; 61
dw $C346, $8354, $4352, $0340 ; 62
dw $039A, $FFFF, $0361, $FFFF ; 63
dw $FFFF, $FFFF, $8399, $0367 ; 64
dw $FFFF, $FFFF, $0367, $0381 ; 65
dw $038F, $039A, $0362, $83B2 ; 66
dw $83B4, $83B5, $03B7, $039F ; 67
dw $C340, $8350, $4341, $0340 ; 68
dw $FFFF, $FFFF, $FFFF, $FFFF ; 69 - unused
dw $FFFF, $03E1, $FFFF, $03F1 ; 6A
dw $039A, $0361, $839B, $C39B ; 6B
dw $039A, $FFFF, $839B, $0360 ; 6C - Lanmolas 2
dw $0361, $FFFF, $C39B, $FFFF ; 6D
dw $FFFF, $838E, $FFFF, $FFFF ; 6E
dw $FFFF, $FFFF, $FFFF, $FFFF ; 6F - unused
dw $43BA, $FFFF, $FFFF, $FFFF ; 70
dw $039A, $FFFF, $4365, $438D ; 71
dw $437A, $037A, $03C1, $0342 ; 72 - slight cheating I guess...
dw $038F, $038F, $839B, $0366 ; 73
dw $43B2, $03B2, $43A8, $03A8 ; 74
dw $038F, $83B4, $0365, $03B5 ; 75
dw $010D, $010E, $011D, $011E ; 76
dw $0126, $0127, $4137, $0137 ; 77
dw $FFFF, $FFFF, $FFFF, $FFFF ; 78 - unused
dw $FFFF, $FFFF, $FFFF, $FFFF ; 79 - unused
dw $FFFF, $FFFF, $FFFF, $FFFF ; 7A - unused
dw $0106, $0107, $438F, $4381 ; 7B
dw $C3B7, $83B4, $43B7, $03B7 ; 7C
dw $43B2, $835E, $034C, $0391 ; 7D
dw $FFFF, $83B7, $4393, $438A ; 7E
dw $439B, $FFFF, $838E, $FFFF ; 7F
dw $C3A7, $83B0, $FFFF, $FFFF ; 80
dw $C350, $8341, $4340, $0341 ; 81
dw $C39D, $8354, $4341, $0340 ; 82
dw $038F, $83B5, $4365, $43B7 ; 83
dw $C344, $8345, $4354, $0354 ; 84
dw $C38B, $C39B, $03B7, $439B ; 85
dw $FFFF, $FFFF, $FFFF, $FFFF ; 86 - unused
dw $0136, $0117, $4394, $838F ; 87
dw $FFFF, $FFFF, $FFFF, $FFFF ; 88 - unused
dw $C3B0, $83B0, $FFFF, $FFFF ; 89
dw $FFFF, $FFFF, $FFFF, $FFFF ; 8A - unused
dw $838A, $0360, $038A, $438D ; 8B
dw $83BE, $83BF, $03BD, $0391 ; 8C
dw $0360, $C38A, $038D, $438A ; 8D
dw $FFFF, $838E, $FFFF, $FFFF ; 8E
dw $FFFF, $FFFF, $FFFF, $FFFF ; 8F - unused
dw $FFFF, $FFFF, $438F, $FFFF ; 90
dw $FFFF, $83A5, $FFFF, $03B7 ; 91
dw $03D2, $C3B7, $0364, $039F ; 92
dw $C36C, $836C, $C39B, $838F ; 93
dw $FFFF, $FFFF, $FFFF, $FFFF ; 94 - unused
dw $FFFF, $83B7, $FFFF, $03B5 ; 95
dw $010F, $FFFF, $011F, $C39C ; 96
dw $039A, $83B4, $839B, $036F ; 97
dw $FFFF, $FFFF, $43B2, $0397 ; 98
dw $FFFF, $038F, $434A, $0363 ; 99
dw $FFFF, $FFFF, $FFFF, $FFFF ; 9A - unused
dw $839B, $0381, $435E, $0378 ; 9B
dw $C350, $8350, $4341, $0341 ; 9C
dw $0116, $83B2, $43B1, $035E ; 9D
dw $FFFF, $439A, $838D, $03B9 ; 9E
dw $FFFF, $FFFF, $439B, $FFFF ; 9F
dw $839B, $C39C, $FFFF, $FFFF ; A0
dw $C3B0, $835D, $FFFF, $036A ; A1
dw $03EE, $03EF, $03FE, $03FF ; A2
dw $C35A, $FFFF, $436A, $FFFF ; A3
dw $FFFF, $FFFF, $438F, $FFFF ; A4
dw $039A, $0361, $C3B2, $83B2 ; A5
dw $C340, $8370, $4340, $0340 ; A6
dw $C396, $FFFF, $FFFF, $FFFF ; A7 - ToH fairy basement room
dw $039B, $03E5, $839B, $03F5 ; A8
dw $C357, $8357, $4356, $0356 ; A9
dw $03E6, $439B, $03F6, $C39B ; AA
dw $FFFF, $FFFF, $439A, $FFFF ; AB
dw $FFFF, $FFFF, $FFFF, $038F ; AC - Blind
dw $FFFF, $FFFF, $FFFF, $FFFF ; AD - unused
dw $FFFF, $8399, $FFFF, $FFFF ; AE
dw $C39B, $FFFF, $FFFF, $FFFF ; AF
dw $039B, $C399, $839B, $C399 ; B0
dw $0391, $83B5, $434C, $438A ; B1
dw $C35C, $83A2, $039B, $0366 ; B2
dw $0365, $FFFF, $0365, $FFFF ; B3
dw $03FA, $83FD, $03EC, $03ED ; B4
dw $03EB, $83FD, $83FA, $03FD ; B5
dw $039A, $038F, $0361, $0361 ; B6
dw $C3B4, $FFFF, $43B5, $FFFF ; B7
dw $FFFF, $838A, $FFFF, $03B4 ; B8
dw $43F3, $03F3, $4354, $0354 ; B9
dw $0364, $438D, $FFFF, $FFFF ; BA
dw $838A, $8364, $4372, $0364 ; BB
dw $83BE, $C38A, $03D0, $438A ; BC
dw $FFFF, $FFFF, $FFFF, $FFFF ; BD - unused
dw $FFFF, $439A, $FFFF, $C365 ; BE
dw $FFFF, $FFFF, $438D, $FFFF ; BF
dw $C372, $C399, $4372, $C399 ; C0
dw $039B, $0364, $4365, $8364 ; C1
dw $C351, $8353, $4341, $0353 ; C2
dw $03E0, $C369, $03F0, $4369 ; C3 - show layers
dw $43C0, $03C0, $4340, $0341 ; C4
dw $C3B5, $FFFF, $438A, $FFFF ; C5
dw $03FA, $03FB, $83FA, $83FB ; C6
dw $43FB, $83FD, $03FC, $03FD ; C7
dw $FFFF, $FFFF, $FFFF, $038F ; C8 - Armos Knights
dw $03F2, $43F2, $0386, $4386 ; C9
dw $FFFF, $FFFF, $FFFF, $FFFF ; CA - unused
dw $C340, $8343, $4354, $0347 ; CB
dw $C353, $8350, $4347, $0354 ; CC
dw $FFFF, $FFFF, $FFFF, $FFFF ; CD - unused
dw $FFFF, $8391, $FFFF, $FFFF ; CE - Kholdstare drop
dw $FFFF, $FFFF, $FFFF, $FFFF ; CF - unused
dw $C372, $C399, $4372, $C399 ; D0
dw $C38E, $838F, $4381, $C38D ; D1
dw $FFFF, $83B5, $FFFF, $0395 ; D2
dw $FFFF, $FFFF, $FFFF, $FFFF ; D3 - unused
dw $FFFF, $FFFF, $FFFF, $FFFF ; D4 - unused
dw $C3B5, $FFFF, $43B5, $FFFF ; D5
dw $C3B5, $010A, $43B4, $011A ; D6
dw $FFFF, $FFFF, $FFFF, $FFFF ; D7 - unused
dw $FFFF, $8361, $FFFF, $839B ; D8
dw $FFFF, $FFFF, $4360, $0360 ; D9
dw $FFFF, $FFFF, $439C, $FFFF ; DA
dw $C354, $8346, $4354, $037F ; DB
dw $C346, $8354, $4343, $0340 ; DC
dw $FFFF, $FFFF, $FFFF, $FFFF ; DD - unused
dw $FFFF, $8396, $FFFF, $FFFF ; DE - Kholdstare
dw $FFFF, $FFFF, $43A0, $0354 ; DF - paradox top
dw $039B, $C399, $0361, $FFFF ; E0
; no more dungeon
dw $C340, $8340, $4350, $0340 ; E1 - lost woods thieves hideout
dw $C340, $8340, $4340, $0350 ; E2 - lumberjack cave
dw $FFFF, $83B4, $43B2, $036E ; E3 - magic bat
dw $C340, $8342, $4350, $0342 ; E4 - old man's house front
dw $C342, $8340, $4356, $0354 ; E5 - old man's house back
dw $C340, $8341, $4350, $0340 ; E6 - death mountain descent left
dw $C341, $8340, $4340, $0350 ; E7 - death mountain descent right
dw $C370, $8370, $4380, $0350 ; E8 - superbunny top
dw $FFFF, $FFFF, $FFFF, $FFFF ; E9 - unused
dw $C3A5, $FFFF, $43B5, $FFFF ; EA - spectacle top
dw $FFFF, $83A6, $FFFF, $03B5 ; EB - bumper top
dw $FFFF, $FFFF, $FFFF, $FFFF ; EC - unused
dw $C370, $8370, $4340, $0350 ; ED - fairy ascension top
dw $C340, $8390, $4340, $0350 ; EE - spiral top
dw $FFFF, $8340, $43A0, $0354 ; EF - paradox top
dw $C340, $8342, $4350, $0342 ; F0 - old man rescue left
dw $C342, $8342, $4340, $0350 ; F1 - old man rescue right
dw $FFFF, $FFFF, $FFFF, $03B2 ; F2 - Sahasrahla's Kakariko house left
dw $FFFF, $FFFF, $43B2, $FFFF ; F3 - Sahasrahla's Kakariko house right
dw $FFFF, $FFFF, $FFFF, $03B2 ; F4 - quarreling brothers left
dw $FFFF, $FFFF, $43B2, $FFFF ; F5 - quarreling brothers right
dw $FFFF, $FFFF, $FFFF, $FFFF ; F6 - unused
dw $FFFF, $FFFF, $FFFF, $FFFF ; F7 - unused
dw $C370, $8370, $43A0, $0354 ; F8 - superbunny bottom
dw $C340, $8341, $4350, $0340 ; F9 - spectacle left
dw $C374, $8340, $4350, $0340 ; FA - spectacle bottom
dw $FFFF, $83A5, $4348, $0358 ; FB - bumper bottom
dw $FFFF, $FFFF, $FFFF, $FFFF ; FC - unused
dw $C370, $8370, $4354, $0354 ; FD - fairy ascension bottom
dw $FFFF, $FFFF, $43B4, $03B5 ; FE - spiral bottom
dw $C3B4, $83B4, $436E, $036D ; FF - paradox bottom
File diff suppressed because it is too large Load Diff
+167
View File
@@ -0,0 +1,167 @@
RedrawLoot:
SEP #$20
JSL DrawLoot
; what we wrote over
SEP #$20
STZ.w $0210
RTL
FirstDrawLoot:
LDA.b #$FF
STA.w $0215
LDA.b #$80
STA.w $0216
STA.w $0218
LDA.l DRMode
BEQ +
LDA.w DungeonID
ASL A
TAX
LDA.l DungeonMapData.floor, X
STA.b $A4
+
; what we wrote over
LDA.b #$08
STA.b $17
DrawLoot:
LDA.b $07
STA.w $021B
LDA.l DRMode
BNE .skip
LDA.l MapItems_enabled
BEQ .skip
REP #$30
PHX : PHY
STZ.b $0E
LDX.w DungeonID
LDA.l DungeonMapRoomPointers, X
STA.b $72
SEP #$20
LDA.l DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.w DungeonMapCurrentFloor
PHA
JSR DrawSingleFloorLoot
INC.b $0F
LDA.b #$80
STA.b $0E
PLA : DEC A
JSR DrawSingleFloorLoot
LDX.w GFXStripes
LDA.b #$FF
STA.w GFXStripes+$02, X
LDA.b #$01
STA.b NMISTRIPES
PLY : PLX
.skip
LDA.b #$00
RTL
DrawSingleFloorLoot:
REP #$20
AND.w #$00FF
ASL A
TAX
LDA.l DungeonMapFloorToDataOffset, X
CLC : ADC.w #$0018 ; get to end of floor
TAY
SEP #$20
LDA.b #$04
STA.b $06
LDA.b #$04
STA.b $07
.next_row
REP #$20
LDA.w GFXStripes
TAX
CLC : ADC.w #$0030
STA.w GFXStripes
SEP #$20
LDA.b $07
CLC : ADC.b $07
REP #$20
AND.w #$00FF
ASL #5
CLC : ADC.w #$1092
ADC.b $0E
XBA
STA.w GFXStripes+$02, X
CLC : ADC.w #$2000
STA.w GFXStripes+$1A, X
LDA.w #$1300
STA.w GFXStripes+$04, X
STA.w GFXStripes+$1C, X
TXA
CLC : ADC.w #$0016
TAX
.next_room
REP #$20
LDA.b ($72), Y ; get room id
PHY
AND.w #$00FF
CMP.w #$000F ; $0F = empty room
BNE .valid_room
LDA.w #$0000
BRA +
.valid_room
JSL CheckMapLoot
+
ASL A : ASL A : ASL A
TXY
TAX
LDA.l LootTypeIcons+0, X
STA.w GFXStripes+$00, Y
LDA.l LootTypeIcons+2, X
STA.w GFXStripes+$02, Y
LDA.l LootTypeIcons+4, X
STA.w GFXStripes+$18, Y
LDA.l LootTypeIcons+6, X
STA.w GFXStripes+$1A, Y
TYX
PLY
DEY : DEX #4
SEP #$20
DEC.b $06
BPL .next_room
DEC.b $07
BMI .done
LDA.b #$00
XBA
LDA.b #$04
STA.b $06
JMP .next_row
.done
RTS
+275
View File
@@ -0,0 +1,275 @@
DrawNonexistentRoom:
REP #$20
LDA.w #$0F00
STA.l $7F0000, X
STA.l $7F0002, X
STA.l $7F0040, X
STA.l $7F0042, X
JML $8AE7F2
GetVisibilityProps:
PHX
ASL A : ASL A
TAX
LDA.b $0C
AND.l .visibility_props, X
ORA.l .visibility_props+2, X
STA.b $0C
PLX
RTS
.visibility_props:
dw $0000, $0F00
dw $C000, $174F
dw $C000, $174F
dw $0000, $1400
dw $0000, $1000
dw $0000, $0C00
dw $0000, $0800
; A = room shape
; $0C = visibility props
GetQuadrantTile:
PHA
LDA.b $0C
AND.w #$03FF
BNE .square
PLA
ORA.b $0C
RTS
.square
PLA
LDA.b $0C
RTS
NormalDrawDungeonMapRoom:
JSL DrawDungeonMapRoom
JML $8AE7F2
; $CA has room_id
; $0E has quadrant flags
; X has address to draw at
DrawDungeonMapRoom:
REP #$20
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
LDA.b $0A : PHA
JSR GetSpecificRoomVisibility
LDA.b $CA
AND.w #$00FF
ASL A : ASL A : ASL A
TAY
macro DrawQuadrant(quadrant, writeOffset)
.draw_quadrant_<quadrant>:
LDA.w #(3-<quadrant>)<<14
STA.b $0C
LDA.b $0E
BIT.w #1<<(3-<quadrant>)
BNE ..visited
LDA.b $0A
BRA ..continue
..visited
LDA.b $0B
..continue
AND.w #$00FF
JSR GetVisibilityProps
LDA.w SupertileRoomShapes+(2*<quadrant>), Y
CMP.w #$FFFF : BNE ..get_quadrant
LDA.b $0A
AND.w #$00FF
CMP.w #$0001
BNE ..empty
..full_square
LDA.b $0C
BRA ..write
..get_quadrant
JSR GetQuadrantTile
BRA ..write
..empty
LDA.w #$0F00
..write
STA.l $7F0000+<writeOffset>, X
endmacro
%DrawQuadrant(0, $00)
%DrawQuadrant(1, $02)
%DrawQuadrant(2, $40)
%DrawQuadrant(3, $42)
.done
PLA : STA.b $0A
PLB
RTL
DrawEntrances:
REP #$30
PHX : PHY
LDA.b $06 : PHA
LDX.w DungeonID
LDA.l DungeonMapRoomPointers, X
STA.b $72
SEP #$20
LDA.l DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.w DungeonMapCurrentFloor
REP #$20
AND.w #$00FF
STZ.b $02
PHA
JSR DrawSingleFloorEntrances
INC.b $02
INC.b $02
PLA
DEC A
JSR DrawSingleFloorEntrances
.done
REP #$20
PLA : STA.b $06
PLY : PLX
SEP #$30
RTL
DrawSingleFloorEntrances:
ASL A
TAX
LDA.l DungeonMapFloorToDataOffset, X
TAY
STZ.b $06
.next_room
REP #$20
LDA.b ($72), Y ; get room id
AND.w #$00FF
CMP.w #$000F ; $0F = empty room
BEQ +
JSR DrawSingleRoomEntrances
+
INY
SEP #$20
INC.b $06
LDA.b $06
CMP.b #$05
BCC .next_room
STZ.b $06
- INC.b $07
LDA.b $07
CMP.b #$05
BCC .next_room
.done
REP #$20
RTS
macro DrawSingleEntrance(offset)
LDY.b $00
LDA.b #$00
STA.w OAMBufferAux, Y ; high x-bit and size bit
TYA
ASL #2
TAY
LDA.b $06
CPX.b #$02
BNE ?+
ASL A
?+
CLC : ADC.b $06
ASL #3
CLC : ADC.b #$90+<offset>
STA.w OAMBuffer+0, Y
PHX
LDA.b $07
CPX.b #$02
BNE ?+
ASL A
?+
CLC : ADC.b $07
ASL #3
LDX.b $02
CLC : ADC.l DungeonMapRoomMarkerYBase, X
PLX
CLC : ADC.b #$08
CLC : ADC.w $0213
SEC : SBC.b $E8
STA.w OAMBuffer+1, Y
LDA.b #$33
STA.w OAMBuffer+2, Y
LDA.b #$23
STA.w OAMBuffer+3, Y
INC.b $00
endmacro
DrawSingleRoomEntrances:
STA.b $0E
PHY
SEP #$10
LDX.b #$FE
.next_entry
INX : INX
LDA.l SupertileEntrances, X
BPL +
JMP .done
+
AND.w #$0FFF
CMP.b $0E
BNE .next_entry
SEP #$20
LDA.l SupertileEntrances+1, X
TYX
PHA : PHA
BIT.b #$40
BEQ +
%DrawSingleEntrance(0)
+
PLA
BIT.b #$20
BEQ +
%DrawSingleEntrance(4)
+
PLA
BIT.b #$10
BEQ +
%DrawSingleEntrance(8)
+
.done
REP #$30
PLY
RTS
+59
View File
@@ -0,0 +1,59 @@
LoadDungeonIndicator:
; what we wrote over
JSL InitializeTilesets
LDA.w DungeonID
CMP.b #DungeonIndicatorMap_end-DungeonIndicatorMap : BCS .done
TAX
; mark dungeon as entered
REP #$20
LDA.w DungeonMask, X
ORA.l DungeonVisited
STA.l DungeonVisited
SEP #$20
; load indicator
LDA.l DungeonIndicatorMap, X
TAX
LDA.b #$80
STA.w $2115
REP #$20
LDA.w #$7140
STA.w $2116
LDY.b #$10
- LDA.l DungeonIndicatorGfx, X
STA.w $2118
INX #2
DEY #2
BNE -
SEP #$20
.done
RTL
DungeonIndicatorMap:
dw $0000
dw $0000
dw $0010
dw $0020
dw $0040
dw $0060
dw $0050
dw $00A0
dw $0070
dw $0090
dw $0030
dw $0080
dw $00B0
dw $00C0
.end
DungeonIndicatorGfx:
incbin "menu/dr_dungeon_indicators.2bpp"
.end
+214
View File
@@ -0,0 +1,214 @@
; move aga boss icon to correct room
org $8AEE75
db $08
; use AA1 = $1C for map stuff
org $80E193
skip 4
db $61, $62, $63, $D6
org $8AE11D
LDA.b #$1C
org $8AE12B
LDA.b #$20
; dungeon map sheets
org $80DDD3 ; slot $8F
db $61, $56, $57, $62
; always use $8F in dungeon map
org $8AE122
NOP #4
LDA.b #$8F
; unused chest data
org $81E9A5
dw $000F ; freezor room, second chest (only one chest in supertile)
org $81EA6E
dw $000F ; mire spike room, second chest (only one chest in supertile)
org $81EAF8
dw $000F ; GT button/switch/bladetrap room (no chest in supertile)
; Dungeon Map Palettes 2-5 left half
org $9BE544
dw $0000, $71E7, $7FFF, $3B5F, $0000, $0000, $7EB5, $1CE7
org $9BE564
dw $0000, $5565, $7FFF, $331C, $0000, $0000, $7E27, $0C63
org $9BE584
dw $0000, $4100, $7FFF, $2656, $4100, $0000, $4100, $4100
org $9BE5A4
dw $0000, $34E0, $7FFF, $34E0, $34E0, $0000, $34E0, $34E0
; move BG1 to main screen in dungeon map screen
org $8AE130
LDA.b #$17 : STA.b $1C
LDA.b #$00 : STA.b $1D
; make skull icon blink opposite our loot icons
org $8AEE2B
AND.b #$10
NOP #2
db $F0 ; BEQ to replace BCS
;================================================================================
; Overhaul of Dungeon Map Screen
;--------------------------------------------------------------------------------
org $8AE64D
PLX
JML NormalDrawDungeonMapRoom
org $8AE606
PLX
JML DrawNonexistentRoom
org $8AE152
JSL LoadLastHUDPalette
org $808BD3
JSL LoadStripes
BRA + : NOP #9 : +
org $8AEAE8 ; vanilla checks number of sprites drawn instead of... counting...
LDA.b $0E
CMP.b #$02
;================================================================================
; Swapping Dungeon in Dungeon Map Screen (L/R)
;--------------------------------------------------------------------------------
org $8AE9A7
JSL CheckSwitchMap
BRA + : NOP #3 : +
org $8AEF06
DEC.b $13
BNE +
JML DungeonMapSwitch_Submodule
+ RTL
warnpc $8AEF29
org $8AEADA
JML SkipMapSprites
org $8AE9C7
JSL RestoreDungeonMapFloorIndex
NOP
org $98BC86
JSL CacheCurrentDungeon
org $8AEFC5
JSL RestoreCurrentDungeon
NOP
org $8AE1EC
PLB
JML DrawDungeonLabel
org $8AE83E
JSL StartCurrentRoomSearch
BRA + : NOP #6 : +
org $8AE86C
JML FindCurrentRoom
padbyte $EA
pad $8AE891
org $8AEBF8
LDA.w $0217
SEC : SBC.b $0F
BMI +
CMP.b #$18
BCS +
skip 7
+
org $8AEB9A
db -8, 8, -8, 8
db -8, -8, 8, 8
;================================================================================
; Show indicators of what is left in each room
;--------------------------------------------------------------------------------
org $8AEABA
JSL RedrawLoot
NOP
org $8AE42B
JSL FirstDrawLoot
;================================================================================
; Blink indicators of what is left in each room
;--------------------------------------------------------------------------------
org $8AE964
JSL BlinkLoot
org $8AE235
JSL WriteBigEndianAddressX
org $8AE290
JSL WriteBigEndianAddressY
org $8AE350
JSL WriteBigEndianAddressY
org $8AE206
JSL StartDoubleWrite
NOP
org $8AE2E0
JML CheckDoubleWrite
NOP
org $8AE21C
JSL DrawMountain
BRA + : NOP #9 : +
;================================================================================
; Draw Wacky Door Rando Layouts
;--------------------------------------------------------------------------------
org $8AE3D7
LDA.l DRMode
BEQ +
JSL DrawWackyDoorRandoStuff
JMP.w $8AE422
NOP
+
warnpc $8AE3EB
org $8AE439
dw $0F19, $4F19, $8F19, $CF19
org $8AE449
dw $0F1A, $8F1A
org $8AE451
dw $0F1B, $4F1B
org $8AE473
NOP #2
org $8AE4A4
NOP #2
org $8AE4DC
NOP #2
org $8AE4F9
dw $0F1E, $0F1F, $0F20, $0F21
dw $0F22, $0F23, $0F24, $0F25
org $8AE539
LDA.w #$0F1C
org $8AE573
LDA.w #$0F1D
org $8AE555
NOP #2
org $8AE576
NOP #2
+43
View File
@@ -0,0 +1,43 @@
pushpc
incsrc dungeon_map_hooks.asm
macro WriteGFXSheetPointer(sheet, location)
pushpc
org $80CFC0+<sheet>
db <location>>>16
org $80D09F+<sheet>
db <location>>>8
org $80D17E+<sheet>
db <location>>>0
pullpc
endmacro
%WriteGFXSheetPointer($C9, DungeonMapIcons1)
%WriteGFXSheetPointer($CA, DungeonMapIcons2)
%WriteGFXSheetPointer($D5, DungeonMapIcons3)
%WriteGFXSheetPointer($D4, MapSheetD4)
%WriteGFXSheetPointer($D6, DungeonMapDoorConnectors)
%WriteGFXSheetPointer($61, DungeonMapIcons4)
%WriteGFXSheetPointer($62, DungeonMapIcons5)
%WriteGFXSheetPointer($63, DungeonMapIcons6)
%WriteGFXSheetPointer($14, DRSheet14)
pullpc
incsrc doors_dungeon_map.asm
incsrc draw_rooms.asm
incsrc map_bg3.asm
incsrc dungeon_switch.asm
incsrc draw_loot.asm
incsrc check_loot.asm
incsrc loot_hud.asm
incsrc blink_loot.asm
incsrc data/doors_display.asm
incsrc data/spiral_stairs.asm
incsrc data/fall_warps.asm
incsrc data/split_room.asm
incsrc data/doors_connections.asm
+437
View File
@@ -0,0 +1,437 @@
CheckSwitchMap:
LDA.l DRMode
BEQ .not_fancy_door_map
; fancy door map
SEP #$20
LDA.b $F6
BIT.b #$30
BNE .change_dungeon
BIT.b #$80
BNE .select_new_room
LDA.b $F4
BIT.b #$80
BNE .select_new_room
BIT.b #$20
BNE .next_entrance
BIT.b #$40
BNE .current_room
AND.b #$0F
BEQ .doors_done
BIT.b #$08 : BEQ + : LDA.b #$00 : BRA .doors_move_cursor : +
BIT.b #$04 : BEQ + : LDA.b #$02 : BRA .doors_move_cursor : +
BIT.b #$02 : BEQ + : LDA.b #$01 : BRA .doors_move_cursor : +
LDA.b #$03
.doors_move_cursor
STA.b $00
JSL MoveDoorsMapCursor
BRA .doors_done
.select_new_room
JSL DoorsMapSelectCursor
BRA .doors_done
.next_entrance
JSL DoorsMapNextEntrance
BRA .doors_done
.change_dungeon
LDA.l MapSwapping
BEQ .doors_done
JSL DoorsMapChangeDungeon
BRA .doors_done
.current_room
LDA.l CachedDungeonID
CMP.w DungeonID
BNE .doors_done
JSL DoorsMapCurrentRoom
BRA .doors_done
.doors_done
REP #$20
LDA.w #$0002 ; ignore input! nothing to see here!
RTL
.not_fancy_door_map
SEP #$20
LDA.l MapSwapping
BEQ .no_swap
LDA.b $F6
AND.b #$30
BNE .do_swap
.no_swap
; what we wrote over
REP #$20
LDA.w DungeonMapFloorCountData, X
AND.w #$000F
CLC : ADC.b $00
RTL
.do_swap
TXA
.try_next
ASL A
TAX
LDA.b $F6
BIT.b #$20
BNE +
INX
+
LDA.l DungeonMapData.prev, X
JSL IsValidDungeonToSwapTo
BCC .try_next
STA.w DungeonID
LDA.b #$04
STA.w SubModuleInterface
REP #$20
LDA.w #$0000
RTL
; in A = dungeon ID to check
; out C - CC = not valid, CS = valid
IsValidDungeonToSwapTo:
CMP.l CachedDungeonID ; dungeon we're in is always valid
BNE +
SEC
RTL
+
PHP
REP #$20
PHX : PHA
TAX
LDA.l MapSwapping
BIT.w #$0080
BNE .yes
BIT.w #$0001
BEQ +
; check visited flag
LDA.l SwapMasks, X
AND.l DungeonVisited
BNE .yes
+
LDA.l MapSwapping : BIT.w #$0002
BEQ +
; check map flag
LDA.l SwapMasks, X
AND.l MapField
BNE .yes
+
.no
PLA : PLX
PLP
CLC
RTL
.yes
PLA : PLX
PLP
SEC
RTL
SwapMasks:
dw $C000, $C000, $2000, $1000
dw $0800, $0400, $0200, $0100
dw $0080, $0040, $0020, $0010
dw $0008, $0004, $0002, $0001
DungeonMapSwitch_Submodule:
JSL $80893D
JSL $80833F
LDA.b #$09
STA.b $14
STA.w $0710
LDA.b #$01
STA.w SubModuleInterface
STA.w $020D
STZ.w $0213
STZ.w $021B
STZ.w $021C
STZ.b $06
STZ.b $07
LDA.w DungeonID
CMP.l CachedDungeonID
BEQ .current_dungeon
ASL A
TAX
LDA.l DungeonMapData.floor, X
STA.b CurrentFloor
BRA .continue
.current_dungeon
LDA.l CachedCurrentFloor
STA.b CurrentFloor
.continue
REP #$20
STZ.b $E0
STZ.b $E2
STZ.b $E4
STZ.b $E6
STZ.b $E8
STZ.b $EA
JML $98BCA1
SkipMapSprites:
STZ.b $00
LDA.b $02 : PHA
LDA.b $03 : PHA
LDA.b $04 : PHA
LDA.l DRMode
BNE +
LDA.w SubModuleInterface
CMP.b #$04
BEQ +
JSL DrawEntrances
+
PLA : STA.b $04
PLA : STA.b $03
PLA : STA.b $02
STZ.b $0E
STZ.b $0F
LDA.w SubModuleInterface
CMP.b #$04
BNE +
JML $8AEAFC
+
LDA.l DRMode
BEQ +
JSL DrawDoorsMapSprites
JML $8AEAFC
+
LDA.l CachedDungeonID
CMP.w DungeonID
BEQ +
JML $8AEAF3
+ JML $8AEADE
CacheCurrentDungeon:
STA.l $7EC206
SEP #$20
LDA.w DungeonID
STA.l CachedDungeonID
LDA.b CurrentFloor
STA.l CachedCurrentFloor
REP #$20
RTL
RestoreCurrentDungeon:
LDA.b #$F3
STA.w $012C ; what we wrote over
LDA.l CachedDungeonID
STA.w DungeonID
LDA.l CachedCurrentFloor
STA.b CurrentFloor
RTL
RestoreDungeonMapFloorIndex:
STZ.w $020F ; first part we wrote over
LDA.w $021B
STA.b $07
STZ.b $06
LDA.b $0A ; the rest of what we wrote over
AND.b #$08
RTL
DrawDungeonLabel:
LDY.b #$00
LDA.w DungeonID
ASL A
TAX
LDA.b NMISTRIPES
BEQ +
LDY.b #$20
+
; Dungeon Label
REP #$20
LDA.w #$E660
STA.w GFXStripes+$02, Y
LDA.w #$0300
STA.w GFXStripes+$04, Y
LDA.l DungeonLabels+0, X
STA.w GFXStripes+$06, Y
LDA.l DungeonLabels+2, X
STA.w GFXStripes+$08, Y
TYA
CLC : ADC.w #$0008
TAY
LDA.l MapSwapping
BEQ +
; L/R switch indicators
LDA.w #$E360
STA.w GFXStripes+$02, Y
LDA.w #$E960
STA.w GFXStripes+$0A, Y
LDA.w #$0300
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$0C, Y
LDA.w #$65BF
STA.w GFXStripes+$06, Y
LDA.w #$25BD
STA.w GFXStripes+$08, Y
LDA.w #$25BE
STA.w GFXStripes+$0E, Y
LDA.w #$25BF
STA.w GFXStripes+$10, Y
TYA
CLC : ADC.w #$0010
TAY
+
LDA.l DRMode
BNE .doors
JMP .skip_doors
.doors
; Select for Next Entrance indicator
LDA.w #$E311
STA.w GFXStripes+$02, Y
LDA.w #$E319
STA.w GFXStripes+$16, Y
LDA.w #$0F00
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$18, Y
LDA.w #$09B8
LDX.b #$07
-
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$1A, Y
INC A
INY : INY
DEX
BPL -
TYA
CLC : ADC.w #$0018
TAY
LDA.l CachedDungeonID
AND.w #$00FF
CMP.w DungeonID
BNE .skip_doors
; Y for Current Location indicator
LDA.w #$A411
STA.w GFXStripes+$02, Y
LDA.w #$A419
STA.w GFXStripes+$12, Y
LDA.w #$0B00
STA.w GFXStripes+$04, Y
STA.w GFXStripes+$14, Y
LDA.w #$09A9
LDX.b #$05
-
STA.w GFXStripes+$06, Y
STA.w GFXStripes+$16, Y
INC A
INY : INY
DEX
BPL -
TYA
CLC : ADC.w #$0014
TAY
.skip_doors
SEP #$20
LDA.b #$FF
STA.w GFXStripes+$02, Y
LDA.b #$01
STA.b NMISTRIPES
INC.w $020D ; what we wrote over
RTL
StartCurrentRoomSearch:
LDA.w DungeonMapFloorCountData, X
LSR A : LSR A : LSR A : LSR A
STA.b $00
LDA.w DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.b $00
ASL A
TAY
RTL
FindCurrentRoom:
LDA.w DungeonMapFloorToDataOffset, Y
STA.b $0C
LDY.w #$0000
SEP #$20
.next_room_check
CPY.b $0C
BCS .not_found
LDA.b ($04), Y
INY
CMP.b $0E
BEQ .found
LDA.b $00
CMP.b #$40
BCS .next_row
CLC : ADC.b #$10
STA.b $00
BRA .next_room_check
.next_row
STZ.b $00
LDA.b $02
CMP.b #$40
BCS .next_floor
CLC : ADC.b #$10
STA.b $02
BRA .next_room_check
.next_floor
STZ.b $02
BRA .next_room_check
.found
JML $8AE891
.not_found
JML $8AE8CD
+67
View File
@@ -0,0 +1,67 @@
;--------------------------------------------------------------------------------
SetItemRiseTimer:
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
LDA.b #$38 : STA.w AncillaTimer, X
RTL
.not_from_chest
JSL ItemIsJunk
BEQ .default
.junk
LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X
RTL
.default
TYA : STA.w AncillaTimer, X ; What we wrote over
RTL
;--------------------------------------------------------------------------------
ItemIsJunk:
PHX
LDA.l JunkItemTimer : BIT.b #$3F : BEQ .not_junk
BIT.b #$80 : BNE .check
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .check
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .check
BRA .not_junk
.check
LDA.w AncillaGet, X
TAX
LDA.l JunkTable, X
PLX
CMP.b #$00
RTL
.not_junk
PLX
LDA.b #$00
RTL
;--------------------------------------------------------------------------------
; A = item id being collected
ItemGetAlternateSFX:
PEA.w $C567 ; SNES to RTS to in bank 08
LDA.w AncillaGet, X : CMP.b #$4A : BNE +
; collecting pre-activated flute
LDA.b #$13 : JML Ancilla_SFX2_Near
+
JSL ItemIsJunk : BEQ .normal
LDA.b #$3B : JML Ancilla_SFX3_Near
.normal
LDA.b #$0F : JML Ancilla_SFX3_Near
;--------------------------------------------------------------------------------
; A = item id being collected
ItemGetOverworldAlternateSFX:
CPY.b #$4A : BNE +
; pre-activated flute
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
RTL
+
JSL ItemIsJunk : BEQ .normal
.junk
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3
RTL
.normal
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3
RTL
;--------------------------------------------------------------------------------
+29
View File
@@ -0,0 +1,29 @@
AdjustDefaultGraphics:
JSL $80E310
LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom
RTL
.gloom
LDA.b #$80
STA.w $2115
REP #$20
LDA.w #$7500
STA.w $2116
LDY.b #SkullGfx_end-SkullGfx
LDX.b #$00
- LDA.l SkullGfx, X
STA.w $2118
INX #2
DEY #2
BNE -
SEP #$20
RTL
SkullGfx:
incbin "data/skull.bin"
.end
+101
View File
@@ -0,0 +1,101 @@
pushpc
org $828C73
JSL EnterRoom
NOP
org $86C0AB
JSL CollectHeartPieceAndUpdate
org $86D1A8
JSL SetDeathFlagAndUpdate
pullpc
SetDeathFlagAndUpdate:
JSL UpdateLootHUD
JSL Sprite_ManuallySetDeathFlagUW
RTL
CollectHeartPieceAndUpdate:
JSL $85F018
JSL UpdateLootHUD
RTL
ClearLootHUD:
LDA.b GameMode
CMP.b #$07
BNE UpdateLootHUD
;
PHP
REP #$20
LDA.w #!BlankTile : STA.w EnemyDropIndicator
PLP
RTL
EnterRoom:
; what we wrote over
STZ.w $0200
STZ.b $B0
; fall into UpdateLootHUD
UpdateLootHUD:
PHP
REP #$30
PHX : PHY
SEP #$30
LDA.l HudItems_enabled : BEQ .setting_off
LDA.b IndoorsFlag : BEQ .done
REP #$30
LDA.b $00 : PHA
LDA.b $02 : PHA
LDA.b $04 : PHA
LDA.b $06 : PHA
LDA.b $08 : PHA
LDA.b $0E : PHA
; if if door rando, check for section of supertile
LDA.l DRMode
BNE +
; if not in door rando, check for section of supertile if we're not in a dungeon
LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ +
; just load the room id, we don't care about sections
LDA.b RoomIndex
BRA .check
+ ; figure out section before checking
JSL DetectLinksSection
INC A
XBA
ASL A : ASL A : ASL A : ASL A
ORA.b RoomIndex
.check
JSL CheckHudLoot
ASL A : TAX
LDA.l HUDLootTypeIcons, X
STA.w EnemyDropIndicator
PLA : STA.b $0E
PLA : STA.b $08
PLA : STA.b $06
PLA : STA.b $04
PLA : STA.b $02
PLA : STA.b $00
BRA .done
.setting_off
JSL SetupEnemyDropIndicator
.done
REP #$30
PLY : PLX
PLP
RTL
+213
View File
@@ -0,0 +1,213 @@
LoadStripes:
CPY.b #$09
BEQ .dungeon_map
.not_dungeon_map
LDA.w $80937A, Y
STA.b $00
LDA.w $809383,Y
STA.b $01
LDA.w $80938C,Y
STA.b $02
RTL
.dungeon_map
LDA.l DRMode
BNE .6x6
.5x5
LDA.b #BG3DungeonMap5x5Stripes>>0
STA.b $00
LDA.b #BG3DungeonMap5x5Stripes>>8
STA.b $01
LDA.b #BG3DungeonMap5x5Stripes>>16
STA.b $02
RTL
.6x6
LDA.b #BG3DungeonMap6x6Stripes>>0
STA.b $00
LDA.b #BG3DungeonMap6x6Stripes>>8
STA.b $01
LDA.b #BG3DungeonMap6x6Stripes>>16
STA.b $02
RTL
LoadLastHUDPalette:
; what we wrote over
JSL $9BEE52
REP #$20
LDA.l MapHUDPalette
STA.l PaletteBuffer+$3A
LDA.l MapHUDPalette+2
STA.l PaletteBuffer+$3C
LDA.l MapHUDPalette+4
STA.l PaletteBuffer+$3E
SEP #$20
RTL
BG3DungeonMap5x5Stripes:
; vanilla stuff
dw $4260, $0100, $2100
dw $4360, $0E40, $2101
dw $4B60, $0100, $6100
dw $6260, $2EC0, $2110
dw $6B60, $2EC0, $6110
dw $6263, $0100, $A100
dw $6363, $0E40, $A101
dw $6B63, $0100, $E100
dw $8460, $0B00, $2102, $2103, $2104, $2105, $2106, $2107
dw $A460, $0B00, $2112, $2113, $2114, $2115, $2116, $2117
dw $5D60, $0100, $6100
dw $7D60, $2EC0, $6110
dw $7D63, $0100, $E100
dw $0060, $7E40, $2111
dw $8063, $3E41, $2111
dw $0060, $3EC0, $2111
dw $0160, $3EC0, $2111
dw $0C60, $3EC0, $2111
dw $0D60, $3EC0, $2111
dw $1E60, $3EC0, $2111
dw $1F60, $3EC0, $2111
; left edge of map border, from vanilla
dw $4E60, $0100, $2100
dw $4F60, $1A40, $2101
dw $6E60, $2EC0, $2110
dw $6E63, $0100, $A100
dw $6F63, $1A40, $A101
; horizontal borders
dw $7260, $1240, $1D11
dw $D261, $1240, $1D11
dw $F261, $1240, $1D11
dw $5263, $1240, $1D11
; vertical borders
dw $7160, $2EC0, $1D11
dw $7C60, $2EC0, $1D11
macro TopOfSquares(start)
; silly Big Endian
db <start>>>8, <start>, $00, $13
dw $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C, $5D4C, $1D4C
endmacro
macro BottomOfSquares(start)
; silly Big Endian
db <start>>>8, <start>, $00, $13
dw $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C, $DD4C, $9D4C
endmacro
macro FullRow(start)
%TopOfSquares(<start>)
%BottomOfSquares(<start>+$20)
endmacro
; top grid
%FullRow($6092)
%FullRow($60D2)
%FullRow($6112)
%FullRow($6152)
%FullRow($6192)
%FullRow($6212)
%FullRow($6252)
%FullRow($6292)
%FullRow($62D2)
%FullRow($6312)
db $FF
BG3DungeonMap6x6Stripes:
; vanilla
dw $4260, $0100, $2100
dw $4360, $0E40, $2101
dw $4B60, $0100, $6100
dw $8460, $0B00, $2102, $2103, $2104, $2105, $2106, $2107
dw $A460, $0B00, $2112, $2113, $2114, $2115, $2116, $2117
dw $0060, $7E40, $2111
dw $8063, $3E41, $2111
dw $0060, $3EC0, $2111
dw $0160, $3EC0, $2111
dw $0C60, $3EC0, $2111
dw $0D60, $3EC0, $2111
dw $1E60, $3EC0, $2111
dw $1F60, $3EC0, $2111
; left side border
dw $6260, $1AC0, $2110
dw $6B60, $1AC0, $6110
dw $2262, $0100, $A100
dw $2362, $0E40, $A101
dw $2B62, $0100, $E100
; right side top area border
dw $4E60, $0100, $2100
dw $4F60, $1A40, $2101
dw $5D60, $0100, $6100
dw $6E60, $1AC0, $2110
dw $7D60, $1AC0, $6110
dw $2E62, $0100, $A100
dw $2F62, $1A40, $A101
dw $3D62, $0100, $E100
; right side bottom area border
dw $8E62, $0100, $2100
dw $8F62, $1A40, $2101
dw $9D62, $0100, $6100
dw $AE62, $06C0, $2110
dw $BD62, $06C0, $6110
dw $2E63, $0100, $A100
dw $2F63, $1A40, $A101
dw $3D63, $0100, $E100
; blank below left side
dw $4262, $4440, $2111
dw $6262, $4440, $2111
dw $8262, $1240, $2111
dw $A262, $1240, $2111
dw $C262, $1240, $2111
dw $E262, $1240, $2111
dw $0263, $1240, $2111
dw $2263, $1240, $2111
dw $4263, $4440, $2111
dw $6263, $4440, $2111
; map area inside top area
dw $6F60, $1A40, $1D11
dw $8F60, $1A40, $1D11
dw $AF60, $1A40, $1D11
dw $CF60, $1A40, $1D11
dw $EF60, $1A40, $1D11
dw $0F61, $1A40, $1D11
dw $2F61, $1A40, $1D11
dw $4F61, $1A40, $1D11
dw $6F61, $1A40, $1D11
dw $8F61, $1A40, $1D11
dw $AF61, $1A40, $1D11
dw $CF61, $1A40, $1D11
dw $EF61, $1A40, $1D11
dw $0F62, $1A40, $1D11
; center square
dw $3561, $0300
dw $5D4C, $1D4C
dw $5561, $0300
dw $DD4C, $9D4C
; map area inside bottom area
dw $AF62, $1A40, $1D11
dw $CF62, $1B00
dw $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $5D4C, $1D4C, $1D11, $1D11, $5D4C, $1D4C, $1D11
dw $EF62, $1B00
dw $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $DD4C, $9D4C, $1D11, $1D11, $DD4C, $9D4C, $1D11
dw $0F63, $1A40, $1D11
db $FF
+22
View File
@@ -0,0 +1,22 @@
;================================================================================
; Mimic Direction Check
;--------------------------------------------------------------------------------
; Output: 0 for darkness, 1 for lamp cone
;--------------------------------------------------------------------------------
MimicDirection:
LDA.b $F0
AND.b #$0F
BNE .done
LDA.l MimicDash
BEQ .done
LDA.w $0372
BEQ .done
LDA.w $0374
BNE .make_zero
LDA.b $67
.done
RTL
.make_zero
LDA.b #$00
RTL
+152
View File
@@ -0,0 +1,152 @@
SelectFirstFluteSpot:
LDA.l FluteBitfield
CMP.b #$FF
BNE +
RTL
+ LDA.b #$07
STA.w FluteSelection
.try_next
LDA.w FluteSelection
INC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
RTL
SelectFluteNext:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w FluteSelection
INC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
RTL
SelectFlutePrev:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w FluteSelection
DEC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
RTL
InvalidBeep:
LDA.b #$3C
STA.w $012E
RTL
SetFluteSpotPalette:
XBA
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .disabled
.enabled
XBA
STA.b $0C
BRA .done
.disabled
LDA.b #$30
STA.b $0C
.done
LDA.b #$00
STA.b $0B
RTL
MaybeMarkFluteSpotVisited:
; don't ever allow the portal in desert/mire to be marked visited
CMP.b #$30 : BEQ .done
CMP.b #$70 : BEQ .done
LDX.b #$0E
.next
CMP.l $02E849, X
BEQ .mark
DEX : DEX
BPL .next
BRA .done
.mark
TXA
LSR A
TAX
LDA.l FluteMenuNumbers_bits, X
EOR.b #$FF
AND.l FluteBitfield
STA.l FluteBitfield
.done
RTL
CheckEnterOverworld:
LDA.l $7EC213
STA.b $8A ; what we wrote over
SEP #$20
JSL MaybeMarkFluteSpotVisited
REP #$20
RTL
CheckTransitionOverworld:
STA.b $8A
STA.w $040A ; what we wrote over
JSL MaybeMarkFluteSpotVisited
LDA.b $8A
RTL
CheckFlute:
LDA.l FluteBitfield
AND.w #$00FF
BNE .pseudo
.real
LDA.w #$0003
BRA .done
.pseudo
LDA.w #$0002
.done
RTS
DrawFluteIcon:
AND.w #$00FF
CMP.w #$0002
BCC +
JSR CheckFlute
+
STA.b $02
RTL
CheckFluteInHUD:
LDA.l EquipmentWRAM-1, X
AND.w #$00FF ; what we wrote over
CPX.w #$000D
BNE +
CMP.w #$0002
BCC +
JSR CheckFlute
+
RTL
+272
View File
@@ -0,0 +1,272 @@
org $B9F000
SupertileRoomShapes:
incsrc data/supertile_shapes.asm
warnpc $B9F800
padbyte $FF
pad $B9F800
org $B9F800
DungeonMapData:
db $02, $04, $00, $00 ; Sewers
db $1A, $00, $00, $00 ; Hyrule Castle
db $00, $06, $00, $00 ; Eastern Palace
db $04, $14, $00, $00 ; Desert Palace
db $14, $0C, $01, $00 ; Castle Tower
db $0C, $10, $00, $00 ; Swamp Palace
db $08, $0A, $00, $00 ; Palace of Darkness
db $12, $18, $00, $00 ; Misery Mire
db $0A, $16, $FF, $00 ; Skull Woods
db $16, $0E, $00, $00 ; Ice Palace
db $06, $08, $01, $00 ; Tower of Hera
db $10, $12, $00, $00 ; Thieves Town
db $0E, $1A, $00, $00 ; Turtle Rock
db $18, $02, $01, $00 ; Ganon's Tower
db $1A, $02, $00, $00 ; Extra
db $1A, $02, $00, $00 ; Extra
struct DungeonMapData DungeonMapData
.prev: skip 1
.next: skip 1
.floor: skip 1
.unused: skip 1
endstruct
warnpc $B9F840
org $B9F840
DoorConnectionPointers:
skip $20
warnpc $B9F860
org $B9F860
CustomMapPointers:
skip $20
warnpc $B9F880
org $B9F880
LootTypeIcons:
dw $0B00, $0B00, $0B00, $0B00 ; 00 - nothing
dw $2DCB, $6DCB, $ADCB, $EDCB ; 01 - unknown - dot
dw $29EB, $69EB, $29FB, $69FB ; 02 - junk - pot
dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - health - plus
dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass
dw $29CE, $29CF, $29DE, $29DF ; 08 - map
dw $29CA, $69CA, $29DA, $29DB ; 09 - small key
dw $29C8, $69C8, $29D8, $29D9 ; 0A - big key
dw $29ED, $69ED, $29FD, $69FD ; 0B - important inventory item - big chest
dw $29CC, $29CD, $29DC, $69DC ; 0C - pendant
dw $2DC9, $69C9, $A9C9, $EDC9 ; 0D - crystal
dw $29E9, $69E9, $29F9, $69F9 ; 0E - triforce piece
dw $29EA, $69EA, $29FA, $69FA ; 0F - triforce
warnpc $B9F900
org $B9F900
LootTypeMapping:
incsrc data/item_mapping.asm
warnpc $B9FA00
org $B9FA00
; Room ID mappings to bit to check for presence and address of item drop
MiscLocations:
dw $10C8 : db $04 : dl HeartContainer_ArmosKnights
dw $1033 : db $04 : dl HeartContainer_Lanmolas
dw $1007 : db $04 : dl HeartContainer_Moldorm
dw $105A : db $04 : dl HeartContainer_HelmasaurKing
dw $1006 : db $04 : dl HeartContainer_Arrghus
dw $1029 : db $04 : dl HeartContainer_Mothula
dw $10AC : db $04 : dl HeartContainer_Blind
dw $10DE : db $04 : dl HeartContainer_Kholdstare
dw $1090 : db $04 : dl HeartContainer_Vitreous
dw $10A4 : db $04 : dl HeartContainer_Trinexx
dw $1073 : db $05 : dl BonkKey_Desert ; torch
dw $108C : db $05 : dl BonkKey_GTower ; torch
dw $1087 : db $05 : dl StandingKey_Hera
dw $10E1 : db $06 : dl HeartPiece_Forest_Thieves
dw $10E2 : db $06 : dl HeartPiece_Lumberjack_Tree
dw $10EA : db $05 : dl HeartPiece_Spectacle_Cave
dw $111B : db $06 : dl HeartPiece_Graveyard_Warp
dw $211B : db $05 : dl HeartPiece_Circle_Bushes
dw $111E : db $05 : dl RupeeNPC_NortheastDarkSwampCave
dw $1123 : db $05 : dl RupeeNPC_MoldormCave
dw $1126 : db $06 : dl HeartPiece_Mire_Warp
dw $1127 : db $05 : dl HeartPiece_Smith_Pegs
dw $FFFF
warnpc $B9FA9A
org $B9FA9A
MapHUDPalette:
dw $0000, $3ED8, $2E54
warnpc $B9FAA0
org $B9FAA0
PrizeLocations:
dw $00C8 : db $02 ; Armos Knights
dw $0033 : db $03 ; Lanmolas
dw $0006 : db $05 ; Arrghus
dw $005A : db $06 ; Helmasaur King
dw $0090 : db $07 ; Vitreous
dw $0029 : db $08 ; Mothula
dw $00DE : db $09 ; Kholdstare
dw $0007 : db $0A ; Moldorm
dw $00AC : db $0B ; Blind
dw $00A4 : db $0C ; Trinexx
dw $FFFF
warnpc $B9FAC0
org $B9FAC0
SupertileEntrances:
incsrc data/entrance_tiles.asm
warnpc $B9FB00
padbyte $FF
pad $B9FB00
; $B9FB00
DungeonLabels:
dw $25A4, $2579 ; Sewers
dw $2564, $255F ; Hyrule Castle
dw $2561, $256C ; Eastern Palace
dw $2560, $256C ; Desert Palace
dw $255D, $2570 ; Agahnim's Tower
dw $256F, $256C ; Swamp Palace
dw $256C, $2560 ; Palace of Darkness
dw $2569, $2569 ; Misery Mire
dw $256F, $2573 ; Skull Woods
dw $2565, $256C ; Ice Palace
dw $2570, $2564 ; Tower of Hera
dw $2570, $2570 ; Thieves' Town
dw $2570, $256E ; Turtle Rock
dw $2563, $2570 ; Ganon's Tower
dw $25A4, $25A4 ; Reserved
dw $25A4, $25A4 ; Reserved
; $B9FB40
HUDLootTypeIcons:
dw $287F ; 00 - nothing
dw $295C ; 01 - unknown - dot
dw $2954 ; 02 - junk - pot
dw $2950 ; 03 - small key
dw $2952 ; 04 - triforce piece
dw $2955 ; 05 - health - plus
dw $2953 ; 06 - less important item - small chest
dw $2D56 ; 07 - compass
dw $2957 ; 08 - map
dw $2950 ; 09 - small key
dw $2951 ; 0A - big key
dw $295A ; 0B - important inventory item - big chest
dw $2D58 ; 0C - pendant
dw $2D59 ; 0D - crystal
dw $2952 ; 0E - triforce piece
dw $295B ; 0F - triforce
; $B9FB60
NpcItems:
dw $10E3 : dl $7EF411 : db $80 ; Magic Bat
dw $1102 : dl $7EF410 : db $04 ; Sick Kid
dw $1105 : dl $7EF410 : db $10 ; Sahasrahla
dw $1109 : dl $7EF411 : db $20 ; Potion Shop
dw $1121 : dl $7EF411 : db $04 ; Blacksmith
dw $FFFF
warnpc $B9FBA0
padbyte $FF
pad $B9FBA0
; $B9FBA0
; Currently these two are hard-coded checks
; but maybe that will change if more show up someday?
MiscLocations2:
dw $1055 : dw $7EF3C6 : db $01 : dl UncleItem
dw $2107 : dw $7EF410 : db $80 : dl LibraryItem
dw $FFFF
warnpc $B9FE00
org $B9FE00
JunkTable:
incsrc data/junk_items.asm
warnpc $B9FF00
org $B9FF00
; $00 - do not show anything
; $01 - show presence of supertile as dark square
; $02 - show presence of quadrants as dark squares
; $03 - show outline of shape with walls but no interior details (palette 5)
; $04 - show dark with stairs but no hole/internal walls (palette 4)
; $05 - show mostly lit with stairs and holes/internal walls (palette 3)
; $06 - show fully lit with stairs and holes/internal walls (palette 2)
ShowRooms:
.default
db $02
.have_map
db $05
.have_compass
db $03
.visited_tile
db $04
.reserved
skip 3
.dark_room_cap
db $01
warnpc $B9FF08
org $B9FF08
; $00 - do not show anything
; $01 - show presence of unobtained items
; $02 - show compass if presence, otherwise presence of unobtained items
; $03 - show category of item
MapItems:
.default
db $00
.have_map
db $00
.have_compass
db $03
.visited_tile
db $02
.reserved
skip 3
.enabled
db $01
warnpc $B9FF10
org $B9FF10
HudItems:
.cave
db $00
.default_dungeon
db $00
.have_map
db $01
.have_compass
db $03
.reserved
skip 3
.enabled
db $01
warnpc $B9FF18
org $B9FF20
; ---P sepc
; P - dungeon prizes
; s - standing items (plus torches in GT and desert and bosses)
; e - enemy drops
; p - pots
; c - chests
ItemSources:
db $09
; B9FF21
; a--- --mv
; a - always
; m - have map
; v - have visited dungeon
MapSwapping:
db $01 ; NYI
+126
View File
@@ -0,0 +1,126 @@
DamageClassCalc:
PHA
LDA.l GanonVulnerabilityItem : BEQ +
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE +
PLA
JSL Ganon_CheckAncillaVulnerability
RTL
+
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .cane_immune
PLA
CMP.b #$01 : BEQ .red_cane
CMP.b #$2C : BEQ .red_cane
CMP.b #$31 : BEQ .blue_cane
CMP.b #$0C : BEQ .beam
BRA .not_cane_or_beam
.red_cane
PHA
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$04 : BEQ .special_cane
CMP.b #$05 : BEQ .special_cane
LDA.l SpecialWeapons : BIT.b #$80 : BNE .cane_immune
BRA .normal
.blue_cane
PHA
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .special_cane
CMP.b #$05 : BEQ .special_cane
LDA.l SpecialWeapons : BIT.b #$80 : BNE .cane_immune
BRA .normal
.cane_immune
LDA.w SpriteTypeTable, X : CMP.b #$1E : BEQ .normal ; crystal switch
PLA
BRA .impervious
.special_cane
PLA
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BEQ .unstunned_ganon
CMP.b #$88 : BEQ .mothula
BRA .special_level
.impervious
LDA.b #$FF
RTL
.beam
PHA
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
PLA
LDA.b #$05
RTL
.normal
PLA
.not_cane_or_beam
CMP.b #$07 : BNE .no_change
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE .normal_bombs
LDA.l SpecialWeaponLevel : BEQ .normal_bombs
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BEQ .unstunned_ganon
CMP.b #$88 : BEQ .mothula
CMP.b #$91 : BEQ .stalfos_knight
CMP.b #$92 : BEQ .helmasaur_king
.special_level
LDA.l SpecialWeaponLevel
BRA .done
.mothula
LDA.l SpecialWeaponLevel
CMP.b #$04 : BCS .fix_mothula
BRA .done
.fix_mothula
LDA.b #$03
BRA .done
.stalfos_knight
LDA.l StalfosBombDamage : BEQ .special_level
LDA.b #$08
BRA .done
.helmasaur_king
LDA.w $0DB0, X : CMP.b #$03 : BCS .special_level
LDA.b #$08
BRA .done
.unstunned_ganon
LDA.w $04C5 : CMP.b #$02 : BNE .impervious
LDA.w $0EE0, X : BNE .impervious
LDA.b #$34 : STA.w $0EE0, X ; give the poor pig some i-frames
BRA .special_level
.normal_bombs
LDA.b #$07
.no_change
PHX : TAX
LDA.l $86EC84, X
PLX
CMP.b #$06 : BNE .done
LDA.l BowEquipment : CMP.b #$03 : BCS .actual_silver_arrows
.normal_arrows
LDA.b #$06
.done
RTL
.actual_silver_arrows
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE +
LDA.b #$20 : STA.w SpriteTimerE, X
+ LDA.b #$09
RTL
;--------------------------------------------------------------------------------
Utility_CheckImpervious:
LDA.w SpriteControl, X : AND.b #$40 : BNE .impervious
LDA.w $0CF2 : CMP.b #$FF : BEQ .impervious
LDA.w UseY1 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammering
JSL Ganon_CheckHammerVulnerability : BCS .not_impervious
.not_impervious
LDA.b #$00 : RTL
.impervious
LDA.b #$01 : RTL
;--------------------------------------------------------------------------------
+130
View File
@@ -0,0 +1,130 @@
Ganon_CheckAncillaVulnerability:
PHA
LDA.w $0EE0, X : BNE .not_vulnerable_pla
PLA
PHX : PHA
LDA.l GanonVulnerabilityItem
BMI .no_weakness
TAX : PLA
CMP.l Ganon_CheckByAncilla, X : BNE +
PLX : BRA .vulnerable
+ PLX : PHA
LDA.l GanonVulnerabilityItem
BEQ .silver_arrows
CMP.b #$01 : BEQ .silver_arrows
CMP.b #$11 : BEQ .somaria
BRA .not_vulnerable_pla
.no_weakness
PLA : PLX
BRA .not_vulnerable
.silver_arrows
PLA : CMP.b #$09 : BNE .not_vulnerable
LDA.l BowEquipment : CMP.b #$03 : BCS +
LDA.b #$09 : BRA .not_vulnerable
+ BRA .vulnerable
.somaria
PLA
CMP.b #$01 : BEQ .vulnerable
CMP.b #$2C : BEQ .vulnerable
BRA .not_vulnerable
.vulnerable
PHX
LDA.l GanonVulnerabilityItem
TAX
LDA.l Ganon_IFrameDuration, X
PLX
STA.w $0EE0, X ; give the poor pig some iframes
LDA.b #$20 : STA.w SpriteTimerE, X
LDA.b #$09
RTL
.not_vulnerable_pla_pla
PLA
.not_vulnerable_pla
PLA
.not_vulnerable
PHX : TAX
LDA.l $86EC84, X
PLX
RTL
;--------------------------------------------------------------------------------
Ganon_CheckPowderVulnerability:
LDA.l GanonVulnerabilityItem : CMP.b #$05 : BNE .normal
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, X : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$05
STA.w $0EE0, X ; give ganon i-frames
LDA.b #$20 : STA.w SpriteTimerE, X
LDA.b #$09
BRA .done
.normal
LDA.b #$0A
.done
JML $86ECE6
;--------------------------------------------------------------------------------
Ganon_CheckBeeVulnerability:
; X is bee sprite index
; Y is target sprite index
LDA.l GanonVulnerabilityItem : CMP.b #$10 : BNE .normal
LDA.w SpriteTypeTable, Y : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, Y : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$10
STA.w $0EE0, X ; give ganon i-frames
LDA.b #$20 : STA.w SpriteTimerE, X
LDA.b #$09
BRA .done
.normal
LDA.b #$01
.done
TYX
JML $86ECE6
;--------------------------------------------------------------------------------
Ganon_CheckInvincible:
LDA.w $04C5 : CMP.b #$02 : BEQ .not_transparent
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .transparent ; non-stunned ganon
LDA.w UseY1 : AND.b #$0A : BEQ .transparent ; normal behavior if not hammering
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BNE .transparent
.not_transparent
LDA.b #$00 : RTL
.transparent
LDA.b #$01 : RTL
;--------------------------------------------------------------------------------
Ganon_CheckHammerVulnerability:
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BNE .normal
LDA.w SpriteTypeTable, X : CMP.b #$D7 : BNE .normal
LDA.w $0EE0, X : BNE .normal ; ganon has i-frames
LDA.l Ganon_IFrameDuration+$0C
STA.w $0EE0, X ; give ganon i-frames
LDA.b #$20 : STA.w SpriteTimerE, X
LDA.b #$09 : STA.w $0CF2 ; set damage class to silver
SEC : RTL
.normal
CLC : RTL
;--------------------------------------------------------------------------------
CheckBeeBoss:
; Y is sprite index
LDA.l GanonVulnerabilityItem : CMP.b #$10 : BNE .normal
LDA.w SpriteTypeTable, Y : CMP.b #$D7 : BNE .normal
LDA.b #$00 : RTL
.normal
LDA.w $0B6B, Y : AND.b #$02
RTL
;--------------------------------------------------------------------------------
Ganon_CheckByAncilla:
db #$00 ; default behavior
db #$00, #$05, #$1F, #$07, #$00
db #$02, #$0B, #$19, #$18, #$1C
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$31, #$00, #$00
Ganon_IFrameDuration:
db #$00 ; default behavior
db #$00, #$00, #$00, #$34, #$00
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$00, #$00, #$00
;--------------------------------------------------------------------------------
+26
View File
@@ -0,0 +1,26 @@
org $B9EE00
;================================================================================
warnpc $B9EEE0
org $B9EEE0
;--------------------------------------------------------------------------------
B9Source:
; $01 = GK Baserom
; $FF = GK Adjuster Patch
db $01
;--------------------------------------------------------------------------------
GKRomVersion:
; $01 = Dungeon Maps
; .., $01 = Dark rooms don't show on map from visition
; .., $02 = OW Fog and Grid modes
; .., $03 = Loot level of current supertile in HUD
db $01, $03, $00
;--------------------------------------------------------------------------------
;================================================================================
warnpc $B9EEF0
org $B9EEF0
GKRandomizerVersion:
padbyte $00
pad $B9EF00
;--------------------------------------------------------------------------------
+1 -1
View File
@@ -70,7 +70,7 @@ GetAgahnimLightning:
;1 = Forbid
AllowJoypadInput:
LDA.l PermitSQFromBosses : BEQ .fullCheck
LDA.w RoomItemsTaken : AND.b #$80 : BEQ .fullCheck
JSL CheckBossDropTouched : BEQ .fullCheck
LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check
RTL
.fullCheck
+52 -21
View File
@@ -40,14 +40,14 @@ RTL
dw .crystals
dw .pendant_bosses
dw .crystal_bosses
dw .bosses
dw .prize_bosses
dw .agahnim_defeated
dw .agahnim2_defeated
dw .goal_item
dw .collection_rate
dw .custom_goal
dw .bingo
dw .success
dw .all_bosses
dw .success
dw .success
dw .success
@@ -70,19 +70,24 @@ RTL
CMP.b #$07 : RTS
.pendant_bosses
PHP
LDA.b #$02
LDA.b #$20
JSR CheckForBossesDefeated : PLP : BCC +
CMP.b #$03 : RTS
.crystal_bosses
PHP
LDA.b #$01
LDA.b #$10
JSR CheckForBossesDefeated : PLP : BCC +
CMP.b #$07 : RTS
.bosses
.all_bosses
PHP
LDA.b #$30
JSR CheckForBossesDefeated : PLP : BCC +
CMP.b #$10 : RTS
.prize_bosses
PHP
LDA.b #$00
JSR CheckForBossesDefeated : PLP : BCC +
CMP.b #$10 : RTS
CMP.b #$0A : RTS
+ CMP.b [Scrap00], Y : INY : RTS
.agahnim_defeated
LDA.l ProgressIndicator : CMP.b #$03 : RTS
@@ -346,7 +351,7 @@ CheckTowerOpen:
;---------------------------------------------------------------------------------------------------
CheckAgaForPed:
REP #$20
; seems light_speed option to force blue balls is unused for now
; seems light_speed option to force blue balls is unused for now
BRA .vanilla
.light_speed
@@ -368,12 +373,38 @@ CheckAgaForPed:
RTL
;---------------------------------------------------------------------------------------------------
BossPrizeFlags:
; $00 = all prize bosses
db $00
db $01, $01, $01, $01, $01, $01, $01 ; crystals
db $01, $01, $01 ; pendants
db $00, $00, $00, $00, $00 ; padding
; $10 = all crystal bosses
db $00
db $01, $01, $01, $01, $01, $01, $01 ; crystals
db $00, $00, $00 ; pendants
db $00, $00, $00, $00, $00 ; padding
; $20 = all pendant bosses
db $00
db $00, $00, $00, $00, $00, $00, $00 ; crystals
db $01, $01, $01 ; pendants
db $00, $00, $00, $00, $00 ; padding
; $30 = all bosses
db $01 ; agas
db $01, $01, $01, $01, $01, $01, $01 ; crystals
db $01, $01, $01 ; pendants
db $00, $00, $00, $00, $00 ; padding
CheckForBossesDefeated:
PHB : PHX : PHY
STA.b Scrap04 ; 0 = check all, 1 = check crystals, 2 = check pendants
; $00 = check prize bosses
; $10 = check crystal bosses
; $20 = check pendant bosses
; $30 = check all bosses
STA.b Scrap04
LDA.b #CrystalPendantFlags_3>>16
LDA.b #bank(CrystalPendantFlags_3)
PHA : PLB
STZ.b Scrap03 ; count of number of bosses killed
@@ -381,22 +412,22 @@ CheckForBossesDefeated:
REP #$30
LDY.w #10
LDY.w #11
.next_check
LDA.w CrystalPendantFlags_3+2,Y : AND.w #$00FF : BEQ .skip
CMP.w #$0008 ; C set = pendant, C clear = crystal
LDA.b Scrap04 : BEQ .proceed
PHP : ROR : BCC +
PLP : BCS .skip : BRA .proceed
+ PLP : BCC .skip
SEP #$30
LDA.w CrystalPendantFlags_3+2, Y
CLC : ADC.b Scrap04
TAX
LDA.l BossPrizeFlags, X
REP #$30
BEQ .skip
.proceed
TYA : ASL : TAX
TYA : ASL A : TAX
LDA.l DungeonMapBossRooms+4,X
ASL : TAX
LDA.l RoomDataWRAM.l,X
LDA.l DungeonMapBossRooms+4, X
ASL A : TAX
LDA.l RoomDataWRAM.l, X
AND.w #$0800 : BEQ .skip
INC.b Scrap03
+9 -2
View File
@@ -2,13 +2,20 @@
; Randomize Half Magic Bat
;--------------------------------------------------------------------------------
GetMagicBatItem:
JSL ItemSet_MagicBat
%GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues)
CMP.b #$FF : BEQ .normalLogic
TAY
PHA : LDA.l MagicBatItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .have_shield
LDA.l MagicBatItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
JSL ItemSet_MagicBat
PLA
STZ.b ItemReceiptMethod ; 0 = Receiving item from an NPC or message
JML Link_ReceiveItem
.have_shield
PLA
RTL
.normalLogic
LDA.l HalfMagic
STA.l MagicConsumption
+26 -5
View File
@@ -5,8 +5,17 @@ HeartPieceGet:
PHX : PHY
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
LDY.w SprSourceItemId, X
JSL HeartGet
BCC +
JSL MaybeMarkDigSpotCollected
.skipLoad
+
PLY : PLX
RTL
;--------------------------------------------------------------------------------
HeartGet:
JSL ShieldCheck
BCC .skip
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
CPY.b #$26 : BNE .not_heart ; don't add a 1/4 heart if it's not a heart piece
CMP.b #$00 : BNE .not_heart
@@ -16,15 +25,27 @@ HeartPieceGet:
STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message
JSL Link_ReceiveItem
JSL MaybeUnlockTabletAnimation
PLY : PLX
RTL
SEC
RTL
.skip
JSL MaybeFreeLinkFromTablet
CLC
RTL
;--------------------------------------------------------------------------------
HeartContainerGet:
PHX : PHY
JSL IncrementBossSword
LDY.w SprSourceItemId, X
BRA HeartPieceGet_skipLoad
JSL HeartGet
PLY : PLX
BCC +
LDA.w RoomItemsTaken
ORA.b #$80
STA.w RoomItemsTaken
+
LDA.b #$01
STA.l BossDropTouched
RTL
;--------------------------------------------------------------------------------
DrawHeartPieceGFX:
PHP
+182 -13
View File
@@ -845,10 +845,10 @@ JSL LoadModifiedIceFloorValue_a01 : NOP
org $83FC16 ; <- 1FC16 ($A8, $B8, $3D, $D0, $B8, $3D)
db $B1, $C6, $F9, $C9, $C6, $F9 ; data insert - 2 chests, fat fairy room
; unused item receipts
; unused item receipts - moved to pyramid fairy
org $81E97E
dw $0116 : db $08
dw $0116 : db $25
dw $0116 : db $5E
dw $0116 : db $64
;--------------------------------------------------------------------------------
org $86B489 ; <- 33489 - sprite_smithy_bros.asm : 473 (LDA $7EF359 : CMP.b #$03 : BCS .tempered_sword_or_better)
JML GetSmithSword : NOP #4
@@ -1053,8 +1053,12 @@ Overworld_Entrance_BRANCH_EPSILON: ; go here to lock doors
org $81C50D : JSL CheckDungeonWorld
org $81C517 : JSL CheckDungeonCompletion
org $81C523 : JSL CheckDungeonCompletion
org $81C710 : JSL CheckSpawnPrize
BCS RoomTag_GetHeartForPrize_spawn_prize : BRA RoomTag_GetHeartForPrize_delete_tag
org $81C709 : JSL CheckBossDropTouched : NOP
org $81C710
JSL CheckSpawnPrize
BCS RoomTag_GetHeartForPrize_spawn_prize
BRA RoomTag_GetHeartForPrize_delete_tag
warnpc $81C731
org $81C742 : JSL SpawnDungeonPrize : PLA : RTS
org $8799EA : JML SetItemPose
org $88C415 : JSL PendantMusicCheck
@@ -1066,6 +1070,7 @@ org $88C622 : BCC ItemReceipt_Animate_continue
org $88C6BA : JSL CheckPoseItemCoordinates
org $88C6C3 : JSL PrepPrizeVRAMHigh
org $88C6F4 : JSL PrepPrizeVRAMLow
org $88CAC4 : JSL CheckBossDropTouched : NOP
org $88CAD6 : JSL HandleDropSFX : NOP #2
org $88CADC : BCC Ancilla29_MilestoneItemReceipt_skip_crystal_sfx
org $88CAE9 : JSL PrepPrizeTile
@@ -1117,7 +1122,8 @@ JSL CompareBombsToMax : NOP #11
org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F)
JSL GiveBonkItem : NOP #5
org $85FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong)
NOP #6
JSL UpdateLootHUD
NOP #2
;--------------------------------------------------------------------------------
org $868D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X)
JSL LoadBonkItemGFX
@@ -1517,8 +1523,9 @@ JSL DrawHeartPiecesMenu : BRA DrawEquipment_in_a_dungeon
;================================================================================
; 300 Rupee NPC
;--------------------------------------------------------------------------------
org $9EF060 ; <- F7060 - sprite_shopkeeper.asm:242 (INC $0D80, X)
JSL Set300RupeeNPCItem : NOP
org $9EF058 ; <- F7060 - sprite_shopkeeper.asm:242 (INC $0D80, X)
JSL Set300RupeeNPCItem
BCS + : RTS : NOP #6 : +
;================================================================================
; Tree Kid Fix
@@ -1643,7 +1650,8 @@ JSL FixAga2Bunny : NOP
; Open Mode Fixes
;--------------------------------------------------------------------------------
org $85DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5)
NOP #6
JSL UpdateLootHUD
NOP #2
;--------------------------------------------------------------------------------
org $85EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5)
JSL EndRainState : NOP #2
@@ -2005,7 +2013,7 @@ org $85EE53 ; <- 2EE53 - mushroom.asm : 22
JSL ItemCheck_Mushroom : NOP #2
;--------------------------------------------------------------------------------
org $85EE8C ; <- 2EE8C - mushroom.asm : 69
JSL ItemSet_Mushroom : NOP
JSL ItemSet_Mushroom : NOP #5
;--------------------------------------------------------------------------------
org $85F53E ; <- 2F53E - sprite_potion_shop.asm : 40
JSL ItemCheck_Powder : CMP.b #$20
@@ -2019,8 +2027,15 @@ JSL ItemCheck_MagicBat : BEQ + : RTS : NOP : +
;================================================================================
org $86BD6C ; <- 33D6C - sprite_middle_aged_man.asm:143 (JSL Link_ReceiveItem)
JSL Multiworld_MiddleAgedMan_ReactToSecretKeepingResponse
BRA + : NOP #8 : +
;--------------------------------------------------------------------------------
org $86BE70 ; <- 33E72 - bank_06.asm:11877
BRA + : NOP #10 : +
org $86BE81 ; <- 33E81 - sprite_hobo.asm:150 (JSL Link_ReceiveItem)
JSL Multiworld_Hobo_GrantBottle
BRA + : NOP #8 : +
;--------------------------------------------------------------------------------
org $8589B4 ; <- 289B4 ; sprite_master_sword.asm:183 (JSL Link_ReceiveItem)
JSL Multiworld_MasterSword_GrantToPlayer
;================================================================================
@@ -2033,7 +2048,10 @@ org $85EF79 ; <- 2EF79 - sprite_heart_upgrades.asm:128 (JSL Sprite_PrepAndDrawSi
JSL DrawHeartContainerGFX
;--------------------------------------------------------------------------------
org $85EFCE ; <- 2EFCE - sprite_heart_upgrades.asm:176 (JSL Link_ReceiveItem)
JSL HeartContainerGet
JSL HeartContainerGet ; this also handles setting the boss-killed flag if appropriate
PLX
RTS
warnpc $85EFDC
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
org $8799B1 ; 399B1 - Bank07.asm:4063 (CPY.b #$3E : BNE .notHeartContainer)
@@ -2059,10 +2077,13 @@ JSL HeartPieceSpawnDelayFix
;--------------------------------------------------------------------------------
org $85F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination
JSL HeartPieceGet
PHP
JSL DynamicDrawCleanup
PLP : BCC +
JSL IsMedallion
BCS + : BRA Sprite_EB_HeartPiece_handle_flags : + ; Don't change OW flags if we're
STZ.w SpriteAITable, X : RTS ; getting a tablet item
warnpc $85F0C0
;--------------------------------------------------------------------------------
org $86C0B0 ; <- 340B0 - sprite prep
JSL HeartPieceSpritePrep
@@ -2192,6 +2213,9 @@ JSL LampCheck
;--------------------------------------------------------------------------------
org $81F503 ; <- F503 - Bank01.asm:14994 (LDA.b #$01 : STA $1D)
JSL SetOverlayIfLamp
;--------------------------------------------------------------------------------
org $81B610 ; <- loading whether room is dark
JSL DarkRoomCheck
;================================================================================
;================================================================================
@@ -2736,5 +2760,150 @@ NOP #2 ; this fixes Link's direction after mirroring and falling after entering
;--------------------------------------------------------------------------------
; Enable new room header table
;--------------------------------------------------------------------------------
org $81B5E6
LDA.b #$30
if not(!FEATURE_FIX_BASEROM)
org $81B5E6
LDA.b #$30
endif
;================================================================================
;--------------------------------------------------------------------------------
; Mimic dash changes
;--------------------------------------------------------------------------------
org $9EC7BE
JSL MimicDirection
;================================================================================
;--------------------------------------------------------------------------------
; Gloom VRAM overwrite
;--------------------------------------------------------------------------------
org $828068
JSL AdjustDefaultGraphics
;================================================================================
;--------------------------------------------------------------------------------
; Remove Overwriting HUD gfx on game over
;--------------------------------------------------------------------------------
org $809038
RTS
;================================================================================
;--------------------------------------------------------------------------------
; Dungeon Indicator VRAM overwrite
;--------------------------------------------------------------------------------
org $828190
JSL LoadDungeonIndicator
org $829AA2
JSL LoadDungeonIndicator
;================================================================================
; Special Weapons Modes
;--------------------------------------------------------------------------------
org $86ECC3 ; Bank06.asm@4704 (PHX : TAX : LDA.l .damage_classes, X : PLX)
JSL DamageClassCalc
BRA + : NOP #29 : +
;--------------------------------------------------------------------------------
org $86ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40)
JSL Utility_CheckImpervious
NOP
;--------------------------------------------------------------------------------
;================================================================================
;--------------------------------------------------------------------------------
; Variable Ganon Vulnerability
;--------------------------------------------------------------------------------
org $88BBD4 ; ancilla_magic_powder.asm@253 (LDA #$0A : JSL Ancilla_CheckSpriteDamage.preset_class)
JSL Ganon_CheckPowderVulnerability
NOP #2
org $1D8F4E ; sprite_ganon.asm@325 (LDA $04C5 : CMP #$02)
JSL Ganon_CheckInvincible
NOP
org $0DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02)
JSL CheckBeeBoss
NOP
org $0DD677 ; Bank0D.asm@1303 (JSL Ancilla_CheckSpriteDamage.preset_class)
JSL Ganon_CheckBeeVulnerability
;--------------------------------------------------------------------------------
;================================================================================
; PseudoFlute
;--------------------------------------------------------------------------------
org $8AB7D5 ; bank_0A.asm@5655 (DEC.w $1AF0 : LDA.b #$20 : STA.w $012F)
JSL SelectFlutePrev
BRA + : NOP #2 : +
;--------------------------------------------------------------------------------
org $8AB7E3 ; bank_0A.asm@5665 (INC.w $1AF0 : LDA.b #$20 : STA.w $012F)
JSL SelectFluteNext
BRA + : NOP #2 : +
;--------------------------------------------------------------------------------
org $8AB877 ; bank_0A.asm@5758 (STA.b $0C : LDA.b #$00 : STA.b $0B)
JSL SetFluteSpotPalette
NOP #2
;--------------------------------------------------------------------------------
org $8AB8BF ; bank_0A.asm@5800 (STA.b $0C : LDA.b #$00 : STA.b $0B)
JSL SetFluteSpotPalette
NOP #2
;--------------------------------------------------------------------------------
org $82AFBE ; bank_02.asm@8776 (LDA.l $7EC213 : STA.b $8A)
JSL CheckEnterOverworld
NOP #2
;--------------------------------------------------------------------------------
org $82A9A1 ; bank_02.asm@7655 (STA.b $8A : STA.w $040A)
JSL CheckTransitionOverworld
NOP
;--------------------------------------------------------------------------------
org $8DF741
dw $3CD4, $3CD5, $3CE4, $3CE5
;--------------------------------------------------------------------------------
org $8DE58E ; bank_0D.asm@15401 (AND.w #$00FF : STA.b $02)
JSL DrawFluteIcon
NOP
;--------------------------------------------------------------------------------
org $8DFB63 ; bank_0D.asm@18092 (LDA.l $7EF33F, X : AND.w #$00FF)
JSL CheckFluteInHUD
NOP #3
;--------------------------------------------------------------------------------
;================================================================================
; Pikit Nonsense
;--------------------------------------------------------------------------------
org $81EC39
JSL SmallChest_ShieldCheck
BCC Dungeon_OpenKeyedObject_couldntFindChest+1
org $81EC17
JSL BigChest_ShieldCheck
BCC Dungeon_OpenKeyedObject_couldntFindChest
NOP #2
org $9E8D6F
JML PikitSteal
org $9E8CF2
JSL PikitDigest
NOP #2
org $879A52
JSL LinkSnoring
org $879AAD
JSL LinkAwaken
org $879A31
JSL TuckLink
NOP #2
org $80F950
NOP #2
org $81EEB3
JSL MaybeFlagVoOChestGamePrize
BCS ContinueVoOCheck
PLB : RTL
org $81EEC7
ContinueVoOCheck:
+8 -4
View File
@@ -114,11 +114,15 @@ StartingGenericKeys: skip 1 ; PC 0x18338B
InitInventoryTracking: skip 2 ; PC 0x18338C \ Need to set bits here for silver arrows,
InitBowTracking: skip 2 ; PC 0x18338E / boomerangs, powder/mushroom, etc
InitItemLimitCounts: skip 16 ; PC 0x183390
skip 37 ;
InitProgressIndicator: db $02 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard
InitProgressFlags: db $14 ; PC 0x1833C6 - Set to $00 for standard
skip 32 ;
InitPikitItem: dw $0004 ;
InitFluteBitfield: db $00 ;
InitSpecialWeaponLevel: db $00 ;
InitItemOnB: db $00 ;
InitProgressIndicator: db $00 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard
InitProgressFlags: db $04 ; PC 0x1833C6 - Set to $00 for standard
InitMapIcons: skip 1 ; PC 0x1833C7
InitStartingEntrance: db $01 ; PC 0x1833C8 - Set to $00 for standard
InitStartingEntrance: db $00 ; PC 0x1833C8 - Set to $00 for standard
InitNpcFlagsVanilla: skip 1 ; PC 0x1833C9
InitCurrentWorld: skip 1 ; PC 0x1833CA
skip 1 ; PC 0x1833CB
+22 -33
View File
@@ -165,6 +165,7 @@ AddInventory:
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .done
REP #$30
LDA.l TotalItemCounter : INC : TAY
JSL UpdateLootHUD
LDA.l BootsEquipment : AND.w #$00FF : BNE +
TYA : STA.l PreBootsLocations
+
@@ -648,16 +649,23 @@ RTL
CollectPowder:
LDY.w SprSourceItemId, X ; Retrieve stored item type
BNE +
; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
+ PHA
LDA.l WitchItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
LDA.b #$01 : STA.l ShopEnableCount
; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
+
PHA
JSL ShieldCheck
BCC .skip
LDA.l WitchItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
LDA.b #$01 : STA.l ShopEnableCount
PLA
STZ.w ItemReceiptMethod ; item from NPC
JSL Link_ReceiveItem
PHA : LDA.b #$00 : STA.l ShopEnableCount : STA.l PowderFlag : PLA
PHA : LDA.b #$00 : STA.l ShopEnableCount : STA.l PowderFlag
JSL ItemSet_Powder
.skip
PLA
RTL
;--------------------------------------------------------------------------------
@@ -792,32 +800,13 @@ RTL
}
;--------------------------------------------------------------------------------
MaybePlaySelectSFX:
LDA.w DungeonID : BMI .not_dungeon
.play
LDA.b #$20 : STA.w SFX3 ; menu select sound
RTL
.not_dungeon
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
BIT.b #$0C : BEQ .dont_play
BRA .play
.dont_play
RTL
;--------------------------------------------------------------------------------
; A = item id being collected
ItemGetAlternateSFX:
PEA.w $C567 ; SNES to RTS to in bank 08
LDA.w AncillaGet,X : CMP.b #$4A : BNE +
; collecting pre-activated flute
LDA.b #$13 : JML Ancilla_SFX2_Near
+ ; normal itemget sfx
LDA.b #$0F : JML Ancilla_SFX3_Near ; what we wrote over
; A = item id being collected
ItemGetOverworldAlternateSFX:
CPY.b #$4A : BNE +
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
LDA.w DungeonID : BMI .not_dungeon
.play
LDA.b #$20 : STA.w SFX3 ; menu select sound
RTL
+ ; normal itemget sfx
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3 ; what we wrote over
.not_dungeon
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
BIT.b #$0C : BEQ .dont_play
BRA .play
.dont_play
RTL
;--------------------------------------------------------------------------------
+93 -93
View File
@@ -416,40 +416,40 @@ macro SpriteProps(id, chest_width, standing_width, chest_pal, standing_pal, addr
pullpc
endmacro
%SpriteProps($00, 0, 2, $05, $02, PalettesVanilla_blue_ice+$0E) ; 00 - Fighter sword & Shield
%SpriteProps($01, 0, 2, $05, $05, PalettesCustom_master_sword) ; 01 - Master sword
%SpriteProps($02, 0, 2, $05, $01, PalettesCustom_tempered_sword) ; 02 - Tempered sword
%SpriteProps($03, 0, 2, $05, $04, PalettesCustom_golden_sword) ; 03 - Golden sword
%SpriteProps($00, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 00 - Fighter sword & Shield
%SpriteProps($01, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 01 - Master sword
%SpriteProps($02, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 02 - Tempered sword
%SpriteProps($03, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 03 - Golden sword
%SpriteProps($04, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 04 - Fighter shield
%SpriteProps($05, 2, 2, $05, $80, PalettesCustom_red_shield) ; 05 - Fire shield
%SpriteProps($06, 2, 2, $05, $80, PalettesCustom_mirror_shield) ; 06 - Mirror shield
%SpriteProps($07, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 07 - Fire rod
%SpriteProps($08, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 08 - Ice rod
%SpriteProps($09, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 09 - Hammer
%SpriteProps($0A, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 0A - Hookshot
%SpriteProps($0B, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 0B - Bow
%SpriteProps($0C, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 0C - Blue Boomerang
%SpriteProps($0D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 0D - Powder
%SpriteProps($07, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 07 - Fire rod
%SpriteProps($08, 0, 0, $02, $80, PalettesCustom_fighter_shield) ; 08 - Ice rod
%SpriteProps($09, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 09 - Hammer
%SpriteProps($0A, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 0A - Hookshot
%SpriteProps($0B, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 0B - Bow
%SpriteProps($0C, 0, 0, $02, $80, PalettesCustom_fighter_shield) ; 0C - Blue Boomerang
%SpriteProps($0D, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 0D - Powder
%SpriteProps($0E, 2, 0, $02, $03, PalettesVanilla_blue_ice+$0E) ; 0E - Bottle refill (bee)
%SpriteProps($0F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 0F - Bombos
%SpriteProps($10, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 10 - Ether
%SpriteProps($11, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 11 - Quake
%SpriteProps($12, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 12 - Lamp
%SpriteProps($13, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 13 - Shovel
%SpriteProps($14, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 14 - Flute
%SpriteProps($15, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 15 - Somaria
%SpriteProps($16, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 16 - Bottle
%SpriteProps($0F, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 0F - Bombos
%SpriteProps($10, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 10 - Ether
%SpriteProps($11, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 11 - Quake
%SpriteProps($12, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 12 - Lamp
%SpriteProps($13, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 13 - Shovel
%SpriteProps($14, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 14 - Flute
%SpriteProps($15, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 15 - Somaria
%SpriteProps($16, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 16 - Bottle
%SpriteProps($17, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 17 - Heart piece
%SpriteProps($18, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 18 - Byrna
%SpriteProps($19, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 19 - Cape
%SpriteProps($1A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 1A - Mirror
%SpriteProps($1B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 1B - Glove
%SpriteProps($1C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 1C - Mitts
%SpriteProps($1D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 1D - Book
%SpriteProps($1E, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 1E - Flippers
%SpriteProps($1F, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 1F - Pearl
%SpriteProps($18, 0, 0, $02, $80, PalettesCustom_fighter_shield) ; 18 - Byrna
%SpriteProps($19, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 19 - Cape
%SpriteProps($1A, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 1A - Mirror
%SpriteProps($1B, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 1B - Glove
%SpriteProps($1C, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 1C - Mitts
%SpriteProps($1D, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 1D - Book
%SpriteProps($1E, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 1E - Flippers
%SpriteProps($1F, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 1F - Pearl
%SpriteProps($20, 2, 2, $86, $86, PalettesCustom_crystal) ; 20 - Crystal
%SpriteProps($21, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 21 - Net
%SpriteProps($21, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 21 - Net
%SpriteProps($22, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 22 - Blue mail
%SpriteProps($23, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 23 - Red mail
%SpriteProps($24, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; 24 - Small key
@@ -457,11 +457,11 @@ endmacro
%SpriteProps($26, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 26 - Heart container from 4/4
%SpriteProps($27, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 27 - Bomb
%SpriteProps($28, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 28 - 3 bombs
%SpriteProps($29, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 29 - Mushroom
%SpriteProps($2A, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 2A - Red boomerang
%SpriteProps($2B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 2B - Full bottle (red)
%SpriteProps($2C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 2C - Full bottle (green)
%SpriteProps($2D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 2D - Full bottle (blue)
%SpriteProps($29, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 29 - Mushroom
%SpriteProps($2A, 0, 0, $01, $80, PalettesCustom_fighter_shield) ; 2A - Red boomerang
%SpriteProps($2B, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 2B - Full bottle (red)
%SpriteProps($2C, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 2C - Full bottle (green)
%SpriteProps($2D, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 2D - Full bottle (blue)
%SpriteProps($2E, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 2E - Potion refill (red)
%SpriteProps($2F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 2F - Potion refill (green)
%SpriteProps($30, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 30 - Potion refill (blue)
@@ -474,10 +474,10 @@ endmacro
%SpriteProps($37, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 37 - Green pendant
%SpriteProps($38, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 38 - Red pendant
%SpriteProps($39, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 39 - Blue pendant
%SpriteProps($3A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3A - Bow And Arrows
%SpriteProps($3B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3B - Silver Bow
%SpriteProps($3C, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3C - Full bottle (bee)
%SpriteProps($3D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3D - Full bottle (fairy)
%SpriteProps($3A, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 3A - Bow And Arrows
%SpriteProps($3B, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 3B - Silver Bow
%SpriteProps($3C, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 3C - Full bottle (bee)
%SpriteProps($3D, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 3D - Full bottle (fairy)
%SpriteProps($3E, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3E - Boss heart
%SpriteProps($3F, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3F - Sanc heart
%SpriteProps($40, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 40 - 100 rupees
@@ -488,23 +488,23 @@ endmacro
%SpriteProps($45, 0, 0, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 45 - Small magic
%SpriteProps($46, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 46 - 300 rupees
%SpriteProps($47, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 47 - 20 rupees green
%SpriteProps($48, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 48 - Full bottle (good bee)
%SpriteProps($49, 0, 2, $05, $02, PalettesCustom_fighter_shield) ; 49 - Tossed fighter sword
%SpriteProps($4A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 4A - Active Flute
%SpriteProps($4B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 4B - Boots
%SpriteProps($48, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 48 - Full bottle (good bee)
%SpriteProps($49, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 49 - Tossed fighter sword
%SpriteProps($4A, 2, 0, $02, $80, PalettesCustom_fighter_shield) ; 4A - Active Flute
%SpriteProps($4B, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 4B - Boots
%SpriteProps($4C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4C - Bomb capacity (50)
%SpriteProps($4D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4D - Arrow capacity (70)
%SpriteProps($4E, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4E - 1/2 magic
%SpriteProps($4F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4F - 1/4 magic
%SpriteProps($50, 0, 2, $05, $02, PalettesCustom_master_sword) ; 50 - Safe master sword
%SpriteProps($4E, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 4E - 1/2 magic
%SpriteProps($4F, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 4F - 1/4 magic
%SpriteProps($50, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 50 - Safe master sword
%SpriteProps($51, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 51 - Bomb capacity (+5)
%SpriteProps($52, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 52 - Bomb capacity (+10)
%SpriteProps($52, 2, 0, $04, $80, PalettesCustom_fighter_shield) ; 52 - Bomb capacity (+10)
%SpriteProps($53, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 53 - Arrow capacity (+5)
%SpriteProps($54, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 54 - Arrow capacity (+10)
%SpriteProps($55, 2, 2, $04, $04, $0000) ; 55 - Programmable item 1
%SpriteProps($56, 2, 2, $04, $04, $0000) ; 56 - Programmable item 2
%SpriteProps($57, 2, 2, $04, $04, $0000) ; 57 - Programmable item 3
%SpriteProps($58, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 58 - Upgrade-only Silver Arrows
%SpriteProps($58, 2, 0, $01, $80, PalettesCustom_fighter_shield) ; 58 - Upgrade-only Silver Arrows
%SpriteProps($59, 0, 0, $03, $03, PalettesCustom_off_black) ; 59 - Rupoor
%SpriteProps($5A, 2, 2, $01, $01, $0000) ; 5A - Nothing
%SpriteProps($5B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 5B - Red clock
@@ -696,7 +696,7 @@ endmacro
%InventoryItem($01, $0081, SwordTime, $0000) ; 01 - Master sword
%InventoryItem($02, $0001, SwordTime, $0000) ; 02 - Tempered sword
%InventoryItem($03, $0081, SwordTime, $0000) ; 03 - Butter sword
%InventoryItem($04, $0081, $0000, $0000) ; 04 - Fighter shield
%InventoryItem($04, $0080, $0000, $0000) ; 04 - Fighter shield
%InventoryItem($05, $0081, $0000, $0000) ; 05 - Fire shield
%InventoryItem($06, $0081, $0000, $0000) ; 06 - Mirror shield
%InventoryItem($07, $0085, $0000, $0000) ; 07 - Fire rod
@@ -1220,40 +1220,40 @@ ItemReceiptGraphicsOffsets:
; for receipt and non-receipt drawing.
;===================================================================================================
StandingItemGraphicsOffsets:
dw $0860 ; 00 - Fighter Sword and Shield
dw $00E0 ; 01 - Master Sword
dw $0120 ; 02 - Tempered Sword
dw $0160 ; 03 - Butter Sword
dw BigDecompressionBuffer+$09E0 ; 00 - Fighter Sword and Shield
dw BigDecompressionBuffer+$09E0 ; 01 - Master Sword
dw BigDecompressionBuffer+$09E0 ; 02 - Tempered Sword
dw BigDecompressionBuffer+$09E0 ; 03 - Butter Sword
dw BigDecompressionBuffer+$09E0 ; 04 - Fighter Shield
dw BigDecompressionBuffer+$1940 ; 05 - Fire Shield
dw BigDecompressionBuffer+$0C80 ; 06 - Mirror Shield
dw BigDecompressionBuffer+$1C80 ; 07 - Fire Rod
dw BigDecompressionBuffer+$1C80 ; 08 - Ice Rod
dw BigDecompressionBuffer+$1CA0 ; 09 - Hammer
dw BigDecompressionBuffer+$1C60 ; 0A - Hookshot
dw BigDecompressionBuffer+$1C00 ; 0B - Bow
dw BigDecompressionBuffer+$1DE0 ; 0C - Boomerang
dw BigDecompressionBuffer+$1CC0 ; 0D - Powder
dw BigDecompressionBuffer+$09E0 ; 07 - Fire Rod
dw BigDecompressionBuffer+$09E0 ; 08 - Ice Rod
dw BigDecompressionBuffer+$09E0 ; 09 - Hammer
dw BigDecompressionBuffer+$09E0 ; 0A - Hookshot
dw BigDecompressionBuffer+$09E0 ; 0B - Bow
dw BigDecompressionBuffer+$09E0 ; 0C - Boomerang
dw BigDecompressionBuffer+$09E0 ; 0D - Powder
dw 0 ; 0E - Bottle Refill (bee)
dw BigDecompressionBuffer+$1440 ; 0F - Bombos
dw BigDecompressionBuffer+$1400 ; 10 - Ether
dw BigDecompressionBuffer+$1480 ; 11 - Quake
dw BigDecompressionBuffer+$10C0 ; 12 - Lamp
dw BigDecompressionBuffer+$11E0 ; 13 - Shovel
dw BigDecompressionBuffer+$0C40 ; 14 - Flute
dw BigDecompressionBuffer+$1C40 ; 15 - Somaria
dw BigDecompressionBuffer+$14C0 ; 16 - Bottle
dw BigDecompressionBuffer+$09E0 ; 0F - Bombos
dw BigDecompressionBuffer+$09E0 ; 10 - Ether
dw BigDecompressionBuffer+$09E0 ; 11 - Quake
dw BigDecompressionBuffer+$09E0 ; 12 - Lamp
dw BigDecompressionBuffer+$09E0 ; 13 - Shovel
dw BigDecompressionBuffer+$09E0 ; 14 - Flute
dw BigDecompressionBuffer+$09E0 ; 15 - Somaria
dw BigDecompressionBuffer+$09E0 ; 16 - Bottle
dw BigDecompressionBuffer+$0C00 ; 17 - Heartpiece
dw BigDecompressionBuffer+$1C40 ; 18 - Byrna
dw BigDecompressionBuffer+$1100 ; 19 - Cape
dw BigDecompressionBuffer+$1040 ; 1A - Mirror
dw BigDecompressionBuffer+$1D40 ; 1B - Glove
dw BigDecompressionBuffer+$1D40 ; 1C - Mitts
dw BigDecompressionBuffer+$1D80 ; 1D - Book
dw BigDecompressionBuffer+$1000 ; 1E - Flippers
dw BigDecompressionBuffer+$1180 ; 1F - Pearl
dw BigDecompressionBuffer+$09E0 ; 18 - Byrna
dw BigDecompressionBuffer+$09E0 ; 19 - Cape
dw BigDecompressionBuffer+$09E0 ; 1A - Mirror
dw BigDecompressionBuffer+$09E0 ; 1B - Glove
dw BigDecompressionBuffer+$09E0 ; 1C - Mitts
dw BigDecompressionBuffer+$09E0 ; 1D - Book
dw BigDecompressionBuffer+$09E0 ; 1E - Flippers
dw BigDecompressionBuffer+$09E0 ; 1F - Pearl
dw BigDecompressionBuffer+$08A0 ; 20 - Crystal
dw BigDecompressionBuffer+$0860 ; 21 - Net
dw BigDecompressionBuffer+$09E0 ; 21 - Net
dw BigDecompressionBuffer+$1900 ; 22 - Blue Mail
dw BigDecompressionBuffer+$1900 ; 23 - Red Mail
dw BigDecompressionBuffer+$1DC0 ; 24 - Small Key
@@ -1261,11 +1261,11 @@ StandingItemGraphicsOffsets:
dw BigDecompressionBuffer+$18C0 ; 26 - Heart Container from 4/4
dw BigDecompressionBuffer+$1080 ; 27 - Bomb
dw BigDecompressionBuffer+$1840 ; 28 - 3 bombs
dw BigDecompressionBuffer+$1540 ; 29 - Mushroom
dw BigDecompressionBuffer+$1DE0 ; 2A - Red boomerang
dw BigDecompressionBuffer+$1500 ; 2B - Full bottle (red)
dw BigDecompressionBuffer+$1500 ; 2C - Full bottle (green)
dw BigDecompressionBuffer+$1500 ; 2D - Full bottle (blue)
dw BigDecompressionBuffer+$09E0 ; 29 - Mushroom
dw BigDecompressionBuffer+$09E0 ; 2A - Red boomerang
dw BigDecompressionBuffer+$09E0 ; 2B - Full bottle (red)
dw BigDecompressionBuffer+$09E0 ; 2C - Full bottle (green)
dw BigDecompressionBuffer+$09E0 ; 2D - Full bottle (blue)
dw $0920 ; 2E - Potion refill (red)
dw $08A0 ; 2F - Potion refill (green)
dw $08E0 ; 30 - Potion refill (blue)
@@ -1278,10 +1278,10 @@ StandingItemGraphicsOffsets:
dw $0820 ; 37 - Green pendant
dw BigDecompressionBuffer+$0080 ; 38 - Blue pendant
dw BigDecompressionBuffer+$0080 ; 39 - Red pendant
dw BigDecompressionBuffer+$0920 ; 3A - Tossed bow
dw BigDecompressionBuffer+$08E0 ; 3B - Silvers
dw BigDecompressionBuffer+$09A0 ; 3C - Full bottle (bee)
dw BigDecompressionBuffer+$0960 ; 3D - Full bottle (fairy)
dw BigDecompressionBuffer+$09E0 ; 3A - Tossed bow
dw BigDecompressionBuffer+$09E0 ; 3B - Silvers
dw BigDecompressionBuffer+$09E0 ; 3C - Full bottle (bee)
dw BigDecompressionBuffer+$09E0 ; 3D - Full bottle (fairy)
dw BigDecompressionBuffer+$18C0 ; 3E - Boss heart
dw BigDecompressionBuffer+$18C0 ; 3F - Sanc heart
dw BigDecompressionBuffer+$0D20 ; 40 - 100 rupees
@@ -1292,25 +1292,25 @@ StandingItemGraphicsOffsets:
dw BigDecompressionBuffer+$0CE0 ; 45 - Small magic
dw BigDecompressionBuffer+$0DA0 ; 46 - 300 rupees
dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green
dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee)
dw $00A0 ; 49 - Tossed fighter sword
dw BigDecompressionBuffer+$0C40 ; 4A - Active Flute
dw BigDecompressionBuffer+$0040 ; 4B - Boots
dw BigDecompressionBuffer+$09E0 ; 48 - Full bottle (good bee)
dw BigDecompressionBuffer+$09E0 ; 49 - Tossed fighter sword
dw BigDecompressionBuffer+$09E0 ; 4A - Active Flute
dw BigDecompressionBuffer+$09E0 ; 4B - Boots
; Rando items
dw $04A0 ; 4C - Bomb capacity (50)
dw $05A0 ; 4D - Arrow capacity (70)
dw $01A0 ; 4E - 1/2 magic
dw $01E0 ; 4F - 1/4 magic
dw $00E0 ; 50 - Safe master sword
dw BigDecompressionBuffer+$09E0 ; 4E - 1/2 magic
dw BigDecompressionBuffer+$09E0 ; 4F - 1/4 magic
dw BigDecompressionBuffer+$09E0 ; 50 - Safe master sword
dw $0420 ; 51 - Bomb capacity (+5)
dw $0460 ; 52 - Bomb capacity (+10)
dw BigDecompressionBuffer+$09E0 ; 52 - Bomb capacity (+10)
dw $0520 ; 53 - Arrow capacity (+5)
dw $0560 ; 54 - Arrow capacity (+10)
dw $0 ; 55 - Programmable item 1
dw $0 ; 56 - Programmable item 2
dw $0 ; 57 - Programmable item 3
dw $05E0 ; 58 - Upgrade-only silver arrows
dw BigDecompressionBuffer+$09E0 ; 58 - Upgrade-only silver arrows
dw $0 ; 59 - Rupoor
dw $0020 ; 5A - Nothing
dw $0DE0 ; 5B - Red clock
+2 -2
View File
@@ -46,7 +46,7 @@ dw $7F7F
; Ganons Tower
Notice_GTower:
db $76 : dw "Ganons Tower"
db $76 : dw "Ganon's Tower"
dw $7F7F
; Turtle Rock
@@ -81,7 +81,7 @@ dw $7F7F
; Dark Palace
Notice_PoD:
db $76 : dw "Dark Palace"
db $76 : dw "Palace of Darkness"
dw $7F7F
; Swamp Palace
+33 -10
View File
@@ -92,13 +92,25 @@ org $89D62E
;commenting out since this address can move
;UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
org $89D87E
if !FEATURE_FIX_BASEROM
org $81DB67
else
org $89D87E
endif
UWPotsPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
org $89DACE
if !FEATURE_FIX_BASEROM
org $01DDE7
else
org $89DACE
endif
UWPotsData: ; variable number of bytes (max 0x11D1) for all pots data
org $A88000
if !FEATURE_FIX_BASEROM
org $89D92E
else
org $A88000
endif
UWSpritesData: ; variable number of bytes (max 0x2800) for all sprites and sprite drop data
; First $2800 bytes of this bank (28) is reserved for the sprite tables
@@ -189,7 +201,7 @@ RevealPotItem:
LDA.b RoomIndex : ASL : TAX
LDA.l UWPotsPointers,X : STA.b Scrap00 ; we may move this
LDA.l UWPotsPointers, X : STA.b Scrap00 ; we may move this
LDA.w #UWPotsPointers>>16 : STA.b Scrap02
LDY.w #$FFFD : LDX.w #$FFFF
@@ -209,7 +221,8 @@ RevealPotItem:
STZ.w SpawnedItemIsMultiWorld
BIT.b Scrap08
BVS LoadMultiWorldPotItem
BMI LoadMajorPotItem
BPL .normal_secret
JMP LoadMajorPotItem
.normal_secret
STA.b Scrap08
@@ -230,6 +243,7 @@ RevealPotItem:
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
+ REP #$10
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total
JSL UpdateLootHUD
LDA.w #$0001 : STA.l UpdateHUDFlag
.obtained
PLY : PLX
@@ -329,6 +343,7 @@ IncrementCountsForSubstitute:
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
+
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total
JSL UpdateLootHUD
LDA.w #$0001 : STA.l UpdateHUDFlag
.obtained
SEP #$30 : PLX
@@ -345,7 +360,7 @@ ClearSpriteData:
STZ.w SprSourceItemId, X : STZ.w SprItemReceipt, X : STZ.w SprItemMWPlayer, X
STZ.w SprRedrawFlag, X
DEX : BPL .loop
JSR SetupEnemyDropIndicator
JSL ClearLootHUD
PLX
RTL
@@ -392,7 +407,7 @@ SetupEnemyDropIndicator:
.done
SEP #$20
RTS
RTL
; Runs during sprite load of the room
@@ -559,7 +574,7 @@ IncrementCountForMinor:
LDA.l SpriteDropData, X : BIT.b Scrap0A : BNE .obtained
ORA.b Scrap0A : STA.l SpriteDropData, X
SEP #$10
JSR SetupEnemyDropIndicator
JSL UpdateLootHUD
REP #$20
LDX.w DungeonID : CPX.b #$FF : BEQ +
CPX.b #$00 : BNE ++
@@ -615,10 +630,10 @@ MarkSRAMForItem:
TYX
LDA.w SpawnedItemFlag : CMP.w #$0001 : BEQ +
LDA.l SpriteDropData, X : ORA.b Scrap00 : STA.l SpriteDropData, X
SEP #$10 : JSR SetupEnemyDropIndicator
BRA .end
+ LDA.l RoomPotData, X : ORA.b Scrap00 : STA.l RoomPotData, X
.end
JSL UpdateLootHUD
SEP #$30 : PLY : PLX
LDA.w RoomItemsTaken
RTL
@@ -684,6 +699,14 @@ KeyGet:
LDA.l StandingItemsOn : BNE +
PLA : RTL
+ LDY.w SprSourceItemId, X
JSL ShieldCheck
BCS .not_replaced
PLA : PLA : PLA ; remove stored address to jump back to
PLA ; restore the A value going into KeyGet
JML $86D1A8
.not_replaced
LDA.w SprItemIndex, X : STA.w SpawnedItemIndex
LDA.w SprItemFlags, X : STA.w SpawnedItemFlag
STY.b Scrap00
@@ -870,7 +893,7 @@ CheckIfPotIsSpecial:
BIT.b $BF : BVC .upper ; if $BF has bit 14 set, it's upper layer
ORA.w #$2000 ; set the lower layer bit ($2000)
.upper
STA.b $90 ; cache tilemap offset
STA.b $90 ; cache tilemap offset
LDA.l UWPotsPointers,X : TAX
LDY.w #$0000
+29 -9
View File
@@ -5,28 +5,48 @@
;--------------------------------------------------------------------------------
LampCheck:
LDA.l LightConeModifier : BNE .lamp
LDA.l LampCone : AND.b #$10 : BNE .lamp ; always on
LDA.l LampEquipment : BNE .lamp ; skip if we already have lantern
LDA.l LampCone : AND.b #$10 : BNE .lamp
LDA.w DungeonID : CMP.b #$04 : BCS + ; are we en HC?
LDA.l LampCone : RTL
LDA.l LampCone : AND.b #$01 : RTL
+ : TDC
.lamp
RTL
;================================================================================
; Dark Room checks
;--------------------------------------------------------------------------------
; Output: 0 for normal room, 1 for darkness
;--------------------------------------------------------------------------------
DarkRoomCheck:
LDA.l LampCone : AND.b #$20 : BNE .no_dark
LDA.b [$0D], Y
AND.b #$01
RTL
.no_dark
LDA.b $A0 : ORA.b $A1 : BNE .not_dark
LDA.b #$01 ; ganon's room
RTL
.not_dark
LDA.b #$00 ; not ganon's room, so no darkness
RTL
;================================================================================
;--------------------------------------------------------------------------------
; Output: 0 locked, 1 open
;--------------------------------------------------------------------------------
CheckForZelda:
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling
LDA.b #$01 ; pretend we have zelda anyway
RTL
+
LDA.l FollowerIndicator
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling
LDA.b #$01 ; pretend we have zelda anyway
RTL
+
LDA.l FollowerIndicator
RTL
;================================================================================
SetOverlayIfLamp:
JSL LampCheck
STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all
JSL LampCheck
BEQ +
LDA.b #$01
+
STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all
RTL
;================================================================================
; Mantle Object Changes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -9,7 +9,7 @@ UploadMenuOnlyIcons:
REP #$20
LDA.w #MenuOnlyIcons : STA.w $4342
LDA.w #$1801 : STA.w $4340
LDA.w #$0240 : STA.w $4345
LDA.w #$0400 : STA.w $4345
LDA.w #$0F800>>1 : STA.w $2116
SEP #$20
@@ -20,4 +20,4 @@ UploadMenuOnlyIcons:
RTL
MenuOnlyIcons:
incbin "drfont.2bpp"
incbin "drfont.2bpp"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+59 -22
View File
@@ -49,27 +49,27 @@ WorldMapIcon_pos:
.hc
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.ep
dw $0F30, $06E0, $FF00, $FF00, $0F30, $06E0
dw $0F40, $0660, $FF00, $FF00, $0F40, $0660
.dp
dw $0170, $0E50, $FF00, $FF00, $0170, $0E50
dw $0140, $0D00, $FF00, $FF00, $0140, $0D00
.at
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.sp
dw $8790, $0FD0, $FF00, $FF00, $8790, $0FD0
dw $8778, $0F50, $FF00, $FF00, $8778, $0F50
.pod
dw $8F30, $06E0, $FF00, $FF00, $8F30, $06E0
dw $8F40, $0660, $FF00, $FF00, $8F40, $0660
.mm
dw $8160, $0D80, $FF00, $FF00, $8160, $0D80
dw $8148, $0D00, $FF00, $FF00, $8148, $0D00
.sw
dw $80F0, $0160, $FF00, $FF00, $80F0, $0160
dw $80B0, $00C0, $FF00, $FF00, $80B0, $00C0
.ip
dw $8CB0, $0E80, $FF00, $FF00, $8CB0, $0E80
dw $8CA0, $0E00, $FF00, $FF00, $8CA0, $0E00
.toh
dw $0900, $0130, $FF00, $FF00, $0900, $0130
dw $0900, $0100, $FF00, $FF00, $0900, $0100
.tt
dw $8240, $0840, $FF00, $FF00, $8240, $0840
dw $81F8, $0800, $FF00, $FF00, $81F8, $0800
.tr
dw $8F30, $01B0, $FF00, $FF00, $8F30, $01B0
dw $8F20, $0100, $FF00, $FF00, $8F20, $0100
.gt
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
@@ -262,8 +262,8 @@ DrawPrizesOverride:
; determine if draw and/or continue
JSR WorldMap_ValidateCoords : BCS .advance
JSR WorldMap_DrawTileOverlay
JSR WorldMap_DrawTile
JSR WorldMap_DrawTileOverlay
.advance
LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : +
PLB
@@ -321,18 +321,14 @@ RTS
WorldMap_DrawTile:
LDA.b Scrap00 : PHA
SEP #$20
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
INC.b OAMPtr+2
REP #$20
LDA.l $7EC10A : BIT.w #$4000 : SEP #$20 : BNE .raw_coords ; use raw OAM coordinates
JSR WorldMap_CalculateOAMCoordinates
BCS .apply_offsets
REP #$20
BRA .exit
.raw_coords
STA.b Scrap0E
LDA.l $7EC108 : STA.b Scrap0F
JSR WorldMap_CalculateOAMCoordinates
BCS .apply_offsets
REP #$20
BRA .exit
.raw_coords
STA.b Scrap0E
LDA.l $7EC108 : STA.b Scrap0F
.apply_offsets
LDX.b Scrap0A : BNE .aligned ; prize number/overlay: no offset
LDX.b Scrap0B : BEQ +
@@ -345,6 +341,8 @@ WorldMap_DrawTile:
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SBC.b #$04 : STA.b Scrap0F
.aligned
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
INC.b OAMPtr+2
REP #$20
LDA.b Scrap0E : STA.b (OAMPtr)
INC.b OAMPtr : INC.b OAMPtr
@@ -508,6 +506,45 @@ org $8AC3B6
JMP WorldMap_CalculateOAMCoordinates_exit_successfully
warnpc $8AC433
; most of this function is copied from the original, but rearranged
org $8AB7F3
FluteMenu_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL FluteMenu_MoveLinkSprite ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
JSL OWMapFluteCancelIcon ; override vanilla (LDA.b #$02 : STA.b Scrap0B)
LDX.b #$10 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8AB831
; most of this function is copied from the original, but rearranged
org $8ABF78
WorldMap_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL WorldMap_SkipHandleSprites ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
LDA.b #$02 : STA.b Scrap0B
LDX.b #$00 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8ABFB6
pullpc
WorldMap_LoadChrHalfSlot:
+79 -9
View File
@@ -89,6 +89,9 @@ GetMultiworldItem:
PHP
LDA.l !MULTIWORLD_ITEM : BNE +
LDA.l !MULTIWORLD_HUD_TIMER : BNE +
LDA.l ShieldEquipment : BNE ++
LDA.l PikitItem : CMP.b #$04 : BNE +
++
BRL .return
+
@@ -123,6 +126,39 @@ GetMultiworldItem:
BRL .return
+
LDA.b LinkPushDirection
BEQ +
BRL .return
+
LDA.l ShieldEquipment : BNE +
LDA.l PikitItem : CMP.b #$04 : BEQ +
LDY.b #$10
-
DEY
BMI .restore_shield
LDA.w $0E20, Y
CMP.b #$AA
BNE - ; go to next sprite if this sprite isn't a pikit
LDA.w $0DD0, Y
BEQ - ; go to next sprite if this sprite is dead/inactive
LDA.w $0ED0, Y
CMP.b #$04
BNE - ; go to next sprite if this pikit isn't grabbing a shield
LDA.w $0E90, Y
CMP.b #$04
BNE - ; go to next sprite if this pikit isn't grabbing a shield
BRA + ; active pikit has a shield
.restore_shield
; we have a pikit item, but no shield, and there's no pikit actively
; eating a shield, so return the shield to prevent a softlock
LDA.b #$01
STA.l ShieldEquipment
+
LDA.l !MULTIWORLD_ITEM : BNE +
BRL .return
+
@@ -202,35 +238,69 @@ RTL
Multiworld_BottleVendor_GiveBottle:
{
PHA
JSL ShieldCheck
PLA
BCC .no_take_shield
PHA : PHP
SEP #$20
LDA.l BottleMerchant_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLP : PLA
JSL Link_ReceiveItem ; thing we wrote over
RTL
RTL
.no_take_shield
PLA : PLA : PLA : PLX
JML $85EB3A
}
Multiworld_MiddleAgedMan_ReactToSecretKeepingResponse:
{
PHA
JSL ShieldCheck
PLA
BCC .no_take_shield
PHA : PHP
SEP #$20
LDA.l PurpleChest_Item_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLP : PLA
JSL Link_ReceiveItem ; thing we wrote over
RTL
; what we wrote over
JSL Link_ReceiveItem
LDA.l NpcFlagsVanilla
ORA.b #$10
STA.l NpcFlagsVanilla
.no_take_shield
RTL
}
Multiworld_Hobo_GrantBottle:
{
PHA : PHP
SEP #$20
LDA.l HoboItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLP : PLA
PHA
JSL ShieldCheck
PLA
BCC .no_take_shield
JSL Link_ReceiveItem ; thing we wrote over
RTL
; first bit we wrote over
LDX.b OverworldIndex
LDA.l OverworldEventDataWRAM, X
ORA.b #$20
STA.l OverworldEventDataWRAM, X
LDA.l HoboItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
; second bit we wrote over
JSL Link_ReceiveItem
LDA.l NpcFlagsVanilla
ORA.b #$01
STA.l NpcFlagsVanilla
.no_take_shield
RTL
}
Multiworld_MasterSword_GrantToPlayer:
+95 -54
View File
@@ -23,8 +23,14 @@ NewHUD_DrawBombs:
BRA .draw
.finite
LDA.w BombCapacity : BEQ .no_bomb_bag
LDA.w BombsEquipment
JSR HUDHex2Digit
BRA .draw
.no_bomb_bag
LDY.w #!BlankTile
TYX
.draw
STY.w HUDBombCount+0
@@ -146,14 +152,23 @@ NewHUD_DrawDungeonCounters:
;================================================================================
NewHUD_DrawPrizeIcon:
REP #$10
SEP #$20
REP #$10
SEP #$20
LDA.b GameMode
CMP.b #$12 : BEQ .no_prize
CMP.b #$0E : BEQ +
LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
+
LDA.w DungeonID
CMP.b #$12 : BEQ .no_prize
CMP.b #$0E : BNE .check_hud_flag
LDA.b GameSubMode
CMP.b #$03 : BNE .check_dungeon
LDA.w SubModuleInterface
CMP.b #$06 : BNE .check_hud_flag
LDA.l $7EC22A
BRA .know_dungeon
.check_hud_flag
LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
.check_dungeon
LDA.w DungeonID
.know_dungeon
CMP.b #$1A : BCS .no_prize
CMP.b #$04 : BCC .no_prize
CMP.b #$08 : BNE .dungeon
@@ -170,19 +185,19 @@ NewHUD_DrawPrizeIcon:
LDA.l MapMode
REP #$30
BEQ .prize
BEQ .prize
LDA.w MapField
AND.l DungeonItemMasks,X
BEQ .no_prize
.prize
TYX
LDA.l CrystalPendantFlags_3,X : AND.w #$00FF
ASL : TAX
LDA.l PrizeIconTiles_Transparent,X : BEQ .no_icon
TAY
BRA .draw_prize
.prize
TYX
LDA.l CrystalPendantFlags_3,X : AND.w #$00FF
ASL : TAX
LDA.l PrizeIconTiles_Transparent,X : BEQ .no_icon
TAY
BRA .draw_prize
.pendant
LDY.w #!PTile
@@ -294,16 +309,16 @@ MagicMeterColorMasks:
;================================================================================
PrizeIconTiles_Transparent:
dw $0000 ; no icon
dw $2978 ; crystal 1
dw $2979 ; crystal 2
dw $297A ; crystal 3
dw $297B ; crystal 4
dw $297C ; crystal 5
dw $297D ; crystal 6
dw $297E ; crystal 7
dw $2963 ; green pendant
dw $295E ; blue pendant
dw $296E ; red pendant
dw $2891 ; crystal 1
dw $2892 ; crystal 2
dw $2893 ; crystal 3
dw $2894 ; crystal 4
dw $2895 ; crystal 5
dw $2896 ; crystal 6
dw $2897 ; crystal 7
dw $2935 ; green pendant
dw $2936 ; blue pendant
dw $2937 ; red pendant
;================================================================================
DrawCompassCounts:
@@ -371,6 +386,7 @@ RTS
;================================================================================
DrawMapCounts:
LDA.l MapHUDMode : BEQ .done
LDA.l GenericKeys : BNE .done ; generator don't have an accurrate count of key doors in this case
; no map needed if this bit is set
BIT.b #$02 : BNE .draw_map_count
@@ -445,6 +461,15 @@ HUDHex4Digit_Long:
REP #$20
RTL
;================================================================================
ClearHearts:
LDA.w #!BlankTile
LDX.b #$14
- STA.l HUDTileMapBuffer+$066, X
STA.l HUDTileMapBuffer+$0A6, X
DEX #2
BPL -
RTS
;================================================================================
UpdateHearts:
PHB
@@ -455,6 +480,22 @@ UpdateHearts:
PHX
PLB
; OHKO mode
LDA.l ChallengeModes : AND.w #$0003 : CMP.w #$0001 : BNE +
LDA.w #$240A
STA.l HUDTileMapBuffer+$068
INC
STA.l HUDTileMapBuffer+$06A
INC
STA.l HUDTileMapBuffer+$06C
JMP .skip_partial
+
; Gloom mode
LDA.l ChallengeModes : AND.w #$0003 : CMP.w #$0002 : BNE +
JSR ClearHearts
+
LDA.w MaximumHealth
LSR
LSR
@@ -474,11 +515,11 @@ UpdateHearts:
CPX.b #$01
BMI .done_hearts
PHX
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
PLX
ORA.w #$20A0
PHX
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
PLX
ORA.w #$20A0
CPY.b #$01
BPL .add_heart
@@ -520,16 +561,16 @@ UpdateHearts:
CMP.w #$0005
BCS .more_than_half
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A1
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A1
STA.b (Scrap09)
BRA .skip_partial
BRA .skip_partial
.more_than_half
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0
STA.b (Scrap09)
.skip_partial
@@ -539,29 +580,29 @@ UpdateHearts:
RTL
CheckHeartPaletteFileSelect:
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_file_select,X
ORA.w #$0200
LDX.w #$000A
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_file_select,X
ORA.w #$0200
LDX.w #$000A
RTL
CheckHeartPalette:
PHX
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0
PLX
PHX
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0
PLX
RTS
ColorAnimatedHearts:
PHX
REP #$20
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
PLX
ORA.l HeartFramesBaseTiles,X
STA.b [Scrap00],Y
SEP #$20
PHX
REP #$20
LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X
PLX
ORA.l HeartFramesBaseTiles,X
STA.b [Scrap00],Y
SEP #$20
RTL
HeartFramesBaseTiles:
+99 -97
View File
@@ -155,8 +155,8 @@ AddReceivedItemExpandedGetItem:
PHA : LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
PLA : BRA .done
+ PLA
JSR ItemBehavior
SEP #$30
JSR ItemBehavior
SEP #$30
.done
PLB : PLX
LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over
@@ -188,10 +188,12 @@ ItemBehavior:
BRA .store_inventory_tracking
.flute_inactive
LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$02
BRA .store_inventory_tracking
.flute_active
LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$01
BRA .store_inventory_tracking
@@ -227,13 +229,13 @@ ItemBehavior:
JSR .increment_sword
RTS
.fighter_shield
.fighter_shield
.red_shield
.mirror_shield
SEP #$10
LDA.l ProgressiveFlag : BEQ +
LDA.l HighestShield : INC : TAX
JSR .increment_shield
LDA.l HighestShield : INC : TAX
JSR .increment_shield
+ RTS
.blue_mail
@@ -267,7 +269,7 @@ ItemBehavior:
.prog_shield
SEP #$10
LDA.l HighestShield : INC : TAX
JSR .increment_shield
JSR .increment_shield
REP #$10
RTS
@@ -280,13 +282,13 @@ ItemBehavior:
.bow
BIT.b #$40 : BNE .silversbow
LDA.b #$01 : STA.l BowEquipment
LDA.b #$01 : STA.l BowEquipment
RTS
.silversbow
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE +
LDA.b #03 : STA.l BowEquipment ; set bow to silver
LDA.b #03 : STA.l BowEquipment ; set bow to silver
+
LDA.b #$01 : STA.l BowEquipment
RTS
@@ -329,16 +331,16 @@ ItemBehavior:
.bow_and_arrows
LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers
LDA.l SilverArrowsUseRestriction : BNE .no_silvers
LDA.l CurrentArrows : BEQ +
LDA.b #04 : STA.l BowEquipment
BRA .store_bow
+
LDA.b #$03
LDA.l CurrentArrows : BEQ +
LDA.b #04 : STA.l BowEquipment
BRA .store_bow
+
LDA.b #$03
BRA .store_bow
.no_silvers
LDA.l CurrentArrows : BEQ +
LDA.b #02
BRA .store_bow
LDA.b #02
BRA .store_bow
+
LDA.b #$01
.store_bow
@@ -348,13 +350,13 @@ ItemBehavior:
.silver_bow
LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE .noequip
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
LDA.l CurrentArrows : BNE + ; check arrows
LDA.b #$03 : BRA ++ ; bow without arrow
+
LDA.b #$04 ; bow with arrow
++
STA.l BowEquipment
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
LDA.l CurrentArrows : BNE + ; check arrows
LDA.b #$03 : BRA ++ ; bow without arrow
+
LDA.b #$04 ; bow with arrow
++
STA.l BowEquipment
.noequip
RTS
@@ -383,7 +385,7 @@ ItemBehavior:
.master_sword_safe
SEP #$10
LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword
LDA.b #$02 : STA.l SwordEquipment ; set master sword
LDA.b #$02 : STA.l SwordEquipment ; set master sword
+
LDX.b #$02
JSR .increment_sword
@@ -424,20 +426,20 @@ ItemBehavior:
.silver_arrows
LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking
LDA.l SilverArrowsUseRestriction : BNE ++
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++
LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE +
!ADD.b #$02 : STA.l BowEquipment ; switch to silver bow
+
++
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++
LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE +
!ADD.b #$02 : STA.l BowEquipment ; switch to silver bow
+
++
LDA.l ArrowMode : BEQ +
LDA.b #$01 : STA.l ArrowsFiller
LDA.b #$01 : STA.l ArrowsFiller
+
RTS
.single_arrow
LDA.l ArrowMode : BEQ +
LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode.
LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode.
+
RTS
@@ -472,7 +474,7 @@ ItemBehavior:
.triforce
LDA.b OverworldIndex : CMP.b #$80 : BNE +
LDA.b LinkPosX+1 : BNE +
JSL ActivateGoal
JSL ActivateGoal
+
RTS
@@ -482,10 +484,10 @@ ItemBehavior:
LDA.l GoalCounter : INC : STA.l GoalCounter
CMP.w GoalItemRequirement : BCC +
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
SEP #$20 ; set 8-bit accumulator
LDA.b OverworldIndex : CMP.b #$80 : BNE +
LDA.b LinkPosX+1 : BNE +
JSL ActivateGoal
SEP #$20 ; set 8-bit accumulator
LDA.b OverworldIndex : CMP.b #$80 : BNE +
LDA.b LinkPosX+1 : BNE +
JSL ActivateGoal
+
SEP #$20 ; set 8-bit accumulator
RTS
@@ -557,8 +559,8 @@ ItemBehavior:
LSR
AND.w #$000F : TAX
ASL : CMP.w DungeonID : BEQ .same_dungeon
LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X
RTS
LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X
RTS
.same_dungeon
SEP #$20
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X
@@ -573,69 +575,69 @@ ItemBehavior:
.hc_smallkey
LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
LDA.l SewerKeys : INC : STA.l SewerKeys
RTS
LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys
LDA.l SewerKeys : INC : STA.l SewerKeys
RTS
.generic_smallkey
LDA.l GenericKeys : BEQ .normal
LDA.l CurrentSmallKeys : INC
STA.l CurrentGenericKeys : STA.l CurrentSmallKeys
RTS
LDA.l CurrentSmallKeys : INC
STA.l CurrentGenericKeys : STA.l CurrentSmallKeys
RTS
.normal
LDA.w DungeonID : BMI +
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
RTS
LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys
RTS
+
RTS
.increment_sword
LDA.l HighestSword
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better sword
TXA : STA.l HighestSword
TXA : STA.l HighestSword
+
RTS
.increment_shield
LDA.l HighestShield
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better shield
TXA : STA.l HighestShield
TXA : STA.l HighestShield
+
RTS
.increment_mail
LDA.l HighestMail
INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better mail
TXA : STA.l HighestMail
TXA : STA.l HighestMail
+
RTS
.increment_bigkey
SEP #$20
LDA.l StatsLocked : BNE +
LDA.l BigKeysBigChests
CLC : ADC.b #$10
STA.l BigKeysBigChests
LDA.l BigKeysBigChests
CLC : ADC.b #$10
STA.l BigKeysBigChests
+
RTS
.increment_map
SEP #$20
LDA.l StatsLocked : BNE +
LDA.l MapsCompasses
CLC : ADC.b #$10
STA.l MapsCompasses
JSL MaybeFlagMapTotalPickup
LDA.l MapsCompasses
CLC : ADC.b #$10
STA.l MapsCompasses
JSL MaybeFlagMapTotalPickup
+
RTS
.increment_compass
SEP #$20
LDA.l StatsLocked : BNE +
LDA.l MapsCompasses : INC : AND.b #$0F : TAX
LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses
TXA : ORA.l MapsCompasses : STA.l MapsCompasses
JSL MaybeFlagCompassTotalPickup
LDA.l MapsCompasses : INC : AND.b #$0F : TAX
LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses
TXA : ORA.l MapsCompasses : STA.l MapsCompasses
JSL MaybeFlagCompassTotalPickup
+
RTS
@@ -645,7 +647,7 @@ ItemBehavior:
SEC : SBC.b #$37
TAX
LDA.w PendantMasks,X : AND.l PendantsField : BNE +
LDA.l PendantCounter : INC : STA.l PendantCounter
LDA.l PendantCounter : INC : STA.l PendantCounter
+
RTS
@@ -661,15 +663,15 @@ ItemBehavior:
LDA.w #$0000
SEC
-
ROL
DEX
ROL
DEX
BPL -
SEP #$20
TAX
AND.l CrystalsField : BNE +
TXA
ORA.l CrystalsField : STA.l CrystalsField
LDA.l CrystalCounter : INC : STA.l CrystalCounter
TXA
ORA.l CrystalsField : STA.l CrystalsField
LDA.l CrystalCounter : INC : STA.l CrystalCounter
+
.done
RTS
@@ -680,56 +682,56 @@ ItemBehavior:
.bee_trap
SEP #$30
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
+
RTS
.good_bee
SEP #$30
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
JSL GoldBee_SpawnSelf_SetProperties
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
JSL GoldBee_SpawnSelf_SetProperties
+
RTS
.apples
SEP #$30
LDA.b #$AC : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
+
RTS
.fairy
SEP #$30
LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire
+
RTS
.chicken
SEP #$30
LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI +
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8
LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y
LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels
LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link
+
RTS
@@ -802,7 +804,7 @@ ResolveLootID:
CMP.l ProgressiveSwordLimit : BCC +
LDA.l ProgressiveSwordReplacement
JMP .get_item
++ LDA.l SwordEquipment
++ LDA.l SwordEquipment
+
TAX
LDA.w .prog_sword_ids,X
@@ -818,7 +820,7 @@ ResolveLootID:
CMP.l ProgressiveShieldLimit : BCC +
LDA.l ProgressiveShieldReplacement
JMP .get_item
++ LDA.l HighestShield
++ LDA.l HighestShield
+
TAX
LDA.w .shields_ids,X
@@ -834,7 +836,7 @@ ResolveLootID:
LDA.l ProgressiveArmorReplacement
JMP .get_item
+
++ LDA.l ArmorEquipment
++ LDA.l ArmorEquipment
TAX
LDA.w .armor_ids,X
JMP .have_item
@@ -1157,12 +1159,12 @@ JML StatsFinalPrep
;--------------------------------------------------------------------------------
ChestPrep:
LDA.b #$01 : STA.w ItemReceiptMethod
JSL IncrementChestCounter
JSL IncrementChestCounter
LDA.l ServerRequestMode : BEQ +
JSL ChestItemServiceRequest
RTL
+
LDY.b Scrap0C ; get item value
LDY.b Scrap0C ; get item value
SEC
RTL
+104 -20
View File
@@ -90,17 +90,31 @@ ItemSet_FairySword:
RTL
ItemSet_SmithSword:
PHA : LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
ItemSet_MagicBat:
PHA : LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
ItemSet_OldMan:
PHA : LDA.l OldManItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .skip
LDA.l OldManItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$01 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$01 : STA.l NpcFlags
.skip
PLA
RTL
ItemSet_ZoraKing:
@@ -108,21 +122,47 @@ ItemSet_ZoraKing:
RTL
ItemSet_SickKid:
PHA : LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .skip
LDA.l SickKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags
JSL UpdateLootHUD
.skip
PLA
RTL
ItemSet_TreeKid:
PHA : LDA.l TreeKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .skip
LDA.l TreeKidItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$08 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$08 : STA.l NpcFlags
.skip
PLA
RTL
ItemSet_Sahasrala:
PHA : LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .skip
LDA.l SahasralaItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags
JSL UpdateLootHUD
.skip
PLA
RTL
ItemSet_Catfish:
@@ -130,26 +170,46 @@ ItemSet_Catfish:
RTL
ItemSet_Library:
PHA : LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID : PLA
PHA
JSL ShieldCheck
BCC .skip
LDA.l LibraryItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
JSL Link_ReceiveItem ; thing we wrote over
PHA : LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags : PLA
PHA
LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags
JSL UpdateLootHUD
.skip
PLA
RTL
ItemSet_Mushroom:
PHA
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
LDY.w SprSourceItemId, X ; Retrieve stored item type
BNE +
; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
+
JSL ShieldCheck
BCC .skip
LDA.l MushroomItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
PLA
STZ.w ItemReceiptMethod ; thing we wrote over - the mushroom is an npc for item purposes apparently
PLA
JSL Link_ReceiveItem
PHA
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
.skip
PLA
RTL
ItemSet_Powder:
PHA : LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1 : PLA
PHA
LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1
JSL UpdateLootHUD
PLA
RTL
;================================================================================
@@ -175,11 +235,25 @@ Set300RupeeNPCItem:
+
LDA.w #$0000
LDY.b #$46 ; default to a normal 300 rupees
.done
.done
SEP #$20
STA.l !MULTIWORLD_ITEM_PLAYER_ID
JSL ShieldCheck
BCC .cant_take
LDA.w RoomItemsTaken
ORA.b #$40
STA.w RoomItemsTaken
PLP : PLA
RTL
SEC
RTL
.cant_take
PLP : PLA
CLC
RTL
;================================================================================
; Randomize Zora King
@@ -223,16 +297,26 @@ MarkThrownItem:
LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish
.zora
JSL ItemSet_ZoraKing
JSL ShieldCheck
BCC .skip
JSL ItemSet_ZoraKing
LDA.l ZoraItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
BRA .done
.catfish
JSL ItemSet_Catfish
JSL ShieldCheck
BCC .skip
JSL ItemSet_Catfish
LDA.l CatfishItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID
.done
PLA
JSL Link_ReceiveItem ; thing we wrote over
RTL
RTL
.skip
PLA
RTL
;--------------------------------------------------------------------------------
+86 -29
View File
@@ -78,8 +78,6 @@ org $8ab7af ;LDA $F2 : ORA $F0 : AND #$C0
jml OWFluteCancel2 : nop
org $8ab90d ;JSL $02E99D
jsl OWFluteCancel
org $8ab816
JSL OWMapFluteCancelIcon
; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house
org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40)
@@ -107,6 +105,9 @@ org $8aba6c ; < ? - Bank0a.asm:474 ()
jsl OWMapWorldCheck16 : nop
; Custom Overworld Map
org $8ABA52
JSL OverworldMap_InitGfx_InitScrap
org $8ABA99
WorldMap_LoadDarkWorldMap:
LDA.b GameMode : CMP.b #$14 ; attract module
@@ -121,15 +122,14 @@ BEQ .vanilla_light
warnpc $8ABAB5
.vanilla_light ; $0ABAB5
org $8ABD12
JSL MoveZoomedInPositionY
org $8ABD2F
JSL MoveZoomedInPositionX
org $8ABB32
JSL LoadMapOppositeWorld
org $8ABF78
JSL WorldMap_SkipHandleSprites
org $8ABA22
JSL MoveLinkMapSprite
org $8ABFF0
JSL MoveMirrorPortalMapSprite
; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots
@@ -335,6 +335,7 @@ OWLightWorldOrCrossed:
OWFluteCancel:
{
lda.l FluteBitfield : cmp.b #$FF : beq +
lda.l OWFlags+1 : and.b #$01 : bne +
jsl FluteMenu_LoadTransport : rtl
+ lda.w RandoOverworldTargetEdge : bne +
@@ -346,14 +347,16 @@ OWFluteCancel2:
lda.b Joy1B_All : ora.b Joy1A_All : and.b #$c0 : bne +
jml FluteMenu_HandleSelection_NoSelection
+ inc.w SubModuleInterface
lda.l FluteBitfield : cmp.b #$FF : beq .cancel
lda.l OWFlags+1 : and.b #$01 : beq +
lda.b Joy1B_All : cmp.b #$40 : bne +
.cancel
lda.b #$01 : sta.w RandoOverworldTargetEdge
+ rtl
}
OWMapFluteCancelIcon:
{
STA.b Scrap0B : LDX.b #$10 ; what we wrote over
LDA.b #$02 : STA.b Scrap0B ; what we wrote over
LDA.l OWFlags+1 : AND.b #$01 : BEQ .return
LDA.b GameSubMode : CMP.b #$0A : BNE .return
LDA.b FrameCounter : AND.b #$10 : BNE .return
@@ -410,7 +413,7 @@ LoadMapDarkOrCustom:
.custom
LDX.b OverworldIndex
LDA.l OWTileWorldAssoc,X
AND.w #$0040
AND.w #$0040
EOR.b ScrapBuffer72 ; apply tile swap flag
BEQ .draw_lw
LDA.w #OWMapGridDark
@@ -512,6 +515,12 @@ GetOWMapTilemapOffsetToCopy:
dw $0400+$0210 ; bottom right
}
OverworldMap_InitGfx_InitScrap:
{
STZ.b ScrapBuffer72 ; clear tile swap flag
LDA.b #$11 : STA.b MAINDESQ ; what we wrote over
RTL
}
LoadMapDarkOrCustom_long:
{
PHB : LDA.b #WorldMap_DarkWorldTilemap>>16 : PHA : PLB
@@ -540,26 +549,22 @@ LoadMapOppositeWorld:
LDA.b Joy1B_New : AND.b #$70 ; what we wrote over
RTL
}
FluteMenu_MoveLinkSprite:
{
JSR MoveMapSprite
BRA WorldMap_SkipHandleSprites_vanilla
}
WorldMap_SkipHandleSprites:
{
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
JSR MoveMapSprite : BEQ .vanilla
LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap
PLA : PLA : PEA.w $C3AF ; exit without drawing sprites
PLA : PLA : PEA.w $C39B ; exit without drawing sprites
RTL
.vanilla
LDA.b FrameCounter : AND.b #$10 ; what we wrote over
RTL
}
MoveLinkMapSprite:
{
STA.l $7EC10A ; what we overwrote
SEP #$20
JSR MoveMapSprite
REP #$20
RTL
}
MoveMirrorPortalMapSprite:
{
STA.l $7EC109 ; what we overwrote
@@ -567,9 +572,54 @@ MoveMirrorPortalMapSprite:
RTL
}
MoveZoomedInPositionY:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetYCoordHighByte
PHA
REP #$20
LDA.l $7EC108 : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC108 ; what we overwrote
RTL
}
MoveZoomedInPositionX:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte
PHA
REP #$20
LDA.l $7EC10A : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC10A ; what we overwrote
RTL
}
MoveMapSprite:
{
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return
PHP
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte : STA.l $7EC10B
JSR MoveMapSprite_GetYCoordHighByte : STA.l $7EC109
PLP
.return
RTS
}
MoveMapSprite_Setup:
{
LDA.l $7EC10B : AND.b #$0E : LSR
STA.b Scrap00
LDA.l $7EC109 : AND.b #$0E : ASL : ASL
@@ -588,12 +638,17 @@ MoveMapSprite:
TAX
AND.b #$07 : ASL
STA.b Scrap00
LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC10B
TXA
AND.b #$38 : LSR : LSR
STA.b Scrap00
LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC109
.return
RTS
}
MoveMapSprite_GetXCoordHighByte:
{
LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00
RTS
}
MoveMapSprite_GetYCoordHighByte:
{
TXA : AND.b #$38 : LSR : LSR : STA.b Scrap00
LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00
RTS
}
@@ -773,8 +828,8 @@ OWBonkDrops:
BRA .increment_collection
+
LDA.b OverworldIndex
BIT.b #$40 : BEQ +
LDA.l ProgressIndicator : CMP.b #$02
BIT.b #$40 : BEQ +
LDA.l ProgressIndicator : CMP.b #$02
LDA.b OverworldIndex : BCS + : AND.b #$BF
+
TAX : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X
@@ -1286,6 +1341,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
STZ.w RandoOverworldForceTrans
CMP.b #$02 : BNE +
DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : BRA .set_state
+
CMP.b #$03 : BNE ++
@@ -1306,6 +1362,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
LDA.b #$01 : STA.w LinkDeepWater
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS
.no_flippers
PHX
+4 -4
View File
@@ -291,10 +291,10 @@ RTL
REP #$30
;-------------------------------------------------------------------------------
; dungeon names
LDA.w #$2D50
LDA.w #$2DA4
LDY.w #00
.next_dungeon_name
.next_dungeon_name
LDX.w .dungeon_positions,Y
STA.w GFXStripes+$0646,X
INC
@@ -310,10 +310,10 @@ RTL
STA.w GFXStripes+$0706,X
DEX : DEX
BPL --
BPL --
LDA.l HudFlag : AND.w #$0020 : BEQ +
JMP .maps_and_compasses
JMP .maps_and_compasses
;-------------------------------------------------------------------------------
+
LDA.l HUDDungeonItems : AND.w #$0001 : BNE +
+471
View File
@@ -0,0 +1,471 @@
pushpc
org $89EB78
db $18, $1A, $AA ; replace uncle with pikit
org $80DCCE
db $1B ; load sprite sheet for pikit in link's house
org $80FC74
NOP #2 ; do not load rain-state sprites
org $8A8029
; move table slightly to center under pikit
db $C9, $C0, $DD
db $D0, $B8, $3C
pullpc
TuckLink:
; what we wrote over
STZ.w $037C
STZ.w $037D
LDA.b #$40 : STA.w $0FC2
LDA.b #$09 : STA.w $0FC3
LDA.b #$5A : STA.w $0FC4
LDA.b #$21 : STA.w $0FC5
RTL
LinkSnoring:
LDA.l ProgressIndicator
BNE +
LDA.b #$02
STA.l ProgressIndicator
LDA.b #$1D
LDY.b #$00
JSL Sprite_ShowMessageUnconditional
BRA ++
+
LDA.b FrameCounter
AND.b #$03
BNE ++
LDA.b $9C
CMP.b #$20
BEQ .lightened
DEC.b $9C
DEC.b $9D
++
; what we wrote over
LDA.b FrameCounter
AND.b #$1F
RTL
.lightened
INC.w $037C
INC.w $037D
RTL
LinkAwaken:
; what we wrote over
LDA.b #$06
STA.b LinkState
LDA.l ProgressFlags
ORA.b #$10
STA.l ProgressFlags
LDA.b #$01
STA.l StartingEntrance
RTL
BigChest_ShieldCheck:
PHY
LDY.b $0C
JSL ShieldCheck
STY.b $0C
PLY
BCC .no_open
LDA.l BigKeyField
AND.l BitMasks, X
.no_open
RTL
SmallChest_ShieldCheck:
PHY
LDY.b $0C
JSL ShieldCheck
STY.b $0C
PLY
BCC .no_open
LDA.w $0402
ORA.w RoomFlagMask, Y
.no_open
RTL
ShieldCheck:
PHP
REP #$30
PHX
TYA
AND.w #$00FF
TAX
LDA.l PikitItemList, X
AND.w #$00FF
BNE .replace
PLX
PLP
SEC
RTL
.replace
LDA.l ShieldEquipment
AND.w #$00FF
BNE .already_have_shield
TXA
STA.l PikitItem
LDY.w #$0004
PLX
PLP
SEC
RTL
.already_have_shield
SEP #$30
LDA.b #$3C
STA.w $012E
PHY
LDA.b #$98
LDY.b #$01
JSL Sprite_ShowMessageUnconditional
PLY
REP #$30
PLX
PLP
CLC
RTL
PikitSteal:
LDA.l ShieldEquipment
BNE .has_shield
JSL GetRandomInt
JML $9E8D73
.has_shield
LDA.b #$04
STA.w $0ED0, X
STA.w $0E90, X
LDA.b #$01
STA.w $0E30, X
STZ.w $012E
JML $9E8DC3
PikitDigest:
LDA.w $0ED0, X
CMP.b #$04
BNE +
STZ.w $0E90, X
LDA.b $6C
BNE + ; link is in a doorway; giving him an item could be scary :<
JSL IncrementPikitCounter
LDA.l PikitItem
CMP.b #$04
BEQ +
TAY
STZ.w ItemReceiptMethod
JSL Link_ReceiveItem
LDA.b #$04
STA.l PikitItem
+
; what we wrote over
STZ.w $0DA0, X
STZ.w $0ED0, X
RTL
MaybeFlagVoOChestGamePrize:
LDA.l $81EDA1, X
TAY
JSL ShieldCheck
BCC .cant_take
LDA.w RoomItemsTaken
ORA.b #$40
STA.w RoomItemsTaken
STX.b $C8
STY.b $0C
SEC
.cant_take
RTL
PikitItemList:
db $01 ; 00 - Fighter Sword and Shield
db $01 ; 01 - Master Sword
db $01 ; 02 - Tempered Sword
db $01 ; 03 - Butter Sword
db $00 ; 04 - Fighter Shield
db $00 ; 05 - Fire Shield
db $00 ; 06 - Mirror Shield
db $01 ; 07 - Fire Rod
db $01 ; 08 - Ice Rod
db $01 ; 09 - Hammer
db $01 ; 0A - Hookshot
db $01 ; 0B - Bow
db $01 ; 0C - Boomerang
db $01 ; 0D - Powder
db $00 ; 0E - Bottle Refill (bee)
db $01 ; 0F - Bombos
db $01 ; 10 - Ether
db $01 ; 11 - Quake
db $01 ; 12 - Lamp
db $01 ; 13 - Shovel
db $01 ; 14 - Flute
db $01 ; 15 - Somaria
db $01 ; 16 - Bottle
db $00 ; 17 - Heartpiece
db $01 ; 18 - Byrna
db $01 ; 19 - Cape
db $01 ; 1A - Mirror
db $01 ; 1B - Glove
db $01 ; 1C - Mitts
db $01 ; 1D - Book
db $01 ; 1E - Flippers
db $01 ; 1F - Pearl
db $00 ; 20 - Crystal
db $01 ; 21 - Net
db $00 ; 22 - Blue Mail
db $00 ; 23 - Red Mail
db $00 ; 24 - Small Key
db $00 ; 25 - Compass
db $00 ; 26 - Heart Container from 4/4
db $00 ; 27 - Bomb
db $00 ; 28 - 3 bombs
db $01 ; 29 - Mushroom
db $01 ; 2A - Red boomerang
db $01 ; 2B - Full bottle (red)
db $01 ; 2C - Full bottle (green)
db $01 ; 2D - Full bottle (blue)
db $00 ; 2E - Potion refill (red)
db $00 ; 2F - Potion refill (green)
db $00 ; 30 - Potion refill (blue)
db $00 ; 31 - 10 bombs
db $00 ; 32 - Big key
db $00 ; 33 - Map
db $00 ; 34 - 1 rupee
db $00 ; 35 - 5 rupees
db $00 ; 36 - 20 rupees
db $00 ; 37 - Green pendant
db $00 ; 38 - Blue pendant
db $00 ; 39 - Red pendant
db $01 ; 3A - Tossed bow
db $01 ; 3B - Silvers
db $01 ; 3C - Full bottle (bee)
db $01 ; 3D - Full bottle (fairy)
db $00 ; 3E - Boss heart
db $00 ; 3F - Sanc heart
db $00 ; 40 - 100 rupees
db $00 ; 41 - 50 rupees
db $00 ; 42 - Heart
db $00 ; 43 - Arrow
db $00 ; 44 - 10 arrows
db $00 ; 45 - Small magic
db $00 ; 46 - 300 rupees
db $00 ; 47 - 20 rupees green
db $01 ; 48 - Full bottle (good bee)
db $01 ; 49 - Tossed fighter sword
db $01 ; 4A - Active Flute
db $01 ; 4B - Boots
db $00 ; 4C - Bomb capacity (50)
db $00 ; 4D - Arrow capacity (70)
db $01 ; 4E - 1/2 magic
db $01 ; 4F - 1/4 magic
db $01 ; 50 - Safe master sword
db $00 ; 51 - Bomb capacity (+5)
db $01 ; 52 - Bomb capacity (+10)
db $00 ; 53 - Arrow capacity (+5)
db $00 ; 54 - Arrow capacity (+10)
db $00 ; 55 - Programmable item 1
db $00 ; 56 - Programmable item 2
db $00 ; 57 - Programmable item 3
db $01 ; 58 - Upgrade-only silver arrows
db $00 ; 59 - Rupoor
db $00 ; 5A - Nothing
db $00 ; 5B - Red clock
db $00 ; 5C - Blue clock
db $00 ; 5D - Green clock
db $01 ; 5E - Progressive sword
db $00 ; 5F - Progressive shield
db $00 ; 60 - Progressive armor
db $01 ; 61 - Progressive glove
db $00 ; 62 - RNG pool item (single)
db $00 ; 63 - RNG pool item (multi)
db $01 ; 64 - Progressive bow
db $01 ; 65 - Progressive bow
db $00 ; 66 -
db $00 ; 67 -
db $00 ; 68 -
db $00 ; 69 -
db $00 ; 6A - Triforce
db $00 ; 6B - Power star
db $00 ; 6C - Triforce Piece
db $00 ; 6D - Server request item
db $00 ; 6E - Server request item (dungeon drop)
db $00 ; 6F -
db $00 ; 70 - Map of Light World
db $00 ; 71 - Map of Dark World
db $00 ; 72 - Map of Ganon's Tower
db $00 ; 73 - Map of Turtle Rock
db $00 ; 74 - Map of Thieves' Town
db $00 ; 75 - Map of Tower of Hera
db $00 ; 76 - Map of Ice Palace
db $00 ; 77 - Map of Skull Woods
db $00 ; 78 - Map of Misery Mire
db $00 ; 79 - Map of Dark Palace
db $00 ; 7A - Map of Swamp Palace
db $00 ; 7B - Map of Agahnim's Tower
db $00 ; 7C - Map of Desert Palace
db $00 ; 7D - Map of Eastern Palace
db $00 ; 7E - Map of Hyrule Castle
db $00 ; 7F - Map of Sewers
db $00 ; 80 - Compass of Light World
db $00 ; 81 - Compass of Dark World
db $00 ; 82 - Compass of Ganon's Tower
db $00 ; 83 - Compass of Turtle Rock
db $00 ; 84 - Compass of Thieves' Town
db $00 ; 85 - Compass of Tower of Hera
db $00 ; 86 - Compass of Ice Palace
db $00 ; 87 - Compass of Skull Woods
db $00 ; 88 - Compass of Misery Mire
db $00 ; 89 - Compass of Dark Palace
db $00 ; 8A - Compass of Swamp Palace
db $00 ; 8B - Compass of Agahnim's Tower
db $00 ; 8C - Compass of Desert Palace
db $00 ; 8D - Compass of Eastern Palace
db $00 ; 8E - Compass of Hyrule Castle
db $00 ; 8F - Compass of Sewers
db $00 ; 90 - Skull key
db $00 ; 91 - Reserved
db $00 ; 92 - Big key of Ganon's Tower
db $00 ; 93 - Big key of Turtle Rock
db $00 ; 94 - Big key of Thieves' Town
db $00 ; 95 - Big key of Tower of Hera
db $00 ; 96 - Big key of Ice Palace
db $00 ; 97 - Big key of Skull Woods
db $00 ; 98 - Big key of Misery Mire
db $00 ; 99 - Big key of Dark Palace
db $00 ; 9A - Big key of Swamp Palace
db $00 ; 9B - Big key of Agahnim's Tower
db $00 ; 9C - Big key of Desert Palace
db $00 ; 9D - Big key of Eastern Palace
db $00 ; 9E - Big key of Hyrule Castle
db $00 ; 9F - Big key of Sewers
db $00 ; A0 - Small key of Sewers
db $00 ; A1 - Small key of Hyrule Castle
db $00 ; A2 - Small key of Eastern Palace
db $00 ; A3 - Small key of Desert Palace
db $00 ; A4 - Small key of Agahnim's Tower
db $00 ; A5 - Small key of Swamp Palace
db $00 ; A6 - Small key of Dark Palace
db $00 ; A7 - Small key of Misery Mire
db $00 ; A8 - Small key of Skull Woods
db $00 ; A9 - Small key of Ice Palace
db $00 ; AA - Small key of Tower of Hera
db $00 ; AB - Small key of Thieves' Town
db $00 ; AC - Small key of Turtle Rock
db $00 ; AD - Small key of Ganon's Tower
db $00 ; AE - Reserved
db $00 ; AF - Generic small key
db $00 ; B0 - Crystal 6
db $00 ; B1 - Crystal 1
db $00 ; B2 - Crystal 5
db $00 ; B3 - Crystal 7
db $00 ; B4 - Crystal 2
db $00 ; B5 - Crystal 4
db $00 ; B6 - Crystal 3
db $00 ; B7 - Reserved
db $00 ; B8 -
db $00 ; B9 -
db $00 ; BA -
db $00 ; BB -
db $00 ; BC -
db $00 ; BD -
db $00 ; BE -
db $00 ; BF -
db $00 ; C0 -
db $00 ; C1 -
db $00 ; C2 -
db $00 ; C3 -
db $00 ; C4 -
db $00 ; C5 -
db $00 ; C6 -
db $00 ; C7 -
db $00 ; C8 -
db $00 ; C9 -
db $00 ; CA -
db $00 ; CB -
db $00 ; CC -
db $00 ; CD -
db $00 ; CE -
db $00 ; CF -
db $00 ; D0 - Bee trap
db $00 ; D1 - Apples
db $00 ; D2 - Fairy
db $00 ; D3 - Chicken
db $00 ; D4 - Big Magic
db $00 ; D5 - 5 Arrows
db $00 ; D6 - Good Bee
db $00 ; D7 -
db $00 ; D8 -
db $00 ; D9 -
db $00 ; DA -
db $00 ; DB -
db $00 ; DC -
db $00 ; DD -
db $00 ; DE -
db $00 ; DF -
db $00 ; E0 -
db $00 ; E1 -
db $00 ; E2 -
db $00 ; E3 -
db $00 ; E4 -
db $00 ; E5 -
db $00 ; E6 -
db $00 ; E7 -
db $00 ; E8 -
db $00 ; E9 -
db $00 ; EA -
db $00 ; EB -
db $00 ; EC -
db $00 ; ED -
db $00 ; EE -
db $00 ; EF -
db $00 ; F0 -
db $00 ; F1 -
db $00 ; F2 -
db $00 ; F3 -
db $00 ; F4 -
db $00 ; F5 -
db $00 ; F6 -
db $00 ; F7 -
db $00 ; F8 -
db $00 ; F9 -
db $00 ; FA -
db $00 ; FB -
db $00 ; FC -
db $00 ; FD -
db $00 ; FE - Server request (async)
db $00 ; FF -
+26 -1
View File
@@ -65,6 +65,8 @@ LinkSubPixelVelocty = $7E002A ; Word length
LinkAnimationStep = $7E002E ;
LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right
;
FlagBY = $7E003A ; Bitfield for B and Y buttons.
;
OAMOffsetY = $7E0044 ;
OAMOffsetX = $7E0045 ;
LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames
@@ -114,6 +116,8 @@ RoomIndex = $7E00A0 ; Underworld room index. Word length. High byt
; Not zeroed on exit to overworld.
PreviousRoom = $7E00A2 ; Stores previous value of RoomIndex
;
CurrentFloor = $7E00A4 ; Current floor in dungeos
;
CameraBoundH = $7E00A6 ; Which set of camera boundaries to use.
CameraBoundV = $7E00A7 ;
;
@@ -194,6 +198,8 @@ BottleMenuCounter = $7E0205 ; Step counter for opening bottle menu
MenuFrameCounter = $7E0206 ; Incremented every menu frame. Never read.
MenuBlink = $7E0207 ; Incremented every frame and masked with $10 to blink cursor
;
DungeonMapCurrentFloor = $7E020E ;
;
RaceGameFlag = $7E021B ;
;
MessageJunk = $7E0223 ; Zeroed but never used (?)
@@ -332,6 +338,7 @@ SpawnedItemFlag = $7E0726 ; 0x02 - one for pot, 2 for sprite drop
SpawnedItemMWPlayer = $7E0728 ; Player Id for spawned item if Multiworld item 0x02
;
EnemyDropIndicator = $7E072A ; Used by HUD to indicate enemy drops remaining
NpcItemIndicator = $7E072C ; Flag used by HUD to indicate NPC item present
SkipBeeTrapDisguise = $7E072D ; Flag to skip bee trap disguise during draw routine
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
@@ -349,6 +356,7 @@ DynamicDropGFXSlots = $7E07F1 ; Assume future use of this up to $0E bytes, t
; which item gfx is currently occupying each slot
OAMBuffer = $7E0800 ; Main OAM buffer sent to OAM. $200 bytes.
OAMBuffer2 = $7E0A00 ;
OAMBufferAux = $7E0A20 ; high X-bit and size bit sent to OAM, one byte per sprite
;
TransparencyFlag = $7E0ABD ; Flags transparency effects e.g. in Thieves Town Hellway
;
@@ -470,6 +478,8 @@ RoomStripes = $7E1100 ; Used for room drawing.
;
MirrorPortalPosXH = $7E1ACF ; Mirror portal position. (High byte of X coordinate)
;
FluteSelection = $7E1AF0 ; Currently selected flute spot (zero-indexed)
;
IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?).
;
MessageSubModule = $7E1CD8 ;
@@ -560,6 +570,17 @@ PegColor = $7EC172 ;
;
GameOverSongCache = $7EC227 ;
;
CachedDungeonID = $7EC22A ; Cached while opening dungeon map
CachedCurrentFloor = $7EC22B ; to restore when closing
;
CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map
DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
;
DoorSlots = $7EC230 ; $32 bytes, used by dungeon map
DoorSlotScratch = $7EC262 ; 6 bytes, used by dungeon map
DoorSlotCursor = $7EC268 ; 2 bytes, used by dungeon map
CurrentDoorEntrance = $7EC26A ; 2 bytes, used by dungeon map
;
LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes.
;
PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm
@@ -577,6 +598,8 @@ HUDMultiIndicator = $7EC790 ;
HUDKeysObtained = $7EC7A2 ;
HUDKeysSlash = $7EC7A4 ;
HUDKeysTotal = $7EC7A6 ;
HUDKeysExtraPlus = $7EC7E4 ;
HUDKeysExtraCount = $7EC7E6 ;
;
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading.
@@ -599,7 +622,8 @@ HexToDecDigit3: skip 1 ;
HexToDecDigit4: skip 1 ;
HexToDecDigit5: skip 1 ;
SpriteSkipEOR: skip 2 ; Used in utilities.asm to determine when to skip drawing sprites. Zero-padded
skip $2B ; Unused
skip $2A ; Unused
BossDropTouched: skip 1
AltTextFlag: skip 2 ; dialog.asm: Determines whether to load from vanilla decompression buffer
; or from a secondary buffer (used for things like free dungeon item text)
BossKills: skip 1 ;
@@ -761,6 +785,7 @@ endmacro
%assertRAM(LinkRecoilZ, $7E0029)
%assertRAM(LinkAnimationStep, $7E002E)
%assertRAM(LinkDirection, $7E002F)
%assertRAM(FlagBY, $7E003A)
%assertRAM(OAMOffsetY, $7E0044)
%assertRAM(OAMOffsetX, $7E0045)
%assertRAM(LinkIncapacitatedTimer, $7E0046)

Some files were not shown because too many files have changed in this diff Show More