Users browsing this thread: 1 Guest(s)
ASM Tasks

#1
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
Coders! Thank goodness you're here! We have a lot to do to make the Full Roster Hack a reality! Since we are adding 2 new full-fledged characters, there are quite a few bells and whistles invloved to get this working. In this topic, I need coders to point out any obstacle we could have in getting our new party members up and running, as well as sign up for, and submit resolutions to said problems. Here's a handful of things that need consideration:
  • OAM Data! (Shops and Save menus) - m06
  • Equipment - Madsiur/HatZen
  • Magic lists - B-Run
  • Colosseum functionality
  • Properties relocation - Madsiur
  • Sprite expansion - Madsiur
  • Portrait expansion - Madsiur
  • Command/Attack expansion - B-Run
  • Adding actor names to Dialog commands - Madsiur
  • Probably other things.

My recent MMMMMagic update is a potential answer for the magic list problem, which comes at the cost of learning magic from equipment, and whether or not we do that might depend on how the community decides to build the 15th and 16th characters, if we only need 1 more magic list, then we can get away with treasure relocation for a 13th standard list. Either way, magic should be more-or-less covered.

Similarly, getting equipment working should be an extremely quick task and should be as simple as relocating the "Spec active when Imp" and "Heavy gear" bits, then making sure our new character slots get assigned those equipment bits. Which leads me to expansion...

.8..We have plenty of room for putting our characters in the properties IDs in the game, however it might be wise to make them officially IDs $0E and $0F and shifting off less important characters, then updating the instances they are used in vanilla.

Sprite and portrait expansion is even more straightforward and can just be tacked on after relocating the overworld and battle pointer lists... we just need someone (or someones) to get it done.

Colosseum functionality may or may not be an issue. I don't know much about it, and I really don't feel like learning. So somebody take the reigns here once we decide on where to put our characters' property information.

Commands are where things start to get hairy. Making new commands will come down to expanding or reusing code. This will likely be a HEAVY edit, but nothing we can't overcome. Attacks might be a little bit harder and involve either expanding the attack list, OR hardcoding every ability and animation setup, which will likely be tedious, but doable.

OAM is the big-ticket item. We need to track down how the image that the OAM data references is built. OAM calling is going to need to either be dynamic, or we need to find a way to make some of the current data unneeded so to make room to weasel our characters in. There will also need to be some sprite-shifting in the shop menu to make room for 2 new people.

As much as I am inclined just to do all of this myself, I (just like others here) have a personal project to attend to, as well as coordination duties here. I am happy to help out and discuss possibilities for any of the topics here, but my time coding for this may be limited. I would love for some of you very, very talented people to step up. This is a community project on all-fronts, especially when it comes to ASM work!

So speak up! Tell me what you're inclined to work on, and what you'd be willing to do if i bugged you enough (I'm very persuasive). Also bring up any other topics we may need to consider and keep an eye on the list, I will be marking who is working on what. Feel free to poke me here or on discord with any questions or comments.

Happy Hacking!
  Find
Quote  

#2
Posts: 3,969
Threads: 279
Thanks Received: 236
Thanks Given: 57
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
I can make a code proof of concept of two functional sprite sheet added and two portraits. I could also work on properties shifting, using the dummied entries for vanilla guests $0E and $0F.

For equipment, we'll need to find two equip bits on the item data. I could work on that too. Finally I suggest we scrap the already scrapped Summon command for a brand new one. Other things should come to my mind by looking each points in the code. I'll come up with a more relevant input this weekend.

P.S. Count me out (for now) for OAM, I know nothing in the domain but I'm interested in almost all the other points you've mentioned.
  Find
Quote  

#3
Posts: 127
Threads: 8
Thanks Received: 21
Thanks Given: 12
Joined: Jan 2012
Reputation: 13
Status
None
I'll see what I can figure out of the shop OAM to begin with..
  Find
Quote  

#4
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
(09-20-2016, 09:48 PM)Madsiur Wrote: I can make a code proof of concept of two functional sprite sheet added and two portraits. I could also work on properties shifting, using the dummied entries for vanilla guests $0E and $0F.

For equipment, we'll need to find two equip bits on the item data. I could work on that too. Finally I suggest we scrap the already scrapped Summon command for a brand new one. Other things should come to my mind by looking each points in the code. I'll come up with a more relevant input this weekend.

P.S. Count me out (for now) for OAM, I know nothing in the domain but I'm interested in almost all the other points you've mentioned.

There's a fair number of unused bits on equipment, tho I'm not sure many of them get automatically loaded into battle, so you may need to write a function that calls the equipment, then retrieves the bit to handle functions that need to check for Imp gear and heavy gear. The great part about equippable gear bits is that if we put Iris and our new character properties at $0E and $0F in place of Banon and Leo, and unlock the equip menu, the bits will already work. No extra ASM required. This really should be a quick fix.

Moving Leo and Banon's properties will cause a few actor assignment fixes to be needed in the event script, and Leo's battle event where Kefka... ahem... does him in... changed to the properties IDs as battle events use properties ID rather than actor or sprite.

(09-21-2016, 03:37 AM)m06 Wrote: I'll see what I can figure out of the shop OAM to begin with..

Here's what I have on the OAM data (you might want to copy this into a text document):
Code:
D8/E917: Pointers to pointers! used to make calling simple since different characters have different length OAM data
45 E9 - Terra
57 E9 - Locke
69 E9 - Cyan
7B E9 - Shadow
8D E9 - Edgar
9F E9 - Sabin
B1 E9 - Celes
C3 E9 - Strago
D5 E9 - Relm
E7 E9 - Setzer
F9 E9 - Mog
0B EA - Gau
1D EA - Gogo
2F EA - Umaro
41 EA - Soldier
44 EA - Imp
47 EA - Leo
4A EA - Bannon
4D EA - Esper Terra
50 EA - Merchant
53 EA - Ghost
56 EA - Kefka
59 EA - Soldier 2

OAM pointers for various things:
(im guessing they are the various instances called, shop menues, save, etc...)
(byte 3?)
D8/E945 - Terra
5C EA 10 - Save Screen
5C EA 10 - Pary Select
5C EA FF - Unknown/Unused
5C EA 10 - Shop
65 EA 10 - Shop Fanfare
5C EA FF - Unknown/Unused

D8/E957 - Locke
Locke
6E EA 10 - Save Screen
6E EA 10 - Party Select
6E EA FF - Unknown/Unused
6E EA 10 - Shop
77 EA 10 - Shop Fanfare
6E EA FF - Unknown/Unused

D8/E969 - Cyan
80 EA 10 - Save Screen
80 EA 10 - Pary Select
80 EA FF - Unknown/Unused
80 EA 10 - Shop
89 EA 10 - Shop Fanfare
80 EA FF - Unknown/Unused

D8/E97B - Shadow
92 EA 10 - Save Screen
92 EA 10 - Pary Select
92 EA FF - Unknown/Unused
92 EA 10 - Shop
9B EA 10 - Shop Fanfare
92 EA FF - Unknown/Unused

D8/E98D - Edgar
A4 EA 10 - Save Screen
A4 EA 10 - Pary Select
A4 EA FF - Unknown/Unused
A4 EA 10 - Shop
AD EA 10 - Shop Fanfare
A4 EA FF - Unknown/Unused

D8/E99F - Sabin
B6 EA 10 - Save Screen
B6 EA 10 - Pary Select
B6 EA FF - Unknown/Unused
B6 EA 10 - Shop
BF EA 10 - Shop Fanfare
B6 EA FF - Unknown/Unused

D8/E9B1 - Celes
C8 EA 10 - Save Screen
C8 EA 10 - Pary Select
C8 EA FF - Unknown/Unused
C8 EA 10 - Shop
D1 EA 10 - Shop Fanfare
C8 EA FF - Unknown/Unused

D8/E9C3 - Strago
DA EA 10 - Save Screen
DA EA 10 - Pary Select
DA EA FF - Unknown/Unused
DA EA 10 - Shop
E3 EA 10 - Shop Fanfare
DA EA FF - Unknown/Unused

D8/E9D5 - Relm
EC EA 10 - Save Screen
EC EA 10 - Pary Select
EC EA FF - Unknown/Unused
EC EA 10 - Shop
F5 EA 10 - Shop Fanfare
EC EA FF - Unknown/Unused

D8/E9E7 - Setzer
FE EA 10 - Save Screen
FE EA 10 - Pary Select
FE EA FF - Unknown/Unused
FE EA 10 - Shop
07 EB 10 - Shop Fanfare
FE EA FF - Unknown/Unused

D8/E9F9 - Mog
10 EB 10 - Save Screen
10 EB 10 - Pary Select
10 EB FF - Unknown/Unused
10 EB 10 - Shop
19 EB 10 - Shop Fanfare
10 EB FF - Unknown/Unused

D8/EA0B - Gau
22 EB 10 - Save Screen
22 EB 10 - Pary Select
22 EB FF - Unknown/Unused
22 EB 10 - Shop
2B EB 10 - Shop Fanfare
22 EB FF - Unknown/Unused

D8/EA1D - Gogo
34 EB 10 - Save Screen
34 EB 10 - Pary Select
34 EB FF - Unknown/Unused
34 EB 10 - Shop
3D EB 10 - Shop Fanfare
34 EB FF - Unknown/Unused

D8/EA2F - Umaro
46 EB 10 - Save Screen
46 EB 10 - Pary Select
46 EB FF - Unknown/Unused
46 EB 10 - Shop
4F EB 10 - Shop Fanfare
46 EB FF - Unknown/Unused

D8/EA41 - Soldier
58 EB FE - Save Screen

D8/EA44 - Imp
61 EB FE - Save Screen

D8/EA47 - Leo
6A EB FE - Save Screen

D8/EA4A - Bannon
73 EB FE - Save Screen

D8/EA4D - Esper Terra
7C EB FE - Save Screen

D8/EA50 - Merchant
85 EB FE - Save Screen

D8/EA53 - Ghost
8E EB FE - Save Screen

D8/EA56 - Kefka
97 EB FE - Save Screen

D8/EA59 - Soldier 2
A0 EB FE - Save Screen


Terra
D8/EA5C - Standing
02 80 01 00 39 80 11 02 39
D8/EA65 - Fanfare
02 80 00 04 39 80 10 06 39
Locke
D8/EA6E - Standing
D8/EA77 - Fanfare
02 80 01 08 37 80 11 0A 37 02 80 00 0C 37 80 10 0E 37
Cyan
D8/EA80 - Standing
D8/EA99 - Fanfare
02 80 01 20 3D 80 11 22 3D 02 80 00 24 3D 80 10 26 3D
Shadow
D8/EA92 - Standing
D8/EA9B - Fanfare
02 80 01 28 3D 80 11 2A 3D 02 80 00 2C 3D 80 10 2E 3D
Edgar
D8/EAA4 - Standing
D8/EAAD - Fanfare
02 80 01 40 35 80 11 42 35 02 80 00 44 35 80 10 46 35
Sabin
D8/EAB6 - Standing
D8/EABF - Fanfare
02 80 01 48 35 80 11 4A 35 02 80 00 4C 35 80 10 4E 35
Celes
D8/EAC8 - Standing
D8/EAD1 - Fanfare
02 80 01 60 35 80 11 62 35 02 80 00 64 35 80 10 66 35
Strago
D8/EADA - Standing
D8/EAE3 - Fanfare
02 80 01 68 3B 80 11 6A 3B 02 80 00 6C 3B 80 10 6E 3B
Relm
D8/EAEC - Standing
D8/EAF5 - Fanfare
02 80 01 80 3B 80 11 82 3B 02 80 00 84 3B 80 10 86 3B
Setzer
D8/EAFE - Standing
D8/EB07 - Fanfare
02 80 01 88 3D 80 11 8A 3D 02 80 00 8C 3D 80 10 8E 3D
Mog
D8/EB10 - Standing
D8/EB19 - Fanfare
02 80 01 A0 3F 80 11 A2 3F 02 80 00 A4 3F 80 10 A6 3F
Gau
D8/EB22 - Standing
D8/EB2B - Fanfare
02 80 01 A8 3B 80 11 AA 3B 02 80 00 AC 3B 80 10 AE 3B
Gogo
D8/EB34 - Standing
D8/EB3D - Fanfare
02 80 01 C0 3B 80 11 C2 3B 02 80 00 C4 3B 80 10 C6 3B
Umaro
D8/EB46 - Standing
D8/EB4F - Fanfare
02 80 01 C8 3F 80 11 CA 3F 02 80 00 CC 3F 80 10 CE 3F
Soldier
D8/EB58 - Standing
02 80 01 E0 37 80 11 E2 37
Imp
D8/EB61 - Standing
02 80 01 E8 35 80 11 EA 35
Leo
D8/EB6A - Standing
02 80 01 04 35 80 11 06 35
Bannon
D8/EB73 - Standing
02 80 01 0C 3B 80 11 0E 3B
Esper Terra
D8/EB7C - Standing
02 80 01 24 39 80 11 26 39
Merchant
D8/EB85 - Standing
02 80 01 2C 37 80 11 2E 37
Ghost
D8/EB8E - Standing
02 80 01 44 35 80 11 46 35
Kefka
D8/EB97 - Standing
02 80 01 4C 39 80 11 4E 39
Soldier 2
D8/EBA0 - Standing
02 80 01 E0 35 80 11 E2 35


sprite arrangement, 9 bytes each, 2 sets for each character

(standing still, facing left)
D8/EA5C: tiles wide (2 for normal sprites, 3 for large [odin, tritoch, etc...])
D8/EA5D: X position of head tile
D8/EA5E: Y position of head tile
D8/EA5F: head tile ID (start of 4-byte block)
D8/EA60: palette and other things; palette uses (0000 1110) bits
D8/EA61: X position of foot tile
D8/EA62: Y position of foot tile
D8/EA63: foot tile ID (start of 4-byte block)
D8/EA64: palette and other things; palette uses (0000 1110) bits

("fanfare" pose, both arms up, facing left)
D8/EA65: tiles wide (2 for normal sprites, 3 for large [odin, tritoch, etc...])
D8/EA66: X position of head tile
D8/EA67: Y position of head tile
D8/EA68: head tile ID (start of 4-byte block)
D8/EA69: palette and other things; palette uses (0000 1110) bits
D8/EA6A: X position of foot tile
D8/EA6B: Y position of foot tile
D8/EA6C: foot tile ID (start of 4-byte block)
D8/EA6D: palette and other things; palette uses (0000 1110) bits

Palettes:
35 = 0
37 = 1
39 = 2
3B = 3
3D = 4
3F = 5


#$D8 loaded (possible bank pointers)
C3C26F
C3ED5D
C3C22F
C3B318
C37C0B
C3C0E2 - Shop menu Bank loaded
C3B213
C378BD
C376BC
C362C9
C33490
C3194c - Save menu



Upload actor sprites for shop
C3/6D79:    A00030      LDY #$3000     ; $6000
C3/6D7C:    8C1621      STY $2116      ; Set VRAM ptr
C3/6D7F:    64E3        STZ $E3        ; Actor slot: 1

Fork: Load both poses for two actors
C3/6D81:    A400        LDY $00        ; Tile slot: 1
C3/6D83:    E220        SEP #$20       ; 8-bit A
C3/6D85:    7B          TDC            ; Clear A
C3/6D86:    BB          TYX            ; Tile slot
C3/6D87:    BF076EC3    LDA $C36E07,X  ; GFX ptr index
C3/6D8B:    0A          ASL A          ; Double it
C3/6D8C:    AA          TAX            ; Index it
C3/6D8D:    C220        REP #$20       ; 16-bit A
C3/6D8F:    BF276EC3    LDA $C36E27,X  ; Tile's GFX ptr
C3/6D93:    C9FFFF      CMP #$FFFF     ; Blank tile?
C3/6D96:    F052        BEQ $6DEA      ; Blank if so
C3/6D98:    48          PHA            ; Save pointer
C3/6D99:    A9A016      LDA #$16A0     ; GFX struct size
C3/6D9C:    E220        SEP #$20       ; 8-bit A
C3/6D9E:    8D1B21      STA $211B      ; Set matrix A LB
C3/6DA1:    EB          XBA            ; Struct size HB
C3/6DA2:    8D1B21      STA $211B      ; Set matrix A HB
C3/6DA5:    A5E3        LDA $E3        ; Actor A's slot
C3/6DA7:    8D1C21      STA $211C      ; Set matrix B
C3/6DAA:    8D1C21      STA $211C      ; ...
C3/6DAD:    C220        REP #$20       ; 16-bit A
C3/6DAF:    68          PLA            ; Tile GFX ptr
C3/6DB0:    18          CLC            ; Prepare ADC
C3/6DB1:    6D3421      ADC $2134      ; Add product LBs
C3/6DB4:    85EB        STA $EB        ; Set source LBs
C3/6DB6:    E220        SEP #$20       ; 8-bit A
C3/6DB8:    AD3621      LDA $2136      ; Product HB
C3/6DBB:    69D5        ADC #$D5       ; Add base bank
C3/6DBD:    85ED        STA $ED        ; Set source HB
C3/6DBF:    C221        REP #$21       ; ...
C3/6DC1:    A5EB        LDA $EB        ; ...
C3/6DC3:    690000      ADC #$0000     ; ...
C3/6DC6:    85EB        STA $EB        ; ...
C3/6DC8:    E220        SEP #$20       ; ...
C3/6DCA:    A5ED        LDA $ED        ; ...
C3/6DCC:    6900        ADC #$00       ; ...
C3/6DCE:    85ED        STA $ED        ; ...
C3/6DD0:    C220        REP #$20       ; 16-bit A
C3/6DD2:    5A          PHY            ; Save tile slot
C3/6DD3:    20F86D      JSR $6DF8      ; Load tile's GFX
C3/6DD6:    7A          PLY            ; Tile slot
C3/6DD7:    C8          INY            ; Tile slot +1
C3/6DD8:    C02000      CPY #$0020     ; Done 32 tiles?
C3/6DDB:    D0A6        BNE $6D83      ; Loop if not

Fork: Handle next two actors
C3/6DDD:    E220        SEP #$20       ; 8-bit A
C3/6DDF:    E6E3        INC $E3        ; Actor slot +1
C3/6DE1:    E6E3        INC $E3        ; Actor slot +1
C3/6DE3:    A5E3        LDA $E3        ; Actor slot
C3/6DE5:    C910        CMP #$10       ; Handled 16?
C3/6DE7:    D098        BNE $6D81      ; Loop if not
C3/6DE9:    60          RTS

Fork: Create a blank tile
C3/6DEA:    A91000      LDA #$0010     ; Rows: 8
C3/6DED:    85E7        STA $E7        ; Set counter
C3/6DEF:    9C1821      STZ $2118      ; 8 px, 2 planes
C3/6DF2:    C6E7        DEC $E7        ; Counter -1
C3/6DF4:    D0F9        BNE $6DEF      ; Loop till zero
C3/6DF6:    80DF        BRA $6DD7      ; Do next tile

Upload current actor sprite tile for shop
C3/6DF8:    A400        LDY $00        ; Index: 0
C3/6DFA:    B7EB        LDA [$EB],Y    ; 8 px, 2 planes
C3/6DFC:    8D1821      STA $2118      ; Save in VRAM
C3/6DFF:    C8          INY            ; Index +1
C3/6E00:    C8          INY            ; Index +1
C3/6E01:    C02000      CPY #$0020     ; Done 8 rows?
C3/6E04:    D0F4        BNE $6DFA      ; Loop if not
C3/6E06:    60          RTS

Indexes for loading tiles from two shop actors
C3/6E07:    00          ; Actor1 X1,Y1 (hands down)
C3/6E08:    01          ; Actor1 X1,Y2 (hands down)
C3/6E09:    04          ; Actor1 X3,Y1 (hands down)
C3/6E0A:    05          ; Actor1 X3,Y2 (hands down)
C3/6E0B:    08          ; Actor1 X1,Y1 (hands up)
C3/6E0C:    09          ; Actor1 X1,Y2 (hands up)
C3/6E0D:    0C          ; Actor1 X3,Y1 (hands up)
C3/6E0E:    0D          ; Actor1 X3,Y2 (hands up)
C3/6E0F:    10          ; Actor2 X1,Y1 (hands down)
C3/6E10:    11          ; Actor2 X1,Y2 (hands down)
C3/6E11:    14          ; Actor2 X3,Y1 (hands down)
C3/6E12:    15          ; Actor2 X3,Y2 (hands down)
C3/6E13:    18          ; Actor2 X1,Y1 (hands up)
C3/6E14:    19          ; Actor2 X1,Y2 (hands up)
C3/6E15:    1C          ; Actor2 X3,Y1 (hands up)
C3/6E16:    1D          ; Actor2 X3,Y2 (hands up)
C3/6E17:    02          ; Actor1 X2,Y1 (hands down)
C3/6E18:    03          ; Actor1 X2,Y2 (hands down)
C3/6E19:    06          ; Actor1 X4,Y1 (hands down)
C3/6E1A:    07          ; Actor1 X4,Y2 (hands down)
C3/6E1B:    0A          ; Actor1 X2,Y1 (hands up)
C3/6E1C:    0B          ; Actor1 X2,Y2 (hands up)
C3/6E1D:    0E          ; Actor1 X4,Y1 (hands up)
C3/6E1E:    0F          ; Actor1 X4,Y2 (hands up)
C3/6E1F:    12          ; Actor2 X2,Y1 (hands down)
C3/6E20:    13          ; Actor2 X2,Y2 (hands down)
C3/6E21:    16          ; Actor2 X4,Y1 (hands down)
C3/6E22:    17          ; Actor2 X4,Y2 (hands down)
C3/6E23:    1A          ; Actor2 X2,Y1 (hands up)
C3/6E24:    1B          ; Actor2 X2,Y2 (hands up)
C3/6E25:    1E          ; Actor2 X4,Y1 (hands up)
C3/6E26:    1F          ; Actor2 X4,Y2 (hands up)

Tile graphics pointers for odd-numbered shop actors
C3/6E27:    C003        ; 1,1 (hands down)
C3/6E29:    E003        ; 1,2 (hands down)
C3/6E2B:    0005        ; 2,1 (hands down)
C3/6E2D:    2005        ; 2,2 (hands down)
C3/6E2F:    4005        ; 3,1 (hands down)
C3/6E31:    6005        ; 3,2 (hands down)
C3/6E33:    FFFF        ; 4,1 (hands down)
C3/6E35:    FFFF        ; 4,2 (hands down)
C3/6E37:    C003        ; 1,1 (hands up)
C3/6E39:    6006        ; 1,2 (hands up)
C3/6E3B:    8006        ; 2,1 (hands up)
C3/6E3D:    A006        ; 2,2 (hands up)
C3/6E3F:    C006        ; 3,1 (hands up)
C3/6E41:    E006        ; 3,2 (hands up)
C3/6E43:    FFFF        ; 4,1 (hands up)
C3/6E45:    FFFF        ; 4,2 (hands up)

Tile graphics pointers for even-numbered shop actors
C3/6E47:    601A        ; 1,1 (hands down)
C3/6E49:    801A        ; 1,2 (hands down)
C3/6E4B:    A01B        ; 2,1 (hands down)
C3/6E4D:    C01B        ; 2,2 (hands down)
C3/6E4F:    E01B        ; 3,1 (hands down)
C3/6E51:    001C        ; 3,2 (hands down)
C3/6E53:    FFFF        ; 4,1 (hands down)
C3/6E55:    FFFF        ; 4,2 (hands down)
C3/6E57:    601A        ; 1,1 (hands up)
C3/6E59:    001D        ; 1,2 (hands up)
C3/6E5B:    201D        ; 2,1 (hands up)
C3/6E5D:    401D        ; 2,2 (hands up)
C3/6E5F:    601D        ; 3,1 (hands up)
C3/6E61:    801D        ; 3,2 (hands up)
C3/6E63:    FFFF        ; 4,1 (hands up)
C3/6E65:    FFFF        ; 4,2 (hands up)
  Find
Quote  
[-] The following 2 users say Thank You to B-Run for this post:
  • DenVaktare (10-28-2017), m06 (12-19-2016)

#5
Posts: 149
Threads: 21
Thanks Received: 40
Thanks Given: 3
Joined: Dec 2013
Reputation: 9
Status
Auto-life
Unfortunately, in the shops, the actor sprites which are displayed only work correctly for the default characters. The others sprites don't display correctly. I suspect it may be related to the fact that they don't have a full sprite sheet or the full set of oam pointers. Anyway, if we want to expand the shop sprites from 14 to 16 characters, we should fix this issue.

Also, we need to change another routine. When you select an item (double click) in the item menu, it displays the names of the characters who can equip it. It also need to be updated to include all the 16 characters.

As mentioned, the guests identifier can be $0e and $0f. Their equipment flags will be the the 'imp' and 'merit award' flag. However, a few issues may arise.

The game engine uses the actor id to determinate where to load from the startup data. As example, the 'additional physical power' and the 'run' variable are loaded directly from the startup data (rom) when the battle starts. The game engine don't load all the battle data of the characters based only in RAM values. If you use the id of Banon and Leo, these ROM variables will be based on the setup of Leo and Banon, independently of whatever setup the guests may have in another startup slot.

If you want to use the ids of Banon and Leo, probably you will need to create another versions of them in another slot of the startup up data and change the events related to them accordantly. Perhaps it will be easier to adjust the equipment code to add an exception for two specific guests identifiers instead of redesigning Leo and Banon events. You can also change the routine that loads these rom variables with exceptions for the two guest characters.

Also, Banon id has a hard coded feature to trigger the game over if the character is defeated. When Banon dies it is game over and this feature will be inherited by whoever has its identifier. You can kill this feature with an asm modification but it will change the game history because the game tells you, in Banon's arc, that the game is over if Banon dies but it will not happen if you disable this feature.
  Find
Quote  

#6
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
(09-21-2016, 10:12 AM)HatZen08 Wrote: Unfortunately, in the shops, the actor sprites which are displayed only work correctly for the default characters. The others sprites don't display correctly. I suspect it may be related to the fact that they don't have a full sprite sheet or the full set of oam pointers. Anyway, if we want to expand the shop sprites from 14 to 16 characters, we should fix this issue.

Yes, this is the OAM data I'm talking about, I think we have most of the puzzle pieces we need to make this a dynamic system rather than the static one that's currently in place. God bless Novalia's C3.

(09-21-2016, 10:12 AM)HatZen08 Wrote: Also, we need to change another routine. When you select an item (double click) in the item menu, it displays the names of the characters who can equip it. It also need to be updated to include all the 16 characters.

Good catch. Can you take care of that?

(09-21-2016, 10:12 AM)HatZen08 Wrote: As mentioned, the guests identifier can be $0e and $0f. Their equipment flags will be the the 'imp' and 'merit award' flag. However, a few issues may arise.

The game engine uses the actor id to determinate where to load from the startup data. As example, the 'additional physical power' and the 'run' variable are loaded directly from the startup data (rom) when the battle starts. The game engine don't load all the battle data of the characters based only in RAM values. If you use the id of Banon and Leo, these ROM variables will be based on the setup of Leo and Banon, independently of whatever setup the guests may have in another startup slot.

So to clarify, you're saying it uses the Actor ID loaded as the index to the properties for a few things?, that should be an easy ASM fix by loading the properties ID instead of the actor ID. If I'm misunderstanding post the relevant code for me.

(09-21-2016, 10:12 AM)HatZen08 Wrote: Also, Banon id has a hard coded feature to trigger the game over if the character is defeated. When Banon dies it is game over and this feature will be inherited by whoever has its identifier. You can kill this feature with an asm modification but it will change the game history because the game tells you, in Banon's arc, that the game is over if Banon dies but it will not happen if you disable this feature.

Another good catch. We ought to be able to change that to whatever new ID we give Banon no problem.

Keep up the good work!
  Find
Quote  

#7
Posts: 149
Threads: 21
Thanks Received: 40
Thanks Given: 3
Joined: Dec 2013
Reputation: 9
Status
Auto-life
(09-21-2016, 10:31 AM)B-Run Wrote: Good catch. Can you take care of that?

Yes. I will check the code and report back later. I will assume that the guests identifier will be $0e and $0f and that their flags for equipment will be the 'imp' and 'merit award' flag. If it is incorrect, please correct me.
  Find
Quote  

#8
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
I found another thing, and we need someone with some knowledge of the dialog commands: actors 0E and 0F, while they have RAM for naming, do not have dialog commands that fill that name in. So <A0> is Terra, <A6> is Celes, <A13> is Umaro... we need someone to add <A14> and <A15> because they do not currently work.
  Find
Quote  

#9
Posts: 149
Threads: 21
Thanks Received: 40
Thanks Given: 3
Joined: Dec 2013
Reputation: 9
Status
Auto-life
For testing purposes, i create a (lame) event in the south figaro city at the stable (world of ruin). When you talk with the chocobo manager, it will setup the new guests and give you two rare items. They are used to identify the availability of the new created guests. In the default game these rare items were unused.

You must call this event only in the world of ruin because the guests slots are used in the world of balance. This event it is only for testing and it can be relocated to another location later. The only noticeable feature of the event in the player perspective is the 'found item' sound.

After the event, you can go to the airship and change the party members. The two new guests (now banon and leo) should be available, as long you have the associated rare items. As long as i know, they can only be removed by an event.

Unlike the guest adder code, the guests MUST be setup by an event, like the event used now. The actual code only allows the guests to be selectable based on its rare items. For reference, it will not check if the guests are properly setup by an event.

I changed the code of the display of names when you double click an item. It now includes the two guests, as long as they have their associated rare items. Unlike the original game design, all actors names have a fixed position in the screen. It makes easier to locate if an item is equip-able by a specific actor/character.

For whatever reason, leo and banon can fight normally in the Colosseum. Perhaps, is it because they were setup by an event instead of directly by code? I don't know but it is good news for me.

We know that many issues will arrive because the game design didn't expect guests in the world of ruin. However, because the created guests are now selectable in the roster, i suppose it is a good start for this project. We can track and hunt down these issues later. :-)

You can compile it with asar. The rom is the ff3 rom, english, version 1.0, with a header. You can download it here:

http://www.bwass.org/bucket/ff6re_01.7z
  Find
Quote  
[-] The following 1 user says Thank You to HatZen08 for this post:
  • DenVaktare (10-28-2017)

#10
Posts: 136
Threads: 12
Thanks Received: 0
Thanks Given: 12
Joined: Oct 2013
Reputation: 0
Status
None
Okay so, if the equipment has the "imp"flag, wouldn't it still make any equipment with that flag's stats only affect the character if they're an imp? I probably worded that horribly.


If you ever feel useless, just remember that Umaro has an MP stat.
  Find
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite