ChangeLevel (ZScript)

From ZDoom Wiki
Jump to navigation Jump to search
Note: This feature is for ZScript only.

struct LevelLocals
Void ChangeLevel(String LevelName, Int Position, Int Flags, Int Skill);


Changes the level the player is in, similar to the ChangeLevel ACS function.


  • String LevelName
The name of the level to change to.
  • Int Position
The player start spot to start the new level at.
  • Int Flags
The flags to use for the level change. This is the list of possible flags, to combine them, use the | seperator.
    • CHANGELEVEL_KEEPFACING: The player spawns in the new level retaining the same, pitch, angle, and roll they had before the function was called.
    • CHANGELEVEL_RESETINVENTORY: Reset the players' inventory to the defaults for their player class.
    • CHANGELEVEL_NOMONSTERS: Remove all the monsters from the level the player enters.
    • CHANGELEVEL_CHANGESKILL: Change the skill level of the level.
    • CHANGELEVEL_NOINTERMISSION: Don't show the intermission screens between the previous level and the one being entered.
    • CHANGELEVEL_RESETHEALTH: Reset the players' health to the default for their player class.
  • CHANGELEVEL_PRERAISEWEAPON: Start the level with the players' weapon already raised.
  • Int Skill
Changes the skill level of the map that will be entered.

(Need more info)


Below is the code for a Cyberdemon that when killed, changes the current level to a level with the name of "FinalMap", and resets the players' inventory and health.

Class SuperDuperCyberdemon : Cyberdemon
		Health 10000;
		DamageMultiply 2.0;
		Scale 2.0;
		Radius 80;
		Height 220;
		PainChance 10;
		Speed 6;
	Bool BeginLevelExitTimer; //If set to true, the timer below will increment every tick.
	Int ExitTimer; //The timer used to give a delay to the Cyberdemon changing the level.
	Override Void Die (Actor Source, Actor Inflictor, Int DmgFlags, Name MeansOfDeath)
		Super.Die (Source, Inflictor, DmgFlags, MeansOfDeath);
		BeginLevelExitTimer = True;
		Return Super.Die (Source, Inflictor, DmgFlags, MeansOfDeath);
	Override Void Tick()
		If (BeginLevelExitTimer)
			ExitTimer++; //Increment the timer.
		If (ExitTimer >= 35*5)