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 ... 20 21 22 23 24 [25] 26 27 28 29 30 31
601
I knew it must be PC opcode, but can someone give me description of this opcode?

602
Q-Gears / Re: Q-Gears Bug Finding?
« on: 2006-10-06 13:59:01 »
English? lol. I break things, not look into how they broke. :P

No? I'm russian.

Testing is a complex thing. We do not only final game testing, but also checking models, scripts, gameplay, balance. It's a hard work  :wink:
The game are not playable by now and may be not playable for next year. But you may learn how write thing and try to broke scripts =)

603
Q-Gears / Re: Q-Gears.0.04c
« on: 2006-10-06 13:55:39 »
:-o If you were infront of me i'd hug you just for the thought of Q-Gears. Seriously though, nice work. :)

Thanks.

604
Q-Gears / Re: Q-Gears Bug Finding?
« on: 2006-10-06 13:46:54 »
Right now I need testers for opcodes. There is amount of opcodes that has been implemented, and external XML file to load our own opcodes. So I need someone to test existed opcodes to work corectly.

I'm tester myself... Lead-tester though. I'm working in Targem Studio =)

605
Q-Gears / Re: Walking on walkmesh.
« on: 2006-10-06 08:06:38 »
Walking on walkmesh has been implemented. And it seems working quite well :-P
Now I working on gateway =)

Do some one has info about last parameter in trigger?

struct Trigger
{
    Vector3 point1;
    Vector3 point2;
    Vector3 pos; // place where char will apear after transfer.
    S16 destindex; // index in maplist
    U32 unknownl; // 0x84848484 ot zero ?
};

606
Q-Gears / Walking on walkmesh.
« on: 2006-10-04 17:26:19 »
Does anyone have idea how to write walking on walkmesh or know how it was done in FFVII and other games? I just don't know algorithm... they way I wrote it is too buggy and not universal.

Please help.  :oops:

607
Q-Gears / Re: Q-Gears.0.04c
« on: 2006-10-04 17:18:05 »
Mmm they were =)
Just small error with window class. Already fix it.. thanks =)

608
Q-Gears / Re: Q-Gears.0.04c
« on: 2006-10-02 13:28:53 »
You cannot quit or use any of the keys to move around the field view.

This features are not implemented yet  :wink:

609
Scripting and Reverse Engineering / About PRTYP opcode.
« on: 2006-10-02 13:11:04 »
In wiki it redirects me to PRTYE opcode that has 3 parameters, but PRTYP has only one.
Can someone tell me what it do?

610
Q-Gears / Re: Q-Gears.0.04c
« on: 2006-09-30 06:57:04 »
Add few changes:

2006/09/29
    * [ffvii] Add WREST (0x53) field opcodes support. [Akari]
    + [ffvii] Moved window initialisation to reset method. [Akari]
    * [ffvii] Add SET-BYTE! (0x80) field opcodes support. [Akari]
    * [ffvii] Timer now count down automaticly as you show it and stop as soon as you close this window. [Akari]
    + [ffvii] Make Gamestate and Database non constant wher returned from their get methods so anyone can change it. [Akari]
    + [ffvii] Rewrite Field managers. Now FieldModule contains MemoryBank instead of Script. [Akari]

New version of windows binaries are at http://jrpg.ru/qgears_ffvii.zip

611
Q-Gears / Q-Gears.0.11
« on: 2006-09-28 15:44:51 »
New update in svn.

2006/09/27
    - [ffvii] Fix error with wrong parameter in WSPCL opcode. [Akari]
    - [ffvii] Fix error with string reading in OpcodesToRawScript. [Akari]
    * [ffvii] Add message typing. [Akari]

v0.04c

2006/09/27
    + [ffvii] Change version number to v0.04c. [Akari]
    - [ffvii] Fix script reading function tries to write u32 to u8 value. [Akari]
    - [ffvii] Fix small errors in new windowing system (input). [Akari]

2006/09/26
    + [ffvii] Rework windowing system. Windows are now more important than Messages (they are part of windows now). [Akari]
    * [ffvii] Add memory bank access to WNUMB. [Akari]
    * [ffvii] Fix some errors in PLUS and MINUS opcodes. [Akari]

2006/09/19
    * [ffvii] Add STTIM (0x38) field opcodes support. [Akari]
    * [ffvii] Add WNUMB (0x37) field opcodes support (without memory bank access). [Akari]
    * [ffvii] Add WSPCL (0x36) field opcodes support. [Akari]
    * [ffvii] Implement special window support in WindowManager. [Akari]

2006/09/15
    - [ffvii] Fix scripts and dialogs was not cleared when load new map from XML. [Akari]
    - [ffvii] Fix all scripts that stored in priority slots were run, not only highest one. [Akari]
    + [ffvii] Change script handling to real game like. [Akari]

2006/09/14
    - [ffvii] Fix transparent window didn't display transparency on units and walkmesh. [Akari]
    - [ffvii] Fix script calling when script doesn't exist. Add sanity check. [Akari]
    * [ffvii] Implement basic xml support. May load Dialog and Entity from XML. [Akari]



And I upload compiled version with resources to my own site.

http://jrpg.ru/qgears_ffvii.zip

612
I'm on my way to implement all window opcodes.

Now I have questions about WNUMB (0x37) and STTIM (0x38)

WNUMB - Where are offsets for databank?

STTIM - If it has not window_id - then changing it affects all windows?

STTIM - It has hours minutes and seconds. In the game I see only minutes and seconds... how is it set?

STTIM - After setting does it updates automaticly? or you need to reset it from script?

How can I open multiple windows at once?

613
Akari what are you using for the window system? Have you looked at Xenogears information for the conversations?
It might be good to use a more 'generic' system for the window system base and translate the FF7 opcodes and specifics acordingly.

The only class that handles window is WindowManager.

Mmm i found opcodes that shows dialog.... but not all of them and oll of them are understand clearly.

Code: [Select]
0xD2         DialogShow(u8 dialog_id, u16 flags);
                 flags meaning are dont known

Maybe it will be good... but window system in xenogears are still in clouds so I try not haste.
Right now I adding XML support to q-gears and then will add external script and dialog support. I need this because write my own script like this just for test is a bit hard =)

Code: [Select]
    Entity* entity = new Entity();
    entity->SetName("temp");

    u8 script_a[114] = {
    0x50,0x01,0xFF,0x00,0xFF,0x00,0x8A,0x00,0xA9,0x00,
    0x48,0x05,0x01,0x00,0x00,0x09,0x00,
    0x10,0x33,

    0x52,0x01,0x02,0x00,
    0x50,0x01,0xFF,0x00,0xFF,0x00,0x81,0x00,0x59,0x00,
    0x48,0x05,0x01,0x01,0x00,0x04,0x00,
    0x52,0x01,0x00,0x00,
    0x10,0x21,

    0x52,0x01,0x02,0x00,
    0x50,0x01,0xFF,0x00,0xFF,0x00,0x81,0x00,0x59,0x00,
    0x40,0x01,0x01,
    0x52,0x01,0x00,0x00,
    0x12,0x43,

    0x15,0x50,0x00,0x00,0x00,0x16,0x00,
    0x12,0x39,

    0x15,0x50,0x00,0x00,0x00,0x04,0x00,
    0x12,0x55,
    0x15,0x50,0x00,0x01,0x00,0x04,0x00,
    0x12,0x30,
    0x15,0x50,0x00,0x02,0x00,0x0C,0x00,
    0x60,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00
    };


    Script* script = new Script(script_a, 114);
    entity->AddScript(0, script);
    scriptManager.PushEntity(entity);

614
Q-Gears / Re: XML library.
« on: 2006-09-01 02:49:51 »
I'm quite fond of libxml, which I'm using for all kinds of Windows and MacOS/X applications. Alternatively there is Xerces, but I'm not a big fan of its API.


Ok.. I thought about libXML2 too  :lol:

615
Q-Gears / XML library.
« on: 2006-08-31 15:10:01 »
I want implement outer field script and dialog for field module. I need this for testing purpose first. And we may need this for mods in future.

Could someone suggest some good crossplatform XML library?

616
Each field object is linked to a particularly entity if that entity has a CHAR as its first opcode in its first script. Take a look at my explanation of the CHAR opcode on the wiki for more information; basically, while scanning through the script if you encounter a CHAR opcode, assign the next field object to the current entity (whose script you are scanning) and advance the 'field object pointer' to the next entry in the field object set. Ignore the CHAR argument as it has no bearing on the field object loaded for that model; the second example on the wiki entry demonstrates the numerical argument doesn't represent an offset into the model list.

I'm confused about argument for CHAR opcode. I don't believe that it has no meaning....... damn it. =)



ps: By the way, could you describe all window opcode? I want to implement them all first. The base opcodes such as WINDOW, MESSAGE and ASK are done... but a lot of others remains =)

617
Doors aren't 3D, they are part of the background, and linked to entities that open/close the doors using BGON and BGOFF opcodes to switch parts of the background on and off (i.e particular doors), as well as Triggers from Section 8 which, when crossed, run the particular scripts containing said BGON/BGOFF in the entity that manages the door. There's (usually?) one entity per door.

There are 3d doors. For example right after the start of the game there are 3d doors that Jessie opens (it slide to the left). And there are some others object like savepoint....

618
Could someone explain character and unit (doors and other 3d) management on fields in FFVII.

From where models load, how much models can one map help and so on. I need info to write UnitManager for Q-Gears.

619
Q-Gears / Re: New Update.
« on: 2006-08-25 19:21:27 »
Oh ... hmmm which means My ISO FS stuff is useless? LOL.

Sigh.. :D

Of course not. I made this file system for Xenogears a long time ago... just ported it here.
It may give you the clue how to work with file drivers and so on =)

It not worked with FFVII. Only Xenogears virtual FS.

620
Q-Gears / New Update.
« on: 2006-08-25 18:58:08 »
I upload new file structure in SVN (and returned after 3 weeks of absence).

Now we can support few games.
I separate game specific code and common functions and classes. =)

I added SVN keywords to each file and start new ChangeLog

And I added Xenogears support. (Cyberman - you can see how I done CUE/BIN image file system there)

Please test it with all your might!

ps: someone needs to add makefiles to linux and mac

621
I have to object...

You can't call it X-gears as you are not allowed to have a name cooler than mine....

 :x  :|

I think Q-Gears must handle different square games that share similar engine. FFVII, FFVIII, FFIX, Xenogears, Chrono Cross, Parasite Eve and maybe even futher (FFX?).

I still can't deside the better way to do it.

622
The base opcode idea are the same. There are also opcodes for math operations, script calling, different type of jumps, dialog windows, background management, menu calling. character management. Although they are very game specific, all of them (exept return) have different format and different argument layout. Ow.. I forgot that there are camera management opcodes =)
And... there are more than 256 opcodes =)
Multibyte encoding? Interesting.  I suspect that is what FF8's script system does too! LOL.  Basically it's a completely different encoding system.  Might be a different script engine all together as well.  The only thing the same is RET! ;)

It works the same way. Just you can't count opcode 0xFE instead of this you can found a lot of opcodes that start from 0xFE00, 0xFE01, 0xFE02 and so on. So if system met 0xFE it's just read one more byte.

Oh and I found Request opcodes =)
0x08         EntityCallScriptSW(u8 entity, u4 priority, u4 script);
                 waits till script starts working and then continue

0x09         EntityCallScriptEW(u8 entity, u4 priority, u4 script);
                 waits till script finishes working and then continue

I still don't know what 0x80 in the end of many opcodes means =(

623
Akari how similiar are the opcodes to FF7's? It looks as if it uses a different encoding but similiar opcodes.  Obviously they needed different opcodes.

The base opcode idea are the same. There are also opcodes for math operations, script calling, different type of jumps, dialog windows, background management, menu calling. character management. Although they are very game specific, all of them (exept return) have different format and different argument layout. Ow.. I forgot that there are camera management opcodes =)
And... there are more than 256 opcodes =)

Quote
32 is identical to FF7's count and it sounds like they have a periodic update function.  Is there empty routines for unused slots like in FF7?
I wonder if it should use the same scripting code layout as for FF7. Hmmm.

Khmmm.. i dont remember  empty routines for unused slots... what is it?

The only difference I met is the update script (script that are called repeatedly) are exist as independant script, not as the part of script 0.

Quote
Anyhow great work. As ussual ;)

Thanks  :-D

624
Scripting and Reverse Engineering / Xenogears fieldscript.
« on: 2006-07-31 13:41:59 »
I spent some times playing with xenogears field files again.
I managed to understand some new data.

If anyone still remember something - file six in field are scripts.
The first 0x80 bytes are unknown.
After it goes u32 number of entitys.
And after it are 2 bytes offsets to entity scripts entry points. Each entity record are 0x40 bytes long so there can be 32 scripts max.
The first script are called at the beginning of the map (constructor)
The second one are called repeatedly
The third one are the dialog script (called when you try to speak with entity)

Here some script that I already decode... not compleatly maybe =)

Code: [Select]
0x00         Return();

0x01         JumpTo(u16 address);
                 address   - address in global script offset

0x02         ConditionalJumpTo(u8 offset, u8 databank, u16 value, u8 condition, u16 address);
                 if condition is wrong then jump
                 condition - 0x40 - A == B
                           - 0x41 - A != B
                           - 0x46 - A &  B
                 address   - address in global script offset

0x0B         SpriteSet(u8 sprite_id, 80);

0x19         SpriteSetPosition(u16 x, u16 y, C0);

0x20         SpriteSetSolid(u8 type, 80);
                 type      - 0x01 - can go through
                           - 0x02 - ???
                           - 0x04 - ???
                           - 0x08 - can't move
                           - and different combination of above flags

0x26         Wait(u8 time, 80);
                 time      - the larger value - longer waiting

0x2C         SpritePlayAnimation(u8 animation_id);

0x36         VariableSetTrue(u8 offset, u8 databank);
                 set two bytes from offset to 01 00

0x37         VariableSetFalse(u8 offset, u8 databank);
                 set two bytes from offset to 00 00

0x4A         SpriteGoToPosition(u16 x, u16 y, C0);

0x69         SpriteSetDirection(u8 direction, 80);
                 direction - 0x00 - north
                           - 0x01 - north-east
                           - 0x02 - east
                           - 0x03 - south-east
                           - 0x04 - south
                           - 0x05 - south-west
                           - 0x06 - west
                           - 0x07 - north-west
                           - and so on...

0x6B         SpriteRotateClockwise(u8 rotation, 80);
                 rotation  - number of sprite rotation to skip (clockwise)
                           - 0x00 - stay as we are
                           - 0x01 - rotate one position clockwise

0x6C         SpriteRotateAntiClockwise(u8 rotation, 80);
                 rotation  - number of sprite rotation to skip (anti-clockwise)
                           - 0x00 - stay as we are
                           - 0x01 - rotate one position anti-clockwise

0x6F         SpriteRotateToEntity(u8 entity_id);

0x98         MapLoad(u16 map_id, u8 location, 80);

0xA8         VariableRandom(u8 offset, u8 databank, u8 max_value, 80);
                 set two bytes from offset to random value from "00 00" to "max_value 00"

0xB3         FadeOut(u8 time, 80);
                 time      - larger the value - longer the fade

0xB4         FadeIn(u8 time, 80);
                 time      - larger the value - longer the fade

0xB5         CameraSetDirection(u8 direction, 80);
                 direction - 0x00 - north
                           - 0x01 - north-east
                           - 0x02 - east
                           - 0x03 - south-east
                           - 0x04 - south
                           - 0x05 - south-west
                           - 0x06 - west
                           - 0x07 - north-west
                           - and so on...

0xC7         CameraRotate(u8 time, 80);
                 don't know difference with CameraRotate2();
                 time      - larger the value - longer the rotate

0xC8         CameraRotate2(u8 time, 80);
                 don't know difference with CameraRotate();
                 time      - larger the value - longer the rotate

0xD2         DialogShow(u8 dialog_id, u16 flags);
                 flags meaning are dont known

And example script. The main room in Chief Lee house (where the first conversation with Dan is). Entity is Maid that walking in far corner of the room.

Code: [Select]
// 0x04C5
entity[0F].script[00]()
{
    SpriteSet(03, 80);
    Return();
}



// 0x04C9
entity[0F].script[01]()
{
    VariableRandom(0E, 04, 03, 80);
    ConditionalJumpTo(0E, 04, 00 00, 40, E5 04); (#1)
    SpriteGoToPosition(86 FF, B9 01, C0);
    SpriteSetDirection(00, 80);
    Wait(28, 80);
    JumpTo(36 05); (#4)
#1  ConditionalJumpTo(0E, 04, 01 00, 40, FC 04); (#2)
    SpriteGoToPosition(20 00, B9 01, C0);
    SpriteSetDirection(00, 80);
    Wait(28, 80);
    JumpTo(36 05); (#4)
#2  ConditionalJumpTo(0E, 04, 02 00, 40, 13 05); (#3)
    SpriteGoToPosition(4D FF, 56 01, C0);
    SpriteSetDirection(06, 80);
    Wait(28, 80);
    JumpTo(36 05); (#4)
#3  ConditionalJumpTo(0E, 04, 03 00, 40, 36 05); (#4)
    SpriteSetDirection(01, 80);
    Wait(05, 80);
    SpriteSetDirection(00, 80);
    Wait(05, 80);
    SpriteSetDirection(07, 80);
    Wait(05, 80);
    SpriteSetDirection(00, 80);
    Wait(1E, 80);
    JumpTo(36 05); (#4)
#4  04
}



// 0x0537
entity[0F].script[02]()
{
    ConditionalJumpTo(02, 04, 00 00, 40, 42 05); (#1)
    JumpTo(43 05); (#2)
#1  Return();
#2  SpriteRotateToEntity(01);
    DialogShow(22, 00 00);
    9C
    5D025E
    DialogShow(23, 00 00);
    9C
    2CFF
}



// 0x0554
entity[0F].script[03]()
{
    Return();
}



// 0x0555
entity[0F].script[04]()
{
    F4005A
    92
}



// 0x0559

And one more. Chief Lee itself

Code: [Select]
Lee

// 0x03AA
entity[0C].script[00]()
{
    SpriteSet(04, 80);
    SpriteSetSolid(08, 80);
    SpriteSetDirection(00, 80);
    FE0D0F80
    Return();
}



// 0x03B8
entity[0C].script[01]()
{
    Return();
}



// 0x03B9
entity[0C].script[02]()
{
    VariableSetTrue(02, 04);
    SpriteRotateToEntity(01);
    ConditionalJumpTo(0C, 04, 00 00, 40, 07 04); (#1)
    DialogShow(1A, 00 00);
    9C
    SpriteRotateClockwise(01, 80);
    Wait(05, 80);
    SpriteRotateAntiClockwise(01, 80);
    Wait(0A, 80);
    DialogShow(1B, 00 00);
    9C
    SpritePlayAnimation(00);
    SpriteRotateClockwise(01, 80);
    Wait(01, 80);
    SpriteRotateClockwise(01, 80);
    FE0DFC80
    DialogShow(1C, 00 00);
    9C
    FE0D0F80
    Wait(0A, 80);
    SpriteRotateToEntity(01);
    Wait(0A, 80);
    DialogShow(1D, 00 00);
    9C
    VariableSetTrue(0C, 04)
    JumpTo(0C 04); (#2)
#1  DialogShow(1E, 00 00);
    9C
#2  SpritePlayAnimation(FF);
    370204
}



// 0x0411
entity[0C].script[03]()
{
    Return();
}



// 0x0412
entity[0C].script[04]()
{
    Wait(14, 80);
    A40C00DA00
}



// 0x041A
entity[0C].script[05]()
{
    A419008F00
}



// 0x041F
entity[0C].script[06]()
{
    ConditionalJumpTo(08, 00, 06 00, 40, 2F 04); (#1)
    CameraSetDirection(02, 80);
    3C80
    JumpTo(54 04); (#4)
#1  ConditionalJumpTo(08, 00, 07 00, 40, 3F 04); (#2)
    CameraSetDirection(02,80);
    2880
    JumpTo(54 04); (#4)
#2  ConditionalJumpTo(08, 00, 05 00, 40, 4F 04); (#3)
    CameraSetDirection(02, 80);
    2880
    JumpTo(54 04); (#4)
#3  CameraSetDirection(02, 80);
    1E80
#4  Return();
}



// 0x0455
entity[0C].script[06]()
{
    F4005A
    SpriteSetDirection(00, 80);
    92
}



// 0x045C

625
Q-Gears / Re: File names
« on: 2006-07-18 14:41:40 »
I would like to suggest that all the sourcecode file names in Q-gears be made lowercase. This would help to reduce the number of case sensitive problems I'm seeing whilst trying to compile on my Linux box.

One such example is in trunk/src/filesystem/file.h which contains the follwing line :
  #include "../utilities/NoCopy.h"

The problem is that the file is nocopy.h which throws up problems on case sensitive filesystems.

HTH

All files should be named according to this standart http://www.possibility.com/Cpp/CppCodingStandard.html. There are few reasons for this. First one is - we need to use some standart. =)
The second one is the ThisFileName are much better to understand than thisfilename. I redone all files this way as soon as I document them to doxygen. It's sad that SVN sometimes doesn't change lettercases of file even after I renamed them. If you meet this problem, please rename file to Uppercase first letter anstead of lowercasing them all.

Pages: 1 ... 20 21 22 23 24 [25] 26 27 28 29 30 31