Users browsing this thread: 1 Guest(s)
GrayShadow's 'Giving Gogo Magic' code

#1
Posts: 2,256
Threads: 90
Thanks Received: 285
Thanks Given: 280
Joined: Aug 2009
Reputation: 40
Status
Nattak\'d
This is Grayshadow's work so all credit to him. It is basically his natural magic for Relm code, but was further altered to give Gogo correct Magic learning, as well as some other things, like compatibility with Resilient Morph since that's what my hack has implemented and includes Giving Mog a Dance and altering Celes's Natural magic list - so be sure and remove or comment out this stuff from the file before patching if not needed. As I'm sure GrayShadow's wouldn't mind, I'm posting it as a reference or patch for those who want a character like Gogo or Umaro etc. to be like the other characters in terms of magic, in which the values for Gogo can be easily changed to another.

Edit Madsiur: To allow Umaro to take Gogo's magic saving spot in SRAM you'll need to apply umarofix.asm after applying gogomagic.asm. You'll also need to edit the gogomagic.asm patch in order to switch Gogo for Umaro.

Download


gogomagic.asm
Code:
hirom
; header

; Regular Magic Gogo v1.0
;
; This patch adjusts some SRAM locations such that Gogo 
; has a regular magic list and is able to learn spells
; from espers. It will be incompatible as-is with patches
; that affect:
;
; *Morph (now at $1E3A)
; *SwdTech (now at $1E3B)
; *Blitz (now at $1E3C)
; *Lores  (now at $1E3D-$1E3F)
;
; as it adjusts the location-in-SRAM where information
; about them is stored. [DEPRECATED: It also uses 6 bytes at the end 
; of the treasure chest bytes; only the first 33 are known
; to be used, so this shouldn't affect the vanilla game,
; but it limits any hacks to 42, rather than 48, treasure
; chest bytes.]
;
; If you need information on compatibility, feel free to
; drop me a line via email (in.the.afterlight@gmail.com)
; or via PM at ff6hacking.com (where I am known as
; GrayShadows). Patches with available .asm files should
; be relatively easy to render compatible; patches without
; sufficient documentation are more problematic, but not 
; impossible, to make cooperative.
;
; NB: This is a specialised version of the mod that uses
; theoretically unused SRAM space immediately preceding the
; treasure chest bytes, coded specifically for Gi Nattak at
; ff6hacking.com. It should be fine to use with other mods,
; and in fact moves around fewer things, but there may be 
; some issues with compatibility if it turns out the RAM space
; isn't as unused as is theorised. The goal of this version
; is to preserve all existing treasure chest bytes, so that
; they are usable in hacks with additional chests.




; Section 1: Moving RAM locations

; 1.1 Initialising RAM at New Game


org $C0BB1A
STZ $1E3A,X            ; Part of the function that zeroes Treasure Chest
INX                    ; bytes at game start. Expands to include six 
CPX #$0036             ; additional bytes, which cover new Morph/SwdTech/
                       ; Blitz/Lore locations.


org $C0BDD2
CPX #$02DF             ; Part of a function that governs zeroing
                       ; starting magic lists. This bundles the
                       ; new magic list, as well as a few additional
                       ; bytes (including learned Rages and Dances)
                       ; in to the same function, saving a few bytes
                       ; that could potentially used in other patches.


org $C0BDD7
JSR $BB18              ; Closes treasure chests and zeroes moved SRAM
                       ; bytes. Needs to be moved or it will overwrite
                       ; the new Lore bytes.
rep 23 : NOP           ; Space cleared by consolidating functions.


org $C0BE17
LDA $E6F564            ; Initialises Strago's known lores at recruit.
STA $1E3D              ; Strago's known lores, byte 1
LDA $E6F565
STA $1E3E              ; Strago's known lores, byte 2
LDA $E6F566
STA $1E3F              ; Strago's known lores, byte 3


org $C0BE8D
rep 3 : NOP            ; Originally a call to C0/BB18; we've moved that
                       ; earlier in the code, so we can skip over it here.


; 1.2 SwdTech
org $C0A1F6            ; Teaches SwdTech at recruit.
LDA $1E3B

org $C0A1FD            ; Teaches SwdTech at recruit.
STA $1E3B

org $C0AFFA            ; Teaches all SwdTech (gen. act. 8F)
STA $1E3B

org $C2580D
LDA $1E3B

org $C261D0
TSB $1E3B

org $C3537A
LDA $1E3B



; 1.3 Blitzes
org $C0A21D            ; Teaches Blitz at recruit.
LDA $1E3C

org $C0A224            ; Teaches Blitz at recruit.
STA $1E3C

org $C0B002            ; Teaches Bum Rush (gen. act. 90)
LDA $1E3C

org $C0B007            ; Teaches Bum Rush (gen. act. 90)
STA $1E3C

org $C20576
LDA $1E3C

org $C24E07
BIT $1E3C

org $C25818
LDA $1E3C

org $C261EC
TSB $1E3C

org $C3561B
LDA $1E3C



; 1.4 Morph
org $C20559
CMP $1E3A

org $C20B1B
LDX $1E3A

org $C20B3B
LDA $1E3A

org $C20B46
LDA $1E3A

org $C25328
CMP $1E3A              ; Allows/disallows Morph menu slot

org $C25424
STA $1E3A              ; Part of function that sets Morph timer to full.

; Commented out for compatibility with Hatzen's Resilient Morph
; org $C25E3F
; ADC $1E3A

; org $C25E46
; STA $1E3A



; 1.5 Lores
org $C236FD
BIT $1E3D,X

org $C2556F
BIT $1E3D,X

org $C25ED0
ORA $1E3D,X
STA $1E3D,X

org $C3521C
LDA $1E3D,X





; Section 2: Teaching Gogo Magic
org $C2558C
CMP #$0D              ; Branches for Umaro and above rather than Gogo and up.

org $C25E5C
CMP #$0D              ; Branches if Umaro, rather than Umaro and/or Gogo

org $C256CC
CMP #$0D              ; Umaro branches to Gogo's former branch (Y = 0),
                      ; and then temporary characters will branch (Y = 2).

org $C25EB2
CMP #$0D              ; Branches if Umaro so that spells aren't learned.




; Section 3: Gogo in the Menu
org $C34D6F
CMP #$0D       ; This was originally a check for Gogo to disable
               ; the Espers option in the Skills menu. This increments
               ; by 1 to disable for Umaro instead. 

org $C30D3F
CMP #$0D       ; BEQ Umaro, BCS temp character.

org $C350AA
CMP #$0D       ; BEQ Umaro, to build magic list from spells known
               ; by other characters.



; Bypasses Gogo's custom status menu code by altering the targets of a BRA
; and three JSR
;org $c32249  ; [BRA]
;db $09      
;
;org $c31C50  ; [JSR]
;db $78      
;
;org $c32219  ; [JSR]
;db $78
;
;org $c3223F  ; [JSR]
;db $78




; Section 4: Compatibility

; 4.1: Hatzen's Resilient Morph

org $C25E3C
LDA #$FF
STA $1E3A
BRA MorphExitOne
LSR $F1
ROR $F0
RTS
NOP
MorphExitOne:

org $C20D00
BCC MorphBra1
LDA $3AA1,Y
BIT #$02
BEQ MorphBra2
JSR $5E43
MorphBra2:
BIT #$20
BEQ MorphBra1
JSR $5E43
MorphBra1:
LDA $3EF9,Y
BIT #$08
BEQ MorphExit2
LDA $F1
BMI MorphExit2
ASL $F0
ROL $F1
MorphExit2:




; 4.2 Natural Ability Learning Expansion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SKILLS LEARNED AT LEVEL UP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; This points to the function governing learning abilities at 
; level up, originally at C2/61B6 and now at C2/A736.
org $C260BC
JSR $A736   

; Determine if the character learns natural magic at level up.
org $C2A736
LDX #$0000       ; Relm's spell list is the first two bytes
                 ; of the natural magic table now located at
                 ; EC/E3A0. In vanilla, this starts at EC/E3C0
                 ; with Terra's table; Relm's occupies two bytes
                 ; of free space preceding.
CMP #$08         ; 
BEQ LvlUpMagic   ; Branches to teach natural magic.
LDX #$0020       ; Terra's spell list is second in the table.
CMP #$00         ; 
BEQ LvlUpMagic   ; 
LDX #$0040       ; Celes' spell list is third.
CMP #$06         ; 
BEQ LvlUpMagic   ; 
LDX #$0000       ; Cyan's SwdTech list is the first eight bytes
                 ; of the SwdTech/Blitz table at E6/F490
CMP #$02         ; 
BNE LvlUpSabin   ; If not Cyan, branch to check for Sabin.
                 ; Else, it is Cyan and the code can continue
                 ; to check his level.

;;;;;;;;;;;;;;;;;;
; Cyan @ level up
;;;;;;;;;;;;;;;;;;
JSR LvlAbility   ; Check for SwdTechs at this level.
BEQ ExitLearning ; If none, exit.
TSB $1E3B        ; Enable the new SwdTech.
BNE ExitLearning ; If already enabled, exit.
                 ; This should only occur after Cyan's dream,
                 ; which teaches him SwdTechs through an event.
LDA #$40
TSB $F0
BNE ExitLearning
LDA #$42
JMP $5FD4

;;;;;;;;;;;;;;;;;;
; Sabin @ level up
;;;;;;;;;;;;;;;;;;
LvlUpSabin:
LDX #$0008       ; Blitzes are in the second byte of the table.
CMP #$05         ; Check for Sabin.
BNE ExitLearning ; Exit if not Sabin.
JSR LvlAbility   ; Check for Blitzes at this level.
BEQ ExitLearning ; If none, exist.
TSB $1E3C        ; Enable the new Blitz.
BNE ExitLearning ; If already enabled, exit.
                 ; This should only occur with Bum Rush, after
                 ; meeting Duncan in the WoR.
LDA #$80
TSB $F0
BNE ExitLearning
LDA #$33
JMP $5FD4

;;;;;;;;;;;;;;;;;;
; Magic @ level up
;;;;;;;;;;;;;;;;;;
LvlUpMagic:
PHY 
XBA 
LDY #$0010       ; The spell list is composed of 16 2-byte
                 ; blocks for a total of 32 bytes.
LvlCheckMag:
CMP $ECE3A1,X    ; Check against level at which spell is learned
BNE IncSpell     ; If no spell at this level, branch and 
                 ; increment to next spell in table.
PHA 
PHY 
TDC              ; [Clear 16-bit A]
LDA $ECE3A0,X    ; Get the spell ID from the table.
TAY 
LDA ($F4),Y      ; [(?? check entry in spell list ??)]
CMP #$FF       
BEQ PullYA     
LDA #$80
STA ($F4),Y
PullYA:
PLY 
PLA 
IncSpell:        ; Increment to next 2-byte block.
INX 
INX      
DEY              ; Decrement Y
BNE LvlCheckMag  ; If we haven't checked all 32 bytes,
                 ; branch back and continue.
PLY 
RTS 

;;;;;;;;;;;;;;;;;;
; Abilities/lvl up
;;;;;;;;;;;;;;;;;;
LvlAbility:
LDA #$01
STA $EE          ; Start by marking Tech/Blitz as #0
XBA              ; [Get current level from top of A?]
LvlCheckAbi:     ;
CMP $E6F490,X    ; Check level against Blitz/Tech table.
BEQ AbiBitfield  ; If equal, branch.
INX              ; Else, increment to check next index.
ASL $EE          ; Check next Tech against level.
BCC LvlCheckAbi  ; If carry is set, we've checked all 8 bits and 
                 ; no ability is learned. $EE will be #0. 
AbiBitfield:
LDA $EE          ; Get the SwdTech/Blitz bitfield. The bit that
                 ; is set = the ability to learn at this level. 

ExitLearning:
RTS 




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; DEFAULT SKILLS AT RECRUITMENT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; This section governs natural abilities learned at
; recruitment

;;;;;;;;;;;;;;;;;;
; DEFAULT DANCES
;;;;;;;;;;;;;;;;;;
; This sets default dances learned at the same time as default
; lores and rages. Rather than pulling the information from 
; elsewhere in the rom, the bit is hardcoded in with an LDA
; to keep the code in-line.
;
; Originally I was teaching dances at recruitment the same way
; that Cyan and Sabin learn their initial SwdTechs and Blitzes.
; However, because they learn their skills through level up, 
; they require more complex code to verify which skills they
; should already have when you meet them. This new code teaches
; Wind Song by default in the same way that Strago and Gau learn
; their default Lores and Rages, respectively.

org $C0BE2F  ; Originally this is used to set font to white.
             ; As this is also in C3, it's unnecessary here, and
             ; so we can use these addresses for teaching Dances.
             ; It follows immediately after the code teaching
             ; the default Lores.
LDA #$01     ; Load bits for default Dances.
             ; #$01 is Wind Song; set other bits to teach other
             ; dances by default.
STA $1D4C    ; Stores bits in location of learned Dances in RAM
NOP          ; The original code here is six bytes long.
             ; As the new code is only five, this blocks out the 
             ; remaining byte preventing any further snarls.

;;;;;;;;;;;;;;;;;;
; NATURAL SKILLS
; AT RECRUITMENT
;;;;;;;;;;;;;;;;;;
; These originally called C0/A17F and are being redirected
; to the new location of the subroutine at C0/D68D.
org $C09F6D
JSR $D68D

org $C0A177
JSR $D68D

org $C0C547
JSR $D68D

; When recruiting a character, check if they learn abilities 
; based on their level. If so, teach them all abilities up to 
; their current level.
org $C0D68D
;;;;;;;;;;;;;;;;;;
LDA $1600,Y      ; Grab the ID of the character being recruited.
CMP #$08         ;  
BEQ RelmRecruit  ; If Relm, branch.
CMP #$00         ;
BEQ TerraRecruit ; If Terra, branch.
CMP #$06         ;
BEQ CelesRecruit ; If Celes, branch.
CMP #$02         ;
BEQ CyanRecruit  ; If Cyan, branch.
CMP #$05         ; 
BNE ExitRecruit  ; If not Sabin, exit.
JMP SabinRecruit ; Else it is Sabin, so jump.
                 ; Sabin's recruitment subroutine is to far away
                 ; to branch, so we need to jump to it instead.
ExitRecruit:
RTS
 
RelmRecruit:
LDX $00
TeachRelm:
LDA $ECE3A1,X    ; Get level from natural magic table.
CMP $1608,Y      ; Check against current level.
BEQ RelmRecCont  ; If equal, proceed to learn spell.
BCS ExitRecruit  ; If lower, exit.
RelmRecCont:
PHY
LDA $ECE3A0,X    ; Grab the spell learned at this level.
TAY
LDA #$FF
STA $1C1E,Y      ; Teach it.
PLY
INX
INX
CPX #$0020       ; Have we checked all 16 spells?
BEQ ExitRecruit  ; If yes, exit.
BRA TeachRelm    ; Else, continue checking.

TerraRecruit:
LDX $00
TeachTerra:
LDA $ECE3C1,X    ; Get level from natural magic table.
CMP $1608,Y      ; Check against current level.
BEQ TerraRecCont ; If equal, proceed to learn spell.
BCS ExitRecruit  ; If lower, exit 
TerraRecCont:
PHY
LDA $ECE3C0,X    ; Grab the spell learned at this level
TAY
LDA #$FF
STA $1A6E,Y      ; Teach it
PLY
INX
INX
CPX #$0020       ; Have we checked all 16 spells?
BEQ ExitRecruit  ; If so, exit.
BRA TeachTerra   ; Else, continue checking.

CelesRecruit:
LDX $00
TeachCeles:
LDA $ECE3E1,X    ; Get level from natural magic table.
CMP $1608,Y      ; Check against current level.
BEQ CelesRecCont ; If equal, proceed to learn spell.
BCS ExitRecruit  ; If lower, exit 
CelesRecCont:
PHY
LDA $ECE3E0,X    ; Grab the spell learned at this level
TAY
LDA #$FF
STA $1BB2,Y      ; Teach it
PLY
INX
INX
CPX #$0020       ; Have we checked all 16 spells?
BEQ ExitRecruit  ; If so, exit
BRA TeachCeles   ; Else, continue checking

CyanRecruit:
STZ $1B
LDX $00
TeachCyan:
LDA $E6F490,X    ; Get level at which Tech is learned
CMP $1608,Y      ; Is Cyan at that level?
BEQ CyanRecCont  ; If so, proceed with learning
BCS SetCyan      ; If he is lower, exit and teach Techs.
CyanRecCont:
INC $1B
INX
CPX #$0008       ; Have we checked all eight Techs?
BEQ SetCyan      ; If so, exit
BRA TeachCyan    ; Else, continue checking
SetCyan:
LDA $1B
TAX
LDA $1E3B        ; Get currently known Techs
ORA $C0A22C,X    ; Add to bitfield of Techs learned at level
STA $1E3B        ; Set new Blitzes learned
RTS
 
SabinRecruit:
STZ $1B
LDX $00
TeachSabin:
LDA $E6F498,X    ; Get level at which Blitz is learned
CMP $1608,Y      ; Is Sabin at that level?
BEQ SabinRecCont ; If so, proceed with learning
BCS SetSabin     ; If he is lower, exit and teach Blitzes.
SabinRecCont:
INC $1B
INX
CPX #$0008       ; Have we checked all eight blitzes?
BEQ SetSabin     ; If so, exit
BRA TeachSabin   ; Else, continue checking
SetSabin:
LDA $1B
TAX
LDA $1E3C        ; Get currently known Blitzes
ORA $C0A22C,X    ; Add to bitfield of Blitzes learned at level
STA $1E3C        ; Set new Blitzes learned
RTS



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NATURAL MAGIC
; TABLES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Relm's natural magic learning list.
; This precedes Celes and Terra's lists in the table,
; occupying free space right before it.
org $ECE3A0
DB $2D, $01 ; Cure @ 1
DB $32, $03 ; Antdot @ 3
DB $02, $08 ; Bolt @ 8
DB $19, $0C ; Slow @ 12
DB $30, $12 ; Life @ 18
DB $07, $16 ; Bolt 2 @ 22
DB $29, $1A ; Osmose @ 26
DB $08, $20 ; Bio @ 32
DB $10, $23 ; Demi @ 35
DB $0B, $28 ; Bolt 3 @ 40
DB $2E, $2E ; Cure 2 @ 46
DB $28, $34 ; Slow 2 @ 52
DB $0E, $3C ; Pearl @ 60
DB $2F, $49 ; Cure 3 @ 73
DB $15, $52 ; Quake @ 82
DB $2B, $61 ; Quick @ 97

; Adjusts Celes's list slightly.
; This fixes a glitch if she averages to a level above 32 that 
; would prevent her learning Muddle and orders the spells more 
; logically.
org $ECE3F0
DW $1E21 ; Muddle @ 33
DW $2128 ; Berserk @ 40


umarofix.asm
Code:
hirom
;header

;Battle

org $c256C9
JSR sbrA

org $C26284
JSR sbrB

org $C26469     ;18 bytes of free space needed
sbrA:
LDA $3ED8,X     ;which character is this
CMP #$0D
BNE brnchA
DEC            
brnchA:
RTS

sbrB:
CMP #$0D
BNE brnchB
DEC             ;if Umaro, decrement character ID
brnchB:
XBA        
LDA #$36
RTS

;Menu

org $C30D3C
JSR sbrC

org $C350A7
JSR sbrD

org $C3F0C0     ;14 bytes of free space needed
sbrC:
LDA $0000,X     ;character ID
BRA brnchD

sbrD:
LDA $0000,Y     ;character ID
brnchD:
CMP #$0D        ;if Umaro, decrement character ID
BNE brnchC
DEC
brnchC:
RTS
Quote  
[-] The following 2 users say Thank You to Gi Nattak for this post:
  • DrakeyC (03-10-2016), madsiur (03-09-2016)

#2
Posts: 638
Threads: 12
Thanks Received: 34
Thanks Given: 82
Joined: Jan 2016
Reputation: 6
Status
None
With how I've previously edited SwdTech's speed, will that interfere with this?
  Find
Quote  

#3
Posts: 2,256
Threads: 90
Thanks Received: 285
Thanks Given: 280
Joined: Aug 2009
Reputation: 40
Status
Nattak\'d
No this does not effect anything with the sword tech speed, just the sword tech learning routine. Patching it directly how it is will effect some other stuff though as mentioned, mainly giving Mog a dance skill learned at recruitment, and adjusting something in Celes's natural spell list, just moves a spell. Oh, and of course giving Relm natural magic like Terra and Celes. Besides that the main thing is it takes HatZen's Resilient Morph patch into account. So that will need to be removed from this file if not being used, I think. The patch itself relocates sram addresses and utilizes the unused Sword Tech naming space in order to do what all it does. GrayShadow's explains it better there in the intro section of the file.

Aside from that just be sure to change the instances of 0D to 0E, in order for it to work for Umaro's range instead of Gogo. In other words it does a bit more than just give the magic to Gogo, so be sure to edit it (carefully) to your liking first before patching.
Quote  

#4
Posts: 638
Threads: 12
Thanks Received: 34
Thanks Given: 82
Joined: Jan 2016
Reputation: 6
Status
None
Actually, giving Relm natural magic may work. Can I reassign that natural magic to Edgar?
  Find
Quote  

#5
Posts: 2,256
Threads: 90
Thanks Received: 285
Thanks Given: 280
Joined: Aug 2009
Reputation: 40
Status
Nattak\'d
Yeah that's easy enough, just look for where it does this for Relm and change the CMP value from 08 to whatever character you'd like instead, 04 for Edgar.
Quote  
[-] The following 1 user says Thank You to Gi Nattak for this post:
  • DrakeyC (03-10-2016)

#6
Posts: 638
Threads: 12
Thanks Received: 34
Thanks Given: 82
Joined: Jan 2016
Reputation: 6
Status
None
Awesome, that actually solves another problem, then Laugh

I'll give this a shot tomorrow, thanks Gi.



Okay, I'm looking through the doc and am confused. I see how the guy explains what to do at what bytes, but, how. What bytes change to what?
  Find
Quote  

#7
Posts: 2,256
Threads: 90
Thanks Received: 285
Thanks Given: 280
Joined: Aug 2009
Reputation: 40
Status
Nattak\'d
Looks like just the CMP instruction values for the corresponding characters.

In order to alter this to work for Umaro instead of Gogo, all the related CMP #$0D in 'section 2 and 3' should be changed to CMP #$0E, changed in the asm file here before you patch it. The CMP #$0D, while not Gogo's ID, is one after because it is actually saying to not allow anything after character 0C... so changing these to 0E broadens the range by 1 more and gets Umaro involved then.

For changing Relm's natural magic over to Edgar, same thing, look for the section in the code that does this and change the CMP #$08 to CMP #$04.

That's all you'll have to do is edit those values to another.
Quote  

#8
Posts: 638
Threads: 12
Thanks Received: 34
Thanks Given: 82
Joined: Jan 2016
Reputation: 6
Status
None
asm patch? Huh?
  Find
Quote  

#9
Posts: 2,256
Threads: 90
Thanks Received: 285
Thanks Given: 280
Joined: Aug 2009
Reputation: 40
Status
Nattak\'d
Yes this code I posted was made to be assembled with a program like Asar or xkas.

Asar: http://www.romhacking.net/utilities/964/
xkas: http://www.romhacking.net/utilities/269/

You just copy that code into a txt document, save it with an .asm extension so it becomes an asm file. Then use the utility to patch it.
With this code, you can use Asar which is a bit more user-friendly, just make sure to have you're ROM headered as the patch says 'header' at the top...that's what that means. If you were to patch it without a header, then you would comment out that 'header' part is all. But I think for some reason I remember Asar needing to be headered? In any event.
Quote  

#10
Posts: 3,752
Threads: 270
Thanks Received: 743
Thanks Given: 346
Joined: Oct 2011
Reputation: 62
Status
Tissue-aware
(03-10-2016, 04:29 PM)Gi Nattak Wrote: Yes this code I posted was made to be assembled with a program like Asar or xkas.

We have both hosted in the utility page of the wiki which is linked on the main menu of the index and portal page. We also have a FF3us and SNES documents pages linked as well. GET TO KNOW THE WIKI!
  Find
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite