Example #1
0
/*
   read level & print its map
*/
void PrintLevel( BCINT episode, BCINT mission)
{
   ReadLevelData( episode, mission);
   /* define map center */
   MapCenterX = (MapMinX + MapMaxX) / 2;
   MapCenterY = (MapMinY + MapMaxY) / 2;

   /* initialize, scale & draw the page */
   InitPage( episode, mission, ( UserLvlNm != NULL ? UserLvlNm : LevelName ));

   InitScale( MapMaxX - MapMinX, MapMaxY - MapMinY,
	      ( UserLvlNm != NULL ? UserLvlNm : LevelName ));
   if (FlagAutoZoom && (FlagName || FlagLegend))
   {
      BCINT n;
      for (n = 0; n < NumVertexes; n++)
	 /* rough & fine check for covering name or legend areas */
	 if (Vertexes[ n].y > MapCenterY)
	    if (CheckScale( Vertexes[ n].x, Vertexes[ n].y))
	       break; /* for */
      if (n < NumVertexes)
	 AdjustScale( MapMaxX - MapMinX, MapMaxY - MapMinY);
   }

   PrintMap();
   TermPage();

   /* clean up & free space */
   ForgetLevelData();
}
Example #2
0
/*
   terminate the program reporting an error
*/
void ProgError( char *errstr, ...)
{
   va_list args;

   va_start( args, errstr);
   printf( "\nProgram Error: *** ");
   vprintf( errstr, args);
   printf( " ***\n");
   va_end( args);
   /* clean up & free space */
   ForgetLevelData();
   CloseWadFiles();
   exit( 1);
}
Example #3
0
/*
	Windeu cleanup routine
*/
void CleanupWindeu ()
{
	// Cleanup graphics data (GDI pen cache, ...)
	// CleanupGfxData();
	ForgetLevelData();
	Level = NULL;
	ForgetWTextureInfo();
	ForgetFTextureInfo();

	// that's all, folks!
	CloseWadFiles();

  // Disabled 7/04 ARK
//	UnloadKodObjects();
//	UnloadKodRooms();
//	SaveEntrances(EntranceData);
//	CloseEntrances();

	LogMessage( ": The end!\n\n\n");
	CloseLog();
}
Example #4
0
/*
   read level & analyze its statistics
*/
void AnalyzeLevel( BCINT episode, BCINT mission)
{
   BCINT classes[ 9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
   BCINT powrups[ 19] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
   BCINT enemies[ 18] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
   BCINT n, m, secret = 0, telept = 0;

   ReadLevelData( episode, mission);

   /* count Thing classes, Power-Ups types & Enemies types */
   for (n = 0; n < NumThings; n++)
      /* check whether multi-player Thing should be counted */
      if (FlagMultPlay || ! (Things[ n].when & T_MULTI))
	 /* check whether UV or non-UV Thing should be counted */
	 if ((FlagUltraVlc && (Things[ n].when & T_ULTRA)) ||
	     (! FlagUltraVlc && (Things[ n].when & T_NONUV)) ||
	     Things[ n].when == 0) /* count always if no difficulty bits */
	 {
	    m = Things[ n].type;
	    classes[ GetThingClass( m)]++;

	    if (GetThingClass( m) == CLASS_WEAPON || GetThingClass( m) == CLASS_ENHANCE)
	    {
	       if (GameVersion < 16)
		  switch( m)
		  {
		     case THING_SHOTGUN:   powrups[ Shotgun ]++; break;
		     case THING_COMBATGUN: powrups[ Cmbatgun]++; break;
		     case THING_CHAINGUN:  powrups[ Chaingun]++; break;
		     case THING_LAUNCHER:  powrups[ RcktLnch]++; break;
		     case THING_PLASMAGUN: powrups[ Plasmagn]++; break;
		     case THING_BFG9000:   powrups[ Bfg9000 ]++; break;
		     case THING_CHAINSAW:  powrups[ Chainsaw]++; break;
		     case THING_BERSERK:   powrups[ Berserk ]++; break;
		     case THING_BACKPACK:  powrups[ Backpack]++; break;
		     case THING_GREENARMOR:powrups[ SecurArm]++; break;
		     case THING_BLUEARMOR: powrups[ CmbatArm]++; break;
		     case THING_SOULSPHERE:powrups[ SoulSphr]++; break;
		     case THING_MEGASPHERE:powrups[ MegaSphr]++; break;
		     case THING_BLURSPHERE:powrups[ BlurArtf]++; break;
		     case THING_INVULN:    powrups[ InvlnArt]++; break;
		     case THING_RADSUIT:   powrups[ RadSuit ]++; break;
		     case THING_COMPMAP:   powrups[ CompMap ]++; break;
		     case THING_LITEAMP:   powrups[ LiteAmp ]++; break;
		     default: break;       /* ignore ammo boxes & keys */
		  }
	       else /* Heretic Things */
		  switch( m)
		  {
		     case THING_CROSSBOW:  powrups[ Crossbow]++; break;
		     case THING_DRAGONCLAW:powrups[ DrgnClaw]++; break;
		     case THING_HELLSTAFF: powrups[ HellStaf]++; break;
		     case THING_PHOENIXROD:powrups[ PhnixRod]++; break;
		     case THING_MACE:      powrups[ Mace    ]++; break;
		     case THING_GAUNTLETS: powrups[ Gauntlts]++; break;
		     case THING_BAGHOLDING:powrups[ BagHold ]++; break;
		     case THING_SILVSHIELD:powrups[ SilvShld]++; break;
		     case THING_ENCHSHIELD:powrups[ EnchShld]++; break;
		     case THING_MYSTICURN: powrups[ MystcUrn]++; break;
		     case THING_SHADOWSPHR:powrups[ ShadwSph]++; break;
		     case THING_RINGINVULN:powrups[ RingInvl]++; break;
		     case THING_MAPSCROLL: powrups[ MapScrol]++; break;
		     case THING_TOMEPOWER: powrups[ TomePowr]++; break;
		     case THING_TIMEBOMB:  powrups[ TimeBomb]++; break;
		     case THING_CHAOSDEV:  powrups[ ChaosDev]++; break;
		     case THING_TORCH:     powrups[ Torch   ]++; break;
		     case THING_WINGS:     powrups[ Wings   ]++; break;
		     case THING_MORPHOVUM: powrups[ MorphOvm]++; break;
		     default: break;      /* ignore ammo boxes & keys */
		  }
	    }

	    if (GetThingClass( m) == CLASS_ENEMY)
	    {
	       if (GameVersion < 16)
		  switch( m)
		  {
		     case THING_HUMAN:     enemies[ Human   ]++; break;
		     case THING_SERGEANT:  enemies[ Sergeant]++; break;
		     case THING_COMMANDO:  enemies[ Commando]++; break;
		     case THING_IMP:       enemies[ Imp     ]++; break;
		     case THING_DEMON:     enemies[ Demon   ]++; break;
		     case THING_SPECTRE:   enemies[ Spectre ]++; break;
		     case THING_LOSTSOUL:  enemies[ LostSoul]++; break;
		     case THING_CACODEMON: enemies[ CacoDmn ]++; break;
		     case THING_PAINELEM:  enemies[ PainElem]++; break;
		     case THING_MANCUBUS:  enemies[ Mancubus]++; break;
		     case THING_REVENANT:  enemies[ Revenant]++; break;
		     case THING_KNIGHT:    enemies[ Knight  ]++; break;
		     case THING_BARON:     enemies[ Baron   ]++; break;
		     case THING_ARACHNO:   enemies[ Arachno ]++; break;
		     case THING_ARCHVILE:  enemies[ ArchVile]++; break;
		     case THING_CYBERDEMON:enemies[ CyberDmn]++; break;
		     case THING_SPIDERBOSS:enemies[ SpiderBs]++; break;
		     case THING_WOLF3DSS:  enemies[ Wolf3dSS]++; break;
		  }
	       else /* Heretic Things */
		  switch( m)
		  {
		     case THING_GARGOYLE:  enemies[ Gargoyl ]++; break;
		     case THING_FRGARGOYLE:enemies[ FGargoyl]++; break;
		     case THING_GOLEM:     enemies[ Golem   ]++; break;
		     case THING_GOLEMGH:   enemies[ GolemGh ]++; break;
		     case THING_NTGOLEM:   enemies[ NGolem  ]++; break;
		     case THING_NTGOLEMGH: enemies[ NGolemGh]++; break;
		     case THING_WARRIOR:   enemies[ Warrior ]++; break;
		     case THING_WARRIORGH: enemies[ WarriorG]++; break;
		     case THING_DISCIPLE:  enemies[ Disciple]++; break;
		     case THING_SABRECLAW: enemies[ SabrClaw]++; break;
		     case THING_WEREDRAGON:enemies[ WrDragon]++; break;
		     case THING_OPHIDIAN:  enemies[ Ophidian]++; break;
		     case THING_IRONLICH:  enemies[ IronLich]++; break;
		     case THING_MAULOTAUR: enemies[ MauloTr ]++; break;
		     case THING_DSPARIL:   enemies[ DSparil ]++; break;
		  }
	    }
	 }

   /* count secret Sectors & teleporting LineDefs */
   for (n = 0; n < NumSectors; n++)
      if (Sectors[ n].special == S_SECRET)
	 secret++;
   for (n = 0; n < NumLineDefs; n++)
      if (LineDefs[ n].type == L_TELEP1 || LineDefs[ n].type == L_TELEPR)
	 telept++;

   /* print all statistics */
   if (GameVersion == 2) {
      printf( "Statistics of level MAP%02d: %s\n", mission,
	       ( UserLvlNm != NULL ? UserLvlNm : LevelName ));
      printf( "=========================\n\n");
   }
   else {
      printf( "Statistics of level E%dM%d: %s\n", episode, mission,
	       ( UserLvlNm != NULL ? UserLvlNm : LevelName ));
      printf( "========================\n\n");
   }

   printf( "MapDim:\t  MaxX\t  MinX\t SizeX\t  MaxY\t  MinY\t SizeY\n");
   printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	    MapMaxX, MapMinX, MapMaxX - MapMinX, MapMaxY, MapMinY, MapMaxY - MapMinY);

   printf( "\n");
   printf( "Struct:\tThings\tVertxs\tLinDfs\tTelePt\tSidDfs\tSectrs\tSecret\n");
   printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	    NumThings, NumVertexes, NumLineDefs, telept, NumSideDefs, NumSectors, secret);

   printf( "\n");
   if (GameVersion < 16)
      printf( "Things:\t START\tTLPORT\t BONUS\tWEAPON\tENHANC\t ENEMY\t DECOR\tBARREL\n");
   else
      printf( "Things:\t START\tTLPORT\t BONUS\tWEAPON\tENHANC\t ENEMY\t DECOR\tPOD/VC\n");
   printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	    classes[ CLASS_START],   classes[ CLASS_TELEPORT], classes[ CLASS_BONUS], classes[ CLASS_WEAPON],
	    classes[ CLASS_ENHANCE], classes[ CLASS_ENEMY],    classes[ CLASS_DECOR], classes[ CLASS_BARREL]);
   if (classes[ CLASS_UNKNOWN] != 0)
      printf( "Things:\tUNKNOWN\t%6d\n", classes[ CLASS_UNKNOWN]);

   if (GameVersion < 16)
   {
      printf( "\n");
      printf( "PowrUps:SHOTGN\tCOMBAT\tCHAING\tRCKTLR\tPLASMA\t BFG9K\tCHNSAW\tBERSRK\tBCKPCK\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       powrups[ Shotgun], powrups[ Cmbatgun], powrups[ Chaingun], powrups[ RcktLnch], powrups[ Plasmagn],
	       powrups[ Bfg9000], powrups[ Chainsaw], powrups[ Berserk], powrups[ Backpack]);
      printf( "\tGRNARM\tBLUARM\tSOULSP\tMEGASP\tBLURAF\tINVLAF\tRDSUIT\tCMPMAP\tLITAMP\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       powrups[ SecurArm], powrups[ CmbatArm], powrups[ SoulSphr], powrups[ MegaSphr], powrups[ BlurArtf],
	       powrups[ InvlnArt], powrups[ RadSuit], powrups[ CompMap], powrups[ LiteAmp]);

      printf( "\n");
      printf( "Enemies: HUMAN\t SARGE\tCOMNDO\t   IMP\t DEMON\tSPECTR\tLOSTSL\tCACODM\tPNELEM\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       enemies[ Human], enemies[ Sergeant], enemies[ Commando], enemies[ Imp], enemies[ Demon],
	       enemies[ Spectre], enemies[ LostSoul], enemies[ CacoDmn], enemies[ PainElem]);
      printf( "\tMANCBS\tREVENT\tKNIGHT\t BARON\tARCHNO\tARVILE\tCYBERD\tSPIDER\tWOLFSS\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       enemies[ Mancubus], enemies[ Revenant], enemies[ Knight], enemies[ Baron], enemies[ Arachno],
	       enemies[ ArchVile], enemies[ CyberDmn], enemies[ SpiderBs], enemies[ Wolf3dSS]);
   }
   else
   {
      printf( "\n");
      printf( "PowrUps:CROSSB\tDRCLAW\tHLSTAF\tPHXROD\t  MACE\tGAUNTL\tBAGHLD\tSILVSH\tENCHSH\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       powrups[ Crossbow], powrups[ DrgnClaw], powrups[ HellStaf], powrups[ PhnixRod], powrups[ Mace],
	       powrups[ Gauntlts], powrups[ BagHold], powrups[ SilvShld], powrups[ EnchShld]);
      printf( "MYSTCU\tSHADOW\tRNGINV\tMAPSCR\tTOMEPW\tTMBOMB\tCHAOSD\t TORCH\t WINGS\tMROVUM\n");
      printf( "%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       powrups[ MystcUrn], powrups[ ShadwSph], powrups[ RingInvl], powrups[ MapScrol], powrups[ TomePowr],
	       powrups[ TimeBomb], powrups[ ChaosDev], powrups[ Torch], powrups[ Wings], powrups[ MorphOvm]);

      printf( "\n");
      printf( "Enemies:GARGOY\tFRGARG\t GOLEM\tGOLEMG\tNTGOLM\tNGOLMG\t WARRR\tWARRRG\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       enemies[ Gargoyl], enemies[ FGargoyl], enemies[ Golem], enemies[ GolemGh],
	       enemies[ NGolem], enemies[ NGolemGh], enemies[ Warrior], enemies[ WarriorG]);
      printf( "\tDISCIP\tSBCLAW\tWERDGN\tOPHIDN\tIRONLH\tMAULTR\tDSPARL\n");
      printf( "\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\t%6d\n",
	       enemies[ Disciple], enemies[ SabrClaw], enemies[ WrDragon], enemies[ Ophidian],
	       enemies[ IronLich], enemies[ MauloTr], enemies[ DSparil]);
   }

   /* clean up & free space */
   ForgetLevelData();
}