Final Requests for Help
04-05-2021, 11:28 PM
(This post was last modified: 05-09-2021, 11:45 PM by PowerPanda.)
Development on Divergent Paths is wrapping up. I am down to my final checkboxes of things to include if I can. With Assassin's help yesterday, everything that is a "must have" has been added, except for my new event sequence, which I will handle myself. The rest of these are things that I am willing to cut if they become too complicated. I want to post them here in case (1) someone has already done it, or (2) someone wants to take it on. So, here's my list. Reply if you'd be interested in helping.
BATTLE MECHANICS
Just a note on Battle Mechanics. I have never taken a computer programming class in my life. When I started hacking FF6 four years ago, I didn't even know what a hex editor was. My experience with this has been good, and I want to go back and learn the "correct" way once I'm done with this hack, but I know that some people here will be able to do the following in 1/20th of the time it would take me.
1. Steal both rare and common items from enemies. I know that Pandora's Box has this, but I haven't been able to find the code as a standalone. The basic premise is that the enemy is not marked as having "no item" until you've stolen both the rare and the common item. (Thanks, Drakkhen!)
2. Change Smoke Bomb, Super Ball, and Magicite into throw weapons. They would operate exactly as they are now, but they would be exclusive to Shadow's Throw ability. Right now, when converted to "Throw" they show the generic "spinning knife" animation, and don't have their effects. (Thanks, Seibaby!)
3. Tools have a 1 in 32 chance of breaking when used. This would also require removing the restriction of not being able to buy more than 1 of each tool from shops. I would also like, if possible, for the Chain Saw to be exempted from this, since it is the only unique tool not acquired from shops. (Thanks, Subtraction!)
4. When Imp status is cast on Kappa, rather than changing her sprite to the imp sprite, it would be fun to have her change to the human merchant. This one is purely "just for fun", and I'd be fine releasing the final hack without it. (Thanks, CDude!)
ANIMATIONS
1. Change Raiden's animation to display damage rather than slicing through enemies./
GRAPHICS
1. The Esper Elder (Sprite 44) has room for a special pose. I want a "facedown" pose similar to Maduin or Yura.
2. Cid (Sprite 47) also has room for a special pose. I want a "casting magic" pose.
MUSIC
1. I want to convert William Kage's "Shock and Awe" into SPC and import it. He has given permission, but he does not have a midi file for it. (In Progress by William Kage and Gi Nattak)
BATTLE MECHANICS
Just a note on Battle Mechanics. I have never taken a computer programming class in my life. When I started hacking FF6 four years ago, I didn't even know what a hex editor was. My experience with this has been good, and I want to go back and learn the "correct" way once I'm done with this hack, but I know that some people here will be able to do the following in 1/20th of the time it would take me.
1. Steal both rare and common items from enemies. I know that Pandora's Box has this, but I haven't been able to find the code as a standalone. The basic premise is that the enemy is not marked as having "no item" until you've stolen both the rare and the common item. (Thanks, Drakkhen!)
2. Change Smoke Bomb, Super Ball, and Magicite into throw weapons. They would operate exactly as they are now, but they would be exclusive to Shadow's Throw ability. Right now, when converted to "Throw" they show the generic "spinning knife" animation, and don't have their effects. (Thanks, Seibaby!)
3. Tools have a 1 in 32 chance of breaking when used. This would also require removing the restriction of not being able to buy more than 1 of each tool from shops. I would also like, if possible, for the Chain Saw to be exempted from this, since it is the only unique tool not acquired from shops. (Thanks, Subtraction!)
4. When Imp status is cast on Kappa, rather than changing her sprite to the imp sprite, it would be fun to have her change to the human merchant. This one is purely "just for fun", and I'd be fine releasing the final hack without it. (Thanks, CDude!)
ANIMATIONS
1. Change Raiden's animation to display damage rather than slicing through enemies./
GRAPHICS
1. The Esper Elder (Sprite 44) has room for a special pose. I want a "facedown" pose similar to Maduin or Yura.
2. Cid (Sprite 47) also has room for a special pose. I want a "casting magic" pose.
MUSIC
1. I want to convert William Kage's "Shock and Awe" into SPC and import it. He has given permission, but he does not have a midi file for it. (In Progress by William Kage and Gi Nattak)
Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
04-05-2021, 11:44 PM
(04-05-2021, 11:28 PM)PowerPanda Wrote: 3. Tools have a 1 in 32 chance of breaking when used. This would also require removing the restriction of not being able to buy more than 1 of each tool from shops. I would also like, if possible, for the Chain Saw to be exempted from this, since it is the only unique tool not acquired from shops.
Don't know about making the tools break, but removing the buy restriction is easy enough.
Code:
Invoke buy order menu if justified
C3/B7E6: 20C2BF JSR $BFC2 ; Selected item
C3/B7E9: 202183 JSR $8321 ; Compute index
C3/B7EC: AE3421 LDX $2134 ; Load it
C3/B7EF: BF0050D8 LDA $D85000,X ; Properties
C3/B7F3: 2907 AND #$07 ; Tool?
C3/B7F5: D013 BNE $B80A ; Branch if not
C3/B7F7: 2092BC JSR $BC92 ; Define $64
C3/B7FA: A564 LDA $64 ; Owning none?
C3/B7FC: F00C BEQ $B80A ; Test GP if so
C3/B7FE: 20C00E JSR $0EC0 ; Play buzzer
C3/B801: A0F5C3 LDY #$C3F5 ; Text pointer
C3/B804: 20F902 JSR $02F9 ; Draw excuse
C3/B807: 4C7DB8 JMP $B87D ; Set to exit
Just JMP $B80A unconditionally instead of checking if it's a tool.
04-06-2021, 07:24 AM
Here's some code I wrote years ago for expanding Throwable items. You can use this to give items an effect when thrown.
Code:
; Generic non-magic Skean function
; Compares item ID to a table of IDs, then uses a jump table to jump to
; mini-functions to perform for that specific item ID
hirom
;header
!freespace = $C265A0
; The safe and sane version - no infinite loops if no match
org $C22ADC
C22ADC: LDA $01,S ; Item ID
PHX ; Preserve X
LDX #$0006 ; Check four entries: 0, 2 ,4, 6
.loop CMP.l table,X ; Compare with table of item IDs
BEQ .jump ; If match, jump
DEX #2 ; Next item
BPL .loop ; Loop and check next table entry
BRA .end ; If no matches, no action
.jump JSR (jumptable,X) ; If match, perform associated function
.end PLX
print pc
; The unsafe version - assumes a match, saves 4 bytes
; Better make sure there's a matching Item ID table entry for each throwable
;org $C22ADC
;C22ADC: LDA $01,S
; PHX
; LDX #$0006
;.loop DEX #2
; CMP.l throwables,X
; BNE .loop
;.dostuff JSR (jumptable,X)
;.end PLX
; NOP #4
;print pc
org !freespace
reset bytes
table:
print "inviz edge:", pc
dw $00AE ; Inviz Edge
print "shadow edge:", pc
dw $00AF ; Shadow Edge
print "smoke bomb:", pc
dw $00FC ; Smoke Bomb
dw $0043 ; Tack Star
jumptable:
dw inviz_Edge
dw shadow_Edge
dw smoke_Bomb
dw magic_Shuriken
inviz_Edge:
LDA #$10
TSB $11AA ; Set Clear in status attack byte 1
RTS
shadow_Edge:
LDA #$04
TSB $11AB ; Set Image in status attack byte 2
RTS
smoke_Bomb:
LDA #$96 ; Special effect $4B (doubled to serve as index)
STA $11A9 ; Set Smoke Bomb in Special Effect
LDA #$01
STA $B5 ; Set command to Item for animation purposes, and so the Can't Run check works
RTS
magic_Shuriken:
LDA #$02
TRB $B2 ; Clear no critical and ignore True Knight
LDA #$0E ; Special Effect $07 (doubled)
STA $11A9 ; Set MP Crits
RTS
print bytes
(04-05-2021, 11:28 PM)PowerPanda Wrote: 3. Tools have a 1 in 32 chance of breaking when used. This would also require removing the restriction of not being able to buy more than 1 of each tool from shops. I would also like, if possible, for the Chain Saw to be exempted from this, since it is the only unique tool not acquired from shops.
This is actually not a bad idea. In fact, this almost reminds me of Final Fantasy Legend 2 (Saga 2) for gameboy in which every single weapon has a limited number of uses. At first nobody likes it, but it quickly became my favorite feature of the game over the years. It makes obtaining new weapons more exciting knowing you have 30 uses before they disappear. It also makes you continue to use up weaker weapons even though you have more powerful weapons in your inventory. Anyway, this idea with the tools also gives you something to do with those dozens of tools you accumulate for Edgar through monster drops toward the end of the game...
By the way, the Chainsaw in my hack (thanks to this patch) no longer attemps an instant death move when monsters are immune to it. However, I realized this made the Drill completely useless, so to offset this, I lowered the Chainsaw hit rate to 150. This means the Drill is 100% accurate while the Chainsaw could sometimes miss. That gives a reason to still choose the Drill against monsters that have high evade, like Cactrots.
(04-05-2021, 11:28 PM)PowerPanda Wrote: 1. Steal both rare and common items from enemies. I know that Pandora's Box has this, but I haven't been able to find the code as a standalone. The basic premise is that the enemy is not marked as having "no item" until you've stolen both the rare and the common item.
This patch will do this. It was made by Lufia for RotDS beta testing purpose, so credit goes to her. She said the patch should work on vanilla but I suspect it might be on top of things like Imzogelmo's multi-steal fix or any other patch that Gi Nattak used that would modify the same addresses. I inlcuded her notes as well. Hopefully it will help you figure it out..
FF6-RotDSv200-StealPatch.zip (601 bytes, 5 downloads)
04-06-2021, 09:36 PM
(04-06-2021, 07:24 AM)seibaby Wrote: Here's some code I wrote years ago for expanding Throwable items. You can use this to give items an effect when thrown.
That worked perfectly for the Smoke Bomb and Super Ball! Thank you! Magicite isn't happy with being turned into a thrown item, so I'm just going to leave that as-is and call it a day.
Madsiur Wrote:This patch will do this. It was made by Lufia for RotDS beta testing purpose, so credit goes to her. She said the patch should work on vanilla but I suspect it might be on top of things like Imzogelmo's multi-steal fix or any other patch that Gi Nattak used that would modify the same addresses. I inlcuded her notes as well. Hopefully it will help you figure it out..
Hmm... that code doesn't seem to be working, even in vanilla. I'll see what I can figure out with the notes.
Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
04-06-2021, 09:56 PM
04-06-2021, 10:28 PM
(This post was last modified: 04-06-2021, 11:36 PM by PowerPanda.)
I figured it out. All of her notes were written for a header, but the IPS patch was for a no header rom.
The other complication is that half of her beta patch was for the purpose of making Steal always hit... obviously not something we want. I was able to remove those portions, and was left with this:
What it appears to be doing is this: the first time you steal from an enemy, you will always get their rare steal (seems odd). Then, when you steal again and get a hit, it will increase Y so you're targeting the common steal slot. Only after you have stolen both items will you get the "nothing to steal" message. I'm going to have to chew on this. I feel like the code is 70% of the way there, but not quite finished.
EDIT: Okay, I need help with this. This is the subroutine that decides what to steal. I'm trying to add the following points of logic. As I have it written below, it is working. However, the problem is that if you've already stolen the common item, then the rare item gets a major boost in probability. Here is the logic I want to add in:
1. 1/8th of the time, branch to the rare steal on the first hit (done and working)
2. If you have already stolen the common item, then miss 7/8 of the time.
In the original C2 routine, there are several branches to C2/3A01, which displays the "can't steal" message. I tried switching this subroutine from a JSR to a JMP so that I could jump out of it to 3A01, but it's crashing the game. Any ideas on what I could add here so that even if you've already stolen the common item, you'll still miss on the rare item 87.5% of the time?
The other complication is that half of her beta patch was for the purpose of making Steal always hit... obviously not something we want. I was able to remove those portions, and was left with this:
Code:
C2/39E0: EA NOP
C2/69E1: 20 F0 66 JSR $66F0
C2/69E4: EA
...
C2/39FA: 7A PLY
C2/39FB: EA EA NOP
FREESPACE C2
C2/66F0: B9 08 33 LDA $3308,Y
C2/66F3: C9 FF CMP #$FF
C2/66F5: D0 04 BNE $66FB
C2/66F7: C8 INY
C2/66F8: B9 08 33 LDA $3308,Y
C2/66FB: 60 RTS
What it appears to be doing is this: the first time you steal from an enemy, you will always get their rare steal (seems odd). Then, when you steal again and get a hit, it will increase Y so you're targeting the common steal slot. Only after you have stolen both items will you get the "nothing to steal" message. I'm going to have to chew on this. I feel like the code is 70% of the way there, but not quite finished.
EDIT: Okay, I need help with this. This is the subroutine that decides what to steal. I'm trying to add the following points of logic. As I have it written below, it is working. However, the problem is that if you've already stolen the common item, then the rare item gets a major boost in probability. Here is the logic I want to add in:
1. 1/8th of the time, branch to the rare steal on the first hit (done and working)
2. If you have already stolen the common item, then miss 7/8 of the time.
In the original C2 routine, there are several branches to C2/3A01, which displays the "can't steal" message. I tried switching this subroutine from a JSR to a JMP so that I could jump out of it to 3A01, but it's crashing the game. Any ideas on what I could add here so that even if you've already stolen the common item, you'll still miss on the rare item 87.5% of the time?
Code:
20 5A 4B JSR $4B5A Choose a random number
C9 20 CMP #$20
90 ?? BCC +?? bytes 1 in 8 times, branch to the rare steal (the DEY line)
B9 09 33 LDA $3309,Y load the common steal
C9 FF CMP #$FF Was it already empty?
D0 04 BNE $66FB If not, branch to the end
[NEED TO ADD SOMETHING HERE]
88 DEY
B9 09 33 LDA $3309,Y target the rare steal
60 RTS
Projects:
FFVI: Divergent Paths (Completed) - a complete storyline and gameplay hack of FF6 that adds Leo as a playable character
04-07-2021, 12:04 AM
Just kicking an idea around, but in the 'something here' spot, you could call the random number subroutine again and compare it against 1/8 again. If the comparison succeeds, you load the rare steal and return to sender. If it fails, you load a static #$FF and return to sender.
04-07-2021, 12:11 AM
Code:
C2/39D8: 5A PHY
C2/39E4: 7A PLY
C2/39FA: 99 09 33 STA $3309,Y (in both slots)
Code:
C2/39D8: EA NOP
C2/39E4: EA NOP
C2/39FA: EA EA EA NOP
These should be the only changes you'd need to make to the original function to work how you want
The following 2 users say Thank You to Drakkhen for this post:
• madsiur (04-07-2021), PowerPanda (04-07-2021)
• madsiur (04-07-2021), PowerPanda (04-07-2021)
« Next Oldest | Next Newest »
Users browsing this thread: 3 Guest(s)