1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

A few questions about (old) entities

Discussion in 'Maps' started by MS:C community, Sep 6, 2017.

  1. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    I'm currently merging the Half-Life FGD from J.A.C.K. with the FGDs from MS:C. I've encountered a few entities that obviously aren't necessary:
    • mstrig_multi is made obsolete by multi_manager
    • mstrig_push is made obsolete by trigger_push

    ...but there are a few others I have my doubts about. Here's what I think:
    • mstrig_relay is made obsolete by trigger_relay
    • ms_npcscript is made obsolete by mstrig_act

    ==== ==== ==== ==== ==== ==== ==== ====

    Looking at the relay entities, I see that mstrig_relay has no 'killtarget' (part of BaseClass Targetx), 'master' and 'scriptevent' keys, which makes it vastly less useful than trigger_relay.
    Code:
    @PointClass base(Targetname,mstarget) = mstrig_relay : "Trigger Relay"
    [
        spawnflags(flags) =
        [
            1: "Remove On fire" : 0
        ]
        triggerstate(choices) : "Trigger State" : 0 =
        [
            0: "Off"
            1: "On"
            2: "Toggle"
        ]
        random(string) : "Fire Chance (%)" : "100"
        delay(string) : "Delay before trigger" : "0"
    ]
    vs.
    Code:
    @PointClass base(Targetname, Targetx) = trigger_relay : "Trigger Relay"
    [
        scriptevent(string): "Scripted Event"
        spawnflags(flags) =
        [
            1: "Remove On fire" : 1
        ]
        triggerstate(choices) : "Trigger State" : 0 =
        [
            0: "Off"
            1: "On"
            2: "Toggle"
        ]
        random(string) : "Fire Chance (%)" : "100"
        master(string) : "Master"
    ]
    Can I omit mstrig_relay or am I missing something?

    ==== ==== ==== ==== ==== ==== ==== ====

    As for the NPC controllers:
    Code:
    @PointClass base(Targetname) = ms_npcscript : "NPC Script"
    [
        target(string) : "Monster Name"
        type(choices) : "Type" : 0 =
        [
            0 : "Move"
            1 : "Play Anim"
            2 : "Run Script Event"
            3 : "Move, then Play Anim"
            4 : "Move, then Run Script Event"
        ]
        moveanim(string) : "Move Anim"
        actionanim(string) : "Action Anim"
        eventname(string) : "Script Event"
        firewhendone(string) : "Fire, when finished"
        firedelay(string) : "Fire Delay" : "0"
        stopai(choices) : "Disable Monster AI" : 0 =
        [
            0 : "No"
            1 : "Yes"
        ]
    ]
    vs.
    Code:
    @PointClass base(Targetname) = mstrig_act : "NPC Action"
    [
        target(string) : "Monster Name"
        type(choices) : "Type" : 0 =
        [
            0 : "Move"
            1 : "Play Anim"
            2 : "Run Script Event"
            3 : "Move, then Play Anim"
            4 : "Move, then Run Script Event"
        ]
        moveanim(string) : "Move Anim"
        actionanim(string) : "Action Anim"
        eventname(string) : "Script Event"
        firewhendone(string) : "Fire, when finished"
        firedelay(string) : "Fire when finished Delay" : "0"
        fireonbreak(string) : "Fire, if AI interrupts me"
        stopai(choices) : "Disable Monster AI" : 1 =
        [
            0 : "No"
            1 : "Yes"
        ]
    ]
    Seems like mstrig_act has marginally more functionality than ms_npcscript, but I doubt these two still get used to begin with.

    ==== ==== ==== ==== ==== ==== ==== ====

    Something else I've been wondering:
    Code:
    // = JAN2010
    // - Point class version of trigger_counter (ms_counter)
    Why wasn't game_counter used instead?
    Code:
    @PointClass base(Targetname, Targetx) = game_counter : "Fires when it hits limit"
    [
        spawnflags(flags) =
        [
            1: "Remove On fire" : 0
            2: "Reset On fire" : 1
        ]
        master(string) : "Master"
        frags(integer) : "Initial Value" : 0
        health(integer) : "Limit Value" : 10
    ]
    If it were to support 'scriptname', 'scriptevent', 'reqhp' and such, it'd be even more useful than ms_counter. The 'master' key for ms_counter is commented out in the FGD (I vaguely recall it not working) and in addition, game_counter can be altered by game_counter_set.

    ==== ==== ==== ==== ==== ==== ==== ====

    Another question: Is mstrig_stopspawn still used? I can only assume this comes from a time before it was possible to just remove spawn areas (without the infamous 'gibbing' issue) by means of killtarget.
     
  2. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    There's several alias entities, or entities that have aliases where they are set up as point entities instead of brush entities, and visa-versa. Doesn't actually add any resource usage - just clutters the FGD a bit. Seems some of those aliases need updating.

    ms_counter/trigger_counter does not have scriptevent functionality - could maybe be added, though it's simple enough to trigger a relay for the same effect. game_counter seems to attempt to save as a global, looking at the code, which could cause issues after reloading the map, though it does have the advantage that you can use game_counter_set to set a specific counter - not sure if that'd still work when pointed at another counter type.

    Never actually noticed the mstrig_act alias. Not even sure what "Fire, if AI interrupts me" does, or how the AI would interrupt it.

    I *think* mstrig_stopspawn still works, but I'm not absolutely sure. I wanted to rig it up so one could use it to stop and later restart a monster spawner by triggering mstrig_stopspawn again.

    Do wish we could tweak this FGD to get rid of all the "X has unused properties" errors though.
     
  3. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    Some of these alias entities, like mstrig_multi, are pointless though. I never really understood why aliases of perfectly functional entities were added.

    And sometimes one entity gets extra functionality added to it but the alias gets overlooked -- see mstrig_relay vs. trigger_relay in the original post. Keeping track of changes to single entities is much easier than keeping track of changes to pairs (or more) of (nearly) identical entities, let alone implementing them.

    Are you sure about this? They both inherit properties from BaseClass Trigger, which includes the 'scriptevent' key (but yes, I know that doesn't imply actual functionality in-game). This is even weirder in the case of ms_counter because that's a point-based entity and some stuff in BaseClass Trigger is meant specifically for brush-based entities. game_counter does support global settings, it's true, but wouldn't you need env_global entities for that?

    Maybe I can do some testing with game_counter once I finish writing this FGD. If it works without errors, I sure would advocate using that instead of ms_counter because of the aforementioned reasons.

    ==== ==== ==== ==== ==== ==== ==== ====

    Something else I noticed: msarea_music has a 'master' key but mstrig_music does not. Now I haven't bothered playing with these entities yet, but if one of them were to rely on the other in the FGD, editing one would copy all relevant properties to the other. I've already whipped up something like this for msarea_monsterspawn and ms_monsterspawn:
    Code:
    @PointClass base(TARGETNAME) = ms_monsterspawn : "Monster Spawn"
    [
        spawnstart(choices) : "Start spawning" : 1 =
        [
            0 : "Upon map start"
            1 : "Only when triggered"
        ]
        resetwhen(choices) : "Reset When" : 0 =
        [
            0 : "All monsters are depleted"
            1 : "Any monster is depleted"
            2 : "Whenever triggered"
        ]
        fireallperish(target_destination) : "Fire when depleted (buggy)"
        reqhp(string) : "Req. Total HP (min;max)" : 0
        nplayers(integer) : "Require Players" : 1
        params(string) : "Pass AddParams"
    ]
    and
    Code:
    @SolidClass base(ms_monsterspawn, ZHLT_RENDERLESS) = msarea_monsterspawn : "Monster Spawn Area"
    [
        spawnloc(choices) : "Monster Spawn Location" : 0 =
        [
            0 : "At monster placement"
            1 : "Random, within box"
        ]
    ]
    Looks so much better when stuff like this is consolidated. And it works like a charm, too!

    Anyway, this point is moot if mstrig_music doesn't support the 'master' key to begin with, code-side... So, does it?

    ==== ==== ==== ==== ==== ==== ==== ====

    And lastly, in my 15+ hour adventure of cross-referencing FGD files and trying to figure out what can be removed, ms_text vs. game_text.
    Code:
    @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = ms_text : "Text Message"
    [
        spawnflags(flags) =
        [
            1: "All Players" : 1
        ]
    
        message(string) : "Message Text"
        sayasnpc(Choices) : "Say as NPC" : 0 =
        [
            0 : "No"
            1 : "Yes"
        ]
        npcname(string) : "NPCs Name"
    
    ]
    vs.
    Code:
    @PointClass base(Targetname, Target) size(-8 -8 -8, 8 8 8) = game_text : "HUD Text Message"
    [
        spawnflags(flags) =
        [
            1: "All Players" : 1
        ]
    
        message(string) : "Message Text"
        master(string) : "Master (Untested)"
    ]
    I realize that my desire to have a 'clean' FGD (with as few duplicates as possible, unless they're point-based / brush-based duplicates) is bordering on the fetishistic, but could you please add the 'sayasnpc' and 'npcname' functionality to game_text, and then continue to improve on that entity (if need be) instead? Also, game_text does support the 'master' key.

    ==== ==== ==== ==== ==== ==== ==== ====

    Unlike Hammer, J.A.C.K. doesn't start bitching if you add an undefined key to an entity. So my suggestion would be: Switch to J.A.C.K. because there's a brand new FGD inbound.
     
  4. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    Jack might let you get away with that, but Hammer won't. It needs separate definitions for point and brush entities.

    Rather have the duplicates for folks who are using the ms_ conventions for consistency rather than the classic Half-Life entities (not to mention the headaches that'd result loading old maps if the duplicates were removed). I think the initial intent was to supplant all modified Half-Life entities (or perhaps just all of them) with ms entities, but the effort seemed to be abandoned half way through.

    Game_Counter is indeed an entirely different entity in the code from ms_counter, and uses quite a bit more overhead. It'll attempt to save whether env_global is set or not.

    mstrig_music and msrea_music are also separate entities. mstrig_music does not support a master. Also, same issue with the brush/point entity and when loading old maps.

    game_text did not work in MSC, and was redirected to ms_text. They should probably be re-rigged to share the same entry/properties (ie. those of ms_text). ms_text does not support a master.
     
  5. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    This is incorrect. msarea_monsterspawn only inherits headers and keyvalues from ms_monsterspawn; it does not inherit the point-based property.

    To show this, I modified ms1.4.fgd and screenshotted the results in Hammer (see below). Note that, in order to get this to work, ms_monsterspawn must be defined before msarea_monsterspawn in the FGD, like so:
    Code:
    @PointClass base(Targetname) size(-16 -16 -16, 16 16 16) color(0 255 0) = ms_monsterspawn : "Monster Spawn" [
    //    spawnloc(choices) : "Monster Spawn Location" : 0 =
    //    [
    //        0 : "At monster placement"
    //        1 : "Random, within box"
    //    ]
        spawnstart(choices) : "Start spawning" : 1 =
        [
            0 : "Upon map start"
            1 : "Only when triggered"
        ]
        resetwhen(choices) : "Reset When" : 0 =
        [
            0 : "All monsters are depleted"
            1 : "Any monster is depleted"
            2 : "Whenever triggered"
        ]
        fireallperish(string) : "Fire when depleted (buggy)"
        reqhp(string): "Req. Total HP (min;max)" : 0
        nplayers(integer): "Require Players" : 0
        params(string) : "Pass AddParams"
    ]
    and
    Code:
    @SolidClass base(ms_monsterspawn,MSRenderless) = msarea_monsterspawn : "Monster Spawn area" [
        spawnloc(choices) : "Monster Spawn Location" : 0 =
        [
            0 : "At monster placement"
            1 : "Random, within box"
        ]
    ]
    Here (img01, img02) are screenshots of the two entities in-editor. The outline for the msarea_monsterspawn is green instead of pink because the color() header is inherited.

    If you remove this header in ms_monsterspawn, the msarea_monsterspawn will show up with the familiar pink outline (img03).
    • con: ...but so will the ms_monsterspawn, of course.
    • pro: Defining the color() header for brush-based entities overrides VisGroup colours so this might be used to your advantage instead...!

    Anyway, thanks for all the useful info in your post. Very helpful!

    If you still need help with the "unused keyvalues" error, just let me know. Although I could've sworn we fixed a whole slew previous time :confused:
     
    Last edited: Sep 7, 2017
  6. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    Hrmmm... I might be thinking of way back when I decided to try to define msarea_monsterspawn as both a point and brush entity and it wouldn't take, so, once we had the code, I added ms_monsterspawn.

    Most of that seems to be applied, but I still get a whole slew of them.

    Personally, I'm also using a "vhlt.fgd" which adds a bunch more - some of which I can't figure why they are triggering it, such as func_detail.

    Though, looking at that old doc, I think I'm going to add VHLTcopymodel/light to RenderFX in the half-life FGD, as I think it applies to anything that uses it.
     
  7. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    Would you mind sharing this FGD file and/or keyvalues of offending entities, if you have time?
     
  8. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    It's the same ZHLT.fgd that comes with VHLT v33.
    Code:
    
    // light_shadow
    // It creates toggleable shadow for func_door, func_breakable, ...
    @PointClass color(255 255 0) = light_shadow : "Dynamic shadow control"
    [
        // Control the shadow of this solid entity.
        // The solid entity must have 'Opaque' set in its lightflags.
        target(target_destination) : "Target solid entity"
        // Switch the light_shadow on/off will cause shadow to disappear/appear.
        targetname(target_source) : "Name"
        style(choices) : "Appearance (no name allowed)" : "" =
        [
            "" : "Normal"
            10: "Fluorescent flicker"
            2 : "Slow, strong pulse"
            11: "Slow pulse, noblack"
            5 : "Gentle pulse"
            1 : "Flicker A"
            6 : "Flicker B"
            3 : "Candle A"
            7 : "Candle B"
            8 : "Candle C"
            4 : "Fast strobe"
            9 : "Slow strobe"
            12 : "Underwater mutation"
        ]
        pattern(string) : "Custom Appearance"
        convertto(choices) : "Classname in game" : "light" =
        [
            "light" : "light"
            "light_spot" : "light_spot"
        ]
        spawnflags(flags) =
        [
            1 : "Initially dark" : 0
            2048 : "Not in Deathmatch" : 0
        ]
    ]
    
    // light_bounce
    // Use as complement for light_shadow.
    @PointClass color(255 255 0) = light_bounce : "Bounce light control"
    [
        // Control the light bounced from this solid entity.
        target(target_destination) : "Target solid entity"
        // When the targeted entity disappear, switch on the light_shadow and switch off the light_bounce at the same time.
        targetname(target_source) : "Name"
        style(choices) : "Appearance (no name allowed)" : "" =
        [
            "" : "Normal"
            10: "Fluorescent flicker"
            2 : "Slow, strong pulse"
            11: "Slow pulse, noblack"
            5 : "Gentle pulse"
            1 : "Flicker A"
            6 : "Flicker B"
            3 : "Candle A"
            7 : "Candle B"
            8 : "Candle C"
            4 : "Fast strobe"
            9 : "Slow strobe"
            12 : "Underwater mutation"
        ]
        pattern(string) : "Custom Appearance"
        convertto(choices) : "Classname in game" : "light" =
        [
            "light" : "light"
            "light_spot" : "light_spot"
        ]
        spawnflags(flags) =
        [
            1 : "Initially dark" : 0
            2048 : "Not in Deathmatch" : 0
        ]
    ]
    
    // info_overview_point
    // It makes all entities visible from this place. This is useful for overview mode (dev_overview 1).
    // If "Reversed" is selected, this place will become visible from the entire map. This is useful for large skybox model.
    @PointClass color(255 0 0) = info_overview_point : "Disable VIS here for overview"
    [
        reverse(choices) : "Reversed" : "" =
        [
            "": "No"
            1: "Yes"
        ]
    ]
    
    // info_sunlight
    // It generates a fake light_environment which defines sv_skycolor and sv_skyvec in game.
    // If you are using multiple light_environments, you will probably need this entity.
    @PointClass color(255 255 0) = info_sunlight : "light_environment information that affects model brightness"
    [
        target(target_destination) : "Target"
        angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
        pitch(integer) : "Pitch" : -90
        _light(color255) : "Brightness" : "0 0 0 100"
    ]
    
    // func_group
    // It is not a real entity. Brushes in this entity are still world brushes.
    @SolidClass = func_group : "Solid brushes"
    [
        zhlt_noclip(choices) : "Passable" : "" =
        [
            "": "No"
            1: "Yes"
        ]
    ]
    
    // info_texlights
    // It defines texture lights.
    // Add any texture name as a key and their brightness as the value.
    // Don't need to set colors because hlrad knows texture colors.
    @PointClass color(255 0 0) = info_texlights : "Texture name : Brightness"
    [
    ]
    
    // info_smoothvalue
    // It specifies smoothing threshold angle for each texture.
    @PointClass color(255 0 0) = info_smoothvalue : "Texture name : Threshold of smooth angle"
    [
    ]
    
    // info_translucent
    // It defines translucent effect for textures.
    // 0.0 = normal (only receive light from front), 1.0 = receive 100% light from back and 0% from front.
    // Can be used to simulate materials like fabric, coarse glass, plastic.
    // The thickness of brush with translucent textures can not exceed 2 units.
    @PointClass color(255 0 0) = info_translucent : "Texture name : translucent amount (0.0-1.0)"
    [
    ]
    
    // info_angularfade
    // It gives textures metal like look.
    // 1.0 = normal; higher value = brightness decrease more quickly when the angle increases
    // Do not use this effect too much, because it looks unnatural and exaggerated.
    @PointClass color(255 0 0) = info_angularfade : "Texture name : the speed at which light fade as its direction becomes parellel to the texture (default 1.0)"
    [
    ]
    
    // light_surface
    // It defines texture lights.
    // It is recommended to replace lights.rad and info_texlights with this entity.
    @PointClass color(255 255 0) = light_surface : "Advanced texture light"
    [
        _tex(string) : "Texture name" : "" // texture name (not case sensitive)
        _frange(string) : " Filter max distance" : "" // max distance from face center to this entity
        _fdist(string) : " Filter max dist to plane" : "" // max distance from face plane to this entity
        _fclass(string) : " Filter entity classname" : ""
        _fname(string) : " Filter entity name" : ""
        _light(string) : "Texture brightness" : "80" // value >= 80 will ensure full brightness. Colored brightness is not recommended.
        _texcolor(color255) : " Color(replace texture color)" : "" // emit light as if the texture is in this color
        //  Note:
        //    If you want to set cone angle or any other value to 0,
        //      '0.0' should be used instead of '0'.
        //    This is a bug in Hammer.
        _cone(string) : " Inner(bright) angle(90default)" : "" // should be 90 for conventional texlights
        _cone2(string) : " Outer(fading) angle(90default)" : "" // should be 90 for conventional texlights
        _scale(string) : " Adjust emit scale(1.0default)" : "" // 0.0 = no emitting
        _chop(string) : " Grid size of sampling" : "" // in inch; not affected by texture scale
        _fast(choices) : " Fast" : "" =
        [
            "": "Auto"
            1: "Yes"
            2: "No"
        ]
        // 'light_surface' will not be recognized by the game if we don't change its classname.
        convertto(choices) : "Classname in game" : "light" =
        [
            "light" : "light"
            "light_spot" : "light_spot"
        ]
        targetname(target_source) : " Name" : "" // create a new light style with this name
        style(choices) : " Appearance (no name allowed)" : "" = // use predefined light styles which have predefined patterns
        [
            "" : "Normal"
            10: "Fluorescent flicker"
            2 : "Slow, strong pulse"
            11: "Slow pulse, noblack"
            5 : "Gentle pulse"
            1 : "Flicker A"
            6 : "Flicker B"
            3 : "Candle A"
            7 : "Candle B"
            8 : "Candle C"
            4 : "Fast strobe"
            9 : "Slow strobe"
            12 : "Underwater mutation"
        ]
        //  Light of the same style share the same pattern.
        pattern(string) : " Custom Appearance" : "" // pattern defined by a sequence of letters
        spawnflags(flags) =
        [
            1 : "Initially dark" : 0
            2048 : "Not in Deathmatch" : 0
        ]
    ]
    
    // func_detail
    // Similar in function to the func_detail in Source, though it is still subject to the bsp file format.
    @SolidClass = func_detail : "Detail brushes"
    [
        // You can leave the detail level to 1. For tiny objects, you might set to 2, so that they won't chop faces of other func_details.
        zhlt_detaillevel(integer) : "Detail level" : 1
        // For large shapes such as terrain and walls, set this to no less than their detail level, so that they can chop the faces of adjacent world brushes.
        zhlt_chopdown(integer) : "Lower its level to chop others" : 0
        // Usually you don't have to use this.
        zhlt_chopup(integer) : "Raise its level to get chopped" : 0
        // Setting this to 0 will reduce clipnode count, but will lose the benefit of func_detail's better content deciding method which is designed to prevent "Ambiguous leafnode contents" problem.
        zhlt_clipnodedetaillevel(integer) : "Detail level of cliphulls" : 1
        // Very useful option which can reduce clipnode count.
        zhlt_noclip(choices) : "Passable" : "" =
        [
            "": "No"
            1: "Yes"
        ]
    ]
    
    // info_hullshape
    // It replaces the default cuboid shape of the player when generating collision hulls for certain brushes.
    @SolidClass = info_hullshape : "Hull shape definition"
    [
        targetname(target_source) : "Name"
        defaulthulls(choices) : "Set as default shape" : "" =
        [
            "": "No"
            2: "for hull 1"
            4: "for hull 2"
            8: "for hull 3"
        ]
        disabled(choices) : "Disable this entity" : "" =
        [
            "": "No"
            1: "Yes"
        ]
    ]
    
    I've tried adding various things to it, just to no avail.
     
  9. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    Hrmm... Would you mind uploading a screenshot of the Object Properties window of one of the offending entities, with SmartEdit disabled (like so), preferably a func_detail?

    Also, be advised that the latest version of VHLT is v34 (although the FGD is probably the same).
     
  10. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    Oh gersh dernit... No, that FGD is quite a bit different, and yes, it fixes the problem.

    Think the remainder of the problems (at least that I see on Kroush) are ms_monsterspawn, info_texlights, ms_npcscript, and func_wall_toggle.
     
  11. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    Because of the way info_texlights works (manually adding unknown keyvalues) it'll always give you this error in Hammer, sadly. You could switch to the newer, much more customizable light_surface instead.

    As for the others... Offer still stands: Upload screenshots of the Object Properties window and I'll try to poinpoint the cause(s) of the problems.
     
  12. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    *shrug*
    three_offenders.png

    Dunno if adding a "blank" base would help with info_texlights.
     
  13. MS:C community

    MS:C community Adventurer

    337
    12
    Jul 7, 2011
    func_wall_toggle doesn't have the 'scriptname' key defined. You can fix it like this:
    Code:
    @SolidClass base(func_wall) = func_wall_toggle : "Toggleable geometry" 
    [
        scriptname(string): "Trigger Scriptfile"
        spawnflags(flags) =
        [
            1 : "Starts Invisible" : 0
        ]
    ]
    
    ms_monsterspawn and ms_npcscript both don't have the 'angles' key defined. This key is useless on both entities since pointing them in a specific direction means nothing and does nothing. My advice would be to manually delete the 'angles' keys from those two.
     
  14. Thothie

    Thothie Administrator Staff Member Administrator Moderator Developer

    14,729
    17
    Apr 8, 2005
    psycho-oligist
    lost
    Coming back to this after dealing with a bunch of more important stuff, cuz it was irkin me...

    Scriptname is so rarely used, and pretty much has to have a script designed specifically for the brush in question, so it's probably better manually added (indeed, I don't think there's any such script with func_wall_toggle in mind, save for that developer one).

    Looking at the FGDs, neither ms nor msarea_monsterspawn have angles defined - I think Hammer just automagically adds them in.

    I tried adding null default definitions, but it didn't fix it.
    Code:
    @BaseClass = Targetname
    [
        targetname(target_source) : "Name" : ""
        note(string) : "notes" : ""
    ]
    
    @BaseClass = MSRenderless
    [
        zhlt_invisible(integer) : "Renderless" : 1
    ]
    
    //[...]
    
    @PointClass base(Targetname) size(-16 -16 -16, 16 16 16) color(0 255 0) = ms_monsterspawn : "Monster Spawn" [
    //    spawnloc(choices) : "Monster Spawn Location" : 0 =
    //    [
    //        0 : "At monster placement"
    //        1 : "Random, within box"
    //    ]
        spawnstart(choices) : "Start spawning" : 1 =
        [
            0 : "Upon map start"
            1 : "Only when triggered"
        ]
        resetwhen(choices) : "Reset When" : 0 =
        [
            0 : "All monsters are depleted"
            1 : "Any monster is depleted"
            2 : "Whenever triggered"
        ]
        fireallperish(string) : "Fire when depleted (buggy)" : ""
        reqhp(string): "Req. Total HP (min;max)" : 0
        nplayers(integer): "Require Players" : 0
        params(string) : "Pass AddParams" : ""
    ]
    
    @SolidClass base(ms_monsterspawn,MSRenderless) = msarea_monsterspawn : "Monster Spawn area" [
        spawnloc(choices) : "Monster Spawn Location" : 0 =
        [
            0 : "At monster placement"
            1 : "Random, within box"
        ]
    ]
    Not sure why can't make go away...

    ...*might* Just be because the map source was edited under another FGD, not sure...
     

Share This Page