Compare commits
2 Commits
DungeonMap
...
GKNew_soul
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ef95d4873 | |||
| 295b6a229b |
@@ -50,7 +50,6 @@ 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
|
||||
|
||||
;================================================================================
|
||||
|
||||
@@ -119,7 +118,6 @@ incsrc doorframefixes.asm
|
||||
incsrc music.asm
|
||||
incsrc roomloading.asm
|
||||
incsrc icepalacegraphics.asm
|
||||
incsrc follower.asm
|
||||
warnpc $A18000
|
||||
|
||||
org $9C8000 ; text tables for translation
|
||||
@@ -179,10 +177,13 @@ incsrc toast.asm
|
||||
incsrc fastcredits.asm
|
||||
incsrc msu.asm
|
||||
incsrc menu/overworldmap.asm ; Overwrites some code in bank $8A
|
||||
incsrc bossicons.asm
|
||||
incsrc dungeonmap.asm
|
||||
incsrc hextodec.asm
|
||||
incsrc multiworld.asm
|
||||
incsrc textrenderer.asm
|
||||
incsrc crystalswitchbook.asm
|
||||
incsrc mimicdash.asm
|
||||
incsrc souls.asm
|
||||
warnpc $A58000
|
||||
|
||||
org $A28000
|
||||
@@ -192,6 +193,7 @@ fillbyte $00 : fill 32
|
||||
incbin "data/customitems.4bpp"
|
||||
PreloadedGraphicsROM:
|
||||
incbin "data/preloadedgfx.4bpp"
|
||||
incbin "data/bossicons.souls.4bpp"
|
||||
warnpc $A2B000
|
||||
org $A2B000
|
||||
incsrc itemdatatables.asm ; Statically mapped
|
||||
@@ -202,19 +204,6 @@ incsrc inventory.asm
|
||||
incsrc menu/hudalpha.asm
|
||||
warnpc $A38000
|
||||
|
||||
org $B98000
|
||||
incsrc crystalswitchbook.asm
|
||||
incsrc mimicdash.asm
|
||||
incsrc gloom.asm
|
||||
incsrc special_weapons.asm
|
||||
incsrc variable_ganon_vulnerability.asm
|
||||
incsrc pseudoflute.asm
|
||||
incsrc dungeon_map/main.asm
|
||||
warnpc $B9F000
|
||||
|
||||
org $B9F000
|
||||
incsrc dungeon_map/settings.asm
|
||||
|
||||
org $A38000
|
||||
incsrc stats/credits.asm ; Statically mapped
|
||||
incsrc stats/main.asm
|
||||
@@ -257,7 +246,7 @@ warnpc $B1A000
|
||||
|
||||
org $B1A000
|
||||
GFX_HUD_Items:
|
||||
incbin "menu/dr_sheet_dc.2bppc"
|
||||
incbin "menu/drsheetdc.2bppc"
|
||||
warnpc $B1A800
|
||||
|
||||
org $B1A800
|
||||
@@ -310,16 +299,6 @@ 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"
|
||||
MapSheetD4:
|
||||
incbin "menu/map_sheet_d4.3bppc"
|
||||
|
||||
org $8CD7DF
|
||||
incsrc data/playernamecharmap.asm
|
||||
org $8CE73D
|
||||
@@ -377,7 +356,6 @@ 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.
@@ -1,239 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
const int MAXLENGTH = 0x300;
|
||||
|
||||
struct section {
|
||||
int mode;
|
||||
int length;
|
||||
char data[2];
|
||||
int datalength;
|
||||
};
|
||||
|
||||
int find_duplicate(off_t loc, off_t size, 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, 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, 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, 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, char buf[], struct section *out) {
|
||||
struct section best, current;
|
||||
best.length = 0;
|
||||
if (!find_repeat_byte(loc, size, buf, ¤t)) {
|
||||
if (current.length > best.length) {
|
||||
best = current;
|
||||
}
|
||||
}
|
||||
if (!find_repeat_word(loc, size, buf, ¤t)) {
|
||||
if (current.length > best.length) {
|
||||
best = current;
|
||||
}
|
||||
}
|
||||
if (!find_incrementing_byte(loc, size, buf, ¤t)) {
|
||||
if (current.length > best.length) {
|
||||
best = current;
|
||||
}
|
||||
}
|
||||
if (!find_duplicate(loc, size, buf, ¤t)) {
|
||||
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, char data[], 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\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
char inbuf[size];
|
||||
|
||||
if (fread(inbuf, 1, size, inptr) < size) {
|
||||
printf("Error reading file: %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fclose(inptr);
|
||||
|
||||
|
||||
char outbuf[size * 2];
|
||||
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, §ion)) {
|
||||
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: %X bytes. Compressed: %X bytes.\n", size, oloc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,147 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
struct section {
|
||||
int mode;
|
||||
int length;
|
||||
char data[2];
|
||||
int datalength;
|
||||
};
|
||||
|
||||
int read_section(char buf[], int loc, struct section *out) {
|
||||
int nloc = loc;
|
||||
char header = buf[nloc++];
|
||||
|
||||
printf("%x: ", header & 0xff);
|
||||
|
||||
if (header == -1) {
|
||||
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;
|
||||
}
|
||||
|
||||
printf("%d: %x\n", result.mode, result.length);
|
||||
|
||||
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\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
char inbuf[size];
|
||||
|
||||
if (fread(inbuf, 1, size, inptr) < size) {
|
||||
printf("Error reading file: %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fclose(inptr);
|
||||
|
||||
char outbuf[size * 256];
|
||||
|
||||
int oloc = 0;
|
||||
struct section section;
|
||||
int i;
|
||||
|
||||
off_t loc = 0;
|
||||
|
||||
while ((loc = read_section(inbuf, loc, §ion)) >= 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: %X bytes. Decompressed: %X bytes.\n", size, oloc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -16,7 +16,7 @@ DrawLibraryItemGFX:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetLibraryItem:
|
||||
LDY.w SprSourceItemId, X
|
||||
LDY.w SprItemReceipt, X
|
||||
JSL ItemSet_Library ; contains thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -52,7 +52,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GiveBonkItem:
|
||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||
LDA.w SprSourceItemId, X
|
||||
LDA.w SprItemReceipt, X
|
||||
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
|
||||
|
||||
56
bugfixes.asm
56
bugfixes.asm
@@ -1,5 +1,12 @@
|
||||
;================================================================================
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
AssignKiki:
|
||||
LDA.b #$00 : STA.l FollowerDropped ; defuse bomb
|
||||
LDA.b #$0A : STA.l FollowerIndicator ; assign kiki as follower
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Name: AllowSQ
|
||||
; Returns: Accumulator = 0 if S&Q is disallowed, 1 if allowed
|
||||
@@ -180,25 +187,6 @@ LDA.b IndoorsFlag : BNE +
|
||||
+
|
||||
RTL
|
||||
|
||||
PostFixMirrorGfxPrep:
|
||||
LDA.b #$01 : STA.w OWTransitionFlag
|
||||
JML HandleFollowersAfterMirroring ; what we wrote over
|
||||
|
||||
; warning, this is called on frames after PostFixMirrorGfxPrep but for
|
||||
; several frames after, so we use OWTransitionFlag to run something once
|
||||
PostFixMirrorGfx:
|
||||
STA.w SubModuleInterface ; what we wrote over
|
||||
LDA.w OWTransitionFlag : CMP.b #$01 : BNE .done
|
||||
LDA.b #$08 : STA.w OWTransitionFlag
|
||||
JML FollowerGfxRedraw
|
||||
.done
|
||||
RTL
|
||||
|
||||
PostFixOAMGfx:
|
||||
JSL FollowerGfxRedraw
|
||||
REP #$30 : LDA.w #$2000 ; what we wrote over
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix losing VRAM gfx when using quake
|
||||
PostNMIUpdateBGCharHalf:
|
||||
@@ -271,7 +259,7 @@ ParadoxCaveGfxFix:
|
||||
LDA.b #$01 : STA.w DMAENABLE
|
||||
|
||||
.skipLine
|
||||
JML FollowerGfxRedraw
|
||||
RTL
|
||||
|
||||
.skipMostOfLine
|
||||
; Set line length to 192 bytes (the first 6 8x8 tiles in the line)
|
||||
@@ -284,11 +272,18 @@ SetItemRiseTimer:
|
||||
RTL
|
||||
|
||||
.not_from_chest
|
||||
LDA.l MultiworldJunkItemTimer : BEQ .default
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .multiworld
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .multiworld
|
||||
BRA .default
|
||||
|
||||
.multiworld
|
||||
LDA.l !MULTIWORLD_ITEM_ID
|
||||
JSL.l ItemIsJunk
|
||||
BEQ .default
|
||||
|
||||
.junk
|
||||
LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X
|
||||
LDA.l MultiworldJunkItemTimer : STA.w AncillaTimer, X
|
||||
RTL
|
||||
|
||||
.default
|
||||
@@ -297,24 +292,10 @@ SetItemRiseTimer:
|
||||
;--------------------------------------------------------------------------------
|
||||
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.l JunkItemTimer : AND.b #$40
|
||||
BEQ +
|
||||
LDA.b #JunkItems_triforce_end-JunkItems_end
|
||||
+
|
||||
CLC : ADC.b #JunkItems_end-JunkItems-1
|
||||
LDA.w AncillaGet, X
|
||||
TAX
|
||||
LDX.b #JunkItems_end-JunkItems-1
|
||||
-
|
||||
CMP.l JunkItems, X : BEQ .junk
|
||||
DEX : BPL -
|
||||
.not_junk
|
||||
PLX
|
||||
LDA.b #$00
|
||||
RTL
|
||||
@@ -347,7 +328,4 @@ JunkItems:
|
||||
db $D5 ; 5 Arrows
|
||||
db $D6 ; Good Bee
|
||||
.end
|
||||
db $6B ; Power Star
|
||||
db $6C ; Triforce Piece
|
||||
.triforce_end
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
!INERT = $00
|
||||
!INIT = $08
|
||||
!ALIVE = $09
|
||||
!OAMPROPS = $09
|
||||
!CUCCO_ENRAGED = $23
|
||||
|
||||
CuccoStorm:
|
||||
@@ -13,7 +12,6 @@ CuccoStorm:
|
||||
LDA.b GameMode : CMP.b #$09 : BNE + ; only if outdoors
|
||||
LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames
|
||||
|
||||
.activate
|
||||
-
|
||||
;==== Find a Cucco
|
||||
|
||||
@@ -42,11 +40,7 @@ CuccoStorm:
|
||||
PLY
|
||||
CPY.b #$FF : BEQ + ; fail if no slots found
|
||||
LDA.b #!CUCCO : STA.w SpriteTypeTable, Y
|
||||
LDA.b #!ALIVE : STA.w SpriteAITable, Y
|
||||
PHX
|
||||
TYX : JSL ResetSpriteProperties
|
||||
PLX
|
||||
LDA.b #!OAMPROPS : STA.w SpriteOAMProp, Y
|
||||
LDA.b #!INIT : STA.w SpriteAITable, Y
|
||||
LDA.b LinkPosY : STA.w SpritePosYLow, Y
|
||||
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
|
||||
LDA.b LinkPosX : STA.w SpritePosXLow, Y
|
||||
|
||||
@@ -15,3 +15,27 @@ dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233
|
||||
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
|
||||
.off_black
|
||||
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5
|
||||
.armos
|
||||
dw hexto555($000000), hexto555($F8F8F8), hexto555($D86060), hexto555($5070C8), hexto555($B090F8), hexto555($282828), hexto555($F0A068), hexto555($B06028)
|
||||
.lanmolas
|
||||
dw hexto555($787040), hexto555($585030), hexto555($484018), hexto555($50C090), hexto555($408858), hexto555($305830), hexto555($D8A800), hexto555($E06018)
|
||||
.moldorm
|
||||
dw hexto555($F8D018), hexto555($C8B818), hexto555($A89818), hexto555($806818), hexto555($503818), hexto555($903818), hexto555($D85800), hexto555($F8A828)
|
||||
.agahnim
|
||||
dw hexto555($000000), hexto555($F8F8F8), hexto555($C04080), hexto555($B08828), hexto555($E8C070), hexto555($282828), hexto555($90D038), hexto555($688020)
|
||||
.helmasaur
|
||||
dw hexto555($A00028), hexto555($D03828), hexto555($E88820), hexto555($4848B0), hexto555($7870E8), hexto555($A8A8F8), hexto555($F8F8F8), hexto555($181818)
|
||||
.arrghus
|
||||
dw hexto555($000000), hexto555($F8F8F8), hexto555($903018), hexto555($D85800), hexto555($F8A828), hexto555($282828), hexto555($E88068), hexto555($B04038)
|
||||
.mothula
|
||||
dw hexto555($000000), hexto555($F8F8F8), hexto555($4848B0), hexto555($7870E8), hexto555($A8A8F8), hexto555($282828), hexto555($F8A840), hexto555($D85820)
|
||||
.blind
|
||||
dw hexto555($88D0F8), hexto555($7890F8), hexto555($903018), hexto555($D85800), hexto555($F8A828), hexto555($282828), hexto555($E88068), hexto555($B04038)
|
||||
.kholdstare
|
||||
dw hexto555($7098C0), hexto555($58B0E8), hexto555($D0F8F8), hexto555($4828C8), hexto555($4828F0), hexto555($8070F8), hexto555($F8C8F8), hexto555($E088B0)
|
||||
.vitreous
|
||||
dw hexto555($000000), hexto555($F8F8F8), hexto555($50C090), hexto555($408858), hexto555($305830), hexto555($282828), hexto555($D8A800), hexto555($E06018)
|
||||
.trinexx
|
||||
dw hexto555($A00028), hexto555($A8A8F8), hexto555($7870E8), hexto555($4848B0), hexto555($505060), hexto555($788890), hexto555($78C0A8), hexto555($707068)
|
||||
.ganon
|
||||
dw hexto555($385088), hexto555($5088A8), hexto555($88C8A0), hexto555($B090F8), hexto555($C0A028), hexto555($886008), hexto555($B83010), hexto555($E86040)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
; Dark World Spawn Location Fix & Master Sword Grove Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
DarkWorldSaveFix:
|
||||
LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change
|
||||
JSL MasterSwordFollowerClear
|
||||
JML StatSaveCounter
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -11,7 +12,6 @@ DoWorldFix:
|
||||
+
|
||||
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BNE + ; if old man following, skip mirror/aga check
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ +
|
||||
LDA.l OldManRetrievalWorld
|
||||
BRA .noMirror
|
||||
+ LDA.l MirrorEquipment : AND.b #$02 : BEQ .noMirror ; check if we have the mirror
|
||||
@@ -60,7 +60,6 @@ RTL
|
||||
DoWorldFix_Inverted:
|
||||
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BNE + ; if old man following, skip mirror/aga check
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ +
|
||||
LDA.l OldManRetrievalWorld
|
||||
BRA .setWorld
|
||||
+ LDA.l MirrorEquipment : AND.b #$02 : BEQ .noMirror ; check if we have the mirror
|
||||
@@ -116,13 +115,12 @@ FakeWorldFix:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetCurrentWorldForLoad:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .default
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BNE .default
|
||||
LDA.l InvertedMode : BEQ +
|
||||
LDA.b #$40
|
||||
+ RTL
|
||||
LDA FollowerIndicator : CMP #$04 : BNE .default
|
||||
LDA InvertedMode : BEQ +
|
||||
LDA #$40
|
||||
+ RTL
|
||||
.default
|
||||
LDA.l CurrentWorld
|
||||
LDA CurrentWorld
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MasterSwordFollowerClear:
|
||||
@@ -133,9 +131,7 @@ MasterSwordFollowerClear:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FixAgahnimFollowers:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ +
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
+
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
JML PrepDungeonExit ; thing we wrote over
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
BIN
data/bossicons.souls.4bpp
Normal file
BIN
data/bossicons.souls.4bpp
Normal file
Binary file not shown.
BIN
data/c2e3e.bin
BIN
data/c2e3e.bin
Binary file not shown.
BIN
data/c2e3e.gfx
BIN
data/c2e3e.gfx
Binary file not shown.
BIN
data/skull.bin
BIN
data/skull.bin
Binary file not shown.
@@ -202,8 +202,6 @@ DecompressAllItemGraphics:
|
||||
LDX.b #$5C+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$5B+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$5A+$73 : JSR AddGfxSheetToBigBuffer
|
||||
JSR AddCherryPickGfxToBigBuffer
|
||||
LDX.b #$01 : STX.w $06FA
|
||||
LDX.b #$06+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$07+$73 : JSR AddGfxSheetToBigBuffer
|
||||
|
||||
@@ -499,11 +497,6 @@ macro DoPlanesA(offset)
|
||||
|
||||
XBA
|
||||
ORA.b Decomp3BPPScratch
|
||||
PHY
|
||||
LDY.w $06FA : BEQ +
|
||||
AND.w #$00FF ; idk why this line works but some sheets we pull in aren't correct without it
|
||||
+
|
||||
PLY
|
||||
STA.w BigDecompressionBuffer+$10+<offset>+<offset>,X
|
||||
|
||||
endmacro
|
||||
@@ -527,11 +520,7 @@ macro DoIndirectPlanesA(offset)
|
||||
|
||||
XBA
|
||||
ORA.b Decomp3BPPScratch
|
||||
PHY
|
||||
LDY.w $06FA : BEQ +
|
||||
AND.w #$00FF ; idk why this line works but some sheets we pull in aren't correct without it
|
||||
+
|
||||
PLY
|
||||
AND.w #$00FF ; idk why this line works but the 2 sheets we pull in aren't correct without it
|
||||
STA.l BigDecompressionBuffer+$10+<offset>+<offset>,X
|
||||
|
||||
endmacro
|
||||
@@ -623,57 +612,4 @@ Unrolled3BPPConvert:
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
macro CherryPickGfx(source,dest,length)
|
||||
LDX.w #BigDecompressionBuffer+<source>
|
||||
LDY.w #BigDecompressionBuffer+<dest>
|
||||
LDA.w #<length>-1
|
||||
MVN BigDecompressionBuffer>>16,BigDecompressionBuffer>>16
|
||||
|
||||
LDX.w #BigDecompressionBuffer+<source>+$200
|
||||
LDY.w #BigDecompressionBuffer+<dest>+$200
|
||||
LDA.w #<length>-1
|
||||
MVN BigDecompressionBuffer>>16,BigDecompressionBuffer>>16
|
||||
endmacro
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
AddCherryPickGfxToBigBuffer:
|
||||
; this is mostly to load and rearrange follower gfx to save on space
|
||||
; assumes DecompBufferOffset left off at $A000 (#BigDecompressionBuffer+$2000)
|
||||
; adjustments will be needed if anything prior to this changes
|
||||
LDX.b #$01 : STX.w $06FA
|
||||
LDX.b #$35+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$55+$73 : JSR AddGfxSheetToBigBuffer
|
||||
REP #$30
|
||||
%CherryPickGfx($2400,$2140,$40) ; move old man head
|
||||
%CherryPickGfx($2D40,$20C0,$40) ; move zelda body
|
||||
LDA.b DecompBufferOffset : SEC : SBC.w #$0C00 : STA.b DecompBufferOffset
|
||||
SEP #$30
|
||||
LDX.b #$11+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$15+$73 : JSR AddGfxSheetToBigBuffer
|
||||
REP #$30
|
||||
%CherryPickGfx($2940,$2180,$80) ; move locksmith head/body
|
||||
%CherryPickGfx($2D00,$0440,$40) ; move frog
|
||||
%CherryPickGfx($31C0,$0500,$40) ; move purple chest
|
||||
LDA.b DecompBufferOffset : SEC : SBC.w #$1000 : STA.b DecompBufferOffset
|
||||
SEP #$30
|
||||
LDX.b #$59+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$58+$73 : JSR AddGfxSheetToBigBuffer
|
||||
REP #$30
|
||||
%CherryPickGfx($2880,$0480,$40) ; move kiki head
|
||||
%CherryPickGfx($2900,$04C0,$40) ; move kiki body
|
||||
%CherryPickGfx($30C0,$0540,$40) ; move big bomb
|
||||
%CherryPickGfx($2C40,$0180,$40) ; move duck
|
||||
LDA.b DecompBufferOffset : SEC : SBC.w #$1000 : STA.b DecompBufferOffset
|
||||
SEP #$30
|
||||
LDX.b #$4D+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$50+$73 : JSR AddGfxSheetToBigBuffer
|
||||
REP #$30
|
||||
%CherryPickGfx($2880,$0580,$40) ; move smith
|
||||
%CherryPickGfx($3140,$0140,$40) ; move chicken
|
||||
LDA.b DecompBufferOffset : SEC : SBC.w #$1000 : STA.b DecompBufferOffset
|
||||
SEP #$30
|
||||
|
||||
STZ.w $06FA
|
||||
RTS
|
||||
|
||||
|
||||
86
dialog.asm
86
dialog.asm
@@ -265,7 +265,7 @@ RTL
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogGanon1:
|
||||
LDA.b #$01 : JSL CheckConditionPass
|
||||
JSL CheckGanonVulnerability
|
||||
REP #$20
|
||||
LDA.w #$018C
|
||||
BCC +
|
||||
@@ -284,68 +284,28 @@ RTL
|
||||
; s = silver arrow bow
|
||||
; p = 2nd progressive bow
|
||||
DialogGanon2:
|
||||
LDA.b #$01 : JSL CheckConditionPass
|
||||
JSL CheckGanonVulnerability
|
||||
|
||||
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
|
||||
REP #$20
|
||||
BCS +
|
||||
LDA.w #$018D : BRA ++
|
||||
+
|
||||
LDA.l BowTracking
|
||||
|
||||
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
|
||||
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
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogEtherTablet:
|
||||
@@ -412,8 +372,8 @@ RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
AgahnimAsksAboutPed:
|
||||
; seems light_speed option to change some aga text is unused for now
|
||||
BRA .vanilla
|
||||
LDA.l GanonVulnerableMode
|
||||
CMP.b #$06 : BNE .vanilla
|
||||
|
||||
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
||||
AND.b #$40
|
||||
|
||||
@@ -13,7 +13,6 @@ PHP
|
||||
|
||||
SetDefaultWorld:
|
||||
PHP : SEP #$20
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .default
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BNE .default
|
||||
LDA.l OldManRetrievalWorld : BRA +
|
||||
.default
|
||||
|
||||
@@ -55,7 +55,7 @@ DRHUD_EnemyDropIndicator:
|
||||
REP #$30
|
||||
LDA.w EnemyDropIndicator : STA.w HUDMultiIndicator
|
||||
SEP #$20
|
||||
LDA.w DungeonID : CMP.b #$1B : BCC + : JMP DRHUD_Finished : +
|
||||
LDA.w DungeonID : CMP.b #$1B : BCS DRHUD_Finished
|
||||
SEP #$10 : TAX : REP #$10
|
||||
|
||||
DRHUD_DrawCurrentDungeonIndicator: ; mX
|
||||
@@ -69,17 +69,11 @@ DRHUD_DrawCurrentDungeonIndicator: ; mX
|
||||
STY.w HUDCurrentDungeonWorld
|
||||
|
||||
DRHUD_DrawKeyCounter:
|
||||
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
|
||||
LDA.l CompassMode : BIT.b #$03 : BEQ DRHUD_Finished
|
||||
REP #$20
|
||||
BIT.w #$0002 : BNE .skip_map_check
|
||||
LDA.w MapField : AND.l DungeonMask, X : BEQ DRHUD_Finished
|
||||
.skip_map_check
|
||||
TXA : LSR : BNE .dungeon_id
|
||||
INC
|
||||
.dungeon_id
|
||||
TAX
|
||||
LDA.l GenericKeys : LSR : BCS .total_only
|
||||
LDA.l DRFlags : AND.b #$04 : BEQ DRHUD_Finished
|
||||
REP #$20
|
||||
LDA.w MapField : AND.l DungeonMask, X : BEQ DRHUD_Finished
|
||||
TXA : LSR : TAX
|
||||
LDA.l GenericKeys : AND.w #$00FF : BNE .total_only
|
||||
LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained
|
||||
LDA.w #!SlashTile : STA.w HUDKeysSlash
|
||||
.total_only
|
||||
@@ -158,19 +152,16 @@ DrHudDungeonItemsAdditions:
|
||||
jsr ConvertToDisplay2 : sta.w $1644, y
|
||||
+ iny #2 : lda.w #$24f5 : sta.w $1644, y
|
||||
phx : ldx.b Scrap00
|
||||
LDA.l CompassMode : BIT.w #$0002 : BNE .skip_map_check
|
||||
LDA.l MapField : AND.l DungeonMask, x : BEQ .key_info_done ; must have map
|
||||
.skip_map_check
|
||||
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
|
||||
lda.l MapField : and.l DungeonMask, x : beq + ; 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
|
||||
.skipStack iny #2
|
||||
cpx.w #$000d : beq +
|
||||
lda.w #$24f5 : sta.w $1644, y
|
||||
+
|
||||
@@ -178,26 +169,23 @@ DrHudDungeonItemsAdditions:
|
||||
+ 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
|
||||
; map symbols (do I want these) ; note compass symbol is 2c20
|
||||
lda.w #$2821 : sta.w $1606 : sta.w $1610 : sta.w $161a : sta.w $1624
|
||||
; blank out a couple thing from old hud
|
||||
lda.w #$24f5 : sta.w $1624 : sta.w $1724
|
||||
lda.w #$24f5 : sta.w $16e4 : sta.w $1724
|
||||
sta.w $160a : sta.w $1614 : sta.w $161e ; blank out sm key indicators
|
||||
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
|
||||
lda.l MapField : and.l DungeonMask, x : beq + ; must have map
|
||||
JSR MapIndicatorShort : STA.w $1644, Y
|
||||
+ iny #2
|
||||
cpx.w #$001a : bne +
|
||||
tya : !ADD.w #$003c : tay
|
||||
+ lda.l CompassField : ora.l CompassCountDisplay
|
||||
and.l DungeonMask, x : beq + ; must have compass
|
||||
+ lda.l CompassField : 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
|
||||
@@ -253,36 +241,18 @@ BkStatus:
|
||||
|
||||
ConvertToDisplay:
|
||||
and.w #$00ff : cmp.w #$000a : !BLT +
|
||||
!ADD.w #$2519 : rts
|
||||
!ADD.w #$2553 : rts
|
||||
+ !ADD.w #$2490 : rts
|
||||
|
||||
ConvertToDisplay2:
|
||||
and.w #$00ff : beq ++
|
||||
cmp.w #$000a : !BLT +
|
||||
!ADD.w #$2517 : rts ; 2580 with 258A as "A" for non transparent digits
|
||||
!ADD.w #$2553 : 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
|
||||
|
||||
CountAbsorbedKeys:
|
||||
JML IncrementSmallKeysNoPrimary
|
||||
|
||||
; This function apporach doesn't currently work
|
||||
CountAbsorbedKeysViaCountAllKey:
|
||||
PHA : PHX
|
||||
LDA.l StandingItemsOn : BEQ .count_it
|
||||
; LDA.w SpawnedItemKeyCounted : BNE .done ; this was added because pot keys were being double counted when they weren't shuffled
|
||||
CPY.b #$24 : BEQ .count_it ; small key for this dungeon
|
||||
LDA.w DungeonID : LSR : TAX
|
||||
TYA : CMP.l KeyTable, X : BNE .done
|
||||
.count_it
|
||||
STY.b Scrap02 : LDY.b #$24 ; for non-24 items (w/o standing_items a small key is just $C), fake it
|
||||
LDX.b #$84 ; pretend this isn't a smallkey, but an absorbed object (small heart)
|
||||
REP #$10 : JSL CountAllKey : SEP #$10
|
||||
LDY.b Scrap02
|
||||
.done
|
||||
; STZ.w SpawnedItemKeyCounted ; reset to zero for next time
|
||||
PLX : PLA
|
||||
JML IncrementSmallKeysNoPrimary
|
||||
JML IncrementSmallKeysNoPrimary
|
||||
|
||||
;================================================================================
|
||||
; 8-bit registers
|
||||
|
||||
@@ -11,7 +11,6 @@ rtl
|
||||
|
||||
OnFileLoadOverride:
|
||||
jsl OnFileLoad ; what I wrote over
|
||||
jsl StartingFollower
|
||||
+ lda.l DRFlags : and.b #$02 : beq + ; Mirror Scroll
|
||||
lda.l MirrorEquipment : bne +
|
||||
lda.b #$01 : sta.l MirrorEquipment
|
||||
@@ -53,9 +52,8 @@ GuruguruFix:
|
||||
|
||||
BlindAtticFix:
|
||||
lda.l DRMode : beq +
|
||||
- lda.b #$01 : rtl
|
||||
+ lda.l FollowerTravelAllowed : cmp.b #$02 : beq -
|
||||
lda.l FollowerIndicator : cmp.b #$06
|
||||
lda.b #$01 : rtl
|
||||
+ lda.l FollowerIndicator : cmp.b #$06
|
||||
rtl
|
||||
|
||||
SuctionOverworldFix:
|
||||
@@ -121,6 +119,12 @@ BlindsAtticHint:
|
||||
SEP #$20 : RTL ; skip the dialog box if the hole is already open
|
||||
+ SEP #$20 : JML Main_ShowTextMessage
|
||||
|
||||
BlindZeldaDespawnFix:
|
||||
CMP.b #06 : BEQ +
|
||||
LDA.w SpritePosYLow,X : BEQ + ; don't despawn follower if maiden isn't "present"
|
||||
PLA : PLA : PEA.w SpritePrep_BlindMaiden_despawn_follower-1 : RTL
|
||||
+ PLA : PLA : PEA.w SpritePrep_BlindMaiden_kill_the_girl-1 : RTL
|
||||
|
||||
BigKeyDoorCheck:
|
||||
CPY.w #$001E : BNE + ; skip if it isn't a BK door
|
||||
LDA.l DRFlags : AND.w #$0400 : BNE + ; skip if the flag is set - bk doors can be double-sided
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
; 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 #$10
|
||||
BEQ .show
|
||||
.hide
|
||||
LDA.b #$01
|
||||
.show
|
||||
STZ.b $E6
|
||||
STA.w $E7
|
||||
JSL $8AE96B
|
||||
RTL
|
||||
|
||||
StartDoubleWrite:
|
||||
; what we wrote over
|
||||
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
|
||||
@@ -1,382 +0,0 @@
|
||||
; A = room_id
|
||||
; out A = level of loot
|
||||
CheckLoot:
|
||||
PHP
|
||||
REP #$30
|
||||
PHB : PHX : PHY
|
||||
|
||||
STA.b $00
|
||||
|
||||
LDA.b $06 : PHA
|
||||
LDA.b $0E : PHA
|
||||
|
||||
STZ.b $02 ; best item class found
|
||||
|
||||
LDA.l ShowItems_default
|
||||
AND.w #$00FF
|
||||
STA.b $0E
|
||||
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l SaveDataWRAM, X
|
||||
AND.w #$000F
|
||||
BEQ +
|
||||
LDA.l ShowItems_visited_tile
|
||||
AND.w #$00FF
|
||||
CMP.b $0E
|
||||
BCC +
|
||||
STA.b $0E
|
||||
|
||||
+ LDA.w DungeonID
|
||||
TAX
|
||||
|
||||
LDA.l MapField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowItems_have_map
|
||||
AND.w #$00FF
|
||||
CMP.b $0E
|
||||
BCC +
|
||||
STA.b $0E
|
||||
|
||||
+ LDA.l CompassField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowItems_have_compass
|
||||
AND.w #$00FF
|
||||
CMP.b $0E
|
||||
BCC +
|
||||
STA.b $0E
|
||||
+
|
||||
|
||||
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 CheckBoss
|
||||
+
|
||||
|
||||
LDA.l ItemSources : BIT.w #$0010 : BEQ +
|
||||
JSR CheckPrize
|
||||
+
|
||||
|
||||
.done
|
||||
PLA : STA.b $0E
|
||||
PLA : STA.b $06
|
||||
PLY : PLX : PLB
|
||||
PLP
|
||||
LDA.b $02
|
||||
RTL
|
||||
|
||||
CheckChests:
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.w #($81<<8)
|
||||
PHA
|
||||
PLB : PLB
|
||||
|
||||
LDA.w #$0008
|
||||
STA.b $04
|
||||
|
||||
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.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
|
||||
|
||||
CheckBoss:
|
||||
LDX.w #$FFFA
|
||||
.next_boss
|
||||
INX #6
|
||||
LDA.l MiscLocations, X
|
||||
BPL .check
|
||||
RTS
|
||||
|
||||
.check
|
||||
CMP.b $00
|
||||
BNE .next_boss
|
||||
|
||||
TXY
|
||||
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_boss ; 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_boss
|
||||
|
||||
CheckPrize:
|
||||
LDX.w #$FFFD
|
||||
.next_prize
|
||||
INX #3
|
||||
LDA.l PrizeLocations, X
|
||||
BPL .check
|
||||
RTS
|
||||
|
||||
.check
|
||||
CMP.b $00
|
||||
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
|
||||
|
||||
CheckPots:
|
||||
LDA.b $00
|
||||
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 #$8000 : BNE .major_item ; marked as major item
|
||||
LDA.b [$04], Y
|
||||
AND.w #$00FF
|
||||
CMP.w #$0008 : BEQ .small_key
|
||||
INY
|
||||
BRA .next_pot
|
||||
|
||||
.small_key
|
||||
LDA.w #$8000 : STA.b $08
|
||||
LDA.w #$0024
|
||||
PHA
|
||||
PHX
|
||||
INY
|
||||
BRA .mask_set
|
||||
.major_item
|
||||
LDA.b [$04], Y
|
||||
.continue
|
||||
PHA
|
||||
PHX
|
||||
INY
|
||||
TXA : ASL A
|
||||
TAX
|
||||
LDA.l DungeonMask, X : STA.b $08
|
||||
|
||||
.mask_set
|
||||
LDA.b $00 : 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
|
||||
|
||||
CheckEnemies:
|
||||
LDA.b $00
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l UWSpritesPointers, X
|
||||
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 : BEQ .done
|
||||
LDA.b [$04], Y
|
||||
BIT.w #$8000 : BNE .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
|
||||
|
||||
.mask_set
|
||||
LDA.b $00 : ASL A : TAX
|
||||
LDA.l SpriteDropData, X
|
||||
PLX
|
||||
AND.b $08
|
||||
BEQ .not_obtained
|
||||
PLA
|
||||
BRA .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.l AlwaysShowCompass : BNE .check_value
|
||||
|
||||
.not_compass
|
||||
LDA.b $0E
|
||||
BEQ .done
|
||||
CMP.w #$0001
|
||||
BEQ .value_set
|
||||
|
||||
.check_value
|
||||
LDA.l LootTypeMapping, X
|
||||
AND.w #$00FF
|
||||
|
||||
.value_set
|
||||
CMP.b $02
|
||||
BCC .done
|
||||
STA.b $02
|
||||
|
||||
.done
|
||||
PLX
|
||||
RTS
|
||||
@@ -1,39 +0,0 @@
|
||||
File.open("supertile_shapes.asm", "r") do |file|
|
||||
bytes = []
|
||||
while line = file.gets
|
||||
m = line.match(/dw \$(\h+), \$(\h+), \$(\h+), \$(\h+)/)
|
||||
bytes += m.captures if m
|
||||
break if bytes.length >= 4 * 0xE0
|
||||
end
|
||||
|
||||
counts = []
|
||||
for byte in bytes do
|
||||
value = byte.to_i(16)
|
||||
next if value == 0xFFFF
|
||||
value = (value & 0x03FF) - 0x340
|
||||
if not counts[value]
|
||||
counts[value] = 0
|
||||
end
|
||||
counts[value] += 1
|
||||
end
|
||||
|
||||
print(" ")
|
||||
for col in 0...16
|
||||
printf(" x%X", col)
|
||||
end
|
||||
puts
|
||||
|
||||
for row in 0...0xC
|
||||
printf("%Xx", row + 4)
|
||||
for col in 0...16
|
||||
printf("%4d", counts[row * 16 + col] || 0)
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
printf("Unused:")
|
||||
for i in 0...0x80
|
||||
printf(" %2X", i) unless counts[i]
|
||||
end
|
||||
puts
|
||||
end
|
||||
@@ -1,26 +0,0 @@
|
||||
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
|
||||
@@ -1,261 +0,0 @@
|
||||
db $0B ; 00 - Fighter Sword and Shield
|
||||
db $0B ; 01 - Master Sword
|
||||
db $0B ; 02 - Tempered Sword
|
||||
db $0B ; 03 - Butter Sword
|
||||
db $06 ; 04 - Fighter Shield
|
||||
db $06 ; 05 - Fire Shield
|
||||
db $06 ; 06 - Mirror Shield
|
||||
db $0B ; 07 - Fire Rod
|
||||
db $0B ; 08 - Ice Rod
|
||||
db $0B ; 09 - Hammer
|
||||
db $0B ; 0A - Hookshot
|
||||
db $0B ; 0B - Bow
|
||||
db $06 ; 0C - Boomerang
|
||||
db $0B ; 0D - Powder
|
||||
db $02 ; 0E - Bottle Refill (bee)
|
||||
db $0B ; 0F - Bombos
|
||||
db $0B ; 10 - Ether
|
||||
db $0B ; 11 - Quake
|
||||
db $0B ; 12 - Lamp
|
||||
db $06 ; 13 - Shovel
|
||||
db $0B ; 14 - Flute
|
||||
db $0B ; 15 - Somaria
|
||||
db $0B ; 16 - Bottle
|
||||
db $05 ; 17 - Heartpiece
|
||||
db $06 ; 18 - Byrna
|
||||
db $0B ; 19 - Cape
|
||||
db $0B ; 1A - Mirror
|
||||
db $0B ; 1B - Glove
|
||||
db $0B ; 1C - Mitts
|
||||
db $0B ; 1D - Book
|
||||
db $0B ; 1E - Flippers
|
||||
db $0B ; 1F - Pearl
|
||||
db $0D ; 20 - Crystal
|
||||
db $06 ; 21 - Net
|
||||
db $06 ; 22 - Blue Mail
|
||||
db $06 ; 23 - Red Mail
|
||||
db $03 ; 24 - Small Key
|
||||
db $07 ; 25 - Compass
|
||||
db $05 ; 26 - Heart Container from 4/4
|
||||
db $02 ; 27 - Bomb
|
||||
db $02 ; 28 - 3 bombs
|
||||
db $06 ; 29 - Mushroom
|
||||
db $06 ; 2A - Red boomerang
|
||||
db $0B ; 2B - Full bottle (red)
|
||||
db $0B ; 2C - Full bottle (green)
|
||||
db $0B ; 2D - Full bottle (blue)
|
||||
db $05 ; 2E - Potion refill (red)
|
||||
db $05 ; 2F - Potion refill (green)
|
||||
db $05 ; 30 - Potion refill (blue)
|
||||
db $02 ; 31 - 10 bombs
|
||||
db $09 ; 32 - Big key
|
||||
db $02 ; 33 - Map
|
||||
db $02 ; 34 - 1 rupee
|
||||
db $02 ; 35 - 5 rupees
|
||||
db $02 ; 36 - 20 rupees
|
||||
db $0A ; 37 - Green pendant
|
||||
db $0A ; 38 - Blue pendant
|
||||
db $0A ; 39 - Red pendant
|
||||
db $0B ; 3A - Tossed bow
|
||||
db $0B ; 3B - Silvers
|
||||
db $0B ; 3C - Full bottle (bee)
|
||||
db $0B ; 3D - Full bottle (fairy)
|
||||
db $05 ; 3E - Boss heart
|
||||
db $05 ; 3F - Sanc heart
|
||||
db $02 ; 40 - 100 rupees
|
||||
db $02 ; 41 - 50 rupees
|
||||
db $02 ; 42 - Heart
|
||||
db $02 ; 43 - Arrow
|
||||
db $02 ; 44 - 10 arrows
|
||||
db $02 ; 45 - Small magic
|
||||
db $02 ; 46 - 300 rupees
|
||||
db $02 ; 47 - 20 rupees green
|
||||
db $0B ; 48 - Full bottle (good bee)
|
||||
db $0B ; 49 - Tossed fighter sword
|
||||
db $0B ; 4A - Active Flute
|
||||
db $0B ; 4B - Boots
|
||||
|
||||
db $06 ; 4C - Bomb capacity (50)
|
||||
db $06 ; 4D - Arrow capacity (70)
|
||||
db $06 ; 4E - 1/2 magic
|
||||
db $06 ; 4F - 1/4 magic
|
||||
db $0B ; 50 - Safe master sword
|
||||
db $06 ; 51 - Bomb capacity (+5)
|
||||
db $06 ; 52 - Bomb capacity (+10)
|
||||
db $06 ; 53 - Arrow capacity (+5)
|
||||
db $06 ; 54 - Arrow capacity (+10)
|
||||
db $02 ; 55 - Programmable item 1
|
||||
db $02 ; 56 - Programmable item 2
|
||||
db $02 ; 57 - Programmable item 3
|
||||
db $0B ; 58 - Upgrade-only silver arrows
|
||||
db $02 ; 59 - Rupoor
|
||||
db $02 ; 5A - Nothing
|
||||
db $02 ; 5B - Red clock
|
||||
db $02 ; 5C - Blue clock
|
||||
db $02 ; 5D - Green clock
|
||||
db $0B ; 5E - Progressive sword
|
||||
db $06 ; 5F - Progressive shield
|
||||
db $06 ; 60 - Progressive armor
|
||||
db $0B ; 61 - Progressive glove
|
||||
db $02 ; 62 - RNG pool item (single)
|
||||
db $02 ; 63 - RNG pool item (multi)
|
||||
db $0B ; 64 - Progressive bow
|
||||
db $0B ; 65 - Progressive bow
|
||||
db $02 ; 66 -
|
||||
db $02 ; 67 -
|
||||
db $02 ; 68 -
|
||||
db $02 ; 69 -
|
||||
db $0F ; 6A - Triforce
|
||||
db $0E ; 6B - Power star
|
||||
db $0E ; 6C - Triforce Piece
|
||||
db $02 ; 6D - Server request item
|
||||
db $02 ; 6E - Server request item (dungeon drop)
|
||||
db $02 ; 6F -
|
||||
|
||||
db $02 ; 70 - Map of Light World
|
||||
db $02 ; 71 - Map of Dark World
|
||||
db $02 ; 72 - Map of Ganon's Tower
|
||||
db $02 ; 73 - Map of Turtle Rock
|
||||
db $02 ; 74 - Map of Thieves' Town
|
||||
db $02 ; 75 - Map of Tower of Hera
|
||||
db $02 ; 76 - Map of Ice Palace
|
||||
db $02 ; 77 - Map of Skull Woods
|
||||
db $02 ; 78 - Map of Misery Mire
|
||||
db $02 ; 79 - Map of Dark Palace
|
||||
db $02 ; 7A - Map of Swamp Palace
|
||||
db $02 ; 7B - Map of Agahnim's Tower
|
||||
db $02 ; 7C - Map of Desert Palace
|
||||
db $02 ; 7D - Map of Eastern Palace
|
||||
db $02 ; 7E - Map of Hyrule Castle
|
||||
db $02 ; 7F - Map of Sewers
|
||||
|
||||
db $07 ; 80 - Compass of Light World
|
||||
db $07 ; 81 - Compass of Dark World
|
||||
db $07 ; 82 - Compass of Ganon's Tower
|
||||
db $07 ; 83 - Compass of Turtle Rock
|
||||
db $07 ; 84 - Compass of Thieves' Town
|
||||
db $07 ; 85 - Compass of Tower of Hera
|
||||
db $07 ; 86 - Compass of Ice Palace
|
||||
db $07 ; 87 - Compass of Skull Woods
|
||||
db $07 ; 88 - Compass of Misery Mire
|
||||
db $07 ; 89 - Compass of Dark Palace
|
||||
db $07 ; 8A - Compass of Swamp Palace
|
||||
db $07 ; 8B - Compass of Agahnim's Tower
|
||||
db $07 ; 8C - Compass of Desert Palace
|
||||
db $07 ; 8D - Compass of Eastern Palace
|
||||
db $07 ; 8E - Compass of Hyrule Castle
|
||||
db $07 ; 8F - Compass of Sewers
|
||||
|
||||
db $09 ; 90 - Skull key
|
||||
db $09 ; 91 - Reserved
|
||||
db $09 ; 92 - Big key of Ganon's Tower
|
||||
db $09 ; 93 - Big key of Turtle Rock
|
||||
db $09 ; 94 - Big key of Thieves' Town
|
||||
db $09 ; 95 - Big key of Tower of Hera
|
||||
db $09 ; 96 - Big key of Ice Palace
|
||||
db $09 ; 97 - Big key of Skull Woods
|
||||
db $09 ; 98 - Big key of Misery Mire
|
||||
db $09 ; 99 - Big key of Dark Palace
|
||||
db $09 ; 9A - Big key of Swamp Palace
|
||||
db $09 ; 9B - Big key of Agahnim's Tower
|
||||
db $09 ; 9C - Big key of Desert Palace
|
||||
db $09 ; 9D - Big key of Eastern Palace
|
||||
db $09 ; 9E - Big key of Hyrule Castle
|
||||
db $09 ; 9F - Big key of Sewers
|
||||
|
||||
db $08 ; A0 - Small key of Sewers
|
||||
db $08 ; A1 - Small key of Hyrule Castle
|
||||
db $08 ; A2 - Small key of Eastern Palace
|
||||
db $08 ; A3 - Small key of Desert Palace
|
||||
db $08 ; A4 - Small key of Agahnim's Tower
|
||||
db $08 ; A5 - Small key of Swamp Palace
|
||||
db $08 ; A6 - Small key of Dark Palace
|
||||
db $08 ; A7 - Small key of Misery Mire
|
||||
db $08 ; A8 - Small key of Skull Woods
|
||||
db $08 ; A9 - Small key of Ice Palace
|
||||
db $08 ; AA - Small key of Tower of Hera
|
||||
db $08 ; AB - Small key of Thieves' Town
|
||||
db $08 ; AC - Small key of Turtle Rock
|
||||
db $08 ; AD - Small key of Ganon's Tower
|
||||
db $02 ; AE - Reserved
|
||||
db $03 ; AF - Generic small key
|
||||
db $0D ; B0 - Crystal 6
|
||||
db $0D ; B1 - Crystal 1
|
||||
db $0D ; B2 - Crystal 5
|
||||
db $0D ; B3 - Crystal 7
|
||||
db $0D ; B4 - Crystal 2
|
||||
db $0D ; B5 - Crystal 4
|
||||
db $0D ; B6 - Crystal 3
|
||||
db $02 ; B7 - Reserved
|
||||
db $02 ; B8 -
|
||||
db $02 ; B9 -
|
||||
db $02 ; BA -
|
||||
db $02 ; BB -
|
||||
db $02 ; BC -
|
||||
db $02 ; BD -
|
||||
db $02 ; BE -
|
||||
db $02 ; BF -
|
||||
db $02 ; C0 -
|
||||
db $02 ; C1 -
|
||||
db $02 ; C2 -
|
||||
db $02 ; C3 -
|
||||
db $02 ; C4 -
|
||||
db $02 ; C5 -
|
||||
db $02 ; C6 -
|
||||
db $02 ; C7 -
|
||||
db $02 ; C8 -
|
||||
db $02 ; C9 -
|
||||
db $02 ; CA -
|
||||
db $02 ; CB -
|
||||
db $02 ; CC -
|
||||
db $02 ; CD -
|
||||
db $02 ; CE -
|
||||
db $02 ; CF -
|
||||
db $02 ; D0 - Bee trap
|
||||
db $02 ; D1 - Apples
|
||||
db $02 ; D2 - Fairy
|
||||
db $02 ; D3 - Chicken
|
||||
db $02 ; D4 - Big Magic
|
||||
db $02 ; D5 - 5 Arrows
|
||||
db $02 ; D6 - Good Bee
|
||||
db $02 ; D7 -
|
||||
db $02 ; D8 -
|
||||
db $02 ; D9 -
|
||||
db $02 ; DA -
|
||||
db $02 ; DB -
|
||||
db $02 ; DC -
|
||||
db $02 ; DD -
|
||||
db $02 ; DE -
|
||||
db $02 ; DF -
|
||||
db $02 ; E0 -
|
||||
db $02 ; E1 -
|
||||
db $02 ; E2 -
|
||||
db $02 ; E3 -
|
||||
db $02 ; E4 -
|
||||
db $02 ; E5 -
|
||||
db $02 ; E6 -
|
||||
db $02 ; E7 -
|
||||
db $02 ; E8 -
|
||||
db $02 ; E9 -
|
||||
db $02 ; EA -
|
||||
db $02 ; EB -
|
||||
db $02 ; EC -
|
||||
db $02 ; ED -
|
||||
db $02 ; EE -
|
||||
db $02 ; EF -
|
||||
db $02 ; F0 -
|
||||
db $02 ; F1 -
|
||||
db $02 ; F2 -
|
||||
db $02 ; F3 -
|
||||
db $02 ; F4 -
|
||||
db $02 ; F5 -
|
||||
db $02 ; F6 -
|
||||
db $02 ; F7 -
|
||||
db $02 ; F8 -
|
||||
db $02 ; F9 -
|
||||
db $02 ; FA -
|
||||
db $02 ; FB -
|
||||
db $02 ; FC -
|
||||
db $02 ; FD -
|
||||
db $02 ; FE - Server request (async)
|
||||
db $02 ; FF -
|
||||
@@ -1,258 +0,0 @@
|
||||
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 $C340, $8370, $4340, $0340 ; 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 $C351, $8341, $4351, $0351 ; 14
|
||||
dw $C374, $8340, $4341, $0340 ; 15
|
||||
dw $0361, $039A, $C3B2, $83B2 ; 16 - gross (add middle section if feasible)
|
||||
dw $C370, $8370, $4340, $0340 ; 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, $8399, $0366 ; 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, $0364, $0365 ; 24
|
||||
dw $FFFF, $FFFF, $FFFF, $FFFF ; 25 - unused
|
||||
dw $039B, $03E4, $4363, $0382 ; 26
|
||||
dw $C370, $8370, $4340, $0340 ; 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 $43B2, $0397, $839B, $C399 ; 31
|
||||
dw $43C5, $03C5, $43D5, $03D5 ; 32
|
||||
dw $FFFF, $FFFF, $438F, $FFFF ; 33
|
||||
dw $4348, $0368, $4349, $8368 ; 34
|
||||
dw $C38D, $039B, $43B1, $037D ; 35
|
||||
dw $C355, $8355, $4355, $0355 ; 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, $8399, $C399 ; 3F
|
||||
dw $C3A5, $FFFF, $4372, $C399 ; 40 - inset stairs if feasible
|
||||
dw $03C6, $03C7, $03D6, $03D7 ; 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 $C350, $8370, $4341, $0340 ; 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, $4391, $839C, $0366 ; 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, $C3B1 ; 64
|
||||
dw $FFFF, $FFFF, $83B1, $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, $8386, $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 $838A, $03F4, $03B7, $C399 ; 76
|
||||
dw $C370, $8340, $43A0, $03A0 ; 77
|
||||
dw $FFFF, $FFFF, $FFFF, $FFFF ; 78 - unused
|
||||
dw $FFFF, $FFFF, $FFFF, $FFFF ; 79 - unused
|
||||
dw $FFFF, $FFFF, $FFFF, $FFFF ; 7A - unused
|
||||
dw $C35E, $83B1, $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 $8399, $439B, $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 $C3B7, $FFFF, $03B7, $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 $C35E, $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, $438E, $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 $C3A5, $83B4, $43B5, $03B5 ; 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, $8396, $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, $83B5, $43B4, $03B5 ; 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
|
||||
@@ -1,144 +0,0 @@
|
||||
RedrawLoot:
|
||||
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
|
||||
|
||||
REP #$30
|
||||
PHX : PHY
|
||||
|
||||
STZ.b $0E
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l DungeonMapRoomPointers, X
|
||||
STA.b $0C
|
||||
|
||||
SEP #$20
|
||||
LDA.l DungeonMapFloorCountData, X
|
||||
AND.b #$0F
|
||||
CLC : ADC.w $020E
|
||||
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+2, X
|
||||
|
||||
LDA.b #$01
|
||||
STA.b NMISTRIPES
|
||||
|
||||
PLY : PLX
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
DrawSingleFloorLoot:
|
||||
REP #$20
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l DungeonMapFloorToDataOffset, X
|
||||
TAY
|
||||
STZ.b $06
|
||||
|
||||
.next_row
|
||||
REP #$20
|
||||
LDA.w GFXStripes
|
||||
TAX
|
||||
CLC : ADC.w #$0030
|
||||
STA.w GFXStripes
|
||||
|
||||
LDA.b $07
|
||||
AND.w #$00FF
|
||||
XBA
|
||||
LSR A : LSR A
|
||||
CLC : ADC.w #$1092
|
||||
ADC.b $0E
|
||||
XBA
|
||||
STA.w GFXStripes+2, X
|
||||
CLC : ADC.w #$2000
|
||||
STA.w GFXStripes+$1A, X
|
||||
|
||||
LDA.w #$1300
|
||||
STA.w GFXStripes+$04, X
|
||||
STA.w GFXStripes+$1C, X
|
||||
|
||||
.next_room
|
||||
REP #$20
|
||||
LDA.b ($0C), Y ; get room id
|
||||
PHY
|
||||
|
||||
AND.w #$00FF
|
||||
CMP.w #$000F ; $0F = empty room
|
||||
|
||||
BNE .valid_room
|
||||
LDA.w #$0000
|
||||
BRA +
|
||||
.valid_room
|
||||
JSL CheckLoot
|
||||
+
|
||||
ASL A : ASL A : ASL A
|
||||
|
||||
TXY
|
||||
TAX
|
||||
|
||||
LDA.l LootTypeIcons+0, X
|
||||
STA.w GFXStripes+$06, Y
|
||||
LDA.l LootTypeIcons+2, X
|
||||
STA.w GFXStripes+$08, Y
|
||||
LDA.l LootTypeIcons+4, X
|
||||
STA.w GFXStripes+$1E, Y
|
||||
LDA.l LootTypeIcons+6, X
|
||||
STA.w GFXStripes+$20, Y
|
||||
|
||||
TYX
|
||||
PLY
|
||||
INY : INX #4
|
||||
|
||||
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
|
||||
BCS .done
|
||||
JMP .next_row
|
||||
|
||||
.done
|
||||
RTS
|
||||
@@ -1,247 +0,0 @@
|
||||
; $CA has room_id
|
||||
DrawDungeonMapRoom:
|
||||
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
|
||||
LDA.b $0A : PHA
|
||||
|
||||
LDA.l ShowRooms_default
|
||||
AND.w #$00FF
|
||||
STA.b $0A
|
||||
|
||||
PHX
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l MapField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowRooms_have_map
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
LDX.w DungeonID
|
||||
LDA.l CompassField
|
||||
AND.l DungeonMask, X
|
||||
BEQ +
|
||||
LDA.l ShowRooms_have_compass
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
LDA.b $0E
|
||||
AND.w #$000F
|
||||
BEQ +
|
||||
LDA.l ShowRooms_visited_tile
|
||||
AND.w #$00FF
|
||||
CMP.b $0A
|
||||
BCC +
|
||||
STA.b $0A
|
||||
+
|
||||
|
||||
LDA.b $0A : BNE + : LDA.w #$0F00 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$174F : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$174F : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$1400 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$1000 : BRA ++
|
||||
+ DEC A : BNE + : LDA.w #$0C00 : BRA ++
|
||||
+ LDA.w #$0800
|
||||
++ STA.b $0C
|
||||
|
||||
PLX
|
||||
|
||||
LDA.b $CA
|
||||
AND.w #$00FF
|
||||
ASL A : ASL A : ASL A
|
||||
TAY
|
||||
|
||||
macro DrawQuadrant(quadrant, writeOffset)
|
||||
?DrawQuadrant:
|
||||
LDA.w SupertileRoomShapes+(2*<quadrant>), Y
|
||||
CMP.w #$FFFF : BEQ ?.empty
|
||||
PHA
|
||||
LDA.b $0E
|
||||
AND.w #1<<(3-<quadrant>)
|
||||
BNE ?.visited
|
||||
|
||||
?.unvisited
|
||||
LDA.b $0A
|
||||
CMP.w #$0003
|
||||
BCS ?.shape
|
||||
|
||||
?.square
|
||||
PLA
|
||||
LDA.b $0C
|
||||
EOR.w #(3-<quadrant>)<<14
|
||||
BRA ?.write
|
||||
|
||||
?.shape
|
||||
PLA
|
||||
ORA.b $0C
|
||||
BRA ?.write
|
||||
|
||||
?.visited
|
||||
PLA
|
||||
ORA.w #$0800
|
||||
BRA ?.write
|
||||
|
||||
?.empty
|
||||
LDA.b $0A
|
||||
CMP.w #$0001
|
||||
BEQ ?.full_square
|
||||
LDA.w #$0F00
|
||||
BRA ?.write
|
||||
|
||||
?.full_square
|
||||
LDA.w #$174F
|
||||
EOR.w #(3-<quadrant>)<<14
|
||||
|
||||
?.write
|
||||
STA.l $7F0000+<writeOffset>, X
|
||||
?.done
|
||||
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 $0C
|
||||
|
||||
SEP #$20
|
||||
LDA.l DungeonMapFloorCountData, X
|
||||
AND.b #$0F
|
||||
CLC : ADC.w $020E
|
||||
DEC A
|
||||
REP #$20
|
||||
AND.w #$00FF
|
||||
|
||||
JSR DrawBothFloorsEntrances
|
||||
|
||||
.done
|
||||
REP #$20
|
||||
PLA : STA.b $06
|
||||
PLY : PLX
|
||||
SEP #$30
|
||||
RTL
|
||||
|
||||
DrawBothFloorsEntrances:
|
||||
ASL A
|
||||
TAX
|
||||
|
||||
LDA.l DungeonMapFloorToDataOffset, X
|
||||
TAY
|
||||
STZ.b $06
|
||||
|
||||
.next_room
|
||||
REP #$20
|
||||
LDA.b ($0C), 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 #$0A
|
||||
BCC .next_room
|
||||
|
||||
.done
|
||||
RTS
|
||||
|
||||
macro DrawSingleEntrance(offset)
|
||||
LDX.b $00
|
||||
STZ.w OAMBufferAux, X ; high x-bit and size bit
|
||||
TXA
|
||||
ASL #2
|
||||
TAX
|
||||
|
||||
LDA.b $06
|
||||
ASL #4
|
||||
CLC : ADC.b #$90+<offset>
|
||||
STA.w OAMBuffer+0, X
|
||||
|
||||
LDA.b $07
|
||||
ASL #4
|
||||
CMP.b #$50
|
||||
BCC ?+
|
||||
CLC : ADC.b #$50
|
||||
?+ CLC : ADC.b #$87
|
||||
CLC : ADC.w $0213
|
||||
SEC : SBC.b $E8
|
||||
STA.w OAMBuffer+1, X
|
||||
|
||||
LDA.b #$33
|
||||
STA.w OAMBuffer+2, X
|
||||
|
||||
LDA.b #$23
|
||||
STA.w OAMBuffer+3, X
|
||||
|
||||
INC.b $00
|
||||
endmacro
|
||||
|
||||
DrawSingleRoomEntrances:
|
||||
STA.b $0E
|
||||
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
|
||||
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
|
||||
RTS
|
||||
@@ -1,187 +0,0 @@
|
||||
CheckSwitchMap:
|
||||
SEP #$20
|
||||
LDA.b $F6
|
||||
AND.b #$30
|
||||
BNE +
|
||||
|
||||
; what we wrote over
|
||||
REP #$20
|
||||
LDA.w $8AF5E9, X
|
||||
AND.w #$000F
|
||||
CLC : ADC.b $00
|
||||
RTL
|
||||
|
||||
+ PHA
|
||||
TXA
|
||||
ASL A
|
||||
TAX
|
||||
PLA
|
||||
BIT.b #$20
|
||||
BNE +
|
||||
INX
|
||||
+ LDA.l DungeonMapData.prev, X
|
||||
STA.w DungeonID
|
||||
|
||||
LDA.b #$04
|
||||
STA.w $0200
|
||||
REP #$20
|
||||
LDA.w #$0000
|
||||
RTL
|
||||
|
||||
DungeonMapSwitch_Submodule:
|
||||
; LDA.b $9B
|
||||
; STA.l $7EC229
|
||||
|
||||
JSL $80893D
|
||||
JSL $80833F
|
||||
; LDA.l $7EC229
|
||||
; STA.b $9B
|
||||
|
||||
LDA.b #$09
|
||||
STA.b $14
|
||||
STA.w $0710
|
||||
|
||||
LDA.b #$01
|
||||
STA.w $0200
|
||||
STA.w $020D
|
||||
STZ.w $0213
|
||||
STZ.w $021B
|
||||
STZ.w $021C
|
||||
STZ.b $06
|
||||
STZ.b $07
|
||||
|
||||
LDA.w DungeonID
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l DungeonMapData.floor, X
|
||||
STA.b $A4
|
||||
|
||||
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.l DRMode
|
||||
BNE +
|
||||
LDA.w $0200
|
||||
CMP.b #$04
|
||||
BEQ +
|
||||
JSL DrawEntrances
|
||||
+
|
||||
|
||||
STZ.b $0E
|
||||
STZ.b $0F
|
||||
|
||||
LDA.w $0200
|
||||
CMP.b #$04
|
||||
BNE +
|
||||
JML $8AEAFC
|
||||
+
|
||||
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
JML $8AEAEE
|
||||
+
|
||||
|
||||
LDA.l $7EC22A
|
||||
CMP.w DungeonID
|
||||
BEQ +
|
||||
JML $8AEAF3
|
||||
+ JML $8AEADE
|
||||
|
||||
CacheCurrentDungeon:
|
||||
STA.l $7EC206
|
||||
SEP #$20
|
||||
LDA.b $A4
|
||||
STA.l $7EC22B
|
||||
|
||||
LDA.w DungeonID
|
||||
STA.l $7EC22A
|
||||
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
|
||||
LDA.w DungeonID
|
||||
PHX
|
||||
ASL A
|
||||
TAX
|
||||
LDA.l DungeonMapData.floor, X
|
||||
STA.b $A4
|
||||
PLX
|
||||
|
||||
+
|
||||
REP #$20
|
||||
RTL
|
||||
|
||||
RestoreCurrentDungeon:
|
||||
LDA.b #$F3
|
||||
STA.w $012C ; what we wrote over
|
||||
LDA.l $7EC22A
|
||||
STA.w DungeonID
|
||||
LDA.l $7EC22B
|
||||
STA.b $A4
|
||||
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
|
||||
+
|
||||
|
||||
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
|
||||
SEP #$20
|
||||
LDA.b #$FF
|
||||
STA.w GFXStripes+$0A, Y
|
||||
LDA.b #$01
|
||||
STA.b NMISTRIPES
|
||||
|
||||
INC.w $020D ; what we wrote over
|
||||
RTL
|
||||
|
||||
CountFloors:
|
||||
ADC.w $8AF605, Y
|
||||
STA.b $04
|
||||
LDY.w #$0000
|
||||
RTL
|
||||
|
||||
CheckIfRoomFound:
|
||||
CPY.w #$0032
|
||||
BCS .not_found
|
||||
LDA.b ($04), Y
|
||||
INY
|
||||
CMP.b $0E
|
||||
JML $8AE877
|
||||
|
||||
.not_found
|
||||
JML $8AE8CD
|
||||
@@ -1,150 +0,0 @@
|
||||
; move aga boss icon to correct room
|
||||
org $8AEE75
|
||||
db $08
|
||||
|
||||
; change dungeon map subsheet gfx in TR
|
||||
; org $80DDC9
|
||||
; db $57
|
||||
|
||||
; dungeon map sheets
|
||||
org $80DD97
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
db $61, $56, $57, $62
|
||||
|
||||
; unused chest data
|
||||
org $81E9A5
|
||||
dw $00F0 ; freezor room, second chest (only one chest in supertile)
|
||||
|
||||
org $81EA6E
|
||||
dw $00F0 ; mire spike room, second chest (only one chest in supertile)
|
||||
|
||||
org $81EAF8
|
||||
dw $00F0 ; 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 $8AE64F
|
||||
PLX
|
||||
JSL DrawDungeonMapRoom
|
||||
JMP.w $8AE7F2
|
||||
|
||||
org $8AE152
|
||||
JSL LoadLastHUDPalette
|
||||
|
||||
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 $8AE86A
|
||||
JSL CountFloors
|
||||
NOP #2
|
||||
|
||||
org $8AE872
|
||||
JML CheckIfRoomFound
|
||||
NOP
|
||||
|
||||
;================================================================================
|
||||
; 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 : +
|
||||
@@ -1,36 +0,0 @@
|
||||
pushpc
|
||||
incsrc 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($D6, DungeonMapIcons2)
|
||||
|
||||
; TR is such a problem child
|
||||
; %WriteGFXSheetPointer($A6, DungeonMapIcons2)
|
||||
|
||||
%WriteGFXSheetPointer($D4, MapSheetD4)
|
||||
|
||||
pullpc
|
||||
|
||||
incsrc draw_rooms.asm
|
||||
incsrc map_bg3.asm
|
||||
incsrc dungeon_switch.asm
|
||||
incsrc draw_loot.asm
|
||||
incsrc check_loot.asm
|
||||
incsrc blink_loot.asm
|
||||
@@ -1,96 +0,0 @@
|
||||
pushpc
|
||||
org $809383
|
||||
db BG3DungeonMapStripes>>0
|
||||
|
||||
org $80938C
|
||||
db BG3DungeonMapStripes>>8
|
||||
|
||||
org $809395
|
||||
db BG3DungeonMapStripes>>16
|
||||
pullpc
|
||||
|
||||
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
|
||||
|
||||
BG3DungeonMapStripes:
|
||||
; boring stuff from vanilla
|
||||
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 $4E60, $0100, $2100
|
||||
dw $4F60, $1A40, $2101
|
||||
dw $5D60, $0100, $6100
|
||||
dw $6E60, $2EC0, $2110
|
||||
dw $7D60, $2EC0, $6110
|
||||
dw $6E63, $0100, $A100
|
||||
dw $6F63, $1A40, $A101
|
||||
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
|
||||
|
||||
; new stuff here:
|
||||
; horizontal borders
|
||||
dw $7260, $1340, $1D11
|
||||
dw $D261, $1340, $1D11
|
||||
dw $F261, $1340, $1D11
|
||||
dw $5263, $1340, $1D11
|
||||
|
||||
; vertical borders
|
||||
dw $7160, $2FC0, $1D11
|
||||
dw $7C60, $2FC0, $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
|
||||
@@ -1,189 +0,0 @@
|
||||
; $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 $B9F880
|
||||
org $B9F880
|
||||
|
||||
LootTypeIcons:
|
||||
dw $0B00, $0B00, $0B00, $0B00 ; 00 - nothing
|
||||
dw $2F32, $6F32, $AF32, $EF32 ; 01 - unknown - dot
|
||||
dw $2B0D, $6B0D, $2B3D, $6B3D ; 02 - junk - pot
|
||||
dw $2B07, $6B07, $2B17, $2B18 ; 03 - small key
|
||||
dw $2B0B, $6B0B, $2B3B, $6B3B ; 04 - triforce piece
|
||||
dw $6B08, $2B08, $EB08, $AB08 ; 05 - safety - plus
|
||||
dw $2B0E, $6B0E, $2B3E, $6B3E ; 06 - less important item - small chest
|
||||
dw $AB3A, $EB3A, $2B3A, $6B3A ; 07 - compass
|
||||
dw $2B07, $6B07, $2B17, $2B18 ; 08 - small key
|
||||
dw $2B05, $6B05, $2B15, $2B16 ; 09 - big key
|
||||
dw $2B09, $2B0A, $2B39, $6B39 ; 0A - pendant
|
||||
dw $2B0F, $6B0F, $2B3F, $6B3F ; 0B - important inventory item - big chest
|
||||
dw $2B09, $2B0A, $2B39, $6B39 ; 0C - also pendant
|
||||
dw $6F02, $2B02, $EB02, $AF02 ; 0D - crystal
|
||||
dw $2B0B, $6B0B, $2B3B, $6B3B ; 0E - triforce piece
|
||||
dw $2B0C, $6B0C, $2B3C, $6B3C ; 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 $00C8 : db $04 : dl HeartContainer_ArmosKnights
|
||||
dw $0033 : db $04 : dl HeartContainer_Lanmolas
|
||||
dw $0007 : db $04 : dl HeartContainer_Moldorm
|
||||
|
||||
dw $005A : db $04 : dl HeartContainer_HelmasaurKing
|
||||
dw $0006 : db $04 : dl HeartContainer_Arrghus
|
||||
dw $0029 : db $04 : dl HeartContainer_Mothula
|
||||
dw $00AC : db $04 : dl HeartContainer_Blind
|
||||
dw $00DE : db $04 : dl HeartContainer_Kholdstare
|
||||
dw $0090 : db $04 : dl HeartContainer_Vitreous
|
||||
dw $00A4 : db $04 : dl HeartContainer_Trinexx
|
||||
|
||||
dw $0073 : db $05 : dl BonkKey_Desert ; torch
|
||||
dw $008C : db $05 : dl BonkKey_GTower ; torch
|
||||
dw $0087 : db $05 : dl StandingKey_Hera
|
||||
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Placeholders
|
||||
dw $FFFF : db $FF : dl $FFFFFF
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Aga 1? ($0020)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Ice Armos? ($001C)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Lanmolas 2? ($0033)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Moldorm 2? ($004D)
|
||||
dw $FFFF : db $FF : dl $FFFFFF ; Aga 2? ($000D)
|
||||
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 $2550, $2579 ; Sewers
|
||||
dw $2550, $2578 ; 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
|
||||
|
||||
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 4
|
||||
warnpc $B9FF08
|
||||
|
||||
org $B9FF08
|
||||
; $00 - do not show anything
|
||||
; $01 - show presence of unobtained items
|
||||
; $02 - show category of item
|
||||
ShowItems:
|
||||
.default
|
||||
db $00
|
||||
.have_map
|
||||
db $00
|
||||
.have_compass
|
||||
db $02
|
||||
.visited_tile
|
||||
db $01
|
||||
.reserved
|
||||
skip 4
|
||||
warnpc $B9FF10
|
||||
|
||||
org $B9FF10
|
||||
; ---P bepc
|
||||
; P - dungeon prizes
|
||||
; b - bosses (and torches in GT, plus hera basement standing item)
|
||||
; e - enemy drops
|
||||
; p - pots
|
||||
; c - chests
|
||||
ItemSources:
|
||||
db $09
|
||||
|
||||
AlwaysShowCompass:
|
||||
db $01
|
||||
@@ -3,16 +3,6 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnDungeonPrize:
|
||||
PHX : PHB
|
||||
|
||||
PHA
|
||||
; Don't spawn prize in Cave state, Hyrule Castle, Escape, Castle Tower, or Ganon's Tower
|
||||
LDA.w DungeonID : BMI .skip_prize_drop ; Cave state
|
||||
CMP.b #$00 : BEQ .skip_prize_drop ; Escape
|
||||
CMP.b #$02 : BEQ .skip_prize_drop ; Hyrule Castle
|
||||
CMP.b #$1A : BEQ .skip_prize_drop ; Ganon's Tower
|
||||
CMP.b #$08 : BEQ .skip_prize_drop ; Agahnim's Tower (Castle Tower)
|
||||
PLA
|
||||
|
||||
STA.w ItemReceiptID
|
||||
TAX
|
||||
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
|
||||
@@ -28,10 +18,6 @@ SpawnDungeonPrize:
|
||||
PLB : PLX
|
||||
RTL
|
||||
|
||||
.skip_prize_drop:
|
||||
PLA : PLB : PLX
|
||||
RTL
|
||||
|
||||
AddDungeonPrizeAncilla:
|
||||
LDY.w ItemReceiptID
|
||||
STZ.w AncillaVelocityY,X
|
||||
@@ -467,7 +453,6 @@ RTL
|
||||
|
||||
MaybeSkipCrystalCutsceneFollowerReset:
|
||||
PHA
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .skip
|
||||
; skip if prizes are shuffled outside of normal boss drops
|
||||
LDA.l InventoryTable_properties+($37*2) : AND.b #$01 : BEQ .continue
|
||||
.skip
|
||||
|
||||
@@ -20,12 +20,7 @@ DoDungeonMapBossIcon:
|
||||
; get sprite pointer for room
|
||||
LDA.l UWSpritesPointers,X
|
||||
STA.b Scrap00 ; pointer in $00
|
||||
if !FEATURE_FIX_BASEROM
|
||||
LDA.w #$0089
|
||||
else
|
||||
LDA.w #$0028 ; set the bank to 28 for now
|
||||
endif
|
||||
STA.b Scrap02
|
||||
LDA.w #$0028 : STA.b Scrap02 ; set the bank to 28 for now
|
||||
LDY.w #$0001 ; to skip the "sort"
|
||||
|
||||
; get first byte to make sure it isn't an empty room
|
||||
52
elder.asm
52
elder.asm
@@ -39,30 +39,32 @@ RTL
|
||||
|
||||
Elder_Code:
|
||||
{
|
||||
TXY : LDX.b #$06
|
||||
REP #$30
|
||||
LDA.l GoalConditionTable, X
|
||||
TAX : LDA.l $B00000, X
|
||||
SEP #$30
|
||||
TYX
|
||||
CMP.b #$00 : BEQ .despawn ; no goal, despawn
|
||||
LDA.l TurnInGoalItems : BNE +
|
||||
REP #$20
|
||||
LDA.l GoalItemRequirement : BEQ .despawn
|
||||
LDA.l GanonVulnerableMode : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn
|
||||
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
||||
.despawn
|
||||
SEP #$20
|
||||
STZ.w SpriteAITable, X ; despawn self
|
||||
RTS
|
||||
+
|
||||
SEP #$20
|
||||
LDA.b GameSubMode
|
||||
BNE .done
|
||||
LDA.b #$96
|
||||
LDY.b #$01
|
||||
|
||||
JSL Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage : BCC .dont_show
|
||||
LDA.b #$03 : JSL CheckConditionPass : BCC +
|
||||
REP #$20
|
||||
LDA.l GoalCounter
|
||||
CMP.l GoalItemRequirement : !BLT +
|
||||
SEP #$20
|
||||
JSL ActivateTriforceCutscene
|
||||
+
|
||||
.dont_show
|
||||
|
||||
.done
|
||||
SEP #$20
|
||||
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
||||
RTS
|
||||
}
|
||||
@@ -142,35 +144,19 @@ MasterSword_CheckIfPulled:
|
||||
|
||||
MasterSword_ConditionalActivateCutscene:
|
||||
LDA.w SpriteMovement,X : BNE .specialCutscene
|
||||
PHX
|
||||
REP #$30
|
||||
LDA.w SprRedrawFlag, X : BNE .doNormalPed
|
||||
INC.w SprRedrawFlag, X
|
||||
LDA.l PedPullGfx : BEQ .doNormalPed
|
||||
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||
LDA.w #$BCE0>>1 : STA.l ItemTargetStack,X
|
||||
TXA : INC #2 : STA.w ItemStackPtr
|
||||
.doNormalPed
|
||||
SEP #$30
|
||||
PLX
|
||||
JML Sprite_CheckDamageToPlayerSameLayerLong ; what we wrote over
|
||||
.specialCutscene
|
||||
LDA.b #$02 : STA.w ItemReceiptPose ; Link's 2-hands-up pose
|
||||
STA.b LinkLayer ; draw Link on top
|
||||
; draw Triforce piece in VRAM
|
||||
LDA.w SprRedrawFlag, X : BNE .skipTransfer
|
||||
INC.w SprRedrawFlag, X
|
||||
PHX
|
||||
REP #$30
|
||||
LDA.l MurahdahlaGfx : BNE .submitRequest
|
||||
LDX.w #$006A<<1 : LDA.l StandingItemGraphicsOffsets,X
|
||||
.submitRequest
|
||||
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||
LDX.w #$006A<<1
|
||||
LDA.l StandingItemGraphicsOffsets,X : LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||
LDA.w #$9CE0>>1 : STA.l ItemTargetStack,X
|
||||
TXA : INC #2 : STA.w ItemStackPtr
|
||||
SEP #$30
|
||||
PLX
|
||||
.skipTransfer
|
||||
PLA : PLA : PLA : JML MasterSword_InPedestal_DoCutscene ; do cutscene
|
||||
|
||||
MasterSword_ConditionalGrabPose:
|
||||
@@ -187,20 +173,10 @@ RTL
|
||||
MasterSword_SpawnPendantProp_ChangePalette:
|
||||
STA.w SpriteVelocityY,Y : PLX ; what we wrote over
|
||||
LDA.w SpriteMovement,X : BNE .specialCutscene
|
||||
LDA.l PedPullGfx : BNE .customPedGfx
|
||||
LDA.l PedPullGfx+1 : BNE .customPedGfx
|
||||
BRA .done
|
||||
.customPedGfx
|
||||
LDA.l PedPullPalette : ASL : INC : BRA .setPalette
|
||||
.specialCutscene
|
||||
LDA.b #$08 : STA.w SpriteOAMProp,Y ; change palette
|
||||
LDA.b #$02 : STA.w SpriteLayer,Y ; change layer
|
||||
LDA.l MurahdahlaGfx : BNE .customGfx
|
||||
LDA.l MurahdahlaGfx+1 : BNE .customGfx
|
||||
LDA.b #$08 : BRA .setPalette
|
||||
.customGfx
|
||||
LDA.l MurahdahlaPalette : ASL
|
||||
.setPalette
|
||||
STA.w SpriteOAMProp,Y ; change palette
|
||||
.done
|
||||
JML MasterSword_SpawnPendantProp_ChangePalette_return
|
||||
|
||||
|
||||
@@ -23,13 +23,12 @@ boss_move:
|
||||
+
|
||||
|
||||
CMP.b #41 : BNE + ; Is it Skull Woods Boss Room
|
||||
; TODO: Add moving floor sprite
|
||||
JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare)
|
||||
JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites
|
||||
LDA.w $0E20 : CMP.b #$92 : BNE ++ ; Is it Helmasuar King?
|
||||
LDA.b #$07 : STA.w $0B00 ;Spawn the bugged moving floor sprite
|
||||
STZ.w $0B28
|
||||
INC.w OverlordXLow
|
||||
++
|
||||
LDA.b #$07 : STA.w $0B00 ;Spawn the moving floor sprite
|
||||
STZ.w $0B28
|
||||
INC.w OverlordXLow
|
||||
BRL .move_to_bottom_right
|
||||
+
|
||||
|
||||
@@ -288,16 +287,3 @@ new_trinexx_code:
|
||||
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Check if water tile in Swamp boss room, skip interaction
|
||||
;--------------------------------------------------------------------------------
|
||||
swamp_boss_tile_interaction:
|
||||
LDA.l Sprite_ReducedTileInteractionTable, X : BEQ .return
|
||||
CPX.b #$09 : BNE .return ; return if non-water tile
|
||||
LDX.b IndoorsFlag : BEQ .return ; return if overworld
|
||||
LDX.b RoomIndex : CPX.b #$06 : BNE .return ; return if not swamp boss room
|
||||
LDA.b #$00
|
||||
.return
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -15,12 +15,3 @@ incsrc hooks/damage_hooks.asm
|
||||
incsrc hooks/overworld_sprite_hooks.asm
|
||||
|
||||
incsrc hooks/underworld_sprite_hooks.asm
|
||||
|
||||
org $85B8BA
|
||||
JSL GeldmanDrawOverride
|
||||
|
||||
org $9EAAAC
|
||||
JSL StalfosKnightDrawOverride
|
||||
|
||||
org $9EB209
|
||||
JSL BlobDrawOverride
|
||||
@@ -11,16 +11,14 @@ Sprite_ResetAll: ; Bank09.asm(1344)
|
||||
;================================================================================
|
||||
; On Room Transition -> Move Sprite depending on the room loaded
|
||||
;--------------------------------------------------------------------------------
|
||||
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
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -41,10 +39,3 @@ JSL new_kholdstare_code ; Write new gfx in the vram
|
||||
org $1DAD67 ; sprite_trinexx.asm (62) : LDA.b #$03 : STA $0DC0, X
|
||||
JSL new_trinexx_code : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Swamp Boss Room Water Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
org $06E81A
|
||||
JSL swamp_boss_tile_interaction
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -2,11 +2,7 @@
|
||||
; New bush mob randomization
|
||||
;--------------------------------------------------------------------------------
|
||||
org $868279
|
||||
BRA +
|
||||
MaybeSkipTerrainDebris:
|
||||
JSL MaybeSkipTerrainDebris_long : RTS ; sticking this here, no other free space in bank 06
|
||||
NOP #3
|
||||
+
|
||||
NOP #$0A
|
||||
JSL sprite_bush_spawn
|
||||
NOP ; we keep the branch
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -18,3 +18,10 @@ org $9DD88E
|
||||
;0EDBB2 0EDBB3
|
||||
; LDX.b #$01
|
||||
;}
|
||||
|
||||
org $85B8BA ; geldman
|
||||
JSL Sprite_MaybeForceDrawShadow
|
||||
org $9EAAAC ; stalfos knight
|
||||
JSL Sprite_MaybeForceDrawShadow
|
||||
org $9EB209 ; blob
|
||||
JSL Sprite_MaybeForceDrawShadow
|
||||
|
||||
@@ -61,3 +61,7 @@ LDA.b [Scrap00],Y
|
||||
|
||||
org $89C416
|
||||
LDA.b [Scrap00],Y
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@ pushpc
|
||||
|
||||
org $9EC147
|
||||
JSL NewKodongoCollision
|
||||
BRA + : NOP #3 : +
|
||||
JMP .continue : NOP #2
|
||||
.continue
|
||||
|
||||
org $9EC152
|
||||
Kodongo_SetDirection:
|
||||
@@ -11,18 +12,8 @@ pullpc
|
||||
|
||||
NewKodongoCollision:
|
||||
LDA.w SpriteMoveDirection, X : INC A : AND.b #$03 : STA.w SpriteMoveDirection, X
|
||||
JSL Kodongo_InVanillaRoom : BEQ .continue
|
||||
;If they collide more than 4 times just set direction
|
||||
LDA.w SpriteAuxTable, X : INC A : STA.w SpriteAuxTable, X : CMP.b #$04 : BCC .continue
|
||||
PLA : PLA : PEA.w Kodongo_SetDirection-1
|
||||
.continue
|
||||
RTL
|
||||
|
||||
Kodongo_InVanillaRoom:
|
||||
LDA.b RoomIndex+1 : BNE .return
|
||||
LDA.b RoomIndex : CMP.b #$19 : BEQ .return
|
||||
CMP.b #$27 : BEQ .return
|
||||
CMP.b #$77 : BEQ .return
|
||||
.return
|
||||
RTL
|
||||
nop #10
|
||||
RTL
|
||||
@@ -52,5 +52,8 @@ incsrc falling_death.asm
|
||||
incsrc shell_gfx.asm
|
||||
warnpc $B6FFFF ;if we hit this we need to split stuff by bank
|
||||
|
||||
org $8684BD
|
||||
Sprite_Get16BitCoords_long:
|
||||
|
||||
org $9EC6FA ;F46FA
|
||||
SpritePrep_Eyegore:
|
||||
@@ -26,7 +26,7 @@ SpritePrep_Eyegore_become_mimic:
|
||||
;JSL resetSprite_Mimic : NOP
|
||||
|
||||
org $86ED9E ; Sprite_ApplyCalculatedDamage, skip high sprite id early exit
|
||||
JSL IsItReallyAMimic : NOP
|
||||
; JSL IsItReallyAMimic : NOP ; now hooked into from souls.asm
|
||||
|
||||
org $86EDA6 ; Sprite_ApplyCalculatedDamage .not_absorbable
|
||||
JSL notItemSprite_Mimic
|
||||
@@ -108,4 +108,4 @@ notItemSprite_Mimic:
|
||||
.continue
|
||||
; restore code
|
||||
REP #$20 : ASL #2
|
||||
RTL
|
||||
RTL
|
||||
|
||||
@@ -1,48 +1,11 @@
|
||||
LoadUnderworldSprites:
|
||||
STA.b Scrap00 ; part one of what we replaced
|
||||
LDA.w #UWSpritesData>>16 ; set the bank to 28 for now
|
||||
STA.b Scrap02
|
||||
LDA.w $048E
|
||||
LDA.w #UWSpritesData>>16 : STA.b Scrap02 ; set the bank to 28 for now
|
||||
LDA.w $048E
|
||||
RTL
|
||||
|
||||
GetSpriteSlot16Bit:
|
||||
LDA.b Scrap03 : AND.w #$00FF
|
||||
ASL A
|
||||
TAY
|
||||
RTL
|
||||
|
||||
GeldmanDrawOverride:
|
||||
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
|
||||
|
||||
.vanilla
|
||||
JSL Sprite_PrepOAMCoordLong
|
||||
JML Sprite_4C_Geldman_continue
|
||||
|
||||
StalfosKnightDrawOverride:
|
||||
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
|
||||
|
||||
JSL Sprite_PrepOAMCoordLong
|
||||
LDA.b #$12
|
||||
JML Sprite_DrawShadowLong
|
||||
|
||||
.vanilla
|
||||
JSL Sprite_PrepOAMCoordLong
|
||||
RTL
|
||||
|
||||
BlobDrawOverride:
|
||||
PLA : PLA : PLA ; fix the call stack
|
||||
LDA.l DRFlags+1 : AND.b #$08 : BEQ .vanilla
|
||||
|
||||
LDA.b #$05
|
||||
STA.w $0DC0,X
|
||||
|
||||
JML SpriteDraw_Blob_head_popping_out
|
||||
|
||||
.vanilla
|
||||
JSL Sprite_PrepOAMCoordLong
|
||||
JML SpriteDraw_Blob_bad_gfx
|
||||
RTL
|
||||
@@ -25,3 +25,15 @@ NewFireBarDamage:
|
||||
RTL
|
||||
.NotSameLayer
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
Sprite_MaybeForceDrawShadow:
|
||||
JSL Sprite_PrepOAMCoordLong
|
||||
LDA.l DRFlags+1 : AND.b #$08 : BEQ .return
|
||||
LDA.b GameMode : CMP.b #$07 : BNE .return
|
||||
JSL Sprite_DrawShadowLong
|
||||
; LDA.w SpriteTypeTable,X : CMP.b #$91 : BNE .return ; stalfos knight
|
||||
; ; move shadow down by 8 pixels
|
||||
; + LDA.w SpriteOAMProperties,X : AND.b #$1F : ASL #2 : TAY : INY ; get OAM offset
|
||||
; LDA.b (OAMPtr),Y : CLC : ADC.b #$08 : STA.b (OAMPtr),Y
|
||||
.return
|
||||
RTL
|
||||
|
||||
@@ -63,8 +63,8 @@ RTS
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
SmithDoorCheck:
|
||||
LDA.l FollowerTravelAllowed : AND.w #$00FF : BEQ .orig
|
||||
;If FollowerTravelAllowed is set Frog/Smith can enter multi-entrance overworld doors
|
||||
LDA.l SmithTravelsFreely : AND.w #$00FF : BEQ .orig
|
||||
;If SmithTravelsFreely is set Frog/Smith can enter multi-entrance overworld doors
|
||||
JML Overworld_Entrance_BRANCH_RHO
|
||||
|
||||
.orig ; The rest is equivlent to what we overwrote
|
||||
|
||||
44
events.asm
44
events.asm
@@ -61,22 +61,13 @@ OnDungeonExit:
|
||||
PLP : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnSave:
|
||||
LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change
|
||||
JSL DarkWorldSaveFix
|
||||
JML MSUResumeReset
|
||||
;--------------------------------------------------------------------------------
|
||||
OnQuit:
|
||||
JSL SQEGFix
|
||||
JSL MSUResumeReset
|
||||
LDA.b #$00 : STA.l AltTextFlag ; bandaid patch bug with mirroring away from text
|
||||
LDA.b #$10 : STA.b MAINDESQ ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDeathNoSave:
|
||||
JSL MSUResumeReset
|
||||
LDA.b #$05 : STA.b $10 ; what we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnUncleItemGet:
|
||||
PHA
|
||||
|
||||
@@ -107,8 +98,8 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnAga1Defeated:
|
||||
STA.l ProgressIndicator ; vanilla game state stuff we overwrote
|
||||
; seems light_speed option to auto triforce room is unused for now
|
||||
BRA +
|
||||
LDA.l GanonVulnerableMode
|
||||
CMP.b #$06 : BNE +
|
||||
.light_speed
|
||||
REP #$20
|
||||
LDA.w #$0019 : STA.b GameMode
|
||||
@@ -144,7 +135,7 @@ OnFileCreation:
|
||||
|
||||
; Resolve instant post-aga if standard
|
||||
SEP #$20
|
||||
LDA.l InitProgressIndicator : BIT.b #$80 : BEQ +
|
||||
LDA.l InitProgressIndicator : BIT #$80 : BEQ +
|
||||
LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue
|
||||
LDA.b #$00 : STA.l OverworldEventDataSRAM+$02 ; keep rain state vanilla
|
||||
+
|
||||
@@ -217,37 +208,18 @@ 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
|
||||
|
||||
@@ -259,12 +231,7 @@ 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
|
||||
@@ -277,7 +244,6 @@ OnOWTransition:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLoadDuckMap:
|
||||
JSL SelectFirstFluteSpot
|
||||
LDA.l DuckMapFlag
|
||||
BNE +
|
||||
INC : STA.l DuckMapFlag
|
||||
|
||||
@@ -248,12 +248,8 @@ DrawPlayerFileShared:
|
||||
|
||||
; Flute
|
||||
LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ +
|
||||
LDA.l $7003C2 : AND.w #$00FF : CMP.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)
|
||||
++
|
||||
@@ -543,8 +539,6 @@ 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
|
||||
|
||||
942
follower.asm
942
follower.asm
@@ -1,942 +0,0 @@
|
||||
pushpc
|
||||
; follower hooks
|
||||
org $81EBB6
|
||||
JSL MaybeSetZeldaCheckpoint
|
||||
org $899FA1
|
||||
db $FF, $FF, $FF ; disable timed follower messages
|
||||
org $89A647
|
||||
JSL MaybeSkipFollowerTrigger : NOP
|
||||
org $89F544
|
||||
JSL MaybeDeleteFollowersOnDeath
|
||||
|
||||
org $85EBCF
|
||||
JSL SpritePrep_ZeldaFollower : NOP #2
|
||||
org $85EC9E
|
||||
JSL SpriteDraw_ZeldaMaiden
|
||||
org $85ECD9
|
||||
JSL Zelda_WaitingInCell
|
||||
org $85ED46
|
||||
JSL Zelda_BecomeFollower : NOP #2
|
||||
|
||||
org $9EE902
|
||||
JSL SpritePrep_OldManFollower : NOP #2 : db $F0 ; BEQ
|
||||
org $9DFF18
|
||||
JSL SpriteDraw_OldManFollower
|
||||
org $9EE9BC
|
||||
JSL Follower_CheckMessageCollision
|
||||
org $9EE9CC
|
||||
JSL OldMan_BecomeFollower : NOP #2
|
||||
|
||||
org $86899C
|
||||
JSL SpritePrep_BlindMaiden : NOP #2
|
||||
org $8689A7
|
||||
JSL BlindZeldaDespawnFix : NOP #2
|
||||
org $9EE8B0
|
||||
JSL SpriteDraw_ZeldaMaiden
|
||||
org $9EE8CD
|
||||
JSL Follower_CheckCollision
|
||||
org $9EE8D7
|
||||
JSL BlindMaiden_BecomeFollower : NOP
|
||||
|
||||
org $868A7E
|
||||
JSL SpritePrep_SmithyFrog : BRA + : NOP #8 : +
|
||||
org $86B2AA
|
||||
JSL Follower_CheckMessageCollision
|
||||
org $86B2B4
|
||||
JSL Frog_BecomeFollower : NOP #2
|
||||
org $86B341
|
||||
JSL SpriteDraw_FrogFollower
|
||||
|
||||
org $868A53
|
||||
JSL SpritePrep_PurpleChest : NOP #2
|
||||
org $9EE0D7
|
||||
JSL SpriteDraw_PurpleChest
|
||||
org $9EE0E7
|
||||
JSL Follower_CheckMessageCollision
|
||||
org $9EE0ED
|
||||
JSL PurpleChest_FollowCheck
|
||||
org $9EE0F7
|
||||
JSL PurpleChest_BecomeFollower : NOP
|
||||
|
||||
org $868A0A
|
||||
JSL SpritePrep_SuperBomb
|
||||
org $868A4A
|
||||
SuperBomb_BecomeFollower_exit:
|
||||
org $9EE16E
|
||||
BRA + : NOP #6 : + ; fix bomb shop dialog for dwarfless big bomb
|
||||
org $9EE1E8
|
||||
JSL SuperBomb_FollowCheck
|
||||
org $9EE1F1
|
||||
JSL SuperBomb_BecomeFollower : NOP #2
|
||||
org $9EE2C0
|
||||
JSL SpriteDraw_SuperBomb
|
||||
|
||||
org $868D51
|
||||
JSL SpritePrep_Kiki : NOP #2
|
||||
org $9EE3E6
|
||||
JSL Kiki_OfferToFollow
|
||||
org $9EE495
|
||||
JSL Kiki_FollowCheck : BRA + : NOP #12 : +
|
||||
org $9EE4AF
|
||||
JSL Kiki_BecomeFollower : NOP #2
|
||||
org $9EE4F7
|
||||
JSL Kiki_FixTeleportOnExit
|
||||
org $89A1B2
|
||||
JSL Kiki_DontScareTheMonke : NOP #3
|
||||
|
||||
org $868D63
|
||||
JSL SpritePrep_Locksmith : NOP #2 : db $90 ; BCC
|
||||
org $868D7E
|
||||
db $80 ; BRA
|
||||
org $86BCD9
|
||||
JML Locksmith_Chillin_PostMessage
|
||||
org $86BD09
|
||||
JSL Locksmith_BecomeFollower : NOP #2
|
||||
org $86BD7A ; allow follower pickup after purple chest item
|
||||
LDA.b #$00 : STA.w SpriteActivity, X
|
||||
JSL Locksmith_RespondToAnswer_PostItem
|
||||
org $86BDB4
|
||||
JSL SpriteDraw_LocksmithFollower
|
||||
pullpc
|
||||
|
||||
MaybeSkipFollowerTrigger:
|
||||
LDA.b GameMode : AND.w #$00FF : CMP.w #$0010 : BNE .normal
|
||||
.no_trigger
|
||||
INC : RTL
|
||||
.normal
|
||||
LDA.w $02F2 : AND.b Scrap06 ; what we wrote over
|
||||
RTL
|
||||
|
||||
MaybeDeleteFollowersOnDeath:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
; s+q = favor keeping current follower
|
||||
; death = favor replacing with unfulfilled starting followers
|
||||
; during escape = always favor keeping zelda
|
||||
LDA.b GameMode : CMP.b #$17 : BEQ .keep
|
||||
LDA.w DungeonID : NOP #2 : BPL .keep
|
||||
LDA.l InitFollowerIndicator : BEQ .keep
|
||||
JSL DetermineFollowerSpawn_check_resolved : BCS .keep
|
||||
LDA.l ProgressIndicator : CMP.b #$02 : BCS .delete
|
||||
LDA.l FollowerIndicator : CMP.b #$01 : BEQ .keep
|
||||
.delete
|
||||
PLA : PLA : PEA.w $89F558-1
|
||||
RTL
|
||||
.keep
|
||||
PLA : PLA : PEA.w $89F55E-1
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l FollowerIndicator ; what we wrote over
|
||||
RTL
|
||||
|
||||
StartingFollower:
|
||||
LDA.l InitFollowerIndicator : BEQ .return
|
||||
PHA
|
||||
REP #$20
|
||||
; possible spawn points
|
||||
LDA.b RoomIndex : CMP.w #$0104 : BEQ + ; links house
|
||||
CMP.w #$0012 : BEQ + ; sanc
|
||||
CMP.w #$00E4 : BEQ + ; old man
|
||||
CMP.w #$0112 : BEQ + ; dark sanc
|
||||
CMP.w #$011C : BEQ + ; bomb shop
|
||||
SEP #$20 : PLA : RTL
|
||||
+
|
||||
SEP #$20
|
||||
LDA.l FollowerIndicator : BEQ +
|
||||
LDA.l FollowerDropped : CMP.b #$80 : PLA : BCC .return : PHA
|
||||
+ LDA.l ProgressIndicator : CMP.b #$02 : PLA : BCC .escape_check
|
||||
PHA
|
||||
JSL DetermineFollowerSpawn_check_resolved
|
||||
PLA
|
||||
BCC .issue_follower
|
||||
BRA .return
|
||||
.escape_check
|
||||
CMP.b #$01 : BNE .return
|
||||
PHA : LDA.l ProgressFlags : AND.b #$04 : CMP.b #$04 : PLA : BCS .return
|
||||
.issue_follower
|
||||
STA.l FollowerIndicator
|
||||
LDA.b #$00 : STA.l FollowerDropped
|
||||
.return
|
||||
RTL
|
||||
|
||||
MaybeSetZeldaCheckpoint:
|
||||
AND.w #$7FFF : TAX ; what we wrote over
|
||||
SEP #$20
|
||||
LDA.l ProgressFlags : AND.b #$04 : BNE .return ; zelda rescued
|
||||
LDA.l StartingEntrance : CMP.b #$02 : BEQ .return ; cell checkpoint set
|
||||
CMP.b #$04 : BEQ .return ; throne room checkpoint set
|
||||
LDA.l FollowerIndicator : CMP.b #$01 : BNE .return ; zelda following
|
||||
LDA.b RoomIndex : CMP.b #$80 : BNE + ;zelda cell
|
||||
LDA.l Follower_Zelda : CMP.b #$01 : BNE .return
|
||||
BRA .set_checkpoint
|
||||
+ CMP.b #$45 : BNE .return ; maiden cell
|
||||
CPX.w #$0964 : BNE .return ; top big lock
|
||||
LDA.l Follower_Maiden : CMP.b #$01 : BNE .return
|
||||
.set_checkpoint
|
||||
LDA.b #$02 : STA.l StartingEntrance
|
||||
PHX
|
||||
SEP #$10
|
||||
JSL SaveDeathCount
|
||||
JSL Dungeon_SaveRoomQuadrantData
|
||||
REP #$10
|
||||
PLX
|
||||
.return
|
||||
REP #$30
|
||||
RTL
|
||||
|
||||
FollowerGfxRedraw:
|
||||
PHP : SEP #$30
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .return
|
||||
PHY
|
||||
LDY.b #$0F
|
||||
.next
|
||||
LDA.w SpriteAITable,Y : BEQ ++
|
||||
LDA.w SpriteTypeTable,Y : CMP.b #$76 : BEQ + ; zelda
|
||||
CMP.b #$AD : BEQ + ; old man
|
||||
CMP.b #$B7 : BEQ + ; maiden
|
||||
CMP.b #$1A : BEQ + ; frog
|
||||
CMP.b #$39 : BEQ + ; locksmith
|
||||
CMP.b #$B6 : BEQ + ; kiki
|
||||
CMP.b #$B4 : BEQ + ; purple chest
|
||||
CMP.b #$B5 : BNE ++ ; big bomb
|
||||
LDA.w SpriteJumpIndex,Y : CMP.b #$02 : BEQ +
|
||||
BRA ++
|
||||
+ LDA.b #$01 : STA.w SprRedrawFlag,Y
|
||||
++ DEY : BPL .next
|
||||
PLY
|
||||
.return
|
||||
PLP
|
||||
RTL
|
||||
|
||||
; A = 2 byte VRAM position in OAM2 for head/body
|
||||
; Scrap06/07/08 = address to OAM group
|
||||
; Returns with carry flag set if draw occurred
|
||||
TransferAndDrawFollowerGfx:
|
||||
PHA
|
||||
LDA.w SpriteTimerE, X : AND.w #$0008 : BNE .skip_draw ; skip drawing every other frame
|
||||
LDA.b 1,S
|
||||
JSR TransferFollowerSpriteGfx ; returns with SEP #$20
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$39 : BNE +
|
||||
; locksmith location flicker if quest completed but purple chest remains
|
||||
LDA.w SpriteAux, X : BNE .continue
|
||||
JSL DetermineFollowerSpawn : BCS .flicker
|
||||
+ BRA .continue
|
||||
.flicker
|
||||
LDA.w SpriteTimerE, X : NOP #2 : BNE .continue
|
||||
LDA.b #$0C : STA.w SpriteTimerE, X
|
||||
.continue
|
||||
PLA : XBA : PLA : XBA
|
||||
JSL SpriteDraw_Follower
|
||||
SEC
|
||||
RTL
|
||||
.skip_draw
|
||||
PLA
|
||||
SEP #$20
|
||||
CLC
|
||||
RTL
|
||||
|
||||
; A = 2 byte VRAM position in OAM2 for head/body
|
||||
TransferFollowerSpriteGfx_skip_transfer:
|
||||
PLA : PLA
|
||||
RTS
|
||||
TransferFollowerSpriteGfx:
|
||||
PHA : SEP #$20
|
||||
LDA.w SprRedrawFlag, X : BEQ .skip_transfer
|
||||
.redraw
|
||||
STZ.w SprRedrawFlag, X
|
||||
JSL DetermineFollower
|
||||
CMP.b #$01 : BNE +
|
||||
PLA : XBA : LDA.b #$83 ; zelda body
|
||||
JSR QueueFollowerSpriteGfx
|
||||
PLA : XBA : LDA.b #$82 ; zelda head
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$04 : BNE +
|
||||
PLA : XBA : LDA.b #$84 ; old man body
|
||||
JSR QueueFollowerSpriteGfx
|
||||
PLA : XBA : LDA.b #$85 ; old man head
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$06 : BNE +
|
||||
PLA : XBA : LDA.b #$81 ; maiden body
|
||||
JSR QueueFollowerSpriteGfx
|
||||
PLA : XBA : LDA.b #$80 ; maiden head
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$07 : BNE +
|
||||
PLA : XBA : PLA : LDA.b #$11 ; frog
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$08 : BNE +
|
||||
PLA : XBA : PLA : LDA.b #$16 ; smith
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$09 : BNE +
|
||||
PLA : XBA : LDA.b #$87 ; locksmith body
|
||||
JSR QueueFollowerSpriteGfx
|
||||
PLA : XBA : LDA.b #$86 ; locksmith head
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$0A : BNE +
|
||||
PLA : XBA : LDA.b #$13 ; kiki body
|
||||
JSR QueueFollowerSpriteGfx
|
||||
PLA : XBA : LDA.b #$12 ; kiki head
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ CMP.b #$0C : BNE +
|
||||
PLA : XBA : PLA : LDA.b #$14 ; purple chest
|
||||
JMP QueueFollowerSpriteGfx
|
||||
+ PLA : XBA : PLA : LDA.b #$15 ; super bomb
|
||||
JMP QueueFollowerSpriteGfx
|
||||
|
||||
; A = 2 bytes, dest/src
|
||||
QueueFollowerSpriteGfx:
|
||||
PHX : REP #$20
|
||||
PHA
|
||||
AND.w #$00FF : CMP.w #$00FF : BEQ +
|
||||
ASL #6 : EOR.w #$8000 : BRA .write_src
|
||||
+ LDA.w #$0020 ; blank tile
|
||||
.write_src
|
||||
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||
PLA : XBA
|
||||
AND.w #$00FF : ASL #4 : EOR.w #$5000
|
||||
STA.l ItemTargetStack,X
|
||||
TXA : INC #2 : STA.w ItemStackPtr
|
||||
SEP #$20 : PLX
|
||||
RTS
|
||||
|
||||
; A = 2 byte VRAM position in OAM2 for head/body
|
||||
; Scrap06/07/08 = address to OAM group
|
||||
; Scrap09/0A = address to palette data
|
||||
SpriteDraw_Follower:
|
||||
PHB : LDY.b #$7E : PHY : PLB
|
||||
REP #$20
|
||||
PHA
|
||||
LDY.b #$0E
|
||||
- LDA.b [Scrap06], Y : STA.w SpriteDynamicOAM, Y
|
||||
DEY #2 : BPL -
|
||||
LDA.b Scrap09 : STA.b Scrap06
|
||||
PLA
|
||||
SEP #$20
|
||||
STA.w SpriteDynamicOAM+$0C : XBA : STA.w SpriteDynamicOAM+$04
|
||||
JSL DetermineFollower : PHA
|
||||
PHX
|
||||
TAX : DEX
|
||||
LDA.b Scrap06 : ORA.b Scrap07 : BEQ +
|
||||
TXY
|
||||
LDA.b [Scrap06], Y
|
||||
BRA .set_palette
|
||||
+
|
||||
LDA.l .palette_data, X
|
||||
.set_palette
|
||||
STA.w SpriteDynamicOAM+$05 : STA.w SpriteDynamicOAM+$0D
|
||||
PLX
|
||||
REP #$20
|
||||
LDA.w #$0002 : STA.b Scrap06
|
||||
LDA.w #SpriteDynamicOAM : STA.b Scrap08
|
||||
SEP #$20
|
||||
PLA : CMP.b #$07 : BCC + : CMP.b #$09 : BEQ + : CMP.b #$0A : BEQ +
|
||||
; only draw body
|
||||
PHA
|
||||
LDA.b #$01 : STA.b Scrap06
|
||||
LDA.b #SpriteDynamicOAM+8 : STA.b Scrap08
|
||||
PLA
|
||||
+
|
||||
; follower specific adjustments
|
||||
CMP.b #$04 : BNE +
|
||||
LDA.w SpriteDynamicOAM+$0A : SEC : SBC.b #8 : STA.w SpriteDynamicOAM+$02 ; old man coords
|
||||
+
|
||||
CMP.b #$0A : BNE +
|
||||
LDA.w SpriteDynamicOAM+$0A : SEC : SBC.b #6 : STA.w SpriteDynamicOAM+$02 ; kiki coords
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$1A : BEQ ++ : CMP.b #$B4 : BCS ++ : BRA .draw
|
||||
++ LDA.w SpriteDynamicOAM+$05 : ORA.b #$40
|
||||
STA.w SpriteDynamicOAM+$05 : STA.w SpriteDynamicOAM+$0D ; kiki horiz flip
|
||||
+
|
||||
.draw
|
||||
JSL Sprite_DrawMultiple_player_deferred
|
||||
PLB
|
||||
RTL
|
||||
.palette_data
|
||||
; 01 04 06 07 08 09 0A 0C 0D
|
||||
db $00, $00, $00, $00, $00, $06, $00, $00, $06, $00, $00, $00, $00
|
||||
|
||||
|
||||
DetermineFollower:
|
||||
LDA.w SpriteAux, X : BEQ .skip_stored : RTL ; stored follower
|
||||
.skip_stored
|
||||
+ LDA.w $0E20,X : CMP.b #$1A : BNE +
|
||||
LDA.l Follower_Frog : BRA .finalize
|
||||
+ CMP.b #$39 : BNE +
|
||||
LDA.l Follower_Locksmith : BRA .finalize
|
||||
+ CMP.b #$AD : BNE +
|
||||
LDA.l Follower_OldMan : BRA .finalize
|
||||
+ CMP.b #$B6 : BNE +
|
||||
LDA.l Follower_Kiki : BRA .finalize
|
||||
+ CMP.b #$B7 : BNE +
|
||||
LDA.l Follower_Maiden : BRA .finalize
|
||||
+ CMP.b #$76 : BNE +
|
||||
LDA.l Follower_Zelda : BRA .finalize
|
||||
+ CMP.b #$B4 : BNE +
|
||||
LDA.l Follower_PurpleChest : BRA .finalize
|
||||
+ LDA.l Follower_SuperBomb
|
||||
.finalize
|
||||
PHA
|
||||
CMP.b #$07 : BNE +
|
||||
LDA.l CurrentWorld : BNE +
|
||||
PLA : LDA.b #$08 : RTL
|
||||
+
|
||||
PLA
|
||||
RTL
|
||||
|
||||
SetAndLoadFollower:
|
||||
LDA.l FollowerIndicator
|
||||
.skip_current
|
||||
PHA
|
||||
LDA.b #$00 : STA.l FollowerDropped
|
||||
JSL DetermineFollower : STA.l FollowerIndicator
|
||||
CMP.b #$01 : BNE +
|
||||
JSL DetermineFollower_skip_stored : CMP.b #$01 : BNE +
|
||||
LDA.b #$02 : STA.l StartingEntrance
|
||||
JSL SaveDeathCount
|
||||
PHX
|
||||
JSL Dungeon_SaveRoomQuadrantData
|
||||
PLX
|
||||
+ CMP.b #$09 : BNE +
|
||||
LDA.b #$40 : STA.w $02CD : STZ.w $02CE ; locksmith timed message
|
||||
+
|
||||
PHX
|
||||
JSL Tagalong_LoadGfx
|
||||
PLX
|
||||
PLA : BNE +
|
||||
JSL Follower_Initialize
|
||||
JML Sprite_BecomeFollower
|
||||
+
|
||||
RTL
|
||||
|
||||
StoreAndLoadFollower:
|
||||
LDA.l FollowerDropped : BNE .no_storage
|
||||
LDA.l FollowerIndicator : BEQ .no_storage
|
||||
PHA
|
||||
JSL SetAndLoadFollower_skip_current
|
||||
PLA : STA.w SpriteAux, X
|
||||
LDA.b #$13 : JSL Sound_SetSfx3PanLong
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
STZ.w SpriteActivity, X
|
||||
LDA.b #$90 : STA.w SpriteTimerE, X
|
||||
SEC : RTL
|
||||
.no_storage
|
||||
JSL SetAndLoadFollower_skip_current
|
||||
CLC : RTL
|
||||
|
||||
; return SEC if destination resolved
|
||||
DetermineFollowerSpawn_locksmith_check:
|
||||
; locksmith location needs to spawn if purple chest reward not acquired
|
||||
LDA.l FollowerIndicator : CMP.b #$0C : BEQ .always_spawn
|
||||
JSL DetermineFollower_skip_stored : CMP.l FollowerIndicator : BEQ .matched_following
|
||||
LDA.l NpcFlagsVanilla : AND.b #$10 : BEQ .always_spawn
|
||||
BRA DetermineFollowerSpawn
|
||||
.always_spawn
|
||||
CLC : RTL
|
||||
.matched_following
|
||||
SEC : RTL
|
||||
|
||||
DetermineFollowerSpawn_include_stored:
|
||||
JSL DetermineFollower
|
||||
BRA DetermineFollowerSpawn_byof
|
||||
DetermineFollowerSpawn:
|
||||
JSL DetermineFollower_skip_stored
|
||||
.byof
|
||||
CMP.l FollowerIndicator : BEQ .matched_following
|
||||
.skip_match_check
|
||||
PHA
|
||||
; despawn if pre-requisite not met
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$B4 : BNE +
|
||||
LDA.l NpcFlagsVanilla : AND.b #$20 : EOR.b #$20 : CMP.b #$20
|
||||
BRA .prereq_check
|
||||
+ CMP.b #$B5 : BNE +
|
||||
LDA.l CrystalsField : AND.b #$05 : CMP.b #$05
|
||||
LDA.b #$FF : ADC.b #$00 : ROR ; flip carry flag
|
||||
.prereq_check
|
||||
PLA : BCC .check_resolved
|
||||
RTL
|
||||
+
|
||||
PLA
|
||||
.check_resolved
|
||||
CMP.b #$01 : BNE +
|
||||
LDA.l ProgressFlags : AND.b #$04 : CMP.b #$04 : RTL
|
||||
+ CMP.b #$04 : BNE +
|
||||
JML ItemCheck_OldMan
|
||||
+ CMP.b #$06 : BNE +
|
||||
LDA.l RoomDataWRAM[$AC].high : AND.b #$08 : CMP.b #$08 : BCS ++
|
||||
LDA.l EnemizerFlags_close_blind_door : CMP.b #$01
|
||||
++
|
||||
RTL
|
||||
+ CMP.b #$09 : BCS + ; if frog or smith
|
||||
LDA.l NpcFlagsVanilla : AND.b #$20 : CMP.b #$20 : RTL
|
||||
+ CMP.b #$0A : BNE +
|
||||
LDA.l OverworldEventDataWRAM+$5E : AND.b #$20 : CMP.b #$20 : RTL
|
||||
+ CMP.b #$0C : BNE +
|
||||
LDA.l NpcFlagsVanilla : AND.b #$10 : CMP.b #$10 : RTL
|
||||
+
|
||||
.always_spawn
|
||||
CLC : RTL ; big bomb and locksmith have no completion condition in code
|
||||
.matched_following
|
||||
SEC : RTL
|
||||
|
||||
Follower_CheckMessageCollision:
|
||||
PHA
|
||||
LDA.w SpriteTimerE, X : BNE .skip_collision_check
|
||||
PLA
|
||||
JML Sprite_ShowMessageFromPlayerContact ; what we wrote over
|
||||
.skip_collision_check
|
||||
PLA
|
||||
CLC : RTL
|
||||
|
||||
Follower_CheckTileCollision:
|
||||
LDA.w SpriteTimerE, X : BNE .skip_collision_check
|
||||
JML Sprite_CheckTileCollisionLong ; what we wrote over
|
||||
.skip_collision_check
|
||||
RTL
|
||||
|
||||
Follower_CheckCollision:
|
||||
LDA.w SpriteTimerE, X : BNE .skip_collision_check
|
||||
JML Sprite_CheckDamageToPlayerSameLayerLong ; what we wrote over
|
||||
.skip_collision_check
|
||||
CLC : RTL
|
||||
|
||||
SpritePrep_ZeldaFollower:
|
||||
LDA.b RoomIndex : CMP.b #$12 : BEQ .no_follower_shuffle_sanc
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_follower_shuffle
|
||||
JSL DetermineFollowerSpawn : BCC + : RTL : +
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
PLA : PLA : PEA.w $EC4B-1 ; return to spawn
|
||||
RTL
|
||||
.no_follower_shuffle
|
||||
LDA.l FollowerIndicator : CMP.b #$01
|
||||
RTL
|
||||
.no_follower_shuffle_sanc
|
||||
LDA.l FollowerIndicator : CMP.b #$02
|
||||
RTL
|
||||
|
||||
Zelda_WaitingInCell:
|
||||
JSL Follower_CheckCollision ; what we wrote over, kinda
|
||||
BCC .return
|
||||
PHP
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE +
|
||||
INC.w SpriteActivity, X
|
||||
PLP
|
||||
PLA : PLA : PEA.w $ECF9-1 : RTL ; skip sprite movement
|
||||
+
|
||||
PLP
|
||||
.return
|
||||
RTL
|
||||
|
||||
Zelda_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCC +
|
||||
PEA.w $ED68-1 : RTL ; jump to avoid sprite despawn
|
||||
+
|
||||
PEA.w $ED60-1 ; jump to despawn
|
||||
RTL
|
||||
|
||||
.vanilla
|
||||
LDA.b #$02 : STA.l StartingEntrance ; what we wrote over
|
||||
RTL
|
||||
|
||||
SpritePrep_BlindMaiden:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
LDA.b #$01 : RTL
|
||||
+
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
INC.w SpriteAncillaInteract, X
|
||||
STZ.w FollowerNoDraw
|
||||
PLA : PLA : PEA.w $89C8-1 ; return to spawn
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l RoomDataWRAM[$AC].high : AND.b #$08 ; what we wrote over
|
||||
RTL
|
||||
|
||||
; Prevent followers from causing blind/maiden to despawn:
|
||||
; Door rando: let zelda despawn the maiden.
|
||||
BlindZeldaDespawnFix:
|
||||
LDA.l FollowerIndicator ; what we wrote over
|
||||
CMP.b #06 : BEQ +
|
||||
LDA.w SpritePosYLow,X : BEQ +
|
||||
LDA.b #$00 : RTL ; don't despawn follower if maiden isn't "present"
|
||||
+
|
||||
LDA.b #$01 : RTL
|
||||
|
||||
SpriteDraw_ZeldaMaiden:
|
||||
LDA.b RoomIndex : CMP.b #$12 : BEQ .vanilla
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$76 : BNE +
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #0000 : STA.b Scrap09
|
||||
LDA.l Follower_Zelda_vram
|
||||
BRA .transfer
|
||||
+
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #.palette_data_maiden : STA.b Scrap09
|
||||
LDA.l Follower_Maiden_vram
|
||||
.transfer
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.skip_draw
|
||||
RTL
|
||||
.vanilla:
|
||||
JML SpriteDraw_Maiden
|
||||
.oam_group:
|
||||
dw 1, -7 : db $20, $00, $00, $02
|
||||
dw 1, 3 : db $22, $00, $00, $02
|
||||
.palette_data_maiden
|
||||
; 01 04 06 07 08 09 0A 0C 0D
|
||||
db $02, $00, $00, $02, $00, $04, $02, $02, $04, $02, $00, $02, $02
|
||||
|
||||
BlindMaiden_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCS .return
|
||||
STZ.w SpriteAITable, X
|
||||
.return
|
||||
PEA.w $E8EA-1 ; jump ahead on return
|
||||
RTL
|
||||
.vanilla
|
||||
STZ.w SpriteAITable, X : LDA.b #$06 ; what we wrote over
|
||||
RTL
|
||||
|
||||
SpritePrep_OldManFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_follower_shuffle
|
||||
PLA : PLA
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
PEA.w $E928-1 ; return to despawn
|
||||
RTL
|
||||
+
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
PEA.w $E927-1 ; return to spawn
|
||||
RTL
|
||||
.no_follower_shuffle
|
||||
LDA.l FollowerIndicator : CMP.b #$04
|
||||
RTL
|
||||
|
||||
SpriteDraw_OldManFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.w SpriteJumpIndex, X : CMP.b #$01 : BEQ .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #0000 : STA.b Scrap09
|
||||
PLA : PEA.w $FF45-1 ; skip vanilla draw
|
||||
LDA.l Follower_OldMan_vram
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.vanilla
|
||||
LDA.b #$02 : STA.b Scrap06 ; what we wrote over
|
||||
RTL
|
||||
.oam_group
|
||||
dw 0, 0 : db $AC, $00, $00, $02
|
||||
dw 0, 8 : db $AE, $00, $00, $02
|
||||
|
||||
OldMan_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BCC .set_follower_and_despawn
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCC +
|
||||
PEA.w $E9DF-1 : RTL ; jump to avoid sprite despawn
|
||||
+
|
||||
PEA.w $E9DC-1 ; jump to despawn
|
||||
RTL
|
||||
.set_follower_and_despawn
|
||||
JSL SetAndLoadFollower
|
||||
PLA : PLA : PEA.w $E9D6-1
|
||||
|
||||
SpritePrep_SmithyFrog:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_follower_shuffle
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
LDA.b #$01 ; return to despawn
|
||||
RTL
|
||||
+
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
DEC ; return to spawn
|
||||
RTL
|
||||
.no_follower_shuffle
|
||||
LDA.l FollowerIndicator : BNE + ; what we wrote over
|
||||
LDA.l NpcFlagsVanilla : AND.b #$20 ; what we wrote over
|
||||
+ RTL
|
||||
|
||||
SpriteDraw_FrogFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #0000 : STA.b Scrap09
|
||||
PLA : PEA.w $DCD6-1
|
||||
LDA.l Follower_Frog_vram
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.vanilla
|
||||
LDA.b #$01 : STA.b Scrap06 ; what we wrote over
|
||||
RTL
|
||||
.oam_group:
|
||||
dw 1, -8 : db $FF, $00, $00, $02
|
||||
dw 1, 0 : db $C8, $00, $00, $02
|
||||
|
||||
Frog_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BCC .set_follower_and_despawn
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCC +
|
||||
PEA.w $B2C7-1 : RTL ; jump to avoid sprite despawn
|
||||
+
|
||||
PEA.w $B2C4-1 ; jump to despawn
|
||||
RTL
|
||||
.set_follower_and_despawn
|
||||
JSL SetAndLoadFollower
|
||||
PLA : PLA : PEA.w $B2C4-1 ; jump to despawn
|
||||
RTL
|
||||
|
||||
SpritePrep_PurpleChest:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
LDA.b #$00 ; return to despawn
|
||||
RTL
|
||||
+
|
||||
PLA : PLA : PEA.w $8A69-1 ; return to spawn
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l FollowerIndicator : CMP.b #$0C
|
||||
RTL
|
||||
|
||||
SpriteDraw_PurpleChest:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #0000 : STA.b Scrap09
|
||||
LDA.l Follower_PurpleChest_vram
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.vanilla
|
||||
JML Sprite_PrepAndDrawSingleLargeLong ; what we wrote over
|
||||
.oam_group:
|
||||
dw 0, -8 : db $C8, $00, $00, $02
|
||||
dw 0, 0 : db $EE, $00, $00, $02
|
||||
|
||||
PurpleChest_FollowCheck:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #$00
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l FollowerIndicator ; what we wrote over
|
||||
RTL
|
||||
|
||||
PurpleChest_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCS .return
|
||||
STZ.w SpriteAITable, X
|
||||
.return
|
||||
PEA.w $E10A-1 ; jump ahead on return
|
||||
RTL
|
||||
.vanilla
|
||||
STZ.w SpriteAITable, X : LDA.b #$0C ; what we wrote over
|
||||
RTL
|
||||
|
||||
SpritePrep_SuperBomb:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
LDA.b #$00 ; despawn on exit
|
||||
RTL
|
||||
+
|
||||
LDA.b #$05
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l CrystalsField ; what we wrote over
|
||||
RTL
|
||||
|
||||
SpriteDraw_SuperBomb:
|
||||
LDA.w SpriteJumpIndex, X : CMP.b #$02 : BNE .vanilla
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #.palette_data : STA.b Scrap09
|
||||
PLA : PEA.w $E2E2-1 ; skip vanilla draw
|
||||
LDA.l Follower_SuperBomb_vram
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.vanilla
|
||||
LDA.b #$01 : STA.b Scrap06 ; what we wrote over
|
||||
RTL
|
||||
.oam_group:
|
||||
dw 0, -8 : db $AE, $08, $00, $02
|
||||
dw 0, 0 : db $4E, $08, $00, $02
|
||||
.palette_data
|
||||
; 01 04 06 07 08 09 0A 0C 0D
|
||||
db $08, $00, $00, $08, $00, $06, $08, $08, $06, $08, $00, $08, $08
|
||||
|
||||
SuperBomb_FollowCheck:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.w SpriteTimerE, X : BNE .skip_follow
|
||||
LDA.w SpriteAux, X : BEQ .vanilla
|
||||
PLA : PLA : PEA.w $E1F1-1 ; jump to skip cost, no double charge
|
||||
RTL
|
||||
.skip_follow
|
||||
PLA : PLA : PEA.w $E20C-1 ; jump to exit
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.b #$64 : LDY.b #$00 ; what we wrote over
|
||||
RTL
|
||||
|
||||
SuperBomb_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCC +
|
||||
PEA.w $E20C-1 : RTL ; jump to exit
|
||||
+
|
||||
PEA.w $E201-1 ; jump to despawn
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.b #$0D : STA.l FollowerIndicator ; what we wrote over
|
||||
RTL
|
||||
|
||||
pushpc
|
||||
org $868A14
|
||||
NOP #3 ; fix bomb shop spawn for dwarfless big bomb
|
||||
LDA.b #$B5 : JSL Sprite_SpawnDynamically
|
||||
BMI SuperBomb_BecomeFollower_exit
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, Y ; force redraw for super bomb gfx
|
||||
pullpc
|
||||
|
||||
SpritePrep_Kiki:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
JSL DetermineFollowerSpawn : BCC +
|
||||
LDA.b #$20 : RTL ; despawn on exit
|
||||
+
|
||||
LDA.b #$00
|
||||
RTL
|
||||
.vanilla
|
||||
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X ; what we wrote over
|
||||
RTL
|
||||
|
||||
Kiki_OfferToFollow:
|
||||
PHA
|
||||
LDA.w SpriteTimerE, X : BNE .skip_collision_check
|
||||
PLA
|
||||
JML Sprite_ShowMessageUnconditional ; what we wrote over
|
||||
.skip_collision_check
|
||||
PLA
|
||||
CLC : RTL
|
||||
|
||||
Kiki_FollowCheck:
|
||||
JSL DetermineFollowerSpawn_include_stored : BCS .skip_follow
|
||||
LDA.w SpriteTimerE, X
|
||||
RTL
|
||||
.skip_follow
|
||||
LDA.b #$20
|
||||
RTL
|
||||
|
||||
Kiki_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_follower_shuffle
|
||||
PLA : PLA : PEA.w $E4C2-1 ; jump to exit
|
||||
STZ.w FollowerNoDraw
|
||||
JML StoreAndLoadFollower
|
||||
.no_follower_shuffle
|
||||
LDA.b #$00 : STA.l FollowerDropped ; defuse bomb
|
||||
LDA.b #$0A : STA.l FollowerIndicator
|
||||
RTL
|
||||
|
||||
Kiki_FixTeleportOnExit:
|
||||
REP #$30
|
||||
LDA.b LinkPosX : STA.w LinkPosXCache
|
||||
LDA.b LinkPosY : STA.w LinkPosYCache
|
||||
SEP #$30
|
||||
LDA.b #$19 : LDY.b #$01 ; what we wrote over
|
||||
RTL
|
||||
|
||||
; on return it checks BEQ and if non-zero, kiki get spook
|
||||
Kiki_DontScareTheMonke:
|
||||
LDA.b LinkJumping : BEQ .return
|
||||
CMP.b #$02 : BEQ .no_spook ; needed for quake usage
|
||||
LDA.w NoDamage : BNE .no_spook
|
||||
LDA.w LinkThud : BNE .no_spook
|
||||
.spook
|
||||
LDA.b #$01 : RTL
|
||||
.no_spook
|
||||
LDA.b #$00
|
||||
.return
|
||||
RTL
|
||||
|
||||
SpritePrep_Locksmith:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
JSL DetermineFollowerSpawn_locksmith_check : BCS +
|
||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||
+
|
||||
LDA.l FollowerIndicator
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.l FollowerIndicator : CMP.b #$09 ; what we wrote over
|
||||
BEQ +
|
||||
CLC : RTL
|
||||
+
|
||||
SEC : RTL
|
||||
|
||||
SpriteDraw_LocksmithFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
LDA.b #.oam_group>>16 : STA.b Scrap08
|
||||
REP #$20
|
||||
LDA.w #.oam_group : STA.b Scrap06
|
||||
LDA.w #.palette_data : STA.b Scrap09
|
||||
PLA : PEA.w $DCD6-1 ; skip draw on exit
|
||||
LDA.l Follower_Locksmith_vram
|
||||
JML TransferAndDrawFollowerGfx
|
||||
.vanilla
|
||||
LDA.b #$02 : STA.b Scrap06 ; what we wrote over
|
||||
RTL
|
||||
.oam_group:
|
||||
dw 0, -8 : db $EA, $00, $00, $02
|
||||
dw 0, 0 : db $EC, $00, $00, $02
|
||||
.palette_data
|
||||
; 01 04 06 07 08 09 0A 0C 0D
|
||||
db $00, $00, $00, $0E, $00, $00, $0E, $0E, $00, $0E, $00, $0E, $0E
|
||||
|
||||
Locksmith_Chillin_PostMessage:
|
||||
LDA.w SpriteAux, X : BEQ +
|
||||
; when a follower is stored, merely walk near them
|
||||
LDA.w SpritePosXLow, X : PHA
|
||||
JSL Follower_CheckCollision : BCC .return
|
||||
BRA .continue
|
||||
+
|
||||
LDA.w SpritePosXLow, X : PHA
|
||||
SEC : SBC.b #$10 : STA.w SpritePosXLow, X
|
||||
LDA.b #$01 : STA.w SpriteVelocityX, X
|
||||
JSL Sprite_Get16BitCoords_long
|
||||
JSL Follower_CheckTileCollision : BNE .return
|
||||
.continue
|
||||
INC.w SpriteActivity, X ; award follower
|
||||
LDA.l FollowerIndicator : CMP.b #$0C : BEQ .purple_chest_prize
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BEQ .return
|
||||
LDA.l FollowerIndicator : CMP.b #$00 : BEQ .return
|
||||
LDA.b #$05 : STA.w SpriteActivity, X ; forever do nothing
|
||||
BRA .return
|
||||
.purple_chest_prize
|
||||
INC.w SpriteActivity, X ; prep for purple chest prize
|
||||
.return
|
||||
PLA : STA.w SpritePosXLow, X
|
||||
JML $86BD08 ; jump back to immediately RTS
|
||||
|
||||
Locksmith_BecomeFollower:
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .vanilla
|
||||
STZ.w FollowerNoDraw
|
||||
PLA : PLA
|
||||
JSL StoreAndLoadFollower : BCS +
|
||||
LDA.l FollowerIndicator : CMP.b #$0C : BEQ +
|
||||
PEA.w $BD24-1 : RTL ; jump to despawn
|
||||
+
|
||||
PEA.w $BD27-1 ; jump to exit
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.b #$09 : STA.l FollowerIndicator
|
||||
RTL
|
||||
|
||||
Locksmith_RespondToAnswer_PostItem:
|
||||
STA.l FollowerIndicator ; what we wrote over
|
||||
LDA.l FollowerTravelAllowed : CMP.b #$02 : BNE .no_despawn
|
||||
LDA.w SpriteAux, X : CMP.b #$0C : BEQ .despawn
|
||||
CMP.b #$00 : BNE .no_despawn
|
||||
LDA.l Follower_Locksmith : CMP.b #$0C : BEQ .despawn
|
||||
JSL DetermineFollowerSpawn_include_stored : BCC .no_despawn
|
||||
.despawn
|
||||
STZ.w SpriteAITable, X
|
||||
.no_despawn
|
||||
RTL
|
||||
@@ -48,7 +48,7 @@ JML NMIHookReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
PostNMIHookAction:
|
||||
LDA.w NMIAux : BEQ +
|
||||
PHK : PEA.w .return-1 ; push stack for RTL return
|
||||
PHK : PEA .return-1 ; push stack for RTL return
|
||||
JMP.w [NMIAux]
|
||||
.return
|
||||
STZ.w NMIAux ; zero bank byte of NMI hook pointer
|
||||
|
||||
29
gloom.asm
29
gloom.asm
@@ -1,29 +0,0 @@
|
||||
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
|
||||
471
goalitem.asm
471
goalitem.asm
@@ -1,6 +1,6 @@
|
||||
GoalItemGanonCheck:
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
||||
LDA.b #$01 : JSL CheckConditionPass
|
||||
JSL CheckGanonVulnerability
|
||||
BCS .success
|
||||
|
||||
.fail
|
||||
@@ -11,193 +11,104 @@ RTL
|
||||
LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input A = Type of condition check
|
||||
; Carry clear = failed check
|
||||
; Carry set = successful check
|
||||
CheckConditionPass:
|
||||
PHX : PHY
|
||||
PHB
|
||||
LDY.b #GoalConditionTable>>16 : PHY : PLB : STY.b Scrap02
|
||||
REP #$20
|
||||
ASL : TAY
|
||||
LDA.w GoalConditionTable, Y : STA.b Scrap00
|
||||
PHK : PLB
|
||||
SEP #$20
|
||||
LDY.b #$00
|
||||
- LDA.b [Scrap00], Y : CMP.b #$FF : BEQ .exit
|
||||
INY : ROL : TAX
|
||||
JSR (.conditions, X) : BCC .exit : BRA -
|
||||
|
||||
.exit
|
||||
PLB : PLY : PLX
|
||||
RTL
|
||||
|
||||
; Y = index after condition code
|
||||
; Carry = Set if using default target value
|
||||
.conditions
|
||||
dw .always_fail
|
||||
dw .pendants
|
||||
dw .crystals
|
||||
dw .pendant_bosses
|
||||
dw .crystal_bosses
|
||||
dw .bosses
|
||||
dw .agahnim_defeated
|
||||
dw .agahnim2_defeated
|
||||
dw .goal_item
|
||||
dw .collection_rate
|
||||
dw .custom_goal
|
||||
dw .bingo
|
||||
dw .success
|
||||
dw .success
|
||||
dw .success
|
||||
dw .success
|
||||
|
||||
.agahnim2_defeated
|
||||
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail
|
||||
.bingo ; not implemented yet
|
||||
.success
|
||||
SEC : RTS
|
||||
.always_fail
|
||||
.fail
|
||||
CLC : RTS
|
||||
.pendants
|
||||
PHP
|
||||
LDA.l PendantCounter : PLP : BCC +
|
||||
CMP.b #$03 : RTS
|
||||
.crystals
|
||||
PHP
|
||||
LDA.l CrystalCounter : PLP : BCC +
|
||||
CMP.b #$07 : RTS
|
||||
.pendant_bosses
|
||||
PHP
|
||||
LDA.b #$02
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$03 : RTS
|
||||
.crystal_bosses
|
||||
PHP
|
||||
LDA.b #$01
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$07 : RTS
|
||||
.bosses
|
||||
PHP
|
||||
LDA.b #$00
|
||||
JSR CheckForBossesDefeated : PLP : BCC +
|
||||
CMP.b #$10 : RTS
|
||||
+ CMP.b [Scrap00], Y : INY : RTS
|
||||
.agahnim_defeated
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : RTS
|
||||
.goal_item
|
||||
REP #$20
|
||||
LDA.l GoalCounter : BCC +
|
||||
CMP.l GoalItemRequirement : BRA ++
|
||||
.collection_rate
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : BCC +
|
||||
CMP.l TotalItemCount : BRA ++
|
||||
+ CMP.b [Scrap00], Y : INY : INY : ++
|
||||
SEP #$20
|
||||
RTS
|
||||
.custom_goal
|
||||
LDA.b [Scrap00], Y : INY ; options
|
||||
PHA : AND.b #$07 : ASL : TAX : PLA
|
||||
;JMP CheckConditionPassCustom
|
||||
; flows into next function, do not insert code after without uncommenting above
|
||||
|
||||
; --------------------------------------------------------------------------------
|
||||
; Input A = Options value, see GoalConditionTable for format
|
||||
; Input X = Condition check type index
|
||||
; Input Y = Index after Options byte
|
||||
CheckConditionPassCustom:
|
||||
PHX : PHA : BIT.b #$08 : PHP
|
||||
REP #$30
|
||||
LDA.b [Scrap00], Y : INY : INY ; address
|
||||
PLP : REP #$30 : BEQ .byte
|
||||
.word
|
||||
;Carry clear = ganon invincible
|
||||
;Carry set = ganon vulnerable
|
||||
CheckGanonVulnerability:
|
||||
PHX
|
||||
LDA.l GanonVulnerableMode
|
||||
ASL
|
||||
TAX
|
||||
SEP #$20
|
||||
PLA
|
||||
AND.b #$10
|
||||
REP #$20
|
||||
BNE +
|
||||
LDA.l $7E0000, X : BRA ++
|
||||
+
|
||||
LDA.l $7F0000, X : ++
|
||||
SEP #$10
|
||||
PLX
|
||||
REP #$10
|
||||
JSR (.comparisons, X)
|
||||
INY
|
||||
SEP #$30
|
||||
RTS
|
||||
.byte
|
||||
TAX
|
||||
SEP #$20
|
||||
PLA
|
||||
AND.b #$10 : BNE +
|
||||
LDA.l $7E0000, X : BRA ++
|
||||
+
|
||||
LDA.l $7F0000, X : ++
|
||||
SEP #$10
|
||||
PLX
|
||||
JMP (.comparisons, X)
|
||||
|
||||
.comparisons
|
||||
dw .minimum
|
||||
dw .exact
|
||||
dw .bitfield_nonzero
|
||||
dw .bitfield_match
|
||||
dw .count_bits
|
||||
dw .fail
|
||||
dw .fail
|
||||
dw .fail
|
||||
; Carry
|
||||
; 0 - invulnerable
|
||||
; 1 - vulnerable
|
||||
JSR (.goals, X)
|
||||
|
||||
.pass
|
||||
INY : SEC : RTS
|
||||
.count_bits
|
||||
JSL CountBits
|
||||
.minimum
|
||||
CMP.b [Scrap00], Y : INY
|
||||
RTS
|
||||
.bitfield_match
|
||||
AND.b [Scrap00], Y
|
||||
.exact
|
||||
CMP.b [Scrap00], Y : BEQ .pass
|
||||
INY : CLC : RTS
|
||||
.bitfield_nonzero
|
||||
AND.b [Scrap00], Y : BNE .pass
|
||||
.fail
|
||||
INY : CLC : RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
GTCutscene_TransferGfx:
|
||||
PHA
|
||||
REP #$20
|
||||
STZ.w DuckPose
|
||||
LDA.l GanonsTowerOpenGfx : BEQ .original_crystal
|
||||
PHX
|
||||
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
||||
LDA.w #$81C0>>1 : STA.l ItemTargetStack,X
|
||||
INX #2 : STX.w ItemStackPtr
|
||||
PLX
|
||||
SEP #$20
|
||||
PLA
|
||||
RTL
|
||||
.original_crystal
|
||||
SEP #$20
|
||||
PLA
|
||||
JML TransferItemReceiptToBuffer_using_GraphicsID
|
||||
;--------------------------------------------------------------------------------
|
||||
AncillaDraw_GTCutsceneCrystal_OAMPrep:
|
||||
LDA.l GanonsTowerOpenGfx : ORA.l GanonsTowerOpenGfx+1 : BEQ .vanilla
|
||||
LDA.b #$0E : STA.b (OAMPtr),Y
|
||||
INY
|
||||
LDA.l GanonsTowerOpenPalette : AND.b #$67 : ASL : ORA.b #$30
|
||||
STA.b (OAMPtr),Y
|
||||
PLX
|
||||
RTL
|
||||
.vanilla
|
||||
LDA.b #$24 : STA.b (OAMPtr),Y
|
||||
INY
|
||||
LDA.b #$3C : STA.b (OAMPtr),Y
|
||||
RTL
|
||||
|
||||
|
||||
.goals
|
||||
dw .vulnerable
|
||||
dw .invulnerable
|
||||
dw .all_dungeons
|
||||
dw .crystals_and_aga
|
||||
dw .crystals
|
||||
dw .goal_item
|
||||
dw .light_speed
|
||||
dw .crystals_and_bosses
|
||||
dw .bosses_only
|
||||
dw .all_dungeons_no_agahnim
|
||||
dw .all_items
|
||||
dw .completionist
|
||||
|
||||
; 00 = always vulnerable
|
||||
.vulnerable
|
||||
.success
|
||||
SEC
|
||||
RTS
|
||||
|
||||
; 01 = always invulnerable
|
||||
.invulnerable
|
||||
.fail
|
||||
CLC
|
||||
RTS
|
||||
|
||||
; 02 = All dungeons
|
||||
.all_dungeons
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : BCC .fail ; require post-aga world state
|
||||
|
||||
; 09 = All dungeons except agahnim
|
||||
.all_dungeons_no_agahnim
|
||||
LDA.l PendantsField : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants
|
||||
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals
|
||||
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail ; require aga2 defeated (pyramid hole open)
|
||||
BRA .success
|
||||
|
||||
; 03 = crystals and aga 2
|
||||
.crystals_and_aga
|
||||
LDA.l RoomDataWRAM[$0D].high : AND.b #$08 : BEQ .fail ; check aga2 first then bleed in
|
||||
|
||||
; 04 = crystals only
|
||||
.crystals
|
||||
JSL CheckEnoughCrystalsForGanon
|
||||
RTS
|
||||
|
||||
; 05 = require goal item
|
||||
.goal_item
|
||||
REP #$20
|
||||
LDA.l GoalCounter : CMP.l GoalItemRequirement
|
||||
SEP #$20
|
||||
RTS
|
||||
|
||||
; 06 = light speed
|
||||
.light_speed
|
||||
BRA .fail
|
||||
|
||||
; 07 = Crystals and bosses
|
||||
.crystals_and_bosses
|
||||
JSL CheckEnoughCrystalsForGanon ; check crystals first then bleed in to next
|
||||
BCC .fail
|
||||
|
||||
; 08 = Crystal bosses but no crystals
|
||||
.bosses_only
|
||||
JMP CheckForCrystalBossesDefeated
|
||||
|
||||
; 09 = 100% item collection rate
|
||||
.all_items
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
||||
SEP #$20
|
||||
RTS
|
||||
|
||||
; 0A = 100% item collection rate and all dungeons
|
||||
.completionist
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
||||
SEP #$20
|
||||
BCC .fail
|
||||
BRA .all_dungeons
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
GTCutscene_CrystalMasks:
|
||||
db %00000000 ; 0 crystals
|
||||
@@ -260,94 +171,48 @@ GTCutscene_ActivateSparkle_SelectCrystal:
|
||||
PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; prioritizes: number of gfx used > sum of targets > number of goals
|
||||
; Scrap00 stores number of goals
|
||||
; Y sums all goal target values
|
||||
GTCutscene_NumberOfCrystals:
|
||||
PHX : PHY : PHP
|
||||
REP #$20
|
||||
LDA.l GanonsTowerOpenGfx+2 : BEQ .not_multiple_gfx
|
||||
LDX.b #$04
|
||||
- LDA.l GanonsTowerOpenGfx, X : BEQ +
|
||||
INX : INX : CPX.b #$0E : BCC -
|
||||
+
|
||||
TXA : LSR
|
||||
JMP .done
|
||||
.not_multiple_gfx
|
||||
LDX.b #$00 : LDA.l GoalConditionTable, X
|
||||
TXY : STY.b Scrap00
|
||||
REP #$10
|
||||
LDA.l GanonsTowerOpenAddress : CMP.w #CrystalCounter : BEQ +
|
||||
LDA.w #$0001 : BRA .done
|
||||
+ LDA.l GanonsTowerOpenTarget
|
||||
.done
|
||||
SEP #$20
|
||||
TAX
|
||||
.next
|
||||
LDA.l $B00000, X : CMP.b #$FF : BNE + : JMP .use_y : +
|
||||
INC.b Scrap00
|
||||
ROL : PHP : CMP.b #$10 : BCS .not_8bit_compare
|
||||
CMP.b #$0C : BEQ .agas_goal
|
||||
CMP.b #$0E : BEQ .agas_goal
|
||||
; uses 8-bit targets
|
||||
PLP : BCC .use_8bit_target
|
||||
CMP.b #$04 : BEQ .crystal_goal ; crystal goal
|
||||
CMP.b #$08 : BEQ .crystal_goal ; crystal bosses goal
|
||||
CMP.b #$02 : BEQ .pendant_goal ; pendant goal
|
||||
CMP.b #$06 : BEQ .pendant_goal ; pendant bosses goal
|
||||
BRA .bosses_goal
|
||||
.crystal_goal
|
||||
LDA.b #$07 : INX : BRA .add_to_y
|
||||
.pendant_goal
|
||||
LDA.b #$03 : INX : BRA .add_to_y
|
||||
.bosses_goal
|
||||
INY : INX : BRA .next ; just increment Y by 1 since default of 10 is already more than max 7
|
||||
.agas_goal
|
||||
PLP : INX : BRA .next
|
||||
.use_8bit_target
|
||||
INX : LDA.l $B00000, X : INX
|
||||
.add_to_y
|
||||
PHY : CLC : ADC.b 1,S : PLY : TAY : BRA .next
|
||||
.not_8bit_compare
|
||||
CMP.b #$14 : BEQ .custom_goal : BCS .unknown
|
||||
; triforce hunt/collection rate - uses 16-bit targets
|
||||
PLP : INX : BCC +
|
||||
LDA.l $B00000, X : INX : INX : BRA .add_to_y
|
||||
+ INY : BRA .next
|
||||
.custom_goal
|
||||
PLP
|
||||
INX : LDA.l $B00000, X : BIT.b #$08 : PHP
|
||||
INX : INX : INX : AND.b #$03 : BEQ .use_custom_target
|
||||
; comparison method doesn't use a quantity, increment Y by 1
|
||||
INY : INX : PLP : BEQ +
|
||||
INX
|
||||
+
|
||||
BRA .next
|
||||
.use_custom_target
|
||||
PLP : BEQ ..8bit
|
||||
; 16-bit target
|
||||
REP #$20
|
||||
LDA.l $B00000, X : CMP.w #$0008 : SEP #$20 : INX : BRA +
|
||||
..8bit
|
||||
LDA.l $B00000, X : CMP.b #$08 : + : BCC +
|
||||
; target exceeds 7, just increment Y by 1
|
||||
INY : INX : JMP .next
|
||||
+
|
||||
INX : BRA .add_to_y
|
||||
.unknown ; unknown condition, exit with safe value
|
||||
PLP : INY
|
||||
.use_y
|
||||
TYA : BEQ + : CMP.b #$08 : BCC .done
|
||||
+ LDA.b Scrap00 : BEQ .use_one : CMP.b #$08 : BCC .done
|
||||
.use_one
|
||||
LDA.b #$01
|
||||
.done
|
||||
PLP : PLY : PLX
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckEnoughCrystalsForGanon:
|
||||
REP #$20
|
||||
LDA.l CrystalCounter
|
||||
CMP.l GanonVulnerableTarget
|
||||
SEP #$20
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckTowerOpen:
|
||||
LDA.b #$00 : JML CheckConditionPass
|
||||
LDA.l GanonsTowerOpenMode : ASL : TAX
|
||||
JSR (.tower_open_modes,X)
|
||||
RTL
|
||||
.tower_open_modes
|
||||
dw .vanilla
|
||||
dw .arbitrary_cmp
|
||||
|
||||
.vanilla
|
||||
LDA.l CrystalsField
|
||||
AND.b #$7F : CMP.b #$7F
|
||||
RTS
|
||||
|
||||
.arbitrary_cmp
|
||||
REP #$30
|
||||
LDA.l GanonsTowerOpenAddress : TAX
|
||||
LDA.l $7E0000,X
|
||||
CMP.l GanonsTowerOpenTarget
|
||||
SEP #$30
|
||||
RTS
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckAgaForPed:
|
||||
REP #$20
|
||||
; seems light_speed option to force blue balls is unused for now
|
||||
BRA .vanilla
|
||||
LDA.l GanonVulnerableMode
|
||||
CMP.w #$0006 : BNE .vanilla
|
||||
|
||||
.light_speed
|
||||
SEP #$20
|
||||
@@ -368,61 +233,73 @@ CheckAgaForPed:
|
||||
RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckForBossesDefeated:
|
||||
CheckForCrystalBossesDefeated:
|
||||
PHB : PHX : PHY
|
||||
|
||||
STA.b Scrap04 ; 0 = check all, 1 = check crystals, 2 = check pendants
|
||||
|
||||
LDA.b #CrystalPendantFlags_3>>16
|
||||
LDA.b #CrystalPendantFlags_2>>16
|
||||
PHA : PLB
|
||||
|
||||
STZ.b Scrap03 ; count of number of bosses killed
|
||||
STZ.b Scrap05
|
||||
|
||||
REP #$30
|
||||
|
||||
; count of number of bosses killed
|
||||
STZ.b Scrap00
|
||||
|
||||
LDY.w #10
|
||||
|
||||
.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
|
||||
LDA.w CrystalPendantFlags_2+2,Y
|
||||
BIT.w #$0040
|
||||
BEQ ++
|
||||
|
||||
.proceed
|
||||
TYA : ASL : TAX
|
||||
TYA
|
||||
ASL
|
||||
TAX
|
||||
|
||||
LDA.l DungeonMapBossRooms+4,X
|
||||
ASL : TAX
|
||||
LDA.l DrawHUDDungeonItems_boss_room_ids-4,X
|
||||
TAX
|
||||
LDA.l RoomDataWRAM.l,X
|
||||
|
||||
AND.w #$0800 : BEQ .skip
|
||||
INC.b Scrap03
|
||||
AND.w #$0800
|
||||
BEQ ++
|
||||
|
||||
.skip
|
||||
DEY : BPL .next_check
|
||||
INC.b Scrap00
|
||||
|
||||
++ DEY
|
||||
BPL .next_check
|
||||
|
||||
SEP #$30
|
||||
PLY : PLX : PLB
|
||||
|
||||
LDA.b Scrap03
|
||||
LDA.b Scrap00 : CMP.l GanonVulnerableTarget
|
||||
|
||||
|
||||
RTS
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckPedestalPull:
|
||||
; Out: c - Successful ped pull if set, do nothing if unset.
|
||||
LDA.b #$02 : JSL CheckConditionPass : BCS .return
|
||||
PHX : PHP
|
||||
LDA.b GameMode : CMP.b #$0E : BEQ +
|
||||
REP #$30
|
||||
LDX.w #$0004 : LDA.l GoalConditionTable, X : TAX
|
||||
LDA.l $B00000, X : CMP.w #$FF81 : BEQ +
|
||||
SEP #$30
|
||||
LDA.b #$97 : LDY.b #$01
|
||||
JSL Sprite_ShowMessageUnconditional
|
||||
+
|
||||
PLP : PLX
|
||||
.return
|
||||
PHX
|
||||
LDA.l PedCheckMode : ASL : TAX
|
||||
JSR (.pedestal_modes,X)
|
||||
PLX
|
||||
RTL
|
||||
|
||||
.pedestal_modes
|
||||
dw .vanilla
|
||||
dw .arbitrary_cmp
|
||||
|
||||
.vanilla
|
||||
LDA.l PendantsField
|
||||
AND.b #$07 : CMP.b #$07 : BNE ..nopull
|
||||
SEC
|
||||
RTS
|
||||
..nopull
|
||||
CLC
|
||||
RTS
|
||||
|
||||
.arbitrary_cmp
|
||||
REP #$30
|
||||
LDA.l PedPullAddress : TAX
|
||||
LDA.l $7E0000,X
|
||||
CMP.l PedPullTarget
|
||||
SEP #$30
|
||||
RTS
|
||||
|
||||
@@ -4,10 +4,19 @@
|
||||
HeartPieceGet:
|
||||
PHX : PHY
|
||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||
LDY.w SprSourceItemId, X
|
||||
LDY.w SprItemReceipt, X : BNE +
|
||||
LDA.w SprSourceItemId, X : BNE ++
|
||||
JSL LoadHeartPieceRoomValue
|
||||
STA.w SprSourceItemId, X
|
||||
++
|
||||
JSL AttemptItemSubstitution
|
||||
JSL ResolveLootIDLong
|
||||
STA.w SprItemReceipt, X
|
||||
TAY
|
||||
+
|
||||
JSL MaybeMarkDigSpotCollected
|
||||
.skipLoad
|
||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||
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
|
||||
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter
|
||||
@@ -23,7 +32,16 @@ RTL
|
||||
HeartContainerGet:
|
||||
PHX : PHY
|
||||
JSL IncrementBossSword
|
||||
LDY.w SprSourceItemId, X
|
||||
LDY.w SprItemReceipt, X : BNE +
|
||||
LDA.w SprSourceItemId, X : BNE ++
|
||||
JSL LoadHeartContainerRoomValue
|
||||
STA.w SprSourceItemId, X
|
||||
++
|
||||
JSL AttemptItemSubstitution
|
||||
JSL ResolveLootIDLong
|
||||
STA.w SprItemReceipt, X
|
||||
TAY
|
||||
+
|
||||
BRA HeartPieceGet_skipLoad
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawHeartPieceGFX:
|
||||
@@ -242,12 +260,6 @@ LoadOutdoorValue:
|
||||
PHP
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b OverworldIndex
|
||||
; Rain state fix: In rain state DW, use LW screen ID for item lookup
|
||||
BIT.w #$0040 : BEQ +
|
||||
LDA.l ProgressIndicator : AND.w #$00FF : CMP.w #$0002
|
||||
LDA.b OverworldIndex : BCS ++ : AND.w #$00BF
|
||||
++
|
||||
+
|
||||
CMP.w #$00 : BNE +
|
||||
LDA.l OWBonkPrizeTable[$00].loot
|
||||
JMP .done
|
||||
|
||||
175
hooks.asm
175
hooks.asm
@@ -407,16 +407,6 @@ STA.l StalfosBombDamage
|
||||
org $8AB76E ; <- 5376E - Bank0A.asm : 30 (JSL OverworldMap_InitGfx)
|
||||
JSL OnLoadDuckMap
|
||||
|
||||
;================================================================================
|
||||
; Fix Clobbered Gfx
|
||||
;--------------------------------------------------------------------------------
|
||||
org $80DB92
|
||||
JSL PostFixMirrorGfxPrep
|
||||
org $80D911
|
||||
JML PostFixMirrorGfx
|
||||
org $80E259
|
||||
JSL PostFixOAMGfx : NOP
|
||||
|
||||
;================================================================================
|
||||
; Infinite Bombs / Arrows / Magic
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -540,8 +530,6 @@ JML GTCutscene_ConditionalAnimateCrystals
|
||||
org $88CE93
|
||||
GTCutscene_DrawSingleCrystal:
|
||||
JML GTCutscene_ConditionalDrawSingleCrystal
|
||||
org $88CED1
|
||||
JSL AncillaDraw_GTCutsceneCrystal_OAMPrep : BRA + : NOP #3 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $88CF19 ; <- 44F19 - ancilla_break_tower_seal.asm : 336 (TXA : AND.b #$07 : TAX)
|
||||
JSL GTCutscene_ActivateSparkle_SelectCrystal
|
||||
@@ -567,6 +555,12 @@ JSL AgahnimAsksAboutPed
|
||||
org $9ED6E8
|
||||
JSL CheckAgaForPed : NOP
|
||||
|
||||
;================================================================================
|
||||
; Zelda Sprite Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $85EBCF ; <- 2EBCF - sprite_zelda.asm : 23 (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword)
|
||||
JSL SpawnZelda : NOP #2
|
||||
|
||||
;================================================================================
|
||||
; Alternate Goal
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -694,6 +688,12 @@ db $06, $1F, $40, $12, $01, $3F, $14, $01, $3F, $13, $1F, $42, $1A, $1F, $4B, $1
|
||||
org $85DFB1 ; <- 2DFB1 - Bank05.asm : 2499
|
||||
JSL SkipDrawEOR
|
||||
|
||||
;================================================================================
|
||||
; Kiki Big Bomb Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9EE4AF ; <- f64af sprite_kiki.asm : 285 (LDA.b #$0A : STA $7EF3CC)
|
||||
JSL AssignKiki : NOP #2
|
||||
|
||||
;================================================================================
|
||||
; Wallmaster camera fix
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -840,10 +840,15 @@ 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 - moved to pyramid fairy
|
||||
; unused item receipts
|
||||
org $81E97E
|
||||
dw $0116 : db $5E
|
||||
dw $0116 : db $64
|
||||
dw $0116 : db $08
|
||||
dw $0116 : db $25
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9EE16E ; <- F616E - sprite_bomb_shop_entity.asm : 73
|
||||
NOP #8 ; fix bomb shop dialog for dwarfless big bomb
|
||||
org $868A14 ; <- 30A14 - sprite_prep.asm : 716
|
||||
NOP #8 ; fix bomb shop spawn for dwarfless big bomb
|
||||
;--------------------------------------------------------------------------------
|
||||
org $86B489 ; <- 33489 - sprite_smithy_bros.asm : 473 (LDA $7EF359 : CMP.b #$03 : BCS .tempered_sword_or_better)
|
||||
JML GetSmithSword : NOP #4
|
||||
@@ -1814,9 +1819,7 @@ Sprite_ShowMessageUnconditional_Rest:
|
||||
;--------------------------------------------------------------------------------
|
||||
;-- Music restarting at zelda fix
|
||||
org $85ED10 ; <- 2ED10 - sprite_zelda.asm : 233 - (LDA.b #$19 : STA $012C)
|
||||
BRA + : NOP #3 : +
|
||||
org $85ED63
|
||||
BRA + : NOP #3 : +
|
||||
NOP #5
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9ECE47 ; <- F4E47 - sprite_crystal_maiden.asm : 220
|
||||
JML MaidenCrystalScript
|
||||
@@ -1878,14 +1881,11 @@ JSL CalculateSignIndex
|
||||
; Dark World Spawn Location Fix & Follower Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $80894A ; <- 94A
|
||||
PHB : JSL OnSave
|
||||
PHB : JSL DarkWorldSaveFix
|
||||
;--------------------------------------------------------------------------------
|
||||
org $828046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile)
|
||||
JSL OnFileLoad
|
||||
;--------------------------------------------------------------------------------
|
||||
org $89F5DF
|
||||
JSL OnDeathNoSave
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8280A2
|
||||
JSL GetCurrentWorldForLoad
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -2241,6 +2241,8 @@ org $82A9B0 ; (BCS $A9B7)
|
||||
NOP #2
|
||||
org $82C1C8 ; (BCS $C1CC)
|
||||
NOP #2
|
||||
org $82ADA0 ; (LDA.b #$F1 : STA $012C)
|
||||
JSL Overworld_MosaicDarkWorldChecks : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $85CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18)
|
||||
JSL PsychoSolder_MusicCheck : NOP #1
|
||||
@@ -2266,9 +2268,8 @@ JSL Overworld_DetermineMusic
|
||||
BRA + : NOP #42 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $82B0C4
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BCS +
|
||||
JSL Overworld_DetermineAndSetMusic
|
||||
BRA + : NOP #10 : +
|
||||
BRA + : NOP #16 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $82B1C1
|
||||
JSL Overworld_DetermineAmbientSFX
|
||||
@@ -2286,18 +2287,8 @@ BRA + : NOP #12 : +
|
||||
org $88C442
|
||||
JSL Overworld_DetermineAndSetMusic : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9BD1CD
|
||||
JSL Overworld_DetermineAndSetMusic : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9DFD27
|
||||
JSL Overworld_DetermineAndSetMusic : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $829253
|
||||
JSL FixHalfVolumeOnSpawnExitToOverworld : NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8292D9
|
||||
BRA + : NOP #4 : +
|
||||
JSL FixPreAgaMusicFadeOut : db $B0 ; BCS
|
||||
;================================================================================
|
||||
|
||||
;================================================================================
|
||||
@@ -2356,6 +2347,24 @@ org $82A451 ; <- 12451 - Bank02.asm:6283 (LDA $F6 : AND.b #$40 : BEQ .xButtonNot
|
||||
JSL QuickSwap
|
||||
;================================================================================
|
||||
|
||||
;================================================================================
|
||||
; Tagalong Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8689AB ; <- 309AB - sprite_prep.asm: 647 (LDA $7EF3CC : CMP.b #$06 : BEQ .killSprite)
|
||||
; Note: In JP 1.0 we have: (CMP.b #$00 : BNE .killSprite) appling US bugfix
|
||||
; Prevent followers from causing blind/maiden to despawn:
|
||||
; Door rando: let zelda despawn the maiden.
|
||||
JSL BlindZeldaDespawnFix
|
||||
|
||||
org $8689AF
|
||||
SpritePrep_BlindMaiden_despawn_follower: ; this is the normal execution path
|
||||
|
||||
org $8689C9
|
||||
SpritePrep_BlindMaiden_kill_the_girl: ; not the follower
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix old man purple chest issues using the same method as above
|
||||
org $9EE906 ; <- F6906 - sprite_old_mountain_man.asm : 31 (LDA $7EF3CC : CMP.b #$00 : BNE .already_have_tagalong)
|
||||
CMP.b #$04 : db $F0 ; BEQ
|
||||
;--------------------------------------------------------------------------------
|
||||
;Control which doors frog/smith can enter
|
||||
org $9BBCF0 ; <- DBCF0 - Bank1B.asm: 248 (LDA $04B8 : BNE BRANCH_MU)
|
||||
@@ -2667,7 +2676,7 @@ org $898AEE : JSL TransferItemReceiptToBuffer_using_GraphicsID
|
||||
org $898C85 : JSL TransferItemReceiptToBuffer_using_GraphicsID
|
||||
|
||||
; gt cutscene
|
||||
org $899BBE : JSL GTCutscene_TransferGfx
|
||||
org $899BBE : JSL TransferItemReceiptToBuffer_using_GraphicsID
|
||||
|
||||
;===================================================================================================
|
||||
; gratuitous NOPs removed for speed
|
||||
@@ -2729,92 +2738,40 @@ NOP #2 ; this fixes Link's direction after mirroring and falling after entering
|
||||
;--------------------------------------------------------------------------------
|
||||
; Enable new room header table
|
||||
;--------------------------------------------------------------------------------
|
||||
if not(!FEATURE_FIX_BASEROM)
|
||||
org $81B5E6
|
||||
LDA.b #$30
|
||||
endif
|
||||
org $81B5E6
|
||||
LDA.b #$30
|
||||
|
||||
;================================================================================
|
||||
;===================================================================================================
|
||||
;--------------------------------------------------------------------------------
|
||||
; Mimic dash changes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9EC7BE
|
||||
JSL MimicDirection
|
||||
|
||||
;================================================================================
|
||||
;===================================================================================================
|
||||
;--------------------------------------------------------------------------------
|
||||
; Gloom VRAM overwrite
|
||||
; Boss souls changes
|
||||
;--------------------------------------------------------------------------------
|
||||
org $828068
|
||||
JSL AdjustDefaultGraphics
|
||||
org $8DB866
|
||||
JSL CheckBossSoul : BRA + : NOP #2 : +
|
||||
|
||||
;================================================================================
|
||||
; 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
|
||||
;--------------------------------------------------------------------------------
|
||||
org $86ED9E
|
||||
JSL CheckInvincibleFlag : NOP
|
||||
|
||||
;================================================================================
|
||||
;--------------------------------------------------------------------------------
|
||||
; Variable Ganon Vulnerability
|
||||
;--------------------------------------------------------------------------------
|
||||
org $88BBD4 ; ancilla_magic_powder.asm@253 (LDA #$0A : JSL Ancilla_CheckSpriteDamage.preset_class)
|
||||
JSL Ganon_CheckPowderVulnerability
|
||||
NOP #2
|
||||
org $85DFFE
|
||||
JSL SoulPaletteSet : BRA + : NOP #5 : +
|
||||
|
||||
org $1D8F4E ; sprite_ganon.asm@325 (LDA $04C5 : CMP #$02)
|
||||
JSL Ganon_CheckInvincible
|
||||
NOP
|
||||
org $85DFB7
|
||||
JSL SoulPaletteApply : NOP #2
|
||||
|
||||
org $0DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02)
|
||||
JSL CheckBeeBoss
|
||||
NOP
|
||||
org $9E8086
|
||||
JSL HelmasaurPaletteFix : BRA + : NOP #2 : +
|
||||
|
||||
org $0DD677 ; Bank0D.asm@1303 (JSL Ancilla_CheckSpriteDamage.preset_class)
|
||||
JSL Ganon_CheckBeeVulnerability
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9E838C
|
||||
JSL HelmasaurHammerFix : NOP
|
||||
|
||||
;================================================================================
|
||||
; 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
|
||||
;--------------------------------------------------------------------------------
|
||||
org $9DD884
|
||||
JSL MoldormPaletteFix_b : NOP
|
||||
|
||||
org $9DDB2E
|
||||
JSL MoldormPaletteFix_d : NOP
|
||||
|
||||
@@ -114,10 +114,7 @@ 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 34 ;
|
||||
InitFluteBitfield: db $FF ;
|
||||
InitSpecialWeaponLevel: db $00 ;
|
||||
InitItemOnB: db $00 ;
|
||||
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
|
||||
InitMapIcons: skip 1 ; PC 0x1833C7
|
||||
@@ -126,8 +123,8 @@ InitNpcFlagsVanilla: skip 1 ; PC 0x1833C9
|
||||
InitCurrentWorld: skip 1 ; PC 0x1833CA
|
||||
skip 1 ; PC 0x1833CB
|
||||
InitFollowerIndicator: skip 1 ; PC 0x1833CC
|
||||
InitFollowerYCoord: skip 2 ; PC 0x1833CD
|
||||
InitFollowerXCoord: skip 2 ; PC 0x1833CF
|
||||
InitFollowerXCoord: skip 2 ; PC 0x1833CD
|
||||
InitFollowerYCoord: skip 2 ; PC 0x1833CF
|
||||
InitDroppedFollowerIndoors: skip 1 ; PC 0x1833D1
|
||||
InitDroppedFollowerLayer: skip 1 ; PC 0x1833D2
|
||||
InitFollowerDropped: skip 1 ; PC 0x1833D3
|
||||
|
||||
@@ -646,7 +646,7 @@ RTL
|
||||
; CollectPowder:
|
||||
;--------------------------------------------------------------------------------
|
||||
CollectPowder:
|
||||
LDY.w SprSourceItemId, X ; Retrieve stored item type
|
||||
LDY.w SprItemReceipt, X ; Retrieve stored item type
|
||||
BNE +
|
||||
; if for any reason the item value is 0 reload it, just in case
|
||||
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
|
||||
@@ -810,9 +810,12 @@ LDA.w AncillaGet, X : CMP.b #$4A : BNE +
|
||||
; collecting pre-activated flute
|
||||
LDA.b #$13 : JML Ancilla_SFX2_Near
|
||||
+ ; not pre-activated flute
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BEQ .normal
|
||||
LDA.l MultiworldJunkItemTimer : BEQ .normal
|
||||
LDA.w AncillaGet, X
|
||||
JSL.l ItemIsJunk : BEQ .normal
|
||||
|
||||
.junk
|
||||
.multijunk
|
||||
LDA.b #$3B : JML Ancilla_SFX3_Near ; what we wrote over
|
||||
|
||||
.normal
|
||||
@@ -824,9 +827,12 @@ CPY.b #$4A : BNE +
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
|
||||
RTL
|
||||
+ ; normal itemget sfx
|
||||
LDA.l !MULTIWORLD_RECEIVING_ITEM : BEQ .normal
|
||||
LDA.l MultiworldJunkItemTimer : BEQ .normal
|
||||
TYA
|
||||
JSL.l ItemIsJunk : BEQ .normal
|
||||
|
||||
.junk
|
||||
.multijunk
|
||||
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3
|
||||
RTL
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@ endmacro
|
||||
%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 -
|
||||
%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 -
|
||||
%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 -
|
||||
%ReceiptProps($6A, -4, 0, $4A, $F36A, $FF, triforce, skip) ; 6A - Triforce
|
||||
%ReceiptProps($6A, -4, 0, $49, $F36A, $FF, triforce, skip) ; 6A - Triforce
|
||||
%ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star
|
||||
%ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece
|
||||
%ReceiptProps($6D, -4, 0, $FF, $F36A, $FF, request_F0, skip) ; 6D - Server request item
|
||||
@@ -377,16 +377,16 @@ endmacro
|
||||
%ReceiptProps($ED, -4, 0, $49, $F36A, $FF, skip, skip) ; ED -
|
||||
%ReceiptProps($EE, -4, 0, $49, $F36A, $FF, skip, skip) ; EE -
|
||||
%ReceiptProps($EF, -4, 0, $49, $F36A, $FF, skip, skip) ; EF -
|
||||
%ReceiptProps($F0, -4, 0, $49, $F36A, $FF, skip, skip) ; F0 -
|
||||
%ReceiptProps($F1, -4, 0, $49, $F36A, $FF, skip, skip) ; F1 -
|
||||
%ReceiptProps($F2, -4, 0, $49, $F36A, $FF, skip, skip) ; F2 -
|
||||
%ReceiptProps($F3, -4, 0, $49, $F36A, $FF, skip, skip) ; F3 -
|
||||
%ReceiptProps($F4, -4, 0, $49, $F36A, $FF, skip, skip) ; F4 -
|
||||
%ReceiptProps($F5, -4, 0, $49, $F36A, $FF, skip, skip) ; F5 -
|
||||
%ReceiptProps($F6, -4, 0, $49, $F36A, $FF, skip, skip) ; F6 -
|
||||
%ReceiptProps($F7, -4, 0, $49, $F36A, $FF, skip, skip) ; F7 -
|
||||
%ReceiptProps($F8, -4, 0, $49, $F36A, $FF, skip, skip) ; F8 -
|
||||
%ReceiptProps($F9, -4, 0, $49, $F36A, $FF, skip, skip) ; F9 -
|
||||
%ReceiptProps($F0, -4, 0, $51, $F36A, $FF, skip, skip) ; F0 - Armos Soul
|
||||
%ReceiptProps($F1, -4, 0, $52, $F36A, $FF, skip, skip) ; F1 - Lanmolas Soul
|
||||
%ReceiptProps($F2, -4, 0, $53, $F36A, $FF, skip, skip) ; F2 - Moldorm Soul
|
||||
%ReceiptProps($F3, -4, 0, $54, $F36A, $FF, skip, skip) ; F3 - Helmasaur Soul
|
||||
%ReceiptProps($F4, -4, 0, $55, $F36A, $FF, skip, skip) ; F4 - Arrghus Soul
|
||||
%ReceiptProps($F5, -4, 0, $56, $F36A, $FF, skip, skip) ; F5 - Mothula Soul
|
||||
%ReceiptProps($F6, -4, 0, $57, $F36A, $FF, skip, skip) ; F6 - Blind Soul
|
||||
%ReceiptProps($F7, -4, 0, $58, $F36A, $FF, skip, skip) ; F7 - Kholdstare Soul
|
||||
%ReceiptProps($F8, -4, 0, $59, $F36A, $FF, skip, skip) ; F8 - Vitreous Soul
|
||||
%ReceiptProps($F9, -4, 0, $5A, $F36A, $FF, skip, skip) ; F9 - Trinexx Soul
|
||||
%ReceiptProps($FA, -4, 0, $49, $F36A, $FF, skip, skip) ; FA -
|
||||
%ReceiptProps($FB, -4, 0, $49, $F36A, $FF, skip, skip) ; FB -
|
||||
%ReceiptProps($FC, -4, 0, $49, $F36A, $FF, skip, skip) ; FC -
|
||||
@@ -656,16 +656,16 @@ endmacro
|
||||
%SpriteProps($ED, 2, 2, $04, $04, $0000) ; ED -
|
||||
%SpriteProps($EE, 2, 2, $04, $04, $0000) ; EE -
|
||||
%SpriteProps($EF, 2, 2, $04, $04, $0000) ; EF -
|
||||
%SpriteProps($F0, 2, 2, $04, $04, $0000) ; F0 -
|
||||
%SpriteProps($F1, 2, 2, $04, $04, $0000) ; F1 -
|
||||
%SpriteProps($F2, 2, 2, $04, $04, $0000) ; F2 -
|
||||
%SpriteProps($F3, 2, 2, $04, $04, $0000) ; F3 -
|
||||
%SpriteProps($F4, 2, 2, $04, $04, $0000) ; F4 -
|
||||
%SpriteProps($F5, 2, 2, $04, $04, $0000) ; F5 -
|
||||
%SpriteProps($F6, 2, 2, $04, $04, $0000) ; F6 -
|
||||
%SpriteProps($F7, 2, 2, $04, $04, $0000) ; F7 -
|
||||
%SpriteProps($F8, 2, 2, $04, $04, $0000) ; F8 -
|
||||
%SpriteProps($F9, 2, 2, $04, $04, $0000) ; F9 -
|
||||
%SpriteProps($F0, 2, 2, $83, $83, PalettesCustom_armos) ; F0 - Armos Soul
|
||||
%SpriteProps($F1, 2, 2, $83, $83, PalettesCustom_lanmolas) ; F1 - Lanmolas Soul
|
||||
%SpriteProps($F2, 2, 2, $83, $83, PalettesCustom_moldorm) ; F2 - Moldorm Soul
|
||||
%SpriteProps($F3, 2, 2, $83, $83, PalettesCustom_helmasaur) ; F3 - Helmasuar Soul
|
||||
%SpriteProps($F4, 2, 2, $83, $83, PalettesCustom_arrghus) ; F4 - Arrghus Soul
|
||||
%SpriteProps($F5, 2, 2, $83, $83, PalettesCustom_mothula) ; F5 - Mothula Soul
|
||||
%SpriteProps($F6, 2, 2, $83, $83, PalettesCustom_blind) ; F6 - Blind Soul
|
||||
%SpriteProps($F7, 2, 2, $83, $83, PalettesCustom_kholdstare) ; F7 - Kholdstare Soul
|
||||
%SpriteProps($F8, 2, 2, $83, $83, PalettesCustom_vitreous) ; F8 - Vitreous Soul
|
||||
%SpriteProps($F9, 2, 2, $83, $83, PalettesCustom_trinexx) ; F9 - Trinexx Soul
|
||||
%SpriteProps($FA, 2, 2, $04, $04, $0000) ; FA -
|
||||
%SpriteProps($FB, 2, 2, $04, $04, $0000) ; FB -
|
||||
%SpriteProps($FC, 2, 2, $04, $04, $0000) ; FC -
|
||||
@@ -932,16 +932,16 @@ endmacro
|
||||
%InventoryItem($ED, $0001, $0000, $0000) ; ED -
|
||||
%InventoryItem($EE, $0001, $0000, $0000) ; EE -
|
||||
%InventoryItem($EF, $0001, $0000, $0000) ; EF -
|
||||
%InventoryItem($F0, $0001, $0000, $0000) ; F0 -
|
||||
%InventoryItem($F1, $0001, $0000, $0000) ; F1 -
|
||||
%InventoryItem($F2, $0001, $0000, $0000) ; F2 -
|
||||
%InventoryItem($F3, $0001, $0000, $0000) ; F3 -
|
||||
%InventoryItem($F4, $0001, $0000, $0000) ; F4 -
|
||||
%InventoryItem($F5, $0001, $0000, $0000) ; F5 -
|
||||
%InventoryItem($F6, $0001, $0000, $0000) ; F6 -
|
||||
%InventoryItem($F7, $0001, $0000, $0000) ; F7 -
|
||||
%InventoryItem($F8, $0001, $0000, $0000) ; F8 -
|
||||
%InventoryItem($F9, $0001, $0000, $0000) ; F9 -
|
||||
%InventoryItem($F0, $0081, $0000, $0000) ; F0 - Armos Soul
|
||||
%InventoryItem($F1, $0081, $0000, $0000) ; F1 - Lanmolas Soul
|
||||
%InventoryItem($F2, $0081, $0000, $0000) ; F2 - Moldorm Soul
|
||||
%InventoryItem($F3, $0081, $0000, $0000) ; F3 - Helmasuar Soul
|
||||
%InventoryItem($F4, $0081, $0000, $0000) ; F4 - Arrghus Soul
|
||||
%InventoryItem($F5, $0081, $0000, $0000) ; F5 - Mothula Soul
|
||||
%InventoryItem($F6, $0081, $0000, $0000) ; F6 - Blind Soul
|
||||
%InventoryItem($F7, $0081, $0000, $0000) ; F7 - Kholdstare Soul
|
||||
%InventoryItem($F8, $0081, $0000, $0000) ; F8 - Vitreous Soul
|
||||
%InventoryItem($F9, $0081, $0000, $0000) ; F9 - Trinexx Soul
|
||||
%InventoryItem($FA, $0001, $0000, $0000) ; FA -
|
||||
%InventoryItem($FB, $0001, $0000, $0000) ; FB -
|
||||
%InventoryItem($FC, $0001, $0000, $0000) ; FC -
|
||||
@@ -1196,16 +1196,16 @@ ItemReceiptGraphicsOffsets:
|
||||
dw $0 ; ED -
|
||||
dw $0 ; EE -
|
||||
dw $0 ; EF -
|
||||
dw $0 ; F0 -
|
||||
dw $0 ; F1 -
|
||||
dw $0 ; F2 -
|
||||
dw $0 ; F3 -
|
||||
dw $0 ; F4 -
|
||||
dw $0 ; F5 -
|
||||
dw $0 ; F6 -
|
||||
dw $0 ; F7 -
|
||||
dw $0 ; F8 -
|
||||
dw $0 ; F9 -
|
||||
dw $1C20 ; F0 - Armos Soul
|
||||
dw $1C60 ; F1 - Lanmolas Soul
|
||||
dw $1CA0 ; F2 - Moldorm Soul
|
||||
dw $1D20 ; F3 - Helmasuar Soul
|
||||
dw $1D60 ; F4 - Arrghus Soul
|
||||
dw $1DA0 ; F5 - Mothula Soul
|
||||
dw $1DE0 ; F6 - Blind Soul
|
||||
dw $2020 ; F7 - Kholdstare Soul
|
||||
dw $2060 ; F8 - Vitreous Soul
|
||||
dw $20A0 ; F9 - Trinexx Soul
|
||||
dw $0 ; FA -
|
||||
dw $0 ; FB -
|
||||
dw $0 ; FC -
|
||||
@@ -1437,7 +1437,7 @@ StandingItemGraphicsOffsets:
|
||||
dw $0960 ; D0 - Bee trap
|
||||
dw $0 ; D1 - Apples
|
||||
dw $0 ; D2 - Fairy
|
||||
dw BigDecompressionBuffer+$0140 ; D3 - Chicken
|
||||
dw $11E0 ; D3 - Chicken
|
||||
dw $01E0 ; D4 - Big Magic
|
||||
dw $11E0 ; D5 - 5 Arrows
|
||||
dw $0 ; D6 - Good Bee
|
||||
@@ -1466,16 +1466,16 @@ StandingItemGraphicsOffsets:
|
||||
dw $0 ; ED -
|
||||
dw $0 ; EE -
|
||||
dw $0 ; EF -
|
||||
dw $0 ; F0 -
|
||||
dw $0 ; F1 -
|
||||
dw $0 ; F2 -
|
||||
dw $0 ; F3 -
|
||||
dw $0 ; F4 -
|
||||
dw $0 ; F5 -
|
||||
dw $0 ; F6 -
|
||||
dw $0 ; F7 -
|
||||
dw $0 ; F8 -
|
||||
dw $0 ; F9 -
|
||||
dw $1C20 ; F0 - Armos Soul
|
||||
dw $1C60 ; F1 - Lanmolas Soul
|
||||
dw $1CA0 ; F2 - Moldorm Soul
|
||||
dw $1D20 ; F3 - Helmasuar Soul
|
||||
dw $1D60 ; F4 - Arrghus Soul
|
||||
dw $1DA0 ; F5 - Mothula Soul
|
||||
dw $1DE0 ; F6 - Blind Soul
|
||||
dw $2020 ; F7 - Kholdstare Soul
|
||||
dw $2060 ; F8 - Vitreous Soul
|
||||
dw $20A0 ; F9 - Trinexx Soul
|
||||
dw $0 ; FA -
|
||||
dw $0 ; FB -
|
||||
dw $0 ; FC -
|
||||
|
||||
@@ -376,7 +376,7 @@ TransferCommonToVRAM:
|
||||
REP #$21
|
||||
SEP #$10
|
||||
|
||||
LDA.w #BigDecompressionBuffer+$2400
|
||||
LDA.w #BigDecompressionBuffer+$2000
|
||||
LDX.b #BigDecompressionBuffer>>16
|
||||
STA.w $4302
|
||||
STX.w $4304
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
; hooks
|
||||
org $81DB19
|
||||
JSL MaybeSkipSmashTerrain : BCS $81DB11
|
||||
|
||||
org $81E6B0
|
||||
JSL RevealPotItem
|
||||
RTS
|
||||
@@ -42,9 +39,6 @@ org $86d180
|
||||
org $86d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F)
|
||||
JSL KeyGet
|
||||
|
||||
org $86E24A
|
||||
JSR MaybeSkipTerrainDebris
|
||||
|
||||
org $86f9f3 ; bank06.asm : 6732 (JSL SpritePrep_LoadProperties)
|
||||
JSL LoadProperties_PreserveCertainProps
|
||||
|
||||
@@ -52,11 +46,6 @@ org $86828A
|
||||
Sprite_SpawnSecret_SpriteSpawnDynamically:
|
||||
JSL CheckSprite_Spawn
|
||||
|
||||
org $87B114
|
||||
JSL MaybeUnableToLiftPotSfx
|
||||
NOP #4
|
||||
db $30 ; BMI
|
||||
|
||||
org $87B169
|
||||
JSL PreventPotSpawn : NOP
|
||||
|
||||
@@ -91,25 +80,13 @@ InitializeMirrorHDMA:
|
||||
org $89D62E
|
||||
UWSpritesPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
|
||||
|
||||
if !FEATURE_FIX_BASEROM
|
||||
org $81DB67
|
||||
else
|
||||
org $89D87E
|
||||
endif
|
||||
org $89D87E
|
||||
UWPotsPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers
|
||||
|
||||
if !FEATURE_FIX_BASEROM
|
||||
org $01DDE7
|
||||
else
|
||||
org $89DACE
|
||||
endif
|
||||
org $89DACE
|
||||
UWPotsData: ; variable number of bytes (max 0x11D1) for all pots data
|
||||
|
||||
if !FEATURE_FIX_BASEROM
|
||||
org $89D92E
|
||||
else
|
||||
org $A88000
|
||||
endif
|
||||
org $A88000
|
||||
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
|
||||
|
||||
@@ -200,7 +177,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
|
||||
@@ -694,7 +671,7 @@ KeyGet:
|
||||
PHA
|
||||
LDA.l StandingItemsOn : BNE +
|
||||
PLA : RTL
|
||||
+ LDY.w SprSourceItemId, X
|
||||
+ LDY.w SprItemReceipt, X
|
||||
LDA.w SprItemIndex, X : STA.w SpawnedItemIndex
|
||||
LDA.w SprItemFlags, X : STA.w SpawnedItemFlag
|
||||
STY.b Scrap00
|
||||
@@ -708,7 +685,7 @@ KeyGet:
|
||||
+ LSR : TAX
|
||||
LDA.b Scrap00 : CMP.l KeyTable, X : BNE +
|
||||
.countIt
|
||||
LDA.l StandingItemCounterMask : AND SpawnedItemFlag : BEQ ++
|
||||
LDA.l StandingItemCounterMask : AND.w SpawnedItemFlag : BEQ ++
|
||||
JSL AddInventory
|
||||
++ PLX : PLA : RTL
|
||||
+ CMP.b #$AF : beq .countIt ; universal key
|
||||
@@ -716,7 +693,7 @@ KeyGet:
|
||||
.skip PLX
|
||||
.receive
|
||||
JSL Player_HaltDashAttackLong
|
||||
TYA : JSL AttemptItemSubstitution : TAY
|
||||
TYA : JSL AttemptItemSubstitution : JSL ResolveLootIDLong : TAY
|
||||
JSL Link_ReceiveItem
|
||||
PLA : DEC : RTL
|
||||
|
||||
@@ -724,7 +701,7 @@ KeyTable:
|
||||
db $A0, $A0, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC, $AD
|
||||
|
||||
BigKeyGet:
|
||||
LDY.w SprSourceItemId, X
|
||||
LDY.w SprItemReceipt, X
|
||||
CPY.b #$32 : BNE +
|
||||
STZ.w ItemReceiptMethod : LDY.b #$32 ; what we wrote over
|
||||
PHX : JSL Link_ReceiveItem : PLX ; what we wrote over
|
||||
@@ -796,6 +773,7 @@ CheckSprite_Spawn:
|
||||
RTL
|
||||
.check
|
||||
LDA.b Scrap0D : CMP.b #$08 : BNE +
|
||||
LDA.w LinkDashing : BNE .error
|
||||
LDX.b #$0F
|
||||
|
||||
; loop looking for a Sprite with state 0A (carried by the player)
|
||||
@@ -806,9 +784,7 @@ RTL
|
||||
LDA.b #$00 : STZ.w SpriteAITable, X
|
||||
LDA.b #$E4 : JSL Sprite_SpawnDynamically
|
||||
BMI .error
|
||||
LDA.w UseY1 : AND.b #$02 : BNE ++
|
||||
LDA.b #$40 : TSB.w AButtonAct
|
||||
++ RTL
|
||||
LDA.b #$40 : TSB.w AButtonAct : RTL
|
||||
|
||||
.error
|
||||
LDA.b #$3C ; SFX2_3C - error beep
|
||||
@@ -827,102 +803,15 @@ PreventPotSpawn2:
|
||||
LDA.b #$01 : TSB.b LinkStrafe ; what we wrote over
|
||||
+ RTL
|
||||
|
||||
MaybeSkipTerrainDebris_long:
|
||||
STZ.w SecretId ; what we wrote over
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$EC
|
||||
BEQ .return
|
||||
PLA : PLA : PLA : PLA : PLA
|
||||
LDA.b #Sprite_ScheduleForBreakage_exit>>16 : PHA
|
||||
PEA.w Sprite_ScheduleForBreakage_exit-1
|
||||
.return
|
||||
RTL
|
||||
|
||||
MaybeSkipSmashTerrain:
|
||||
STY.w ManipIndex : LDA.w ManipTileMapX, Y ; what we wrote over
|
||||
PHA
|
||||
SEP #$30
|
||||
LDX.b #$0F
|
||||
- LDA.w SpriteAITable, X : BEQ .continue
|
||||
DEX
|
||||
BPL -
|
||||
.skip
|
||||
PLA : PLA
|
||||
LDA.b #$3C : STA.w SFX2 ; error beep
|
||||
SEC
|
||||
RTL
|
||||
.continue
|
||||
REP #$30
|
||||
PLA
|
||||
CLC
|
||||
RTL
|
||||
|
||||
MaybeUnableToLiftPotSfx:
|
||||
- LDA.w SpriteAITable,X : BEQ .return
|
||||
DEX
|
||||
BPL -
|
||||
LDA.b #$3C : STA.w SFX2 ; error beep
|
||||
LDA.b #$FF
|
||||
.return
|
||||
RTL
|
||||
|
||||
CheckIfPotIsSpecial:
|
||||
TXA ; give index to A so we can do a CMP.l
|
||||
CMP.l $018550 ; see if our current index is that of object 230
|
||||
BNE .normal_pot
|
||||
BEQ .specialpot
|
||||
|
||||
.special_pot
|
||||
PHX
|
||||
|
||||
; get pot index and cache room ID offset
|
||||
LDA.b RoomIndex : ASL : STA.b Scrap0E
|
||||
TAX
|
||||
|
||||
LDA.b $08
|
||||
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
|
||||
|
||||
LDA.l UWPotsPointers,X : TAX
|
||||
LDY.w #$0000
|
||||
|
||||
.next_pot
|
||||
LDA.l UWPotsPointers&$FF0000, X ; read only the bank
|
||||
CMP.w #$FFFF
|
||||
BEQ .nothing
|
||||
AND.w #$3FFF ; mask out the first three bits (used for item indicators and layer)
|
||||
|
||||
CMP.b $90 ; check against the tilemap offset
|
||||
BEQ .get_flag
|
||||
|
||||
INX #3
|
||||
INY #2
|
||||
BRA .next_pot
|
||||
|
||||
.get_flag
|
||||
TYX
|
||||
|
||||
LDA.l BitFieldMasks,X
|
||||
LDX.b Scrap0E ; get room ID
|
||||
STA.b Scrap0E
|
||||
LDA.l RoomPotData,X
|
||||
|
||||
BRA .check_pot
|
||||
|
||||
.nothing
|
||||
INC ; from FFFF, A is now 0000 so the AND always fails
|
||||
|
||||
.check_pot
|
||||
LDY.b $08 : PLX
|
||||
AND.b Scrap0E
|
||||
BEQ .exit ; zero flag will be set, which is what we want
|
||||
LDX.w #$0E82 ; the normal pot obj. See RoomDrawObjectData_#obj0E82
|
||||
|
||||
.normal_pot
|
||||
; Normal pot, so run the vanilla code
|
||||
; Normal pot, so run the vanilla code
|
||||
LDA.l CurrentWorld ; check for dark world
|
||||
.exit
|
||||
RTL
|
||||
.specialpot ; zero flag already set, so gtg
|
||||
RTL
|
||||
|
||||
SetTheSceneFix:
|
||||
STZ.b $6C
|
||||
|
||||
@@ -2,13 +2,6 @@
|
||||
; Maiden Crystal Fixes
|
||||
;================================================================================
|
||||
|
||||
pushpc
|
||||
|
||||
org $9ECE25
|
||||
STZ.w $1F00 : NOP : NOP ; fix to allow VRAM corruption during Blind fight
|
||||
|
||||
pullpc
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; MaidenCrystalScript
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
135
menu/compress.py
135
menu/compress.py
@@ -1,135 +0,0 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Compression function reverse-engineered from ALTTP's decompression routine at $00E7DE
|
||||
def compress(data):
|
||||
out = bytearray()
|
||||
i = 0
|
||||
|
||||
while i < len(data):
|
||||
# Check for repeating byte pattern
|
||||
if i + 1 < len(data) and data[i] == data[i + 1]:
|
||||
length = 2
|
||||
while i + length < len(data) and data[i] == data[i + length] and length < 32:
|
||||
length += 1
|
||||
# Repeating byte: 0x20-0x3F
|
||||
out.append(0x20 | (length - 1))
|
||||
out.append(data[i])
|
||||
i += length
|
||||
continue
|
||||
|
||||
# Check for incremental byte pattern
|
||||
if i + 2 < len(data) and data[i + 1] == data[i] + 1 and data[i + 2] == data[i] + 2:
|
||||
length = 3
|
||||
while i + length < len(data) and data[i + length] == data[i] + length and length < 32:
|
||||
length += 1
|
||||
# Incremental: 0x60-0x7F
|
||||
out.append(0x60 | (length - 1))
|
||||
out.append(data[i])
|
||||
i += length
|
||||
continue
|
||||
|
||||
# Check for repeating word pattern (alternating two bytes)
|
||||
if i + 3 < len(data):
|
||||
# Check if we have an alternating pattern: A B A B...
|
||||
byte_a = data[i]
|
||||
byte_b = data[i + 1]
|
||||
length = 2
|
||||
while i + length < len(data) and length < 32:
|
||||
if length % 2 == 0:
|
||||
if data[i + length] != byte_a:
|
||||
break
|
||||
else:
|
||||
if data[i + length] != byte_b:
|
||||
break
|
||||
length += 1
|
||||
|
||||
if length >= 4: # Need at least 4 bytes (2 alternations) to make it worthwhile
|
||||
# Repeating word: 0x40-0x5F
|
||||
out.append(0x40 | (length - 1))
|
||||
out.append(byte_a)
|
||||
out.append(byte_b)
|
||||
i += length
|
||||
continue
|
||||
|
||||
# Check for copy from past (LZ with absolute offset)
|
||||
best_len = 0
|
||||
best_off = 0
|
||||
search_start = max(0, i - 65536) # Can reference anywhere in output
|
||||
for j in range(search_start, i):
|
||||
length = 0
|
||||
while i + length < len(data) and data[j + length] == data[i + length] and length < 1024:
|
||||
length += 1
|
||||
if length >= 2 and length > best_len:
|
||||
best_len = length
|
||||
best_off = j # Absolute offset, not relative!
|
||||
|
||||
if best_len >= 2:
|
||||
# Copy from past: 0x80-0xDF or 0xE0-0xFE (extended)
|
||||
# Offset is ABSOLUTE position in the output buffer
|
||||
if best_len <= 32:
|
||||
# Standard copy: 0x80-0xDF (5 bits for length-1, 16 bits for absolute offset)
|
||||
out.append(0x80 | ((best_len - 1) & 0x1F))
|
||||
out.append(best_off & 0xFF)
|
||||
out.append((best_off >> 8) & 0xFF)
|
||||
else:
|
||||
# Extended copy: 0xE0-0xFE
|
||||
if best_len > 1024:
|
||||
best_len = 1024
|
||||
# Command byte: 111LLLLL where L is length bits
|
||||
cmd = 0xE0 | (((best_len - 1) >> 8) & 0x1F)
|
||||
out.append(cmd)
|
||||
out.append((best_len - 1) & 0xFF)
|
||||
out.append(best_off & 0xFF)
|
||||
out.append((best_off >> 8) & 0xFF)
|
||||
i += best_len
|
||||
continue
|
||||
|
||||
# Raw copy (no pattern found)
|
||||
size = 1
|
||||
while size < 32 and i + size < len(data):
|
||||
# Don't extend raw copy if we find a better pattern ahead
|
||||
if i + size + 1 < len(data) and data[i + size] == data[i + size + 1]:
|
||||
break
|
||||
if i + size + 2 < len(data) and data[i + size + 1] == data[i + size] + 1:
|
||||
break
|
||||
# Check LZ
|
||||
found_lz = False
|
||||
for j in range(max(0, i + size - 2048), i + size):
|
||||
if i + size + 1 < len(data) and data[j] == data[i + size] and data[j + 1] == data[i + size + 1]:
|
||||
found_lz = True
|
||||
break
|
||||
if found_lz:
|
||||
break
|
||||
size += 1
|
||||
|
||||
# Raw copy: 0x00-0x1F
|
||||
out.append(size - 1)
|
||||
out.extend(data[i:i + size])
|
||||
i += size
|
||||
|
||||
# End marker
|
||||
out.append(0xFF)
|
||||
return out
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python compress.py <input_file> <output_file>")
|
||||
sys.exit(1)
|
||||
|
||||
input_file_path = sys.argv[1]
|
||||
output_file_path = sys.argv[2]
|
||||
|
||||
if not os.path.exists(input_file_path):
|
||||
print(f"Error: Input file not found at {input_file_path}")
|
||||
sys.exit(1)
|
||||
|
||||
with open(input_file_path, 'rb') as f:
|
||||
input_data = f.read()
|
||||
|
||||
compressed_data = compress(input_data)
|
||||
|
||||
with open(output_file_path, 'wb') as f:
|
||||
f.write(compressed_data)
|
||||
|
||||
print(f"Successfully compressed '{input_file_path}' to '{output_file_path}'")
|
||||
@@ -1,112 +0,0 @@
|
||||
import sys
|
||||
|
||||
def decompress(compressed_data):
|
||||
out = bytearray()
|
||||
i = 0
|
||||
|
||||
while i < len(compressed_data):
|
||||
cmd = compressed_data[i]
|
||||
|
||||
if cmd == 0xFF:
|
||||
# End marker
|
||||
break
|
||||
|
||||
i += 1
|
||||
|
||||
# Decode based on top 3 bits
|
||||
top_bits = cmd & 0xE0
|
||||
|
||||
if cmd < 0xE0:
|
||||
# Standard commands
|
||||
length = (cmd & 0x1F) + 1
|
||||
|
||||
if top_bits == 0x00:
|
||||
# Raw copy
|
||||
out.extend(compressed_data[i:i+length])
|
||||
i += length
|
||||
elif top_bits == 0x20:
|
||||
# Repeating byte
|
||||
byte_val = compressed_data[i]
|
||||
out.extend([byte_val] * length)
|
||||
i += 1
|
||||
elif top_bits == 0x40:
|
||||
# Repeating word - alternates between two bytes
|
||||
byte_a = compressed_data[i]
|
||||
byte_b = compressed_data[i+1]
|
||||
for j in range(length):
|
||||
if j % 2 == 0:
|
||||
out.append(byte_a)
|
||||
else:
|
||||
out.append(byte_b)
|
||||
i += 2
|
||||
elif top_bits == 0x60:
|
||||
# Incremental
|
||||
start_val = compressed_data[i]
|
||||
for j in range(length):
|
||||
out.append((start_val + j) & 0xFF)
|
||||
i += 1
|
||||
elif top_bits >= 0x80:
|
||||
# Copy from past (absolute offset)
|
||||
offset = compressed_data[i] | (compressed_data[i+1] << 8)
|
||||
for j in range(length):
|
||||
out.append(out[offset + j])
|
||||
i += 2
|
||||
else:
|
||||
# Extended command (0xE0-0xFE)
|
||||
# Command type from bits 5-7 (after shifting)
|
||||
cmd_type = ((cmd << 3) & 0xE0)
|
||||
# Length from bits 0-1 of command (high) + next byte (low)
|
||||
length_high = cmd & 0x03
|
||||
length_low = compressed_data[i]
|
||||
length = (length_high << 8) | length_low
|
||||
length += 1
|
||||
i += 1
|
||||
|
||||
if cmd_type == 0x00:
|
||||
# Extended raw copy
|
||||
out.extend(compressed_data[i:i+length])
|
||||
i += length
|
||||
elif cmd_type == 0x20:
|
||||
# Extended repeating byte
|
||||
byte_val = compressed_data[i]
|
||||
out.extend([byte_val] * length)
|
||||
i += 1
|
||||
elif cmd_type == 0x40:
|
||||
# Extended repeating word - alternates between two bytes
|
||||
byte_a = compressed_data[i]
|
||||
byte_b = compressed_data[i+1]
|
||||
for j in range(length):
|
||||
if j % 2 == 0:
|
||||
out.append(byte_a)
|
||||
else:
|
||||
out.append(byte_b)
|
||||
i += 2
|
||||
elif cmd_type == 0x60:
|
||||
# Extended incremental
|
||||
start_val = compressed_data[i]
|
||||
for j in range(length):
|
||||
out.append((start_val + j) & 0xFF)
|
||||
i += 1
|
||||
elif cmd_type >= 0x80:
|
||||
# Extended copy from past
|
||||
offset = compressed_data[i] | (compressed_data[i+1] << 8)
|
||||
for j in range(length):
|
||||
out.append(out[offset + j])
|
||||
i += 2
|
||||
|
||||
return out
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python decompress.py <input_file> <output_file>")
|
||||
sys.exit(1)
|
||||
|
||||
with open(sys.argv[1], 'rb') as f:
|
||||
compressed = f.read()
|
||||
|
||||
decompressed = decompress(compressed)
|
||||
|
||||
with open(sys.argv[2], 'wb') as f:
|
||||
f.write(decompressed)
|
||||
|
||||
print(f"Decompressed {len(compressed)} bytes to {len(decompressed)} bytes")
|
||||
Binary file not shown.
Binary file not shown.
BIN
menu/drfont.2bpp
BIN
menu/drfont.2bpp
Binary file not shown.
BIN
menu/drsheetdc.2bppc
Normal file
BIN
menu/drsheetdc.2bppc
Normal file
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.5 KiB |
@@ -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 #$03A0 : 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.
3
msu.asm
3
msu.asm
@@ -427,6 +427,8 @@ StoreMusicOnDeath:
|
||||
MSUInit:
|
||||
PHP
|
||||
|
||||
LDA.b #$00
|
||||
STA.l MSULoadedTrack
|
||||
JSL MSUResumeReset
|
||||
|
||||
LDA.l NoBGM : BNE .done
|
||||
@@ -497,7 +499,6 @@ MSUInit:
|
||||
;--------------------------------------------------------------------------------
|
||||
MSUResumeReset:
|
||||
LDA.b #$00
|
||||
STA.l MSULoadedTrack
|
||||
STA.l MSUResumeTrack
|
||||
STA.l MSUResumeTime : STA.l MSUResumeTime+1 : STA.l MSUResumeTime+2 : STA.l MSUResumeTime+3
|
||||
STA.l MSUResumeControl
|
||||
|
||||
57
music.asm
57
music.asm
@@ -96,14 +96,15 @@ Overworld_DetermineMusic:
|
||||
CMP.b #$43 : BEQ .darkMountain
|
||||
CMP.b #$45 : BEQ .darkMountain
|
||||
CMP.b #$47 : BEQ .darkMountain
|
||||
LDX.b #$09 ; default dark world theme
|
||||
BRA .default_set
|
||||
+
|
||||
|
||||
LDX.b #$02 ; hyrule field theme
|
||||
|
||||
.default_set
|
||||
LDA.l CurrentWorld : BEQ +
|
||||
LDX.b #$09 ; default dark world theme
|
||||
|
||||
; Check if we're entering the village
|
||||
LDA.b OverworldIndex : CMP.b #$18 : BNE +
|
||||
+ LDA.b OverworldIndex : CMP.b #$18 : BNE +
|
||||
; Check what phase we're in
|
||||
; LDA ProgressIndicator : CMP.b #$03 : !BGE .bunny
|
||||
LDX.b #$07 ; Default village theme (phase <3)
|
||||
@@ -173,21 +174,24 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
pushpc
|
||||
org $82AD6C
|
||||
; Determine whether or not to fade out music on mosaic transitions
|
||||
OverworldMosaicTransition_HandleSong:
|
||||
LDA.b GameSubMode : CMP.b #$0D : BNE .dont_fade
|
||||
LDA.w CurrentControlRequest : CMP.b #$04 : BEQ .dont_fade
|
||||
BRA .fade_song
|
||||
; Additional dark world checks to determine whether or not to fade out music
|
||||
; on mosaic transitions
|
||||
;
|
||||
; On entry, A = $8A (overworld area being loaded)
|
||||
Overworld_MosaicDarkWorldChecks:
|
||||
CMP.b #$40 : BEQ .checkCrystals
|
||||
CMP.b #$42 : BEQ .checkCrystals
|
||||
CMP.b #$50 : BEQ .checkCrystals
|
||||
CMP.b #$51 : BNE .doFade
|
||||
|
||||
warnpc $82ADA0
|
||||
org $82ADA0
|
||||
.fade_song
|
||||
org $82ADA5
|
||||
.dont_fade
|
||||
.checkCrystals
|
||||
LDA.l CrystalsField : CMP.b #$7F : BEQ .done
|
||||
|
||||
pullpc
|
||||
.doFade
|
||||
LDA.b #$F1 : STA.w MusicControlRequest ; thing we wrote over, fade out music
|
||||
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -226,22 +230,3 @@ FallingMusicFadeOut:
|
||||
.return
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FixHalfVolumeOnSpawnExitToOverworld:
|
||||
BEQ .exit : STA.w MusicControlRequest ; what we wrote over
|
||||
LDA.w DungeonID : BNE .exit
|
||||
LDA.b LinkPosY+1 : ROR : LDA.b LinkPosY : ROR
|
||||
CMP.b #$DC : BCS .exit ; check if link loading in room from a spawn
|
||||
; set queue to half volume to trigger full volume on exit
|
||||
LDA.b #$F2 : STA.w MusicControlQueue
|
||||
.exit
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FixPreAgaMusicFadeOut:
|
||||
LDA.l DRMode : TAX : CPX.b #$01 : BCS .exit_no_fade+1
|
||||
LDA.b RoomIndex : CMP.w #$0030 : BEQ .exit_and_fade ; what we
|
||||
CMP.w #$0040 : BEQ .exit_and_fade ; wrote over
|
||||
.exit_no_fade
|
||||
SEC : RTL
|
||||
.exit_and_fade
|
||||
CLC : RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
122
newhud.asm
122
newhud.asm
@@ -152,23 +152,14 @@ NewHUD_DrawDungeonCounters:
|
||||
|
||||
;================================================================================
|
||||
NewHUD_DrawPrizeIcon:
|
||||
REP #$10
|
||||
SEP #$20
|
||||
REP #$10
|
||||
SEP #$20
|
||||
LDA.b GameMode
|
||||
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 #$12 : BEQ .no_prize
|
||||
CMP.b #$0E : BEQ +
|
||||
LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
|
||||
+
|
||||
LDA.w DungeonID
|
||||
CMP.b #$1A : BCS .no_prize
|
||||
CMP.b #$04 : BCC .no_prize
|
||||
CMP.b #$08 : BNE .dungeon
|
||||
@@ -185,19 +176,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
|
||||
@@ -460,15 +451,6 @@ 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
|
||||
@@ -479,22 +461,6 @@ 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
|
||||
@@ -514,11 +480,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
|
||||
@@ -560,16 +526,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
|
||||
@@ -579,29 +545,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:
|
||||
|
||||
@@ -188,12 +188,10 @@ ItemBehavior:
|
||||
BRA .store_inventory_tracking
|
||||
|
||||
.flute_inactive
|
||||
LDA.b #$FF : STA.l FluteBitfield
|
||||
LDA.l InventoryTracking : ORA.b #$02
|
||||
BRA .store_inventory_tracking
|
||||
|
||||
.flute_active
|
||||
LDA.b #$FF : STA.l FluteBitfield
|
||||
LDA.l InventoryTracking : ORA.b #$01
|
||||
BRA .store_inventory_tracking
|
||||
|
||||
@@ -1212,7 +1210,7 @@ MaybeFlagDungeonTotalsEntrance:
|
||||
LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts
|
||||
JSR FlagCompassCount
|
||||
.maps
|
||||
LDA.l MapHUDMode : AND.w #$000F
|
||||
; LDA.l MapHUDMode : AND.w #$000F : BEQ .done
|
||||
LDX.w DungeonID
|
||||
JSR FlagMapCount
|
||||
.done
|
||||
@@ -1227,7 +1225,7 @@ FlagCompassCount:
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
FlagMapCount:
|
||||
CMP.w #$0002 : BEQ .mapShown
|
||||
; CMP.w #$0002 : BEQ .mapShown
|
||||
LDA.l MapMode : AND.w #$00FF : BEQ .mapShown
|
||||
LDA.l MapField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have map
|
||||
.mapShown
|
||||
|
||||
@@ -138,7 +138,7 @@ RTL
|
||||
ItemSet_Mushroom:
|
||||
PHA
|
||||
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
|
||||
LDY.w SprSourceItemId, X ; Retrieve stored item type
|
||||
LDY.w SprItemReceipt, X ; Retrieve stored item type
|
||||
BNE +
|
||||
; if for any reason the item value is 0 reload it, just in case
|
||||
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
|
||||
|
||||
595
owrando.asm
595
owrando.asm
@@ -320,7 +320,6 @@ OWLightWorldOrCrossed:
|
||||
|
||||
OWFluteCancel:
|
||||
{
|
||||
lda.l FluteBitfield : beq +
|
||||
lda.l OWFlags+1 : and.b #$01 : bne +
|
||||
jsl FluteMenu_LoadTransport : rtl
|
||||
+ lda.w RandoOverworldTargetEdge : bne +
|
||||
@@ -332,10 +331,8 @@ OWFluteCancel2:
|
||||
lda.b Joy1B_All : ora.b Joy1A_All : and.b #$c0 : bne +
|
||||
jml FluteMenu_HandleSelection_NoSelection
|
||||
+ inc.w SubModuleInterface
|
||||
lda.l FluteBitfield : 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
|
||||
}
|
||||
@@ -616,13 +613,7 @@ OWBonkDrops:
|
||||
LDA.w $0400 : ORA.b 1,S : STA.w $0400
|
||||
BRA .increment_collection
|
||||
++
|
||||
LDA.b OverworldIndex
|
||||
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
|
||||
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X : ORA.b 1,S : STA.l OverworldEventDataWRAM,X
|
||||
|
||||
.increment_collection
|
||||
REP #$20
|
||||
@@ -682,19 +673,13 @@ OWBonkDropLookup:
|
||||
{
|
||||
; loop thru rando bonk table to find match
|
||||
LDA.b OverworldIndex
|
||||
BIT.b #$40 : BEQ +
|
||||
LDA.l ProgressIndicator : AND.b #$FF : CMP.b #$02
|
||||
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||
++
|
||||
+
|
||||
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)-sizeof(OWBonkPrizeTable)) ; 41 bonk items, 6 bytes each
|
||||
- CMP.w OWBonkPrizeData,X : BNE +
|
||||
INX
|
||||
PHA
|
||||
LDA.w SpritePosXLow,Y : LSR A : LSR A : LSR A : LSR A
|
||||
EOR.w SpritePosYLow,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
||||
PLA : SEC : RTS
|
||||
++ DEX : PLA
|
||||
SEC : RTS
|
||||
++ DEX : LDA.b OverworldIndex
|
||||
+ CPX.b #$00 : BNE +
|
||||
CLC : RTS
|
||||
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
||||
@@ -704,22 +689,16 @@ OWBonkDropLookup:
|
||||
OWBonkDropCollected:
|
||||
{
|
||||
; check if collected
|
||||
CLC
|
||||
LDA.b IndoorsFlag : BEQ +
|
||||
LDA.l RoomDataWRAM[$0120].high : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||
SEC : RTS
|
||||
+
|
||||
LDA.b OverworldIndex
|
||||
BIT.b #$40 : BEQ +
|
||||
LDA.l ProgressIndicator : CMP.b #$02
|
||||
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||
++
|
||||
+
|
||||
TAX
|
||||
LDA.l OverworldEventDataWRAM,X : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||
SEC : RTS
|
||||
|
||||
.return
|
||||
CLC : RTS
|
||||
RTS
|
||||
}
|
||||
|
||||
; A = SprItemReceipt, Y = Sprite Slot Index, X = free/overwritten
|
||||
@@ -1405,291 +1384,291 @@ db $80, $80, $81
|
||||
org $aaa800 ;PC 152800
|
||||
OWNorthEdges:
|
||||
; Min Max Width Mid OW Slot/OWID VRAM Terrain Dest Index
|
||||
dw $00a0, $00a0, $0000, $00a0, $0000, $0284, $0000, $B040 ;Lost Woods (exit only)
|
||||
dw $0458, $0540, $00e8, $04cc, $0a0a, $180a, $0000, $0000
|
||||
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $009a, $0000, $2041 ;Waterfall (exit only)
|
||||
dw $0058, $0058, $0000, $0058, $1010, $1800, $0000, $0001
|
||||
dw $0178, $0178, $0000, $0178, $1010, $181e, $0000, $0002
|
||||
dw $0388, $0388, $0000, $0388, $1111, $1820, $0000, $0003
|
||||
dw $0480, $05b0, $0130, $0518, $1212, $1812, $0000, $0004
|
||||
dw $0f70, $0f90, $0020, $0f80, $1717, $1820, $0000, $0005
|
||||
dw $0078, $0098, $0020, $0088, $1818, $1802, $0000, $0006 ;Kakariko
|
||||
dw $0138, $0158, $0020, $0148, $1818, $181a, $0000, $0007
|
||||
dw $02e8, $0348, $0060, $0318, $1819, $1854, $0000, $0008
|
||||
dw $0478, $04d0, $0058, $04a4, $1a1a, $1806, $0000, $0009
|
||||
dw $0510, $0538, $0028, $0524, $1a1a, $1816, $0000, $000a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $1804, $0000, $000b
|
||||
dw $0b28, $0b38, $0010, $0b30, $1d1d, $1818, $0001, $000c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $1820, $0000, $000d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $2525, $1806, $0000, $000e
|
||||
dw $0350, $0390, $0040, $0370, $2929, $1820, $0000, $000f
|
||||
dw $0670, $06a8, $0038, $068c, $2b2b, $1802, $0000, $0010
|
||||
dw $0898, $09b0, $0118, $0924, $2c2c, $1814, $0000, $0011 ;Links House
|
||||
dw $0a40, $0ba0, $0160, $0af0, $2d2d, $180e, $0000, $0012
|
||||
dw $0c70, $0c90, $0020, $0c80, $2e2e, $1802, $0000, $0013
|
||||
dw $0f70, $0f80, $0010, $0f78, $2f2f, $1820, $0000, $0014
|
||||
dw $0430, $0468, $0038, $044c, $3232, $1800, $0000, $0015
|
||||
dw $04d8, $04f8, $0020, $04e8, $3232, $180c, $0000, $0016
|
||||
dw $0688, $06b0, $0028, $069c, $3333, $1804, $0000, $0017
|
||||
dw $08d0, $08f0, $0020, $08e0, $3434, $180e, $0000, $0018
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $3535, $180c, $0000, $0019
|
||||
dw $0d38, $0d58, $0020, $0d48, $3536, $185a, $0001, $001a
|
||||
dw $0d90, $0da0, $0010, $0d98, $3536, $1860, $0000, $001b
|
||||
dw $06a0, $07b0, $0110, $0728, $3b3b, $1816, $0000, $001c
|
||||
dw $0830, $09b0, $0180, $08f0, $3c3c, $1810, $0000, $001d
|
||||
dw $0e78, $0e88, $0010, $0e80, $3f3f, $1802, $0001, $001e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $181c, $0000, $001f
|
||||
dw $0458, $0540, $00e8, $04cc, $4a4a, $180a, $0000, $0020
|
||||
dw $0058, $0058, $0000, $0058, $5050, $181e, $0000, $0021
|
||||
dw $0178, $0178, $0000, $0178, $5050, $1800, $0000, $0022
|
||||
dw $0388, $0388, $0000, $0388, $5151, $1820, $0000, $0023
|
||||
dw $0480, $05b0, $0130, $0518, $5252, $1812, $0000, $0024
|
||||
dw $0f70, $0f90, $0020, $0f80, $5757, $1820, $0000, $0025
|
||||
dw $0078, $0098, $0020, $0088, $5858, $1802, $0000, $0026 ;Village of Outcasts
|
||||
dw $0138, $0158, $0020, $0148, $5858, $181a, $0000, $0027
|
||||
dw $02e8, $0348, $0060, $0318, $5859, $1854, $0000, $0028
|
||||
dw $0478, $04d0, $0058, $04a4, $5a5a, $1806, $0000, $0029
|
||||
dw $0510, $0538, $0028, $0524, $5a5a, $1816, $0000, $002a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $1804, $0000, $002b
|
||||
dw $0b28, $0b38, $0010, $0b30, $5d5d, $1818, $0001, $002c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $1820, $0000, $002d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $6565, $1806, $0000, $002e
|
||||
dw $0350, $0390, $0040, $0370, $6969, $1820, $0000, $002f
|
||||
dw $0670, $06a8, $0038, $068c, $6b6b, $1802, $0000, $0030
|
||||
dw $0898, $09b0, $0118, $0924, $6c6c, $1814, $0000, $0031
|
||||
dw $0a40, $0ba0, $0160, $0af0, $6d6d, $180e, $0000, $0032
|
||||
dw $0c70, $0c90, $0020, $0c80, $6e6e, $1802, $0000, $0033
|
||||
dw $0f70, $0f80, $0010, $0f78, $6f6f, $1820, $0000, $0034
|
||||
dw $0430, $0468, $0038, $044c, $7272, $1800, $0000, $0035
|
||||
dw $04d8, $04f8, $0020, $04e8, $7272, $180c, $0000, $0036
|
||||
dw $0688, $06b0, $0028, $069c, $7373, $1804, $0000, $0037
|
||||
dw $08d0, $08f0, $0020, $08e0, $7474, $180e, $0000, $0038
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $7575, $180c, $0000, $0039
|
||||
dw $0d38, $0d58, $0020, $0d48, $7576, $185a, $0001, $003a
|
||||
dw $0d90, $0da0, $0010, $0d98, $7576, $1860, $0000, $003b
|
||||
dw $06a0, $07b0, $0110, $0728, $7b7b, $1816, $0000, $003c
|
||||
dw $0830, $09b0, $0180, $08f0, $7c7c, $1810, $0000, $003d
|
||||
dw $0e78, $0e88, $0010, $0e80, $7f7f, $1802, $0001, $003e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $181c, $0000, $003f
|
||||
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only)
|
||||
dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000
|
||||
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only)
|
||||
dw $0058, $0058, $0000, $0058, $1010, $0000, $0000, $0001
|
||||
dw $0178, $0178, $0000, $0178, $1010, $0000, $0000, $0002
|
||||
dw $0388, $0388, $0000, $0388, $1111, $0000, $0000, $0003
|
||||
dw $0480, $05b0, $0130, $0518, $1212, $0000, $0000, $0004
|
||||
dw $0f70, $0f90, $0020, $0f80, $1717, $0000, $0000, $0005
|
||||
dw $0078, $0098, $0020, $0088, $1818, $0000, $0000, $0006 ;Kakariko
|
||||
dw $0138, $0158, $0020, $0148, $1818, $0000, $0000, $0007
|
||||
dw $02e8, $0348, $0060, $0318, $1819, $0000, $0000, $0008
|
||||
dw $0478, $04d0, $0058, $04a4, $1a1a, $0000, $0000, $0009
|
||||
dw $0510, $0538, $0028, $0524, $1a1a, $0000, $0000, $000a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $0000, $0000, $000b
|
||||
dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0001, $000c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $0000, $0000, $000d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $2525, $0000, $0000, $000e
|
||||
dw $0350, $0390, $0040, $0370, $2929, $0000, $0000, $000f
|
||||
dw $0670, $06a8, $0038, $068c, $2b2b, $0000, $0000, $0010
|
||||
dw $0898, $09b0, $0118, $0924, $2c2c, $0000, $0000, $0011 ;Links House
|
||||
dw $0a40, $0ba0, $0160, $0af0, $2d2d, $0000, $0000, $0012
|
||||
dw $0c70, $0c90, $0020, $0c80, $2e2e, $0000, $0000, $0013
|
||||
dw $0f70, $0f80, $0010, $0f78, $2f2f, $0000, $0000, $0014
|
||||
dw $0430, $0468, $0038, $044c, $3232, $0000, $0000, $0015
|
||||
dw $04d8, $04f8, $0020, $04e8, $3232, $0000, $0000, $0016
|
||||
dw $0688, $06b0, $0028, $069c, $3333, $0000, $0000, $0017
|
||||
dw $08d0, $08f0, $0020, $08e0, $3434, $0000, $0000, $0018
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $3535, $0000, $0000, $0019
|
||||
dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0001, $001a
|
||||
dw $0d90, $0da0, $0010, $0d98, $3536, $0000, $0000, $001b
|
||||
dw $06a0, $07b0, $0110, $0728, $3b3b, $0000, $0000, $001c
|
||||
dw $0830, $09b0, $0180, $08f0, $3c3c, $0000, $0000, $001d
|
||||
dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0001, $001e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $0000, $0000, $001f
|
||||
dw $0458, $0540, $00e8, $04cc, $4a4a, $0000, $0000, $0020
|
||||
dw $0058, $0058, $0000, $0058, $5050, $0000, $0000, $0021
|
||||
dw $0178, $0178, $0000, $0178, $5050, $0000, $0000, $0022
|
||||
dw $0388, $0388, $0000, $0388, $5151, $0000, $0000, $0023
|
||||
dw $0480, $05b0, $0130, $0518, $5252, $0000, $0000, $0024
|
||||
dw $0f70, $0f90, $0020, $0f80, $5757, $0000, $0000, $0025
|
||||
dw $0078, $0098, $0020, $0088, $5858, $0000, $0000, $0026 ;Village of Outcasts
|
||||
dw $0138, $0158, $0020, $0148, $5858, $0000, $0000, $0027
|
||||
dw $02e8, $0348, $0060, $0318, $5859, $0000, $0000, $0028
|
||||
dw $0478, $04d0, $0058, $04a4, $5a5a, $0000, $0000, $0029
|
||||
dw $0510, $0538, $0028, $0524, $5a5a, $0000, $0000, $002a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $0000, $0000, $002b
|
||||
dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0001, $002c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $0000, $0000, $002d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $6565, $0000, $0000, $002e
|
||||
dw $0350, $0390, $0040, $0370, $6969, $0000, $0000, $002f
|
||||
dw $0670, $06a8, $0038, $068c, $6b6b, $0000, $0000, $0030
|
||||
dw $0898, $09b0, $0118, $0924, $6c6c, $0000, $0000, $0031
|
||||
dw $0a40, $0ba0, $0160, $0af0, $6d6d, $0000, $0000, $0032
|
||||
dw $0c70, $0c90, $0020, $0c80, $6e6e, $0000, $0000, $0033
|
||||
dw $0f70, $0f80, $0010, $0f78, $6f6f, $0000, $0000, $0034
|
||||
dw $0430, $0468, $0038, $044c, $7272, $0000, $0000, $0035
|
||||
dw $04d8, $04f8, $0020, $04e8, $7272, $0000, $0000, $0036
|
||||
dw $0688, $06b0, $0028, $069c, $7373, $0000, $0000, $0037
|
||||
dw $08d0, $08f0, $0020, $08e0, $7474, $0000, $0000, $0038
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $7575, $0000, $0000, $0039
|
||||
dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0001, $003a
|
||||
dw $0d90, $0da0, $0010, $0d98, $7576, $0000, $0000, $003b
|
||||
dw $06a0, $07b0, $0110, $0728, $7b7b, $0000, $0000, $003c
|
||||
dw $0830, $09b0, $0180, $08f0, $7c7c, $0000, $0000, $003d
|
||||
dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0001, $003e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $0000, $0000, $003f
|
||||
OWSouthEdges:
|
||||
dw $0458, $0540, $00e8, $04cc, $0202, $100a, $0000, $0001
|
||||
dw $0058, $0058, $0000, $0058, $0008, $2000, $0000, $0003
|
||||
dw $0178, $0178, $0000, $0178, $0008, $2020, $0000, $0004
|
||||
dw $0388, $0388, $0000, $0388, $0009, $2060, $0000, $0005
|
||||
dw $0480, $05b0, $0130, $0518, $0a0a, $1012, $0000, $0006
|
||||
dw $0f70, $0f90, $0020, $0f80, $0f0f, $1020, $0000, $0007
|
||||
dw $0078, $0098, $0020, $0088, $1010, $1002, $0000, $0008
|
||||
dw $0138, $0158, $0020, $0148, $1010, $101a, $0000, $0009
|
||||
dw $02e8, $0348, $0060, $0318, $1111, $1014, $0000, $000a
|
||||
dw $0478, $04d0, $0058, $04a4, $1212, $1006, $0000, $000b
|
||||
dw $0510, $0538, $0028, $0524, $1212, $1016, $0000, $000c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1515, $1004, $0000, $000d
|
||||
dw $0b28, $0b38, $0010, $0b30, $1515, $1018, $0001, $000e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1515, $1020, $0000, $000f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $1006, $0000, $0010
|
||||
dw $0350, $0390, $0040, $0370, $1821, $2060, $0000, $0011
|
||||
dw $0670, $06a8, $0038, $068c, $1b23, $2002, $0000, $0012
|
||||
dw $0898, $09b0, $0118, $0924, $1b24, $2054, $0000, $0013
|
||||
dw $0a40, $0ba0, $0160, $0af0, $2525, $100e, $0000, $0014
|
||||
dw $0c70, $0c90, $0020, $0c80, $1e26, $2002, $0000, $0015
|
||||
dw $0f70, $0f80, $0010, $0f78, $1e27, $2060, $0000, $0016
|
||||
dw $0430, $0468, $0038, $044c, $2a2a, $1000, $0000, $0017
|
||||
dw $04d8, $04f8, $0020, $04e8, $2a2a, $100c, $0000, $0018
|
||||
dw $0688, $06b0, $0028, $069c, $2b2b, $1004, $0000, $0019
|
||||
dw $08d0, $08f0, $0020, $08e0, $2c2c, $100e, $0000, $001a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $100c, $0000, $001b
|
||||
dw $0d38, $0d58, $0020, $0d48, $2e2e, $101a, $0001, $001c
|
||||
dw $0d90, $0da0, $0010, $0d98, $2e2e, $1020, $0000, $001d
|
||||
dw $06a0, $07b0, $0110, $0728, $3333, $1016, $0000, $001e
|
||||
dw $0830, $09b0, $0180, $08f0, $3434, $1010, $0000, $001f
|
||||
dw $0e78, $0e88, $0010, $0e80, $3737, $1002, $0001, $0020
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $101c, $0000, $0021
|
||||
dw $0458, $0540, $00e8, $04cc, $4242, $100a, $0000, $0022
|
||||
dw $0058, $0058, $0000, $0058, $4048, $2000, $0000, $0023
|
||||
dw $0178, $0178, $0000, $0178, $4048, $2020, $0000, $0024
|
||||
dw $0388, $0388, $0000, $0388, $4049, $2060, $0000, $0025
|
||||
dw $0480, $05b0, $0130, $0518, $4a4a, $1012, $0000, $0026
|
||||
dw $0f70, $0f90, $0020, $0f80, $4f4f, $1020, $0000, $0027
|
||||
dw $0078, $0098, $0020, $0088, $5050, $1002, $0000, $0028
|
||||
dw $0138, $0158, $0020, $0148, $5050, $101a, $0000, $0029
|
||||
dw $02e8, $0348, $0060, $0318, $5151, $1014, $0000, $002a
|
||||
dw $0478, $04d0, $0058, $04a4, $5252, $1006, $0000, $002b
|
||||
dw $0510, $0538, $0028, $0524, $5252, $1016, $0000, $002c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5555, $1004, $0000, $002d
|
||||
dw $0b28, $0b38, $0010, $0b30, $5555, $1018, $0001, $002e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5555, $1020, $0000, $002f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $1006, $0000, $0030
|
||||
dw $0350, $0390, $0040, $0370, $5861, $2060, $0000, $0031
|
||||
dw $0670, $06a8, $0038, $068c, $5b63, $2002, $0000, $0032
|
||||
dw $0898, $09b0, $0118, $0924, $5b64, $2054, $0000, $0033
|
||||
dw $0a40, $0ba0, $0160, $0af0, $6565, $100e, $0000, $0034
|
||||
dw $0c70, $0c90, $0020, $0c80, $5e66, $2002, $0000, $0035
|
||||
dw $0f70, $0f80, $0010, $0f78, $5e67, $2060, $0000, $0036
|
||||
dw $0430, $0468, $0038, $044c, $6a6a, $1000, $0000, $0037
|
||||
dw $04d8, $04f8, $0020, $04e8, $6a6a, $100c, $0000, $0038
|
||||
dw $0688, $06b0, $0028, $069c, $6b6b, $1004, $0000, $0039
|
||||
dw $08d0, $08f0, $0020, $08e0, $6c6c, $100e, $0000, $003a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $100c, $0000, $003b
|
||||
dw $0d38, $0d58, $0020, $0d48, $6e6e, $101a, $0001, $003c
|
||||
dw $0d90, $0da0, $0010, $0d98, $6e6e, $1020, $0000, $003d
|
||||
dw $06a0, $07b0, $0110, $0728, $7373, $1016, $0000, $003e
|
||||
dw $0830, $09b0, $0180, $08f0, $7474, $1010, $0000, $003f
|
||||
dw $0e78, $0e88, $0010, $0e80, $7777, $1002, $0001, $0040
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $101c, $0000, $0041
|
||||
dw $0458, $0540, $00e8, $04cc, $0202, $0000, $0000, $0001
|
||||
dw $0058, $0058, $0000, $0058, $0008, $0000, $0000, $0003
|
||||
dw $0178, $0178, $0000, $0178, $0008, $0000, $0000, $0004
|
||||
dw $0388, $0388, $0000, $0388, $0009, $0000, $0000, $0005
|
||||
dw $0480, $05b0, $0130, $0518, $0a0a, $0000, $0000, $0006
|
||||
dw $0f70, $0f90, $0020, $0f80, $0f0f, $0000, $0000, $0007
|
||||
dw $0078, $0098, $0020, $0088, $1010, $0000, $0000, $0008
|
||||
dw $0138, $0158, $0020, $0148, $1010, $0000, $0000, $0009
|
||||
dw $02e8, $0348, $0060, $0318, $1111, $0000, $0000, $000a
|
||||
dw $0478, $04d0, $0058, $04a4, $1212, $0000, $0000, $000b
|
||||
dw $0510, $0538, $0028, $0524, $1212, $0000, $0000, $000c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1515, $0000, $0000, $000d
|
||||
dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0001, $000e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1515, $0000, $0000, $000f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $0000, $0000, $0010
|
||||
dw $0350, $0390, $0040, $0370, $1821, $0000, $0000, $0011
|
||||
dw $0670, $06a8, $0038, $068c, $1b23, $0000, $0000, $0012
|
||||
dw $0898, $09b0, $0118, $0924, $1b24, $0000, $0000, $0013
|
||||
dw $0a40, $0ba0, $0160, $0af0, $2525, $0000, $0000, $0014
|
||||
dw $0c70, $0c90, $0020, $0c80, $1e26, $0000, $0000, $0015
|
||||
dw $0f70, $0f80, $0010, $0f78, $1e27, $0000, $0000, $0016
|
||||
dw $0430, $0468, $0038, $044c, $2a2a, $0000, $0000, $0017
|
||||
dw $04d8, $04f8, $0020, $04e8, $2a2a, $0000, $0000, $0018
|
||||
dw $0688, $06b0, $0028, $069c, $2b2b, $0000, $0000, $0019
|
||||
dw $08d0, $08f0, $0020, $08e0, $2c2c, $0000, $0000, $001a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $0000, $0000, $001b
|
||||
dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0001, $001c
|
||||
dw $0d90, $0da0, $0010, $0d98, $2e2e, $0000, $0000, $001d
|
||||
dw $06a0, $07b0, $0110, $0728, $3333, $0000, $0000, $001e
|
||||
dw $0830, $09b0, $0180, $08f0, $3434, $0000, $0000, $001f
|
||||
dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0001, $0020
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $0000, $0000, $0021
|
||||
dw $0458, $0540, $00e8, $04cc, $4242, $0000, $0000, $0022
|
||||
dw $0058, $0058, $0000, $0058, $4048, $0000, $0000, $0023
|
||||
dw $0178, $0178, $0000, $0178, $4048, $0000, $0000, $0024
|
||||
dw $0388, $0388, $0000, $0388, $4049, $0000, $0000, $0025
|
||||
dw $0480, $05b0, $0130, $0518, $4a4a, $0000, $0000, $0026
|
||||
dw $0f70, $0f90, $0020, $0f80, $4f4f, $0000, $0000, $0027
|
||||
dw $0078, $0098, $0020, $0088, $5050, $0000, $0000, $0028
|
||||
dw $0138, $0158, $0020, $0148, $5050, $0000, $0000, $0029
|
||||
dw $02e8, $0348, $0060, $0318, $5151, $0000, $0000, $002a
|
||||
dw $0478, $04d0, $0058, $04a4, $5252, $0000, $0000, $002b
|
||||
dw $0510, $0538, $0028, $0524, $5252, $0000, $0000, $002c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5555, $0000, $0000, $002d
|
||||
dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0001, $002e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5555, $0000, $0000, $002f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $0000, $0000, $0030
|
||||
dw $0350, $0390, $0040, $0370, $5861, $0000, $0000, $0031
|
||||
dw $0670, $06a8, $0038, $068c, $5b63, $0000, $0000, $0032
|
||||
dw $0898, $09b0, $0118, $0924, $5b64, $0000, $0000, $0033
|
||||
dw $0a40, $0ba0, $0160, $0af0, $6565, $0000, $0000, $0034
|
||||
dw $0c70, $0c90, $0020, $0c80, $5e66, $0000, $0000, $0035
|
||||
dw $0f70, $0f80, $0010, $0f78, $5e67, $0000, $0000, $0036
|
||||
dw $0430, $0468, $0038, $044c, $6a6a, $0000, $0000, $0037
|
||||
dw $04d8, $04f8, $0020, $04e8, $6a6a, $0000, $0000, $0038
|
||||
dw $0688, $06b0, $0028, $069c, $6b6b, $0000, $0000, $0039
|
||||
dw $08d0, $08f0, $0020, $08e0, $6c6c, $0000, $0000, $003a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $0000, $0000, $003b
|
||||
dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0001, $003c
|
||||
dw $0d90, $0da0, $0010, $0d98, $6e6e, $0000, $0000, $003d
|
||||
dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e
|
||||
dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f
|
||||
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0001, $0040
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041
|
||||
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
|
||||
dw $0288, $02c0, $0038, $02a4, $8189, $1782, $0000, $0002 ;Zora (unused)
|
||||
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused)
|
||||
OWWestEdges:
|
||||
dw $0070, $00a0, $0030, $0088, $0202, $00e0, $0000, $0000
|
||||
dw $0068, $0078, $0010, $0070, $0505, $0060, $0000, $0001
|
||||
dw $0068, $0088, $0020, $0078, $0707, $00e0, $0000, $0002
|
||||
dw $0318, $0368, $0050, $0340, $050d, $1660, $0000, $0003
|
||||
dw $0450, $0488, $0038, $046c, $1212, $00e0, $0000, $0004
|
||||
dw $0560, $05a0, $0040, $0580, $1212, $08e0, $0000, $0005
|
||||
dw $0488, $0500, $0078, $04c4, $1313, $0360, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1313, $08e0, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1414, $04e0, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1515, $04e0, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1616, $01e0, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1616, $04e0, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1616, $08e0, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1717, $00e0, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1717, $01e0, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1b1b, $06e0, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $2222, $05e0, $0000, $0010
|
||||
dw $0878, $08a8, $0030, $0890, $2525, $01e0, $0000, $0011
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $2929, $0960, $0000, $0012
|
||||
dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0960, $0000, $0013
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0360, $0000, $0014
|
||||
dw $0af0, $0b40, $0050, $0b18, $2c2c, $05e0, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $08a0, $0000, $0016
|
||||
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $061c, $0001, $604a ;Stone Bridge (exit only)
|
||||
dw $0b68, $0b98, $0030, $0b80, $2d2d, $08e0, $0000, $0017
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $01e0, $0000, $0018
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0660, $0001, $0019
|
||||
dw $0c50, $0db8, $0168, $0d04, $3333, $05e0, $0000, $001a
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3434, $02e0, $0000, $001b
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3434, $05e0, $0001, $001c
|
||||
dw $0d34, $0db8, $0084, $0d76, $3434, $08e0, $0000, $001d
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $03e0, $0000, $001e
|
||||
dw $0f78, $0fa8, $0030, $0f90, $3a3a, $0860, $0000, $001f
|
||||
dw $0f18, $0f18, $0000, $0f18, $3b3b, $0660, $0000, $0020
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $08e0, $0000, $0021
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $04e0, $0000, $0022
|
||||
dw $0f78, $0fb8, $0040, $0f98, $353d, $1860, $0000, $0023
|
||||
dw $0f20, $0f40, $0020, $0f30, $3f3f, $05e0, $0001, $0024
|
||||
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0860, $0000, $0025
|
||||
dw $0070, $00a0, $0030, $0088, $4242, $00e0, $0000, $0026
|
||||
dw $0068, $0078, $0010, $0070, $4545, $0060, $0000, $0027
|
||||
dw $0068, $0088, $0020, $0078, $4747, $00e0, $0000, $0028
|
||||
dw $0318, $0368, $0050, $0340, $454d, $1660, $0000, $0029
|
||||
dw $0450, $0488, $0038, $046c, $5252, $00e0, $0000, $002a
|
||||
dw $0560, $05a0, $0040, $0580, $5252, $08e0, $0000, $002b
|
||||
dw $0488, $0500, $0078, $04c4, $5353, $0360, $0000, $002c
|
||||
dw $0538, $05a8, $0070, $0570, $5353, $08e0, $0000, $002d
|
||||
dw $0470, $05a8, $0138, $050c, $5454, $04e0, $0000, $002e
|
||||
dw $0470, $0598, $0128, $0504, $5555, $04e0, $0000, $002f
|
||||
dw $0480, $0488, $0008, $0484, $5656, $01e0, $0001, $0030
|
||||
dw $04b0, $0510, $0060, $04e0, $5656, $04e0, $0000, $0031
|
||||
dw $0560, $0588, $0028, $0574, $5656, $08e0, $0000, $0032
|
||||
dw $0450, $0458, $0008, $0454, $5757, $00e0, $0001, $0033
|
||||
dw $0480, $04a8, $0028, $0494, $5757, $01e0, $0000, $0034
|
||||
dw $0908, $0948, $0040, $0928, $6262, $05e0, $0000, $0035
|
||||
dw $0878, $08a8, $0030, $0890, $6565, $01e0, $0000, $0036
|
||||
dw $0b60, $0b68, $0008, $0b64, $6969, $08e0, $0000, $0037
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $6969, $0960, $0000, $0038
|
||||
dw $0b60, $0ba0, $0040, $0b80, $6a6a, $0960, $0000, $0039
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $6c6c, $0360, $0000, $003a
|
||||
dw $0af0, $0b40, $0050, $0b18, $6c6c, $05e0, $0000, $003b
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $08a0, $0000, $003c
|
||||
dw $0b68, $0b98, $0030, $0b80, $6d6d, $08e0, $0000, $003d
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $01e0, $0000, $003e
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0660, $0001, $003f
|
||||
dw $0c50, $0db8, $0168, $0d04, $7373, $05e0, $0000, $0040
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7474, $02e0, $0000, $0041
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7474, $05e0, $0001, $0042
|
||||
dw $0d34, $0db8, $0084, $0d76, $7474, $08e0, $0000, $0043
|
||||
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0660, $0000, $0044
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $08e0, $0000, $0045
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $04e0, $0000, $0046
|
||||
dw $0f78, $0fb8, $0040, $0f98, $757d, $1860, $0000, $0047
|
||||
dw $0f20, $0f40, $0020, $0f30, $7f7f, $05e0, $0001, $0048
|
||||
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0860, $0000, $0049
|
||||
dw $0070, $00a0, $0030, $0088, $0202, $0000, $0000, $0000
|
||||
dw $0068, $0078, $0010, $0070, $0505, $0000, $0000, $0001
|
||||
dw $0068, $0088, $0020, $0078, $0707, $0000, $0000, $0002
|
||||
dw $0318, $0368, $0050, $0340, $050d, $0000, $0000, $0003
|
||||
dw $0450, $0488, $0038, $046c, $1212, $0000, $0000, $0004
|
||||
dw $0560, $05a0, $0040, $0580, $1212, $0000, $0000, $0005
|
||||
dw $0488, $0500, $0078, $04c4, $1313, $0000, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1313, $0000, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1414, $0000, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1515, $0000, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1616, $0000, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1616, $0000, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1616, $0000, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1717, $0000, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1717, $0000, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1b1b, $0000, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $2222, $0000, $0000, $0010
|
||||
dw $0878, $08a8, $0030, $0890, $2525, $0000, $0000, $0011
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $2929, $0000, $0000, $0012
|
||||
dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0000, $0000, $0013
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014
|
||||
dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016
|
||||
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0001, $604a ;Stone Bridge (exit only)
|
||||
dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0001, $0019
|
||||
dw $0c50, $0db8, $0168, $0d04, $3333, $0000, $0000, $001a
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0001, $001c
|
||||
dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e
|
||||
dw $0f78, $0fa8, $0030, $0f90, $3a3a, $0000, $0000, $001f
|
||||
dw $0f18, $0f18, $0000, $0f18, $3b3b, $0000, $0000, $0020
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022
|
||||
dw $0f78, $0fb8, $0040, $0f98, $353d, $0000, $0000, $0023
|
||||
dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0001, $0024
|
||||
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0000, $0000, $0025
|
||||
dw $0070, $00a0, $0030, $0088, $4242, $0000, $0000, $0026
|
||||
dw $0068, $0078, $0010, $0070, $4545, $0000, $0000, $0027
|
||||
dw $0068, $0088, $0020, $0078, $4747, $0000, $0000, $0028
|
||||
dw $0318, $0368, $0050, $0340, $454d, $0000, $0000, $0029
|
||||
dw $0450, $0488, $0038, $046c, $5252, $0000, $0000, $002a
|
||||
dw $0560, $05a0, $0040, $0580, $5252, $0000, $0000, $002b
|
||||
dw $0488, $0500, $0078, $04c4, $5353, $0000, $0000, $002c
|
||||
dw $0538, $05a8, $0070, $0570, $5353, $0000, $0000, $002d
|
||||
dw $0470, $05a8, $0138, $050c, $5454, $0000, $0000, $002e
|
||||
dw $0470, $0598, $0128, $0504, $5555, $0000, $0000, $002f
|
||||
dw $0480, $0488, $0008, $0484, $5656, $0000, $0001, $0030
|
||||
dw $04b0, $0510, $0060, $04e0, $5656, $0000, $0000, $0031
|
||||
dw $0560, $0588, $0028, $0574, $5656, $0000, $0000, $0032
|
||||
dw $0450, $0458, $0008, $0454, $5757, $0000, $0001, $0033
|
||||
dw $0480, $04a8, $0028, $0494, $5757, $0000, $0000, $0034
|
||||
dw $0908, $0948, $0040, $0928, $6262, $0000, $0000, $0035
|
||||
dw $0878, $08a8, $0030, $0890, $6565, $0000, $0000, $0036
|
||||
dw $0b60, $0b68, $0008, $0b64, $6969, $0000, $0000, $0037
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $6969, $0000, $0000, $0038
|
||||
dw $0b60, $0ba0, $0040, $0b80, $6a6a, $0000, $0000, $0039
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $6c6c, $0000, $0000, $003a
|
||||
dw $0af0, $0b40, $0050, $0b18, $6c6c, $0000, $0000, $003b
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $0000, $0000, $003c
|
||||
dw $0b68, $0b98, $0030, $0b80, $6d6d, $0000, $0000, $003d
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $0000, $0000, $003e
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0001, $003f
|
||||
dw $0c50, $0db8, $0168, $0d04, $7373, $0000, $0000, $0040
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7474, $0000, $0000, $0041
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0001, $0042
|
||||
dw $0d34, $0db8, $0084, $0d76, $7474, $0000, $0000, $0043
|
||||
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0000, $0000, $0044
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $0000, $0000, $0045
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $0000, $0000, $0046
|
||||
dw $0f78, $0fb8, $0040, $0f98, $757d, $0000, $0000, $0047
|
||||
dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0001, $0048
|
||||
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0000, $0000, $0049
|
||||
OWEastEdges:
|
||||
dw $0070, $00a0, $0030, $0088, $0001, $0180, $0000, $0000
|
||||
dw $0068, $0078, $0010, $0070, $0304, $0180, $0000, $0001
|
||||
dw $0068, $0088, $0020, $0078, $0506, $0180, $0000, $0002
|
||||
dw $0318, $0368, $0050, $0340, $030c, $1780, $0000, $0003
|
||||
dw $0450, $0488, $0038, $046c, $1111, $00c0, $0000, $0004
|
||||
dw $0560, $05a0, $0040, $0580, $1111, $08c0, $0000, $0005
|
||||
dw $0488, $0500, $0078, $04c4, $1212, $0340, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1212, $08c0, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1313, $04c0, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1414, $04c0, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1515, $01c0, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1515, $04c0, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1515, $08c0, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1616, $00c0, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1616, $01c0, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1a1a, $06c0, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $1821, $1680, $0000, $0010
|
||||
dw $0878, $08a8, $0030, $0890, $1b24, $1280, $0000, $0011
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $2828, $0940, $0000, $0012 ;Race Game
|
||||
dw $0b60, $0ba0, $0040, $0b80, $2929, $0940, $0000, $0013
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $2b2b, $0340, $0000, $0014
|
||||
dw $0af0, $0b40, $0050, $0b18, $2b2b, $05c0, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $08c0, $0000, $0016
|
||||
dw $0b68, $0b98, $0030, $0b80, $2c2c, $08c0, $0000, $0018
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $01c0, $0000, $0019
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0640, $0001, $001a
|
||||
dw $0c50, $0db8, $0168, $0d04, $3232, $05c0, $0000, $001b
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3333, $02c0, $0000, $001c
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3333, $05c0, $0001, $001d
|
||||
dw $0d34, $0db8, $0084, $0d76, $3333, $08c0, $0000, $001e
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3039, $1480, $0000, $001f
|
||||
dw $0f78, $0fa8, $0030, $0f90, $3039, $1980, $0000, $0020
|
||||
dw $0f18, $0f18, $0000, $0f18, $3a3a, $0640, $0000, $0021
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $08c0, $0000, $0022
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $04c0, $0000, $0023
|
||||
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $08c0, $0000, $0024
|
||||
dw $0f20, $0f40, $0020, $0f30, $353e, $1680, $0001, $0025
|
||||
dw $0f70, $0fb8, $0048, $0f94, $353e, $1880, $0000, $0026
|
||||
dw $0070, $00a0, $0030, $0088, $4041, $0180, $0000, $0027 ;Skull Woods
|
||||
dw $0068, $0078, $0010, $0070, $4344, $0180, $0000, $0028
|
||||
dw $0068, $0088, $0020, $0078, $4546, $0180, $0000, $0029
|
||||
dw $0318, $0368, $0050, $0340, $434c, $1780, $0000, $002a
|
||||
dw $0450, $0488, $0038, $046c, $5151, $00c0, $0000, $002b
|
||||
dw $0560, $05a0, $0040, $0580, $5151, $08c0, $0000, $002c
|
||||
dw $0488, $0500, $0078, $04c4, $5252, $0340, $0000, $002d
|
||||
dw $0538, $05a8, $0070, $0570, $5252, $08c0, $0000, $002e
|
||||
dw $0470, $05a8, $0138, $050c, $5353, $04c0, $0000, $002f
|
||||
dw $0470, $0598, $0128, $0504, $5454, $04c0, $0000, $0030
|
||||
dw $0480, $0488, $0008, $0484, $5555, $01c0, $0001, $0031
|
||||
dw $04b0, $0510, $0060, $04e0, $5555, $04c0, $0000, $0032
|
||||
dw $0560, $0588, $0028, $0574, $5555, $08c0, $0000, $0033
|
||||
dw $0450, $0458, $0008, $0454, $5656, $00c0, $0001, $0034
|
||||
dw $0480, $04a8, $0028, $0494, $5656, $01c0, $0000, $0035
|
||||
dw $0908, $0948, $0040, $0928, $5861, $1680, $0000, $0036
|
||||
dw $0878, $08a8, $0030, $0890, $5b64, $1280, $0000, $0037
|
||||
dw $0b60, $0b68, $0008, $0b64, $6868, $08c0, $0000, $0038 ;Dig Game
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $6868, $0940, $0000, $0039
|
||||
dw $0b60, $0ba0, $0040, $0b80, $6969, $0940, $0000, $003a
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $6b6b, $0340, $0000, $003b
|
||||
dw $0af0, $0b40, $0050, $0b18, $6b6b, $05c0, $0000, $003c
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $08c0, $0000, $003d
|
||||
dw $0b68, $0b98, $0030, $0b80, $6c6c, $08c0, $0000, $003e
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $01c0, $0000, $003f
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0640, $0001, $0040
|
||||
dw $0c50, $0db8, $0168, $0d04, $7272, $05c0, $0000, $0041
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7373, $02c0, $0000, $0042
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7373, $05c0, $0001, $0043
|
||||
dw $0d34, $0db8, $0084, $0d76, $7373, $08c0, $0000, $0044
|
||||
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0640, $0000, $0045
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $08c0, $0000, $0046
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $04c0, $0000, $0047
|
||||
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $08c0, $0000, $0048
|
||||
dw $0f20, $0f40, $0020, $0f30, $757e, $1680, $0001, $0049
|
||||
dw $0f70, $0fb8, $0048, $0f94, $757e, $1880, $0000, $004a
|
||||
dw $0058, $00c0, $0068, $008c, $8080, $0020, $0001, $0017 ;Hobo (unused)
|
||||
dw $0070, $00a0, $0030, $0088, $0001, $0000, $0000, $0000
|
||||
dw $0068, $0078, $0010, $0070, $0304, $0000, $0000, $0001
|
||||
dw $0068, $0088, $0020, $0078, $0506, $0000, $0000, $0002
|
||||
dw $0318, $0368, $0050, $0340, $030c, $0000, $0000, $0003
|
||||
dw $0450, $0488, $0038, $046c, $1111, $0000, $0000, $0004
|
||||
dw $0560, $05a0, $0040, $0580, $1111, $0000, $0000, $0005
|
||||
dw $0488, $0500, $0078, $04c4, $1212, $0000, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1212, $0000, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1313, $0000, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1414, $0000, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1515, $0000, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1515, $0000, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1515, $0000, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1616, $0000, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1616, $0000, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1a1a, $0000, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $1821, $0000, $0000, $0010
|
||||
dw $0878, $08a8, $0030, $0890, $1b24, $0000, $0000, $0011
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $2828, $0000, $0000, $0012 ;Race Game
|
||||
dw $0b60, $0ba0, $0040, $0b80, $2929, $0000, $0000, $0013
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $2b2b, $0000, $0000, $0014
|
||||
dw $0af0, $0b40, $0050, $0b18, $2b2b, $0000, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $0000, $0000, $0016
|
||||
dw $0b68, $0b98, $0030, $0b80, $2c2c, $0000, $0000, $0018
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $0000, $0000, $0019
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0001, $001a
|
||||
dw $0c50, $0db8, $0168, $0d04, $3232, $0000, $0000, $001b
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0001, $001d
|
||||
dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f
|
||||
dw $0f78, $0fa8, $0030, $0f90, $3039, $0000, $0000, $0020
|
||||
dw $0f18, $0f18, $0000, $0f18, $3a3a, $0000, $0000, $0021
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023
|
||||
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $0000, $0000, $0024
|
||||
dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0001, $0025
|
||||
dw $0f70, $0fb8, $0048, $0f94, $353e, $0000, $0000, $0026
|
||||
dw $0070, $00a0, $0030, $0088, $4041, $0000, $0000, $0027 ;Skull Woods
|
||||
dw $0068, $0078, $0010, $0070, $4344, $0000, $0000, $0028
|
||||
dw $0068, $0088, $0020, $0078, $4546, $0000, $0000, $0029
|
||||
dw $0318, $0368, $0050, $0340, $434c, $0000, $0000, $002a
|
||||
dw $0450, $0488, $0038, $046c, $5151, $0000, $0000, $002b
|
||||
dw $0560, $05a0, $0040, $0580, $5151, $0000, $0000, $002c
|
||||
dw $0488, $0500, $0078, $04c4, $5252, $0000, $0000, $002d
|
||||
dw $0538, $05a8, $0070, $0570, $5252, $0000, $0000, $002e
|
||||
dw $0470, $05a8, $0138, $050c, $5353, $0000, $0000, $002f
|
||||
dw $0470, $0598, $0128, $0504, $5454, $0000, $0000, $0030
|
||||
dw $0480, $0488, $0008, $0484, $5555, $0000, $0001, $0031
|
||||
dw $04b0, $0510, $0060, $04e0, $5555, $0000, $0000, $0032
|
||||
dw $0560, $0588, $0028, $0574, $5555, $0000, $0000, $0033
|
||||
dw $0450, $0458, $0008, $0454, $5656, $0000, $0001, $0034
|
||||
dw $0480, $04a8, $0028, $0494, $5656, $0000, $0000, $0035
|
||||
dw $0908, $0948, $0040, $0928, $5861, $0000, $0000, $0036
|
||||
dw $0878, $08a8, $0030, $0890, $5b64, $0000, $0000, $0037
|
||||
dw $0b60, $0b68, $0008, $0b64, $6868, $0000, $0000, $0038 ;Dig Game
|
||||
dw $0bb8, $0bc8, $0010, $0bc0, $6868, $0000, $0000, $0039
|
||||
dw $0b60, $0ba0, $0040, $0b80, $6969, $0000, $0000, $003a
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $6b6b, $0000, $0000, $003b
|
||||
dw $0af0, $0b40, $0050, $0b18, $6b6b, $0000, $0000, $003c
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $0000, $0000, $003d
|
||||
dw $0b68, $0b98, $0030, $0b80, $6c6c, $0000, $0000, $003e
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $0000, $0000, $003f
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0001, $0040
|
||||
dw $0c50, $0db8, $0168, $0d04, $7272, $0000, $0000, $0041
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7373, $0000, $0000, $0042
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0001, $0043
|
||||
dw $0d34, $0db8, $0084, $0d76, $7373, $0000, $0000, $0044
|
||||
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0000, $0000, $0045
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $0000, $0000, $0046
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047
|
||||
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048
|
||||
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0001, $0049
|
||||
dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a
|
||||
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0001, $0017 ;Hobo (unused)
|
||||
|
||||
org $aab9a0 ;PC 1539a0
|
||||
OWSpecialDestIndex:
|
||||
|
||||
@@ -168,7 +168,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ChangeBootsColorForFakeBoots:
|
||||
LDA.l FakeBoots : AND.w #$00FF : BEQ +
|
||||
LDA.l BootsEquipment : AND.w #$00FF : BNE +
|
||||
LDA.l EquipmentSRAM+$15 : AND.w #$00FF : BNE +
|
||||
LDA.w #$F851 ; address of ItemMenu_ItemIcons_usused_nothing, which has the fake boots now
|
||||
BRA ++
|
||||
+ LDA.w #$F821 ; address of ItemMenu_ItemIcons_boots
|
||||
@@ -464,7 +464,40 @@ dw $2990 ; green pendant
|
||||
dw $298B ; blue pendant
|
||||
dw $299B ; red pendant
|
||||
;================================================================================
|
||||
DrawBossSouls:
|
||||
PHP : PHB : PHK : PLB
|
||||
REP #$30 ; Set 16-bit accumulator & index registers
|
||||
LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals
|
||||
-
|
||||
LDA.l .row0, X : STA.w GFXStripes+$02EA, X
|
||||
LDA.l .row1, X : STA.w GFXStripes+$032A, X
|
||||
LDA.l .row2, X : STA.w GFXStripes+$036A, X
|
||||
LDA.l .row3, X : STA.w GFXStripes+$03AA, X
|
||||
LDA.l .row4, X : STA.w GFXStripes+$03EA, X
|
||||
LDA.l .row5, X : STA.w GFXStripes+$042A, X
|
||||
LDA.l .row6, X : STA.w GFXStripes+$046A, X
|
||||
LDA.l .row7, X : STA.w GFXStripes+$04AA, X
|
||||
LDA.l .row8, X : STA.w GFXStripes+$04EA, X
|
||||
INX #2 : CPX.w #$0014 : BCC -
|
||||
|
||||
PLB : PLP
|
||||
RTL
|
||||
;================================================================================
|
||||
.row0 dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
|
||||
.row1 dw $28FC, $31A4, $31A5, $24F5, $31A6, $31A7, $24F5, $31A8, $31A9, $68FC
|
||||
.row2 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
|
||||
.row3 dw $28FC, $31AA, $31AB, $24F5, $31AC, $31AD, $24F5, $31AE, $31AF, $68FC
|
||||
.row4 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
|
||||
.row5 dw $28FC, $31B0, $31B1, $24F5, $31B2, $31B3, $24F5, $31B4, $31B5, $68FC
|
||||
.row6 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
|
||||
.row7 dw $28FC, $24F5, $31B6, $31B7, $24F5, $24F5, $31B8, $31B9, $24F5, $68FC
|
||||
.row8 dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
|
||||
;================================================================================
|
||||
DrawPendantCrystalDiagram:
|
||||
LDA.l HudFlag : AND.b #$40 : BEQ +
|
||||
JML.l DrawBossSouls
|
||||
+
|
||||
|
||||
PHP : PHB : PHK : PLB
|
||||
REP #$30 ; Set 16-bit accumulator & index registers
|
||||
LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals
|
||||
|
||||
150
pseudoflute.asm
150
pseudoflute.asm
@@ -1,150 +0,0 @@
|
||||
SelectFirstFluteSpot:
|
||||
LDA.l FluteBitfield
|
||||
BNE +
|
||||
RTL
|
||||
+ LDA.b #$07
|
||||
STA.w $1AF0
|
||||
.try_next
|
||||
LDA.w $1AF0
|
||||
INC A
|
||||
AND.b #$07
|
||||
STA.w $1AF0
|
||||
TAX
|
||||
|
||||
LDA.l FluteBitfield
|
||||
AND.l $8AB7A3, X
|
||||
BEQ .try_next
|
||||
RTL
|
||||
|
||||
SelectFluteNext:
|
||||
LDA.l FluteBitfield
|
||||
BEQ InvalidBeep
|
||||
|
||||
.try_next
|
||||
LDA.w $1AF0
|
||||
INC A
|
||||
AND.b #$07
|
||||
STA.w $1AF0
|
||||
TAX
|
||||
|
||||
LDA.l FluteBitfield
|
||||
AND.l $8AB7A3, X
|
||||
BEQ .try_next
|
||||
|
||||
LDA.b #$20
|
||||
STA.w $012F
|
||||
RTL
|
||||
|
||||
SelectFlutePrev:
|
||||
LDA.l FluteBitfield
|
||||
BEQ InvalidBeep
|
||||
|
||||
.try_next
|
||||
LDA.w $1AF0
|
||||
DEC A
|
||||
AND.b #$07
|
||||
STA.w $1AF0
|
||||
TAX
|
||||
|
||||
LDA.l FluteBitfield
|
||||
AND.l $8AB7A3, X
|
||||
BEQ .try_next
|
||||
|
||||
LDA.b #$20
|
||||
STA.w $012F
|
||||
RTL
|
||||
|
||||
InvalidBeep:
|
||||
LDA.b #$3C
|
||||
STA.w $012E
|
||||
RTL
|
||||
|
||||
SetFluteSpotPalette:
|
||||
XBA
|
||||
LDA.l FluteBitfield
|
||||
AND.l $8AB7A3, X
|
||||
BEQ .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 FluteBitfield
|
||||
ORA.l $8AB7A3, X
|
||||
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
|
||||
JML MaybeMarkFluteSpotVisited
|
||||
|
||||
DrawFluteIcon:
|
||||
AND.w #$00FF
|
||||
CMP.w #$0002
|
||||
BCC .write
|
||||
LDA.l FluteBitfield
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF
|
||||
BNE .pseudo
|
||||
.real
|
||||
LDA.w #$0003
|
||||
BRA .write
|
||||
.pseudo
|
||||
LDA.w #$0002
|
||||
.write
|
||||
STA.b $02
|
||||
RTL
|
||||
|
||||
CheckFluteInHUD:
|
||||
LDA.l $7EF33F, X
|
||||
AND.w #$00FF ; what we wrote over
|
||||
CPX.w #$000D
|
||||
BNE .done
|
||||
CMP.w #$0002
|
||||
BCC .done
|
||||
LDA.l FluteBitfield
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF
|
||||
BNE .pseudo
|
||||
.real
|
||||
LDA.w #$0003
|
||||
BRA .done
|
||||
.pseudo
|
||||
LDA.w #$0002
|
||||
.done
|
||||
RTL
|
||||
25
ram.asm
25
ram.asm
@@ -221,8 +221,6 @@ ItemReceiptMethod = $7E02E9 ;
|
||||
;
|
||||
TileActBE = $7E02EF ; Bitfield used by breakables and entrances. b b b b d d d d
|
||||
; b = Breakables | d = Entrances
|
||||
LinkThud = $7E02F8 ; When set, guarantees a thud on landing
|
||||
FollowerNoDraw = $7E02F9 ; When set, prevents follower from drawing and forces a game mode check
|
||||
UseY1 = $7E0301 ; Bitfield for Y-item usage: b p - a x z h r
|
||||
; b = Boomerang | p = Powder | a = Bow | x = Hammer (tested, never set)
|
||||
; z = Rods (tested, never set) | h = Hammer | r = Rods
|
||||
@@ -272,8 +270,6 @@ DungeonID = $7E040C ; High byte mostly unused but sometimes read.
|
||||
;
|
||||
TransitionDirection = $7E0418 ; OW: 0=N 1=S 2=W 3=E UW: 0=S 1=N 2=E 3=W
|
||||
;
|
||||
ManipIndex = $7E042C ; Index of manipulable tile. Word length.
|
||||
;
|
||||
TrapDoorFlag = $7E0468 ; Flag that is set when trap doors are down. 2 bytes
|
||||
;
|
||||
LayerAdjustment = $7E047A ; Flags layer adjustments. Arms EG.
|
||||
@@ -287,8 +283,6 @@ OWEntranceCutscene = $7E04C6 ;
|
||||
;
|
||||
HeartBeepTimer = $7E04CA ;
|
||||
;
|
||||
ManipTileMapX = $7E0540 ; Tilemap X position of manipulable tile. $10 x 2 bytes
|
||||
;
|
||||
CameraTargetN = $7E0610 ; Camera scroll target for directions NSEW
|
||||
CameraTargetS = $7E0612 ;
|
||||
CameraTargetW = $7E0614 ;
|
||||
@@ -330,7 +324,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
|
||||
SkipBeeTrapDisguise = $7E072D ; Flag to skip bee trap disguise during draw routine
|
||||
SkipBeeTrapDisguise = $7E072C ; Flag to skip bee trap disguise during draw routine
|
||||
|
||||
SprDropsItem = $7E0730 ; Array for whether a sprite drops an item 0x16
|
||||
SprItemReceipt = $7E0740 ; Array for item id for each sprite 0x16
|
||||
@@ -347,14 +341,11 @@ 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
|
||||
;
|
||||
OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc.
|
||||
;
|
||||
DuckPose = $7E0AF4 ; Used for duck gfx (2 bytes), zero value stops duck drawing in gfx slot
|
||||
;
|
||||
ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers
|
||||
; $0000 - no transfer, do nothing
|
||||
; bit 7 reset - offset into ROM table
|
||||
@@ -372,7 +363,6 @@ EnemyStunTimer = $7E0B58 ; Auto-decrementing timer for stunned enemies.
|
||||
;
|
||||
BowDryFire = $7E0B9A ; If set, arrows are deleted immediately
|
||||
;
|
||||
SecretId = $7E0B9C ; Controls the secret spawned from bushes, pots, rocks, etc.
|
||||
SaveFileIndex = $7E0B9D ;
|
||||
;
|
||||
SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes.
|
||||
@@ -447,8 +437,7 @@ SpriteSubPixelZ = $7E0F90 ;
|
||||
CurrentSpriteSlot = $7E0FA0 ; Holds the current sprite/ancilla's index
|
||||
;
|
||||
FreezeSprites = $7E0FC1 ; "Seems to freeze sprites"
|
||||
LinkPosXCache = $7E0FC2 ; Cache of Link's coordinates
|
||||
LinkPosYCache = $7E0FC4 ; - Done at the beginning of Link_Main every frame
|
||||
;
|
||||
GfxChrHalfSlotVerify = $7E0FC6 ; Mirrors $0AAA, set to >= $03 when VRAM has temp graphics loaded
|
||||
PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack.
|
||||
;
|
||||
@@ -698,7 +687,8 @@ MapTotalsWRAM: skip $10 ; / on boot for tracking.
|
||||
skip $20 ; Reserved for general dungeon tracking data. May have over
|
||||
; allocated here. Feel free to reassign.
|
||||
MapCompassFlag: skip 2 ; Used to flag overworld map drawing.
|
||||
skip $3E ; Unused
|
||||
SpriteInvincibilityFlag: skip $10 ; Used for boss soul shuffle
|
||||
skip $2E ; Unused
|
||||
skip $260 ; Unused
|
||||
DialogBuffer: skip $100 ; Dialog Buffer
|
||||
;
|
||||
@@ -852,8 +842,6 @@ endmacro
|
||||
%assertRAM(CutsceneFlag, $7E02E4)
|
||||
%assertRAM(ItemReceiptMethod, $7E02E9)
|
||||
%assertRAM(TileActBE, $7E02EF)
|
||||
%assertRAM(LinkThud, $7E02F8)
|
||||
%assertRAM(FollowerNoDraw, $7E02F9)
|
||||
%assertRAM(UseY1, $7E0301)
|
||||
%assertRAM(CurrentYItem, $7E0303)
|
||||
%assertRAM(AButtonAct, $7E0308)
|
||||
@@ -877,7 +865,6 @@ endmacro
|
||||
%assertRAM(OverworldIndexMirror, $7E040A)
|
||||
%assertRAM(DungeonID, $7E040C)
|
||||
%assertRAM(TransitionDirection, $7E0418)
|
||||
%assertRAM(ManipIndex, $7E042C)
|
||||
%assertRAM(TrapDoorFlag, $7E0468)
|
||||
%assertRAM(LayerAdjustment, $7E047A)
|
||||
%assertRAM(RoomIndexMirror, $7E048E)
|
||||
@@ -885,7 +872,6 @@ endmacro
|
||||
%assertRAM(Map16ChangeIndex, $7E04AC)
|
||||
%assertRAM(OWEntranceCutscene, $7E04C6)
|
||||
%assertRAM(HeartBeepTimer, $7E04CA)
|
||||
%assertRAM(ManipTileMapX, $7E0540)
|
||||
%assertRAM(CameraTargetN, $7E0610)
|
||||
%assertRAM(CameraTargetS, $7E0612)
|
||||
%assertRAM(CameraTargetW, $7E0614)
|
||||
@@ -915,7 +901,7 @@ endmacro
|
||||
%assertRAM(SpawnedItemFlag, $7E0726)
|
||||
%assertRAM(SpawnedItemMWPlayer, $7E0728)
|
||||
%assertRAM(EnemyDropIndicator, $7E072A)
|
||||
%assertRAM(SkipBeeTrapDisguise, $7E072D)
|
||||
%assertRAM(SkipBeeTrapDisguise, $7E072C)
|
||||
%assertRAM(SprDropsItem, $7E0730)
|
||||
%assertRAM(SprItemReceipt, $7E0740)
|
||||
%assertRAM(SprItemIndex, $7E0750)
|
||||
@@ -936,7 +922,6 @@ endmacro
|
||||
%assertRAM(OverlordYHigh, $7E0B20)
|
||||
%assertRAM(EnemyStunTimer, $7E0B58)
|
||||
%assertRAM(BowDryFire, $7E0B9A)
|
||||
%assertRAM(SecretId, $7E0B9C)
|
||||
%assertRAM(SaveFileIndex, $7E0B9D)
|
||||
%assertRAM(SpriteAncillaInteract, $7E0BA0)
|
||||
%assertRAM(AncillaVelocityY, $7E0C22)
|
||||
|
||||
@@ -466,6 +466,7 @@ Shopkeeper_BuyItem:
|
||||
PLX
|
||||
LDA.l ShopInventory, X
|
||||
JSL AttemptItemSubstitution
|
||||
JSL ResolveLootIDLong
|
||||
TAY : JSL Link_ReceiveItem
|
||||
LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X
|
||||
LDA.b #$00 : STA.l ShopEnableCount
|
||||
|
||||
152
souls.asm
Normal file
152
souls.asm
Normal file
@@ -0,0 +1,152 @@
|
||||
;================================================================================
|
||||
; Boss Souls
|
||||
;================================================================================
|
||||
SoulPaletteSet:
|
||||
LDA.l SpriteInvincibilityFlag, X
|
||||
BEQ .normal
|
||||
LDA.b #$FF
|
||||
STA.w $0CFE
|
||||
RTL
|
||||
.normal
|
||||
CMP.b #$08
|
||||
BNE +
|
||||
LDA.l $7FFA3C, X
|
||||
STA.w $0CFE
|
||||
+
|
||||
RTL
|
||||
;================================================================================
|
||||
SoulPaletteApply:
|
||||
AND.w #$F1FF
|
||||
PHA
|
||||
LDA.w $0CFE
|
||||
AND.w #$00FF
|
||||
CMP.w #$00FF
|
||||
BEQ .blackout
|
||||
.ice
|
||||
PLA
|
||||
ORA.w #$0400
|
||||
RTL
|
||||
.blackout
|
||||
PLA
|
||||
ORA.w #$0600
|
||||
RTL
|
||||
;================================================================================
|
||||
HelmasaurPaletteFix:
|
||||
LDA.w $0B89, X
|
||||
AND.b #$F1
|
||||
PHA
|
||||
LDA.l SpriteInvincibilityFlag, X
|
||||
BEQ .normal
|
||||
.blackout
|
||||
PLA
|
||||
ORA.b #$0A
|
||||
STA.w $0B89, X
|
||||
RTL
|
||||
.normal
|
||||
PLA
|
||||
STA.w $0B89, X
|
||||
RTL
|
||||
;================================================================================
|
||||
HelmasaurHammerFix:
|
||||
LDA.l SpriteInvincibilityFlag, X
|
||||
BEQ .normal
|
||||
LDA.b #$00
|
||||
RTL
|
||||
.normal
|
||||
LDA.w $0301
|
||||
AND.b #$0A
|
||||
RTL
|
||||
;================================================================================
|
||||
MoldormPaletteFix:
|
||||
.b
|
||||
LDA.b #$0B
|
||||
BRA .apply
|
||||
.d
|
||||
LDA.b #$0D
|
||||
.apply
|
||||
PHA
|
||||
LDA.l SpriteInvincibilityFlag, X
|
||||
BEQ .normal
|
||||
PLA
|
||||
LDA.b #$07
|
||||
BRA .write
|
||||
.normal
|
||||
PLA
|
||||
.write
|
||||
STA.w $0F50, X
|
||||
RTL
|
||||
;================================================================================
|
||||
CheckInvincibleFlag:
|
||||
LDA.l SpriteInvincibilityFlag, X
|
||||
BEQ .normal
|
||||
LDA.w $0E20, X
|
||||
SEC
|
||||
RTL
|
||||
.normal
|
||||
JML.l IsItReallyAMimic
|
||||
;================================================================================
|
||||
CheckBossSoul:
|
||||
PHA : PHX
|
||||
LDA.b #$00
|
||||
STA.l SpriteInvincibilityFlag, X
|
||||
; check if boss id
|
||||
LDX.b #.boss_ids_end-.boss_ids-1
|
||||
TYA
|
||||
|
||||
- CMP.l .boss_ids, X
|
||||
BEQ .match
|
||||
|
||||
DEX
|
||||
BPL -
|
||||
|
||||
.normal
|
||||
PLX : PLA
|
||||
STA.w $0E60, X
|
||||
AND.b #$0F
|
||||
STA.w $0F50, X
|
||||
RTL
|
||||
|
||||
.match
|
||||
; X is boss index
|
||||
|
||||
; make palette black
|
||||
LDA.b #$00
|
||||
LDX.b #$1D
|
||||
- STA.l $7EC462, X
|
||||
STA.l $7EC662, X
|
||||
DEX
|
||||
BPL -
|
||||
LDA.b #$01
|
||||
STA.b $15 ; update palette
|
||||
|
||||
PLX
|
||||
LDA.b #$01
|
||||
STA.l SpriteInvincibilityFlag, X
|
||||
|
||||
PLA
|
||||
|
||||
ORA.b #$40
|
||||
STA.w $06E0, X
|
||||
AND.b #$01
|
||||
ORA.b #$06
|
||||
STA.w $0F50, X
|
||||
RTL
|
||||
|
||||
.boss_ids:
|
||||
db $53 ; armos
|
||||
db $54 ; lanmolas
|
||||
db $09 ; moldorm
|
||||
db $92 ; helma king
|
||||
db $8C ; arrghus
|
||||
db $8D ; arrghus puff
|
||||
db $88 ; mothula
|
||||
db $CE ; blind
|
||||
db $A2 ; khold
|
||||
db $A3 ; khold shell
|
||||
db $BD ; vitreous big eye
|
||||
db $BE ; vitreous small eye
|
||||
db $CB ; trinexx
|
||||
db $CC ; trinexx
|
||||
db $CD ; trinexx
|
||||
db $7A ; agahnim
|
||||
..end
|
||||
@@ -1,126 +0,0 @@
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
34
sram.asm
34
sram.asm
@@ -190,10 +190,7 @@ ItemLimitCounts: skip 16 ; Keeps track of limited non-progressive items s
|
||||
; See: ItemSubstitutionRules in tables.asm
|
||||
; Right now this is only used for three items but extra space is
|
||||
; reserved
|
||||
skip 34 ; Unused
|
||||
FluteBitfield: skip 1 ;
|
||||
SpecialWeaponLevel: skip 1 ; keeps track of level in special weapon modes
|
||||
ItemOnB: skip 1 ; NYI
|
||||
skip 37 ; Unused
|
||||
ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued
|
||||
; $03 = Agahnim 1 defeated
|
||||
; $04 and above don't do anything. $00-$02 used in standard mode
|
||||
@@ -215,8 +212,8 @@ FollowerIndicator: skip 1 ; $00 = No Follower | $01 = Zelda | $04 = Ol
|
||||
; $06 = Blind Maiden | $07 = Frog | $08 = Dwarf
|
||||
; $09 = Locksmith | $0A = Kiki | $0C = Purple Chest
|
||||
; $0D = Big Bomb
|
||||
FollowerYCoord: skip 2 ; \ Cached X and Y overworld coordinates of dropped follower
|
||||
FollowerXCoord: skip 2 ; / (16-bit integers)
|
||||
FollowerXCoord: skip 2 ; \ Cached X and Y overworld coordinates of dropped follower
|
||||
FollowerYCoord: skip 2 ; / (16-bit integers)
|
||||
DroppedFollowerIndoors: skip 1 ; $00 = Dropped follower outdoors | $01 = Dropped follower indoors
|
||||
DroppedFollowerLayer: skip 1 ; $00 = Upper layer | $01 =.lower layer
|
||||
FollowerDropped: skip 1 ; Set to $80 when a follower exists and has been dropped somewhere
|
||||
@@ -240,7 +237,9 @@ CompassCountDisplay: skip 2 ; Compass count display flags (bitfield)
|
||||
; High Byte: x c e d a s p m
|
||||
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
|
||||
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire
|
||||
skip 10 ;
|
||||
BossSoulMissing: skip 2 ; bitfield for boss soul acquisition
|
||||
; 0 = has soul, 1 = soul missing
|
||||
skip 8 ;
|
||||
Aga2Duck: skip 1 ; Used in lieu of pyramid hole for checking if the duck should come
|
||||
; 0 = Haven't called post-Aga 2 bird | 1 = Have called post-Aga 2 bird
|
||||
NpcFlags: skip 2 ; l - c s t k z o (bitfield)
|
||||
@@ -365,21 +364,7 @@ TRCollectedKeys: skip 1 ; | Turtle Rock
|
||||
GTCollectedKeys: skip 1 ; / Ganon's Tower
|
||||
skip 2 ; Reserved for previous table
|
||||
FileMarker: skip 1 ; $FF = Active save file | $00 = Inactive save file
|
||||
DungeonAllCollectedKeys: ; \ Key Counters. Counts all keys for a dungeon. Chests and drops.
|
||||
; | Note, this label is not indexed like others due to space. Sewers has no decicated entry.
|
||||
HCAllCollectedKeys: skip 1 ; | Hyrule Castle
|
||||
EPAllCollectedKeys: skip 1 ; | Eastern Palace
|
||||
DPAllCollectedKeys: skip 1 ; | Desert Palace
|
||||
CTAllCollectedKeys: skip 1 ; | Agahnim's Tower
|
||||
SPAllCollectedKeys: skip 1 ; | Swamp Palace
|
||||
PDAllCollectedKeys: skip 1 ; | Palace of Darkness
|
||||
MMAllCollectedKeys: skip 1 ; | Misery Mire
|
||||
SWAllCollectedKeys: skip 1 ; | Skull Woods
|
||||
IPAllCollectedKeys: skip 1 ; | Ice Palace
|
||||
THAllCollectedKeys: skip 1 ; | Tower of Hera
|
||||
TTAllCollectedKeys: skip 1 ; | Thieves' Town
|
||||
TRAllCollectedKeys: skip 1 ; | Turtle Rock
|
||||
GTAllCollectedKeys: skip 1 ; / Ganon's Tower
|
||||
skip 13 ; Unused
|
||||
InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless computing checksum.
|
||||
|
||||
;================================================================================
|
||||
@@ -529,8 +514,8 @@ endmacro
|
||||
%assertSRAM(NpcFlagsVanilla, $7EF3C9)
|
||||
%assertSRAM(CurrentWorld, $7EF3CA)
|
||||
%assertSRAM(FollowerIndicator, $7EF3CC)
|
||||
%assertSRAM(FollowerYCoord, $7EF3CD)
|
||||
%assertSRAM(FollowerXCoord, $7EF3CF)
|
||||
%assertSRAM(FollowerXCoord, $7EF3CD)
|
||||
%assertSRAM(FollowerYCoord, $7EF3CF)
|
||||
%assertSRAM(DroppedFollowerIndoors, $7EF3D1)
|
||||
%assertSRAM(DroppedFollowerLayer, $7EF3D2)
|
||||
%assertSRAM(FollowerDropped, $7EF3D3)
|
||||
@@ -641,7 +626,6 @@ endmacro
|
||||
%assertSRAM(TRCollectedKeys, $7EF4EC)
|
||||
%assertSRAM(GTCollectedKeys, $7EF4ED)
|
||||
%assertSRAM(FileMarker, $7EF4F0)
|
||||
%assertSRAM(DungeonAllCollectedKeys, $7EF4F1)
|
||||
;--------------------------------------------------------------------------------
|
||||
%assertSRAM(ExtendedSaveDataWRAM, $7F6000)
|
||||
%assertSRAM(ExtendedFileNameWRAM, $7F6000)
|
||||
|
||||
86
stats.asm
86
stats.asm
@@ -115,76 +115,38 @@ DecrementSmallKeys:
|
||||
STA.l CurrentSmallKeys ; thing we wrote over, write small key count
|
||||
JSL UpdateKeys
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
CountChestKeyLong:
|
||||
PHX : PHP
|
||||
SEP #$30
|
||||
PHX : PHP
|
||||
SEP #$30
|
||||
JSR CountChestKey
|
||||
PLP : PLX
|
||||
RTL
|
||||
PLP : PLX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
CountChestKey:
|
||||
PHA : PHX
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .done
|
||||
LDA.l StatsLocked : BNE .done
|
||||
CPY.b #$24 : BEQ .this_dungeon
|
||||
TYA
|
||||
AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
|
||||
TAX
|
||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||
BRA .done
|
||||
PHA : PHX
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .done
|
||||
LDA.l StatsLocked : BNE .done
|
||||
CPY.b #$24 : BEQ .this_dungeon
|
||||
TYA
|
||||
AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
|
||||
TAX
|
||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||
BRA .done
|
||||
.this_dungeon
|
||||
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
||||
LSR : TAX
|
||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||
BRA .done
|
||||
|
||||
.this_dungeon
|
||||
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
||||
LSR : TAX
|
||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||
BRA .done
|
||||
.hc_sewers
|
||||
LDA.l SewerCollectedKeys : INC
|
||||
STA.l SewerCollectedKeys : STA.l HCCollectedKeys
|
||||
|
||||
.hc_sewers
|
||||
LDA.l SewerCollectedKeys : INC
|
||||
STA.l SewerCollectedKeys : STA.l HCCollectedKeys
|
||||
|
||||
.done
|
||||
PLX : PLA
|
||||
RTS
|
||||
|
||||
; Expects 16 bit index mode upon entering. 8-bit Acumulator
|
||||
; This approach doesn't currently work - potentially dead code
|
||||
CountAllKey:
|
||||
PHP : PHA : PHX
|
||||
SEP #$10
|
||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .done
|
||||
CPY.b #$24 : BEQ .this_dungeon
|
||||
TYA : AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
|
||||
BRA .all_dungoens
|
||||
|
||||
.this_dungeon
|
||||
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
|
||||
LSR
|
||||
|
||||
.all_dungoens
|
||||
STA.b Scrap00 : TAX ; store dungeon index in X, $00
|
||||
LDA.l DungeonAllCollectedKeys-1, X : INC : STA.l DungeonAllCollectedKeys-1, X
|
||||
REP #$10 : PLX : PHX ; 16 bit index
|
||||
LDA.l InventoryTable_properties, X : BIT.b #$40 : BEQ .done
|
||||
SEP #$10 : LDX.b Scrap00
|
||||
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
|
||||
BRA .done
|
||||
|
||||
.hc_sewers
|
||||
LDA.l HCAllCollectedKeys : INC : STA.l HCAllCollectedKeys
|
||||
REP #$10 : PLX : PHX ; 16 bit index
|
||||
LDA.l InventoryTable_properties, X : BIT.b #$40 : BEQ .done
|
||||
LDA.l SewerCollectedKeys : INC
|
||||
STA.l SewerCollectedKeys : STA.l HCCollectedKeys
|
||||
|
||||
.done
|
||||
REP #$10
|
||||
PLX : PLA : PLP
|
||||
RTL
|
||||
.done
|
||||
PLX : PLA
|
||||
RTS
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
IncrementAgahnim2Sword:
|
||||
|
||||
@@ -98,20 +98,11 @@ RTL
|
||||
;================================================================================
|
||||
CheckGanonHammerDamage:
|
||||
LDA.l HammerableGanon : BEQ +
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
|
||||
RTL
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
|
||||
RTL
|
||||
+
|
||||
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BEQ .hammer_silvers
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D6 ; original behavior
|
||||
RTL
|
||||
|
||||
.hammer_silvers
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D8 : BCC +
|
||||
RTL
|
||||
+ CMP.b #$D6 : BNE +
|
||||
RTL
|
||||
+ CLC
|
||||
RTL
|
||||
RTL
|
||||
;================================================================================
|
||||
GetSmithSword:
|
||||
JSL ItemCheck_SmithSword : BEQ + : JML Smithy_AlreadyGotSword : +
|
||||
|
||||
211
tables.asm
211
tables.asm
@@ -91,39 +91,7 @@ SmithSword:
|
||||
db $02 ; #$02 = Tempered Sword (default)
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18002B (Unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18002C (Reserved for Allowed Item on B)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0802D
|
||||
ChallengeModes:
|
||||
; p--- mmdd
|
||||
; p - permadeath
|
||||
; m - movement modes (0 - normal, 1 - permanent ice physics)
|
||||
; d - damage modes (0 - normal, 1 - ohko, 2 - gloom)
|
||||
db $00
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0802E
|
||||
GanonVulnerabilityItem:
|
||||
db $00 ; $00 = default behavior (silver arrows)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0902F
|
||||
SpecialWeapons:
|
||||
db #$00
|
||||
; s - - - m m m m (bitfield) - NYI
|
||||
; s - only swords damage can hurt enemies
|
||||
; m - special weapon mode
|
||||
; $00 = Off (default)
|
||||
; $01 = Bomb mode
|
||||
; $02 = Pseudosword
|
||||
; $03 = Byrna mode
|
||||
; $04 = Somaria mode
|
||||
; $05 = Canes mode
|
||||
; $06 = Bee mode
|
||||
; $07 = Unused
|
||||
; $08 = Bugnet mode
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x180030 (Unused)
|
||||
; 0x18002B- 0x180030 (Unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B08031 ; PC 0x180031
|
||||
EnableEasterEggs:
|
||||
@@ -222,11 +190,8 @@ QuickSwapFlag:
|
||||
db $00 ; #$00 = Off (default) - #$01 = On
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0804C ; PC 0x18004C
|
||||
FollowerTravelAllowed:
|
||||
db $00
|
||||
; #$00 = Off (default)
|
||||
; #$01 = On (frog/smith can enter multi-entrance doors)
|
||||
; #$02 = Follower Shuffle Enabled
|
||||
SmithTravelsFreely:
|
||||
db $00 ; #$00 = Off (default) - #$01 = On (frog/smith can enter multi-entrance doors)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B0804D ; PC 0x18004D
|
||||
EscapeAssist: ; ScrubMode:
|
||||
@@ -463,16 +428,9 @@ db $00 ; #$00 = Original Behavior (default) - #$01 = Book can flip crystal switc
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1800A7 - 0x1800AE (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1800AF
|
||||
; mtff ffff
|
||||
;
|
||||
; m - 0 = only shorten timer on multiworld items, 1 = shorten all items
|
||||
; t - 0 = triforce pieces considered important, 1 = triforce pieces considered junk
|
||||
; f - number of frames to show items
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B080AF ; PC 0x1800AF
|
||||
JunkItemTimer:
|
||||
db $00 ; number of frames to show junk items (#$00 = no change)
|
||||
MultiworldJunkItemTimer:
|
||||
db $00 ; number of frames to show junk items in a multiworld (#$00 = no change)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B080B0 ; 0x1800B0-0x1800BF
|
||||
StaticDecryptionKey:
|
||||
@@ -790,7 +748,7 @@ HeartContainer_Vitreous:
|
||||
HeartContainer_Trinexx:
|
||||
db $3E
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18015A - 0x18015F (unused) [encrypted]
|
||||
; 0x180159 - 0x18015F (unused) [encrypted]
|
||||
;================================================================================
|
||||
org $B08160 ; PC 0x180160 - 0x180162
|
||||
BonkKey_Desert:
|
||||
@@ -941,84 +899,38 @@ org $B08196 ; PC 0x180196-0x180197
|
||||
TotalItemCount: ; Total item count for HUD. Only counts items that use "item get" animation.
|
||||
dw $00D8 ; 216
|
||||
|
||||
org $B08198 ; PC 0x180198-0x1801D7 (variable tables, $FF terminated)
|
||||
GoalConditionTable:
|
||||
dw GanonsTowerOpen
|
||||
dw GanonVulnerable
|
||||
dw PedPull
|
||||
dw MurahdahlaComplete
|
||||
|
||||
GanonsTowerOpen:
|
||||
db $82 ; Crystal Count >= Default 7
|
||||
db $FF
|
||||
GanonVulnerable:
|
||||
db $82 ; Crystal Count >= Default 7
|
||||
db $07 ; Agahnim 2 defeated
|
||||
db $FF
|
||||
PedPull:
|
||||
db $81 ; Pendant Count >= Default 3
|
||||
db $FF
|
||||
MurahdahlaComplete:
|
||||
db $88 ; Triforce Pieces >= Default Goal
|
||||
db $FF
|
||||
; These are lists of conditions to check for various goals,
|
||||
; each terminated by #$FF.
|
||||
; First byte is condition type, with most significant bit
|
||||
; indicating the default value should be used, else the
|
||||
; following byte/s indicate the custom target value.
|
||||
; -----------------------------------------------------------
|
||||
; Condition Types:
|
||||
; #$00 = Always Invulnerable
|
||||
; #$01 = Require Pendants - Default is 3
|
||||
; #$02 = Require Crystals - Default is 7
|
||||
; #$03 = Require Pendant Bosses - Default is 3
|
||||
; #$04 = Require Crystal Bosses - Default is 7
|
||||
; #$05 = Require Prize Bosses - Default is 10
|
||||
; #$06 = Require Agahnim 1
|
||||
; #$07 = Require Agahnim 2
|
||||
; #$08 = Require Goal Items (ie. Triforce Pieces) - Default is value at GoalItemRequirement
|
||||
; #$09 = Require Item Collection - Default is Max Collection Rate
|
||||
; #$0A = Require Custom Goal
|
||||
; -----------------------------------------------------------
|
||||
; For Custom Goal, one byte indicates the bitfield options,
|
||||
; followed by two bytes for the target address, followed
|
||||
; by one or two bytes for the custom target value.
|
||||
; Options bitfield:
|
||||
; ---b accc
|
||||
; b - bank flag - 0 = $7E - 1 = $7F
|
||||
; a - addressing mode - 0 = 8-bit - 1 = 16-bit
|
||||
; c - comparison mode
|
||||
; 0 = minimum (>=)
|
||||
; 1 = exact (==)
|
||||
; 2 = bitfield any
|
||||
; 3 = bitfield match
|
||||
; 4 = count bits set in bitfield
|
||||
; 5-7 = reserved
|
||||
org $B08198 ; PC 0x180198-0x1801A9
|
||||
GanonsTowerOpenAddress: ; 0x180198-0x180199
|
||||
dw CrystalCounter ; Target address for GT open check
|
||||
GanonsTowerOpenTarget: ; 0x18019A-0x18019B
|
||||
dw $0007 ; Target amount for GT open modes to compare
|
||||
GanonsTowerOpenMode: ; 0x18019C-0x18019D
|
||||
dw $0001 ; $00 = Vanilla | $01 = Compare target with address
|
||||
PedPullAddress: ; 0x18019E-0x18019F
|
||||
dw PendantCounter ; Target address for ped pull check
|
||||
PedPullTarget: ; 0x1801A0-0x1801A1
|
||||
dw $0003 ; Target amount for ped pull modes to check
|
||||
PedCheckMode: ; 0x1801A2-0x1801A3
|
||||
dw $0000 ; $00 = vanilla | $01 = Compare address to target value
|
||||
GanonVulnerableAddress: ; 0x1801A4-0x1801A5
|
||||
dw CrystalCounter ; Target address for ped pull check
|
||||
GanonVulnerableTarget: ; 0x1801A6-0x1801A7
|
||||
dw $0007 ; Target amount for Ganon vulnerability modes to compare
|
||||
GanonVulnerableMode: ; 0x1801A8-0x1801A9
|
||||
dw $0000 ; #$00 = Off (default)
|
||||
; #$01 = On
|
||||
; #$02 = Require All Dungeons
|
||||
; #$03 = Require "GanonVulnerableTarget" Crystals and Aga2
|
||||
; #$04 = Require "GanonVulnerableTarget" Crystals
|
||||
; #$05 = Require "GoalItemRequirement" Goal Items
|
||||
; #$06 = Light Speed
|
||||
; #$07 = Require All Crystals and Crystal Bosses
|
||||
; #$08 = Require All Crystal Bosses only
|
||||
; #$09 = Require All Dungeons No Agahnim
|
||||
; #$0A = Require 100% Item Collection
|
||||
; #$0B = Require 100% Item Collection and All Dungeons
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B081D8 ; PC 0x1801D8 - 0x1801FE
|
||||
GanonsTowerOpenGfx: ; 0x1801D8-0x1801E5
|
||||
dw $0000 ; Gfx used for GT open animation, similar to StandingItemGraphicsOffsets
|
||||
dw $0000, $0000, $0000, $0000, $0000, $0000
|
||||
GanonsTowerOpenPalette: ; 0x1801E6-0x1801EC
|
||||
db $00 ; Palette for GanonsTowerOpenGfx
|
||||
db $00, $00, $00, $00, $00, $00
|
||||
; -VHPPCCC (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||
PedPullGfx: ; 0x1801ED-0x1801F2
|
||||
dw $0000 ; Gfx used for ped pull animation, similar to StandingItemGraphicsOffsets
|
||||
dw $0000, $0000
|
||||
PedPullPalette: ; 0x1801F3-0x1801F5
|
||||
db $00 ; Palette for PedPullGfx
|
||||
db $00, $00
|
||||
; -VHPPCCC (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||
MurahdahlaGfx: ; 0x1801F6-0x1801FB
|
||||
dw $0000 ; Gfx used for ped pull animation, similar to StandingItemGraphicsOffsets
|
||||
dw $0000, $0000
|
||||
MurahdahlaPalette: ; 0x1801FC-0x1801FE
|
||||
db $00 ; Palette for MurahdahlaGfx
|
||||
db $00, $00
|
||||
; -VHPPCCCO (VertFlip, HorizFlip, Priority, ColorPalette)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1801FF (unused)
|
||||
; 0x18019A - 0x1801FF (unused)
|
||||
;================================================================================
|
||||
org $B08200 ; PC 0x180200 - 0x18020B
|
||||
RedClockAmount:
|
||||
@@ -1109,14 +1021,14 @@ org $B08220 ; PC 0x180220
|
||||
org $B08240 ; PC 0x180240
|
||||
StartingAreaExitOffset:
|
||||
db $00, $00, $00, $00, $00, $00, $00
|
||||
;-------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B08247 ; PC 0x180247
|
||||
; For any starting areas in single entrance caves you can specify the overworld door here
|
||||
; to enable drawing the doorframes These values should be the overworld door index+1.
|
||||
; A value of zero will draw no door frame.
|
||||
StartingAreaOverworldDoor:
|
||||
db $00, $00, $00, $00, $00, $00, $00
|
||||
;-------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18024E - 0x18024F (unused)
|
||||
;-------------------------------------------------------------------------------
|
||||
; $308250 (0x180250) - $30829F (0x18029F)
|
||||
@@ -1131,50 +1043,11 @@ dw $0000 : db $00 : dw $0000, $0000, $0000, $0000, $0000, $0000, $0000 : db $00,
|
||||
dw $0000 : db $00 : dw $0000, $0000, $0000, $0000, $0000, $0000, $0000 : db $00, $00, $00
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1802A0 - 0x1802BF (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
; $3082C0 (0x1802C0) - $3082D7 (0x1802D7)
|
||||
org $B082C0
|
||||
; Follower data
|
||||
; First byte is the Follower ID awarded at each of the locations
|
||||
; Next 2 bytes are OAM address references to the head/body gfx
|
||||
Follower_Zelda: ; PC 0x1802C0
|
||||
db $01
|
||||
.vram
|
||||
dw $CCCE
|
||||
Follower_OldMan: ; PC 0x1802C3
|
||||
db $04
|
||||
.vram
|
||||
dw $ACAE
|
||||
Follower_Maiden: ; PC 0x1802C6
|
||||
db $06
|
||||
.vram
|
||||
dw $CCCE
|
||||
Follower_Frog: ; PC 0x1802C9
|
||||
db $07
|
||||
.vram
|
||||
dw $C8EE
|
||||
Follower_Locksmith: ; PC 0x1802CC
|
||||
db $09
|
||||
.vram
|
||||
dw $EAEC
|
||||
Follower_Kiki: ; PC 0x1802CF
|
||||
db $0A
|
||||
.vram
|
||||
dw $C0C2
|
||||
Follower_PurpleChest: ; PC 0x1802D2
|
||||
db $0C
|
||||
.vram
|
||||
dw $C8EE
|
||||
Follower_SuperBomb: ; PC 0x1802D5
|
||||
db $0D
|
||||
.vram
|
||||
dw $AE4E
|
||||
;--------------------------------------------------------------------------------
|
||||
;---------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1802D8 - 0x1802FF (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1802C0 - 0x1802FF (unused)
|
||||
;---------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
; $308300 (0x180300) - $30834F (0x18034F)
|
||||
org $B08300 ; PC 0x180300
|
||||
|
||||
15
tablets.asm
15
tablets.asm
@@ -19,14 +19,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetTabletItemFlag:
|
||||
PHA
|
||||
; Rain state fix: convert DW screen ID to LW if in rain state
|
||||
LDA.b OverworldIndex
|
||||
BIT.b #$40 : BEQ +
|
||||
LDA.l ProgressIndicator : CMP.b #$02
|
||||
LDA.b OverworldIndex : BCS ++ : AND.b #$BF
|
||||
++
|
||||
+
|
||||
CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
||||
LDA.b OverworldIndex : CMP.b #$03 : BEQ .ether ; if we're on the map where ether is, we're the ether tablet
|
||||
.bombos
|
||||
JSR ItemSet_BombosTablet : BRA .done
|
||||
.ether
|
||||
@@ -76,12 +69,6 @@ RTL
|
||||
IsMedallion:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b OverworldIndex
|
||||
; Rain state fix: In rain state DW, use LW screen ID for tablet lookup
|
||||
BIT.w #$0040 : BEQ +
|
||||
LDA.l ProgressIndicator : AND.w #$00FF : CMP.w #$0002
|
||||
LDA.b OverworldIndex : BCS ++ : AND.w #$00BF
|
||||
++
|
||||
+
|
||||
CMP.w #$03 : BNE + ; Death Mountain
|
||||
LDA.b LinkPosX : CMP.w #1890 : !BGE ++
|
||||
SEC
|
||||
|
||||
33
timer.asm
33
timer.asm
@@ -7,25 +7,25 @@
|
||||
!FRAMES_PER_HOUR = 60*60*60
|
||||
;--------------------------------------------------------------------------------
|
||||
macro DecIncr(value)
|
||||
LDA.l <value> : INC
|
||||
LDA.w <value> : INC
|
||||
CMP.w #$000A : !BLT ?noIncr
|
||||
LDA.l <value>+2 : INC : STA.l <value>+2
|
||||
LDA.w <value>+2 : INC : STA.w <value>+2
|
||||
LDA.w #$0000
|
||||
?noIncr:
|
||||
STA.l <value>
|
||||
STA.w <value>
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Sub32(minuend,subtrahend,result)
|
||||
LDA.l <minuend>
|
||||
!SUB.l <subtrahend> ; perform subtraction on the LSBs
|
||||
STA.l <result>
|
||||
STA.w <result>
|
||||
LDA.l <minuend>+2 ; do the same for the MSBs, with carry
|
||||
SBC.l <subtrahend>+2 ; set according to the previous result
|
||||
STA.l <result>+2
|
||||
STA.w <result>+2
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Blt32(value1,value2)
|
||||
LDA.l <value1>+2
|
||||
LDA.w <value1>+2
|
||||
CMP.l <value2>+2
|
||||
!BLT ?done
|
||||
BNE ?done
|
||||
@@ -50,7 +50,7 @@ CalculateTimer:
|
||||
%Sub32(ChallengeTimer,NMIFrames,ClockBuffer)
|
||||
++
|
||||
|
||||
%Blt32(ClockBuffer,.halfCycle) : !BGE +++ : JMP + : +++
|
||||
%Blt32(ClockBuffer,.halfCycle) : !BLT +
|
||||
LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF
|
||||
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
|
||||
LDA.l NMIFrames : STA.l ChallengeTimer
|
||||
@@ -66,17 +66,6 @@ CalculateTimer:
|
||||
LDA.l NMIFrames : STA.l ChallengeTimer
|
||||
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
|
||||
RTS
|
||||
++ CMP.w #$0004 : BNE ++ ; Drop Into Ganon
|
||||
LDA.w $048E
|
||||
BEQ .already_ganon
|
||||
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
|
||||
LDA.w #$0011 : STA.b GameMode
|
||||
SEP #$20
|
||||
LDA.b #$7B
|
||||
STA.w $010E
|
||||
REP #$20
|
||||
.already_ganon
|
||||
RTS
|
||||
++ ; End Game
|
||||
SEP #$30
|
||||
JSL ActivateGoal
|
||||
@@ -144,13 +133,6 @@ DrawChallengeTimer:
|
||||
LDA.w #$247F : STA.l HUDTileMapBuffer+$98
|
||||
STA.l HUDTileMapBuffer+$9A
|
||||
BRA +++
|
||||
++ CMP.w #$0004 : BNE ++ ; Ganon
|
||||
LDA.w #$247F : STA.l HUDTileMapBuffer+$92
|
||||
STA.l HUDTileMapBuffer+$94
|
||||
STA.l HUDTileMapBuffer+$96
|
||||
STA.l HUDTileMapBuffer+$98
|
||||
STA.l HUDTileMapBuffer+$9A
|
||||
BRA +++
|
||||
++ ; OHKO
|
||||
LDA.w #$280A : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w #$280B : STA.l HUDTileMapBuffer+$96
|
||||
@@ -181,7 +163,6 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OHKOTimer:
|
||||
LDA.l OHKOFlag : BNE .kill
|
||||
LDA.l ChallengeModes : AND.b #$03 : CMP.b #$01 : BEQ .kill
|
||||
LDA.l TimeoutBehavior : CMP.b #$02 : BNE +
|
||||
LDA.l ClockStatus : AND.b #$02 : BEQ +
|
||||
.kill
|
||||
|
||||
@@ -435,7 +435,7 @@ LoadItemPalette:
|
||||
; Out: A - Sprite palette index
|
||||
PHX : PHY : PHB
|
||||
LDA.b #PalettesVanillaBank>>16 : STA.b Scrap0C
|
||||
PEA.w $7E00
|
||||
PEA $7E00
|
||||
PLB : PLB
|
||||
REP #$30
|
||||
|
||||
@@ -520,20 +520,3 @@ AuxPaletteCheck:
|
||||
REP #$30
|
||||
PLX
|
||||
RTS
|
||||
|
||||
CountBits:
|
||||
; In: A - value to count bits set in
|
||||
; Out: A - number of bits set
|
||||
; Flexible to use with 8 or 16-bit mode
|
||||
PHX : TAX
|
||||
PHY : PHP
|
||||
SEP #$20
|
||||
LDA.b 1,S : BIT.b #$20 : BNE +
|
||||
PLP : TXA : LDX.w #$000F : LDY.w #$0000
|
||||
BRA ++
|
||||
+ PLP : TXA : LDX.b #$07 : LDY.b #$00
|
||||
++ - LSR : BCC +
|
||||
INY
|
||||
+ DEX : BPL -
|
||||
TYA : PLY : PLX
|
||||
RTL
|
||||
|
||||
@@ -37,7 +37,6 @@ CopyFontToVRAM = $80E596
|
||||
LoadCommonSprites_in_file_select = $80E784
|
||||
PaletteFilter_TheEndSprite = $80EC03
|
||||
PrepDungeonExit = $80F945
|
||||
SaveDeathCount = $80F9DD
|
||||
Mirror_InitHdmaSettings = $80FDEE
|
||||
Dungeon_LoadRoom = $81873A
|
||||
Underworld_HandleRoomTags = $81C2FD
|
||||
@@ -74,15 +73,12 @@ SpritePrep_MagicShopAssistant = $85F521
|
||||
Player_ApplyRumbleToSprites = $8680FA
|
||||
Sprite_Main = $868328
|
||||
Utility_CheckIfHitBoxesOverlapLong = $8683E6
|
||||
Sprite_Get16BitCoords_long = $8684BD
|
||||
Sprite_TransmuteToBomb = $86AD58
|
||||
Sprite_PrepAndDrawSingleLargeLong = $86DBF8
|
||||
Sprite_PrepAndDrawSingleSmallLong = $86DC00
|
||||
Sprite_DrawShadowLong = $86DC5C
|
||||
Sprite_DrawShadowCustomLong = $86DC64
|
||||
DashKey_Draw = $86DD40
|
||||
Sprite_PrepOAMCoordLong = $86E41C
|
||||
Sprite_CheckTileCollisionLong = $86E49C
|
||||
Sprite_ApplySpeedTowardsPlayerLong = $86EA18
|
||||
Sprite_DirectionToFacePlayerLong = $86EAA6
|
||||
Sprite_CheckDamageToPlayerSameLayerLong = $86F12F
|
||||
@@ -95,7 +91,6 @@ Player_HaltDashAttackLong = $8791B3
|
||||
Link_ReceiveItem = $87999D
|
||||
Link_ReceiveItem_cool_pose = $8799EE
|
||||
Link_ReceiveItem_not_cool_pose = $8799F2
|
||||
HandleFollowersAfterMirroring = $87AA8B
|
||||
LinkHop_FindArbitraryLandingSpot = $87E359
|
||||
Link_HandleMovingAnimation_FullLongEntry = $87E68F
|
||||
Link_CheckForEdgeScreenTransition = $87F413
|
||||
@@ -122,8 +117,6 @@ AncillaAdd_GTCutscene = $899B6F
|
||||
AddDoorDebris_spawn_failed = $899C39
|
||||
AddAncillaLong = $899D04
|
||||
Ancilla_CheckIfAlreadyExistsLong = $899D1A
|
||||
Follower_Initialize = $899EE8
|
||||
Sprite_BecomeFollower = $899F25
|
||||
Ancilla_TerminateSelectInteractives = $89AC57
|
||||
GiveRupeeGift = $89AD58
|
||||
Sprite_SetSpawnedCoords = $89AE64
|
||||
@@ -137,7 +130,6 @@ InitializeSaveFile = $8CDB3E
|
||||
InitializeSaveFile_build_checksum = $8CDBC0
|
||||
InitializeSaveFile_checksum_done = $8CDBDB
|
||||
SpritePrep_LoadProperties = $8DB818
|
||||
ResetSpriteProperties = $8DB871
|
||||
GetRandomInt = $8DBA71
|
||||
OAM_AllocateFromRegionA = $8DBA80
|
||||
OAM_AllocateFromRegionB = $8DBA84
|
||||
@@ -149,7 +141,6 @@ Sound_SetSfxPanWithPlayerCoords = $8DBB67
|
||||
Sound_SetSfx1PanLong = $8DBB6E
|
||||
Sound_SetSfx2PanLong = $8DBB7C
|
||||
Sound_SetSfx3PanLong = $8DBB8A
|
||||
SpriteDraw_Maiden = $8DCE4F
|
||||
SpriteDraw_Stumpy = $8DD030
|
||||
HUD_RefreshIconLong = $8DDB7F
|
||||
Equipment_UpdateEquippedItemLong = $8DDD32
|
||||
@@ -203,7 +194,6 @@ Sprite_BagOfPowder = $85F644
|
||||
MagicShopAssistant_Main = $85F893
|
||||
Sprite_SpawnSecret_SetCoords = $8682A5
|
||||
Chicken_SpawnAvengerChicken = $86A7DB
|
||||
Sprite_ScheduleForBreakage_exit = $86E273
|
||||
Link_PerformRead = $87B4DB
|
||||
Link_PerformOpenChest_no_replacement = $87B59F
|
||||
Link_CheckNewAPress = $87B5A9
|
||||
@@ -244,16 +234,6 @@ CrystalMaiden_KickOutOfDungeon = $9ECF35
|
||||
GoldBee_Dormant_exit = $9EDE89
|
||||
GoldBee_SpawnSelf = $9EDE8A
|
||||
|
||||
;===================================================================================================
|
||||
; Spliced routines (use JML directly since the hook left these methods)
|
||||
;===================================================================================================
|
||||
|
||||
Sprite_4C_Geldman_do_indeed_draw = $85B8C0
|
||||
Sprite_4C_Geldman_continue = $85B8C3
|
||||
Sprite_91_StalfosKnight_continue = $9EAAB5
|
||||
SpriteDraw_Blob_bad_gfx = $9EB20D
|
||||
SpriteDraw_Blob_head_popping_out = $9EB24E
|
||||
|
||||
;===================================================================================================
|
||||
; Palettes
|
||||
;===================================================================================================
|
||||
@@ -274,7 +254,6 @@ GFXSheetPointers_background_bank = $80CFC0
|
||||
GFXSheetPointers_background_high = $80D09F
|
||||
GFXSheetPointers_background_low = $80D17E
|
||||
LayerOfDestination = $81C31F
|
||||
RoomData_ChestItems = $81E96C
|
||||
AnimatedTileSheets = $82802E
|
||||
Module1B_SpawnSelect_spawns = $828481
|
||||
Overworld_ActualScreenID = $82A4E3
|
||||
@@ -290,9 +269,6 @@ WorldMap_HandleSpriteBlink = $8AC52E
|
||||
WorldMapIcon_AdjustCoordinate = $8AC59B
|
||||
WorldMap_DarkWorldTilemap = $8AD739
|
||||
DungeonMapBossRooms = $8AE817
|
||||
DungeonMapFloorCountData = $8AF5E9
|
||||
DungeonMapFloorToDataOffset = $8AF605
|
||||
DungeonMapRoomPointers = $8AF615
|
||||
DamageSubclassValue = $8DB8F1
|
||||
TextCharMasks = $8EB844
|
||||
Credits_ScrollScene_target_y = $8EC308
|
||||
@@ -303,5 +279,4 @@ Overworld_Entrance_ID = $9BBB73
|
||||
SwordPaletteOffsets = $9BEBB4
|
||||
ShieldPaletteOffsets = $9BEBC1
|
||||
LinkMailPalettesOffsets = $9BEC06
|
||||
Sprite_ReducedTileInteractionTable = $9DF6CF
|
||||
RoomData_ObjectDataPointers = $9F8000
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user