Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - bspbsp

Pages: [1]
1
Scripting and Reverse Engineering / FF8 Enemy Attack Names
« on: 2004-12-19 10:29:10 »
The calculation of the equation for Spd and Eva is the same with Vit(in fact the game called the same function to calc Eva and Vit), the only diff is the 4 arguments they use to calculate. Maybe your guidebook have some little bugs. :D

I can only search the name of the enemy attacks in those .fs files. They are damned many after all. Maybe the data related to them are stored at battle.fs, but it's only my guess.

For the enmey bitebug, I've found two attacks are Fart and Needle, the data is 08 0d 6e 00 and 08 0e 6f 00, the two names stored in kernel.bin is also continual, 6e for Fart and 6f for Needle. Guess this works for other names.

2
Try the codes listed below, compile under VC++6.0.
Can't remember when wrote this, many are copyed directly from the code of Eight.  :D


Code: [Select]
#include<fstream.h>
#include<iostream.h>
#include<windows.h>


void main()
{
 ifstream src(argc[1],ios::in|ios::binary);//lzs
 ofstream dst(argc[2],ios::out|ios::binary);//bmp
 if(!src||!dst)
 {
  cout<<"file open error.";
  return;
 }
 // Load the texture
 int iWidth=0, iHeight=0, iColors=0;
 src.read((unsigned char *)&iColors,4);
 if(iColors)src.seekg(0x10,ios::beg);
 src.read((unsigned char *)&iWidth,2);
 src.read((unsigned char *)&iHeight,2);
 
 //strcture for bitmap
 BITMAPINFO* bmi = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER));
 bmi->bmiHeader.biBitCount = 16;
 bmi->bmiHeader.biClrImportant = 0;
 bmi->bmiHeader.biClrUsed = 0;
 bmi->bmiHeader.biCompression = BI_RGB;
 bmi->bmiHeader.biHeight = -iHeight;//must be negative
 bmi->bmiHeader.biPlanes = 1;
 bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader);
 bmi->bmiHeader.biSizeImage = 0; //iWidth*iHeight*2
 bmi->bmiHeader.biWidth = iWidth;
 bmi->bmiHeader.biXPelsPerMeter = 0;
 bmi->bmiHeader.biYPelsPerMeter = 0;
/*
 src.seekg(0xF0,ios::beg);//palette
 src.read((unsigned char *)bmi->bmiColors,4*iColors);
 for (int i=0;i<iColors;i++)
  bmi->bmiColors[i].rgbReserved = 0;// Make sure rgbReserved is zero
*/
 unsigned char *bits = (unsigned char*)malloc(iWidth*iHeight*2);//data
 src.read(bits,iWidth*iHeight*2);
 
 unsigned int tmpFlip,tmp;
 for (int i=0;i<iWidth*iHeight*2;i+=2) {
  tmp=bits[i]+(bits[i+1]<<8);
  tmpFlip = (tmp & 0x7C00) >> 10;  // Red -> Blue
  tmpFlip |= (tmp & 0x07E0);   // Green -> Green
  tmpFlip |= (tmp & 0x001F) << 10; // Blue -> Red
  tmp = tmpFlip;
  bits[i]=tmp;bits[i+1]=tmp>>8;
 }

 // Build the bitmap file
 BITMAPFILEHEADER bmfh;
 //BITMAPINFOHEADER bmih;
 
 bmfh.bfType = 'MB'; // BM (byteflipped)
 bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + iWidth*iHeight*2;
 bmfh.bfReserved1 = 0;
 bmfh.bfReserved2 = 0;
 bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

 dst.write((unsigned char *)&bmfh, sizeof(bmfh));
 dst.write((unsigned char *)&bmi->bmiHeader, sizeof(BITMAPINFOHEADER));
// dst.write((unsigned char *)bmi->bmiColors, iColors*sizeof(RGBQUAD));

// for (int j=0;j<iHeight;j++)
//  dst.write(bits+(iHeight-j-1)*iWidth*2,iWidth*2); //if iHeight>0
  dst.write(bits,iWidth*iHeight*2);
 free(bmi);
 free(bits);
 src.close();
 dst.close();
 return;
}

3
Scripting and Reverse Engineering / FF8 Enemy Attack Names
« on: 2004-12-15 08:26:37 »
Those status bytes all go well with me except the last one which refer to "Ratio Damage", actually the

game even don't load it into its memory, so this byte appeared in the file is useless, at least till now.


By tracing the code of the game, I have found the other equations of enemy stat such as str, vit, etc.

4 arguments: B1, B2, B3, B4;
x refer to the level of the enemy;

HP = (B1 * x * x / 20 + (B1 + B3 * 100) * x + B2 * 10 + B4 * 1000
(I believe there are a little mistake in your HP equation)

Str = (x * B1 / 10 + x / B2 - x * x / 2 / B4 + B3) / 4

Vit = x / B2 - x / B4 + x * B1 + B3

Mag: exactly like Str

Spr, Spd, Eva: exactly like Vit

All are dealing with integer-type numbers, so the form must be reserved.

For the status resistance, I have found some equations which involved the Mag and Spr number, so it must

not be a more complicated equation than I have found. Still need more research.

The item dropped by the enemy have 4 different possibilities at each level, the same as mugged item, but I

have no idea where they are, may be fixed for all enemies?

Special attacks? I thought the attack names I listed above are all I can find. They are stored at

kernel.bin of main.fs, the offset in kernel.bin is about 0x59ee. Give me an example not been listed out,

I'll try to find it.

I used to use Eight wrote by Qhimm to do the extraction before, it worked out quite well, except some

crashes at certain file. Now I write a program called FF8archive myself since Eight can't compile modified

file back into .fs file while Garden is only for the field.fs and the lzs compress algorithm it used is

not quite good, it always give me a large field.fs.
You can download FF8archive from http://bspbsp000.home4u.china.com/ff8ch/ff8archive.rar , based on

commandline and not so convenient as Eight, but quite handy for me.

4
Scripting and Reverse Engineering / FF8 Enemy Attack Names
« on: 2004-12-13 04:04:56 »
Thanks for you infomation and tips, Lord_Skylark!
I also have found something based on your tips.


First, I found the Tri-Point's Elements Damage Multipler, but who is Tri-Edge?
Elements Multipler of Tri-Point:
Fire:      4.0   it's 4.0 indeed
Blizzard:      4.0
Thunder:      -1.0
Earth:      1.0
Water:      1.0
Wind:      1.0
Poison:      1.0
Holy:      1.0


Second is the equation of status resistances:
status resistance = (status byte - 100) %
when the result is 0%, it means it is vulnerable to this status
when the status byte is 0xFF, it means it is immune to this status

And I want to ask a question: What's the meaning of the last two bytes of the "status byte"?
blowout & percent? or percent & vit0?


The last is the enemy attack name, they are stored at kernel.bin of main.fs, the offset in kernel.bin is about 0x59ee. There're also other things. I only converted the enemy attack part as below:

GBlade Slice
Hind Kick
Blade Shot
Ray-Bomb
Storm Breath
Dark Mist
Squeeze
Clash
Arm Crush
Tail Needle
Arm Slash
Bad Breath
Petrify Stare
Vampire
Poison Mist
Counter Slice
Counter Laser-Eye
1,000 Needles
Heartbreak
Upward Kick
Electric Discharge
Petrify Stare
Bite
Poison Gas
Poison Gas
Poison Gas
Acid
Melt-Eye
Breath
Ice Breath
Sand Storm
Draw
Earthquake
Morph
Arm Hug
Power Bomb
Dribble
Shoot
Ultrasonic Waves
BiteBite
Shotgun
Suicide
Ultrasonic Waves
Breath of Death
Disease Breath
Sticky Icky
Shoulder Charge
Gatling Gun
Cannon Blow
Wild Cannon Blow
Store
Degenerator
Telekinesis
Hypnotize
Gastric Juice
Sand Storm
Stare
Sigh
Curse
Grab Punch
Breath
Double Sword
Thrust
Iai Blow
Ultra Waves
Sticky Web
Breath
Tail Blade
Mega Spark
Onrush
Fart
Needle
Gastric Juice
Sleeping Gas
Breath
Beam Cannon
Magma Breath
Resonance
Blaster
Blaster
LV5 Death
Death Claw
Bear Hug
Gas
Explosion
Explosion
Explosion
"Brrawghh!"
Wind Blast
Scan
Beam Cannon
Aqua Breath
Evil-Eye
Counter Twist
Chain Gun
Snipe Laser
Melting Bubble
Super Arm
Boomerang Sword
Grand Sword
Psycho Blast
Sticky Web
Sand Shake
Saliva
Beam Laser
Reflect Beam
Oil Shot
Oil Blast
Sonic Wave
Disolving Acid
Bad Breath
Eerie Sound Wave
Ochu Dance
Earthquake
Drink Magic
Assault Horn
Ray-Bomb
Micro Missiles
Astral Punch
Raijin Special
Mad Cow Special
Zan
Metsu
Sai
Mower
Chef's Knife
Everyone's Grudge
Junk
It's sharp!
10,000 Needles
Ker Plunk
Storm Breath
Mega Flare
Barrier ChangeGThunder Summon
Deadly Horn
Gravija
Magic Summon
Mighty Guard
Doom
Thunder
Thundara
Thundaga
Zantetsuken
White Wind
Charge
Homing Laser
Homing Laser
Twin Homing Laser
Corona
Megido Flame
Mega Pulse Cannon
Mini Pulse Cannon
Mighty Guard
Dark Flare
Soul Crush
Light Pillar
Gravija
Megido Flame
Terra Break
Demon Slice
Bloodfest
Energy Bomber
Zantetsuken
Maelstrom
Draw Apocalypse
Hell's Judgement
Drain
Great Attractor
Shockwave Pulsar
Esuna
Maelstrom
Vacuum Wave
Apocalypse
Gigantic Sword

You said that the magic part of the enemy attack is 02 0x 0y 00 , I have checked out that the 0y part is the code of magic stored in FF8, and the same with the item part(haven't check this one).

Now I am working on the equations of the other 6 stats, it seems they are all line form.

5
Scripting and Reverse Engineering / FF8 Enemy Attack Names
« on: 2004-12-08 10:50:03 »
I have found some data such as draw magic and drop items, from the c0m***.dat extracted from battle.fs. There is a section with 0x17c bytes storing this infomation.And a pointer to this section at the offset 0x1c from the head of the dat file.

e.g: data ripped from c0m067.dat, they are data about Bahamut:
(The first 7 bytes stand for Bahamut  :D )
00000000   46 5F 66 5F 6B 73 72 00  00 00 00 00 00 00 00 00  
00000010   00 00 00 00 00 00 00 00  00 00 08 0A B4 03 DC 82  
00000020   01 02 46 02 5A 03 F0 1E  02 12 0F 01 00 02 0A 0A
00000030   00 04 00 0C 08 0D 02 00  08 0C EA 00 08 0E EB 00  
00000040   02 0B 09 00 02 0B 12 00  02 0B 25 00 08 0F FA 00
00000050   08 10 FB 00 08 11 FC 00  08 12 FD 00 08 13 FE 00  
00000060   08 14 FF 00 08 15 00 01  00 00 00 00 00 00 00 00
00000070   00 00 00 00 08 0D 02 00  08 0C EA 00 08 0E EB 00  
00000080   02 0B 09 00 02 0B 12 00  02 0B 25 00 08 0F FA 00  
00000090   08 10 FB 00 08 11 FC 00  08 12 FD 00 08 13 FE 00  
000000A0   08 14 FF 00 08 15 00 01  00 00 00 00 00 00 00 00  
000000B0   00 00 00 00 08 0D 02 00  08 0C EA 00 08 0E EB 00  
000000C0   02 0B 09 00 02 0B 12 00  02 0B 25 00 08 0F FA 00
000000D0   08 10 FB 00 08 11 FC 00  08 12 FD 00 08 13 FE 00
000000E0   08 14 FF 00 08 15 00 01  00 00 00 00 00 00 00 00  
000000F0   00 00 00 00 14 1E 01 0A  60 FF FF FF FF FF C8 08  
00000100   00 00 00 00 0F 00 17 00  19 00 1C 00 0F 00 17 00  
00000110   19 00 1C 00 0F 00 17 00  19 00 1C 00 4F 01 4F 01  
00000120   4F 01 4F 01 4F 01 4F 01  4F 01 4F 01 4F 01 4F 01  
00000130   4F 01 4F 01 4F 01 4F 01  4F 01 4F 01 4F 01 4F 01  
00000140   4F 01 4F 01 4F 01 4F 01  4F 01 4F 01 20 FF 00 28  
00000150   A0 00 A0 00 4E 01 4E 01  4E 01 4E 01 4E 01 03 01  
00000160   50 50 5A 50 55 5A 50 50  FF FF FF 96 FF FF FF FF  
00000170   64 6E FF 64 64 FF FF FF  FF FF FF 64  

I had recognized some as below:

Enemy Name:      Bahamut

Base EXP:         0
Bonus EXP:      0
Battle AP:         40
Extra AP??:      0

Magic Draw:
Lv 1 - 19:      Flare        Curaga       Full-life    Dispel    

Lv 20 - 29:      Flare        Curaga       Full-life    Dispel    

Lv 30 - 100:   Flare        Curaga       Full-life    Dispel    

Item Drop:
Drop Possibility:   255/256

Lv 1 - 19:   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Lv 20 - 29:   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Lv 30 - 100:Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Item Mug:
Mug Possibility:   32/256

Lv 1 - 19:   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Lv 20 - 29:   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Lv 30 - 100:Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1   Hyper Wrist x 1

Elements Possibility:
Fire:      80
Blizzard:      80
Thunder:      90
Earth:      80
Water:      85
Wind:      90
Poison:      80
Holy:      80

Status Possibility:
Death:      255
Poison:      255
Petrify:      255
Darkness:      150
Silence:      255
Berserk:      255
Zombie:      255
Sleep:      255
Haste:      100
Slow:      110

Stop:      255
Regen:      100
Reflect:      100
Doom:      255
Petrifying:      255
Float:      255
Confuse:      255
Drain:      255
Percent:      255
Vit0:      100

I believe these data are stored the attacks the enemy can use, but I have no idea what's the meaning.

08 0D 02 00  08 0C EA 00 08 0E EB 00  
00000040   02 0B 09 00 02 0B 12 00  02 0B 25 00 08 0F FA 00
00000050   08 10 FB 00 08 11 FC 00  08 12 FD 00 08 13 FE 00  
00000060   08 14 FF 00 08 15 00 01  00 00 00 00 00 00 00 00
00000070   00 00 00 00

6
Troubleshooting / garden
« on: 2004-11-22 01:27:02 »
Garden is in its alpha version, so there are still several bugs. Also, the lzs compression algorithm is not the one FF8.exe used, which means you may got a much bigger one if you compile the field.fs sucessfully. Actually I got a field.fs more than 700M when I only modify two of the .msd files.
Now I write a program for compile/decompile all the .fs stuffs., using the same compress method FF8.exe used. It is running on the console however.

7
I extracted "bcgate_1.fi" , "bcgate_1.fl" and "bcgate_1.fs" from "field.fs" in FF8's data directory. And they contain 17 files which are like this:


bcgate_1.ca
bcgate_1.id
bcgate_1.inf

bcgate_1.jsm
bcgate_1.map
bcgate_1.mim

bcgate_1.mrt
bcgate_1.msd
bcgate_1.pcb

bcgate_1.pmd
bcgate_1.pmp
bcgate_1.pvp

bcgate_1.rat
bcgate_1.sfx
bcgate_1.sym

bcgate_1.tdw
chara.one


But I only known the .msd file is consist of dialogs, and the .mim file is something about background, and nothing more.

Is there some format who have about these files? Would someone be so kind to post here or give me a link to it?

please forgive my English, I know it's very poor.

8
Scripting and Reverse Engineering / FF8 - fonts' width
« on: 2004-09-23 12:46:26 »
the mem address is 01D2B900
every 4bits indicates a width of a font
the minimum is 00, the maximum is 0F
 :D

9
Scripting and Reverse Engineering / FF8 - fonts' width
« on: 2004-09-23 10:52:23 »
Wow, glad to see someone do the translation work on FF8
FF8 use a table to indicate every font's width in dialog, I only found it in memory. Next time I will post the address here. I found the address by tracing the memory reading and writing the dialog data with SoftIce. I think you can search it in menu.fs.

PS: my English is also sooooo bad~~~

10
Scripting and Reverse Engineering / FF8 CDs
« on: 2004-08-19 08:55:39 »
to M4v3R: Yes, I will consider when I have time, now I am analysizing Chocobo.exe
to Vanit: maybe it just requires for the right disc

11
Scripting and Reverse Engineering / FF8 CDs
« on: 2004-08-19 08:44:04 »
M4v3R, I thought that maybe the application recognized CD by comparing the filename one by one with the strings it stores, so when DISK1 is on the disc, it will recognize it first and ignore DISK2.
I know a Chinese who had written a CD-crack patch which works nearly perfect, only mess up at the final battle in Disc 4.

13
Nothing will you need to run that model viewer,the data files are contained in the software.If you really want to extract some files from the .fs in ff8,you can use Eight which Qhimm had already released.but when come to the field files, I think you need Garden,but I'm sorry that I must recomplie its source code 'cause I lost the one I've completed, so please wait sometimes. :D

14
I think it's the PC version. 'cause I compared each .dat file with the one extracted by Garden(thank Qhimm for the source code,I compiled by myself and it worked well :D ) and found no differences.
PS:some d***.dat files from that battle.fs can also be viewed, but they have some errors while I open them in this viewer.Some says "no texture".

15
to Lord_Skylark:
Do you say that you got the basic data from all the other FF games and stuff? I want to know where you can find the enemies' infomation in FFVIII. Which files in the data directory store those info. Many thanks. :D

16
Yes, it also has another table like this one: :D

3003=Squall
3103=Zell
3203=Irvine
3303=Quistis
3403=Rinoa
3503=Selphie
3603=Seifer
3703=Edea
3803=Laguna
3903=Kiros
3a03=Ward
3c03=Griever
3d03=Mog
3e03=Chocobo
3f03=Angelo
2006=Disabled
2106=Dark
2206=Yellow
2306=Red
2406=Green
2506=Blue
2606=Purple
2706=White (standard)
2806=Disabled (flashing)
2906=Dark (flashing)
2a06=Yellow (flashing)
2b06=Red (flashing)
2c06=Green (flashing)
2d06=Blue (flashing)
2e06=Purple (flashing)
2f06=White (flashing)
200e=Galbadia
210e=Esthar
220e=Balamb
230e=Dollet
240e=Timber
250e=Trabia
260e=Centra
270e=Fishermans Horizon
280e=East Academy
290e=Desert Prison
2a0e=Trabia Garden
2b0e=Lunar Base
2c0e=Shumi Village
2d0e=Deling City
2e0e=Balamb Garden
2f0e=East Academy Station
300e=Dollet Station
310e=Desert Prison Station
320e=Lunar Gate
330e=Restores
340e=status
350e=learns
360e=ability
370e=Magic
380e=Refine
390e=Junctions
3a0e=Raises
3b0e=command
3c0e=Magazine
3d0e=Ultimecia Castle
3e0e=Garden
3f0e=Deling

17
Oh,what's the meaning of DTE?
and this is a list you want:(made by myself :D )
00=\n\n
01=<control>
02=\n
03=<name>
04=<control>
05=<control>
06=<color>
07=<control>
08=<control>
09=<delay>
0a=<control>
0b=<control>
0c=<control>
0d=<control>
0e=<term>
0f=<control>
10=<control>
11=<control>
12=<control>
13=<control>
14=<control>
15=<control>
16=<control>
17=<control>
18=<control>
19=<control>
1a=<control>
1b=<control>
1c=<control>
1d=<control>
1e=<control>
1f=<control>
20= (space)
21=0
22=1
23=2
24=3
25=4
26=5
27=6
28=7
29=8
2a=9
2b=%
2c=/
2d=:
2e=!
2f=?
30=…
31=+
32=-
33==
34=*
35=&
36=「
37=」
38=(
39=)
3a=·
3b=.
3c=,
3d=~
3e="(right)
3f="(left)
40='
41=#
42=$
43='
44=_
45=A
46=B
47=C
48=D
49=E
4a=F
4b=G
4c=H
4d=I
4e=J
4f=K
50=L
51=M
52=N
53=O
54=P
55=Q
56=R
57=S
58=T
59=U
5a=V
5b=W
5c=X
5d=Y
5e=Z
5f=a
60=b
61=c
62=d
63=e
64=f
65=g
66=h
67=i
68=j
69=k
6a=l
6b=m
6c=n
6d=o
6e=p
6f=q
70=r
71=s
72=t
73=u
74=v
75=w
76=x
77=y
78=z
79=<unknown>
7a=<unknown>
7b=<unknown>
7c=<unknown>
7d=<unknown>
7e=<unknown>
7f=<unknown>
80=<unknown>
81=<unknown>
82=<unknown>
83=<unknown>
84=<unknown>
85=<unknown>
86=<unknown>
87=<unknown>
88=<unknown>
89=<unknown>
8a=<unknown>
8b=<unknown>
8c=<unknown>
8d=<unknown>
8e=<unknown>
8f=<unknown>
90=<unknown>
91=<unknown>
92=<unknown>
93=<unknown>
94=<unknown>
95=<unknown>
96=<unknown>
97=<unknown>
98=<unknown>
99=<unknown>
9a=<unknown>
9b=<unknown>
9c=<unknown>
9d=<unknown>
9e=<unknown>
9f=<unknown>
a0=<unknown>
a1=<unknown>
a2=<unknown>
a3=<unknown>
a4=<unknown>
a5=<unknown>
a6=<unknown>
a7=<unknown>
a8=<unknown>
a9=[
aa=]
ab=â– 
ac=⊙
ad=â—†
ae=【
af=】
b0=â–¡
b1=★
b2=『
b3=』
b4=<unknown>
b5=;
b6=<unknown>
b7=ˉ
b8=×
b9=☆
ba='
bb=↓
bc=<unknown>
bd=<unknown>
be=<unknown>
bf=—
c0=《
c1=》
c2=±
c3=<unknown>
c4=<unknown>
c5=↑
c6=â…¥
c7=â…¡
c8=<unknown>
c9=<unknown>
ca=<
cb=>

18
to Haruhiko:
if you have been using the lzss compression,you can try to delete the first DWORD of the ENEMY000.LZS,then decode/encode it,then add a new DWORD at the beginning of the new file(simply a length)
to M4v3R:
of course!! it's of great help! :D

19
to Haruhiko:
what i mean is add a length dword at the beginning of the file,you can add it during the runtime

to M4v3R:
i'm totally new to Delphi :lol:
if you can give me a C++ copy ,i'd very appreciate. :D

20
good news!!
i've found the differences between Haruhiko LZSS and the method SQUARESOFT used to compress their files.
this is a c source code about standard LZSS compression:
http://sprite.phys.ncku.edu.tw/NCKUtech/DCM/pub/DCM_CODE_ASM/lzss.c
then make some changes:
1.initialize the ring buffer with NUL chars instead of space(standard LZSS),both in encode() and decode().
2.add a dword at the head of the file indicating the length of the whole block,encoded or decoded,not so difficult,i think. :wink:
complete,now it works as a compressing method which SQUARESOFT uses

21
now i understand the Haruhiko compression that ficedula mentioned  is the original LZSS compression,thanks to mirex!
and to Srethron Askvelhtnod:also thanks to your google site! i have found some source codes there.may raise new questions if i have any

22
many thanks!
but i have already read that document and it's about how to decompression,what i'm looking for is Haruhiko compression.Qhimm also have his own version in eight and garden,but it seems not effect as the Haruhiko compression.

23
As it mentioned in the readme,Ficedula's ficelzs uses Haruhiko compression as its default compression method.i want to know how it works on compression,but i am not able to read the delphi code of Cosmo.who can give me a copy of Haruhiko compression algorithm or a discription of it?Thanks. :)

24
Troubleshooting / how to decompress data in FFVIII...
« on: 2003-05-31 04:20:29 »
I've been studying Qhimm's code of eight for a long time,but I'm still confused about how to decompress the .fs data.Anyone who can tell me?

Pages: [1]