Page 1 of 1

How to make a invasion map?

Posted: Sat Sep 29, 2012 12:02 am
by Camo Yoshi
I wasn't really able to find any good info regarding this, could someone point me in the right direction on a tutorial of sorts? Much appreciated.

RE: How to make a invasion map?

Posted: Sat Sep 29, 2012 12:08 am
by ibm5155
sorry i really don´t remember how to, but it have on doom builder 2, skulltag doom in hexen format (i think) the invasion monsters, they got some simple arguments like
how many of them will be spawed, what round´ll start and what´ll end.

RE: How to make a invasion map?

Posted: Sat Sep 29, 2012 3:50 am
by UnTrustable
Back in 2007 i learned it this way. It gives you alot oversight what does do what, if you know what i mean.
Sure there are ways to shorten these scripts into smaller pieces of codes.
I have no idea what Doom Builder 2 has onboard or can do things for you automaticly..?
I'm here to discuss this in the old DoomBuilder. (DB1)

In XWE, SlumpEd or Slade3
Make a lump named: CMPGNINF and write in it:

Code: Select all

{
mapname = YOURMAP1
gamemode = invasion
wavelimit = 5
}
Make a lump named: MAPINFO and write in it:

Code: Select all

clearepisodes

episode YOURMAP1
name "Your Invasion"

episode MAP01
name "Doom 2 : Hell On Earth"

map YOURMAP1 "Mission : X"
next YOURMAP2
sky1 stsky9 0.3 // just an example :)
music xxxxxxxx
In DoomBuilder's (Skulltag in Hexen format) Scripts:

Code: Select all

#include "zcommon.acs"

Script 1 OPEN // MAP BEHAVIOR DURING WAVES

{
    While(GetInvasionState() != IS_WAVECOMPLETE || GetInvasionWave() != 1) Delay(35*1); // After wave 1
    ACS_Execute(50, 0);

	while (GetInvasionWave() != 1 || GetInvasionState() != IS_COUNTDOWN) Delay(35*1);   // Going to wave 2
	ACS_Execute(51, 0);
	    
	While(GetInvasionState() != IS_WAVECOMPLETE || GetInvasionWave() != 2) Delay(35*1); // After wave 2
	ACS_Execute(52, 0);
	
	while (GetInvasionWave() != 2 || GetInvasionState() != IS_COUNTDOWN) Delay(35*1);   // Going to wave 3
	ACS_Execute(53, 0);
	    
	While(GetInvasionState() != IS_WAVECOMPLETE || GetInvasionWave() != 3) Delay(35*1); // After wave 3
	ACS_Execute(54, 0);
	
	while (GetInvasionWave() != 3 || GetInvasionState() != IS_COUNTDOWN) Delay(35*1);   // Going to wave 4
	ACS_Execute(55, 0);
	    
	While(GetInvasionState() != IS_WAVECOMPLETE || GetInvasionWave() != 4) Delay(15*1); // After wave 4
	ACS_Execute(56, 0);
	
	while (GetInvasionWave() != 4 || GetInvasionState() != IS_COUNTDOWN) Delay(35*1);   // Going to wave 5
	ACS_Execute(57, 0);
	    
	While(GetInvasionState() != IS_WAVECOMPLETE || GetInvasionWave() != 5) Delay(15*1); // After wave 5
	ACS_Execute(58, 0);
}

++++++++++++++++++++++++++++++++++++++++++++++++++


But now-a-days i do it this way since i left the Skulltag system.
DoomBuilder (ZDoom in Hexen format)

Code: Select all

#include "zcommon.acs"

Int Wave = 1;
Int WellDone = 0; // WellDone prevents this script to go on continuesly running to the next waves...


Script 10 OPEN
{
If (Wave == 1 && WellDone == 0)
  {
  // Wave 1
  WellDone = 1; 
  Acs_Execute (50, 0, 0, 0, 0);
  Delay(10);
  }
If (Wave == 2 && WellDone == 0)
  {
  // Wave 2
  WellDone = 1;
  Acs_Execute (51, 0, 0, 0, 0);
  Delay(10);
  }
If (Wave == 3 && WellDone == 0)
  {
  // Wave 3
  WellDone = 1;
  Acs_Execute (52, 0, 0, 0, 0);
  Delay(10);
  }
If (Wave == 4 && WellDone == 0)
  {
  // Wave 4
  WellDone = 1;
  Acs_Execute (53, 0, 0, 0, 0);
  Delay(10);
  }
If (Wave == 5 && WellDone == 0)
  {
  // Wave 5
  WellDone = 1;
  Acs_Execute (54, 0, 0, 0, 0);
  Delay(10);
  }
Delay(35);
Restart;
}

Script 50 (void) // Wave 1
{
Delay(245);
SetFont("BIGFONT");
HudMessage(s:"Starting in 10..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 9..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 8..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 7..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 6..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 5..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 4..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 3..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 2..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
HudMessage(s:"Starting in 1..."; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 1.0, 0.05, 1.0);
Delay (35);
SpawnSpot ("BaronOfHell", 1, 999);
Delay(20);
ACS_Execute(299, 0, 0, 0, 0); // start monster counter
}

Script 299 (void) // Monsters counter - Experimental. Normally Skulltag does the monster counting in invasion mode...
{
SetFont("BIGFONT");
HudMessageBold(s: "Monsters left: ", d:ThingCount(0, 999);
                HUDMSG_PLAIN, 0, CR_Red, -0.0, -0.75, 1.0, 0.03, 0);
If ( (ThingCount(0, 999)) == 0 )
  {
  SetFont("BIGFONT");
  HudMessage(s:"Well Done...!"; HUDMSG_PLAIN, 1, CR_RED, 0.5, 0.5, 2.5, 0.05, 1.0);
  Delay(10);
  Wave = Wave + 1;
  WellDone = 0;
  Delay(10);
  Acs_Terminate (299, 0);
  }
Delay(const:35);
Restart;
}
You can always seperate the 10 seconds countdown into its own Script.
I just thought things would be easier to understand to put the countdown into the same script.
I hope this will give you a head start. Good luck !

RE: How to make a invasion map?

Posted: Sat Sep 29, 2012 4:54 am
by Camo Yoshi
Thanks, I'll try this once I have some more time on my hands and see how it'll work.