+  RHDN Forum Archive
|-+  Romhacking
| |-+  ROM Hacking Discussion
| | |-+  VWF for Tearing Saga
Pages: [1]
Author Topic: VWF for Tearing Saga  (Read 2 times)
lckhoa
Guest
« on: September 25, 2008, 10:06:33 pm »

Hi bro,

I know that there was a Tearing Saga translation project out there but it seem that discontinue forever!
So this is what i am doing upto now http://s289.photobucket.com/albums/ll210/lckhoa/TearingSaga/
There is no problem with conversation because it has a VWF table so i can adjust to make text display correct.
But i can not do the same with system related thing like weapon name, items....

So is there anyone with ASM hacking experience can give me a hand on this ?
hanhnn
Guest
« Reply #1 on: September 28, 2008, 12:31:32 pm »

Use bold font like FE3 patch should work, i guess
lckhoa
Guest
« Reply #2 on: September 29, 2008, 10:58:39 pm »

Hi Bro,

Today, i try with IDA and have this:

TEXT:80066D38  # =============== S U B R O U T I N E =======================================
TEXT:80066D38
TEXT:80066D38
TEXT:80066D38 sub_80066D38:                            # CODE XREF: sub_8006704C+14C p
TEXT:80066D38                                          # sub_80068A24+94 p ...
TEXT:80066D38
TEXT:80066D38 var_20          = -0x20
TEXT:80066D38 var_1C          = -0x1C
TEXT:80066D38 var_18          = -0x18
TEXT:80066D38 var_14          = -0x14
TEXT:80066D38 var_10          = -0x10
TEXT:80066D38 var_C           = -0xC
TEXT:80066D38 var_8           = -8
TEXT:80066D38 arg_10          =  0x10
TEXT:80066D38
TEXT:80066D38                 addiu   $sp, -0x30
TEXT:80066D3C                 sw      $s2, 0x30+var_18($sp)
TEXT:80066D40                 move    $s2, $0
TEXT:80066D44                 sw      $s1, 0x30+var_1C($sp)
TEXT:80066D48                 move    $s1, $a0
TEXT:80066D4C                 sll     $a1, 16
TEXT:80066D50                 sw      $s4, 0x30+var_10($sp)
TEXT:80066D54                 sra     $s4, $a1, 16
TEXT:80066D58                 sll     $a2, 16
TEXT:80066D5C                 sw      $s5, 0x30+var_C($sp)
TEXT:80066D60                 sra     $s5, $a2, 16
TEXT:80066D64                 sw      $s0, 0x30+var_20($sp)
TEXT:80066D68                 andi    $s0, $a3, 0xFFFF
TEXT:80066D6C                 sw      $s3, 0x30+var_14($sp)
TEXT:80066D70                 lw      $s3, 0x30+arg_10($sp)
TEXT:80066D74                 li      $v0, 0x2FF
TEXT:80066D78                 beq     $s0, $v0, loc_80066F40
TEXT:80066D7C                 sw      $ra, 0x30+var_8($sp)
TEXT:80066D80                 lhu     $v1, 0x2642($gp)
TEXT:80066D84                 lhu     $v0, 0x2648($gp)
TEXT:80066D88                 nop
TEXT:80066D8C                 beq     $v1, $v0, loc_80066DAC
TEXT:80066D90                 move    $a1, $0
TEXT:80066D94                 move    $a3, $v1
TEXT:80066D98                 jal     sub_80065620
TEXT:80066D9C                 move    $a2, $0
TEXT:80066DA0                 lhu     $v0, 0x2648($gp)
TEXT:80066DA4                 nop
TEXT:80066DA8                 sh      $v0, 0x2642($gp)
TEXT:80066DAC
TEXT:80066DAC loc_80066DAC:                            # CODE XREF: sub_80066D38+54 j
TEXT:80066DAC                 li      $a0, 0x51EB851F
TEXT:80066DB4                 multu   $0, $s0, $a0
TEXT:80066DB8                 mfhi    $a0
TEXT:80066DBC                 srl     $a0, 3
TEXT:80066DC0                 sll     $v0, $a0, 1
TEXT:80066DC4                 addu    $v0, $a0
TEXT:80066DC8                 sll     $v0, 3
TEXT:80066DCC                 addu    $v0, $a0
TEXT:80066DD0                 subu    $v0, $s0, $v0
TEXT:80066DD4                 andi    $v0, 0xFFFF
TEXT:80066DD8                 sll     $v1, $v0, 2
TEXT:80066DDC                 addu    $v1, $v0
TEXT:80066DE0                 sll     $v1, 1
TEXT:80066DE4                 andi    $a1, $v1, 0xFF
TEXT:80066DE8                 andi    $a0, 0xFFFF
TEXT:80066DEC                 sll     $v0, $a0, 2
TEXT:80066DF0                 addu    $v0, $a0
TEXT:80066DF4                 sll     $v0, 1
TEXT:80066DF8                 li      $v1, 0x1D0
TEXT:80066DFC                 bne     $s0, $v1, loc_80066E08
TEXT:80066E00                 andi    $a0, $v0, 0xFF
TEXT:80066E04                 li      $s2, 1
TEXT:80066E08
TEXT:80066E08 loc_80066E08:                            # CODE XREF: sub_80066D38+C4 j
TEXT:80066E08                 li      $v0, 0x1CA
TEXT:80066E0C                 bne     $s0, $v0, loc_80066E18
TEXT:80066E10                 li      $v0, 0x219
TEXT:80066E14                 li      $s2, 1
TEXT:80066E18
TEXT:80066E18 loc_80066E18:                            # CODE XREF: sub_80066D38+D4 j
TEXT:80066E18                 bne     $s0, $v0, loc_80066E24
TEXT:80066E1C                 nop
TEXT:80066E20                 li      $s2, 2
TEXT:80066E24
TEXT:80066E24 loc_80066E24:                            # CODE XREF: sub_80066D38:loc_80066E18 j
TEXT:80066E24                 lw      $v0, 0xC($s1)
TEXT:80066E28                 li        $v1, 4
TEXT:80066E2C                 lw      $a3, 4($v0)
TEXT:80066E30                 li        $v0, 0x64
TEXT:80066E34                 sb      $v1, 3($a3)
TEXT:80066E38                 sb      $v0, 7($a3)
TEXT:80066E3C                 lw      $v1, 0x2078($gp)
TEXT:80066E40                 nop
TEXT:80066E44                 beqz    $v1, loc_80066E50
TEXT:80066E48                 li      $v0, 0x64
TEXT:80066E4C                 li      $v0, 0x66
TEXT:80066E50
TEXT:80066E50 loc_80066E50:                            # CODE XREF: sub_80066D38+10C j
TEXT:80066E50                 sb      $v0, 7($a3)
TEXT:80066E54                 li        $v0, 0xA
TEXT:80066E58                 sh      $v0, 0x10($a3)
TEXT:80066E5C                 sh      $v0, 0x12($a3)
TEXT:80066E60                 lw      $v1, 4($s1)
TEXT:80066E64                 nop
TEXT:80066E68                 lhu     $v0, 0x22($v1)
TEXT:80066E6C                 nop
TEXT:80066E70                 addu    $v0, $s4, $v0
TEXT:80066E74                 sh      $v0, 8($a3)
TEXT:80066E78                 lw      $v1, 4($s1)
TEXT:80066E7C                 nop
TEXT:80066E80                 lhu     $v0, 0x24($v1)
TEXT:80066E84                 sb      $a1, 0xC($a3)
TEXT:80066E88                 sb      $a0, 0xD($a3)
TEXT:80066E8C                 addu    $v0, $s5, $v0
TEXT:80066E90                 addu    $v0, $s2
TEXT:80066E94                 beqz    $s3, loc_80066ED0
TEXT:80066E98                 sh      $v0, 0xA($a3)
TEXT:80066E9C                 lbu     $v0, 7($a3)
TEXT:80066EA0                 nop
TEXT:80066EA4                 andi    $v0, 0xFE
TEXT:80066EA8                 sb      $v0, 7($a3)
TEXT:80066EAC                 lbu     $v1, 0($s3)
TEXT:80066EB0                 nop
TEXT:80066EB4                 sb      $v1, 4($a3)
TEXT:80066EB8                 lbu     $v0, 1($s3)
TEXT:80066EBC                 nop
TEXT:80066EC0                 sb      $v0, 5($a3)
TEXT:80066EC4                 lbu     $v1, 2($s3)
TEXT:80066EC8                 j       loc_80066EE0
TEXT:80066ECC                 sb      $v1, 6($a3)
TEXT:80066ED0  # ---------------------------------------------------------------------------
TEXT:80066ED0
TEXT:80066ED0 loc_80066ED0:                            # CODE XREF: sub_80066D38+15C j
TEXT:80066ED0                 lbu     $v0, 7($a3)
TEXT:80066ED4                 nop
TEXT:80066ED8                 ori     $v0, 1
TEXT:80066EDC                 sb      $v0, 7($a3)
TEXT:80066EE0
TEXT:80066EE0 loc_80066EE0:                            # CODE XREF: sub_80066D38+190 j
TEXT:80066EE0                 li      $a1, 0xFFFFFF
TEXT:80066EE8                 lhu     $v0, 0x264A($gp)
TEXT:80066EEC                 lhu     $v1, 0x265C($gp)
TEXT:80066EF0                 lui     $a2, 0xFF00
TEXT:80066EF4                 addu    $v0, $v1
TEXT:80066EF8                 sh      $v0, 0xE($a3)
TEXT:80066EFC                 lw      $a0, 8($s1)
TEXT:80066F00                 lw      $v1, 0($a3)
TEXT:80066F04                 lw      $v0, 0($a0)
TEXT:80066F08                 and     $v1, $a2
TEXT:80066F0C                 and     $v0, $a1
TEXT:80066F10                 or      $v1, $v0
TEXT:80066F14                 sw      $v1, 0($a3)
TEXT:80066F18                 lw      $a0, 8($s1)
TEXT:80066F1C                 nop
TEXT:80066F20                 lw      $v0, 0($a0)
TEXT:80066F24                 and     $a1, $a3, $a1
TEXT:80066F28                 and     $v0, $a2
TEXT:80066F2C                 or      $v0, $a1
TEXT:80066F30                 sw      $v0, 0($a0)
TEXT:80066F34                 lw      $v1, 0xC($s1)
TEXT:80066F38                 addiu   $a3, 0x14
TEXT:80066F3C                 sw      $a3, 4($v1)
TEXT:80066F40
TEXT:80066F40 loc_80066F40:                            # CODE XREF: sub_80066D38+40 j
TEXT:80066F40                 lw      $ra, 0x30+var_8($sp)
TEXT:80066F44                 lw      $s5, 0x30+var_C($sp)
TEXT:80066F48                 lw      $s4, 0x30+var_10($sp)
TEXT:80066F4C                 lw      $s3, 0x30+var_14($sp)
TEXT:80066F50                 lw      $s2, 0x30+var_18($sp)
TEXT:80066F54                 lw      $s1, 0x30+var_1C($sp)
TEXT:80066F58                 lw      $s0, 0x30+var_20($sp)
TEXT:80066F5C                 jr      $ra
TEXT:80066F60                 addiu   $sp, 0x30
TEXT:80066F60  # End of function sub_80066D38


At this line TEXT:80066E54                 li        $v0, 0xA
I'm playing around with this line, change 0xA to 0xB or 0xF than the font size also change but alway in square !
How do i change the font size to 4x8 or 4x10 ?

Thanks very much.
Gemini
Guest
« Reply #3 on: September 30, 2008, 09:46:50 am »

Do not change the font size, but the spacing.
Code:
TEXT:80066E60                 lw      $v1, 4($s1) ; pointer to static width value?
TEXT:80066E64                 nop
TEXT:80066E68                 lhu     $v0, 0x22($v1) ; pull character width
TEXT:80066E6C                 nop
TEXT:80066E70                 addu    $v0, $s4, $v0 ; cur_x+width
TEXT:80066E74                 sh      $v0, 8($a3) ; sprt.x
You have to alter the first 3 instructions and force them to load variable widths from a table, which I believe the game already has somewhere else. There, you have a new vwf.

PS: Next time add comments, please. Lips sealed
lckhoa
Guest
« Reply #4 on: September 30, 2008, 10:34:50 pm »

Thank you very much! but i am new to RISC ASM so a small easy thing with you will be a BIG, hard with me  :banghead: but i will try.
Aganar
Guest
« Reply #5 on: October 04, 2008, 10:10:21 pm »

Pardon me for asking, Ickhoa, but English isn't your first language, is it?
lckhoa
Guest
« Reply #6 on: October 05, 2008, 11:23:22 am »

Hi Gemini,

I'm not sure but after playing with your suggestion than the text just shift left/right or up/down Smiley
I look into IDA again and found this function was call a another func and here it is.

TEXT:80068A24  # =============== S U B R O U T I N E =======================================
TEXT:80068A24
TEXT:80068A24
TEXT:80068A24 sub_80068A24:                            # DATA XREF: TEXT:800141ECo
TEXT:80068A24
TEXT:80068A24 arg_10          =  0x10
TEXT:80068A24 arg_20          =  0x20
TEXT:80068A24 arg_24          =  0x24
TEXT:80068A24 arg_30          =  0x30
TEXT:80068A24 arg_60          =  0x60
TEXT:80068A24
TEXT:80068A24                 addiu   $s2, 4           # Add Immediate Unsigned
TEXT:80068A28                 move    $s6, $0
TEXT:80068A2C                 li      $s7, 1           # Load Immediate
TEXT:80068A30                 lw      $v0, arg_60($sp)  # Load Word
TEXT:80068A34                 lw      $s0, -4($s2)     # Load Word
TEXT:80068A38                 lw      $s4, arg_20($sp)  # Load Word
TEXT:80068A3C                 lw      $a0, 4($v0)      # Load Word
TEXT:80068A40                 lw      $a1, arg_24($sp)  # Load Word
TEXT:80068A44                 addiu   $s5, $a0, 0x2A   # Add Immediate Unsigned
TEXT:80068A48                 lh      $v1, 0x2A($a0)   # Load Halfword
TEXT:80068A4C                 lh      $v0, 2($s5)      # Load Halfword
TEXT:80068A50                 addu    $s1, $v1, $s4    # Add Unsigned
TEXT:80068A54                 addu    $v0, $a1         # Add Unsigned
TEXT:80068A58                 sll     $s3, $v0, 16     # Shift Left Logical
TEXT:80068A5C
TEXT:80068A5C loc_80068A5C:                            # CODE XREF: sub_80068A24:loc_80068ACCj
TEXT:80068A5C                 lbu     $v0, 0($s0)      # Load Byte Unsigned
TEXT:80068A60                 nop
TEXT:80068A64                 bnez    $v0, loc_80068AA0  # Branch on Not Zero
TEXT:80068A68                 sll     $a1, $s1, 16     # Shift Left Logical
TEXT:80068A6C                 addiu   $s0, 1           # Add Immediate Unsigned
TEXT:80068A70                 lbu     $a0, 0($s0)      # Load Byte Unsigned
TEXT:80068A74                 nop
TEXT:80068A78                 andi    $v1, $a0, 0xF0   # AND Immediate
TEXT:80068A7C                 bnez    $v1, loc_80068A8C  # Branch on Not Zero
TEXT:80068A80                 li      $v0, 0x40        # Load Immediate
TEXT:80068A84                 j       loc_80068A98     # Jump
TEXT:80068A88                 move    $s7, $0
TEXT:80068A8C  # ---------------------------------------------------------------------------
TEXT:80068A8C
TEXT:80068A8C loc_80068A8C:                            # CODE XREF: sub_80068A24+58j
TEXT:80068A8C                 bne     $v1, $v0, loc_80068A98  # Branch on Not Equal
TEXT:80068A90                 andi    $v0, $a0, 0xF    # AND Immediate
TEXT:80068A94                 sll     $s6, $v0, 8      # Shift Left Logical
TEXT:80068A98
TEXT:80068A98 loc_80068A98:                            # CODE XREF: sub_80068A24+60j
TEXT:80068A98                                          # sub_80068A24:loc_80068A8Cj
TEXT:80068A98                 j       loc_80068ACC     # Jump
TEXT:80068A9C                 addiu   $s0, 1           # Add Immediate Unsigned
TEXT:80068AA0  # ---------------------------------------------------------------------------
TEXT:80068AA0
TEXT:80068AA0 loc_80068AA0:                            # CODE XREF: sub_80068A24+40j
TEXT:80068AA0                 sra     $a1, 16          # Shift Right Arithmetic
TEXT:80068AA4                 sra     $a2, $s3, 16     # Shift Right Arithmetic
TEXT:80068AA8                 lw      $a0, arg_60($sp)  # Load Word
TEXT:80068AAC                 lbu     $a3, 0($s0)      # Load Byte Unsigned
TEXT:80068AB0                 lw      $v1, arg_30($sp)  # Load Word
TEXT:80068AB4                 or      $a3, $s6         # OR
TEXT:80068AB8                 jal     sub_80066D38     # Jump And Link
TEXT:80068ABC                 sw      $v1, arg_10($sp)  # Store Word
TEXT:80068AC0                 lw      $v0, 0x2070($gp)  # Load Word
TEXT:80068AC4                 addiu   $s0, 1           # Add Immediate Unsigned
TEXT:80068AC8                 addu    $s1, $v0         # Add Unsigned
TEXT:80068ACC
TEXT:80068ACC loc_80068ACC:                            # CODE XREF: sub_80068A24:loc_80068A98j
TEXT:80068ACC                 bnez    $s7, loc_80068A5C  # Branch on Not Zero
TEXT:80068AD0                 nop
TEXT:80068AD4                 j       loc_80068B94     # Jump
TEXT:80068AD8                 nop
TEXT:80068AD8  # End of function sub_80068A24
TEXT:80068AD8
TEXT:80068ADC
TEXT:80068ADC  # =============== S U B R O U T I N E =======================================

I think VWF is the best but it's ok if we just move the cursor (or whatever it called) back to few pixel before print next char.

Thanks,

@Aganar: No, it isn't Smiley
Pages: [1]  


Powered by SMF 1.1.4 | SMF © 2006-2007, Simple Machines LLC