øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=2073.msg23353e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index5c70.htmldelayedslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=2073.0e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index5c70.html.zxõ#g^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ…¬ŠOKtext/htmlISO-8859-1gzip8:ÖŠÿÿÿÿÿÿÿÿÑHTue, 10 Mar 2020 05:38:19 GMT0ó°° ®0®P®€§²ð®ô#g^ÿÿÿÿÿÿÿÿõ+Š Modifying orbiting VFX

Author Topic: Modifying orbiting VFX  (Read 1198 times)

Pinkpuff

  • Flan Princess
  • *
  • Posts: 924
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Modifying orbiting VFX
« on: June 14, 2015, 07:26:02 AM »
Ok I know I'm asking for a doozy this time... but is there any way to delete one of Earth's moons from the "Mysidian Legend IN SPACE" visual effect?
Let's dance!

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #1 on: June 14, 2015, 08:13:28 AM »
Probably... just the IN SPAAACE effect?
That is, you don't need it removed from any of the other space visual effects, right?
I recently looked into trying to fix the earth graphics in the "moon flies away" VFX in the opening of TfW. No luck there, but in messing around with it I was able to change the graphics of just about every other object in the effect, the experience of which may have been enough to help in this situation (assuming the planetary graphics are encoded similarly). I'm off today and could use a break from the toil I've gotten myself into lately. No promises, but I'll look into it.

Pinkpuff

  • Flan Princess
  • *
  • Posts: 924
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Modifying orbiting VFX
« Reply #2 on: June 14, 2015, 11:48:16 AM »
Yes, just that one effect.

And thank you so, so much for looking into it. I wrote out the other moon out of the story without realizing what I was getting myself into until it was too late...
Let's dance!

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #3 on: June 14, 2015, 05:56:12 PM »
UPDATE
This should be a snap, actually.
I've already zeroed in on all of the data and assembly involved in drawing the planets. It will require a custom routine, because the same assembly and some of the same data are used to draw all of the objects in the effect, but no problem.
Shouldn't take too long, but it will take a little trial and error to get it just right.

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #4 on: June 14, 2015, 10:58:28 PM »
UPDATE 2
Okay, so "a snap" was a bit of an exaggeration of the simplicity of this project.
I mean, I'll get it, but it's going to take a smidge longer than I originally thought.
As of now, the second moon is gone right up to the point when the earth finishes its first pass in front of the sun, but then it reappears for parts of the pass behind the sun.
I think I know why this is happening, and fixing it won't be impossible, but it's going to take a bunch of custom routines (because the moon sprites that I'm blanking out are in different places in RAM depending on where the earth is, I think because the larger moon images require more tiles).
Anyway, gonna take a few days, but I'll get there...

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #5 on: June 16, 2015, 04:11:48 PM »
UPDATE 3
Getting there. I didn't get to work on it yesterday at all, but I was able to chart some numbers today before work. I now have everything I need to make this work, it's just a matter of writing the routines. I'll post them all when the patch is up and running (as well as the patch).
It's all pretty straightforward and observable, though the custom routines will certainly not be an exercise in efficiency.
It all boils down to sprites being copied from the 300 section of RAM to VRAM, and the data at 300 are written depending on variables (believe it or not) at 7E:2000.

Like I was just saying, helping other ROM hackers out often leads to learning stuff that will help me out, and this is no exception. I'm sure that by studying this stuff, I'll finally be able to figure out how I screwed up the earth graphics in my own hack.
 :childish:

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #6 on: June 17, 2015, 11:55:18 AM »
SUCCESS!

So, OK, if you want, you can skip past all the BS that follows and just download the patch linked herein (apply to an un-headered 1.1 US ROM), but for those interested in the process involved in creating the patch, here goes...

So, as previously mentioned, the sprite data are loaded into VRAM from RAM beginning at 00:0300. The data at 300 are loaded from a couple of different banks in the 12- and 130000s (LoROM... exact location I did not record, and is kinda irrelevant here). The values here are constantly refreshed to control the constantly moving planets, moons and sun. In order to decide which sprite data to use, the game references constantly descending two-byte values beginning at 7E:2000 (I guess they figured, no battle is going on at the time, so why not use this RAM?). A separate routine controls the descent of these values, but I didn' use it at all, so again, kinda irrelevant. Each sprite ends up having four values in the RAM 300 bank. I'm pretty sure they represent x-pos, y-pos, then the standard "vhopppcc cccccccc" sprite data. Since I'm not a computer and cannot easily interpret the x,y values with any accuracy, the trick to cracking all of this was looking at the vhopppcc cccccccc bytes in conjunction with the tile spread in Tile Layer (which technically begins at ACE00, though the first two lines of tiles look like gibberish...).
So, freeze frame, compare tile values with the tile map... from there, it's just a couple of tries before you find the tiles that represent the moon you want to delete. When you want "no sprite," the game uses F0F0F0F0. I don't know why not FFFFFFFF, but eh, whatever.

First problem that arose: the "revlolving moons" don't actually make a full revolution. The sprites at any given (moon) location control half of a full revolution, then skip back to the opposite side for a second pass. Most likely, this was an easier thing to program, because one portion of RAM could be devoted to the smaller sprites (that pass behind the earth) and the other to the larger sprites (that pass in front). So, by observing the constantly descending two-byte values at 2000, I noticed that a (complete) half-revolution always begins when the (one-byte) value at 2000 equals FF. So, pick a previously unused byte (in this case, I chose 7E:2400), and make it toggle between 00 and 01 every time 2000 hits FF. Then, if 2400 = 00, blank out one moon; if 2400 = 01, blank out the other moon. Voila! full revolution!

Second problem that arose: one of the two moons (the behind moon, I think) always uses the data at 300-30F, but the other moon uses different data depending on whether the Earth is in front of or behind the Sun. I originally thought this was because of the moons, but now I think it's actually because of the size of the earth. Anyway, doesn't matter really.
So, I had to figure out 1) exactly where in the 300 bank the changing moon's sprites were located in both situations, and 2) what other predictable values in RAM (in the constantly-rotating 2000 area) I could use to tell the game which of those locations to blank out.
Over the course of the full visual effect, the moons make eleven full revolutions (or, more appropriately, 22 half-revolutions) around the earth. So, I had already made my life easier by setting up that alternating byte at 2400. I set a breakpoint to 2400 and recorded the values at 2000 for each (only the first 12 bytes do anything at all, so that's what's shown here):
Code: [Select]
FIRST CHANGE:
FF 00 FF FF FF 00 53 01 F3 02 80 01

SECOND CHANGE:
FF FF FF FE BF 00 13 01 B3 02 80 01

THIRD CHANGE:
FF FE FF FD 7F 00 D3 00 73 02 80 01

FOURTH CHANGE:
FF FD FF FC 3F 00 93 00 33 02 80 01

FIFTH CHANGE: (GOES BAD HERE)
FF FC FF FB FF FF 53 00 F3 01 80 01

SIXTH CHANGE:
FF FB FF FA DF FF 33 00 D3 01 80 01

SEVENTH CHANGE:
FF FA FF F9 BF FF 13 00 B3 01 80 01

EIGHTH CHANGE:
FF F9 FF F8 9F FF F3 FF 93 01 80 01

NINTH CHANGE:
FF F8 FF F7 7F FF D3 FF 73 01 80 01

TENTH CHANGE:
FF F7 FF F6 5F FF B3 FF 53 01 80 01

ELEVENTH CHANGE: (FINISHES PASS BEHIND SUN)
FF F6 FF F5 3F FF 93 FF 33 01 80 01

TWELFTH CHANGE:
FF F5 FF F4 1F FF 73 FF 13 01 80 01

THIRTEENTH CHANGE: (WILL REAPPEAR IN FRONT OF SUN)
FF F4 FF F3 FF FE 52 FF F3 00 80 01

FOURTEENTH CHANGE:
FF F3 FF F2 BF FE 13 FF B3 00 80 01

FIFTEENTH CHANGE:
FF F2 FF F1 7F FE D3 FE 73 00 80 01

SIXTEENTH CHANGE:
FF F1 FF F0 3F FE 93 FE 33 00 80 01

SEVENTEENTH CHANGE: (GOES BAD HERE)
FF F0 FF EF FF FD 53 FE F3 FF 80 01

EIGHTEENTH CHANGE:
FF EF FF EE DF FD 33 FE D3 FF 80 01

NINETEENTH CHANGE:
FF EE FF ED BF FD 13 FE B3 FF 80 01

TWENTIETH CHANGE:
FF ED FF EC 9F FD F3 FD 93 FF 80 01

TWENTY-FIRST CHANGE:
FF EC FF EB 7F FD D3 FD 73 FF 80 01

TWENTY-SECOND CHANGE:
FF EB FF EA 5F FD B3 FD 53 FF 80 01

After analyzing these data, what I noticed was, whenever the earth and moons are behind the sun (or at least, out of view), the lowest bit at 2009 is 1, and whenever the earth and moons are visible in front of the sun, the lowest bit at 2009 is 0.
So then, the path was clear: load 2009; AND 01; if A = 00, do one thing, if A = 01, do the other.

So, here are the routines...

load 301,x (the y-pos byte):
Code: [Select]
$13/DA95 20 E0 F7    JSR $F7E0  [$13:F7E0]   A:005C X:00B4 Y:0004 D:0000 DB:7E S:02D1 P:envMxdIzc HC:0776 VC:019 FC:21 I:00
~~~~~~~~~~~~~~~~~~
$13/F7E0 48          PHA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0026 VC:000 FC:09 I:00
$13/F7E1 20 80 F8    JSR $F880  [$00:F880]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0042 VC:000 FC:09 I:00
$13/F7E4 D0 06       BNE $06    [$F7EC]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0058 VC:000 FC:09 I:00
$13/F7E6 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0074 VC:000 FC:09 I:00
$13/F7E7 20 60 F8    JSR $F860  [$00:F860]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0090 VC:000 FC:09 I:00
$13/F7EA 80 04       BRA $04    [$F7F0]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0106 VC:000 FC:09 I:00
$13/F7EC 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0122 VC:000 FC:09 I:00
$13/F7ED 20 70 F8    JSR $F870  [$00:F870]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0138 VC:000 FC:09 I:00
$13/F7F0 99 01 03    STA $0301,y[$00:0301]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0154 VC:000 FC:09 I:00
$13/F7F3 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0170 VC:000 FC:09 I:00

Load 300,x (The x-pos byte):
Code: [Select]
$13/DAA9 20 00 F8    JSR $F800  [$13:F800]   A:00DC X:00B4 Y:0004 D:0000 DB:7E S:02D1 P:eNvMxdIzc HC:0498 VC:020 FC:21 I:00
~~~~~~~~~~~~~~~~~~
$13/F800 48          PHA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0186 VC:000 FC:09 I:00
$13/F801 AD 00 24    LDA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0202 VC:000 FC:09 I:00
$13/F804 D0 06       BNE $06    [$F80C]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0218 VC:000 FC:09 I:00
$13/F806 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0234 VC:000 FC:09 I:00
$13/F807 20 60 F8    JSR $F860  [$00:F860]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0250 VC:000 FC:09 I:00
$13/F80A 80 04       BRA $04    [$F810]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0266 VC:000 FC:09 I:00
$13/F80C 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0282 VC:000 FC:09 I:00
$13/F80D 20 70 F8    JSR $F870  [$00:F870]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0298 VC:000 FC:09 I:00
$13/F810 99 00 03    STA $0300,y[$00:0300]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0314 VC:000 FC:09 I:00
$13/F813 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0330 VC:000 FC:09 I:00

Load 302,x (Sprite Byte 1):
Code: [Select]
$13/DAB0 20 20 F8    JSR $F820  [$13:F820]   A:0036 X:00B4 Y:0004 D:0000 DB:7E S:02D1 P:envMxdIzc HC:1088 VC:020 FC:21 I:00
~~~~~~~~~~~~~~~~~~
$13/F820 48          PHA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0346 VC:000 FC:09 I:00
$13/F821 AD 00 24    LDA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0362 VC:000 FC:09 I:00
$13/F824 D0 06       BNE $06    [$F82C]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0378 VC:000 FC:09 I:00
$13/F826 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0394 VC:000 FC:09 I:00
$13/F827 20 60 F8    JSR $F860  [$00:F860]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0410 VC:000 FC:09 I:00
$13/F82A 80 04       BRA $04    [$F830]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0426 VC:000 FC:09 I:00
$13/F82C 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0442 VC:000 FC:09 I:00
$13/F82D 20 70 F8    JSR $F870  [$00:F870]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0458 VC:000 FC:09 I:00
$13/F830 99 02 03    STA $0302,y[$00:0302]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0474 VC:000 FC:09 I:00
$13/F833 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0490 VC:000 FC:09 I:00

Load 303,x (Sprite Byte 2):
Code: [Select]
$13/DAC5 20 40 F8    JSR $F840  [$13:F840]   A:0002 X:00B4 Y:0004 D:0000 DB:7E S:02D1 P:envMxdIzc HC:0434 VC:021 FC:21 I:00
~~~~~~~~~~~~~~~~~~
$13/F840 48          PHA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0506 VC:000 FC:09 I:00
$13/F841 AD 00 24    LDA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0522 VC:000 FC:09 I:00
$13/F844 D0 06       BNE $06    [$F84C]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0538 VC:000 FC:09 I:00
$13/F846 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0554 VC:000 FC:09 I:00
$13/F847 20 60 F8    JSR $F860  [$00:F860]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0570 VC:000 FC:09 I:00
$13/F84A 80 04       BRA $04    [$F850]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0586 VC:000 FC:09 I:00
$13/F84C 68          PLA                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0602 VC:000 FC:09 I:00
$13/F84D 20 70 F8    JSR $F870  [$00:F870]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0618 VC:000 FC:09 I:00
$13/F850 99 03 03    STA $0303,y[$00:0303]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0634 VC:000 FC:09 I:00
$13/F853 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0650 VC:000 FC:09 I:00

Toggle the byte at 2400, and change which values are blanked out when 2400 = 01:
Code: [Select]
$13/F880 AD 00 20    LDA $2000  [$00:2000]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0826 VC:000 FC:09 I:00
$13/F883 C9 FF       CMP #$FF                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0842 VC:000 FC:09 I:00
$13/F885 D0 2A       BNE $2A    [$F8B1]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0858 VC:000 FC:09 I:00
$13/F887 C0 00 00    CPY #$0000              A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0874 VC:000 FC:09 I:00
$13/F88A D0 25       BNE $25    [$F8B1]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0890 VC:000 FC:09 I:00
$13/F88C AD 00 24    LDA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0906 VC:000 FC:09 I:00
$13/F88F 49 01       EOR #$01                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0922 VC:000 FC:09 I:00
$13/F891 8D 00 24    STA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0938 VC:000 FC:09 I:00
$13/F894 AD 09 20    LDA $2009  [$00:2009]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0954 VC:000 FC:09 I:00
$13/F897 29 01       AND #$01                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0970 VC:000 FC:09 I:00
$13/F899 D0 0C       BNE $0C    [$F8A7]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0986 VC:000 FC:09 I:00
$13/F89B A9 8C       LDA #$8C                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1002 VC:000 FC:09 I:00
$13/F89D 8D 01 24    STA $2401  [$00:2401]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1018 VC:000 FC:09 I:00
$13/F8A0 A9 9C       LDA #$9C                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1034 VC:000 FC:09 I:00
$13/F8A2 8D 03 24    STA $2403  [$00:2403]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1050 VC:000 FC:09 I:00
$13/F8A5 80 0A       BRA $0A    [$F8B1]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1066 VC:000 FC:09 I:00
$13/F8A7 A9 20       LDA #$20                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1082 VC:000 FC:09 I:00
$13/F8A9 8D 01 24    STA $2401  [$00:2401]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1098 VC:000 FC:09 I:00
$13/F8AC A9 30       LDA #$30                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1114 VC:000 FC:09 I:00
$13/F8AE 8D 03 24    STA $2403  [$00:2403]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1130 VC:000 FC:09 I:00
$13/F8B1 AD 00 24    LDA $2400  [$00:2400]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1146 VC:000 FC:09 I:00
$13/F8B4 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:1162 VC:000 FC:09 I:00

Blank out 300-30F if 2400 = 00:
Code: [Select]
$13/F860 C0 10 00    CPY #$0010              A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0666 VC:000 FC:09 I:00
$13/F863 B0 02       BCS $02    [$F867]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0682 VC:000 FC:09 I:00
$13/F865 A9 F0       LDA #$F0                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0698 VC:000 FC:09 I:00
$13/F867 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0714 VC:000 FC:09 I:00

Blank out other (alternating) range if 2400 = 01:
Code: [Select]
$13/F870 CC 01 24    CPY $2401  [$00:2401]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0730 VC:000 FC:09 I:00
$13/F873 90 07       BCC $07    [$F87C]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0746 VC:000 FC:09 I:00
$13/F875 CC 03 24    CPY $2403  [$00:2403]   A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0762 VC:000 FC:09 I:00
$13/F878 B0 02       BCS $02    [$F87C]      A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0778 VC:000 FC:09 I:00
$13/F87A A9 F0       LDA #$F0                A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0794 VC:000 FC:09 I:00
$13/F87C 60          RTS                     A:0010 X:000F Y:0000 D:0600 DB:00 S:02F7 P:envMxdiZc HC:0810 VC:000 FC:09 I:00

So there you have it - One Moon in the Mysidian Legend IN SPACE visual effect!

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Modifying orbiting VFX
« Reply #7 on: June 17, 2015, 04:18:10 PM »
Good heavens! That all looked tremendously complicated. Fantastic work though Chillyfeez!

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Modifying orbiting VFX
« Reply #8 on: June 17, 2015, 05:11:18 PM »
Complicated... Yes. I admit I didn't expect it would take all that when I set out, but all-in-all it was a rewarding experience

Pinkpuff

  • Flan Princess
  • *
  • Posts: 924
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Modifying orbiting VFX
« Reply #9 on: June 18, 2015, 03:00:32 PM »
OMG Chillyfeez you are my hero once more! Thank you so much! This looks and behaves perfectly. The game will be ready for general release very shortly. Only a few minor fixes and corrections to make.
Let's dance!