home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD5.iso / scena / gravity'97 / demo / gitm / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-19  |  18.2 KB  |  567 lines

  1. /*
  2.      Ghost In The Machine 
  3.      main.c
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. #include <exec/types.h>
  11. #include <exec/memory.h>
  12. #include <proto/graphics.h>
  13. #include <proto/exec.h>
  14. #include <utility/hooks.h>
  15.  
  16. #include "VA3d:VA3D_Structures.h"
  17. #include "va3d:VA3D_animation.h"
  18. #include "va3d:VA3D_Display.h"
  19. #include "va3d:VA3D_entity.h"
  20. #include "va3d:VA3D_globalvar.h"
  21. #include "va3d:VA3D_io.h"
  22. #include "va3d:VA3D_map.h"
  23. #include "va3d:VA3D_precalc.h"
  24. #include "va3d:VA3D_palette.h"
  25. #include "va3d:VA3D_render.h"
  26. #include "va3d:VA3D_scene.h"
  27. #include "va3d:VA3D_Timer.h"
  28. #include "va3d:VA3D_xview.h"
  29.  
  30. #include "ShowPicture/Show_Pic.h"
  31. #include "MusicPlayer/Music_Play.h"
  32. #include "XPK/XPK_Reader.h"
  33.  
  34. LONG __near __stack = 20*1024;
  35.  
  36. ULONG __saveds __asm RenderFrameHook(REGISTER __a0 struct Hook *hook,
  37.                                REGISTER __a2 APTR object,
  38.                                 REGISTER __a1 APTR message);
  39. ULONG __saveds __asm RenderQuakeFrameHook(REGISTER __a0 struct Hook *hook,
  40.                                REGISTER __a2 APTR object,
  41.                                 REGISTER __a1 APTR message);
  42. ULONG __saveds __asm PaletteHookFunc(REGISTER __a0 struct Hook *hook,
  43.                                REGISTER __a2 APTR object,
  44.                                 REGISTER __a1 APTR message);
  45.  
  46. ENTITY *FindEntity(ENTITY *Entity, STRPTR Name);
  47.  
  48. VOID CleanUp(VOID);
  49. VOID FillPKeyEntry(PKEY_FRAME *CurrentKey,PKEY_FRAME *NextKey,PALETTE *Palette,ULONG Time,ULONG Flags);
  50. struct Hook RenderHook;
  51. struct Hook PalHook;
  52.  
  53. typedef struct Scene_2
  54.           {
  55.           SCENE *Scene;
  56.           PALETTE *Palette;
  57.           }SCENE_2;
  58.  
  59. SCENE_2 *LoadAndRelocScene(STRPTR SceneName,STRPTR PaletteName);
  60. VOID FreeScene(SCENE_2 *Scene);
  61.  
  62. #define VALUES_NUMBER 4096
  63. #define ANGLES_NUMBER 360
  64. #define VISIBLE_ANGLE 40
  65. VOID *KatowiceChunky;
  66. VOID *KatowicePalette;
  67. VOID *NoiseChunky;
  68. VOID *NoisePalette;
  69. VOID *Bump_ShineLUT;
  70. VOID *EndChunky;
  71. VOID *EndPalette;
  72. SCENE_2 *IntroScene;
  73. SCENE_2 *GhostScene;
  74. SCENE_2 *BabeScene;
  75. SCENE_2 *RolloScene;
  76. SCENE_2 *BumpScene;
  77. SCENE_2 *QuakeScene;
  78. SCENE_2 *CreditsScene;
  79. SCENE_2 *DragonScene;
  80. SCENE_2 *VA3DLogoScene;
  81.  
  82. PALETTE *BlackPal;
  83. PALETTE *WhitePal;
  84. PALETTE *RedPal;
  85. PALETTE *BluePal;
  86.  
  87. ULONG CurrentTime;
  88.  
  89. DVIEW *DView=NULL;
  90.  
  91. #define SEC 709379
  92.  
  93. PKEY_FRAME PKey[7];
  94.  
  95. ULONG DragonFly[] =
  96. {
  97.     0, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1
  98. };
  99.  
  100. ULONG SoldierRun[] =
  101. {
  102.     73, 74, 75, 76, 77, 78, 79, 80
  103. };
  104.  
  105. ULONG DogRun[] =
  106. {
  107.     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59
  108. };
  109.  
  110. ULONG SoldierStand_Load_Shoot[] =
  111. {
  112.     //0, 1, 2, 3, 4, 5, 6, 7,
  113.   29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
  114.   81, 82, 83, 84, 85, 86, 87, 88, 89, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2,
  115.   3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1,
  116.   2, 3, 4, 5, 6, 7
  117. };
  118.  
  119. ULONG DogStand_Pain[] =
  120. {
  121.     //69, 70, 71, 72, 73, 74, 75, 76,
  122.   77, 69 ,70, 71, 72, 73, 74, 75, 76, 77,
  123.   69, 70, 71,
  124.   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 17, 18,
  125.   19, 20, 21, 22, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  126.   25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25
  127. };
  128.  
  129.  
  130. MORPH_OBJECT *SoldierMObject;
  131. MORPH_OBJECT *DogMObject;
  132. MORPH_OBJECT *DragonMObject;
  133.  
  134.  
  135. VOID main(int argc,char **argv)
  136. {
  137.  LONG i;
  138.  BlackPalette[0] = 0x01000000;
  139.  WhitePalette[0] = 0x01000000;
  140.  RedPalette[0]   = 0x01000000;
  141.  BluePalette[0]   = 0x01000000;
  142.  
  143.      for(i=0;i<256;i++)
  144.       {
  145.         WhitePalette[3*i+1] = (ULONG)255<<24;
  146.         WhitePalette[3*i+2] = (ULONG)255<<24;
  147.         WhitePalette[3*i+3] = (ULONG)255<<24;
  148.         RedPalette[3*i+1] = (ULONG)255<<24;
  149.         RedPalette[3*i+2] = (ULONG)0<<24;
  150.         RedPalette[3*i+3] = (ULONG)0<<24;
  151.         BluePalette[3*i+1] = (ULONG)0<<24;
  152.         BluePalette[3*i+2] = (ULONG)0<<24;
  153.         BluePalette[3*i+3] = (ULONG)255<<24;
  154.       }
  155.  
  156.   RenderHook.h_Entry = (HOOKFUNC)RenderFrameHook;
  157.   PalHook.h_Entry = (HOOKFUNC)PaletteHookFunc;
  158.  
  159.   if(!XPK_Init())
  160.      {
  161.           CleanUp();
  162.      }
  163.  
  164.   VA3D_InitFFBPpower2();
  165.  
  166.   if((VA3D_RotateTable = XPK_UnPackFile("Data/Rotate.table")) == NULL) CleanUp();
  167.  
  168.     VA3D_AnglesNumber = (LONG)ANGLES_NUMBER;
  169.     VA3D_CoordsNumber = (LONG)VALUES_NUMBER;
  170.     VA3D_MinCoord = -(LONG)VALUES_NUMBER/2;
  171.     VA3D_MaxCoord = -VA3D_MinCoord-1;
  172.     VA3D_RotateTableCos = &VA3D_RotateTable[VALUES_NUMBER*(ANGLES_NUMBER/4)];
  173.  
  174.     if(!VA3D_PrecalcArcSineTable())
  175.     {
  176.           CleanUp();
  177.     }
  178.  
  179.  if(AvailMem(MEMF_CHIP) < 900000) 
  180.      {
  181.           printf ("Not enough chip mem\n");
  182.           CleanUp();
  183.      }
  184.  
  185.  if(VA3D_InitGFX())
  186.   {
  187.    if(!VA3D_PrecalcPerspectiveTable(VISIBLE_ANGLE,GlobalWidth,VALUES_NUMBER))
  188.     {
  189.           CleanUp();
  190.     }
  191.  
  192.    if((IntroScene = LoadAndRelocScene("Data/IntroScene.va3d","Data/Venus.palette")) == NULL) CleanUp();
  193.  
  194.    if((BlackPal = VA3D_AllocPalette(VA3DAP_RGB32,BlackPalette,
  195.                                       VA3DAP_CreateHashTable,FALSE,
  196.                                       TAG_DONE)) == NULL) CleanUp();
  197.  
  198.    if((WhitePal = VA3D_AllocPalette(VA3DAP_RGB32,WhitePalette,
  199.                                       VA3DAP_CreateHashTable,FALSE,
  200.                                       TAG_DONE)) == NULL) CleanUp();
  201.  
  202.    if((RedPal = VA3D_AllocPalette(VA3DAP_RGB32,RedPalette,
  203.                                       VA3DAP_CreateHashTable,FALSE,
  204.                                       TAG_DONE)) == NULL) CleanUp();
  205.  
  206.    if((BluePal = VA3D_AllocPalette(VA3DAP_RGB32,BluePalette,
  207.                                       VA3DAP_CreateHashTable,FALSE,
  208.                                       TAG_DONE)) == NULL) CleanUp();
  209.  
  210.    if((DView=VA3D_OpenView(BlackPalette,DVF_DBUFF)) == NULL)
  211.      {
  212.           printf("Cannot Open Screen\n");
  213.           CleanUp();
  214.      }
  215.    RenderHook.h_Data = DView;
  216.    PalHook.h_Data = DView;
  217.  
  218.   if((VA3D_ShineLUT = XPK_UnPackFile("Data/Venus.ShinePalette")) == NULL) CleanUp();
  219.  
  220.        FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  221.        FillPKeyEntry(&PKey[1],&PKey[2],IntroScene->Palette,2*SEC,PKFF_INTERPOLATE);
  222.        FillPKeyEntry(&PKey[2],NULL,IntroScene->Palette,15*SEC,PKFF_NOINTERPOLATE);
  223.  
  224.    if(!StartMusic(IntroTuneP61)) CleanUp();
  225.      {
  226.           VA3D_AnimSequence(IntroScene->Scene,
  227.                             VA3DAS_PKeyFrames,&PKey,
  228.                             VA3DAS_PaletteHook,&PalHook,
  229.                             VA3DAS_TimerHook,&TimerHook,
  230.                             VA3DAS_RenderHook,&RenderHook,
  231.                             TAG_DONE);
  232.                     
  233.           StopMusic();
  234.           free(VA3D_ShineLUT);
  235.           memcpy(tmpPal,IntroScene->Palette->RGB32,3080);
  236.           FreeScene(IntroScene);
  237.      }
  238.      
  239.      if((GhostScene=LoadAndRelocScene("Data/GhostScene.va3d","Data/Ghost.palette")) == NULL) CleanUp();
  240.      if((BabeScene=LoadAndRelocScene("Data/BabeScene.va3d","Data/Ghost.palette")) == NULL) CleanUp();
  241.      if((BumpScene=LoadAndRelocScene("Data/BumpScene.va3d","Data/Bump.palette")) == NULL) CleanUp();
  242.      if((QuakeScene=LoadAndRelocScene("Data/Quake2.va3d","Data/Quake.palette")) == NULL) CleanUp();
  243.      if((KatowiceChunky = XPK_UnPackFile("Data/Katowice.chunky")) == NULL) CleanUp();
  244.      if((KatowicePalette = XPK_UnPackFile("Data/Katowice.palette")) == NULL) CleanUp();
  245.      if((Bump_ShineLUT = XPK_UnPackFile("Data/Bump.ShinePalette")) == NULL) CleanUp();
  246.      if((VA3D_ShineLUT = XPK_UnPackFile("Data/Quake.ShinePalette")) == NULL) CleanUp();
  247.  
  248.      FadeOutPalette(DView,tmpPal,0L,0L,0L,2*SEC);
  249.  
  250.     if(!StartMusic(MainTuneP61)) CleanUp();
  251.  
  252.           FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  253.           FillPKeyEntry(&PKey[1],&PKey[2],GhostScene->Palette,2*SEC,PKFF_INTERPOLATE);
  254.           FillPKeyEntry(&PKey[2],NULL,GhostScene->Palette,30*SEC,PKFF_NOINTERPOLATE);
  255.           VA3D_AnimSequence(GhostScene->Scene,
  256.                             VA3DAS_PKeyFrames,&PKey,
  257.                             VA3DAS_PaletteHook,&PalHook,
  258.                             VA3DAS_TimerHook,&TimerHook,
  259.                             VA3DAS_RenderHook,&RenderHook,
  260.                             TAG_DONE);
  261.      
  262.           FillPKeyEntry(&PKey[0],&PKey[1],WhitePal,0,0);
  263.           FillPKeyEntry(&PKey[1],&PKey[2],GhostScene->Palette,2*SEC,PKFF_INTERPOLATE);
  264.           FillPKeyEntry(&PKey[2],NULL,GhostScene->Palette,45*SEC,PKFF_NOINTERPOLATE);
  265.           VA3D_AnimSequence(BabeScene->Scene,
  266.                             VA3DAS_PKeyFrames,&PKey,
  267.                             VA3DAS_PaletteHook,&PalHook,
  268.                             VA3DAS_TimerHook,&TimerHook,
  269.                             VA3DAS_RenderHook,&RenderHook,
  270.                             TAG_DONE);
  271.  
  272.   RenderHook.h_Entry = (HOOKFUNC)RenderQuakeFrameHook;
  273.  
  274.           FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  275.           FillPKeyEntry(&PKey[1],&PKey[2],QuakeScene->Palette,2*SEC,PKFF_INTERPOLATE);
  276.           FillPKeyEntry(&PKey[2],NULL,RedPal,36*SEC,PKFF_NOINTERPOLATE);
  277.  
  278.     SoldierMObject = (MORPH_OBJECT *)FindEntity(QuakeScene->Scene->Entities, "soldier.mdl");
  279.     DogMObject = (MORPH_OBJECT *)FindEntity(QuakeScene->Scene->Entities, "dog.mdl");
  280.  
  281.     SoldierMObject->Sequence = SoldierRun;
  282.     SoldierMObject->SeqNumber = 8;
  283.     SoldierMObject->CurrentSeq = 0;
  284.     SoldierMObject->SeqDelay = 100000;
  285.  
  286.     DogMObject->Sequence = DogRun;
  287.     DogMObject->SeqNumber = 12;
  288.     DogMObject->CurrentSeq = 0;
  289.     DogMObject->SeqDelay = 100000;
  290.  
  291.           VA3D_AnimSequence(QuakeScene->Scene,
  292.                             VA3DAS_PKeyFrames,&PKey,
  293.                             VA3DAS_PaletteHook,&PalHook,
  294.                             VA3DAS_TimerHook,&TimerHook,
  295.                                                         VA3DAS_CurrentTime,&CurrentTime,
  296.                             VA3DAS_RenderHook,&RenderHook,
  297.                             TAG_DONE);
  298.  
  299.                     FadeOutPalette(DView,QuakeScene->Palette->RGB32,255<<24,0L,0L,2*SEC);
  300.  
  301.               free(VA3D_ShineLUT);
  302.                     VA3D_ShineLUT = Bump_ShineLUT;
  303.  
  304.     
  305.  
  306.  
  307.           RenderHook.h_Entry = (HOOKFUNC)RenderFrameHook;
  308.  
  309.           FillPKeyEntry(&PKey[0],&PKey[1],RedPal,0,0);
  310.           FillPKeyEntry(&PKey[1],&PKey[2],BumpScene->Palette,2*SEC,PKFF_INTERPOLATE);
  311.           FillPKeyEntry(&PKey[2],&PKey[3],BumpScene->Palette,18*SEC,PKFF_NOINTERPOLATE);
  312.           FillPKeyEntry(&PKey[3],NULL,BlackPal,20*SEC,PKFF_INTERPOLATE);
  313.           VA3D_AnimSequence(BumpScene->Scene,
  314.                             VA3DAS_PKeyFrames,&PKey,
  315.                             VA3DAS_PaletteHook,&PalHook,
  316.                             VA3DAS_TimerHook,&TimerHook,
  317.                             VA3DAS_RenderHook,&RenderHook,
  318.                             TAG_DONE);
  319.  
  320.      if(!ShowPicture(KatowiceChunky,KatowicePalette,DisplayID)) CleanUp();
  321.      free(KatowiceChunky);
  322.      free(Bump_ShineLUT);
  323.      FreeScene(GhostScene);
  324.      FreeScene(QuakeScene);
  325.      FreeScene(BabeScene);
  326.      FreeScene(BumpScene);
  327.  
  328.      if((RolloScene=LoadAndRelocScene("Data/Roller.va3d","Data/Roller.palette")) == NULL) CleanUp();
  329.      if((CreditsScene=LoadAndRelocScene("Data/Credits.va3d","Data/Credits.palette")) == NULL) CleanUp();
  330.      if((DragonScene=LoadAndRelocScene("Data/Dragon.va3d","Data/Dragon.palette")) == NULL) CleanUp();
  331.      if((VA3DLogoScene=LoadAndRelocScene("Data/VA3DLogo.va3d","Data/VA3DLogo.palette")) == NULL) CleanUp();
  332.      if((NoiseChunky = XPK_UnPackFile("Data/Noise.chunky")) == NULL) CleanUp();
  333.      if((NoisePalette = XPK_UnPackFile("Data/Noise.palette")) == NULL) CleanUp();
  334.      if((EndChunky = XPK_UnPackFile("Data/End.chunky")) == NULL) CleanUp();
  335.      if((EndPalette = XPK_UnPackFile("Data/End.palette")) == NULL) CleanUp();
  336.      if((VA3D_ShineLUT = XPK_UnPackFile("Data/VA3DLogo.ShinePalette")) == NULL) CleanUp();
  337.  
  338.      while(P61_WaitPos2(20,45));
  339.      ShutDownPicture(KatowicePalette);
  340.      free(KatowicePalette);
  341.  
  342.           FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  343.           FillPKeyEntry(&PKey[1],&PKey[2],RolloScene->Palette,2*SEC,PKFF_INTERPOLATE);
  344.           FillPKeyEntry(&PKey[2],&PKey[3],RolloScene->Palette,26*SEC,PKFF_NOINTERPOLATE);
  345.           FillPKeyEntry(&PKey[3],NULL,BluePal,28*SEC,PKFF_INTERPOLATE);
  346.           VA3D_AnimSequence(RolloScene->Scene,
  347.                             VA3DAS_PKeyFrames,&PKey,
  348.                             VA3DAS_PaletteHook,&PalHook,
  349.                             VA3DAS_TimerHook,&TimerHook,
  350.                             VA3DAS_RenderHook,&RenderHook,
  351.                             TAG_DONE);
  352.  
  353.     DragonMObject = (MORPH_OBJECT *)FindEntity(DragonScene->Scene->Entities, "dragon.mdl");
  354.     DragonMObject->Sequence = DragonFly;
  355.     DragonMObject->SeqNumber = 14;
  356.     DragonMObject->CurrentSeq = 0;
  357.     DragonMObject->SeqDelay = 90000;
  358.  
  359.           FillPKeyEntry(&PKey[0],&PKey[1],BluePal,0,0);
  360.           FillPKeyEntry(&PKey[1],&PKey[2],DragonScene->Palette,2*SEC,PKFF_INTERPOLATE);
  361.           FillPKeyEntry(&PKey[2],&PKey[3],DragonScene->Palette,18*SEC,PKFF_NOINTERPOLATE);
  362.           FillPKeyEntry(&PKey[3],NULL,BlackPal,20*SEC,PKFF_INTERPOLATE);
  363.           VA3D_AnimSequence(DragonScene->Scene,
  364.                             VA3DAS_PKeyFrames,&PKey,
  365.                             VA3DAS_PaletteHook,&PalHook,
  366.                             VA3DAS_TimerHook,&TimerHook,
  367.                             VA3DAS_RenderHook,&RenderHook,
  368.                             TAG_DONE);
  369.  
  370.           FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  371.           FillPKeyEntry(&PKey[1],&PKey[2],CreditsScene->Palette,2*SEC,PKFF_INTERPOLATE);
  372.           FillPKeyEntry(&PKey[2],&PKey[3],CreditsScene->Palette,30*SEC,PKFF_NOINTERPOLATE);
  373.           FillPKeyEntry(&PKey[3],NULL,BlackPal,32*SEC,PKFF_INTERPOLATE);
  374.           VA3D_AnimSequence(CreditsScene->Scene,
  375.                             VA3DAS_PKeyFrames,&PKey,
  376.                             VA3DAS_PaletteHook,&PalHook,
  377.                             VA3DAS_TimerHook,&TimerHook,
  378.                             VA3DAS_RenderHook,&RenderHook,
  379.                             TAG_DONE);
  380.  
  381.      if(!ShowPicture2(NoiseChunky,NoisePalette,DisplayID)) CleanUp();
  382.  
  383.          for(i=0;i<250;i++) WaitTOF();
  384.  
  385.      ShutDownPicture(NoisePalette);
  386.  
  387.           FillPKeyEntry(&PKey[0],&PKey[1],BlackPal,0,0);
  388.           FillPKeyEntry(&PKey[1],&PKey[2],VA3DLogoScene->Palette,2*SEC,PKFF_INTERPOLATE);
  389.           FillPKeyEntry(&PKey[3],NULL,VA3DLogoScene->Palette,10*SEC,PKFF_NOINTERPOLATE);
  390.           VA3D_AnimSequence(VA3DLogoScene->Scene,
  391.                             VA3DAS_PKeyFrames,&PKey,
  392.                             VA3DAS_PaletteHook,&PalHook,
  393.                             VA3DAS_TimerHook,&TimerHook,
  394.                             VA3DAS_RenderHook,&RenderHook,
  395.                             TAG_DONE);
  396.  
  397.          while(P61_WaitPos2(33,40));
  398.  
  399.      FadeOutPalette(DView,VA3DLogoScene->Palette->RGB32,0L,0L,0L,2*SEC);
  400.  
  401.          while(P61_WaitPos2(34,1));
  402.      if(!ShowPicture2(EndChunky,EndPalette,DisplayID)) CleanUp();
  403.      StopMusic();
  404.      ShutDownPicture(EndPalette);
  405.  
  406.          for(i=0;i<100;i++) WaitTOF();
  407.  
  408.      free(VA3D_ShineLUT);
  409.      free(EndPalette);
  410.      free(EndChunky);
  411.      free(NoisePalette);
  412.      free(NoiseChunky);
  413.      FreeScene(RolloScene);
  414.      FreeScene(CreditsScene);
  415.      FreeScene(DragonScene);
  416.      FreeScene(VA3DLogoScene);
  417.  
  418.     VA3D_FreePalette(RedPal);
  419.     VA3D_FreePalette(BluePal);
  420.     VA3D_FreePalette(WhitePal);
  421.     VA3D_FreePalette(BlackPal);
  422.     printf("Alles in ordnung!\n");
  423.     CleanUp();
  424.  }
  425. else
  426.  {
  427.     printf("Cannot Init GFX Engine!\n");
  428.     CleanUp();
  429.  }
  430. }
  431.  
  432. ULONG __saveds __asm RenderFrameHook(REGISTER __a0 struct Hook *hook,
  433.                                REGISTER __a2 APTR object,
  434.                                 REGISTER __a1 APTR message)
  435. {
  436.  SCENE *Scene = (SCENE*)object;
  437.  DVIEW *tmpDView = (DVIEW *)hook->h_Data;
  438.  
  439.         VA3D_TransformScene(Scene, Scene->Camera, tmpDView->XView);
  440.         VA3D_ClearXView(Scene, tmpDView->XView);
  441.         VA3D_RenderScene(Scene, Scene->Camera, tmpDView->XView, RT_REAL);
  442.  
  443.          VA3D_SafeRender(tmpDView);
  444.          DView->C2P(tmpDView);
  445.          FrameEvent();
  446.          VA3D_SwitchView(tmpDView);
  447.           return 0L;
  448. }
  449.  
  450. ULONG __saveds __asm RenderQuakeFrameHook(REGISTER __a0 struct Hook *hook,
  451.                                REGISTER __a2 APTR object,
  452.                                 REGISTER __a1 APTR message)
  453. {
  454.  SCENE *Scene = (SCENE*)object;
  455.  DVIEW *tmpDView = (DVIEW *)hook->h_Data;
  456.  STATIC Flag = 0;
  457.  
  458.         if((CurrentTime >= 30*SEC) && (Flag == 0))
  459.         {
  460.         tmpSeqTime = 30*SEC;
  461.         SoldierMObject->Sequence = SoldierStand_Load_Shoot;
  462.         SoldierMObject->SeqNumber = 55;
  463.         SoldierMObject->CurrentSeq = 0;
  464.         SoldierMObject->SeqDelay = 75000;
  465.  
  466.         DogMObject->Sequence = DogStand_Pain;
  467.         DogMObject->SeqNumber = 55;
  468.         DogMObject->CurrentSeq = 0;
  469.         DogMObject->SeqDelay = 75000;
  470.         Flag = 1;
  471.         }
  472.  
  473.         VA3D_TransformScene(Scene, Scene->Camera, tmpDView->XView);
  474.         VA3D_ClearXView(Scene, tmpDView->XView);
  475.         VA3D_RenderScene(Scene, Scene->Camera, tmpDView->XView, RT_REAL);
  476.  
  477.          VA3D_SafeRender(tmpDView);
  478.          DView->C2P(tmpDView);
  479.          FrameEvent();
  480.          VA3D_SwitchView(tmpDView);
  481.           return 0L;
  482. }
  483.  
  484. ULONG __saveds __asm PaletteHookFunc(REGISTER __a0 struct Hook *hook,
  485.                                REGISTER __a2 APTR object,
  486.                                 REGISTER __a1 APTR message)
  487. {
  488.  PALETTE *Palette = (PALETTE*)object;
  489.  DVIEW *tmpDView = (DVIEW *)hook->h_Data;
  490.  
  491.  LoadRGB32(tmpDView->VP,Palette->RGB32);
  492.  return 0L;
  493. }
  494.  
  495. SCENE_2 *LoadAndRelocScene(STRPTR SceneName,STRPTR PaletteName)
  496. {
  497.  VOID *tmpSceneData;
  498.  VOID *tmpPaletteData;
  499.  SCENE_2 *Scene;
  500.  ULONG Status;
  501.  
  502.   if((tmpPaletteData = XPK_UnPackFile(PaletteName)) == NULL) return NULL;
  503.     if((tmpSceneData = XPK_UnPackFile(SceneName)) == NULL) return NULL;
  504.       if((Scene = malloc(sizeof(SCENE_2))) == NULL) return NULL;
  505.         if((Scene->Palette = VA3D_AllocPalette(VA3DAP_RGB32,tmpPaletteData,
  506.                                                VA3DAP_CreateHashTable,TRUE,
  507.                                                TAG_DONE)) == NULL) return NULL;
  508.  
  509.           free(tmpPaletteData);
  510.              if((Scene->Scene = VA3D_LoadScene(
  511.                                    VA3DLS_FileAddress, tmpSceneData,
  512.                                    VA3DLS_LoadMapHook,&FileHook,
  513.                                   VA3DLS_Status, &Status,
  514.                                    VA3DLS_Palette,Scene->Palette,
  515.                                    TAG_DONE)) == NULL) CleanUp();
  516.  
  517.              VA3D_AllocDeepBuffer(Scene->Scene);
  518.  
  519.           free(tmpSceneData);
  520.  
  521.  return Scene;
  522. }
  523.  
  524. VOID FreeScene(SCENE_2 *Scene)
  525. {
  526.    if(Scene)
  527.     {
  528.     if(Scene->Scene) VA3D_FreeScene(Scene->Scene);
  529.      if(Scene->Palette) VA3D_FreePalette(Scene->Palette);
  530.     free(Scene);
  531.     }     
  532. }
  533.  
  534. VOID CleanUp(VOID)
  535. {
  536.  VA3D_FreeArcSineTable();
  537.  VA3D_FreeRotateTable();
  538.  VA3D_FreePerspectiveTable();
  539.  if(DView) VA3D_CloseView(DView);
  540.  VA3D_CloseGFX();
  541.  XPK_Close();
  542.  exit(0);
  543. }
  544.  
  545. VOID FillPKeyEntry(PKEY_FRAME *CurrentKey,PKEY_FRAME *NextKey,PALETTE *Palette,ULONG Time,ULONG Flags)
  546. {
  547.      CurrentKey->Next = NextKey;
  548.      CurrentKey->Palette = Palette;
  549.      CurrentKey->Flags = Flags;
  550.      CurrentKey->Time = Time;
  551. }
  552.  
  553.  
  554. ENTITY *FindEntity(ENTITY *Entity, STRPTR Name)
  555. {
  556.  
  557.     while(Entity)
  558.     {
  559.         if(!strcmp(Entity->Name, Name))
  560.             return Entity;
  561.  
  562.         Entity = Entity->Next;
  563.     }
  564.  
  565.     return NULL;
  566. }
  567.