Language…
20 users online: Astrakitu, Batata Douce, Blizzard Buffalo, codfish1002, cozyduck, Foxy_9000_, Fozymandias, Housemeister, japexican007, Mario's GameBase, MorrieTheMagpie, OrangeRock57, playagmes169, ppp9q, schema_tuna,  shovda, sinseiga, temsuper1, Tsquare07,  YouFailMe - Guests: 256 - Bots: 352
Users: 64,795 (2,376 active)
Latest user: mathew

Lunar Magic suggestions and discussion (LM v3.40)

Tool

It would be great if we could have a feature to view Layer Object Volumes through something similar to the tile outlines. Simply putting a square shape around extended map16 objects or the base game objects would help a ton with level size optimization.

(mockup for visual)

It seems one of Lunar Magic's ExAnimation routines has a bug where it doesn't disable NMI during changing the D register, so when NMI fires during it, it quickly produces a crash.

Code
80a390 jsl $eae7b5    [eae7b5] A:8000 X:0000 Y:0082 S:01f1 D:0000 DB:80 ..MX.IZ. V:228 H: 11 F:33
eae7b5 stz $4326      [804326] A:8000 X:0000 Y:0082 S:01ee D:0000 DB:80 ..MX.IZ. V:228 H: 24 F:33
eae7b8 rep #$20                A:8000 X:0000 Y:0082 S:01ee D:0000 DB:80 ..MX.IZ. V:228 H: 30 F:33
eae7ba lda #$4300              A:8000 X:0000 Y:0082 S:01ee D:0000 DB:80 ...X.IZ. V:228 H: 35 F:33
eae7bd tcd                     A:4300 X:0000 Y:0082 S:01ee D:0000 DB:80 ...X.I.. V:228 H: 39 F:33
eae7be ldy #$80                A:4300 X:0000 Y:0082 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 42 F:33
eae7c0 sty $2115      [802115] A:4300 X:0000 Y:0080 S:01ee D:4300 DB:80 N..X.I.. V:228 H: 45 F:33
eae7c3 lda #$1801              A:4300 X:0000 Y:0080 S:01ee D:4300 DB:80 N..X.I.. V:228 H: 51 F:33
eae7c6 sta $20        [004320] A:1801 X:0000 Y:0080 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 56 F:33
eae7c8 ldx #$7e                A:1801 X:0000 Y:0080 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 62 F:33
eae7ca stx $24        [004324] A:1801 X:007e Y:0080 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 65 F:33
eae7cc ldx #$04                A:1801 X:007e Y:0080 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 69 F:33
eae7ce lda $0d80      [800d80] A:1801 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.I.. V:228 H: 72 F:33
eae7d1 beq $e7e0      [eae7e0] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H: 81 F:33
eae7e0 lda $0d7e      [800d7e] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H: 85 F:33
eae7e3 beq $e7f2      [eae7f2] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H: 94 F:33
eae7f2 lda $0d7c      [800d7c] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H: 98 F:33
eae7f5 beq $e81d      [eae81d] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:107 F:33
eae81d clc                     A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:111 F:33
eae81e lda $7fc0dc    [7fc0dc] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:114 F:33
eae822 beq $e873      [eae873] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:124 F:33
eae873 lda $7fc0e3    [7fc0e3] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:129 F:33
eae877 beq $e8c8      [eae8c8] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:149 F:33
eae8c8 lda $7fc0ea    [7fc0ea] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:153 F:33
eae8cc beq $e91d      [eae91d] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:163 F:33
eae91d lda $7fc0f1    [7fc0f1] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:168 F:33
eae921 beq $e972      [eae972] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:178 F:33
eae972 lda $7fc0c0    [7fc0c0] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:182 F:33
eae976 beq $e9c7      [eae9c7] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:192 F:33
eae9c7 lda $7fc0c7    [7fc0c7] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:197 F:33
eae9cb beq $ea1c      [eaea1c] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:207 F:33
eaea1c lda $7fc0ce    [7fc0ce] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZ. V:228 H:211 F:33
eaea20 beq $ea71      [eaea71] A:8000 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.. V:228 H:221 F:33
eaea22 bmi $ea4c      [eaea4c] A:8000 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.. V:228 H:224 F:33
eaea4c asl                     A:8000 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.. V:228 H:229 F:33
eaea4d sta $25        [004325] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZC V:228 H:232 F:33
eaea4f lda $7fc0d2    [7fc0d2] A:0000 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.IZC V:228 H:238 F:33
eaea53 sta $22        [004322] A:f996 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.C V:228 H:248 F:33
eaea55 lda $7fc0d3    [7fc0d3] A:f996 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.C V:228 H:254 F:33
eaea59 sta $23        [004323] A:c0f9 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.C V:228 H:264 F:33
eaea5b lda $7fc0d0    [7fc0d0] A:c0f9 X:0004 Y:0080 S:01ee D:4300 DB:80 N..X.I.C V:228 H:270 F:33
eaea5f tay                     A:0014 X:0004 Y:0080 S:01ee D:4300 DB:80 ...X.I.C V:228 H:280 F:33
eaea60 sty $2121      [802121] A:0014 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.C V:228 H:283 F:33
eaea63 lda #$2200              A:0014 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.C V:228 H:289 F:33
eaea66 sta $20        [004320] A:2200 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.C V:228 H:293 F:33
eaea68 stx $420b      [80420b] A:2200 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.C V:228 H:299 F:33
eaea6b clc                     A:2200 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.C V:228 H:305 F:33
eaea6c lda #$1801              A:2200 X:0004 Y:0014 S:01ee D:4300 DB:80 ...X.I.. V:100 H:311 F:35
00ba4e jml $80816a    [80816a] A:1801 X:0004 Y:0014 S:01ea D:4300 DB:80 ...X.I.. V:100 H:329 F:35
80816a sei                     A:1801 X:0004 Y:0014 S:01ea D:4300 DB:80 ...X.I.. V:100 H:337 F:35
80816b php                     A:1801 X:0004 Y:0014 S:01ea D:4300 DB:80 ...X.I.. V:101 H:  0 F:35
80816c rep #$30                A:1801 X:0004 Y:0014 S:01e9 D:4300 DB:80 ...X.I.. V:101 H:  5 F:35
80816e pha                     A:1801 X:0004 Y:0014 S:01e9 D:4300 DB:80 .....I.. V:101 H: 10 F:35
80816f phx                     A:1801 X:0004 Y:0014 S:01e7 D:4300 DB:80 .....I.. V:101 H: 17 F:35
808170 phy                     A:1801 X:0004 Y:0014 S:01e5 D:4300 DB:80 .....I.. V:101 H: 24 F:35
808171 phb                     A:1801 X:0004 Y:0014 S:01e3 D:4300 DB:80 .....I.. V:101 H: 31 F:35
808172 phk                     A:1801 X:0004 Y:0014 S:01e2 D:4300 DB:80 .....I.. V:101 H: 36 F:35
808173 plb                     A:1801 X:0004 Y:0014 S:01e1 D:4300 DB:80 .....I.. V:101 H: 41 F:35
808174 sep #$30                A:1801 X:0004 Y:0014 S:01e2 D:4300 DB:80 N....I.. V:101 H: 47 F:35
808176 jml $959938    [959938] A:1801 X:0004 Y:0014 S:01e2 D:4300 DB:80 N.MX.I.. V:101 H: 52 F:35
959938 lda $4210      [804210] A:1801 X:0004 Y:0014 S:01e2 D:4300 DB:80 N.MX.I.. V:101 H: 58 F:35
95993b phb                     A:1842 X:0004 Y:0014 S:01e2 D:4300 DB:80 ..MX.I.. V:101 H: 64 F:35
95993c jsr $999e      [95999e] A:1842 X:0004 Y:0014 S:01e1 D:4300 DB:80 ..MX.I.. V:101 H: 69 F:35
95999e jsl $959bc2    [959bc2] A:1842 X:0004 Y:0014 S:01df D:4300 DB:80 ..MX.I.. V:101 H: 79 F:35
959bc2 lda $0100      [800100] A:1842 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.. V:101 H: 92 F:35
959bc5 cmp #$0e                A:1832 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.. V:101 H: 99 F:35
959bc7 beq $9bcd      [959bcd] A:1832 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.C V:101 H:102 F:35
959bc9 cmp #$0f                A:1832 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.C V:101 H:105 F:35
959bcb bne $9be1      [959be1] A:1832 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.C V:101 H:108 F:35
959be1 rtl                     A:1832 X:0004 Y:0014 S:01dc D:4300 DB:80 ..MX.I.C V:101 H:112 F:35
9599a2 rts                     A:1832 X:0004 Y:0014 S:01df D:4300 DB:80 ..MX.I.C V:101 H:123 F:35
95993f pei ($6e)      [80ff99] A:1832 X:0004 Y:0014 S:01e1 D:4300 DB:80 ..MX.I.C V:101 H:133 F:35
959941 pei ($70)      [802641] A:1832 X:0004 Y:0014 S:01df D:4300 DB:80 ..MX.I.C V:101 H:153 F:35
959943 rep #$20                A:1832 X:0004 Y:0014 S:01dd D:4300 DB:80 ..MX.I.C V:101 H:163 F:35
959945 lda $0100      [800100] A:1832 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.C V:101 H:167 F:35
959948 and #$00ff              A:1d32 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.C V:101 H:176 F:35
95994b sta $6e        [00436e] A:0032 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.C V:101 H:180 F:35
95994d asl                     A:0032 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.C V:101 H:186 F:35
95994e adc $6e        [00436e] A:0064 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.. V:101 H:189 F:35
959950 tax                     A:00d2 X:0004 Y:0014 S:01dd D:4300 DB:80 ...X.I.. V:101 H:195 F:35
959951 lda $94f7a9,x  [94f87b] A:00d2 X:00d2 Y:0014 S:01dd D:4300 DB:80 N..X.I.. V:101 H:198 F:35
959955 sta $6e        [00436e] A:9869 X:00d2 Y:0014 S:01dd D:4300 DB:80 N..X.I.. V:101 H:207 F:35
959957 lda $94f7aa,x  [94f87c] A:9869 X:00d2 Y:0014 S:01dd D:4300 DB:80 N..X.I.. V:101 H:213 F:35
95995b jsl $959994    [959994] A:9598 X:00d2 Y:0014 S:01dd D:4300 DB:80 N..X.I.. V:101 H:222 F:35
959994 sta $6f        [00436f] A:9598 X:00d2 Y:0014 S:01da D:4300 DB:80 N..X.I.. V:101 H:236 F:35
959996 pha                     A:9598 X:00d2 Y:0014 S:01da D:4300 DB:80 N..X.I.. V:101 H:242 F:35
959997 plb                     A:9598 X:00d2 Y:0014 S:01d8 D:4300 DB:80 N..X.I.. V:101 H:249 F:35
959998 plb                     A:9598 X:00d2 Y:0014 S:01d9 D:4300 DB:98 N..X.I.. V:101 H:255 F:35
959999 sep #$30                A:9598 X:00d2 Y:0014 S:01da D:4300 DB:95 N..X.I.. V:101 H:262 F:35
95999b jmp [$006e]    [22006e] A:9598 X:00d2 Y:0014 S:01da D:4300 DB:95 N.MX.I.. V:101 H:266 F:35
7fce00 brk #$00                A:9598 X:00d2 Y:0014 S:01da D:4300 DB:95 N.MX.I.. V:101 H:277 F:35


Edit: another routine that changes D register and then NMI fires during it:
Code
808209 jsl $c0acd9    [c0acd9] A:8000 X:0000 Y:0082 S:01f3 D:0000 DB:80 N.MX.I.. V:227 H:202 F:54
c0acd9 php                     A:8000 X:0000 Y:0082 S:01f0 D:0000 DB:80 N.MX.I.. V:227 H:215 F:54
c0acda lda $0100      [800100] A:8000 X:0000 Y:0082 S:01ef D:0000 DB:80 N.MX.I.. V:227 H:220 F:54
c0acdd cmp #$01                A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 ..MX.I.. V:227 H:227 F:54
c0acdf beq $acbc      [c0acbc] A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 ..MX.I.C V:227 H:230 F:54
c0ace1 cmp #$20                A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 ..MX.I.C V:227 H:233 F:54
c0ace3 bcs $acd3      [c0acd3] A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 N.MX.I.. V:227 H:236 F:54
c0ace5 sep #$10                A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 N.MX.I.. V:227 H:239 F:54
c0ace7 rep #$20                A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 N.MX.I.. V:227 H:243 F:54
c0ace9 ldy #$04                A:8004 X:0000 Y:0082 S:01ef D:0000 DB:80 N..X.I.. V:227 H:248 F:54
c0aceb lda #$1801              A:8004 X:0000 Y:0004 S:01ef D:0000 DB:80 ...X.I.. V:227 H:251 F:54
c0acee sta $4320      [804320] A:1801 X:0000 Y:0004 S:01ef D:0000 DB:80 ...X.I.. V:227 H:255 F:54
c0acf1 lda #$0600              A:1801 X:0000 Y:0004 S:01ef D:0000 DB:80 ...X.I.. V:227 H:263 F:54
c0acf4 tcd                     A:0600 X:0000 Y:0004 S:01ef D:0000 DB:80 ...X.I.. V:227 H:267 F:54
c0acf5 lda $7f8183    [7f8183] A:0600 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.I.. V:227 H:270 F:54
c0acf9 bne $acfe      [c0acfe] A:3200 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.I.. V:227 H:280 F:54
c0acfe lda $95        [000695] A:3200 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.I.. V:227 H:285 F:54
c0ad00 sta $2116      [802116] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:292 F:54
c0ad03 ldx #$80                A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:299 F:54
c0ad05 stx $2115      [802115] A:0000 X:0080 Y:0004 S:01ef D:0600 DB:80 N..X.I.. V:227 H:302 F:54
c0ad08 ldx #$00                A:0000 X:0080 Y:0004 S:01ef D:0600 DB:80 N..X.I.. V:227 H:308 F:54
c0ad0a stx $4324      [804324] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:311 F:54
c0ad0d lda $a7        [0006a7] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:317 F:54
c0ad0f sta $4322      [804322] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:324 F:54
c0ad12 ldx $a1        [0006a1] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:331 F:54
c0ad14 stx $4325      [804325] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:227 H:336 F:54
c0ad17 sty $420b      [80420b] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:228 H:  2 F:54
c0ad1a lda $97        [000697] A:0000 X:0000 Y:0004 S:01ef D:0600 DB:80 ...X.IZ. V:228 H:  8 F:54
00ba4e jml $80816a    [80816a] A:0000 X:0000 Y:0004 S:01eb D:0600 DB:80 ...X.IZ. V:100 H: 34 F:56
80816a sei                     A:0000 X:0000 Y:0004 S:01eb D:0600 DB:80 ...X.IZ. V:100 H: 42 F:56
80816b php                     A:0000 X:0000 Y:0004 S:01eb D:0600 DB:80 ...X.IZ. V:100 H: 45 F:56
80816c rep #$30                A:0000 X:0000 Y:0004 S:01ea D:0600 DB:80 ...X.IZ. V:100 H: 50 F:56
80816e pha                     A:0000 X:0000 Y:0004 S:01ea D:0600 DB:80 .....IZ. V:100 H: 54 F:56
80816f phx                     A:0000 X:0000 Y:0004 S:01e8 D:0600 DB:80 .....IZ. V:100 H: 61 F:56
808170 phy                     A:0000 X:0000 Y:0004 S:01e6 D:0600 DB:80 .....IZ. V:100 H: 68 F:56
808171 phb                     A:0000 X:0000 Y:0004 S:01e4 D:0600 DB:80 .....IZ. V:100 H: 75 F:56
808172 phk                     A:0000 X:0000 Y:0004 S:01e3 D:0600 DB:80 .....IZ. V:100 H: 80 F:56
808173 plb                     A:0000 X:0000 Y:0004 S:01e2 D:0600 DB:80 .....IZ. V:100 H: 85 F:56
808174 sep #$30                A:0000 X:0000 Y:0004 S:01e3 D:0600 DB:80 N....I.. V:100 H: 92 F:56
808176 jml $959938    [959938] A:0000 X:0000 Y:0004 S:01e3 D:0600 DB:80 N.MX.I.. V:100 H: 96 F:56
959938 lda $4210      [804210] A:0000 X:0000 Y:0004 S:01e3 D:0600 DB:80 N.MX.I.. V:100 H:102 F:56
95993b phb                     A:0042 X:0000 Y:0004 S:01e3 D:0600 DB:80 ..MX.I.. V:100 H:108 F:56
95993c jsr $999e      [95999e] A:0042 X:0000 Y:0004 S:01e2 D:0600 DB:80 ..MX.I.. V:100 H:113 F:56
95999e jsl $959bc2    [959bc2] A:0042 X:0000 Y:0004 S:01e0 D:0600 DB:80 ..MX.I.. V:100 H:123 F:56
959bc2 lda $0100      [800100] A:0042 X:0000 Y:0004 S:01dd D:0600 DB:80 ..MX.I.. V:100 H:147 F:56
959bc5 cmp #$0e                A:0004 X:0000 Y:0004 S:01dd D:0600 DB:80 ..MX.I.. V:100 H:153 F:56
959bc7 beq $9bcd      [959bcd] A:0004 X:0000 Y:0004 S:01dd D:0600 DB:80 N.MX.I.. V:100 H:156 F:56
959bc9 cmp #$0f                A:0004 X:0000 Y:0004 S:01dd D:0600 DB:80 N.MX.I.. V:100 H:159 F:56
959bcb bne $9be1      [959be1] A:0004 X:0000 Y:0004 S:01dd D:0600 DB:80 N.MX.I.. V:100 H:162 F:56
959be1 rtl                     A:0004 X:0000 Y:0004 S:01dd D:0600 DB:80 N.MX.I.. V:100 H:167 F:56
9599a2 rts                     A:0004 X:0000 Y:0004 S:01e0 D:0600 DB:80 N.MX.I.. V:100 H:177 F:56
95993f pei ($6e)      [800000] A:0004 X:0000 Y:0004 S:01e2 D:0600 DB:80 N.MX.I.. V:100 H:187 F:56
959941 pei ($70)      [800000] A:0004 X:0000 Y:0004 S:01e0 D:0600 DB:80 N.MX.I.. V:100 H:198 F:56
959943 rep #$20                A:0004 X:0000 Y:0004 S:01de D:0600 DB:80 N.MX.I.. V:100 H:209 F:56
959945 lda $0100      [800100] A:0004 X:0000 Y:0004 S:01de D:0600 DB:80 N..X.I.. V:100 H:214 F:56
959948 and #$00ff              A:ff04 X:0000 Y:0004 S:01de D:0600 DB:80 N..X.I.. V:100 H:222 F:56
95994b sta $6e        [00066e] A:0004 X:0000 Y:0004 S:01de D:0600 DB:80 ...X.I.. V:100 H:227 F:56
95994d asl                     A:0004 X:0000 Y:0004 S:01de D:0600 DB:80 ...X.I.. V:100 H:234 F:56
95994e adc $6e        [00066e] A:0008 X:0000 Y:0004 S:01de D:0600 DB:80 ...X.I.. V:100 H:237 F:56
959950 tax                     A:000c X:0000 Y:0004 S:01de D:0600 DB:80 ...X.I.. V:100 H:244 F:56
959951 lda $94f7a9,x  [94f7b5] A:000c X:000c Y:0004 S:01de D:0600 DB:80 ...X.I.. V:100 H:247 F:56
959955 sta $6e        [00066e] A:9869 X:000c Y:0004 S:01de D:0600 DB:80 N..X.I.. V:100 H:256 F:56
959957 lda $94f7aa,x  [94f7b6] A:9869 X:000c Y:0004 S:01de D:0600 DB:80 N..X.I.. V:100 H:263 F:56
95995b jsl $959994    [959994] A:9598 X:000c Y:0004 S:01de D:0600 DB:80 N..X.I.. V:100 H:272 F:56
959994 sta $6f        [00066f] A:9598 X:000c Y:0004 S:01db D:0600 DB:80 N..X.I.. V:100 H:285 F:56
959996 pha                     A:9598 X:000c Y:0004 S:01db D:0600 DB:80 N..X.I.. V:100 H:292 F:56
959997 plb                     A:9598 X:000c Y:0004 S:01d9 D:0600 DB:80 N..X.I.. V:100 H:299 F:56
959998 plb                     A:9598 X:000c Y:0004 S:01da D:0600 DB:98 N..X.I.. V:100 H:306 F:56
959999 sep #$30                A:9598 X:000c Y:0004 S:01db D:0600 DB:95 N..X.I.. V:100 H:312 F:56
95999b jmp [$006e]    [22006e] A:9598 X:000c Y:0004 S:01db D:0600 DB:95 N.MX.I.. V:100 H:317 F:56
7fe300 brk #$00                A:9598 X:000c Y:0004 S:01db D:0600 DB:95 N.MX.I.. V:100 H:327 F:56


Edit 2: I screwed up the values for the DMA transfer, that's why it took so long, and I forgot that routine was already in NMI, so disabling NMI would not get rid of that problem as it would fire as soon as it was enabled again and would result in a NMI in a NMI, which would be very bad anyway.
To turn this post into something more constructive, I should have mentioned I was trying to disable ExAnimations programatically... I think it should be more straightforward and documented in Lunar Magic help files. At first I was thinking I should store #$FF to $7FC00A. Then someone suggested to store #$000000 to $7FC000. Only storing $0000 to $7FC0C0, $7FC0C7, $7FC0CE.. etc. did the job.
I have been also wondering why $7FC003 didn't disable the ExAnimations since $14 was frozen.
Originally posted by IronFoxGaming
It would be great if we could have a feature to view Layer Object Volumes through something similar to the tile outlines. Simply putting a square shape around extended map16 objects or the base game objects would help a ton with level size optimization.


Not all objects are rectangular (slopes for example). In any case, you can always select an object or group of objects to see which tiles belong to it/them.

Originally posted by Disk Poppy
To turn this post into something more constructive, I should have mentioned I was trying to disable ExAnimations programatically... I think it should be more straightforward and documented in Lunar Magic help files.


It's not documented because it's not supported or even really designed for it. There aren't too many cases where one would want to disable all ExAnimations in the middle of the level/overworld after you've already let them run.

Originally posted by Disk Poppy
I have been also wondering why $7FC003 didn't disable the ExAnimations since $14 was frozen.


If it ran, then it wasn't really frozen compared to the last frame. ExAnimation just keeps that copy of $14, and if the copy is different from $14 then the animations for the frame will be run and $14 is recopied.
Originally posted by FuSoYa
There aren't too many cases where one would want to disable all ExAnimations in the middle of the level/overworld after you've already let them run.


The use case I ran into was having a custom gamemode accessed from the overworld (a stats screen) - the ExAnimations still ran while in the other gamemode.


Anyway, I found out that when repointing multiple levels' pointers to the same layer 1/2/sprite data, but only when repointing them outside banks $06, $07 (as the original game did so in these banks), Lunar Magic freaks out - on saving any level the banks in the pointers are changed resulting in garbage data in all the levels (the lower 16-bits appear unchanged in the pointers).
Originally posted by Disk Poppy
Anyway, I found out that when repointing multiple levels' pointers to the same layer 1/2/sprite data, but only when repointing them outside banks $06, $07 (as the original game did so in these banks), Lunar Magic freaks out - on saving any level the banks in the pointers are changed resulting in garbage data in all the levels (the lower 16-bits appear unchanged in the pointers).


Most likely you're somehow triggering re-initialization/installing of one or more ASM hacks that deal with SMW's original limitations on pointers. Remember the original game doesn't supply separate bank bytes for the sprite pointers, and the bank bytes for layer 2 data were only valid for when you had a level on layer 2 (for BGs the bank byte was originally just a placeholder of FF).

Though it's not really safe to have multiple levels pointing to the same data in the expanded area of the ROM anyway. Officially it's not supported by LM.

Unofficially though, it looks like LM might check for it only if the data isn't protected by a RAT... I probably threw it in as a favor for someone back in the Acmlm board days and forgot about it. But it's part of very old code that verifies level size from back before I came up with the idea of RATs, so it probably doesn't check newer things like ExAnimated pointers.
Here is the patch in question:
Code
; Default sprite memory setting. If you're using No Sprite Tile Limits, you may want to set this to 10.
!SprMem = $10

padbyte $00
org $05E000
        rep 512 : autoclean dl Layer12  ; repoint all Layer 1 pointers
        rep 512 : dl Layer12  ; repoint all Layer 2 pointers
SprPointersLow:
        rep 512 : dw Sprites  ; repoint all sprite pointers
        pad $05FFFF           ; clear all data in tables $05F000-$05FFFF

org $0EF100
SprPointersHigh:
        rep 512 : db Sprites>>16

org $0EF310
        rep 512 : db %00000100

org $05DA17
        JMP $DAD7  ; skip past the No Yoshi handler

org $05D766
        rep 6 : dl Layer12  ; repoint No Yoshi intro Layer 1 pointers
        rep 6 : dl Layer12  ; repoint No Yoshi intro Layer 2 pointers


freedata : print "Blank: ", pc
Layer12:
        db $00,$01,$00,$00,$00,$FF  ; blank data for layer 1/2
Sprites:
        db !SprMem,$FF              ; blank data for sprites

It's applied after modifying a level in Lunar Magic (and optionally cleaning the modified the level via another patch). As you can see it repoints the Lunar Magic's sprite banks too and makes the layer 2 use level data.

It also triggers the modification at $00F2DB (which was unwanted because another patch hijacked it) and probably other things.

Which brings me up to the third suggestion, but I don't know how feasible it is. Namely a LM's ASM hacks/hijacks menu that per every one of them has:
- A button to apply it now.
- A checkbox to prevent from applying it - any operation that would end up with applying it (like for example moving via dragging a Level Entrance) would end up being cancelled.
Maybe even an optional auxiliary file that would track the ASM hacks, so LM doesn't have to read from the ROM, if the ROM was changed in confusing ways to it.
Originally posted by Disk Poppy
It's applied after modifying a level in Lunar Magic (and optionally cleaning the modified the level via another patch). As you can see it repoints the Lunar Magic's sprite banks too and makes the layer 2 use level data.


I don't think you should turn on the new BG format flag for something that's not a BG, but otherwise... *shrugs* Nothing stands out, other than the hijack conflict that you're already aware of. If I had to hazard a guess, I'd say you're probably modifying or overwriting one of LM's ASM patches or hijacks with one of your other patches. Which as I said could trigger a reinstall or an upgrade.

Check the hijack map. And avoid supposedly "empty" areas in the original non-expanded ROM space, as those tend to get used by tables/ASM hacks and usually won't be in that map as they're not hijacking existing code there.

(Also if you're going to repoint the levels like that, I'd suggest overwriting one of the levels in the original ROM space with your empty level instead of storing it in the expanded ROM. That way you won't end up with pointers that point to data that doesn't exist anymore when LM saves a level and deletes the old one in the expanded ROM).

Originally posted by Disk Poppy
It also triggers the modification at $00F2DB (which was unwanted because another patch hijacked it) and probably other things.


Then... be careful not to do that? Look before you leap, and check your jump points in the hijack map on the site to see if you're going to be in conflict with LM or some other major tool/patch. Otherwise I'm afraid you're just going to keep creating problems for yourself.

Originally posted by Disk Poppy
Which brings me up to the third suggestion, but I don't know how feasible it is. Namely a LM's ASM hacks/hijacks menu that per every one of them has:
- A button to apply it now.
- A checkbox to prevent from applying it - any operation that would end up with applying it (like for example moving via dragging a Level Entrance) would end up being cancelled.
Maybe even an optional auxiliary file that would track the ASM hacks, so LM doesn't have to read from the ROM, if the ROM was changed in confusing ways to it.


Too much work, and frankly it'd be silly in a lot of cases. Quite a few basic things people take for granted are due to ASM hacks that LM installs. You don't want LM to say, install the ASM hack responsible for allowing you to place your levels in any order on the overworld? Well, ok then... I guess LM can't save a fair chunk of the overworld anymore since now there's no ASM hack to save the pointer into for data which happens to be in a format that the original game doesn't get anyway. #ab{:P}

Thing is you don't necessarily know which ASM hacks rely on each other, which ones may be implementing which features, which ones implement features LM requires just for normal functioning, or which ones are checked to update data and other ASM hacks from 21 years worth of older versions of LM. Those checkboxes and buttons would just create the illusion of LM supporting something that it really doesn't.

Because as I've said many times before, modifying LM's ASM hacks and hijacks is not supported. Yes you can poke at them if you really want or need to... I occasionally even help people to do so when asked. But you do so with the full knowledge that you're taking your life into your own hands, that you're often making your hack fragile (especially if LM is updated) and that it's not my problem if you go and burn down your hack or your house doing that.
Okay so I just got done beating Final Fantasy II (USA) or actually Final Fantasy 4 (Japan).

So now I have some deep insights on FuSoYa and Lunar Magic. Here they are:

Lunar Magic was originally a Sailor Moon editor. Hence Moon theme.

Lunar Magic uses a Moon as its icon. It just so happens that there is a Moon in Super Mario World.

FuSoYa is a character from FFII and he is from the Moon.

Do you see? It's all Moon related. Like the creator of Lunar Magic and Lunar Magic itself. It all has a Moon theme.

But you would only know and understand this if you beat Final Fantasy II and just today in 2022 I finally beat this game.
Originally posted by Final Theory
Okay so I just got done beating Final Fantasy II (USA) or actually Final Fantasy 4 (Japan).

So now I have some deep insights on FuSoYa and Lunar Magic. Here they are:

Lunar Magic was originally a Sailor Moon editor. Hence Moon theme.

Lunar Magic uses a Moon as its icon. It just so happens that there is a Moon in Super Mario World.

FuSoYa is a character from FFII and he is from the Moon.

Do you see? It's all Moon related. Like the creator of Lunar Magic and Lunar Magic itself. It all has a Moon theme.

But you would only know and understand this if you beat Final Fantasy II and just today in 2022 I finally beat this game.


damn man i'd say you should make this your "final theory"



I'm not sure if this is a bug, but I've encountered something weird in Lunar Magic. I followed this tutorial and this tutorial and have both Lunar Magic's 2BPP Mode and Layer 3 16x16 tile 1,024 x 1,024 tile map setting on for this sublevel, and there is this weird set of blank tiles on the bottom of the editor. They don't seem to be a part of Layer 1, 2, or 3. I think it might be a display issue with Layer 3 because if I put Layer 3 tiles in those areas, they get filled in in the Layer 3 tile map editor but not the main level editor and everything does show up correctly in the game. What is going on? What is with those blank tiles?

https://cdn.discordapp.com/attachments/734257024920977540/965380589706428426/lmbug.png

Click the character on the right side of my layout to visit my Discord server and discuss and play and look at and get updates and sneak peeks of the games and other things I'm making.

The authors of these 2 My Little Pony fan games have removed their games from the Internet.
Rise of the Clockwork Stallions has been updated! Download My Little Pony: Rise of the Clockwork Stallions DX: Director's Cut and My Little Pony: Magic Shards now! Spread this link!

Originally posted by Final Theory
Okay so I just got done beating Final Fantasy II (USA) or actually Final Fantasy 4 (Japan).

So now I have some deep insights on FuSoYa and Lunar Magic. Here they are:

Lunar Magic was originally a Sailor Moon editor. Hence Moon theme.

Lunar Magic uses a Moon as its icon. It just so happens that there is a Moon in Super Mario World.

FuSoYa is a character from FFII and he is from the Moon.

Do you see? It's all Moon related. Like the creator of Lunar Magic and Lunar Magic itself. It all has a Moon theme.

But you would only know and understand this if you beat Final Fantasy II and just today in 2022 I finally beat this game.


Oh, nice to see people are still playing that one for the first time. FF2 is probably the first RPG I ever played.

And yes, it's all moon related. #ab{;)}

Originally posted by DPBOX
I'm not sure if this is a bug, but I've encountered something weird in Lunar Magic. I followed this tutorial and this tutorial and have both Lunar Magic's 2BPP Mode and Layer 3 16x16 tile 1,024 x 1,024 tile map setting on for this sublevel, and there is this weird set of blank tiles on the bottom of the editor. They don't seem to be a part of Layer 1, 2, or 3. I think it might be a display issue with Layer 3 because if I put Layer 3 tiles in those areas, they get filled in in the Layer 3 tile map editor but not the main level editor and everything does show up correctly in the game. What is going on? What is with those blank tiles?

https://cdn.discordapp.com/attachments/734257024920977540/965380589706428426/lmbug.png


Yes, looks like it's a bug. The editor just isn't drawing those tiles... it's triggering a range check that's not supposed to apply to that mode. I guess no one noticed before since it's an unofficial mode in LM that few people even know about let alone use. But thanks, I've got it fixed now for the next version.
What is the difference between 2BPP Modes 1 and 2, anyway? I can't find anything about 2BPP Mode or Layer 3 16x16 Tile Mode in the help file anywhere.

Also, that issue I reported above seems to have mysteriously went away.

Click the character on the right side of my layout to visit my Discord server and discuss and play and look at and get updates and sneak peeks of the games and other things I'm making.

The authors of these 2 My Little Pony fan games have removed their games from the Internet.
Rise of the Clockwork Stallions has been updated! Download My Little Pony: Rise of the Clockwork Stallions DX: Director's Cut and My Little Pony: Magic Shards now! Spread this link!

Originally posted by DPBOX
What is the difference between 2BPP Modes 1 and 2, anyway? I can't find anything about 2BPP Mode or Layer 3 16x16 Tile Mode in the help file anywhere.


It's described here. Unofficial features like those normally aren't in the help file since technically they're not supported... they're usually just little extras I've thrown in for someone. Which means they could get removed/modified or stop working at some point, but more often they're simply forgotten about.

Originally posted by DPBOX
Also, that issue I reported above seems to have mysteriously went away.


Most likely it was just masked by changing the background color or something.
I noticed when using the "View bottom row of tiles" option is used in a level the position will be delayed in game like seen in the GIF below.


However, this gets fixed as soon as you change the player positions by moving him up/down as LM probably doesn't adjust the positions automatically when that option is turned on.
Would be nice to do so since it could lead to confusion about this option not working properly.
It was left that way on purpose as not everyone may want their entrances auto-updated when playing with that.
Regarding sprite extra byte sizes:
Would you consider a minor extension to the current system to allow using the same size for all sprites of a given ID?
To quote the manual...
Originally posted by LM Help File
(first 0x100 bytes are for sprites 00-FF that use an extra bit of 0, next 0x100 are for sprites 00-FF that use an extra bit of 1, etc)...Then put 0x42 at 0x7750F to enable use of the table by Lunar Magic

Would you consider allowing to write an alternate value to PC 0x7750F to have the editor use a single size for each sprite of a given id (instead of 4), to allow using a table a quarter of the size?
It's somewhat minor and for a sprite tool I'm working on personally, but it would be nice to have regardless.
Thanks for your consideration.
Eh, no I don't think so. Since LM3 the table is now also read by ExLevels, which means ASM changes to support that. Not really worth it for just 0x300 bytes.

If you don't plan to have different sizes for different extra bits, you can always just set the extra entries in the table to the same values as for extra bit 0.
Yeah, that is my current plan.
I figured I'd ask in case it was a simple change, at any rate. Thanks for the consideration.
The Hacking of PuyoPuyo. Come join the fun, friends. 『いけいけ団長、頑張れ頑張れ団長!』
Help us raise funds for the Armed Forces of Ukraine. #ДопомагаємоРазом / #HelpTogether
“Even if you personally are so dissatisfied with life that you want the world to end, surely the cruel reality is that it will continue on, unchanging. All the better for someone perfectly content, like me.”
Aya Shameimaru, Touhou Suzunaan ~ Forbidden Scrollery
Yup, like the help file says they appear above sprites (which would include entrances). For something like that I wanted them highly visible so you wouldn't have to turn off sprites to find hidden ones behind them.

Tool