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 - Akari

Pages: [1]
1
Chrono Cross Modification / Re: Chrono Cross Backgrounds (Research)
« on: February 04, 2009, 01:54:05 pm »
From what I have seen in some room scripts, animation are performed by activating/deactivating overlapping background layers in cycle. I don't have an exemple here, but it look like this:

Label:
ACTIVATE_BACKGROUND_LAYER(2)
WAIT(10)
DEACTIVATE_BACKGROUND_LAYER(2)
ACTIVATE_BACKGROUND_LAYER(3)
WAIT(10)
DEACTIVATE_BACKGROUND_LAYER(3)
JUMP Label

Just like in FFVII and Xenogears.
From what I know in FFVII - there are 3 types of layers. Bottom, depth sorted and dynamic. Dynamic layer's depth and position set from script. FFVII has 4 layers, two of them are dynamic.

2
I look at your investigation very closely. It can help me with Xenogears =)
I still not understand how and why they store sign of variables in field files.

3
42 00 aa bb cc dd ee ff? gg*? - Move object to coordinates?
42 01 - Needed right after for 42 00 to work?

This things can be meet in xenogears as well. I meet it twice and both times it repeat previous action with some other entity/parameters/window.

4
2halkun: Opcodes in FFVII (and ffvii itself) was written pretty badly and not optimized at all. In later games they rewrite opcodes and all system of working with savemap as well as all bool value was packed as bit flags. Its much closer to Xenogears than to FFVII. I believe FFVIII will be direct reference, but very little known about it.

Example:
In ffvii there was a lot of conditional jumps, better known as "if" opcode.
In xenogears there is only one such opcode: 0x02  or "ConditionalJump" description is

0x02 ConditionalJumpTo(u16 value1, u16 value2, u8 flag, u16 address);
    flag & 0xF0 - how read values.
        0x00 - v value1, v value2, sign from first value is used for both.
        0x40 - v value1, s16 value2, sign from first value is used for both.
        0x80 - s16 value1, v value2, sign from second value is used for both.
        0xC0 - s16 value1, s16 value2.
    flag & 0x0F - condition.
        0x00 - value1 == value2
        0x01 - value1 != value2
        0x02 - value1 >  value2
        0x03 - value1 <  value2
        0x04 - value1 >= value2
        0x05 - value1 <= value2
        0x06 - value1 &  value2
        0x07 - value1 != value2
        0x08 - value1 |  value2
        0x09 - value1 &  value2
        0x0A - (0 NOR value1) &  value2
    do condition with two values.
    if true continue with next opcode, jump otherwise.

As you can see it covers immediate values as well as variables read from memory, it covers signed values as well as unsigned.

General idea though stays the same.

5
Hmm looks a lot like opcodes in Xenogears. If so - 0x8000 bit means that this is immediate value. If this bit is not set that value will be taken from memory.

6
By the way, there is not such thing as bone at this stage. All bones was left during exporting model to native game format. Only matrix and their hierarchy left. They may be similar, but not exactly, please remember that.

Maybe "BI = Current bone index (0xFFFF, or -1 if current joint and parent joint do not form a bone)" is index to model part influenced by transformation matrix?

And  - 0xFFF not 4096, but 1 in 12 bit fixed point. It used in transformation packet in GTE.

7
Ah, a date with R3000 assembly awaits me then. When you say "diasm," akari, are you referring to this open source disassembler, or to knowledge of assembly language in general?

I was reffered to disassembling and reverse enginearing in total.
I use Agemo Debugger (http://www.enixfans.com/html/agemo/) and it tools as disasm/debugger. It's enough to find all info you need.

If you didn't find script yet here the steps.

1) Find 200-256 consequental adreses in loaded game memory (cause field script this addreses are actually functions called by each opcode). You can do it by writing simple programm in any language that search 200-256 4-bytes values which starts from 0x80xxxxxx.
2) Set break by read from this memory range in agemo debugger and find where this value used.
3) Look at disassembled memory and find from where opcode reads (game executable read opcode - find value with opcode as inde and jump by that address). This is fieldscript. And this is good place to start disasming fieldscript.

Another way to find fieldscript is to analize field data file. This way we used to find script in FFIX, but it very depends on your experience.

8
I'll tell you a bit of knowledge:

1) You will need learn disasm no mater what, otherwise you will never compleatly understand what fieldscript actualy do.
2) Easiest way to find fieldscript block is to find 200-256 consequental adreses in loaded game memory (cause field script this addreses are actually functions called by each opcode)
3) Most likely you never find actual names for functions (ffvii was great exeption and luck)
4) Easiest way to see something changed in field script - change dialog id called by message displaying opcode.
5) Most likely fieldscript will be entity based. In ffvii and xenogears has 32 fieldscript per entity. First script usually initializing script that called when field loaded, others called by some events or by some opcodes.
6) Easiest opcode to disasm is script flow opcode like conditional/unconditional jump.
7) Some opcodes will pause script execution until some requirements met, like animation stop playing or model finish movement.
8) If you won't be lucky you encount field script lke in FFIX. As I was told it's not entity based and has different paradigm from FFVII.

that's it for now )

9
Chrono Cross Modification / Re: 3D Crono Cross model extraction?
« on: November 09, 2007, 10:03:17 am »
The source code to PCSX is still around. Go and abuse it? :D

Actually it would be interesting to attack the GTE and pick off the information passed to that and that passed on to the GPU.  I've always wanted to do 'deep' playing with PCSX (by that I mean emulate the GTE and GPU pairing together).

Anyhow I digress. PCSX is available although it would have a fairly sizable learning curve to modify.

Cyb

There is good debugger wrote by Agemo. I use it for all my reversing. It is modified PCSX.
http://www.enixfans.com/html/agemo/

10
Chrono Cross Modification / Re: CHRONO CROSS FILE EXPLORATION THREAD
« on: October 22, 2007, 03:35:39 pm »
Welcome to the Compendium, Akari! Glad to see you here.

When you say "walkmesh" are you referring to character models?

@Chrono'99: That REALLY helps. Thanks a million for the translation.

Walkmesh is 3d data on which models move. It's not visible and only use to calculate movement of model. Usually this called trimesh or triangular mesh. Walkmesh is Qhimm'f forum terminology. 3d models drawn togather with 2d background tiles sorted by depth. This create illusion of movement in 3d on 2d backgrounds (you can walk around pillar for example).
Walkmesh is one of the most important thing in field files. And I want to know format or at least try to found it. Cause Engine that I want to create suppose to handle all data... and chrono cross as well.

It can't be in savestate, because savestate is dynamic data holding structure, but walkmesh is static and doesn't need to be saved. It suppose to be in field files or in field group of files. They can be concatenated togather or not (most likely not). Tileset for background can be separated cause it needs to be uploaded in vram instead of ram. Field.dat file usually contains scripts, camera data, walkmesh, encounter data, different kind of triggers data, screen settings and background tiles descriptions. I don't know if it compressed or not (ffvii and xeno - compressed used lzs, but ffix are not compressed at all).

11
Chrono Cross Modification / Re: CHRONO CROSS FILE EXPLORATION THREAD
« on: October 22, 2007, 01:35:19 pm »
Can some one put here one field file with screenshot of what it looks like in game. I want to find walkmesh for the field.

Pages: [1]