Register | Login
Views: 19364387
Main | Memberlist | Active users | ACS | Commons | Calendar | Online users
Ranks | FAQ | Color Chart | Photo album | IRC Chat
11-02-05 12:59 PM
1 user currently in Rom Hacking: hukka | 2 guests
Acmlm's Board - I2 Archive - Rom Hacking - FF Hacking FAQ/Running Q&A | |
Pages: 1 2 3 4 5 6 7Add to favorites | "RSS" Feed | Next newer thread | Next older thread
User Post
BillyGraham21

Micro-Goomba
Level: 5

Posts: 8/10
EXP: 363
For next: 166

Since: 06-23-05

Since last post: 47 days
Last activity: 13 hours
Posted on 06-27-05 10:33 PM Link | Quote
Originally posted by Don Killmi
Whee!
I managed to add a B-button dash, like the remake versions.
I used the space freed when i removed that annoying noise that plays when you open/close a dialog window. Who would've thought that noise would come out usefull? --

I also added a way to class-change to any class.
You put the character you want to change classes at the lead of the party.
You talk to the Priest of Dharma/Bahamut/whatever
Your character gets changed to the next base class.
It follows the standart character order:
Fighter -> Thief -> Black belt -> RedMage -> WhiteMage -> BlackMage.
Now i need to find a way to make intelligence matter when casting spells. It wouldn't make sense to have a black belt cast NUKE with the same proficiency as a black mage.
Does anyone know if magic is factored at all when casting spells?
Has anyone made a working MP system (like the origins and GBA versions? It would make more sense than having class change with the spell charge system.
Thanks in advance.


interesting, i've previously found that data and implimented a B-button dash hack as well, although that was some time ago (must be over a year by now). One thing i've found when removing the Open/Close dialog is that you have to make sure to remove the setup before the subroutine is actually called or else there is a possiblity for some buggy results. A simlpe suggestion, i know, but for whatever reason i had overlooked it at the time . Also, what areas of RAM did you use? i don't know, i'm just curious... like a cat.
Don Killmi

Level: 8

Posts: 2/29
EXP: 1764
For next: 423

Since: 06-27-05

Since last post: 11 hours
Last activity: 11 hours
Posted on 06-28-05 02:18 AM Link | Quote
At first i tried using some space of the last song in memory (the "death" theme), but as soon as i stepped out of town i would get a black screen. Turned out the game copies something else to that area in RAM. So, using space previously allocated to music for asm hacks is a no no.
Of course i removed the references to the sound routine
First strobe the joystick, then i jumped to the free space.
one thing i learned is that you can strobe by doing:
LDX #$01
STX $4016
DEX
STX $4016

instead of

LDA #$01
STA $4016
LDA #$00
STA $4016,
thus saving 1 byte. I never actually cared for that kind of optimization, but when you are short on a few bytes, everything counts. Are there any problems for strobing the joystick like that? It should be essentially the same, but who knows...

Then, i just checked $20 and CMP'ed it to #$40 (b button).
then i set $34 by either 2 or 1, depending if the button was pressed or not.
One thing i need to find is where int the memory the number of the current map is stored. If i knew that, i could prohibit bdash in the overworld.
Character data in RAM starts at $6100.

To make the job change whenever i wanted, i messed with the story completion variables. I just set a bp where bahamut aknowledged you, and went from there.

Really cool, i didn't think it would be easy like that.
BillyGraham21

Micro-Goomba
Level: 5

Posts: 9/10
EXP: 363
For next: 166

Since: 06-23-05

Since last post: 47 days
Last activity: 13 hours
Posted on 06-28-05 08:09 PM Link | Quote
Ah, interesting. And yes, the DEX will not aversly effect the joystick strobing. I had originally replaced my b-dash routine over the select button in the main controller routine, but had to impliment an extended and convoluted hack to prevent the B button from rapid-firing and doing other nasty things throughout the rest of the game. I take it that using the sound effect routine prevents those nasty occurances?
Don Killmi

Level: 8

Posts: 3/29
EXP: 1764
For next: 423

Since: 06-27-05

Since last post: 11 hours
Last activity: 11 hours
Posted on 06-29-05 03:11 AM Link | Quote
...but had to impliment an extended and convoluted hack to prevent the B button from rapid-firing and doing other nasty things throughout the rest of the game...

Where exactly? I haven't seen any problems so far, but who knows... i need to test it more.

Also, would any have already implemented a working MP system, ala Dawn of Souls? My hack as it is would make way more sense with an MP based system.

The mages always get fixed level spell charges at fixed levels. (eg. get an lv8 charge at lv 24). So, if you had a character which was a black belt all along, then change him to black mage at level 23 and level up once, his spell list will be empty except for that one lv8 charge. I want to change that, and i think an MP system is my best bet. Pure mages would get more MP than red mages (who would have more 'average' stats), and knight/thief/bl.belt wouldn't get any MP at all. Spell costs could be fixed by level (eg. lv1 = 1MP, lv2 = 3MP, lv3 = 6MP, lv4=..., lv8 = 25MP).
To make class change even more worthwhile, i would have to modify spells to actually use the caster's intelligence. I remember there was a thread on the GameFaqs FF1 board which had several fixes and detailed how intelligence was supposed to be used, but the game loads from another address instead of it (always zero), so the intelligence stat was basically worthless. I had the thread backed up, but i don't have it anymore (poor HD). If anyone still have it, it would be most appreciated. (dormento at gmail removethis dot com).

Edit:
I have a problem.
I was editing the Coneria town map in FFHackster. Things were going well, and all of a sudden, i couldn't enter town anymore (i would get a black screen). Does anybody know of bugs when editing maps? I didn't modified the palette, and i still had ~450 KAB...




(edited by Don Killmi on 07-04-05 01:38 PM)
Imajin

Buster Beetle
Level: 34

Posts: 440/452
EXP: 234863
For next: 18788

Since: 03-15-04
From: Kingdom of Zeal

Since last post: 39 days
Last activity: 53 days
Posted on 07-21-05 01:38 AM Link | Quote
I'm having a problem with the Hackster Companion. How do I get it to recognize my Hackster.Dat File?

EDIT: Now it works again. But I have another problem. I've placed a sprite in a room, and it doesn't show up. Other sprites in the room show up.


(edited by Imajin on 07-20-05 04:41 PM)
Celice

Keese
Level: 16

Posts: 38/128
EXP: 17573
For next: 2683

Since: 06-08-05
From: Oroville, CA

Since last post: 2 hours
Last activity: 2 hours
Posted on 07-21-05 02:36 AM Link | Quote
That's happened to me too. I used one of the unused sprites, and apparently they just don't work. Perhaps you had to clear a certain event? Are you using a savestate to check it out?
Kanji

Red Goomba
Level: 12

Posts: 16/47
EXP: 7874
For next: 47

Since: 03-15-04

Since last post: 62 days
Last activity: 19 days
Posted on 07-21-05 07:12 AM Link | Quote
Originally posted by Celice
That's happened to me too. I used one of the unused sprites, and apparently they just don't work. Perhaps you had to clear a certain event? Are you using a savestate to check it out?

Well, I actually can't remember which Sprite it is... It's a sprite I redid in Companion to start a battle once you talk to it.

As for a Savestate, well, there is a savestate involved, but it's on the World Map, so I go into the room after loading the Savestate.
Celice

Keese
Level: 16

Posts: 41/128
EXP: 17573
For next: 2683

Since: 06-08-05
From: Oroville, CA

Since last post: 2 hours
Last activity: 2 hours
Posted on 07-22-05 12:23 AM Link | Quote
I don't know how to fix that. Apparently the guy who did Retuurn of Lich as able to pull it off, but it looks like he changed one of the elves and not an unknown. And I asked of a savestate cause if you were using a save from the end of game to test out the world and such, perhaps the sprite may have been deactivated due to some event which would of been completed.
Dragonsbrethren

Octorok
Level: 10

Posts: 12/31
EXP: 4111
For next: 303

Since: 04-14-04
From: New Jersey

Since last post: 82 days
Last activity: 82 days
Posted on 07-26-05 01:13 PM Link | Quote
Every unknown I've used in the past worked fine. Your savestate may be causing problems, if it triggers a plot event and that event was already triggered. If that's not it try just using another sprite (You didn't happen to leave a blank sprite in the list of map sprites, did you? I may have had a problem with that once, I don't really remember)
Vystrix Nexoth

Level: 30

Posts: 336/348
EXP: 158678
For next: 7191

Since: 03-15-04
From: somewhere between anima and animus

Since last post: 3 days
Last activity: 2 days
Posted on 08-23-05 05:24 AM Link | Quote
FF1's B+Select screen with the overworld mirrored

I figured out how to change where the game writes the 'Final Fantasy' and Dragon graphic tiles into the pattern tables in the B+Select map screen. For some reason, the game draws the map itself from the actual overworld data, yet has hard-coded which tiles are free to hold other graphics. I figured out how to change that. I flipped the overworld data horizontally, then fixed up the B+Select screen (depicted above), as a proof-of-concept.

Turns out it stores a table of the VRAM addresses to which each non-map tile will be written. Not the most elegant way to do it, but at least it's not too obtuse to hack (I was afraid it'd be a bit-map or something).

The 'Final Fantasy' text, and the Dragon graphics, are stored and handled separately, and as such have separate tables. And now on to the good stuff:

"Final Fantasy": 0x28 tiles
High addresses at PRG 0x27BB2 (iNES 27BC2)
Low addresses at PRG 0x27B8A (iNES 27B9A)

Dragon graphics: 0x30 tiles
High addresses at PRG 0x27D19 (iNES 27D29)
Low addresses at PRG 0x27CE9 (iNES 27CF9)

A given tile NN is located at VRAM 0x0NN0, so the "high" bytes are 0x00-0x0F, indicating which tile row to which to write the tile; the "low" bytes are multiples of 0x10 (0x00-0xF0) and indicate which tile column to which to write the tile.

For the above map screen, I mirrored the overworld (by exporting it in FF Hackster, adding a PGM header, loading it in The GIMP, mirroring it, saving it, removing the header, and importing in Hackster), then:
  • Mirroring all the "low" bytes as given above: 0x00 with 0xF0 (and vice versa), 0x10 with 0xE0, 0x20 with 0xD0, and so on
  • Mirroring the lower 4 bits of those tiles as located in the Name+Attribute Table (stored at PRG 0x27000 (iNES 27010)), including the 0x00s which fill in the background
  • Mirroring the tiles (in the Name+Attribute Table) of the map itself, in terms of which ones are present; they're kept in the same order (refer to this screenshot; my notes on this subject are visible in the text editor window)
It was not necessary to alter the Attribute table... praise be to Yevon.

Anyhow, hope this helps. With this information, you can change the general shape of the overworld without having some of the tiles clobbered by the decorative graphics.


(edited by Vystrix Nexoth on 08-22-05 08:26 PM)
theonyxdragoon

Blue Octorok
Level: 9

Posts: 23/38
EXP: 2446
For next: 716

Since: 07-16-05
From: Somewhere between Mars and Jupiter, on an asteroid

Since last post: 2 days
Last activity: 6 hours
Posted on 09-28-05 07:12 AM Link | Quote
hmm...seems like no one has posted here in a while, but I do have a question. I was wondering if there is any way to create a separate command in the battle menus so that characters can jump (and if possible, only some characters). Yes, I would expect a "Are you out of your mind?!" comment, but I thought I'd just ask.
Gavin

Fuzzy
Rhinoceruses don't play games. They fucking charge your ass.
Level: 43

Posts: 741/799
EXP: 551711
For next: 13335

Since: 03-15-04
From: IL, USA

Since last post: 13 hours
Last activity: 13 hours
Posted on 09-28-05 12:23 PM Link | Quote
Originally posted by theonyxdragoon
hmm...seems like no one has posted here in a while, but I do have a question. I was wondering if there is any way to create a separate command in the battle menus so that characters can jump (and if possible, only some characters). Yes, I would expect a "Are you out of your mind?!" comment, but I thought I'd just ask.


as on a Dragoon's "Jump" ?
theonyxdragoon

Blue Octorok
Level: 9

Posts: 24/38
EXP: 2446
For next: 716

Since: 07-16-05
From: Somewhere between Mars and Jupiter, on an asteroid

Since last post: 2 days
Last activity: 6 hours
Posted on 09-28-05 04:49 PM Link | Quote
yes, the character becomes vulnerable for a moment (possibly disappears, sprite-wise) then attacks a certain character.
Sliver X

Level: 8

Posts: 12/19
EXP: 1942
For next: 245

Since: 05-01-04

Since last post: 1 day
Last activity: 3 days
Posted on 09-29-05 12:55 PM Link | Quote
Various things:

3EB3A: Menu Background Color
2FC30 - 2FFAF: Bridge Scene TSA
37F14: Palettes for Bridge Scene
2F030 - 2F3AF: Ending TSA
3ACAC-3AD0F: Shop Keeper TSA
Gavin

Fuzzy
Rhinoceruses don't play games. They fucking charge your ass.
Level: 43

Posts: 743/799
EXP: 551711
For next: 13335

Since: 03-15-04
From: IL, USA

Since last post: 13 hours
Last activity: 13 hours
Posted on 09-30-05 03:46 PM Link | Quote
This is the routine that checks to see which battle sprite position should be assigned to a character. The positions are Alive+Healthy, Alive+Status Ailment/Low Health, Dead. Before this routine is called, the desired character is loaded into the accumulator:

LDA #$02 ;any character number from 0-3, corresponding to all 4 character sprites
JSR $9DB2

and here is the routine:

$9DB2:0A ASL
$9DB3:0A ASL
$9DB4:AA TAX
$9DB5:0A ASL
$9DB6:0A ASL
$9DB7:0A ASL
$9DB8:0A ASL
$9DB9:A8 TAY
$9DBA:B9 01 61 LDA $6101,Y
$9DBD:29 01 AND #$01
$9DBF:F0 08 BEQ $9DC9 ;branch if not dead


//character is dead
$9DC1:A9 00 LDA #$00
$9DC3:99 0A 61 STA $610A,Y
$9DC6:99 0B 61 STA $610B,Y


//character is not dead, check for other attributes/afflictions
$9DC9:B9 01 61 LDA $6101,Y ;get character attributes
$9DCC:29 34 AND #$34 ;these attributes on a character make him "kneel" in danger sprite set
$9DCE:F0 06 BEQ $9DD6 ;if none of these illinesses or whatever are in effect, skip


//character is alive, but has an ailment or is low on health, use danger sprite set
$9DD0:A9 18 LDA #$18
$9DD2:9D D6 6A STA $6AD6,X
$9DD5:60 RTS


//does calculations to determine if the character's health is low enough to warrent the "ailment" sprite set
$9DD6:B9 0C 61 LDA $610C,Y
$9DD9:8D B3 68 STA $68B3
$9DDC:B9 0D 61 LDA $610D,Y
$9DDF:8D B4 68 STA $68B4
$9DE2:4E B4 68 LSR $68B4
$9DE5:6E B3 68 ROR $68B3
$9DE8:4E B4 68 LSR $68B4
$9DEB:6E B3 68 ROR $68B3
$9DEE:B9 0B 61 LDA $610B,Y
$9DF10 08 BNE $9DFB ;the character's health is not too low, send him along with a clean bill of health
$9DF3:B9 0A 61 LDA $610A,Y
$9DF6:CD B3 68 CMP $68B3
$9DF9:90 D5 BCC $9DD0 ;character is in peril, branch to $9DD0 and set danger sprite


//character is alive and well, use normal battle sprite
$9DFB:A9 00 LDA #$00
$9DFD:9D D6 6A STA $6AD6,X
$9E00:60 RTS
theonyxdragoon

Blue Octorok
Level: 9

Posts: 26/38
EXP: 2446
For next: 716

Since: 07-16-05
From: Somewhere between Mars and Jupiter, on an asteroid

Since last post: 2 days
Last activity: 6 hours
Posted on 09-30-05 08:32 PM Link | Quote
woa...thanks for the info gavin, hopefully when i get to that level of hacking, I could manipulate the data myself.

But I think the "jump" command (similar to ff3j's, but not as complex, sprite-wise) will probably be adding rather than changing data in a rom, which would make it hard to do.
Don Killmi

Level: 8

Posts: 13/29
EXP: 1764
For next: 423

Since: 06-27-05

Since last post: 11 hours
Last activity: 11 hours
Posted on 09-30-05 10:42 PM Link | Quote
Below i post my b button dash code, just in case anyone want's to add it to their hacks. makes some parts of the game a little bit less annoying.
I used the space previously allocated to the routine which plays the annoying dialog menu noise, which i think is a double plus

; B button dash, just like the WSC, PSX & GBA versions
; uses the space freed by the annoying noise played when a dialog box opens
; who would've thought that annoying noise would come to be usefull?
; Much thanks Gavin (i think) for locating that particular piece of code.

;problems: still works at the world map (a minor one)

; MAX SIZE 21 bytes
.org $D6C7 ;assemble code to run at this (CPU) address
.mem 8 ;setup accumulator and index regs for NES code
.index 8

LDA $20 ;this address contains the buttons pressed
AND #%01000000 ;tests if B button is pressed
BNE bdash ;branches with 2 bytes only (1 byte address)=good!
LDA #$01 ;normal speed
STA $34 ;use this speed to walk
RTS
bdash:
LDA #$02 ;double speed
STA $34
RTS


Edit: Oops, i forgot to say it is assemblable with x816 (x112f.exe), the best NES assembler, IMHO. I still need some info about how to take the INT stat into account when casting spells. Any help would be much appreciated.


(edited by Don Killmi on 09-30-05 01:44 PM)
(edited by Don Killmi on 09-30-05 02:07 PM)
Sliver X

Level: 8

Posts: 13/19
EXP: 1942
For next: 245

Since: 05-01-04

Since last post: 1 day
Last activity: 3 days
Posted on 10-01-05 06:40 AM Link | Quote
There's a bug dealing with map recompression and large levels in Hackster that will make levels crash on entrance, either with a black screen or with garbled graphics.
I'm not sure how common this issue is, but we ran into it a lot with Dragoon X Omega II.

bitmaster took the time to look into it for us, for which I'm eternally grateful. The method
of fixing this with FCEUXD is as follows. Make a save state right before an entrance that
is known to crash, then:

bbitmaster> the first thing you should do is set a write breakpoint on $8000 before it crashes
bbitmaster> should break at the decompression code at
bbitmaster> $D1A6:91 12 STA ($12),Y @ $8000
bbitmaster> that looks like a loop to decompress the data
bbitmaster> which looks like it's RLE encoded
bbitmaster> when that breakpoint at D1A6 is snapped
bbitmaster> open the hex editor
bbitmaster> and look at location $10 and $11
bbitmaster> those point to the faulty byte in the rom
bbitmaster> for me $10-11 reads: 24B5
bbitmaster> but it's little endian, so you need to turn that around to B524
bbitmaster> and scroll down to it in the hex editor
bbitmaster> now you can only edit what's in the rom file with FCEUXD
bbitmaster> so you should right click on that offset and select "Go Here in rom file"
bbitmaster> for me $b524 is at $17534... anyway
bbitmaster> you need to subtract a few bytes from it
bbitmaster> when the debugger snapped at $8000
bbitmaster> the X register tells how far over it's trying to run

Try subtracting X first; if that doesn't work, subtract 1 more.


(edited by Sliver X on 09-30-05 09:41 PM)
Don Killmi

Level: 8

Posts: 14/29
EXP: 1764
For next: 423

Since: 06-27-05

Since last post: 11 hours
Last activity: 11 hours
Posted on 10-01-05 09:31 PM Link | Quote
Thanks SX, i've run into that bug a lot too. When doing something as simple as adding some buildings to a town, i would trigger it and render some work unusable. I've never got the "garbled graphics" crash, only a black screen.

Btw, it is amazing how FCEUXD makes asm hacking easy. It has never been so easy.
Just found this, and it was a 1 min. job. (Overly commented, asm newbie here)

This routine controls how much damage you receive when you step on lava tiles

$C863:BD 0B 61 LDA $610B,X @ $610B = #$00 ;loads the high byte of HP
$C8660 07 BNE $C86F ;branches if not zero
$C868:BD 0A 61 LDA $610A,X @ $610A = #$17 ;low byte of HP
$C86B:C9 02 CMP #$02 ;compares to prevent underflow (else you could end up with a lot of HP)
$C86D:90 11 BCC $C880 ;branches if carry clear
$C86F:BD 0A 61 LDA $610A,X @ $610A = #$17 ;loads the low byte into memory
$C872:38 SEC ;sets carry
$C873:E9 01 SBC #$01 ;damages the party
$C875:9D 0A 61 STA $610A,X @ $610A = #$17 ;stores back into place
$C878:BD 0B 61 LDA $610B,X @ $610B = #$00 ;loads high byte
$C87B:E9 00 SBC #$00 ;subtract with carry
$C87D:9D 0B 61 STA $610B,X @ $610B = #$00 ;stores back

This stuff here can be used to set a healing spring, a ressurrection place (kinda like ff2), make the damage higher, etc.etc. With 26 bytes, you can do something, jump somewhere (i need to learn bankswitching sometime) then jump back.

Amazing, and very, very easy.
Sliver X

Level: 8

Posts: 14/19
EXP: 1942
For next: 245

Since: 05-01-04

Since last post: 1 day
Last activity: 3 days
Posted on 10-05-05 03:14 PM Link | Quote
Intro:

(Fading Palette)
3A12C: Color 02
3A2B8: Color 03: First Fade Color
3A2E3: Color 03: Second Fade Color
[Fade colors cycle the base color by increments of $10 to lighter colors and back.]

3A2C8: Fade Speed
3A311: Set to EA to kill Intro altogether.

Pages: 1 2 3 4 5 6 7Add to favorites | "RSS" Feed | Next newer thread | Next older thread
Acmlm's Board - I2 Archive - Rom Hacking - FF Hacking FAQ/Running Q&A | |


ABII


AcmlmBoard vl.ol (11-01-05)
© 2000-2005 Acmlm, Emuz, et al



Page rendered in 0.019 seconds.