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 - The Skillster

Pages: [1] 2 3
1
Completely Unrelated / Wow, is this place still here!
« on: 2018-02-23 16:55:16 »
To think this forum has been going since the late 90s...
I'm pleased to see all the newer Steam rereleases/ports are getting the same hacking love that FF7 and FF8 originally received when they were first ported to PC :)

2
Completely Unrelated / Final Fantasy Dissidia on PSP
« on: 2009-01-30 17:19:40 »
Hey, I am totally loving this game.
I got hold of the Japanese version (don't think any US/EU version has been announced), and I can make out some of the speech I can't read Japanese.
Makes it more fun and harder as I have to learn the battle system as I play.
Anyone else played this and what is your impression? I have finished up to Story VIII with Squall.
BTW this is a PSP game which pits the main good guys and main villians from Final Fantasy 1 through to 10 in a story mode, no moving around like an RPG, this is a abit akin to Tactics as you move your character around a board and encounter enemies who you fight on full 3d maps.

The battle system is well made and great fun, but can get easy when you learn the tricks to winning

3
Got players on around level 70, and don't want to use any ultimate weapons for the man fighting ruby weapon.
I don't want to use the hades+KOTR trick, or KOTR+Mime.
All other attacks or magic dont get near 2000 damage :(

4
General Discussion / Assorted FF7 Plot Questions
« on: 2008-06-23 11:01:18 »
Hi, playing through FF7 NTSC PSX on my PSP and almost finished.
But there are some questions which are itching inside my head which I can't get an easy answer for.
Hence I will post them here for debate :)
*SPOILERS*
I want to know why Sephiroth severed Jenova's head in the flashback, what was his original intention, what did he find out when he was in the basement libarary of the shinra mansion that wanted him to go and take a piece of Jenova back with him?

We all know what happened in the end - Cloud sends him into the lifestream with Jenova's head and hence he ends of at the North Crater.

5
Yes, even after 10 or so years of FF7 I found something interesting.
I was a Geas Cliff fighting a pack of 4 ZoloKalter's (Toxic Barfing Worm things) and hit one with Cloud's Level 2 Limit Break - Blade Beam.
As you know it hits it's intended target and cannons off and hits all other enemies.
What I didn't know was this - enemies who are programmed to counter-attack counter the attacker (in this case the enemies hit back with Toxic Barf), and the remaining ZoloKalter's were either attacking me, and the ZoloKalter who was hit by the original Blade Beam.

Can anyone explain this?

6
Completely Unrelated / BOD - Street Fighter tourny
« on: 2008-06-12 08:24:26 »
At London's Met Uni 26th 27th of June.
Games include SSF2, SF3 TK5 and MVC2.
Anyone going, I saw sircanealot's name down?
I will hopefully go for SSF2 and try SF3.

7
General Discussion / FF7 PSX NTSC vs FF7 PC
« on: 2008-05-29 23:01:40 »
I was playing FF7 USA on my psp/psx and noticed that some of the grammar and language was really bad at the beginning (sector 7,8, Aeris intro etc).
Anyone else notice that?

8
Completely Unrelated / Dead Fantasy II - great video
« on: 2008-03-25 16:20:15 »
Not sure if this has been posted yet
http://www.joystiq.com/2008/03/25/final-fantasy-vs-dead-or-alive-round-2/
Cant believe someone went to the trouble of creating all those FF and DOA related models to make this a great fight movie.
Watch for Angel Rinoa and her Gunblade ;)

9
Completely Unrelated / Name this anime!
« on: 2007-02-12 23:52:35 »
I am trying to remember the name of a anime series I used to have on dvd but have since lost it.
The anime was based around these children who are born in to a small community and all have wings.
They have a duty to help out in the human village.
The series follows the life cycle of one these "children" who is born in to the community in episode 1 and is followed through till she dies.

Can't remember the name for the life of me.

10
Im upgrading my 17" Hyundai LCD and am looking for something 22"+

I am really keen on getting the DELL 24" 2407 Widescreen for around £500
http://accessories.us.dell.com/sna/productdetail.aspx?c=us&l=en&s=dhs&cs=19&sku=320-4335

or an Asus 22" Widescreen for almost £300.
http://www.microdirect.co.uk/Productinfo.aspx?ProductID=15713

Any folks have bought Large LCDs and have something to share about them, any recommendations?

Money is not an issue, Overall quality, response times, connectivity and warranty are important issues - I would have had the DELL by now if I wasn't 100% sure about it's response time.

Thanks

11
I want to get back to modifying FF7's difficulty now that I am back in a stable lifestyle (work, home, pc and internet etc).
But I would rather start from an exisiting mod then from scratch, could people/author's please post names/links to difficulty (or any scene.bin edit) mod's here so I have a list to work from?

12
Hi, I am finally getting a NTL line (need to move my PC/network etc), But I am so used to using ADSL I am not overly confident about getting Cable Wifi Routers that would work with NTL.
Any suggestions to what you feel are quality and realiable products that do the job for you?

Thanks

13
I am currently watching the following animes:
Bleach (yes unfortunatley)
Blood +
Zegapain
Innocent Venus

I have finished watching:
Melancony of Haruhi Sazumiya
Fate / Stay Night

J-TV:
Queen's Classroom
Saiyuuki

Any comments and recommendations (or even personal ratings) welcome.
I will post my own comments in a moment

14
Hey guys, I have a new 320 GB usb drive coming in tomorrow, normally I would format in NTFS (maybe have a couple of NTFS and a single FAT32 partition), but since I usually copy stuff for my friend who has a mac and I have a linux file server I would like some recommendations on how to set up the drive.

Does FAT32 have a partition size limit? Can makes read linux partitions?

15
Archive / CID - Old DOS FF7 Save Game Editor!
« on: 2005-10-26 10:41:47 »
Hey, I finally found it - after so long I managed to track it down.

It is located here:
http://parvez-halim.demonweb.co.uk/cid.zip
The editor has the function to move your party to any location in the game.
Look at the WORLD.DAT for examples and numbers to go with it.

Here is a snip of the Readme:
Quote
2/26/99

-----------------------------------------------------------------------------
IMPORTANT INFORMATION

Yes, but you might want to read through here first, 'cause it's not that
easy to use.

What you need to do first; or, hold on there:
Well, nothing anymore! Cid now automatically writes the checksums, so
there's no need for ff7patch.exe or checksum.exe.

Where you should have put these files:
In your save-game directory, to make things easy. But note! There is a file
here called 'default' and in this file you may specify a default savegame
file to open at startup. Otherwise, use a command-line option:

cid [cardfile]

What you should have; or, included files:
        cid.exe         Cid
        ff7patch.exe    patches ff7.exe to accept altered games (no
                        longer necessary!)
        offset.dat      character offset data
        world.dat       world position data
        give.dat        give command data
        vehicle.dat     vehicle number data
        weapon.dat      weapon data
        armor.dat       armor data
        accessor.dat    accessory data
        item.dat        item data
        materia.dat     materia data
        mvehicle.dat    vehicle coordinate data
        gvehicle.dat    more vehicle number data
        change.dat      change command data
        readme.txt      this file
        keyitem.dat     key item data
        default         specifies default savexx.ff7 file to open
        *.scr           script files for 'r' command

You shouldn't worry about all the data files, unless you want to append to
them, which you're welcome to do. The format is very simple. Explained later.


I suppose the relocation option could help someone finish the location edit option in Jenova.

EDIT:

BTW, there is a ff7patch.exe which is a program to remove CRC checking from FF7. Not sure if that is CRC throughout the EXE or just for the SAVEGAME. And also the FF7Patch IS NOT needed if you edit save games with CID.EXE, just needed for older versions of CID.

16
Archive / Quick Question-Best place to...
« on: 2005-10-21 10:33:14 »
Where is the best place/location for test battles in FF7?
Where do most of you test your models/edits/hacks/patches etc?

17
I was reading one of the sites linked in a post on the useless topics thread:
http://www.insertcredit.com/
They had a article about extracting FFX and X-2 models to PC.

http://www.yaz0r.net/ffxview.php

18
Hello.
Kinda decided to pick up Elentor's Hardcore scene.bin
( http://forums.qhimm.com/viewtopic.php?t=4357 )
and continued editing the enemies in it.

Ver 0.01d:

Minor update;
Changed items on Bullmotor and Sandworm
Changed Speed and Mag Def of above


Ver 0.01c:

Minor update;
Fixed the elemental weakness bug that Scenester causes in most of the file I have edited so far.
Advised to post Patches instead of whole Scene.bin files for legality reasons.


Ver 0.01b:

Taken on board the advice about stealing decent items as well as morphing enemies into decent items.
Changed all the enemies accordingly that I had edited in the previous patch (Corel to the destroyed reactor town - Gongaga?)

Reduced the stats for Jenove-Birth so you do have a fighting chance as well as elemental weaknesses.

Big surprise when fighting the Land Worm (Corel Prison) - Very Hard (But Worth the items).
Dyne - Watch Out! If this works properly you will get a nice ambush!

Again I have added more Elemental Weaknesses.


Any feedback is Welcomed!

Ver 0.01a:

From after Jenova Birth up to Turks Rude and Reno (scene 124-135)
I have been basically doubling most stats - including Level
(exception being the bosses - even harder - and piss easy enemies).
Added some elemental double damage attributes to a couple of enemies.
Removed most items dropped, stolen or morphed to mainly Potions/Hi Potions/Ethers/Pheonix Downs (some exceptions).

I HAVE NOT TESTED ALL OF THE GAME USING IT.

So please can you kind folks give me some feedback (hope it works).

LATEST VERSION 0.01c
This is the file to patch an ORIGINAL scene.bin file
http://parvez-halim.demonweb.co.uk/skillster_0_01_d_full.exe

This is to upgrade from ver 0.02b (about 20KB and the above patch is 100KB)
http://parvez-halim.demonweb.co.uk/skillster_0_01_d_upgrade.exe

Thanks to my friend for lending me his webspace, please visit his blog here:
http://parvez-halim.demonweb.co.uk/
Very interesting and diverse look at life!

19
Regardless of patched or unpatched, I remember not installing directx or directshow/media in the FF7 setup, but I cannot install them manually either
theres a patch in great FF7 FAQ in this forum, but the setup doesnt seem to work for me on XP SP2 PRo

20
Scripting and Reverse Engineering / Enemy Attack Data
« on: 2004-09-18 15:07:28 »
Hello guys,
its been awhile since Ive been here,
Im finally got the money to sort out my battered PC,
And a decent Temp Job to go with it.
Now I was looking at the Monster 7777 fever thread, I was wondering have you guys figured how to edit the scene.bin to adjust attack data for enemies?
is there a command line/GUI program someone could make to input adjustments?
just a thought since im so out of it at the moment

21
General Discussion / FF7 demo for 3dfx, any takers?
« on: 2004-08-15 09:24:25 »
Hi guys,
I dug out my PCGAMER cover CD that has the only ever demo of FF7PC in its early stages for 3dfx cards only.
I can tell you the music in this demo is in wave format, and the demo consists of the road to Corel and ends at the air taxi to the Gold saucer,
If anyone wants it still I can upload it and link it hear, but this is last chance since the cds due to go in the bin soon :)

22
Hello
I finally got my iPaq fixed, and thought id better make good use of it this time.

I found a psx emulator for PPC (!), and its supposed to be quite decent.
now, how do u use CDs on a PPC?
well people have found u can do either,
1. use wifi to access ISOs of the game on ur PC(s)
2. use huge CF memory cards to store ISOs on while you play
3. use 512MB memory cards to store stripped down ISOs on *more likely*

I seen projects where they reduce FF7 cds to 450mb, but since we here are all FF7 buffs, i might ask you guys is there other ways to reduce the file size then to substitute FMV for blank video and compress the ISO with pocketISO.

check this sites for more infos:
http://www.pdai.org/forums/index.php?showforum=20
Home of FPSEce (Free PlayStation Emulator for CE (Pocket PC O/S))
http://psx.elanmanager.com/ff7_cd1.html
A guide for reducing the size of FF7 CD1 ISO
Ive worked on PS2 game editing before, and there are places where you can replace PCM XA Data, but what about in FF7 PSX?

23
Hi
I dug up an old magazine scan, which was posted on this forum about 1-2 years ago
I dont remember if anyone actually found the source, or the location of the unknown "cave of light" scene in this scan:

NOTE: could be a made up shot, but on the other hand, notice how cloud is floating :P

24
Hi I dug up an old Field Format Doc from Ficedula, might be some help:
Quote
FF7 Field File documentation
----------------------------

Written by Ficedula ([email protected], http://www.legacy-ovwp.org/~ficedula/)

This document's based on what I and (mostly) Qhimm have discovered about the FF7 field files. I don't guarantee it's correct (there's almost certainly *some* mistakes in it), and it doesn't work on *all* field files either. Email me with any comments!

Qhimms site: http://www.qhimm.com


General file format
-------------------

Field files are always found in FLEVEL.LGP. They are always LZS compressed (see my other documents/tools for details of LZS compression and tools to do it).

The first two bytes of each (decompressed) field file are blank (zero).
The next four bytes is an integer indicating how many sections are present in the file.
Then a number of 4-byte integers follow, giving the starting offset for each section.

All field files should contain 9 sections; it's what FF7 expects.

So, normally you'll find:

00              Blank                   2 bytes
0009            NumSections             4 bytes
????            Section 1 location      4 bytes
????            Section 2 location      4 bytes
etc.            etc.                    etc.

This document is going to explain sections 4 (PALETTE) and 9 (BACKGROUND). I understand a *bit* of section 1 since that contains - among other things - text, but not all of it (ie. I only understand the text portion).

Each section generally starts with a four byte integer indicating the length of the section. You could just work this out by comparing offsets (how much space until the next section/end of file, etc) but FF7 stores the length at the start of the section anyway. After that the actual data follows. So the first bit of data for a section is actually 4 bytes after the point given in the section header (since the first four bytes are actually the length marker).


Section 4: PALETTE data
-----------------------
After the length indicator comes another integer, also indicating length. Useless, but it's there.
Then there's one more integer; unknown purpose.
Then one byte; unknown (blank often).
Then a word; number of colours in the palette plus one. No idea why. You can work numcolours out from the section length, but FF7 stores it anyway; why add one? Dunno.
One more byte; unknown (blank often).

Then the actual palette data.

Each palette entry is a 16-bit colour. This is unusual - normally palettes store as high quality data as possible, usually 24/32 bit. However since FF7 only ever runs in 16 bit I guess there isn't much point storing any other kind of data. Actually, the data is 15-bit (5-bit Red, 5-bit Green, 5-bit Blue, 1 bit unused. I think it's unused).

That's it for the palette! Only other thing you need to know is, palettes generally contain a number of colours that's a multiple of 256. This is because the palette is split up into 256-colour 'pages' internally. So the first colour is page 0/colour 0. Colour 256 is page 1/colour 0. Colour 628 is page 2/colour 116. You'll see why in the background section.


Section 9: BACKGROUND data
--------------------------
Firstly, a number of variables.
At offset $28, a Word = background width (BGWidth)
At offset $2A, a Word = background height (BGHeight)
At offset $2C, a Word = number of background sprites (NumBGSprites)
At offset $32, the background sprite data. See below for format (each sprite is 52 bytes long)
After the background sprite data, another $7 bytes, unknown purpose.
Then (ie. at offset $32 + NumBGSprites*52 + $7)  a Word = number of 2nd layer background sprites (NumBG2Sprites)
Then another $12 bytes, unknown purpose.
Then (ie. at offset $32 + NumBGSprites*52 + $1B) the background layer 2 sprite data. See below for format.
Then another $3D bytes, unknown purpose.
Then (ie. at offset $32 + NumBGSprites*52 + NumBG2Sprites*52 + $58) the raw image data.


Background paradigm
-------------------
(It isn't *really* a paradigm, but it sounds impressive if you say it is.)

FF7 stores its backgrounds in a rather complex format. Basically, you have the data split up into various sections:

1) Palette. List of colours.
2) Background sprites, layers 1 and 2. Just references to other bits of data.
3) Raw image data. Palettized data (ie. "grayscale" if viewed directly).

Each background sprite represents a 16x16 pixel block on the finished background. The sprite essentially contains the following information:

    -"Target" block, ie. where on the background to draw this 16x16 square
    -"Source" block, ie. where on the raw image data to take the pixels from
    -Palette "page", ie. which 256-colour palette block to apply to the raw image data

This is a very efficient way to store the image; on the one hand, it's in 16-bit colour, far better than just palettizing the whole image (ie. 256 colours over the *whole* background). On the other hand, each 16x16 pixel block takes much less space than if you'd stored it directly in 16-bit colour format. It isn't, however, easy to decode or (especially!) encode.


Format of a background sprite:

Type
  TFF7BgSprite = packed record
    ZZ1,X,Y:    Smallint;
    ZZ2:        Array[0..1] of Smallint;
    SrcX,SrcY:  Smallint;
    ZZ3:        Array[0..3] of Smallint;
    Pal:        Smallint;
    Flags:      Word;
    ZZ4:        Array[0..2] of Smallint;
    Page,Sfx:   Smallint;
    NA:         Longint;
    ZZ5:        Smallint;
    OffX,OffY:  Longint;
    ZZ6:        Smallint;
  end;

ZZ1,2,3,4,5,6:      Unknown data
X,Y:                Target position
SrcX,SrcY:          Source position
Pal:                Which palette page to use
Flags:              Indicate special effects ... not really understood properly.
Page:               Which image source page to use
Sfx:                More special effects?
NA:                 Unknown
OffX,OffY:          Unknown

The image source data is split up into 256x256 pixel pages; that's why as well as a source X and Y, you also have a source page (which 256x256 block to take data from). On the other hand, the destination background is stored as one big bitmap with no limits on size, so there, you just have a target X/Y position which can be used directly.

Also, note that each source image data "page" is preceded by 6 bytes of header.

So, say the raw image data starts at offset ImageData. Given a background sprite, the offset where that sprites data starts is:

StartOffset := (Page shl 16) or ((SrcY shl 8) or SrcX) + (Page+1)*6;

this is equivalent to

StartOffset := (Page * $FFFF) + (SrcY * $FF) + SrcX + (Page+1)*6;

(Page shl 16), (Page*$FFFF): Each page takes up 256x256 = $FFFF bytes, so skip that many for each page.

(SrcY shl 8), (SrcY*$FF): Each pixel row takes up 256 = $FF bytes, so skip that many to get to the right row.

SrcX: Taken directly.

(Page+1)*6: Skip 6 bytes of header per page. (Page+1) since even page 0 has 6 bytes preceding it.


Incidentally, the shifts are used in preference to multiplication since shifting is more efficient. Shifting on a computer is equivalent to multiplying/dividing by 2, 4, 8, .....

For the destination, note that you can use X/Y directly; however 0,0 *appears*, I *think*, to be at the image *centre*, not at the top/bottom left corner like with most programs.

So, now you know:
    -Where the raw image data for that sprite starts
    -Where you're drawing it to
    -Which palette page to use

Now, you just copy the pixels across, filtering the palette into it. IE:

Read a pixel from source image (one byte).
Set current colour to that colour in palette.
Draw onto target.

So, if you read a byte = 55 from the source image, you'd draw colour 55 in the selected palette to the target bitmap.


Other points
------------
Currently, Qhimms (and therefore mine too) source code doesn't draw a sprite if the Sfx is non-zero; this is because we don't understand what it does.

All variables above (Page, Pal, X, Y) start from ZERO; palette page zero is the first one, page one is the next one, etc.

The image data in FF7 palettes is stored in reverse order; ie. on Windows, data is stored Red first, then Green, then Blue. FF7 stores it the opposite way around, so you need to exchange the red/blue data. Here's how I do it in Cosmo:

      DCol := 0;
      DCol := DCol or ( (Col^ and $1F) shl 10 );
      DCol := DCol or (Col^ and $3E0);
      DCol := DCol or ( (Col^ and $7C00) shr 10);

Converts Col, an FF7 colour, into DCol, a (16-bit) Delphi colour.

The first background sprites are drawn "behind" the layer 2 sprites.

Variable conventions; I'm using Delphi names, which are as follows:

Byte:           8 bit, unsigned, integer
Word:           16 bit, unsigned, integer
Smallint:       16 bit, signed, integer
Integer/Longint:32 bit, signed, integer

(Unsigned = positive values only. Signed can hold positive or negative values).

Also, whenever I use numbers with $ signs above, it means I'm using hex values (hexadecimal).


Delphi code to do *all* of this (taken straight from Cosmo; cut-n-paste job) is below:


procedure TfrmCosmoBackground.FillBitmaps;
var
K,J,TOffset,TDest,I,B3Off,BOff:               Integer;
DCol,bgnsprites2,bgwidth,bgheight,bgnsprites: Word;
bgpsprites2,bgpsprites,psprite:               PFF7BGSPRITE;
Col,Dest,Pal:                                 PWord;
Source,Image,Comb,Picture,PB:                 PByte;
PI:                                           PInteger;
Bmp: TBitmap;
begin
Data.Position := 2 + (8+1)*4;
Data.ReadBuffer(BOff,4); Inc(BOff,4);
Data.Position := 2 + (3+1)*4;
Data.ReadBuffer(B3Off,4); Inc(B3Off,4);
Data.Position := BOff + $28;
Data.ReadBuffer(bgwidth,2);
Data.Position := BOff + $2A;
Data.ReadBuffer(bgheight,2);
Data.Position := BOff + $2C;
Data.ReadBuffer(bgnsprites,2);
GetMem(bgpsprites,Sizeof(TFF7BGSPRITE)*bgnsprites);
Data.Position := BOff + $32;
Data.ReadBuffer(bgpsprites^,Sizeof(TFF7BGSPRITE)*bgnsprites);
Data.Position := BOff + bgnsprites*52+$39;
Data.ReadBuffer(bgnsprites2,2);
GetMem(bgpsprites2,Sizeof(TFF7BGSPRITE)*bgnsprites2);
Data.Position := BOff + $32 + bgnsprites*52 + $1B;
Data.ReadBuffer(bgpsprites2^,Sizeof(TFF7BGSPRITE)*bgnsprites2);
PB := Data.Memory;
Inc(PB,B3Off + $C);
Pal := Pointer(PB);
//Pointer to raw palette data; needed later


begin {Palette creation}
  Palette := TBitmap.Create;
  PB := Data.Memory;
  Inc(PB,B3Off);
  PI := Pointer(PB);
  I := PI^ - $C;
  Palette.Width := 256;
  Palette.Height := (I div 2);
  For J := 1 to (I div 2) do begin
    Col := Pal;
    Inc(Col,J-1);
    K := ( (Col^ and $1F) shl 3 ) or ( ( (Col^ and $3E0) shr 5) shl 11) or ( ( (Col^ and $7C00) shr 10) shl 19);
    Palette.Canvas.Brush.Color := K;
    Palette.Canvas.Brush.Style := bsSolid;
    Palette.Canvas.FillRect(Rect( (16*(J mod 16)),(16*(J div 16)),(16+16*(J mod 16)),(16+16*(J div 16))));
  end;
end;
//Above section isn't really necessary, but it's nice to see a visual palette in the program.


Picture := Data.Memory;
Inc(Picture,BOff + bgnsprites*52 + bgnsprites2*52 + $58);
//Setup picture to point to the start of raw image data
GetMem(Image,bgwidth*bgheight*2);
ZeroMemory(Image,bgwidth*bgheight*2);
//Setup a target bitmap to draw to

For I := 0 to bgnsprites-1 do begin
  PSprite := BGPSprites;
  Inc(PSprite,I);
  TOffset := (PSprite^.Page shl 16) or ( (PSprite^.SrcY shl 8) or (PSprite^.SrcX) ) + (PSprite^.Page+1)*6;
  TDest := ((PSprite^.Y + (bgheight shr 1))*bgwidth)+(PSprite^.X+(bgwidth shr 1));
  TDest := TDest shl 1;
  If PSprite^.Sfx <> 0 then Continue;
  For J := 0 to 15 do begin //Copy 16 rows of data
    Source := Picture;
    If TOffset > Data.Size then Continue; //Sanity check! Don't read beyond end of file (=crash!)
    Inc(Source,TOffset);
    PB := Image;
    If TDest > (BGWidth*BGHeight*2) then Continue;
    Inc(PB,TDest);
    Dest := Pointer(PB);
    For K := 0 to 15 do begin //Copy 16 pixels in current row
      If Source^=0 then begin
        Inc(Source); Inc(Dest); Continue;
      end;
      If (Integer(Dest) > ( Integer(Image) + 2*BGHeight*BGWidth - 2 )) or (Integer(Dest) < Integer(Image)) then Continue; //Sanity check! Avoid crashes
      Col := Pal;
      Inc(Col, (PSprite^.Pal shl 8) + Source^ ); //Find correct palette entry
      If Integer(Col) > ( Integer(Data.Memory) + Data.Size ) then Continue; //Sanity check!
      Inc(Source);
      DCol := 0;
      DCol := DCol or ( (Col^ and $1F) shl 10 );
      DCol := DCol or (Col^ and $3E0);
      DCol := DCol or ( (Col^ and $7C00) shr 10);
      Dest^ := DCol; //Swap colour ordering and write to destination bitmap
      Inc(Dest);
    end;
    TDest := TDest + (BGWidth shl 1); //Skip one row of pixels in destination data
    Inc(TOffset,256); //Skip one row of pixels in source (always 256 pixels)
  end;
end;

Background := TBitmap.Create;
Background.PixelFormat := pf15Bit;
Background.Width := BGWidth;
Background.Height := BGHeight;
PB := Image;
For I := 0 to BGHeight-1 do begin
  Source := Background.ScanLine;
  CopyMemory(Source,PB,BGWidth*2);
  Inc(PB,BGWidth*2);
end;
//Do the actual drawing to a target bitmap


//Essentially this is the same as the previous code, except we're copying layer 2 this time.
Dest := Pointer(Image);
For I := 1 to bgwidth*bgheight do begin
  Dest^ := $1F shl 5;
  Inc(Dest);
end;

For I := 0 to bgnsprites2-1 do begin
  PSprite := BGPSprites2;
  Inc(PSprite,I);
  TOffset := (PSprite^.Page shl 16) or ( (PSprite^.SrcY shl 8) or (PSprite^.SrcX) ) + (PSprite^.Page+1)*6;
  TDest := ((PSprite^.Y + (bgheight shr 1))*bgwidth)+(PSprite^.X+(bgwidth shr 1));
  TDest := TDest shl 1;
  If PSprite^.Sfx <> 0 then Continue;
  For J := 0 to 15 do begin
    Source := Picture;
    If TOffset > Data.Size then Continue;
    Inc(Source,TOffset);
    PB := Image;
    If TDest > (BGWidth*BGHeight*2) then Continue;
    Inc(PB,TDest);
    Dest := Pointer(PB);
    For K := 0 to 15 do begin
      If Source^=0 then begin
        Inc(Source); Inc(Dest); Continue;
      end;
      If (Integer(Dest) > ( Integer(Image) + 2*BGHeight*BGWidth - 2 )) or (Integer(Dest) < Integer(Image)) then Continue;
      Col := Pal;
      Inc(Col, (PSprite^.Pal shl 8) + Source^ );
      Inc(Source);
      DCol := 0;
      DCol := DCol or ( (Col^ and $1F) shl 10 );
      DCol := DCol or (Col^ and $3E0);
      DCol := DCol or ( (Col^ and $7C00) shr 10);
      Dest^ := DCol; //!!!
      Inc(Dest);
    end;
    TDest := TDest + (BGWidth shl 1);
    Inc(TOffset,256);
  end;
end;

Foreground := TBitmap.Create;
Foreground.PixelFormat := pf15Bit;
Foreground.Width := BGWidth;
Foreground.Height := BGHeight;
PB := Image;
For I := 0 to BGHeight-1 do begin
  Source := Foreground.ScanLine;
  CopyMemory(Source,PB,BGWidth*2);
  Inc(PB,BGWidth*2);
end;
FreeMem(Image);
FreeMem(BGPSprites);
FreeMem(BGPSprites2);
end;

25
I was watching my sister playing ff7 on my ps2
I noticed a monster id never seen before
not in my 3 years in playing FF7 pc
so i grabbed me camera and took a few shots.
Its a cube monster, has anyone seen it in FF7 PC> or in Alhexx's FF7 monster viewer?
http://www.skillster.co.uk/ff7monster01.jpg
http://www.skillster.co.uk/ff7monster02.jpg
it was found in the scene after you fight Jenova *Death in the northern crater.

Pages: [1] 2 3