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.


Topics - Alhexx

Pages: [1] 2 3
1
Completely Unrelated / Could you please...
« on: 2006-09-19 14:16:41 »
... stop double-posting and ressurrecting dead topics?

I have spend hours and hours for merging double-posts the last 3 days...

Have you ever seen this nice -button before?
By clicking on that one you can edit your previous post. (of course not by clicking on that button in this post, but above every single one of your posts, there is one, too...)

So, please do me a favor, and use that button in the future - that "Moderators-Merge-Double-Posts-Game" is getting boring...

Thank you.

 - Alhexx

2
Completely Unrelated / d4 1337 h4x0r pwn5 u
« on: 2006-08-23 20:30:15 »
I have found this german article about a really professional 1337-h4x0r some time ago.
Yesterday, I have visited that page again, and I now have found an english Translation:

http://www.totalillusions.net/forum/index.php?showtopic=328

I'm sure you'll be amused to see how stupid a man can be :-o
I've been lying on the floor laughing...

http://www.userfriendly.org/cartoons/archives/01may/uf003073.gif

 - Alhexx

3
Scripting and Reverse Engineering / Weird Texturing
« on: 2006-07-02 22:42:50 »
Okay, although this topic is not FF related, I know that there are a hand full of good programmers and game hackers around here.
And once again, I need your help.  :roll:

So, I have been spending dozens of hours sitting in front of my hex editor, hacking the model files of Tomb Raider Legendâ„¢.
I have been able to decode the geometry, i.e. vertices, triangles, normals and groups (if they can be called so)

Here's a screenshot of the quite strange grouping:



Now, I'm still having heavy problems with the texture coordinates...


Usually, as far as I know, the U and V coordinates are between 0.0 and 1.0, where (0.0 , 0.0) is the upper (or lower?) left corner and (1.0 , 1.0) is the lower (or upper?) right corner.

But the TRL model format is different...
The UV coords are in a quite bigger range, for the following model, they lie between (-2.0 , -1.0) and (3.0 , 3.0).

If you add ± 1.0 that often, so that the resulting tex coord lies between 0.0 and 1.0 (in other words: if you take the tex coord modulo 1.0), and then apply two different textures onto the mesh, you get the following results:

 

As you can see, both textures seem to be useful, however, only on some parts of the mesh...


However, the UV seem to have a bit of structure:
There appear to be "groups" of vertices, which lie in one "block" (e.g. 30 vertices whose uv coords lie between (-1.0 , 1.0) and (0.0 , 2.0))

I first thought, that the "final" texture might be some sort of matrix of the original textures. But this does not work either...

I have translated and scaled the orignial UV coords so that they lie between 0.0 and 1.0, and then I tried to create a matrix of textures, however, there still is a problem.
This does work for most parts of the model, however, there are still some textures overlapping.


For example, in the first screenshot in this post, you see that lara's fingers in her left hand are light-blue. So are her eyes and a part of her hair, which you unfortunately cannot see on that screenshot.
The problem is that even if I organize the textures in that matrix style, the texture coords of her fingers and her hair do overlap, or in other words, they are in the same UV-coord-block.

So I have the choice between having Lara with "Skin-Hair" and Lara with "Hairy-Hands"  :-P


I have been browsing through dozens of 3d sites and tutorials, manuals etc, however, I couldn't find any explanation for that.

So, does anyone in here have an idea?
If you need more info, screenshots or whatever, please let me know.


Thanks!

 - Alhexx

 - Edit -
BTW: Please do not tell me that the normals are weird, too. I do read out the normals correctly, just Milkshape3D does not seem to like them...

4
Completely Unrelated / Where's a bot when you need one?
« on: 2006-06-13 20:33:01 »
The ones of you who can read german text have an easy job.
The only thing you have to do is to check out the following page:
http://www.svenswmwette.com/

The rest of the world has to read my english summary... :-D

A german guy named Sven has a bet with a girlfriend:
If his site (the one above) gets 5.000.000 visitors until the final match of the FIFA World cup '06 (this is on 2006-07-09), then that girlfriend will run naked across the playing field during (or before?) the final match.
Btw, here's a photo of that girl.

Until now, he has ~1.6 Million visitors. (Btw, I count ~200 visitors per minute...)


So, couldn't someone be so kind and write a bot which access the site via a few thousand proxy-servers?  :-D

However, I think that he will win the bet anyway, even without bots...

To all Bud Bundys: In my opinion, even if he wins the bet, noone of us will see a naked girl running around there. I think the security is tight enough to avoid actions like that...

 - Alhexx

 - edit -
Hm...
Taking a closer look at that counter, I suppose that there are already more than 1 bots working on this project...

5
You know that Tifa's Limit Breaks are some sort of "tombola".

My question is:
Does anybody know if it is possible to patch Tifa's limit break so every single limit break always succeeds? (Maybe in a game script or so?)

Note:
I'm not going to use this for cheating, I'm going to start a new project soon, and I will need to get Tifa succeed every single limit break for testing.

 - Alhexx


Edit: This topic is no longer relevant. Please see details of my LiBrE tool for editing limit breaks in both PC and PSX builds. - Bosola

6
Troubleshooting / Ifalna v1.40 Bug
« on: 2006-02-17 14:17:49 »
I have found an ugly bug in ficedula's Ifalna tool.
After loading the Battle.lgp (german) into Ifalna, my screen looked like this.

Does anyone else encountered this problem?

As for my OS:
Windows XP Pro SP 2

 - Alhexx

7
Scripting and Reverse Engineering / Image Color Depths
« on: 2005-11-13 14:33:25 »
I've continued working on BrutePix, my raw image viewer. Basically, it works, however, I need a bit help with the different image color depths...

But first, I'll post which bit depths are currently supported:

Legend:
W -> White (i.e. Grayscale)
R -> Red
G -> Green
B -> Blue
A -> Alpha


High-Color Pixel Depths:
  • 4 Bit [RGBA-1111]
  • 8 Bit [RGBA-2222]
  • 12 Bit [RGBA-3333]
  • 12 Bit [RGB-444]
  • 16 Bit [RGBA-4444]
  • 16 Bit [RGBA-5551]
  • 16 Bit [RGB-565]
  • 24 Bit [RGB-888]
  • 32 Bit [RGBA-8888][/list:u]

    GrayScale Pixel Depths:
    • 1 Bit [W-1]
    • 4 Bit [W-4]
    • 8 Bit [W-8][/list:u]

      Palette Pixel Depths:
      • 1 Bit [2 Colors]
      • 2 Bit [4 Colors]
      • 4 Bit [16 Colors]
      • 8 Bit [256 Colors]
      • 12 Bit [4096 Colors]
      • 16 Bit [65K Colors][/list:u]

        Miscelaneous:
        • DXT1 Compression [4x4 Pixels - 64 Bit]
        • DXT2/3 Compression [4x4 Pixels - 128 Bit]
        • DXT4/5 Compression [4x4 Pixels - 128 Bit][/list:u]

          My first question is:
          Does anyone know any other common image formats? I read a something of 12-bit grayscale, however, I couldn't find any images.

          The second question:
          I need some images for testing. Does anyone have any images in one of these formats:
          • 4 Bit High-Color [RGBA-1111]
          • 8 Bit High-Color [RGBA-2222]
          • 12 Bit High-Color [RGBA-3333]
          • 12 Bit High-Color [RGB-444]
          • 12 Bit GrayScale [W-12]
          • 12 Bit Paletted [4096 Colors]
          • 16 Bit Paletted [65K Colors][/list:u]

             - Alhexx

8
Scripting and Reverse Engineering / Animation using OpenGL
« on: 2005-10-18 21:50:26 »
Okay, I'm currently writing a new model viewer. It already supports most basic functions for viewing a model. However, I have never programmed animation before :erm:

As far as I know, animation is rendered using a timer, which forces the engine to rerender the image a few times per second (let's say 24).

Moving objects is done using glRotate, glTranslate and glScale functions. However, I'm using these functions to move the camera.


Now let's say I wanted to make a sphere rolling along th x-axis. Using the 3 commands above would not really move the object, but it would move my camera...
And this gets more complicated when I have more than one object which is moving indepentently from the other objects (like a whole skeleton).

How do I do this?

 - Alhexx

9
Scripting and Reverse Engineering / Fractal interpolation
« on: 2005-10-09 19:55:15 »
I just took a look at the last few post in Sain't FF7 High-Res Patch-Topic, and Otokoshi said something about Fractal Interpolation...
I googled for that and the best thing what I found on the first page was this:
http://www.dpreview.com/learn/?/Glossary/Digital_Imaging/Interpolation_01.htm

I think the result looks quite interesting...

However, does anyone have any closer information on fractal interpolation or even a source code or something like this...?

 - Alhexx

 - edit -
I just found this PDF, and I have to say that FI seems to be a *little bit* more complicated than bilinear and bicubic interpolation...  :erm:

10
Okay, the problem is quite simple this time, but I can imagine that the solution to the problem is a bit complex...

I want to implement an Abort button in my Kaddy application (when extracting files or loading an archive for example).

But how?
I know how it is made in VB, but I have no idea how to realize it in C...

Any ideas?

 - Alhexx

11
Archive / WinXP "Random" FF7 Battle Crash Test
« on: 2005-07-24 23:49:26 »
I'm currently trying to kill a bug in the FF7 engine which causes the game to crash when entering a battle after ALT-TABing to windows.

I would like to know if there are other people who have this problem.
I'm running FF7 v1.02 on WinXP Pro SP2 with only the Chocobo Patch applied.

It would be nice if someone of you could make a test with your game.
[list=1]
  • So, start the game, load a save and run around on the world map.
  • Then hit ALT-TAB to switch back to windows.
  • Return back to the game and run around on the map until you get into a battle
  • If the game didn't crash, run around on the map for let's say 3 more battles. (without switching back to windows)
  • Tell me if the game crashed or not
  • [/list:o]
    It might be helpful to tell me which language and version you use and what patches you have already applied.

    I need to know if I'm the only one with this problem or not...
    Thanx

    The rest of this post is more technical, so if you're not interested in that, you can skip the rest.

    The reason FF7 crashes is because it tries to read from an illegal memory address. I tried to NOP out that command - it fixes the bug, however, it has
a neat side effect.

My explanation:
The "swirl" effect, that appears just before the battle causes the crash.
FF7 seems to create a screenshot, saves this screenshot and then, swirles that screenshot. Either the buffer allocation for the screenshot fails or it simply stores an illegal pointer.
If you NOP out the command that tries to read that buffer, the swirl effect succeeds, however, of course it does not swirl the screenshot :P
It's quite late now, and I wanna go to bed, so I don't have the time to analyze the calls before that crash command right now...

 - Alhexx

12
I need your help once again.
As you might have noticed in the scrollbar topic, I'm working on an archive (de)compressor called Kaddy. The tool works pretty well, but I have one problem that makes my head ache (or maybe it's the maths exam I wrote today...  :erm: )

Well, okay. When I load an archive, let's say battle.lgp, Kaddy opens the file and creates a file list. This goes very fast.
However, I use a CListView class (the "same" as CListCtrl) to display this file list. Here's a screenshot
As you might know, battle.lgp has over 11K files...

Now the problem is:
It takes almost 2 mintues (!) until Kaddy has added all items to the CListCtrl view class!

Here's the code I currently use:
Code: [Select]
void CKaddyView::RenderNode()
{
CListCtrl& lst = GetListCtrl();
// Clear current list
lst.DeleteAllItems();

if(m_pcurDir == NULL)
return;

unsigned long ulIndex = 0;

// Is this not the root dir?
if(m_pcurDir->pParent != NULL)
{
lst.InsertItem(LVS_INS, ulIndex, "..", 0, 0, 0, ulIndex);
lst.SetItemText(ulIndex++, 3, "p");
}

CString strId;
// Do we have sub-dirs?
for(unsigned long i = 0; i < m_pcurDir->ulNumSubDirs; i++)
{
strId.Format("d%i", i);
lst.InsertItem(LVS_INS, ulIndex, &m_pcurDir->pNames[m_pcurDir->pSubDirs[i].ulNameOffset], 0, 0, 0, ulIndex);
lst.SetItemText(ulIndex++, 3, strId);
}

CString Buf;
// Do we have files?
for(unsigned long i = 0; i < m_pcurDir->ulNumFiles; i++)
{
strId.Format("f%i", i);
lst.InsertItem(LVS_INS, ulIndex, &m_pcurDir->pNames[m_pcurDir->pFiles[i].ulNameOffset], 0, 0, 2, ulIndex);
Buf.Format("%i", m_pcurDir->pFiles[i].ulFileSize);
lst.SetItemText(ulIndex, 1, Buf);
Buf.Format("%i", m_pcurDir->pFiles[i].ulCompressedSize);
lst.SetItemText(ulIndex, 2, Buf);
lst.SetItemText(ulIndex++, 3, strId);
}

// That's it
UpdateWindow();
}



The part where most of the time is spend is the last for-loop.
Now my question is:
Is there any possibility to modify that code to increase the speed?
I'm not sure, but I suppose that the CString.Format method need that much time...

I cannot allow Kaddy to need 2 minutes for rendering a 10K file list...  :-?

Any ideas?


 - Alhexx

13
I'm currently writing a raw hex viewer control for my archive decompressor project called CHexViewCtrl. Here's a small screenshot.

The CHexViewCtrl class is derived directly from CWnd.
I have added a CScrollBar to give the user the possibility to scroll through the file.

However, the default MFC CScrollBar class has a maximum Scroll range of 32,767. This usually does not matter, since the class is able to handle bigger ranges now.

But there's a problem:
When receiving the SB_THUMBTRACK or SB_THUMBPOSITION message, the OnVScroll method of my derived class passes the current position in a variable called nPos (UINT). However, these two messages only give valid positions when the scrolling position is less than 32K.

Does anyone have an idea how to get around this problem and make the scrollbar want to cooperate with me?

 - Alhexx

EDIT: CHexViewCtrl is the name of the control, the name of the archive decompressor is Kaddy ;)

14
Scripting and Reverse Engineering / FF7 .p Format Summary
« on: 2005-06-29 19:40:15 »
I know there are already several  topics about this around here in tech-related, however, I don't want to resurrect one of them. And I think someone might have made some progress here.

As most of you surely know, the FF7 .p model format has been decoded quite far, but not to 100%.

Qhimm has started hacking the .p format, ficedula did another step, and after some time, I wrote the first FF7 .p Editor, Ultima. This was 4 years ago.
There has been much progress made, especially in texturing.
I don't have the latest copy of gears here, but I think the .p description was taken from my last description, and mirex's latest description.

In the last time, some FF7 viewers and even editors have appeared. Yes, I talk about Kimera.
However, AFAIK, I'm the only one who was able to generate a .p file from scratch that FF7 accepted (unfortunately, this model was just a coloured triangle without textures)

Okay, the aim of this topic is to collect as much info as possible about the .p Format to be able to build "real" .p models from scratch.
I already have an idea how to do this, however, there is still one part of the file which I know almost nothing about - the hundrets thingy...

This post is going to be a big quote from my .p File Description, however, I have tried to correct some minor bugs here.

Notation:
All offsets are hex-decimal, all sizes are decimal.

First, here comes the table of contents of this topic:

Chapter 0: Table of Contents
Code: [Select]
.p-File
    |
    +- Header
    |
    +- Vertices[]
    |
   (+- Normals[]) ( Field-Files only)
    |
   (+- Texture Coords[]) (Textured models only)
    |
    +- Vertice Colors[]
    |
    +- Polygon Colors[]
    |
    +- Edges[]
    |
    +- Polygons[]
    |
    +- Hundrets[]
    |
    +- Groups[]
    |
    +- BoundingBox
    |
    +- Normal Index Table[]



Chapter I.i: The File Header
The structure:
Code: [Select]
typedef struct
{
long off00;
long off04;
long VertexColor;
long NumVerts;
long NumNormals;
long off14;
long NumTexCs;
long NumNormInds;
long NumEdges;
long NumPolys;
long off28;
long off2c;
long mirex_h;
long NumGroups;
long mirex_g;
long off3c;
} t_p_header; // 64 Bytes

Interpretation:
VertexColor   specifies if Vertex-Colors are used
      (0=no,1=yes; default: 1)
NumVerts   Count of Vertices
NumNormals   Count of Normals (always 0 in Battle files)
NumTexCs   Count of Texture Coords
NumNormInds   Count of Normal Indices
NumEdges   Count of Lines for WireFrame-Model
NumPolys   Count of Polygons
mirex_h      Count of Hundrets
NumGroups   Count of Groups
mirex_g      ? (sometimes 0 or 1)(but usually 1)


Chapter I.ii: The Extended Header
Misterious name for something maybe banally simple.
This is just an array of 16 32-Bit Integers. We have never been able to decode this 64 byted, however, I suppose this is some kind of checksum for the single parts of the .p file.
I don't remember what happens when you change all those values to 0, but IIRC, FF7 *should* accept those files without crashing... but I'm not sure.


Chapter II: The Vertices
The vertex structure:
Code: [Select]
typedef struct
{
float x;
float y;
float z;
} t_p_vertex; // 12 bytes


Offset: 0x80
Number of Entries: NumVerts;

I don't think that I have to add anything here. It's trivial.


Chapter III. The Normals (Field Files only)
The normal structure is exactly the same as the vertex structure.

Offset: 0x80 + (NumVerts * 12)
Number Of Entries: NumNormals;

I don't remember what they're normal to, but I think they're normal to the vertices...


Chapter IV: The Texture Coordinates
Structure:
Code: [Select]
typedef struct
{
float x;
float y;
} t_p_texturecoord; // 8 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12
Number Of Entries: NumVerts

x and y are the offsets on the texture relative to the texture size.
The values can between 0.0 and 1.0. So if a TexCoord has x = 0 and x = 0, it is in the upper left corner, if it has x = 1 and y = 1 it is in the
lower right corner (or at least I hope so...)

Simetimes, the values may be even higher than 1.0. In that case, i.e. 1.3
is the same as 0.3. So if a value exceeds 1.0, simply subtract 1.0 from
it.


Chapter V: Vertice Colors
Structure:
Code: [Select]
typedef struct
{
unsigned char blue;
unsigned char green;
unsigned char red;
unsigned char reserved;
} t_p_color; // 4 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8)
Number Of Entries: NumVerts

Every Vertex has its own color stored here.


Chapter VI: Polygon Colors
The structure is the same as the vertex color one.

Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + NumVerts * 4
Number Of Entries: NumPolys

Every Polygon has its color stored here.


Chapter VII: Edges
Structure:
Code: [Select]
typedef struct
{
unsigned short Vertex[2];
} t_p_edge; // 4 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys) * 4
Number Of Entries: NumEdges

The edges build up the wireframe of the model. Every edge connects 2 vertices of the model.


Chapter VIII: Polygons
Structure:
Code: [Select]
typedef struct
{
unsigned short Tag1;
unsigned short Vertex[3];
unsigned short Normal[3];
unsigned short Edge[3];
unsigned long Tag2;
} t_p_polygon; // 24 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys + NumEdges) * 4
Number Of Entries: NumPolys

Interpretation:
Tag      Unknown, but always 0
Vertex[*]   Index of Vertex * for the polygon
Normal[*]   Index of Normal* for the polygon (always 0 in Battle Files)
Edge[*]      Index of Edge * for WireFrame-Model
Tag2      Unknown, but always 0x0CFCEA00

Note: The Normal Indices are absolute, not relative to the Group!


Chapter IX: Hundrets
A very ugly Structure:
Code: [Select]
typedef struct
{ // 1st 2nd 3rd
long off00; // 0x00000001
long off04; // 0x00000001
char off08; // 0x00
char off09; // 0x82 0x86 0x86
short off0a; // 0x0003
char off0c; // 0x02
char off0d; // 0x00 0x04 0x04
short off0e; // 0x0002
long off10; // 0x00000000 0x00000000 0x00000001
long off14; // 0x00000000
long off18; // 0x00000000 0x00000001 0x00000001
long off1c; // 0x00000000 0x00000025 0x00000025
char off20; // 0x00 x00 x40 x80 x00 x40 x80
char off21; // 0x00 0x78 0x78
short off22; // 0x0000
long off24; // 0x00000002 0x00000001 0x00000001
long off28; // 0xFFFFFFFF
long off2c; // 0x00000000
long off30; // 0x00000000
long off34; // 0x00000002 0x00000005 0x00000005
long off38; // 0x00000001 0x00000006 0x00000006
long off3c; // 0x00000002
long off40; // 0x00000000
long off44; // 0x00000004 0x00000000 0x00000000
long off48; // 0x00000000
long off4c; // 0x00000000
long off50; // 0x00000000
long off54; // 0x00000000
long off58; // 0x00000000
long off5c; // 0x000000FF 0x00000080 0x00000080
long off60; // 0x00000000
} t_p_hundrets; // 100 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys + NumEdges) * 4 + (NumPolys * 24)
Number Of Entries: Mirex-H

I don't really know what is stored here, but I suppose it has to do with
the textures... well, dunno.
In the C/C++ Struct, there is the info how this struct is usually filled.
So if you want to create a new Hundrets Entry, you could use these
values.

I could really need some help of this part, if someone has any ideas...


Chapter X: Groups
Structure:
Code: [Select]
typedef struct
{
long polyType;
long offPoly;
long numPoly;
long offVert;
long numVert;
long offEdge;
long numEdge;
long off18; // 0
long off1c; // 0
long off20; // 0
long off24; // 0
long offTex;
long texFlag;
long texID;
} t_p_group; // 56 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys + NumEdges) * 4 + (NumPolys * 24) +

Mirex-H * 100
Number Of Entries: NumGroups

Interpretation:
polyType:   Specifies the Polygon Type for this Group:
      1 - nontextured Polygons
      2 - textured Polygons with normals
      3 - textured Polygons without normals
offPoly:   The First Polygon used in this Group
numPoly:   Number of Polygons used in this Group
offVert:   see above
numVert:   see above
offEdge:   The First Edge used in this Group
numEdge:   see below
offTex:      The first Texture Coord used in this Group
texFlag:   Texture Flag:
      0 - No texture on this Group
      1 - Textured
texID:      Index of Texture (see below)

Now it's gettin' more complicated... The numEdge value is usually 0.
So if you want to know how many Edges are used in Chunk i, then you'll
have to see the offEdge in Chunk i+1 and get the difference ... blabla ...
ahhh, take a look at this:
t_p_group.numEdge = t_p_group[i+1].offEdge - t_p_group.offEdge

BUT: If you want to get the numEdge for the LAST Group, then, of course,
you'll have to do this:

t_p_group.numEdge = t_header.NumEdges - t_p_group.offEdge

I hope you know what I mean.
BTW: If you're going to generate you own Groups, you CAN save the numEdge
values to the struct; FF7 won't crash.

As for the texID entry:
In Field files, this is the Index used by the RSD Files.
In Battle files it *should* be like this:
(Example: Yuffie: RX**)
1 - rxac
2 - rxad
3 - rxae
...


Chapter XI: Bounding Box
Structure:
Code: [Select]
typedef struct
{
float max_x;
float max_y;
float max_z;
float min_x;
float min_y;
float min_z;
} t_p_boundingbox; // 24 Bytes


Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys + NumEdges) * 4 + (NumPolys * 24) +

(Mirex-H * 100) + (NumGroups * 56) + 4
Number of Entries: 1


Chapter XII: Normal Index Table
The entries in the Normal index table are just 32-bit unsigned integers.

Offset: 0x80 + (NumVerts + NumNormals) * 12 + (NumTexCs * 8) + (NumVerts + NumPolys + NumEdges) * 4 + (NumPolys * 24) +  

(Mirex-H * 100) + (NumGroups * 56) + 4 + 24
Number Of Entries: NumNormInds

Interpretation:
Heh, it took me a long time top hack these values, too!
But it's quite simple! This is just a normal index table!
It's just an array of 32Bit integers.
That means if you want to know which normal is used by vertex *, you
will have to take a look into that table.

So let's say:
NormalIndex[0] = 4
NormalIndex[1] = 7
NormalIndex[2] = 2
...

So the Vertex 0 uses Normal 4,
...    Vertex 1 uses Normal 7,
...    Vertex 2 uses Normal 2,
and so on...






That's it. If you have any corrections or additions to make, please let me know. I'll update this post then ASAP.


 - Alhexx

15
General Discussion / Don Corneo's Villa
« on: 2005-06-22 20:05:44 »
Since I haven't played FF7 for years now, I decided to finally play it again.
However, I'm not at sector 7 at the beginning of the game.
I know I have go get (I think) 3 items to make Don Corneo chose Cloud when they're all in Don Corneo's room...

I already have the "sexy parfume" from the woman in the toilet...
However, what else do I need?

 - Alhexx

16
Archive / Changing Languages of FF7 / FF8
« on: 2005-02-19 13:58:09 »
I've just been emailed today by a russian who has a problem.
In Russia, you can only buy FF7 and FF8 in english and russian. However, the russian version is crap and he does not understand english very well. But he understands german.

So the question is:
Is it possible to buy an original FF7, let's say english, and then simply overwriting/exchanging the language files?

(I'm sorry that you see me posting such questions - but I've been workin on model formats and not on text files...)

 - Alhexx

17
Okay, another problem for my BrutePix tool.

BrutePix is going to use DLL Plugins, and the plugins should be able to use exported functions by BrutePix.
Exporting BrutePix functions is not a problem at all.
A .lib file is created and can be imported to a Plugin.

However, the lib file is changed everytime when you recompile the Project after making a change.
So, let's say I want to update my functions from Version 1.0 to 1.1, so the lib is recompiled. The plugins won't work anymore, since they can't find the right addresses, if they have been compiled with the old lib, right?

Is there any possibility to get around this, so the old Plugins will be compatible to newer versions of the library?

 - Alhexx

18
Okay, I've got a problem with my plugin-interface for BrutePix.
BrutePix can handle DLL Plugins now, however I've got a problem with the deallocation of the space for a class.

This is the only function the DLL exports:
Code: [Select]
CBrutePlugin* CreatePlugin()
{
    return new CMyPlugin;
}

CMyPlugin is derived from CBrutePlugin.


Then, BrutePix loads the DLL with functions like LoadLibrary and GetProcAddr... no problems with that.

However, how do I delete that created Object?
When I try to delete it with the "delete" Operator in BrutePix, I get an error that the pointer is not within the local heap...

Any suggestions?

 - Alhexx

19
Troubleshooting / BrutePix - RAW Image Viewer
« on: 2004-07-11 15:14:25 »
As you can read the Title, there's a new tool out.
I've decided to write a RAW Image Viewer, since I always need one when hacking image formats. I always have used the "N64 Disassebmler Ver1.1 by JOVIS", however, it was not powerful enough.

So here is my own creation:
http://www.alhexx.com

You can download it from my Tools-Section.
The reason why I posted it in this forum is because it is still in BETA stadium, means there surely are a lot of bugs in it. To avoid people creating several bug topics, I created this one for feedback on BrutePix.
Get it and try around a bit.
Please post any suggestions / critics here, too.

 - Alhexx

20
I know there have been topics related to the before, however, I want to hear your opinion.

I don't want to knwo if it is possible to rewrite the engine; of course it is.
I want to know if you think that our team would be able to do this.

Would we be able to write a new engine that could use all FF7 files and play the game?

 - Alhexx

21
Scripting and Reverse Engineering / Triple Triad AI
« on: 2004-06-05 12:27:31 »
As some of you may have already read in another topic, I've currently started my own version of Triple Triad.
I'm currently starting programming the engine, however, I've got a problem...

I want to add a "Practice" feature as Qhimm did in his TTG.
However, I've got absolutely NO IDEA how program an AI.
Since we have some software/game developers here, I hope you'll be able to help me here...

 - Alhexx

22
General Discussion / Questria (TTG Clone)
« on: 2004-05-11 15:43:07 »
Das anyone downloaded Questria (maybe ver. 8.2) ???
The main site is down and all those [ironic]pretty fine and helpful[/ironic] download pages are just simple links to the original site, which is down. Has anyone seen a mirror for the files, or could anyone upload it?

Thank you!

 - Alhexx

 - edit -
Okay, the site seems to be up again. Maybe the DNS server was down or anything...

23
Yeah, I got it.
That unknown Pool holding an array of 32bit integers is simply a Normal Index Table, telling you which Vertice uses which Normal.

Here's a small example given by "acab.p" ( yuffie's head):

Code: [Select]
==-> Polygon Pool <-==
----------------------

Coord    Vert1  Vert2  Vert3  Norm1  Norm2  Norm3  Edge1  Edge2  Edge3
-----    -----  -----  -----  -----  -----  -----  -----  -----  -----
    0        0      1      2      4      1      6      0      1      2
    1        1      3      2      1      0      6      3      4      1
    2        3      4      2      0      3      6      5      6      4
(...)

Code: [Select]
==-> Normal Index Table <-==
----------------------------
Vertex   Normal
------   ------
   0        4
   1        1
   2        6
   3        0
   4        3
   5        7
   6        2
   7        5
   8       21
   9       13
(...)


Now take a look at the Polygon pool and its Vertex and Normal Indices...
You see, Vertex 0 uses Normal 4, Vertex 1 uses Normal 1 and Vertex 2 uses Normal 6.
And now take a look at the Normal Index Table...
Got it?

BTW: There's a new FF7 .p File Description on my homepage!

 - Alhexx

 - edit -
There's just one thing I don't understand:
The battle models don't have any normal, however, they do have a valid normal index table. I'll try out what happens if I simply delete that table...

 - edit 2 -
And something else:
I've uploaded a screenshot of Ultima 0.50

24
So, here's my new hardcore-problem:
I need to write a proggy that generates an 8-Bit Paletted Image from a 24Bit RGB Image.

Until now I used to scan the whole RGB Pixel Buffer and generare a Color List. Then I sorted the colors by the number they were used in the image.
However, this brings certain problems:
1. It takes a LOT of time of generate the Color List. (e.g. in a 600x400 Image there are 240.000 possible colors)
2. It takes even more time to sort the Color List via BubbleSort...
3. Let's say you've got an image of a sky with a rainbow on it. The sky will take 75% of the picture and only 25% are used by the rainbow. So it is clear that the palette generate will generate a palette with 240 blue colors (for the sky) and about 16 for the rainbow itself...

So this is no solution. I read something about a method called "Quantization" and I already downloaded a (scientific) document about it, however, I don't really understand it... :(

So is there anyone in here who knows how this algorithm works?
(If not,  I will have to ask my maths teacher on monday...)

Thanx

 - Alhexx

 - edit -
Oh, and things like dithering are not important: I have already included some dithering algorithms like Floyd-Steinberg and so on ... I just need to calculate an optimal palette...

25
General Discussion / Zangan + Ifalna + Leviathan + ...
« on: 2002-12-31 17:36:01 »
Okay, first take a look at this:

http://www.alhexx.com/mixture.jpg

It was made using the following tools in a 25 minute-session:
Ifalna, LGPTools, Leviathan, Zangan, Netscape and Photoshop ... hehe ...

 - Alhexx

Pages: [1] 2 3