øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=278;area=showposts;start=60e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index0b29-2.htmllayedslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=278e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index0b29-2.html.zx»åg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ0P.¤#OKtext/htmlISO-8859-1gzip0|Ö¤#ÿÿÿÿÿÿÿÿÑHTue, 10 Mar 2020 19:25:06 GMT0ó°° ®0®P®€§²ð®ºåg^ÿÿÿÿÿÿÿÿ¤.¤# Show Posts - chillyfeez

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - chillyfeez

61
I looked into it, and I think the problem with the functionality in FF4kster is that we never actually figured out how this works (and thus FF4kster tries to change an "unknown" value and crashes).
It's tough to zero in on, for a few reasons:
1) I don't know when the check for DK Cecil is performed (that is, when the command is selected, when the command is executed, or when the covered character is attacked)
2) I don't know exactly what in RAM is being read to perform the check. I mean during a battle, the characters' IDs are stored in 7e:2000, 2080, 2100, 2180 and 2200, and each of those values is read several times per second throughout the course of a battle. I figured, no matter, I'll set a breakpoint to the first character's ID and despite the slowness of the process note each part of ROM that reads it and see if I can find any differences between what happens when DK Cecil is in or not in the party. Found none. Which leads me to believe that somehow the game is using an entirely different method to determine whether or not to disable the cover command. Furthermore, if I begin a battle without DK Cecil and then hack him in mid-battle, the Cover command still works. So... maybe there's a check at the beginning of the battle for DK Cecil that allows or prevents Cover for the duration of the battle?
I think I'll look into that a bit...

62
Final Fantasy IV Research & Development / Re: Enemies using weapons
« on: October 26, 2016, 08:56:33 AM »
Given that it's a two-byte load command preceded by a branch and followed by a subroutine jump, it'd be tricky to rewire in order to get a character-dependent routine in there... but nothing's impossible.
It will most likely be something I implement for my own purposes eventually, so I'Lloyd remember to post here when I do.

63
As I noted once in this thread, there are some "songs" that are actually constantly running sound effects. looking up one of those song IDs in this table and then translating the table entry does point to what appears to be a short, previously uncharted SPC sequence.
Song 44 (rushing water sound from the Watery Pass Waterfall)'s table entry is 0136D6, which run through that subroutine comes out to 6f6d6, or 376D6 in ROM w/o header, or 378D6 in ROM with header.
I wonder: could this be the same sequence played when a sound effect is played normally, and therefore could any sound effect be set to play as a background "song?" I'm thinking so, but don't really have the time to look into that today.

64
The three bytes from that table are loaded into 1E20-1E22 in RAM, then the upper two bytes only are considered in the following subroutine:
Code: [Select]
$04/864E 08          PHP                     A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0468 VC:080 FC:30 I:00
$04/864F C2 20       REP #$20                A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0492 VC:080 FC:30 I:00
$04/8651 A5 21       LDA $21    [$00:1E21]   A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0508 VC:080 FC:30 I:00
$04/8653 C9 40 00    CMP #$0040              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0524 VC:080 FC:30 I:00
$04/8656 B0 05       BCS $05    [$865D]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0540 VC:080 FC:30 I:00
$04/8658 69 C0 04    ADC #$04C0              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0556 VC:080 FC:30 I:00
$04/865B 80 22       BRA $22    [$867F]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0572 VC:080 FC:30 I:00
$04/865D C9 C0 00    CMP #$00C0              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0588 VC:080 FC:30 I:00
$04/8660 B0 05       BCS $05    [$8667]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0604 VC:080 FC:30 I:00
$04/8662 69 40 05    ADC #$0540              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0620 VC:080 FC:30 I:00
$04/8665 80 18       BRA $18    [$867F]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0636 VC:080 FC:30 I:00
$04/8667 C9 40 01    CMP #$0140              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0652 VC:080 FC:30 I:00
$04/866A B0 05       BCS $05    [$8671]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0668 VC:080 FC:30 I:00
$04/866C 69 C0 05    ADC #$05C0              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0684 VC:080 FC:30 I:00
$04/866F 80 0E       BRA $0E    [$867F]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0700 VC:080 FC:30 I:00
$04/8671 C9 C0 01    CMP #$01C0              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0716 VC:080 FC:30 I:00
$04/8674 B0 05       BCS $05    [$867B]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0732 VC:080 FC:30 I:00
$04/8676 69 40 06    ADC #$0640              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0748 VC:080 FC:30 I:00
$04/8679 80 04       BRA $04    [$867F]      A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0764 VC:080 FC:30 I:00
$04/867B 18          CLC                     A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0780 VC:080 FC:30 I:00
$04/867C 69 C0 06    ADC #$06C0              A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0796 VC:080 FC:30 I:00
$04/867F 85 21       STA $21    [$00:1E21]   A:06F7 X:1E00 Y:F222 D:1E00 DB:04 S:02DC P:envmxdizc HC:0812 VC:080 FC:30 I:00
So...
Code: [Select]
IF TABLE ENTRY IS IN RANGE THEN ADD EXAMPLE
-------------------------- -------- -------
000000 - 003FFF 04C000 003FFF -> 04FFFF
004000 - 00BFFF 054000 00BFFF -> 05FFFF
00C000 - 013FFF 05C000 013FFF -> 06FFFF
014000 - 01BFFF 064000 01BFFF -> 07FFFF
01C000 AND ABOVE 06C000 0201FF -> 08C1FF
 (likely max 0201FF)

Those offsets are all LoROM, of course, so 04FFFF means 027FFF in ROM without header, or 0281FF in ROM with header.

65
You won't have to change something with every spell, but it'll be more than one little edit, and depending on how elaborate you want this to be it could be many edits...

Have you already exercised the feature in FF4kster that adjusts the beginning of eight character names?

I've actually been working on this (sorta) this week. I'm making an entirely separate bank for monster spell names so they can be 13 characters long (the longest I'll have being "10000 Needles").

66
I have a fair amount to contribute to this discussion, but I don't have the time right now.

But great to see that you got something going already, Squall!
Yeah, there should probably be a unique thread for this utility at this point.

67
I had a Tandy 1000 back in the 80s. I think I got it in '88.
It had MS DOS, but it also had this special Tandy GUI which was like a low-res version of windows.

Anyway, back on topic...

Squall, this is a mock-up of what I envision the UI to look like:

The "song info" is a few commands that are always at the beginning of track 1.
Track info, with the exception of the track number, appears at the beginning of every track.
Aside from loops and GoTos, that would really be all the commands needed, as pretty much everything else doesn't really do anything as far as I can tell, or at least not anything useful.
I imagine the track # to be a drop-down box, where the user selects a track, and the program changes what's being displayed as appropriate.
In a perfect world, "view as" would also be a drop-down, and the user could select anything between 1/64 and 1.
The red bars represent notes being played on the track, and their length represents the duration of each note. Empty space would be automatically filled by rests of the appropriate duration.
The viewable field would be one octave, but the user would be able to scroll up or down into different octaves (and the program would insert octave up/octavbe down commands as needed).
Somehow notation would need to be available for loop points. I don't know exactly what that would look like - maybe a blue bar marking the beginning of a loop and a green marking the end? But there would also have to be a way of telling the program how many times to loop (as this is done with every loop point).
The GoTos would also require some figuring out. Since they really are used primarily to determine if the track repreats or not, I guess there could be another box in track info that says "Repeat to" and then the user enters a measure and beat into the field, leaving it blank for "no repeat."

I don't know... Does that seem like something that could be done?

68
Hey chillyfeez, that is exactly what I was offering, that I could be most useful :D
Yay! :happy:

Quote
Just to be sure that we are on the same page, you need a tool that:
 - easily enter the music data (notes and all commands)
Yup
Quote
- uses couple of tracks for above
Not quite sure what you mean by that?
Quote
- export data in a raw SPC700 format
 - (optional) if possible, play the music, to test before using it in a ROM
 - (optional) writing the output directly to FF4 ROM (no need for copy/paste, hex editors,..)
 - (optional) import of data from FF4 ROM
Yup, as long as those things seem possible

Quote
In order to accomplish the goals, I need:
- what format commands will use? Obviously notes will use the simple forms like, C, C#,... What about the rest? (table with all 256 commands)
- how do you imagine the tracks go? - horizontally or vertically? Most editors that I have seen use vertical flow, but horizontal seems more natural
- exact specification of what to be exported and what format
Let me get some stuff together to answer these questions. I think I can cut some of the fluff out of that document and turn it into a list of what would actually need to be used and put together a bit of a concept of how.
That all might take me some time, so if I don't do it quickly, it's not because I've forgotten. ;)

Quote
- playing music would require external program. That would mean export in SPC file format. Can you find the spec of that format?
Honestly, I wouldn't know where to start looking. The only experience I have with video game music is hacking songs in FFIV. I know Geiger's has an SPC dump option, but I've never even tried using it. But previewing music would just be an extra bonus feature anyway, so maybe we can come back to this at a later date...

Quote
Since you are very creative person, if you have in mind a design of how the application would look, please draw a simple outline
I'll think about that a bit...

69
 Thought Yang's high attack power simply came from having massively high strength, but hey, what do I know? Those are admittedly the details I don't generally spend much time examining.

Something to consider, Pinkpuff: if rings are defensive items, they won't give Yang any attack bonuses (outside of collateral multipliers from extra Str and Ago). They would only give defensive bonuses (protection against fire, or against zombie attacks, or whatever).

70
Right, but my question is what's the penalty?
That there is a penalty for Yang holding weapons, or a bonus for not holding weapons as the case may be, must be something that was custom written. In vanilla FFIV for SNES no such bonus or penalty exists (AFAIK).

I'm sure, by the way, that there is something in the assembly that prevents double shields from being equipped on anybody, but that's nothing to worry about. I eat rules like that for breakfast.

71
Wow, squall, I think that could be awesome.

Most of those things you said you can't/don't do I have no need for anyway.

Regarding utilities: one thing comes to mind that I always wished I had...
A few years ago I spent some time studying the music engine and I learned, mostly, how to write custom songs. Now, I'm no Uematsu, not by a long shot but if you've played any of the TfW demos, or have paid close attention to the stuff I've posted here before, then you know I have written two songs that are in the game.
I'd like to put more new music into the game - a combination of original pieces and at least one ported in from FFVI, but the process takes FOREVER.
What I'm getting at is, if you could make a utility that either
A) works like a midi sequencer, but generates output in FFIV's SPC format,
or
B) converts existing midi files into FFIV's SPC format
that would be absolutely amazing.
I can provide documentation of my research of the game's music engine. I'm typing this on my tablet, but after I post I'll move to the computer and attach the file.
 :edit: file attached

Each SPC sequence has the following components:
-song header (mostly info about where each track starts)
-track headers (info at the beginning of each track that determines instrument, starting octave, tempo, various other stuff)
-the actual notes themselves
I'd primarily be looking for something that can convert the notes to the right format - that's what takes the longest - but if you think you could make something that automates the whole process, even better. And I think I'd actually prefer something that generates its own file that I could copy and paste into the ROM via hex editor. That way I wouldn't have to worry about the length of the song until it was fully written.

If I'm completely off base about what you were offering, by the way, that's fine. This was going to be a quick reply that obviously turned into something really long.
 :blush:

72
So, do you want it to be impossible for him to use a claw, or do you simply want it to be possible for him to use two rings (shields)?
Regarding the martial arts bonus... This is something custom, right? I don't think vanilla Yang got any bonus for being empty handed. I kind of remember Grimoire talking about making something like that possible, but I don't remember the mechanical details of the bonus (that is, what gets the bonus - Fight, Kick, other?). My guess is that as it is the code is looking for 00 00 in both hands in order to apply the bonus, but it can probably be changed...

73
Looks like a fun hack, joe.
I'll try not to ask too many gameplay related questions, but I gotta get one out:
So no "tanks," then? Interesting...
The spriting is gorgeous. Did you make those portraits all on your own? And are they really still 3BPP, or did you figure out how to convert them to 4?

74
Nice to hear from you anyway, Grimoire.
A lot of the credit goes to Pinkpuff for making me a hacked version of FF4kster that skips the ROM size check at startup.
Progress is slow but steady on the overall project. You know me, I see somebody looking for ASM hacking help in their own FFIV project and I'm like, "Ooooh, me! Me! I can do that!" and before you know it I've spent the week not working on my own stuff. I maintain that it's for the greater good, though, as it a) allows other people to make quality FFIV hacks thus keeping the game itself relevant in the hacking community and b) keeps my own idea engine fresh so that whenever I finally finish this thing I'll be proud of what I've created.

And then there's the stuff I have to do simply to keep everything organized, like this:

This spreadsheet keeps track of all of the AI indices, conditions and scripts I've used already and allows me to type in a number at the top of the appropriate column and returns a number in a bright red box representing how many times that number appears in that column, because too many times now I've put monster AI all together only to find out later that I accidentally wrote over that of a different monster. This will help me keep all of that straight, but also that was my whole day yesterday.
 :bored:

75
That's kind of a fun idea, actually, Swordmaster.
There certainly are a lot of usable items in the game that I was planning on just leaving out, but maybe I can use them that way.
I think when I was writing the Salve command I came across the part of the code that determines usability of items in the inventory. I could probably put in a check for user:Avon for a specified range and make that a possibility.
I don't think I'll do that now, but it will likely be something I'll look into down the road.