Users browsing this thread: 1 Guest(s)
Final Requests for Help

#1
Posts: 453
Threads: 45
Thanks Received: 195
Thanks Given: 116
Joined: Feb 2017
Reputation: 23
Status
None
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.

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.

OTHER
1. I want to overwrite the Special Thanks section of the credits to include the names of all of the hackers whose hacks I've used. This is more time consuming than hard. I have a spreadsheet of how the characters translate to hex. I have Assassin's C2 partial disassembly, which lists all of the pointers and text strings.


Projects:
Divergent Paths: The 3 Scenarios (Completed) - a redo of the 3 scenarios in the original game that gives equal time to each group. Meant to be a basis for future mods.
FFVI: Divergent Paths (In Progress) - a hack built off of the 3 scenarios that changes other events in the same, such as making Leo permanently recruitable, bringing Banon's story closure, and adding 1 more secret character.
  Find
Quote  

#2
Posts: 40
Threads: 4
Thanks Received: 57
Thanks Given: 3
Joined: Apr 2018
Reputation: 4
Status
Shell
(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.
  Find
Quote  

#3
Posts: 268
Threads: 18
Thanks Received: 129
Thanks Given: 53
Joined: Mar 2014
Reputation: 8
Status
None
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
  Find
Quote  
[-] The following 1 user says Thank You to seibaby for this post:
  • PowerPanda (04-06-2021)

#4
Posts: 273
Threads: 19
Thanks Received: 13
Thanks Given: 48
Joined: Dec 2017
Reputation: 2
Status
None
(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.
  Find
Quote  

#5
Posts: 3,847
Threads: 271
Thanks Received: 778
Thanks Given: 436
Joined: Oct 2011
Reputation: 63
Status
Tissue-aware
(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..

.zip  FF6-RotDSv200-StealPatch.zip (601 bytes, 5 downloads)
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • PowerPanda (04-06-2021)

#6
Posts: 453
Threads: 45
Thanks Received: 195
Thanks Given: 116
Joined: Feb 2017
Reputation: 23
Status
None
(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:
Divergent Paths: The 3 Scenarios (Completed) - a redo of the 3 scenarios in the original game that gives equal time to each group. Meant to be a basis for future mods.
FFVI: Divergent Paths (In Progress) - a hack built off of the 3 scenarios that changes other events in the same, such as making Leo permanently recruitable, bringing Banon's story closure, and adding 1 more secret character.
  Find
Quote  

#7
Posts: 3,847
Threads: 271
Thanks Received: 778
Thanks Given: 436
Joined: Oct 2011
Reputation: 63
Status
Tissue-aware
(04-06-2021, 09:36 PM)PowerPanda Wrote: Hmm... that code doesn't seem to be working, even in vanilla. I'll see what I can figure out with the notes.

It was made for RotDS 2.0, maybe if you make an IPS report while applying it to RotDS it would give you some hint about what is changed..
  Find
Quote  

#8
Posts: 453
Threads: 45
Thanks Received: 195
Thanks Given: 116
Joined: Feb 2017
Reputation: 23
Status
None
I figured it out. All of her notes were written for a header, but the IPS patch was for a no header rom.  Laugh


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:
Divergent Paths: The 3 Scenarios (Completed) - a redo of the 3 scenarios in the original game that gives equal time to each group. Meant to be a basis for future mods.
FFVI: Divergent Paths (In Progress) - a hack built off of the 3 scenarios that changes other events in the same, such as making Leo permanently recruitable, bringing Banon's story closure, and adding 1 more secret character.
  Find
Quote  

#9
Posts: 292
Threads: 22
Thanks Received: 117
Thanks Given: 117
Joined: Dec 2018
Reputation: 18
Status
Moog
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.
  Find
Quote  

#10
Posts: 51
Threads: 5
Thanks Received: 33
Thanks Given: 0
Joined: Jun 2010
Reputation: 6
Status
None
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
Quote  
[-] The following 2 users say Thank You to Drakkhen for this post:
  • madsiur (04-07-2021), PowerPanda (04-07-2021)



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite