1
Q-Gears / Re: New Q-FFVII project
« on: 2025-10-06 11:30:28 »
Last changes in pictures








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.
1 - field.
2 - battle.
3 - world map.
4 - battle.
5 - menu.
6 - highway.
7 - chocobo.
8 - snowboard.
9 - condor.
a - submarine.
b - jet.
c - disc change.
d - menu.
e - snowboard2.
10 - ???
The last time I noodled around with things, there was quite a bit left to reverse engineer, which I guess you could also call the design flaw. qgears was always meant to work with the original formats of things, and be a drop in replacement for the ff7 exe (if I'm remembering this right). Ogre3D as a game engine is also... tricky to work with imo
I think akari still does some reversing every once in a while
Edit: here's some fun stuff https://github.com/Akari1982/q-gears_reverse
Sound like time would be best spent reversing then. Is there any sort of centralized db for keeping track of the progress, or is it just scattered throughout the various efforts? If so, perhaps organizing such an db would be useful.
@Akari taking another stab at q-gears? I see you are back to reversing https://github.com/Akari1982/q-gears_reverse
I'm especially interested by the LFO table, which is too much work to reverse engineer by ear. Can you confirm it's your "akao_wave_table" array ?
We're mostly more into Xenogears, but this engine seems to illustrate similar capacity for many classic PSX Square games.
Another worthwhile challenge would be support for full (non tiled) background images
The modelling approach for making directly-usable 3d scenes for Q-Gears would have to be different from the one used for rendering 2d backgrounds. Basically, for rendering 2d backgrounds, we can model without much care about poly counts/mesh optimization - real-time 3d scenes would be a different story. The other matter is about lighting and shading, since the renderer you would be using (Ogre) does not necessarily support the same shaders which a 3d-modelling software would.
Why don't you make a wiki article like this one?
// model data
+00 [][] 0000 - if this is not 0 we add 0x40 bit to 8015190b
+02 [] 80 - 0x3f - dead type. 0x80 - play secondary animation
+03 [] 00
+04 [][] 0190 - collision radius. Set to 801518e4+6
+06 [][] 0a00 - to 801518ec
+08 [][] 0a00 - to 801518ee
+0a [][] 0000 - to 801518f0
+0c [][] 0000
+0e [][] fce0
+10 [][] fc7c - filler?
+12 array of joints (bone indexes)
02 00 00 00 00 00 0d 08 03 00 03 17 12 00 00 00
+22 [][] 0000 - filler?
+24 array of 8 offsets to something
00000438 00000438 00000438 00000438 00000438 00000438 00000438 00000438
+44 array of 4 something
0180 0132 0180 0000
+4c array of 6 something
0399 fda8 f9ff 0000 fddc 0000
+58 array of 6 something
fd01 ff58 f9ab 0000 fe30 0000
+64 [][] 012c
+66 [][] 0000 - filler?
+68 array of 32 offsets to animation scripts
00000190 00000194 0000019c 000001a0 000001b0 000001c0 000001c4 000001cc
000001d0 000001d4 000001e4 000001e8 000001ec 000001f0 000001f4 00000200
000001fc 00000210 00000204 00000198 0000026c 00000284 00000318 0000032c
00000358 0000036c 00000378 00000384 00000338 00000210 00000220 00000230
function action_script_1()
play_animation(1);
[ACTION_OPCODE fe]
end;
function action_script_2()
return_direction(); -- E5
play_animation(6);
[ACTION_OPCODE f1]
end;
function action_script_3()
[ACTION_OPCODE b3]
end;
function action_script_4()
[ACTION_OPCODE b3]
end;
function action_script_5()
play_animation(15);
[ACTION_OPCODE f2]
end;
function action_script_6()
play_animation(16);
play_animation(17);
[ACTION_OPCODE f2]
end;
function action_script_7()
play_animation(18);
[ACTION_OPCODE f2]
end;
function action_script_8()
play_animation(5);
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_9()
[ACTION_OPCODE ab]
end;
function action_script_10()
play_animation(19);
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_11()
play_animation(24);
play_animation(25);
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_12()
[ACTION_OPCODE b4]
end;
function action_script_13()
[ACTION_OPCODE 95]
end;
function action_script_14()
[ACTION_OPCODE c4]
end;
function action_script_15()
[ACTION_OPCODE e7]
end;
function action_script_16()
play_animation(4);
return_position(); -- FA
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_17()
load_additional_effect(); -- E8
set_direction(); -- FC
play_animation(3);
[ACTION_OPCODE ed]
end;
function action_script_18()
return_direction(); -- E5
[ACTION_OPCODE c4]
end;
function action_script_19()
play_animation(16);
[ACTION_OPCODE fe]
end;
function action_script_20()
set_direction(); -- FC
set_effect("foot_dust"); -- F0
play_sound_for_attacker(00, 001a); -- D8
play_animation(26);
move_to_target("linear_movement", 04b0, 0000, 04); -- D1
set_effect("foot_dust"); -- F0
play_animation(27);
execute_attack(01); -- F7
play_animation(30);
play_animation(28);
return_position(); -- FA
set_effect("foot_dust"); -- F0
play_animation(29);
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_21()
set_direction(); -- FC
play_animation(3);
[ACTION_OPCODE ed]
end;
function action_script_22()
set_direction(); -- FC
set_effect("foot_dust"); -- F0
play_sound_for_attacker(00, 001a); -- D8
play_animation(26);
move_to_target("linear_movement", 04b0, 0000, 04); -- D1
set_effect("foot_dust"); -- F0
play_animation(27);
execute_attack(01); -- F7
play_animation(30);
[ACTION_OPCODE 9e]
end;
function action_script_23()
execute_attack(01); -- F7
play_animation(34);
play_animation(35);
return_position(); -- FA
set_effect("foot_dust"); -- F0
play_animation(29);
return_direction(); -- E5
return_to_idle(); -- EE
end;
function action_script_24()
set_direction(); -- FC
set_effect("foot_dust"); -- F0
play_sound_for_attacker(00, 001a); -- D8
play_animation(26);
move_to_target("linear_movement", 04b0, 0000, 04); -- D1
set_effect("foot_dust"); -- F0
play_animation(27);
execute_attack(01); -- F7
play_animation(30);
[ACTION_OPCODE 9e]
end;
function action_script_25()
return_direction(); -- E5
[ACTION_OPCODE bd]
end;
function action_script_26()
return_direction(); -- E5
[ACTION_OPCODE bd]
end;
function action_script_27()
return_direction(); -- E5
[ACTION_OPCODE bd]
end;
function action_script_28()
set_direction(); -- FC
set_effect("foot_dust"); -- F0
play_sound_for_attacker(00, 001a); -- D8
play_animation(26);
[ACTION_OPCODE cc]
end;
function action_script_29()
load_additional_effect(); -- E8
set_direction(); -- FC
play_animation(3);
[ACTION_OPCODE ed]
end;
function action_script_30()
load_additional_effect(); -- E8
set_direction(); -- FC
play_animation(3);
[ACTION_OPCODE ed]
end;
function action_script_31()
load_additional_effect(); -- E8
set_direction(); -- FC
play_animation(3);
[ACTION_OPCODE ed]
end;
Excellent, I'll take a look. At the moment I'm updating the code to work on Ogre 1.9 - just need to fix a linking issue with overlays/fonts.
Is there any code already to get field images too? It would be good to get native field images and scripts working, then it would be possible to explore most of the game.
Also out of interest is there anything for FF9 fields and scripts?
I've been looking here for docs:
http://wiki.qhimm.com/view/FF7/Field/Script/Opcodes
Seems the red ones are not documented? I was going to work on creating the FF7 script to lua loader.
Quite slow.. we need more peoplewe also need the field op code reversing to be completed.
B... but the whole time, I thought YOU were the developer....

From what I gather I may need to compile ogre using the same libraries that i'm using to compile Q-Gears. I didn't want to have to go that far. As who knows how many depencencies, I'll need to download, to make that compile
a minor update from my side
I'm currently doing mostly just migration of building to CMake and cleanup ( lots of files moved, sorry for any inconvinience when updating )
I get along with CMake quite well it really does a great job, I did migrate some first Unittests to CMake + CTest and implemented Walkmesh serialization meanwhile
as building works good enough for now, I'll try and concentrate further implementing missing Resource files, next goal is loading of Field map completely from ff7 data, with exception of the script