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

Pages: [1] 2 3 4 5 6
I don't know if it happens everywhere, but the X variable should be ANDed to 7 bits (0x7F). Do you know for what this one bit is responsible for?

My bad... The value is calculated from block positions.

the X is treated as two sequential rows so the math goes:

Code: [Select]

X = rowBlockAmount, which is 4 times segment amount so 4 * 32 = 128 or 0x80. The last bit tells which row of the two we are on, first or second. The range of top row is from 0x00 - 0x7F and second row's 0x80 - 0xFF.

Y is incremented whenever X goes over 0xFF.

Hope this image helps more than my blather :D (Open in new tab for seeing text)


Okay, EDX = 0 if top left corner on map and 2FFF if bottom right corner.
but X makes no sense...


The "0-2FFF" format is actually 2 bytes

In Big-Endian format:
 First byte is X location in width counted from blocks (0x20 * 4 or 32 * 4), where 0x20/32 is blocks from "left edge" to "right edge" in world map.
 Second byte being Y location in height counted from blocks (0x18 * 2 or 24 * 2), where 0x18/24 is blocks from "top edge" to "bottom edge" in world map.

In short:
Code: [Select]
First byte = Block in world map row
Second byte = Block in world map column * 2 (Only for every other column block)

Hope that was clear in anyway :)

This is awesome! ;)

Any special requests? What you'd like to see?
What about interactive in-game editor for rail or battle stages?  :D

If you are going to do editor for battle stages, I would like to see UV editor on your textures because the feature that you can see UV faces on top of texture was really cool! And of course vertex editor in OpenGL would be cool but I, if someone, know that it's easier said than done! :D Good work nonetheless !

Code: [Select]
Endo: There was also some content related to maps we had to cut. We were going to make something like the competition screen in a racing game,
separated into an upper and a lower part.

Interviewer: Upper and lower part?

Endo: To explain it in more detail, the lower screen would have an image like an observational camera, while the upper screen would follow the player character in the usual way.
But since the player could go outside the range of the observational camera when moving to his or her destination, we couldn't implement it due to memory capacity problems.
We planned to use it for the scene where you're going to the secret area inside the Garden training facility.

I noticed this earlier but I think it's worth sharing that this camera view relates to this hidden scene:

At least we now know what it is supposed to be, I think :D

General Discussion / Re: Where is this played?
« on: 2016-06-05 14:30:47 »
It's not.  It's 3 separate tracks :P  The question is if the one I posted is ever heard.  The FMV intro is not it.

I would like to hear these tracks, it's pretty non-sensical to try and guess anything based on the argument that there are 3 separate tracks if I don't know what these tracks includes.

General Discussion / Re: Where is this played?
« on: 2016-06-05 14:22:58 »
I don't think anything is unused here. I'm not sure what three tracks you are talking about but if it's what I think it is then the first separated track is the 0-37s from the video I posted. IF the third track is the same as second track with only about 7 second intro then I highly suspect that this second track is only used after the first intro and after the second track has played it loops third track indefinitely.

General Discussion / Re: Where is this played?
« on: 2016-06-05 09:42:21 »
It is the normal track used in galbadia garden overall. It just starts playing after the intro. You can hear it here:

Hello all!

I'll do a little update and plans for the future on this subject.

First of all, I'd like to say that unfortunately the development has been slow and I'll admit that it's been too slow what I originally planned, however due to my school projects and school in general, I've been pretty busy with it (I'm a student in IT industry majoring in game developing). Well, maybe more on to that later.

Right now I've started to work again on the wmx2obj started by Blue. I've modified it pretty heavily and moved from Java to C#. I'm pretty happy with the current stage it is in, but I'm eager to make it a full-fledged world map editor.

Here's a short brief what's up (please don't mind the messy buttons and texts obj2wmx tab, they are just placeholders  :-X):

As you can see there's some cool features I've been planning.

  • OpenGL Editor (Currently only a viewer)
  • Hex Editor embedded in the program (You can see the tab in the picture, it's on the works ;) )
  • Easy File Managment (Pretty much what it says)
  • And absolutely much more features....
  • In future, expand the program to edit wmset.obj files, models, and hopefully the whole world module engine itself (currently wmx.obj support only :( )

So, that's pretty much it for now. I'm happy to hear what you think and more happy to hear what YOU would want as a user to add to the program for better workflow for FF8 world editing. I will edit this post if suggestions do pop up.

Oh, and what do you think about the name Ragnarok? :) ya or na?  ;D

I found a hidden scene in trial. Here's a video:

Wow that is really cool! :D

Rinoa's faceplant though :D I don't think that those animations are used in-game for Zell or Rinoa on any scene except for Squall? Am I wrong?

Reserving space for writing out a little tutorial how to open SSIGPU - VRAM display while in world map.

These addresses apply for FF8 PC - 2000 version.

By my suspections, sub_53EF40 function is responsible for things that happens during one frame ON world map. It takes one parameter.

Active window detection during frame?
Code: [Select]
    - 0053EF46    call    sub_45B2E0
    - 0053EF48    test   eax, eax          // sets zero flag to 0 if game is not active
 |--- 0053EF4D    jne    0053F14F     // If you change this this OPCODE to "je" you can run the game while in background and in world map. If you want to run the game again when window is active, change this back

Call for SSIGPU window that shows VRAM buffer. The window doesn't seem to come back again if closed once, need to restart the game if you want to start it again :cry:.
Code: [Select]

     - 0053EFD8    cmp    [02036AE4], edi     // Changing the value at memory address 02036AE4 to anything else than EDI (00000000) will trigger the if statement
 |---  0053EFDE    jne    0053EFEA                // If not equal
 |   - 0053EFE0    call   sub_45C320            // Creates the SSIGPU window
 |   - 0053EFE5    call   sub_45C590            // Updates the window?
 |->  ...

sub_45B2E0 (call from sub_53EF40, line 0045B2E6 ) is a function that checks if the game window is active or not. The function itself calls system functions including USER32.GetActiveWindow. Return value seems to be -1 if not and 0 if active, returned to EAX register.

sub_45C320 (call from sub_53EF40, line 0053EFE0) is the function that creates the SSIGPU window.

I wish we could someday create full IDA database containing named variables and function names, so instead of sub_ABCDEF you will see PlaySound or something...

I hope this too. I'm learning to write things out properly just like the link Paul posted from rcxrdx. Once I've learned to do that I'll write out some things out for everyone, of course also before that so the research
wouldn't be limited by my time entirely.

You might be better off using github pages or something instead. Has more downtime resistance and is distributed.

Quite a few useful bits of info here:

You are right! Will take a look on this later on.

You found battle calling! Amazing work!
I have addresses and functions for kernel32 level loading, character/enemy battle model loading, Sound load, Sound ID handling and stuff related, will share as soon as I get to my notes on PC. The problem is off course this version. I found working on Steam version the most comfortable because it's faster and somewhat more stable. There are some changes in .data section of the exe, bit majority of game code assembly is the same. Oh right! I also have the buffer location, I'll get all the values, addresses, pseudocodes and assembly ASAP.

That's cool! Also a little more precision to the battle calling: Address 0046FED0 or FF8+6FEDO (which ever feels more comfortable to use) is the function for updating the whole frame or at least part of it. The value I documented above is compared to byte 03 which seems to trigger the battle with parameters.


Off-topic stuff first out. I'm not sure if anyone has yet noted a little lack of updates on FF8 world map exporter/imported (named wmx2obj in tools sections). It's still under work mostly because I want it to be as user friendly as possible. This has also lead me to somewhat what this topic tries to achieve.

So this topic will work on engine side and I hope that with this topic we can fill FF8 Engine information on wiki too.

For starters every addresses that straightly or remotely operates engine functionality somehow will be good to share here, also if there are already full functions constructed from disassembly that would be great. When posting addresses, please post your game version. I'm not sure how much difference there are in addresses between different versions, but if anyone has information on that, it would be good to be addressed here.

I've been debugging a bit of FF8 engine side lately, especially engine module switching from field to world and so on, and there are promising results building up. Here's one address that I found really cool to share now.

Code: [Select]
Game version: FF8 PC - 2000

Address: 00B6D970

    Functionality: Frame limiter?

    Data type: Boolean?
    Size: 4 Bytes?...See information...
    Default value: 01 00 00 00

    Information: This seems to be some kind of boolean value for the first byte in given address. When set to 00, the game is sped up. 01 is the default value.

Edit: Found addresses from dynamic memory that the frame functions compare on each frame, I'll put more info from functions later on, but right now these memory variables are good enough to operate from field module.

Code: [Select]
Game version: FF8 PC - 2000

Address: 01CE4760

    Functionality/Description: Module index to be transported

    Data type: Short?
    Size: 1 Byte, most likely 2 bytes but second one never used.
    Default value: 00 00

    Information: Value is the index to the module to be called. It is checked every frame and defaults to 00 00 in field. This value is only used in field module, other modules uses values from different memory addresses.

    IMPORTANT: Before changing the module index, change the parameters. If parameters are not set correctly before module transfer, the game may crash, freeze or leave the game in a state where it can't yet be recovered without resetting the game.
        01 00 = Call field module with room number in address 01CE4762 U16 (little-endian) (right after this value). There are a lot of parameters yet to be studied, for example where the characters are spawned.
        02 00 = Not used.
        03 00 = Call battle module with parameters right after this value. 01CE4762 U16 (little-endian) value seems to be encounter code, codes are here:
        04 00 = Resets game. Game is restarted.
        05 00 = Call in-game menu module. No parameters seems to be needed, however this does not mean it doesn't take any parameters.
        06 00 = Yet to be confirmed. Soft freeze.
        07 00 = Call world module with parameters right after this value. 01CE476C U8 determines where you are spawned in world map. Value 0x32 spawns you in ragnarok where you left it and value 0x30 spawns you in balamb garden where you left it. More values to be examined later.

General Discussion / Re: APK extraction
« on: 2016-03-01 12:29:30 »
Well to be honest it's quite hard to say with this limited information of what game you are extracting. Depending on the game, have you looked/found information about the file hierarchy and structures. That would help a lot if there was documentation of it.

General Discussion / Re: APK extraction
« on: 2016-03-01 12:02:25 »
APK is a modified zip file. Usually you can open it as a normal zip.

Just a friendly tip, you should use google before posting new thread asking a question(s) that can be found through google.

There are few problems with your visions currently. You have stated that you have permission to use Capcom assets on your own project, but you haven't specified what assets the permission includes. However that is not the main point of this thread.

As for Final Fantasy 7 assets, if you don't have permission to use Square-Enix's assets from the game, I would suggest that you won't include them in your game/project. You are working under company policies and this can lead to legal matters with Square-Enix.


Timviewer only shows you the location of .tim texture(s) of the object you are looking in, however enemy textures are in the same .DAT file in section 11 on the link above.

You can find where the section 7 starts from the enemy file's header, the offset in header tells you where the section start locally (counted from the file's starting position).


It is on wiki, but i'm not sure how exact the information is.

A little reminder, world map seems to be completely different from field map

FF8 Tools / Re: FF8 Scripting Language
« on: 2015-12-22 00:04:47 »
That's actually pretty handy, since there are already a lot of info about OPcodes, maybe you should add like a hover thing on the codes that also tells what parameters needs to be added. That would fasten workflow while writing new scripts! :)

Okay after fighting over night and morning I finally got it working. The reason was FAULTY eax.dll in SysWOW64 application.

About my graphic cards. I have run FF8 on integrated GPU because when I set up FF8 first time to this laptop I had really bad graphic problems with 840m. I'm not sure if they were an issue with Aali's drivers or something else, didn't bother with that much since I got it working somehow.

I was about to buy FF8 from steam if I wouldn't have got this old version working, but well, here it is working again :D Thanks for help also!


While ago I installed windows 10 again on my laptop. Before that I had windows 10 installed with straight update from windows 8 and FF8 worked fine on that.

However, now that i'm trying to install FF8 again on fresh windows I keep encountering problems with it.

Here's APP.LOG from Aali's drivers:
Code: [Select]
[00000000] INFO: FF7/FF8 OpenGL driver version 0.8.1b
[00000000] INFO: Auto-detected version: FF8 1.2 US English
[00000000] INFO: Intel Intel(R) HD Graphics 4400 4.3.0 - Build
[00000000] INFO: OpenGL 2.0 support detected
[00000000] INFO: Using PBO
[00000000] INFO: Found swap_control extension
[00000000] INFO: Max texture size: 16384x16384
[00000000] INFO: Original resolution 640x480, window size 1024x768, output resolution 1024x768, internal resolution 1280x960
[00000000] INFO: Shader limits: varying 64, vert uniform 4096, frag uniform 4096
[00000001]   initializing direct sound
[00000001]   EAXDirectSoundCreate

Also, worth to note that whenever trying to launch EAXUnified.exe, it extracts itself and installshield and pops window with error saying: failed to load custom driver.

Using, non-geforce update 1.20 with HD 4400 integrated gpu since Geforce 840m didn't work with FF8 before installing windows 10 again.

P.S. This stupid problem is limiting the development of wmx2obj/obj2wmx program since I can't test it right now.... Was planning on releasing a version before Christmas, but it's hard to test the correct behavior without FF8.

Edit: Another app.log with different error

Code: [Select]
[00000000] INFO: FF7/FF8 OpenGL driver version 0.8.1b
[00000000] INFO: Auto-detected version: FF8 1.2 US English
[00000000] INFO: Intel Intel(R) HD Graphics 4400 4.3.0 - Build
[00000000] INFO: OpenGL 2.0 support detected
[00000000] INFO: Using PBO
[00000000] INFO: Found swap_control extension
[00000000] INFO: Max texture size: 16384x16384
[00000000] INFO: Original resolution 640x480, window size 1920x1080, output resolution 1440x1080, internal resolution 1920x1440
[00000000] INFO: Shader limits: varying 64, vert uniform 4096, frag uniform 4096
[00000000] ERROR: failed to stat file c:\ff8\final fantasy viii/shaders/main.vert
[00000000] ERROR: failed to load shaders

This program is intended to export world map vertex, texture and normal data. Creating 3D Balamb Garden from world map visualization of Balamb Garden isn't enough for your kind of project:

This is the Balamb Garden that this program exports/will export.

If you are referencing to the model that is used as a vehicle in the game, then this program is out of bounds on that.

However MakiPL did a script/program that exports those models from the files, but I think he hasn't released it yet (probably part of his bigger program ;) ).

General Discussion / Re: CLOUD IN SMASH BROTHERS
« on: 2015-11-13 15:59:44 »
In no way have I written in off either. I will most likely like it to some extent. That being said, I very confident it will not blow me away like it did back when I first played it. That's pretty much impossible. If SE manages to do that I'll eat my own boxers (worn for at least 3 days).

Gonna save this just in case ;)

As a smash fan to some extent, it's pretty cool that they managed to get FF character to smash U. As for balancing mechanics, I don't really like the limit break system, but it's cool though. Breaks the balancing IMO if characters have more "abilities" than others, for example Little Mac.

I'm not completely familiar with tonberry's hashing system, but here's what I know, hope it helps.

The animation data for ocean is located on the same texture page as road textures, this is probably also the reason why you got animation to your roads IF you tried to "scale" it over animation data (again, not very familiar how tonberry works.

Ocean's tim texture is located in wmset.obj and in wmsetXX.obj files. The reason why it isn't in texl.obj is probably because the animation data may be done for 128x128 sized textures and all the textures in texl.obj are in 256x256 format. This also means that ocean textures are in 128x128 tim, but luckily I can do some magic with the exporter/importer and "upscale" textures through texture coordinates and later through geometry editing.

What values did you change?

Pages: [1] 2 3 4 5 6