Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Impie

intermission tutorials

Recommended Posts

A collection of detailed DECORATE intermission tutorials would be really grand. I haven't been able to find one, and I'm trying to make a custom cast intermission in MAPINFO, but I don't know how to properly set it up.

Or else a wad that uses a custom cast definition I can study. The wiki only has a single entry and doesn't demonstrate how to set up the whole thing. Unless that example IS everything you need to do, in which case I don't know why it's going to the default Doom 2 cast sequence, nor how to change the music or background image.

First version looked like this and went to the Doom 2 default cast instead.

Spoiler

Intermission "Val3DCast"
{
  Cast
  {
  CastClass = "GestapoBitch"
  CastName = "Shieldmaiden"
  AttackSound = "Missile", 1, "bitch/shoot"
  AttackSound = "MissileSuper", 1, "bitch/attack"
  
  CastClass = "Redhead"
  CastName = "Stepchild"
  AttackSound = "Missile", 1, "redhead/shoot"
  AttackSound = "MissileSuper", 1, "redhead/attack"
  
  CastClass = "Amazon"
  CastName = "Amazon Force Commando"
  AttackSound = "Missile", 1, "amazon/shoot"
  
  CastClass = "Mommybot"
  CastName = "MommyBot"
  AttackSound = "Missile", 1, "mbot/attack"
  
  CastClass = "Eunuch"
  CastName = "Eunuch"
  AttackSound = "Missile", 1, "eunuch/shoot"
  
  CastClass = "Fenris"
  CastName = "Fenris Attack Dog"
  AttackSound = "Melee", 1, "fenris/attack"
  
  CastClass = "DoctorBitch"
  CastName = "Jotun Vampire Doc"
  AttackSound = "Missile", 1, "doc/shoot"
  
  CastClass = "Juggernaut"
  CastName = "Juggernaut"
  AttackSound = "Melee", 1, "juggernaut/attack"
  
  CastClass = "Einherjar"
  CastName = "Einherjar"
  AttackSound = "Missile", 1, "sjug/shoot"
  AttackSound = "MissileSuper", 1, "sjug/loadin"
  
  CastClass = "Rourke"
  CastName = "The Rourke Sisters"
  AttackSound = "Missile", 1, "rourke/shoot"
  AttackSound = "MissileSuper", 1, "rourke/attack"
  
  CastClass = "Althea"
  CastName = "Bloody Althea Rourke"
  AttackSound = "Missile", 1, "althea/shoot"
  
  CastClass = "DrGaul"
  CastName = "Dr. Gaul"
  AttackSound = "Missile", 1, "gaul/attack"
  }
}

So I tried doing it this way next, and it says the line with "music" is expecting { but got = instead. Error message that stops loading the mod. Tried several variations of this, but without the Cast subgroup it gives the error. And with the subgroup it goes to the wrong thing.
Spoiler

Intermission "Val3DCast"
{
  music = "BGMCONV"
  background = "titlepic"
  
  CastClass = "GestapoBitch"
  CastName = "Shieldmaiden"
  AttackSound = "Missile", 1, "bitch/shoot"
  AttackSound = "MissileSuper", 1, "bitch/attack"
  
  CastClass = "Redhead"
  CastName = "Stepchild"
  AttackSound = "Missile", 1, "redhead/shoot"
  AttackSound = "MissileSuper", 1, "redhead/attack"
  
  CastClass = "Amazon"
  CastName = "Amazon Force Commando"
  AttackSound = "Missile", 1, "amazon/shoot"
  
  CastClass = "Mommybot"
  CastName = "MommyBot"
  AttackSound = "Missile", 1, "mbot/attack"
  
  CastClass = "Eunuch"
  CastName = "Eunuch"
  AttackSound = "Missile", 1, "eunuch/shoot"
  
  CastClass = "Fenris"
  CastName = "Fenris Attack Dog"
  AttackSound = "Melee", 1, "fenris/attack"
  
  CastClass = "DoctorBitch"
  CastName = "Jotun Vampire Doc"
  AttackSound = "Missile", 1, "doc/shoot"
  
  CastClass = "Juggernaut"
  CastName = "Juggernaut"
  AttackSound = "Melee", 1, "juggernaut/attack"
  
  CastClass = "Einherjar"
  CastName = "Einherjar"
  AttackSound = "Missile", 1, "sjug/shoot"
  AttackSound = "MissileSuper", 1, "sjug/loadin"
  
  CastClass = "Rourke"
  CastName = "The Rourke Sisters"
  AttackSound = "Missile", 1, "rourke/shoot"
  AttackSound = "MissileSuper", 1, "rourke/attack"
  
  CastClass = "Althea"
  CastName = "Bloody Althea Rourke"
  AttackSound = "Missile", 1, "althea/shoot"
  
  CastClass = "DrGaul"
  CastName = "Dr. Gaul"
  AttackSound = "Missile", 1, "gaul/attack"
}

Any help would be appreciated. Thanks in advance.

Share this post


Link to post

Here is the full intermission definition of Doom 2's cast screen after MAP30. Note that the intermission name isn't within quotes, that Music and Background is within an Image sub-block, each actor in the cast is within its own Cast sub-block, and that the first intermission being called is Inter_Cast and it only initializes the music and background before linking to the actual Doom2Cast intermission.

Spoiler

Intermission Inter_Cast
{
	Image
	{
		// This is only here to initialize the background and the music
		Background = "$bgcastcall"
		Time = -1
		Music = "$MUSIC_EVIL"
	}
	Link = Doom2Cast
}

Intermission Doom2Cast
{
	Cast
	{
		CastClass = "Zombieman"
		CastName = "$CC_ZOMBIE"
		AttackSound = "Missile", 1, "grunt/attack"
	}
	Cast
	{
		CastClass = "ShotgunGuy"
		CastName = "$CC_SHOTGUN"
		AttackSound = "Missile", 1, "shotguy/attack"
	}
	Cast
	{
		CastClass = "ChaingunGuy"
		CastName = "$CC_HEAVY"
		AttackSound = "Missile", 1, "chainguy/attack"
		AttackSound = "Missile", 2, "chainguy/attack"
		AttackSound = "Missile", 3, "chainguy/attack"
	}
	Cast
	{
		CastClass = "DoomImp"
		CastName = "$CC_IMP"
		AttackSound = "Missile", 2, "imp/attack"
	}
	Cast
	{
		CastClass = "Demon"
		CastName = "$CC_DEMON"
		AttackSound = "Melee", 1, "demon/melee"
	}
	Cast
	{
		CastClass = "LostSoul"
		CastName = "$CC_LOST"
		AttackSound = "Missile", 1, "skull/melee"
	}
	Cast
	{
		CastClass = "Cacodemon"
		CastName = "$CC_CACO"
		AttackSound = "Missile", 1, "caco/attack"
	}
	Cast
	{
		CastClass = "HellKnight"
		CastName = "$CC_HELL"
		AttackSound = "Missile", 1, "baron/attack"
	}
	Cast
	{
		CastClass = "BaronOfHell"
		CastName = "$CC_BARON"
		AttackSound = "Missile", 1, "baron/attack"
	}
	Cast
	{
		CastClass = "Arachnotron"
		CastName = "$CC_ARACH"
		AttackSound = "Missile", 1, "baby/attack"
	}
	Cast
	{
		CastClass = "PainElemental"
		CastName = "$CC_PAIN"
		AttackSound = "Missile", 2, "skull/melee"
	}
	Cast
	{
		CastClass = "Revenant"
		CastName = "$CC_REVEN"
		AttackSound = "Missile", 1, "skeleton/attack"
		AttackSound = "Melee", 1, "skeleton/swing"
		AttackSound = "Melee", 3, "skeleton/melee"
	}
	Cast
	{
		CastClass = "Fatso"
		CastName = "$CC_MANCU"
		AttackSound = "Missile", 1, "fatso/attack"
		AttackSound = "Missile", 4, "fatso/attack"
		AttackSound = "Missile", 7, "fatso/attack"
	}
	Cast
	{
		CastClass = "Archvile"
		CastName = "$CC_ARCH"
		AttackSound = "Missile", 1, "vile/start"
	}
	Cast
	{
		CastClass = "SpiderMastermind"
		CastName = "$CC_SPIDER"
		AttackSound = "Missile", 1, "spider/attack"
		AttackSound = "Missile", 2, "spider/attack"
	}
	Cast
	{
		CastClass = "Cyberdemon"
		CastName = "$CC_CYBER"
		AttackSound = "Missile", 1, "weapons/rocklf"
		AttackSound = "Missile", 3, "weapons/rocklf"
		AttackSound = "Missile", 5, "weapons/rocklf"
	}
	Cast
	{
		CastClass = "DoomPlayer"
		CastName = "$CC_HERO"
		AttackSound = "Missile", 0, "weapons/sshotf"
	}
	Link = Doom2Cast	// restart cast call
}

Finally, don't forget to use the EndSequence command in your map definition to actually send the engine to the desired intermission after a specific map ends. Here, the intermission name is within quotes.
map <maplump> <nice name> {
    ...
    Next = endsequence, "<intermission sequence>"
}

Share this post


Link to post

Thanks a ton, scifista. I think I have a much better understanding of how this stuff works now.

Share this post


Link to post

Any idea why certain characters might flicker during their walk animations in this sequence? I can't find anything wrong with the decorate code, nor any missing frames. All the sprite names match the appropriate names in the decorate code, too (SGARA1, SGARA2A8, etc).

Spoiler

  States
  {
  Spawn:
    SGAR A 10 A_Look
    Loop
  See:
    TNT1 B 0 A_JumpIfHealthLower (45, "Run")
    SGAR BBCCDDEE 3 A_Chase
    Loop
  Run:
    SGAR BBCCDDEE 2 A_Chase
    Loop
  Missile:
    SGAR F 4 A_Jump(128,2)
    SGAR F 4 A_JumpIfHealthLower(45, "MissileSuper") // Don't user super attack until damaged at least once.
    SGAR F 3 A_FaceTarget
    SGAR G 3 BRIGHT A_CustomMissile("eunuchfireball", 32, 0, 0)
    SGAR F 4
    Goto See
  MissileSuper:
    SGAR F 6 A_FaceTarget
    SGAR G 3 BRIGHT A_CustomMissile("eunuchfireball", 32, 0, 0)
	SGAR F 6 A_FaceTarget
	SGAR G 3 BRIGHT A_CustomMissile("eunuchfireball", 32, 0, 0)
	SGAR F 8 
    Goto See
  Pain:
    SGAR H 8 A_Pain
	Goto See
  Death:
    SGAR I 7 A_Scream
    SGAR J 7 A_NoBlocking
    SGAR KLM 7
    SGAR M -1
    Stop
  }

EDIT: On closer inspection, the character in question is briefly turning into the "pool of blood and bones" graphic during the walk cycle, whereas before it was just blinking out of existence. I don't think that sprite has the same name as this enemy sprite, does it?

EDIT2: Problem persists after changing the sprite names. I got rid of the blood sprite by redoing the sprites so that A through D are the walk animations and removing the standing frame altogether, but he still blinks when walking.

Share this post


Link to post

Change the TNT1 frames to the matching sprite name for the actor. I had the same problem, and this fixed it.

Share this post


Link to post

Weird, it's never done that before. Is TNT deprecated?

You were right, of course. It's fine now. Thanks for the tip!

Also, your avatar is giving me cavities.

Share this post


Link to post

The wiki says nothing about it in regards to cast calls, so I wonder if maybe it's a bug. Since TNT1 frames are typically 0 duration, they shouldn't display at all, but they are obviously showing for a long enough amount of time to be visually apparent.

Share this post


Link to post

Could you post a whole wad where this issue with invisible sprites happens? To identify the cause, I might need to see more than just the DECORATE code, not to mention I need a real wad to test any theories instead of just guessing.

Share this post


Link to post

Here's a WAD: Cast Call Bug

Just load MAP01 and hit the switch. The zombieman has a single TNT1 frame in the middle of his walking animation. You should be able to see him flicker once per cycle.

Share this post


Link to post

Aha, so it only happens during the cast sequence. That explains it, because the cast sequence procedure processes states (their durations, actions, etc.) differently (more simply) than the engine does during normal play. It apparently doesn't handle 0-duration states as "immediately skip to next frame" and displays them for one tic instead.

Share this post


Link to post
scifista42 said:

Aha, so it only happens during the cast sequence. That explains it, because the cast sequence procedure processes states (their durations, actions, etc.) differently (more simply) than the engine does during normal play. It apparently doesn't handle 0-duration states as "immediately skip to next frame" and displays them for one tic instead.

That's sorta what I was thinking. I'll have to just deal with it I guess.

Thanks for the link, too. Sometimes I have a tough time finding my way around the wiki.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
×