Category : Pascal Source Code
Archive   : 3DLAB110.ZIP
Filename : TXTMAP.INT

 
Output of file : TXTMAP.INT contained in archive : 3DLAB110.ZIP
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄTexture-mapping & rotation + perspective-projection procedures.ÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄ( C ) Copyright 1994 By Kimmo Fredriksson.ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄThis source is *NOT* public domain, freeware or anything like that!ÄÄÄÄÄÄ}
{ÄÄÄYou may use this unit in your programs freely, but you are *NOT* ÄÄÄÄÄÄÄÄ}
{ÄÄÄallowed to distribute this source in any form. The compiled TPU mayÄÄÄÄÄÄ}
{ÄÄÄbe distributed only in its original unmodified form.ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄInternet email: [email protected]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄKimmo FredrikssonÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄSilvontie 38ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄ37740 HaukilaÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄFINLANDÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}
{ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ}

{$A+ Word Alignment }
{$B- Short-circuit Boolean expression evaluation }
{$D- Debug information off }
{$E- Disable 80x87 run-time library }
{$F- Force Far Calls off }
{$G+ 80286 instructions }
{$I- I/O checking off }
{$L- Local Symbols off }
{$N- Calc reals by software }
{$O- Overlays not allowed }
{$P- Open string parameters disabled }
{$Q- Overflow Check off }
{$R- Range-checking off }
{$S- Stack-checking off }
{$T- Type-Check pointers off }
{$V- Strict Var-String off }
{$X+ Extended Syntax on }


UNIT TxtMap;

{$DEFINE DirtyDraw} { Copy only the parts that changed }
{$DEFINE ASMProcs} { Use assembler or pascal... }

INTERFACE

CONST Copyright = '(C) 1994 By Kimmo Fredriksson';
Version = '1.04';

MaxPoints = 1024; { 3D-world coordinate points }
MaxTxtObjs = 1024; { TxtObj are the objects that make the world }
MaxTextures = 32; { max. amount of textures }
MaxWalls = 128; { hidden face removal help walls }

WW = 128; { Wall texture width (in pixels) }
HW = 128; { Wall texture height (in pixels) }

WWS = 7; { 2^WWS = WW ... }
HWS = 7; { 2^HWS = HW ... }

WC = 48; { width of creature (in pixeleiss„) }
HC = 64; { height of... (in pixeleiss„) }

HCS = 6; { 2^HCS = HC ... }

WorldXZ = 64; { Wall width and height in }
WorldY = WorldXZ; { world co'ordinates }

RemoveHFF : Boolean = TRUE; { Remove Hidden Front Face }

VScrXMax = 256; { Screen window max x }
VScrYMax = 128; { Screen window max y }

PScrXMax = 320; { Physical screen max x }
PScrYMax = 200; { Physical screen max y }

VXCent = VScrXMax DIV 2;
VYCent = VScrYMax DIV 2;

PXCent = PScrXMax DIV 2;
PYCent = PScrYMax DIV 2;

XAdj = ( PScrXMax - VScrXMax ) DIV 2; { Adjust window to screen }
YAdj = ( PScrYMax - VScrYMax ) DIV 2; { Adjust window to screen }

WOAdj = YAdj * PScrXMax + XAdj;

FarAway = ( 25 * WorldXZ ) * ( 25 * WorldXZ );
VeryClose = WorldXZ * WorldXZ;

CeilC : Byte = 64 * 2 + 48;
FloorC : Byte = 64 * 3 + 16;

TxtObj = 0; { object types }
Creature = 1;
Worm = 2;

NumOfTxtObjs : Integer = 0; { number of texture objects... }
NumOfVisTxtObjs : Integer = 0; { ...that many are visible }
NumOfWalls : Integer = 0; { used to hidden face removal... }
NumOfVisWalls : Integer = 0; { how many, and how many visible }
NumOfPoints : Integer = 0; { number of points (really) }
NumOfTxts : Integer = 0; { number of textures }

NormX : Integer = 0;
NormZ : Integer = 0;

{$I SinCos.INC} { sin&cos tables, saved as 16-bit integer, }
{ 8-bit fixed point }

TYPE TextPtr = ^Byte;
Textures = ARRAY[ 0..MaxTextures - 1 ] OF TextPtr;

VirtScrTYPE = ARRAY[ 0..VScrYMax - 1, 0..VScrXMax - 1 ] OF Byte;
VirtScrPtr = ^VirtScrTYPE; { we draw to system memory, and }
{ then copy the finished picture }
{ to video memory }

TxtObjTYPE = RECORD
Distance : LongInt; { distance to 'eye' }
LPInd : Word; { indexies to }
RPInd : Word; { point-tables }
TxtInd : Byte; { texture-index }
ObjType : Byte; { objects type }
Special : Integer; { could be used to }
END; { anything }

WallTYPE = RECORD
Distance : LongInt;
LPInd : Word;
RPInd : Word;
END;

TxtObjPtr = ^TxtObjTYPE;
WallPtr = ^WallTYPE;

TxtObjARRAY = ARRAY[ 0..MaxTxtObjs - 1 ] OF TxtObjPtr;
TxtObjARRAYPtr = ^TxtObjARRAY;

WallARRAY = ARRAY[ 0..MaxWalls - 1 ] OF WallPtr;
WallARRAYPtr = ^WallARRAY;

XZPoint = RECORD
X : Integer;
Z : Integer
END;

VAR x : ARRAY[ 0..MaxPoints - 1 ] OF Integer; { projected screen- }
y : ARRAY[ 0..MaxPoints - 1 ] OF Integer; { coordinates }

dis : ARRAY[ 0..MaxPoints - 1 ] OF
RECORD
Xd : Integer; { X and Z distances from 'eye' }
Zd : Integer;
END;

Points : ARRAY[ 0..MaxPoints - 1 ] OF XZPoint;
{ coordinates in the 3D-world, }
{ Y is constant here }
EyePA : RECORD
X : Integer; { eyes position, Y is const }
Z : Integer;
XP : LongInt; { X = XP DIV 256, but: XP <> X * 256, }
ZP : LongInt; { so the position is 8-bit fixed point }
YAng : Integer; { viewing angle, 0-359 }
END;

TxtMaps : Textures;
Obj : TxtObjARRAY;
Walls : WallARRAY;
VirtScr : VirtScrPtr;

i386 : Boolean; { CPU 386 or better ? }

CONST RawData = 0; { texture's file type, }
PCXData = 1; { Raw = raw-data, PCX = PCX (RLE) file }

TYPE WallDataTYPE = RECORD
MinWX : Word; { These are updated when }
MinWZ : Word; { building the world so, that }
MaxWX : Word; { MinW? and MaxW? tell the }
MaxWZ : Word; { upper-left and lower-right }
WallTable : Pointer;
TableSize : Word;
END;

VAR WallDataPtr : ^WallDataTYPE; { stupid and peculiar map saving... 🙂 }

FUNCTION LoadWorld( CONST f : STRING ) : Boolean;
FUNCTION SaveWorld( CONST f : STRING ) : Boolean;
PROCEDURE MakeWorldPoint( VAR xn, zn : Integer );
FUNCTION LoadTexture( CONST f : STRING; TxtType, FileType : Byte ) : Integer;
FUNCTION CreateNewTxt( TxtType : Byte ) : Integer;
PROCEDURE InitLongWall( x1, x2, z1, z2 : Integer );
FUNCTION InitAnimObj( x, z : Integer; OT, TI : Byte; S : Integer ) : Integer;
PROCEDURE InitWallTxtObj( x1, x2, z1, z2 : Integer; TI : Byte );
PROCEDURE ShowWholeVirtScr;
PROCEDURE DoMove;

IMPLEMENTATION

{ For the rest of the unit, please register }



  3 Responses to “Category : Pascal Source Code
Archive   : 3DLAB110.ZIP
Filename : TXTMAP.INT

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/