FFVII Research & Resources Thread

Ok this appears odd to me...
I'm somewhat familiar with unused background animations in FFVII, but this one is new to me. The three books in the Kalm tower.

Normally, you can only spot two of them.
GkfaU.png

The red and the yellow one.

But an unused, green book exists.
KHdv5.png


It is also possible, in a background viewer, to make all the books go away.
vSD1l.png


Just...WHY? I want to say that this is "Sidequest-bait" but I have nothing to support the notion.
 

JBedford

Pro Adventurer
AKA
JBed
I just looked in the field location's file and doesn't it say that they should all appear on initialisation?
 
I just looked in the field location's file and doesn't it say that they should all appear on initialisation?

You are correct! It took me about ten minutes of modding before I finally figured it out, but it's actually a glitch. (As usual, I do all this research via Makou Reactor)

It is true that the initial condition is that all three books are to be displayed.

What the game does is that it first runs the following script for the book animation:
S0 - Init (this part decides that all books should be seen) then
S0 - Main

However, the S0 - Main section completely lacks any real data, meaning that the game then jumps to the next script:
Script 1 -> Hide the state #0 of the background parameter#1 (the green book).

So in order to solve this glitch, all you need to do is go to S0 - Main and add a "Return" command, so the game does not jump to the script that conceals the green book.

The field does not load quickly enough for you to spot that the green book is there but then instantly disappears.
 

Lex

Administrator
What was the point of removing the green book in the first place? Or better yet, why are any of the 3 of them even there? The mystery intensifies...
 
What was the point of removing the green book in the first place?
See the post right above you. :P

There was no point to removing the green book as it was never intended to be unused. It's just a glitch because they forgot to add a "Return/Stop" command to a part of the code.

Or better yet, why are any of the 3 of them even there? The mystery intensifies...
That one I can't answer, obviously.
 
The FFVII International Bonus Disc is a mess, primarily due to field backgrounds and FMVs being of lower quality than their main-game counterparts.

Not only this, but the material given to whoever made the bonus disc, was from Square's old FFVII material archives. Meaning that it shows us older versions of fields.

9UmUY.png
(Made by combining two shots from the Bonus Disc)
VERSUS
xUDZi.png

This is one of many "comparison" articles TLS could make. If somebody figured out how to rip the fields from the Bonus Disc then we could easier compare these with the final game (also hopefully get rid of the book, item & materia sprites) and provide an even more detailed account of how FFVII changed during development.

Note: The water animation (final game) at the bottom right is also possible to remove in a background viewer, so it looks like the same water-less area seen in the Bonus Disc.
 

koolaidman

Lv. 25 Adventurer
Speaking of the Bonus CD, the NPK_MON.NPK file contains some source code. Not sure what it's for, but it's not supposed to be here. Whoopsie.

Some includes:
Code:
#include <libetc.h>
#include <libgte.h>
#include <libgpu.h>
#include <libsnd.h>
#include <libgs.h>
#include <KERNEL.H>
#include <libsn.h>
#include <libcd.h>

More includes. The ff7list header file is commented out, for some reason, and the comment for what's below the include is cut off (I don't even know if what I have is even supposed to be words - could be just garble):
Code:
************************************************************************/
#include "ff.h"
//#include "ff7list.h"
#include "winsys.h"
#include "cursol.h"
#include "datafanm.inc"
#include "dataflpk.inc"
#include "lpk_sys.inc"
#include "ffaku.h"
#include "clickm.h"
#include "npk_item.inc"

/*****************************************************************************/
/*  &#22411;&#23450;&#32681;

Some defines:

Code:
Z_CLUT, (long *)LPKBuf,   (long *)ComnBuf
#define DEFSET LZ_TIM | LZ_CLUT, (long *)MODELBuf, (long *)ComnBuf
#define DEFSYS LZ_TIM | LZ_CLUT, (long *)SYSBuf,   (long *)ComnBuf
#define SUBBERMAX 3
#define SUBBERMAX 3
#define ZENGAMEN_X 168                  /*  &#21069;&#30011;&#38754;&#65336;&#24231;&#27161;                     */
#define ZIGAMEN_X  282                  /*  &#27425;&#30011;&#38754;&#65336;&#24231;&#27161;                     */
#define ZIGAMEN_Y   1

Defining some static integers for the gamepad maybe?:
Code:
_BOXFTAG EXsubbox[SUBBERMAX];           /*  &#12469;&#12502;&#12513;&#12491;&#12517;&#12540;&#29992;&#12496;&#12540;               */

static int wait;                        /*  &#12454;&#12455;&#12452;&#12488;                         */
static int oldx;                        /*  &#12510;&#12454;&#12473;&#65336;&#24231;&#27161;&#21069;&#22238;&#20516;&#20445;&#23384;           */
static int oldy;                        /*  &#12510;&#12454;&#12473;&#65337;&#24231;&#27161;&#21069;&#22238;&#20516;&#20445;&#23384;           */
static int oldpad;                      /*  &#21069;&#22238;&#12398;&#12497;&#12483;&#12489;&#20516;&#20445;&#23384;

Some more:
Code:
                       /*  &#21516;&#19978;                             */
static int mode;                        /*  &#12450;&#12463;&#12475;&#12473;&#12496;&#12483;&#12501;&#12449;&#12514;&#12540;&#12489;           */

static int Shop_Sel;                    /*  &#12471;&#12519;&#12483;&#12503;&#26178;&#12398;&#12450;&#12452;&#12486;&#12512;&#36984;&#25246;         */
int EXdatflag;                          /*  &#22806;&#37096;&#12363;&#12425;&#21628;&#12400;&#12428;&#12383;&#26178;&#21442;&#29031;           */
int EXdatnum;                           /*  &#21516;&#19978;                             */

static char

For "BG save file name". Below is the start of some prototype declarations for functions.:
Code:
&#65314;&#65319;&#12501;&#12449;&#12452;&#12523;&#21517;&#20445;&#23384;       */
extern _BOXFTAG EXbox01;                /*  &#36984;&#25246;&#12496;&#12540;                         */

/*****************************************************************************/
/*  &#12503;&#12525;&#12488;&#12479;&#12452;&#12503;&#23459;&#35328;                                                         */
/*****************************************************************************/
void Item_

Probably more prototype declarations for function (seems to be for the shop menu, maybe the code for the shop menu is used for the menus in the bonus disk):
Code:
*/
void ItemSelLoadEX(void);               /*&#65393;&#65394;&#65411;&#65425;&#65400;&#65438;&#65431;&#65420;&#65384;&#65391;&#65400;&#65411;&#65438;&#65392;&#65408;&#65435;&#65392;&#65412;&#65438;(&#22806;&#37096;&#21442;&#29031;&#29992;)&#20966;&#29702;*/
void ShopList(void);                    /*  &#12471;&#12519;&#12483;&#12503;&#12522;&#12473;&#12488;&#29983;&#25104;&#20966;&#29702;           */
void ShopSel(void);                     /*  &#12471;&#12519;&#12483;&#12503;&#38917;&#30446;&#36984;&#25246;&#20966;

No idea who H.Mizukami is, or what G.T.V is:
Code:
*/
/*                                                                           */
/*                                             1997/05/07 G.T.V H.Mizukami   */
/****************************


Code:
LLbox.r = 1;
        LLbox.g = 1;
        LLbox.b = 1;

        LLbox.x = 16-256;
        LLbox.y = 20-120;
        LLbox.w = 332;
        LLbox.h = 16;

        GsSort    <

Code:
i = i - LLtbl[Q1];
                        if(i < 0)
                        {
                                ListPage[Q1] = n + 0x30;
                                i = i + LLtbl[Q1];

Same thing as before but this time for something written earlier:
Code:
*/
/*                                             1997/03/26 G.T.V H.Mizukami   */
/********************

Code:
strcat(mlistbuf, akuselist[LLtop + Q1]);
                        break;
                  case 4:               /*  &#12381;&#12398;&#20182;                           */
                        strcat(mli

Seems to be more prototype functions:
Code:
*/
/*                                             1997/04/22 G.T.V H.Mizukami   */
/*****************************************************************************/
void Item_SelMenuInit(void)
{
  WinFill LLwin;

Menu color settings?:
Code:
&#12463;&#12475;&#12469;&#12522;&#12540;&#12434;&#36984;&#25246;               */
          case 4:                       /*  &#12381;&#12398;&#20182;&#12434;&#36984;&#25246;                     */
                ListInit(item_menu);
                WinSetPos(wid[2], 128, 44, 16*20, 14*10);
                WinSetRGB(wid[2], 0, 0, 255, RGB_BUL);
                break;

More code for a prototype function:
Code:
H.Mizukami   */
/*****************************************************************************/
void Item_SelMenu(void)
{
  int LLnum;

        MjsLoop(&EXtprm01);
        if((LLnum = MjsMenuStat(&EXtprm01)) == -1)
                return;
        se

More:
Code:
*/
/*                                             1997/04/25 G.T.V H.Mizukami   */
/*****************************************************************************/
void Item_Mat_SelInit(void)
{
  WinFill LLwin;

        command = 2;
        EXsubbox[0].mode = 0;           /*  &#36984;&#25246;&#12496;&#12540;OFF

Blah:
Code:
/*  &#25903;&#25588;&#12510;&#12486;&#12522;&#12450;                     */
                char_pt = mat01_list;
                break;
          case 2:                       /*  &#12467;&#12510;&#12531;&#12489;&#12510;&#12486;&#12522;&#12450;                 */
                char_pt = mat02_list;
                  break;
          case 3:                       /*  &#29420;&#31435;&#12510;&#12486;&#12522;&#12450;                     */
                char_pt = mat03_list;
                break;

More prototype functions, I think this is for the gamepad actions corresponding to the shop menu:
Code:
1997/04/25 G.T.V H.Mizukami   */
/*****************************************************************************/
void Item_Mat_Sel(void)
{
  int LLpad;
  int LLnum = item_sel_mat;

#ifdef DEBUG
FntPrint("item_sel_mat = %d\n", item_sel_mat);
#endif

        LLpad = Item_MatMouse();

        if(oldpad == PADLup && item_sel_mat)
                item_sel_mat--;
        if(oldpad == PA

More:
Code:
if(LLpad == 0 || (oldpad & PADnext))
        {
                command     = 99;
                nextcommand = 2;
        }
        else
        {
                if((TGPad1 & PADRdown) || Char_cansel())
                {
                        command     = 127;
                        nextcommand = 0;
                        TGPad1 |= PADnext;
                        StopPreLoad();

AAAAAAAAAAAAAAAAAA:
Code:
******/
void ItemMat(void)
{
  int LLpad = 1;
  GsBOXF LLbox;
  int LLnum = ItemListMatNum[item_sel_mat];

#ifdef DEBUG
FntPrint("sel = %d max = %d\n", ItemListMatNum[item_sel_mat],
                ItemListMatMax[item_sel_mat]);
#endif

        LLpad = Item_subMatMouse();

        if(oldpad == PADLup && ItemListMatNum[item_sel_mat] > 1)
                ItemListMatNum[item_sel_mat] -= 2;

Code:
ItemListMatNum[item_sel_mat] < ItemListMatMax[item_sel_mat] - 1)
                ItemListMatNum[item_sel_mat]++;

        if(LLnum != ItemListMatNum[item_sel_mat])
        {
                _mt_sel_snd();
                StopPreLoad();
        }

        if(PreLoad == PL_NOUSE)
                ItemSelLoad((long *)(LPKBuf + BG_SZ));

        EXsubbox[1].mode = 1;
        EXsubbox[1].b

Cansel!:
Code:
& PADRdown) || Char_cansel())
        {
                command     = 127;
                nextcommand = 2;
                TGPad1 |= PADnext;
                StopPreLoad();
        }
        else
        {
                if((TGPad1 & PADnext) && LLpad == 0 || (oldpad & PADnext))
                {
                        command     = 99;
                        nextcommand = 3;

Code:
void Item_Char_SelInit(void)
{
  WinFill LLwin;

        command = 2;
        EXsubbox[0].mode = 0;           /*  &#36984;&#25246;&#12496;&#12540;OFF                      */
        WinNotDisp(wid[2]);
        memset(&LLwin, 0x00, sizeof(WinFill));
        LLwin.flag  = WINf_GRO;
        LLwin.wflag = WINw_001;
        LLwin.prm   = 5;
        wid[3]      = WinOpen(&LLwin);
        WinSetPos(wid[3], 128, 44, 1

Code:
*/
/*                                             1997/03/31 G.T.V H.Mizukami   */
/***************************************************************

Cursol! (This engrish is starting to sound familiar, heh):
Code:
*****************************************************************/
static void _init5(SCREEN_JOB *ps, int n)
{
  WinFill LLwin;

        if(n == -1)
        {
                ShopList();             /*  &#12471;&#12519;&#12483;&#12503;&#12522;&#12473;&#12488;&#29983;&#25104;               */

                init_CursolEx(&EXmouse, 0, 256, 120, 32, 22,  3, 3);
                memset(&LLwin, 0x00, sizeof(WinFill));
                LLwin.flag

Code:
*/
/*                                                                           */
/*                                                                           */
/*                                             1997/03/31 G.T.V H.Mizukami   */
/*****************************************************************************/
static void _loop5(S

Code:
*/
                MjsLoop(&EXtprm00);
                break;
          case 1:                       /*  &#12464;&#12521;&#12501;&#12451;&#12483;&#12463;&#34920;&#31034;                 */
                if(How_Kind_PadCon(0) == 1)
                        SjsSel = 1;
                else
                        SjsSel = 0;
                ic_flag = 0;
                break;
          case 99:
                if(anmwait ==

Code:
FsOpen(TOWNFILE);
                        FsSeek(tmpcmp.lcv_offset+tmpcmp.bg_offset);
                        FsReadLzs((long*)LPKBuf,tmpcmp.bg_size);
/* Miz
                        FsOpen(tmpcmp.lpkname);
                        FsSeek(tmpcmp.bg_offset);
                        FsReadLzs((long*)LPKBuf,tmpcmp.bg_size);
/**/
                        PreLoad=PL_USENOW;

Code:
*/
/*                                             1997/03/31 G.T.V H.Mizukami   */
/*****************************************************************************/
static int _before5(SCREEN_JOB *ps, int n)
{

        if(command == 0)
                return(1);

        command--;
        return(0);
}

/***********************

Code:
raw();
        }
}

/*****************************************************************************/
/*  &#32066;&#20102;&#20966;&#29702;                                                                 */
/*

Code:
**********/
/*  &#12450;&#12491;&#12513;&#12540;&#12471;&#12519;&#12531;&#12523;&#12540;&#12503;&#20966;&#29702;                                                 */
/*                                                                           */
/*

Code:
***************************************************************/
/*  &#12450;&#12491;&#12513;&#12540;&#12471;&#12519;&#12531;&#12487;&#12540;&#12479;                                                     */
/*************************************

Code:
CR_NOTPUSH,
   _sinit5,
   _init5,
   _loop5,
   NULL,
   NULL,
   NULL,
   _draw5,
   _end5,
   wp,
   {NULL,},
   512, 240,
   NULL, 0,
   NULL,
   0,
   1,
};

/**************

Code:
command   = 0;
                Shop_Sel  = 0;
                SjsSel    = 0;
                SjsSetBeforeKey(NULL);
        }

        anmwait = 0;
}

/*************************************************

Code:
;
#endif

        oldx   = EXmouse.cx;
        oldy   = EXmouse.cy;
        oldpad = TGPad1;
        if(How_Kind_PadCon(0) == 1)
                read_Mouse_Data(&EXmouse, 1);

        SjsSel = 1;
        switch(command)
        {

Code:
StopPreLoad();
                        SetTim(LPKBuf, 512, 0, 0, 480);
                        _mt_ok_snd();
                        anmwait = 0;
                        SjsSel=0;
                        SjsSetMode(&scr_list);
                        return;
                }

Code:
                }
                else
                {
                        command--;
                        _t_cancel_snd();
                }
        }
}

/*****************************************************************************/
/*

Code:
?******************************************************************/
static void _init5(SCREEN_JOB *ps, int n)
{
  WinFill LLwin;

        if(n == -1)
        {
                ShopList();             /*  &#12471;&#12519;&#12483;&#12503;&#12522;&#12473;&#12488;&#29983;&#25104;               */

                init_CursolEx(&EXmouse, 0, 256, 120, 32, 22,  3, 3);
                memset(&LLwin, 0x00, sizeof(WinFill));
                LLwin.flag

Code:
*/
/*                                                                           */
/*                                             1997/03/31 G.T.V H.Mizukami   */
/*****************************************************************************/
static void _loop5(S

There are tons more splotches of partial code all throughout the file. It was probably left in here by accident due to their compilers.
 

koolaidman

Lv. 25 Adventurer
Double post but this is for something else.

Square is uploading a bunch of old videos onto their Youtube account and they uploaded this one for Final Fantasy 7. I'm pretty sure the footage in this one comes from a very late build of the game. I noticed a few differences.

http://www.youtube.com/watch?v=C11CupDUPeo&feature=relmfu

There are probably some small differences in the beginning but here are the ones that I noticed:

1:30 - Where's everyones eyes? Cloud has his but no one else does. I can't remember if this was a problem in the final game but I could've sworn they did have eyes in this scene at least. This problem occurs again in the train scene, the playable characters will have their eyes but all the NPCs dont.

2:30 - Familiar unused scene! Maybe it was present in this build in the game but was changed at the last minute? Alternate version of the save point can be seen.

3:47 - How come everyone hits Cloud with 1hp? And it's not just this battle, every other battle scene in this video has enemies dealing nothing but 1hp to Cloud and his party. Also, Clouds HP would be a bit higher in this point in the game.

3:52 - Skill names lack names. It's just an empty box. But wasn't this working in the demos? Again, the enemies are only dealing 1hp to the party.

4:45 - Can Barret even have this materia at this point in the game?

4:52 - Even at this point in the game the HP on all the party members are pretty low, aren't they?

5:16 - "Those Chosen by the Planet" sounds different. For example, the sample for the Tubular Bell sounds different.
 

Lex

Administrator
Holy crap! That might even be worthy of a newspost? If so I'll get on it.

They had their eyes in the final version. I also noticed that the background for the outside view in the train sequence is missing.

The grunts in the battle (blue guys) are a model I haven't seen before. Lighter colour and lack of details.

I also can't remember a point in the game where you fight both the red grunts and the slalom's (4:07).

Cloud's magic animation is completely off-centre at 4:14.

Cloud's "being hit" animation is really weird at 4:38.

No, Barret can't have that animation at that point in the game. I'm pretty sure you can't encounter those enemies together either - or at least, I haven't. They're also very strangely coloured, but most of the enemies are.

I'm not sure I remember the shot of the highwind moving under meteor either, but I'm probably wrong about that one.

Excellent find!
 

Stilzkin

Rookie Adventurer
The last scene of the PV shows Sephiroth in flames. The way he vanishes is quite different. The disappearance seems more blurry than in the final version.
 
The last scene of the PV shows Sephiroth in flames. The way he vanishes is quite different. The disappearance seems more blurry than in the final version.
Indeed so. Rather than phasing through the fire, Sephiroth is engulfed. The FMV where he is "engulfed" by the fire is an older version; you can also watch this version of the FMV in the FFVII International Bonus Disc.

Phasing:
7kMPi.png


Engulfed:
pKTMv.png
 

koolaidman

Lv. 25 Adventurer
I've been on a roll this week it seems. :)

Here's something cool. In the Japanese version of the early FFVII demo, the Moriya folder contains 5 movies that aren't featured in the English version of the demo that was made about a month later. These videos aren't even anywhere to be found in the retail version of the game either. They aren't anything spectacular, but their use is interesting:

1.) ANG10.STR
2.) ANG30.STR
3.) ANG45.STR
4.) ANG60.STR
5.) ANG90.STR

STR formatted videos are usually used in scenes where the map will call a video with object/character model data still in frame with camera data to move the camera in sync with the camera angles of the video (like the video during the opening bombing mission with Cloud looking up) - the game will also limit the framerate to 18fps to ensure that the game stays in sync with the video. With this mind, that means that these videos were used to test scenes that use these techniques. That also means that at one point, there were test maps that looked like this! Pretty interesting, huh?

(also @ shademp, sorry I haven't been on skype to chat - busy with preparing for school but will be on sometime during the weekend. also, finish the next unused text article soon plsssss).

EDIT: WTF - disregard, geeze: http://thelifestream.net/ffvii-the-unused-text-part-8/
 
Last edited:

JBedford

Pro Adventurer
AKA
JBed
I think I read discussion once (perhaps in this thread) about the mds6_1 field area of VII.

In the area is a girder or steel-bar type thing (whatever it's called) that you need to run up to get to the next area, except it's almost impossible to tell that.

When I first went through the models for the area I noticed that the girder was a model. I thought this was strange and unnecessary.

I later discovered there is what looks something like a crane arm.

If I recall from FFVII the crane does absolutely nothing. And I don't think that crane arm is seen.

So obviously I made the connection that the girder was meant to be moved by the crane to get to the Sector 6 park, or perhaps to another area.

What I want to know is-- is there any other information anywhere that suggests this? Also has this been discussed anywhere before?

Also, while writing this I remembered where I read some discussion about this: glitterberri.com/final-fantasy-vii/prerelease-shots/. The presence of the what-looks-like-a-hidden-area would also strengthen the idea that the crane could be used to help travel to a different area. (actually, that's pretty unlikely. we can only assume the crane would raise and lower the girder, the area darkened in the final game is too far away to be related to the crane).
 
Last edited:

Ite

Save your valediction (she/her)
AKA
Ite
That would explain why Sector 6 is so goddamn hard to navigate, and why that girder looks like a real-time object more than a pre-rendered part of the background.
 
Well here's a difference I spotted only just now.

In the field
8onHi.png
JORG uses a different battle background than the other versions.

zvG5u.png

RvwxF.png

In JORG, the battle background places you on the equivalent of the platform to the lower right on the Corel Reactor map.
 

Flintlock

Pro Adventurer
In JORG, the battle background places you on the equivalent of the platform to the lower right on the Corel Reactor map.
I've never understood the point of that platform. They could have at least put a treasure chest there or something.
 

Lex

Administrator
In my head I want to remember seeing something that suggested a story point taking place there in a flashback, but I can't work out whether I'm making it up or whether I actually read it somewhere. Might do a bit of remember digging into this later.
 
In my head I want to remember seeing something that suggested a story point taking place there in a flashback, but I can't work out whether I'm making it up or whether I actually read it somewhere. Might do a bit of remember digging into this later.

I checked the section about Barret in the Early Material File, but nothing there. Maybe you are thinking of some event from Before Crisis?
 

Lex

Administrator
I honestly can't remember. I have a vague memory (but again not sure if it's real) of something to do with battles that suggested maybe a boss fight was to take place there, and having the lightbulb moment of "oh so that's what that was for", but again, it's vague.

I'll have to look into it later.
 

Ite

Save your valediction (she/her)
AKA
Ite
Everything about that platform suggests it was another unfinished chunk of the game. Ah well.
 
The erroneous blinking animations are very common in PC2012. They probably appear in PC98 as well. A segment of Barret's flashback was mildly damaged by this glitch.

Here the scene is in PSX:
135023877377127100_resized.png


Here it is in PC2012.
External link because huge

Yeeeaaah that looks odd. Also, in PC2012 when the game transitions from the flashback to the present, you hear the sound of breaking glass (as Dyne disappears from view) + see a white space for a few frames. In PSX it is always a silent transition, with no white blink.
 
Technically this is the wrong sub-forum but I'll post it here anyway.

I was freeze-framing through Advent Children Complete when I noticed an error.

The 7th Heaven symbol is mirrored on the inside of the bar door

Not sure if this mistake is intentional. The symbol exists on the front side of the door as well.

I am somewhat skeptical but still speculate that the symbol texture we see on the front is pasted in such a way that it becomes visible on the other side as well, hence the texture being mirrored.
 

Cthulhu

Administrator
AKA
Yop
I think you're watching those children buttsecksing in public with a bit too much interest, :monster:.
 

ForceStealer

Double Growth
Are we certain that top part of the door isn't a window? I never thought it was in watching the movie, but I can see the reflection of the door frame in it. So maybe it's just a decal in a window?
 
Top Bottom