diff --git a/MAPPING.md b/MAPPING.md index 8aa8e2057..325d0146c 100644 --- a/MAPPING.md +++ b/MAPPING.md @@ -22,6 +22,10 @@ The tag argument is used for the name above the healthbar, so you can give the b 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. diff --git a/language.version b/language.version index b055e5b9a..3131be5c0 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r594 \cu(Fri 28 Oct 17:36:03 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r594 \cu(2022-10-28 17:36:03)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r595 \cu(Sun 30 Oct 22:39:32 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r595 \cu(2022-10-30 22:39:32)\c-"; diff --git a/zscript/weapons/swwm_cbt_fx.zsc b/zscript/weapons/swwm_cbt_fx.zsc index 3a624c66e..93b6a1771 100644 --- a/zscript/weapons/swwm_cbt_fx.zsc +++ b/zscript/weapons/swwm_cbt_fx.zsc @@ -422,8 +422,11 @@ Class BusterWall : Thinker hp = 0; } else return false; // this isn't a valid hit, needs to be world geometry + bool bBustable = (level.GetUDMFInt(level.UDMF_Sector,hs.Index(),'BUSTABLE')>0); + bool bUnbustable = (level.GetUDMFInt(level.UDMF_Sector,hs.Index(),'UNBUSTABLE')>0); // Check if it's a door - if ( !swwm_cbtall && !SWWMUtility.IsDoorSector(hs,hp) ) return false; + if ( !swwm_cbtall && (bUnbustable || (!bBustable && !SWWMUtility.IsDoorSector(hs,hp))) ) + return false; let ti = ThinkerIterator.Create("BusterWall",STAT_USER); BusterWall iter, bust = null; while ( iter = BusterWall(ti.Next()) )