swwmgz_m/MAPPING.md

6.3 KiB

Notes for mappers

There's some useful functions that can be called from ACS using ScriptCall, these are documented below. (And, since they're static functions, they can be also called from ZScript as-is).

Toggling features

  • Store:
    ScriptCall("SWWMHandler","ToggleStore",#)
    Passing 0 disables the store, any other number will enable it again.
  • Reviving:
    ScriptCall("SWWMHandler","ToggleRevive",#)
    Passing 0 disables reviving, any other number will enable it again.

Note: These settings will persist between level changes.

Mission log

  • Adding a new entry:
    ScriptCall("SWWMMissionLog","AddLog","YOUR TEXT HERE")
    Prefixed LANGUAGE entries are supported.
  • Setting the date and time:
    ScriptCall("SWWMMissionLog","SetClock",year,month,day,hour,minute,"timezone")
    Note that month and day start counting from zero, not one (for programming-related reasons).
    Please use abbreviations for timezones (e.g.: EST, CET).

Dialogue sequences

It is now possible to create entirely new dialogue sequences. I have yet to document how this stuff works, as well as adding a proper interface for mappers, but if you're curious, all of the code is in the SWWMDialogues class.

Custom boss healthbars

Using ScriptCall("SWWMHandler","AddBoss",tid,"YOUR TAG HERE") you can assign a group of monsters that will be treated as a boss fight, with a collective healthbar. Note that each call to this function will clear any active boss encounters. Prefixed LANGUAGE entries can be set as a tag, and the mod can automatically look up an alternative with the "_FUN" suffix if "Fun Tags" are enabled, should there be one defined.

An optional boolean argument can be passed that flags the boss fight as an "end game" boss. This serves little purpose other than allowing one specific achievement ("Kill an end-game boss with the Ynykron") to work properly.

The tag argument is used for the name above the healthbar, so you can give the boss a custom title (e.g.: "Woobie, Destroyer of Worlds"). Passing an empty string will use whatever tag the first monster in the list has.

If the assigned boss is a "BossBrain" or a subclass of it, it will look for "BossEye" actors as well. This is so the healthbar appears only when the eye "sees" a player. Do note that if you have multiple boss eyes in the map (does anyone do that???), this may break as it will always use the first one.

UDMF properties

In order to make non-door sectors bustable, or to make some sectors non-bustable, you can give that sector a custom integer property named either BUSTABLE or UNBUSTABLE with a value of 1. Note that the latter takes priority over the former, so don't use both at once.

Placing items

DEMOLITIONIST does not have standard DoomEdNums assigned to any of its items by default, in order to avoid potential collisions with other custom maps, so you will have to set them yourself.

Copy the following to your MAPINFO:

DoomEdNums
{
	// Weapons
	29001 = "DeepImpact"
	29002 = "ExplodiumGun"
	29003 = "Spreadgun"
	29004 = "Wallbuster"
	29005 = "Eviscerator"
	29006 = "Hellblazer"
	29007 = "Sparkster"
	29008 = "SilverBullet"
	29009 = "CandyGun"
	29010 = "Ynykron"
	// DLC Weapons
	29011 = "ItamexHammer"
	29012 = "PlasmaBlast"
	29013 = "PuntzerBeta"
	29014 = "PuntzerGamma"
	29015 = "HeavyMahSheenGun"
	29016 = "Quadravol"
	29017 = "ModernSparkster"
	29018 = "RayKhom"
	29019 = "MisterRifle"
	29020 = "RafanKos"
	// Ammo
	29021 = "RedShell"
	29022 = "RedShell2"
	29023 = "RedShell4"
	29024 = "RedShell6"
	29025 = "GoldShell"
	29026 = "EvisceratorShell"
	29027 = "EvisceratorShell2"
	29028 = "EvisceratorShell3"
	29029 = "EvisceratorSixPack"
	29030 = "HellblazerMissiles"
	29031 = "HellblazerMissiles2"
	29032 = "HellblazerMissiles3"
	29033 = "HellblazerMissileMag"
	29034 = "SparkUnit"
	29035 = "SparkUnit2"
	29036 = "SilverBulletAmmo"
	29037 = "SilverBullets"
	29038 = "SilverBullets2"
	29039 = "SilverBullets3"
	29040 = "CandyGunAmmo"
	29041 = "CandyGunBullets"
	29042 = "CandyGunBullets2"
	29043 = "CandyGunBullets3"
	29044 = "YnykronAmmo"
	// DLC Ammo
	29045 = "SMW05Ammo"
	29046 = "SMW05Ammo2"
	29047 = "SMW05Ammo3"
	29048 = "SMW05SmallAmmo"
	29049 = "SMW05BigAmmo"
	29050 = "SheenAmmo"
	29051 = "SheenAmmo2"
	29052 = "SheenAmmo3"
	29053 = "SheenSmallAmmo"
	29054 = "SheenBigAmmo"
	29055 = "QuadravolAmmo"
	29056 = "QuadravolAmmo2"
	29057 = "QuadravolAmmo3"
	29058 = "SparksterBAmmo"
	29059 = "SparksterBAmmo2"
	29060 = "SparksterBAmmo3"
	29061 = "SparksterRAmmo"
	29062 = "SparksterRAmmo2"
	29063 = "SparksterRAmmo3"
	29064 = "RayBolt"
	29065 = "RayBolt2"
	29066 = "RayBolt5"
	29067 = "RayAmmo"
	29068 = "MisterRound"
	29069 = "MisterRound2"
	29070 = "MisterRound3"
	29071 = "MisterRound5"
	29072 = "MisterAmmo"
	29073 = "MisterGAmmo"
	29074 = "UltimatePod"
	29075 = "UltimateAmmo"
	// For Hexen
	29076 = "FabricatorTier1"
	29077 = "FabricatorTier2"
	29078 = "FabricatorTier3"
	29079 = "FabricatorTier4"
	// Backpack
	29080 = "HammerspaceEmbiggener"
	// Health
	29081 = "HealthNuggetItem"
	29082 = "TetraHealthItem"
	29083 = "CubeHealthItem"
	29084 = "RefresherItem"
	// Armor
	29085 = "ArmorNuggetItem"
	29086 = "BlastSuitItem"
	29087 = "WarArmorItem"
	// Powerups
	29088 = "GrilledCheeseSandwich"
	29089 = "GhostArtifact"
	29090 = "GravitySuppressor"
	29091 = "FuckingInvinciball"
	29092 = "Ragekit"
	29093 = "SWWMLamp"
	29094 = "EBarrier"
	29095 = "Mykradvo"
	29096 = "DivineSprite"
	29097 = "AngerySigil"
	//29098 = "BallsyBomb"
	//29099 = "SWWMSentryItem"
}

Notes:

  • Embiggeners can be "merged" by placing them all in the same exact position. This works for groups of 2, 4, 6 and 8.
  • Chanceboxes auto-spawn inside secret sectors as long as there's an unobstructed 32x32x60 space inside them.
  • It's possible to manually spawn chanceboxes and even collectibles, but this will have to be done through ZScript in a level postprocessor, as internally they already have DoomEdNums assigned (in the format 42069xx), but they're larger than 16 bits, so (most?) map editors can't use it.
  • Items have no "fallback sprites", so they're only visible as models in UDB.
  • Items with "shiny" materials (e.g. nuggets and health geodesics) will look dull since UDB can't use their shaders.
  • Some multi-skinned models may render incorrectly or have missing parts in UDB due to MODELDEF parsing quirks. This can be noticed from the warnings that will be logged on load.