home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 573 / 3dlab101 / txtmap.int < prev    next >
Text File  |  1994-05-27  |  6KB  |  175 lines

  1. {────────────────────────────────────────────────────────────────────────────}
  2. {───Texture-mapping & rotation + perspektive-projektion procedures.──────────}
  3. {────────────────────────────────────────────────────────────────────────────}
  4. {───( C ) Copyright 1994 By Kimmo Fredriksson.───────────────────────────────}
  5. {────────────────────────────────────────────────────────────────────────────}
  6.  
  7. {$A+   Word Alignment                              }
  8. {$B-   Short-circuit Boolean expression evaluation }
  9. {$D-   Debug information off                       }
  10. {$E-   Disable 80x87 run-time library              }
  11. {$F-   Force Far Calls off                         }
  12. {$G+   80286 instructions                          }
  13. {$I-   I/O checking off                            }
  14. {$L-   Local Symbols off                           }
  15. {$N-   Calc reals by software                      }
  16. {$O-   Overlays not allowed                        }
  17. {$P-   Open string parameters disabled             }
  18. {$Q-   Overflow Check off                          }
  19. {$R-   Range-checking off               }
  20. {$S-   Stack-checking off               }
  21. {$T-   Type-Check pointers off                     }
  22. {$V-   Strict Var-String off               }
  23. {$X+   Extended Syntax on               }
  24.  
  25.  
  26. UNIT    TxtMap;
  27.  
  28.     {$DEFINE DirtyDraw}    { Copy only the parts that changed }
  29.     {$DEFINE ASMProcs}    { Use assembler or pascal...               }
  30.  
  31.     INTERFACE
  32.  
  33. CONST   Copyright     = '(C) 1994 By Kimmo Fredriksson';
  34.  
  35.     MaxPoints    = 1024;    { 3D-worlds co'ordinate points }
  36.     MaxTxtObjs    = 1024;    { TxtObj are the objects that make the world }
  37.     MaxTextures    = 32;    { max. amount of textures }
  38.     MaxWalls    = 128;    { hidden face removal help walls }
  39.  
  40.     WW        = 128;  { Wall texture width (in pixels) }
  41.     HW        = 128;    { Wall texture height (in pixels) }
  42.  
  43.     WWS        = 7;    { 2^WWS = WW ... }
  44.     HWS        = 7;    { 2^HWS = HW ... }
  45.  
  46.     WC        = 48;   { width of creature (in pixeleissä) }
  47.     HC        = 64;    { height of... (in pixeleissä) }
  48.  
  49.     HCS        = 6;    { 2^HCS = HC ... }
  50.  
  51.     WorldXZ        = 64;        { Wall width and height in }
  52.     WorldY        = WorldXZ;    { world co'ordinates }
  53.  
  54.     RemoveHFF    : Boolean = TRUE;    { Remove Hidden Front Face }
  55.  
  56.     VScrXMax    = 256;            { Screen window max x }
  57.     VScrYMax    = 128;                  { Screen window max y }
  58.  
  59.     PScrXMax    = 320;            { Physical screen max x }
  60.     PScrYMax    = 200;                  { Physical screen max y }
  61.  
  62.     VXCent        = VScrXMax DIV 2;
  63.     VYCent        = VScrYMax DIV 2;
  64.  
  65.     PXCent        = PScrXMax DIV 2;
  66.     PYCent        = PScrYMax DIV 2;
  67.  
  68.     XAdj        = ( PScrXMax - VScrXMax ) DIV 2; { Adjust window to screen }
  69.     YAdj        = ( PScrYMax - VScrYMax ) DIV 2; { Adjust window to screen }
  70.  
  71.     WOAdj        = YAdj * PScrXMax + XAdj;
  72.  
  73.     FarAway        = ( 25 * WorldXZ ) * ( 25 * WorldXZ );
  74.     VeryClose       = WorldXZ * WorldXZ;
  75.  
  76.     CeilC        : Byte    = 64 * 2 + 48;
  77.     FloorC        : Byte    = 64 * 3 + 16;
  78.  
  79.     TxtObj        = 0;    { object types }
  80.     Creature    = 1;
  81.     Worm        = 2;
  82.  
  83.     NumOfTxtObjs    : Integer = 0;    { number on texture objects... }
  84.     NumOfVisTxtObjs    : Integer = 0;  { ...that many are visible }
  85.     NumOfWalls    : Integer = 0;  { used to hidden face removal... }
  86.     NumOfVisWalls    : Integer = 0;  { how many, and how many visible }
  87.     NumOfPoints    : Integer = 0;    { number of points (really) }
  88.     NumOfTxts    : Integer = 0;    { number of textures }
  89.  
  90.     NormX        : Integer = 0;
  91.     NormZ        : Integer = 0;
  92.  
  93.     {$I SinCos.INC}    { sin&cos tables, saved as 16-bit integer, }
  94.             { 8-bit fixed point }
  95.  
  96. TYPE    TextPtr        = ^Byte;
  97.     Textures    = ARRAY[ 0..MaxTextures - 1 ] OF TextPtr;
  98.  
  99.     VirtScrTYPE    = ARRAY[ 0..VScrYMax - 1, 0..VScrXMax - 1 ] OF Byte;
  100.     VirtScrPtr    = ^VirtScrTYPE; { we draw to system memory, and }
  101.                     { then copy the finished picture }
  102.                     { to video memory }
  103.  
  104.     TxtObjTYPE    = RECORD
  105.                 Distance    : LongInt;   { distance to 'eye' }
  106.                 LPInd    : Word;      { indexies to }
  107.                 RPInd    : Word;      { point-tables }
  108.                 TxtInd    : Byte;      { texture-index }
  109.                 ObjType      : Byte;      { objects type }
  110.                 Special    : Integer;   { could be used to }
  111.               END;                       { anything }
  112.  
  113.     WallTYPE    = RECORD
  114.                 Distance    : LongInt;
  115.                 LPInd    : Word;
  116.                 RPInd    : Word;
  117.               END;
  118.  
  119.     TxtObjPtr    = ^TxtObjTYPE;
  120.     WallPtr        = ^WallTYPE;
  121.  
  122.     TxtObjARRAY    = ARRAY[ 0..MaxTxtObjs - 1 ] OF TxtObjPtr;
  123.     TxtObjARRAYPtr    = ^TxtObjARRAY;
  124.  
  125.     WallARRAY    = ARRAY[ 0..MaxWalls - 1 ] OF WallPtr;
  126.     WallARRAYPtr    = ^WallARRAY;
  127.  
  128. VAR    x    : ARRAY[ 0..MaxPoints - 1 ] OF Integer; { projected screen- }
  129.     y    : ARRAY[ 0..MaxPoints - 1 ] OF Integer; { coordinates }
  130.  
  131.     dis    : ARRAY[ 0..MaxPoints - 1 ] OF
  132.       RECORD
  133.         Xd    : Integer;    { X and Z distances from 'eye' }
  134.         Zd    : Integer;
  135.       END;
  136.  
  137.     Points    : ARRAY[ 0..MaxPoints - 1 ] OF
  138.       RECORD
  139.         X    : Integer;    { coordinates in the 3D-world, }
  140.         Z    : Integer       { Y is constant here }
  141.       END;
  142.  
  143.     EyePA    : RECORD
  144.       X     : Integer;    { eyes position, Y is const }
  145.       Z     : Integer;
  146.       XP    : LongInt;      { X = XP DIV 256, but: XP <> X * 256, }
  147.       ZP    : LongInt;      { so the position is 8-bit fixed point }
  148.       YAng  : Integer;    { viewing angle, 0-359 }
  149.     END;
  150.  
  151.     TxtMaps    : Textures;
  152.     Obj    : TxtObjARRAY;
  153.     Walls    : WallARRAY;
  154.     VirtScr    : VirtScrPtr;
  155.  
  156.     i386    : Boolean;    { CPU 386 or better ? }
  157.  
  158. CONST    RawData    = 0;        { texture's file type, }
  159.     PCXData    = 1;            { Raw = raw-data, PCX = PCX (RLE) file }
  160.  
  161. PROCEDURE MakeWorldPoint( VAR xn, zn : Integer );
  162. FUNCTION  LoadTexture( CONST f : STRING; TxtType, FileType : Byte ) : Integer;
  163. FUNCTION  CreateNewTxt( TxtType : Byte ) : Integer;
  164. PROCEDURE InitLongWall( x1, x2, z1, z2  : Integer );
  165. FUNCTION  InitAnimObj( x, z : Integer; OT, TI : Byte; S : Integer ) : Integer;
  166. PROCEDURE InitWallTxtObj( x1, x2, z1, z2 : Integer; TI : Byte );
  167. PROCEDURE ShowWholeVirtScr;
  168. PROCEDURE DoMove;
  169.  
  170.     IMPLEMENTATION
  171.  
  172. { You have to register to get the source of rest of the unit. }
  173.  
  174.  
  175.