Jump to content
The Dark Mod Forums

teh_saccade

Member
  • Posts

    693
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by teh_saccade

  1. Hi,

    Scripting problem, most likely - Unsure how to do this, not sure if I ever knew.



    I've forgotten - if I have a script that animates [an] object, and I do not want the player to be in the way of such object's pathway - creating a temporary playerclip brush while it plays the script to, eg, open that secret door, because it's in a place where, even though the player could mantle over it when it's open... to time it to trap a guard seems a bit lame (a way to remove the AI from patrol, but have it still able to detect, trying to fulfil its path, random interest stuff, etc... seems to be the way to go.

    I'd like to offer the player the choice to open the door and, rather than simply trap a guard, crush the guard to death, if they're so inclined.
    Doors stop on player/guard, but movers complete their operation regardless of what's in the way - even if it means clipping through another brush, sometimes.

    I am loathe to change level design so this (player or AI getting killed) doesn't happen, because I like this kind of stuff and it's a fun thing to do - find creative ways to murder people in a stealth game, through patient observation or happy accident...
    I'll carry furniture through an entire level to wedge a door or be able to climb onto that roof so I don't need to play hunt the key or play "everyone in a room with a door that opens outwards" (the way a door opens can have a massive impact on how to deal with AI or to create "safe spaces" for the player to basically lock out patrolling guards, if they've bothered carrying that box and chair for the past 30 minutes.

    We've all trapped guards using objects, (even if it's just chucking a straw bale in a doorway, luring and blocking every guard on the map in a small cupboard), and it's a bit... gamey and lame.

    Like a bambi a broken leg.



    I'm unsure of the script commands I might include to either call a spawn on an existing player clip (or activate it) and then destroy it when the movement script (only a rotation on axis - it's a brush door with a hurt stim, to crush an AI if the player chooses)..?

    I know "entity (idk the name of the playerclip entity atm) = sys.spawn" and to perhaps set the spawnarg to the x,y,z co-ordinates, then "remove (clipbrush)" when the door is open...

     

    Or:

    Would it be best to make the playerclip brush, hide it outside of bounds - on "stonedoor.script being triggered" - "clipbrush.MoveToPosition (x, y, z)" then "RestorePosition (clipbrush) [to put back to hidden room] after "WaitFor(doormover)".

    Or:

    I'm totally wrong and ought to do it another way, or simply forget it and let the player figure it out themselves (either by dying, using the shadow by the door as cover while it opens - or that it's a lethal thing by purposefully or not trapping (in this instance, killing, because trapping an AI would be problematic) and AI by accident or through observation and on purpose.


    Either way, a knowledge reward, except one is annoying and the other is ... kinda cool.

    Would this happen every time the script to open the door is called, by the player using teh trigger switch that calls the script that opens the door that (potentially) crushes the patrolling guard.?


    I'm not sure if either work nor which is the most elegant solution... Something says that it might be pointless, and to let the player learn themselves.


    I can't find a way to do it.

    (but I've only been trying a few hours - it's taken this long to build a room with an AI, texture it, it and start to remember how to use DR - I have no idea what I was doing with my maps, there are no objectives yet and the xd files aren't complete... but they still work, so that's good, so at least the architecture is still there, if not what I was doing with it... Can't remember the story properly now... I just know one has a massive section missing from when movers no longer caused damage and haven't remade all the movers to have damage stims, because didn't learn that was the "new way" until after deleting them all in a hissy fit and going into the corner to cry and moan about it).


    Perhaps it's simply best to not try to save the player from this thing, and allow them to learn to not hide behind the massive stone door while it opens because they'll be crushed to death (although I kinda wanted to put scratch decals to the wall and also leave a note about how the cat was crushed by the hidden door, when the player finds out about it - so the player knows it is possible to get into such a sitution.

    The area door is not critical to the mission - it's simply something to reward exploration and provide some extra loot and (early access to) kit and a bit more story that fleshes out the characters a little.
    It's a "nice thing" only.

    Unlike what happened to bambi's mother.

    It would also be useful to do the same with monsterclip brushes, for if, eg, an alarm is called, so that previously "safe" areas are no longer safe if they player has not taken precautions (such as barricading the chokepoint door on extraction).


    Thanks in advance.


    // added spoilers - leaning towards no script, player learning, but it would still be useful to know for future (eg, spawn playerclips on, eg, burning building escape, funnel all AI down one path, etc...)

  2. As if you didn't already know.

    If there's a long section in a level that requires a lot of travel (eg, a tunnel without a teleport, beneath a building, those massively long grates, a section of swimming where the player will lose a little health, just to make them scared, etc..) the score, or lack of, the volume and several other factors come into play. It has a residual / lasting effect.

    This is also true for loading screens for levels that take a "long" time.

    How music (even foley) is used in level design is a subject I've had to research of late - here is an interesting study as an introduction, although I am sure there are more simple articles with less graphs:

    https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3713348/

    One trick to use on a corridor / whatever where nothing is going to happen, but it's safe for the player to move - is simply raise the ambient / music volume as this inspires confidence in the player and unconsciously cues them to run down that corridor a little faster than they might otherwise.

    // if it's locked - there's always scihub. also here's an article, rather than a study, for people who don't like words, but want info: http://nautil.us/issue/9/time/how-music-hijacks-our-perception-of-time

    • Like 1
  3. Has anyone played with these to see if they have any effect on the game?

    I found a post-it note to try it, but I don't think I ever tried them (SVM Tuner is a "mini" version of 3D analyser).

    Links:

    3DAnalyzer.rar:
    https://drive.google.com/file/d/0B3pjEIQicMsXaUNCOVpaNWwzd1k/view

    SVM Graphics Tuner.rar:
    https://drive.google.com/file/d/1ZIbz-gAWavmA5zCzaQjVqV3c-NcUF_fZ/view

    If it's useful, maybe it's useful - if not - it's useful for other games.

    Reminds me - I ought to share the NOLF series with all the fixes (the two games and "NOLF 2.5" are free until they figure out who own's Monolith's IP, as it seems NOLF3 is in the pipeline).

  4. Oh yeah, I was working on updating the wiki documentation...

    The test maps and missions I have work fine with my versions, but I'd like to ensure they are going to work with whatever version TDM and DR is at now, before continuing any work on anything.

    The forums appear to only show unread posts for the last month - the search function doesn't appear to be correctly working right now.

  5. i read it as well early after the post was made, i couldn't work out what had been done, the only uncomfortable thing was directly changing world_brushes to entity brushes without using convert world brush/s to a func_static came across as the worse thing you could do. its likely you ended up with a map file containing a list of more than one map definition, when dark radiant loaded that file it got confused about which map definition should be loaded and broke the camels back.

    I think that's what happened - gonna have to remove DR and reinstall it all from scratch - idk what happened to break it in that way. Can't figure it out and don't want to reproduce it. Think it was choosing one of the entity classes that is at the bottom of the list that isn't an entity class, but a def that is somehow displayed in the list.

  6. Do you mind about the file size..?

    The H.264 codec that ought to be in the link library for adobe media encoder ought to be good enough for lossless quality but a little compression of those massive .avi's to .mp4's.

    New version of Premiere has a small glitch with imports that some people are getting - I've posted a workaround on adobe forums here (same username, about halfway down):
    https://forums.adobe.com/thread/2397709

    Oh, you're using elements.

    On export/encode..:

    Video Tab
    *Video Codec: H.264
    *Quality: 100
    *Frame Width: 1280 / 1920
    *Frame Height: 720 / 1080
    *Frame Rate: 29.97
    *Field Type: Progressive
    *Pixel Aspect Ratio: square
    *Set Bitrate: checked
    *Bitrate: 8000 kbps

    Audio Tab
    *Audio Code: AAC
    *Output Channels: Stereo
    *Frequency: 44kHz

    720 is good enough for most videos - you might have to turn up the brightness a little for stealth/dark games.

    If you're importing the clips and splicing them together at the same size (composition size = encoding size) then choosing "match comp settings" can make a huge file and take hours...
    Limiting passes can help, also, if you decide to lower bitrate to speed it up.

    In Premiere Pro / Media Encoder / After Effects, there is a preset for many different viewing platforms - including youtube at different quality settings - and display (except instagram...) and these can be useful to use. However, I've always preferred to make my own presets as sometimes there can be issues with crop/layers/animation/etc... with the presets.

    This mission was supposed to last 30+ mins for a group of 4 marines. When I found a way to complete it in under 5 mins solo during testing - the video was a little dark from FRAPS (back before I got into using shadowplay and the nvidia replay for stuff like this, that I think is best for catching glitches with the buffer) - it looks ok a little brighter:



    Since using shadowplay and nvidia recording instead of FRAPS or OBS or old/streaming stuff and fudging it - things look just as I see them on the screen, most of the time. Which is important for music videos or for projection mapping or comping mov's/trailers for games/corportate demo and stuff.
  7. From my personal experience the chance of a response is inversely proportional to the length of the respective post made ;)

    How is it possible to determine the length of the post made, if it has zero views? E.S.P? ;)

     

    Decent bug reports list recreatable action and method, along with workaround and evidence of action.

    This was provided. Nothing more, nothing less.

    Misquoting me so that it appears I am saying that 0 views is annoying rather than the fact that not being able to create entities is annoying is cherry-picking an argument, smarming a straw man fallacy.

    I'm getting fed up with this kind of attitude - please refrain from using it with me, if you'd like me to treat you in a respectful manner rather than mirroring the passive-aggressive snark ;)

     

    "Am vielen Lachen erkennt man den Narren."

     

    // thanks grayman - what you suggested, I stated as the only way it is now possible to create entities. Unsure as to why the other methods now do not work.

  8. The only way I am able to change a new worldspawn brush into an entity is to select the brush and then right-click and select, "create entity" to bring up the same list from which to select, eg "trigger_mulitple" as I would by clicking the button in the entity info panel.

     

    Once the entity is created this way - it is then possible to change it using the entity info panel method or by typing in the entity class into the classname box, as usual.

     

     

     

    Typing a classname is often quicker than navigating the directory tree to find it.

     

    Unsure why the function to use the "select entity class" button in info panel when selecting classname, or simply typing the classname, does not work after choosing one of the damage classes that is in the entity list.

     

    If I should not type the classname or use the "select entity class" button and should use right-click on a brush/selection (sometimes right-click works only one one brush, not the entire selection) - why are those options?

  9. Would someone please not be so kind as take a few moments to help me figure out how/why I've managed to break dark radiant and can no longer create entities..?

    http://forums.thedarkmod.com/topic/19339-cannot-create-new-entities-bug/

    It's still 0 views, and it's kinda annoying - if the only fix is to clear everything DR related (or only prefs?), then confirmation that the only option is clean install would be useful.
    I haven't managed to figure how to fix it myself...

    Thanks.

  10. It ought to have its state saved in the wiki history anyway, Destined.
    http://wiki.thedarkmod.com/index.php?title=Stim/Response_Editor&action=history

    Looks awesome - nice job, man. (+11,474)

    // also thanks for the example map - however, I've bugged out my DR so that I can no longer create entities in the "normal" ways, which is annoying...

    I got rid of the extra = typo and fixed the nesting (got it backwards...), substituting the unnecessary ---- for triple line breaks, so that it now shows more organised in page content index and in article flow (also for search):

    Contents

    • Like 1
  11. It would be possible to use also use Steam to promote, collect and curate the existing youtube videos and regularly ensure members there got to see them by using TDM's steam group page.

    People on Steam will receive a notification every time a link to a youtube video (or anything else) is posted as an announcement.



    Similar to how this toss-weasel does it:
    https://steamcommunity.com/groups/anomalygroup#announcements

    Idk how he gets 12k clicks on a photo of a thumbs up on instagram.
    That group is nothing but to announce to people on Steam that there is a new youtube video posted and plug external links.
    Once every few days, no spam. Short, snappy, direct announcements that deliver whatever it is those 1/4million misguided people think is so great about it...
    All the users get a notification when they sign in that the guy has posted an anouncement and they know it's a new video.

    The steam group announcements for TDM would also be good to notify community of new FM releases. Even a retrospect of the current missions, over time.
    Especially if accompanied by a link to a youtube trailer of the video or to the forum post about it.

    When a youtube video is posted into a steam group as an announcement, it plays in steam and means I might watch it because I know I won't get distracted by shit videos or autoplay and don't have to flick between browser and steam.
    I can even watch it on the overlay while playing a game and waiting for people to join the lobby or for someone to take their turn or a break or something.

    There hasn't been an announcement in TDM steam group for over a year.
    The announcements are very long. Like - my usual forum post here kinda long.

    https://steamcommunity.com/groups/thedarkmod#

    Reckon that TDM steam group is very under utilised - just because of the greenlight thing doesn't mean it has to be abandoned.
    It still has plenty of use for notifiying people about TDM information, videos and stuff - delivering games content within a games service.

    Wouldn't need to bother with youtube channel if the steam group, attached to facebook and forums, became a hub and collected the fragmented videos and important announcements and mission releases and stuff.

    There are likely many people who play the game who are on steam who do not visit forums or participate.
    But there's always guests visiting TDM and reading stuff. Wonder how many of them are on steam and don't know about the steam group..?

    I can't remember if Dark Radiant worked with steam broadcasting, but it's possible to set steam broadcasting to show the whole screen.
    This means that there can be an announcement, for which I'd get a notification, and - another time - an event scheduled, for which I'd get a notification and a pop-up, for a Let's play live broadcast or a DR tutorial session or even just an extra reminder that there's a new FM out and maybe someone is playing it so I can take a look if there's no video trailer.



    The game doesn't need to be in the steam store for it to have a presence on steam.
    It's as if TDM has given up on steam because of the greenlight thing. Idk why.

    I never, ever check my youtube subscriptions - or watch game streaming, twitch is crap. If I want to buy a game but not sure, I'll just look it up on steam broadcasting and watch someone who's playing it for 5 mins while the pirate copy is downloading, to try it out for myself before buying it or deleting it. Have all emails and notes from google services turned off, because they are very annoying and spam my email inboxes.

    I occasionally check facebook. Watch Lawrence Kenshin Striking Breakdowns (not on his youtube) and maybe message someone. Everyone is snoozed because idgaf about cat memes and Facebook sends emails I don't want. I dismiss the phone notes immediately, Facebook sucks. Instagram is better - I know when it notifies, it's something I want to see or someone I 90-100% want to talk with, like 50% of the people on whatsapp and 0% on linkedin.

    I always, always read my steam notifications. Steam doesn't spam me with email. I open it up at least 3-4 times a week most weeks, even if only to chat with someone and look at activity and check notifications. I'll even check my phone for some steam notifications when they buzz before getting to the computer. It's always something I want to see.

    It'd be the best of both worlds, or all four if run in conjunction with facebook and forums and collected ppl's youtube videos with relevant announcement messages.

    • Like 2
  12. It's still Saturday in Samoa for at least another 5 hours...

    I'll add/fix formatting and stuff later, unless you want to make some headers and sections and breaks and stuff - I think I've forgotten the wikicode for most of it, but have added stuff like header sizes and bold and hopefully nesting (can't remember bullet points for the list or numbered list for instructions - will have to check once it's up and can see the page not as forum post)

    Is there a glossary of common dromed/TDM/DR terms on the wiki?
    eg, [entity], [arg] (which also could do with standardising... key, arg, spawnarg, value, etc... tend to be interchangable in some instances throughout some wiki pages), [frob], etc...

    It might be useful. "Frob" isn't a word I've ever heard outside of thief, really - it's shorthand for "frobnicate": To manipulate or adjust, to tweak. One frequently frobs bits or other 2-state devices. eg, please frob the switch, thanks.

    (and I've never used the word "frobnicate", in my life).

    Nice article, Destined - clear and concise.

    Think that expanding the wiki glossary would be good in order to help navigation from keywords to relevant articles / further reading.
    Would also serve as a good hub to work out from in updating pages.




    ==== Stim / Response Editor ===


    The Stim/Response Editor was introduced to save typing each arg for every stim and response on the page, [stim/Response Key/Values] that also contains more specific descriptions as to what each Stim/Response [arg] does. // glossary / standardise arg/spawnarg*

    For more general reading on stims and responses, please see also the [stim/Response page].

    // Stims & Responses format nested / bulleted.

    == Stims ==

    To add a stim or response to an entity, open the Stim/Response editor:
    Select the entity and - from the menu bar - go to Entity > Stim/Response.
    The Stim/Response Editor has three tabs: Stims, Responses and Custom Stims.
    As stated on the [stim/Response] page, an entity can have either or both Stims and Responses, but is not able to use a Stim effect on itself.

    To add a non-custom Stim, select the "Stims" tab.
    From here, it is possible to add a Stim from the drop-down menu next to the "Add" button, clicking the Add button and choosing a stim from the "Type" drop-down menu at the top ("Frob" being the default) or using a keyboard shortcut by pressing the initial letter of the Stim type you'd like to add.

    Select the Stim to edit from the numbered list on the left.
    If no Stim type is selected, all options presented on the right are greyed out.
    The options on the right side of the editor allow changes to all key values of the Stim, removing the need to type and enter manually all key values as listed and described in [stim/Response Key/Values].


    == Responses ==

    The Response Editor is a simplified way to create basic scripts without need for deeper knowledge on scripting for TDM.
    It works similar to the Stim Editor, but for adding Stims that will act as entity responses.
    In the Responses tab, the Stim to which the selected entity should respond is selected in the same way as the Stims tab.

    However, this only tells the entity that it must show a response to a certain Stim type. For a response to happen, there must be an effect.
    To add an effect, right-click in the "Response Effects" window and press, "Add new Effect".
    Double-clicking the numbered Response, or right-clicking it and choosing "Edit", open the "Edit Response Effect" box in which it is possible to select the target entity, type of Stim (as args) and the Response effect itself.

    ----

    === Available effects are: ====

    // bullet list these, I forget the wiki code for that...

    '''Activate Response:''' Activates the Response for the stated Stim Type on the stated Entity.
    ;..E.g. the player must give a fire stim to a furnace in order to have a door react to a frob Stim.
    '''Activate Shooter:''' Activates the named Shooter entity.
    ;..E.g. Can be used to activate a trap.
    '''Activate Stim:''' Activates the Stim for the stated Stim Type on the named Entity.
    ;..E.g. Adds a damage stim to the furnace after a fire stim is given.
    '''Add Target: ''' Adds the stated Target to the named Entity.
    ;..E.g. Add a new path_corner to a patrol route.
    '''Apply Stim:''' Fires a Stim of the stated Stim Type to the named Target.
    ;..The Source can be changed, but is not necessary.
    '''Blind AI:''' Blinds the named AI as if a flash bomb has been used on it.
    '''Clear Targets:''' Removes all Target-args from the named Entity.
    '''Damage:''' Applies a damage type to the stated Target.
    ;..Damage Defs can be found in the def file "darkmod/tdm_defs01.pk4/defs/tdm_damage.def". // *wiki page req. [damage defs]*
    '''Deactivate Response:''' Deactivates the Response for the stated Stim Type on the named Entity.
    '''Deactivate Shooter:''' Deactivates the stated Shooter.
    ;..E.g. Can be used to disarm a trap.
    '''Deactivate Stim:''' Deactivates the Stim for the stated Stim Type on the named Entity.
    '''Disable Effect:''' Disables only one Effect on the named Entity.
    ;..The Effect is defined by two numbers (e.g. 2_3), meaning that the Effect numbered 3 on the Response number 2 is disabled. The respective numbers can be found in the first column of the Response Effects window. // clarification/testing req.*
    '''Enable Effect:''' Enables only one Effect on the stated Entity.
    ;..The Effect is defined by two numbers (e.g. 2_3), meaning that the Effect numbered 3 on the Response numbered 2 is enabled. The respective numbers can be found in the first column of the Response Effects window. // clarification/testing req.*
    '''Fade Light Color:''' Changes the colour of the named Target Light to the stated Color over a time of Fade Time seconds.
    '''Frob:''' Frobs the named Entity as if it had been frobbed by the player.
    '''Gas Knockout:''' Knocks out the named Target as if it had been hit with a gas arrow.
    '''Heal:''' Heals the named Target by the stated Amount.
    '''Kill:''' Kills the named Target.
    '''Knockout:''' Knocks out the named Target as if it had been hit with the blackjack.
    '''Turn extinguishable Light Off:''' Extinguishes the named extinguishable Light.
    '''Turn extinguishable Light On:''' (Re)ignites the named extinguishable Light.
    '''Turn Light Off:''' Turns off the named Light.
    '''Turn Light On:''' Turns on the named Light.
    '''Move To Position:''' Moves the named Entity to the stated Position (coordinates: X Y Z).
    ;..If the box "Relative to old origin" is ticked, the Entity is moved (X Y Z) units from its current location.
    '''Move To Random Position:''' Moves the named Entity to a random position inside the "Within Radius" range.
    '''Play Animation:''' Plays the stated Animation for the stated Entity.
    ;..The Animation can be limited to only one channel (such as only the head or similar), but is best left this blank, unless sure of intent. // req. list animation channels (1=ANIMCHANNEL_X)*
    '''Play Sound:''' Play the named entity's stated Sound.
    ;..The channel can be limited (e.g. to the player voice or ambient), but this can also be left blank. // req. list sound channels (SND_CHANNEL_X)*
    '''Play Sound Shader:''' Plays the named Sound Shader on the stated channel (as before the channel does not need not be defined). This is not limited to inherited sounds of the entity. // req. list sound channels*
    '''Remove:''' Removes the named Target from the map.
    '''Run Script:''' Runs the named Script. For more information on scripts refer to [scripting_basics].
    '''Set AI Team:''' Change the named AI's team to the stated Team.
    ;..For a list of which AI belongs to which team by default, refer to [AI_Relations_(Editing)#AI_Types_.28Teams.29]
    '''Set Angles:''' Set the named Target's rotation to the stated Angles (in pitch/yaw/roll).
    ;..As with Move To Position, this is also possible relative to the entity's current angles.
    '''Set Frobable:''' Sets the named Entity as frobable (box checked) or unfrobable (box unchecked).
    '''Set Light Color:''' Changes the colour of the named Target Light to the stated Color.
    ;..In contrast to "Fade to Color", this happens without any transition.
    '''Set Model:''' Changes the current model of the named Target to the stated Model.
    ;..E.g. Can be used to change a model to a broken model after recieving damage.
    '''Set Skin:''' Changes the current skin of the stated Target to the stated Skin.
    '''Set Spawnarg:''' Changes the value of a Key (Spawnarg) on the stated Target to a stated Value. // consistency req. between [arg/spawnarg], glossary entry link*
    '''Spawn Entity:''' Creates an entity of the stated Entity Class at a given location Origin (X Y Z). E.g. can be used to create new loot through an event. // glossary [entity]*
    '''Spawn Particle:''' Creates an emitter that will emit the named Particle (including its .prt extension) at the location Origin (X Y Z) that stay there for stated Lifetime seconds. If no Lifetime is given it stays infinitely. // glossary and/or link for [particle]*
    '''Start Stim Timer:''' Starts the timer of the stated Stim on the named Entity.
    ;..For information about how a timer on a Stim works, refer to [stim/Response_Key/Values], E.g. Key: sr_timer_time_N. // stim type id?* req. S/RK/V update*
    '''Stop Stim Timer:''' Stops the timer of the stated Stim on the named Entity.
    ;..For information about how a timer on a Stim works, refer to [stim/Response_Key/Values], E.g. Key: sr_timer_time_N. // stim type id?* req. S/RK/V update*
    '''Teleport (Set Origin):''' Moves the named Entity to the stated location's New Origin (coordinates: X Y Z).
    ;..If the box "Relative to old origin" is checked, the Entity is moved (X Y Z) units from its current location. // (not sure where the difference to Move To is, though; maybe this ignores obstacles, Move To does not?) clarification req. untested*
    '''Toggle Effect:''' Disables the stated Effect if enabled or enables the stated Effect if disabled on the named Entity.
    ;..The Effect is defined by two numbers (e.g. 2_3), meaning that the Effect numbered 3 on the Response numbered 2 is disabled. The respective numbers can be found in the first column of the Response Effects window. // clarification?/untested*
    '''Toggle Light:''' Turns off the named Light if on or turns on the named Light if off.
    '''Trigger:''' Activates the named Target Trigger entity as if activated by the stated Activator. // (If I remember correctly, this does not count as a trigger Stim. For this you would have to target a trigger entity, that then targets the entity you wish to receive the trigger Stim). req. test/clarify [triggers] glossary/link*


    The Response list gives a variety of options that allows for many effects without the need to write scripts.

    It is possible to add several effects with one response type by checking the box, "Random Effects" and entering the number of random effects to be used.
    Note that each effect can be used multiple times. E.g. Selecting only one effect and setting "Random Effects: 3" will use the same effect three times.

    ----

    == Examples: ==

    ==== Arrow Trap: ===

    First, create an [atdm:func_shooter] (// glossary, func's - there is no func_shooter, it is now atdm:*) entity and position it so that the arrow points in the desired direction to shoot.
    ''Note that this entity does not have a model. If a model is required, the shooter can be placed in front of the approriate model''.
    Define the projectile to be fired (the default is a fire arrow) and check the pitch for the projectile's trajectory. // req. list atdm:def_projectile_xxx/path to def*

    Next, it is necessary to create an [activator] (// glossary, link script reference?), that can be achieved with the Stim/Response Editor as follows:
    ;..Create a brush, giving it a NoDraw texture and convert it to a func_static.
    ;..Place this func_static entity, where the shooter is to be activated (note that the radius of the Player Stim is 350 with a Falloff Exponent of 3 around the player. This results in an effective radius of around 100 units). // glossary units?*
    ;..Open the Stim/Response Editor.
    ;..Add a Response "Player" to the NoDraw func_static entity.
    ;..To that Response, add the Effect "Activate Shooter" with the name of the shooter as "Shooter Entity".

    Now the shooter will start firing as soon as the player comes withing 100 units of the NoDraw func_static entity.

    There are now three options:

    ;..If the the setup is left as it is, the shooter will continuously fire.
    ;..If the shooter is given an ammo value that is not -1, the shooter will stop firing some time, depending on if the ammo is depleted, after the player moves away from the NoDraw func_static entity.
    ;..If the shooter is to fire only once, it is necessary to add the Effect, "Deactivate Effect" and target the first effect that activates the shooter or give an ammo value of 1.

    It is also possible so that the player might disarm the trap:

    ;..Create a response on another entity that the player will use to do to disarm the trap.

    ''E.g. Frob, if the player is to push a button or use a switch or lever, or a Water response if the player is to shoot a water arrow on a circuit board or a furnace. The possibilities are endless.''

    ;..Add the same "Disable Effect" effect as before. // "Deactivate Effect" or "Disable Effect"..?*
    ;..It is also possible to use the Effect, "Remove shooter". But if this is used, the shooter will not be reactivated (E.g. if the player re-arms the trap, as above).
    ''Note that using this setup, where the Response is "Player", the trap will exclusively react to the player and not to any AI.''

    ----

    === Change Patrol: ===
    An AI's behaviour, such as its patrol route, may be altered through a response.
    E.g. If the player has taken a specific loot item.

    ;..Give the loot item a Response "Frob".
    ;..Add the effect "Add Target".
    ;..As the "Entity" do not use the AI, but the path_corner from which the AI is to leave its original path to enter the new one.
    ;..As "Target" put in the first path_corner of the new path.

    If the new path circles back to the original path, the path will fork at this point:
    if the new path does not target any path_corner of the original path, the AI will remain patrolling the new path. // glossary path; AI pathing [Path_Nodes]*

    ----

    === Damage Stim ===

    /* The current example on the wiki does not appear to work and contains no explanation - if you've figured this out, then out-dated example can be replaced here with your new one that does work */

    ----


    END*

    === Advanced AI manipulation / blend trigger, level design, script with S/R ===



    /* A more advanced example of altering AI behaviour, such as setting AIUSE_SUSPICIOUS and using S/R light on to momentarily light and reveal a weapon or KO'd AI that is "out of sight/in the shadows/decoration" to player but suspicious for AI, to put the AI into an alert/search state if player triggers by failing hidden objective (eg, KO'ing a patrol that is noticed to have not passed on time, so the stationary guard appears to wonder what is up and starts wandering about to find the missing patrol)... Or expanding upon the AI pathing so that player prox. will change an AI's facing direction in a hidden room so that AIUSE_LIGHTSOURCE will cause the AI to flip the lightswitch it can now see (or to use player prox, opening a door, or trig_once to turn off the light, so the AI will turn it on), that is rigged with some Response to perform something such as spawn aggressive, no path, constant searching reinforcement AI or cause an event where the player has "diverted poisonous gas" into a crowded room full of dinner party guests or guard room after turning a wheel (diverting "gas" away from blocking their path, or onto themselves by accident), that causes the hidden AI to turn, that causes the AI to see the turned off light and switch it back on, that causes blocking particle emitter and hurt to be removed and spawn a new particle emitter in the crowded room, KO'ing all the people inside, with another lever/wheel outside that will S/R remove the emitter and playerhurt in that room, turning off / rediverting the gas back to the original... might be a good example of more complex traps, obstacles and events that make use of AI manipulation, etc... blending level design, triggers and S/R to create a more advanced event that requires no script calls. Or combining basic scripts to create things as a "rockfall" as player passes through a trigger and turns off a light, causing hidden AI to flip on the light switch, that S/R spawns rubble to block tunnel behind the player and calls basic camera shake plus sound script, giving impression that the tunnel has collapsed behind player (perhaps alerting a few guards because of "noise" (that is actually altering their pathing / making suspicious through turning on a light that allows them to see a KO'd AI in direction of player), and requires only a few script events - the rest of the effects delivered by S/R system AI manipulation... Idk, maybe it's too much (and also giving away a couple of less common events and unique FM things...). Perhaps something simple such as using S/R to call script or - more simply - activate a button to raise elevator and also alter AI path to make use of the elevator and take new patrol path, timing elevator descent with AI wait time at node, before the guards have now moved from upstairs to downstairs and move to barracks, as it's end of shift, giving player window of opportunity to take advantage of event to pass area without detection, etc... There are too many examples of blending simple AI manipulation with simple trigger, hidden level design and script call to fake more complex events. Maybe not the place for it... Idk if it even makes sense, reading it back (it does to me...) */


     

  13. For anyone else reading this who doesn't know - the tut.txt extension was originally .pk4.


    PK
    Ä¡cLìOBÙ darkmod.txtTitle: tutorialPK 'ªcL maps/PK }¢cL}÷ûª Œ
    maps/st.aas32ŒGÏ5;
    Ç×ð)+XÜGéeÁ‚*@ ,X":ˆ*:B|wlÿíØ™s(Wï<wü‹“8e’LÆ3ç+?ûÛo¿øÅïæ³ù#ÍÏ~úÓ¹¤ÚVÚ-úÓúÙŸÿü«ßýâOŸþç§?õãÿþï?ûÓ§?E§ŸúÜ'y|†ôùO>Gÿ£c}þÓŸúק?õ—?ýì»?úóO~ù³?}æŸIŸþÔßþø«?ÿìKüËŸ~ùíýè¿ùÑ?~öǯýæ÷¿ÿ)À~ó›ßÿíûûÕo¿÷³ýä—?úñ¯~ó«?ÿŠðÀ¯ýæïÂ~þ«ßüì«ÿóÏ~÷§_ýþw„>û£ý©–Ï~úS¿øãþú«?ÿƒÐçÒg™šz"û~û£¿ÿÏ?ûÃ×ö«_üòϘ—°/ýèüÕÏþxp-‚ð£?ÿìßüËo]¿$ øÙtØhÄ~õ;.οü{1ìclùo­üéOýùÏ?ü1§¤8Ó”„þéÏ?ú㟿üÇßÿå'¿¤:C¾¯Ê?øÑo~ýŸÿü[?ûé/~¦aÿú4Õæï¨>ÚNŸ¡¦IŸùÜgòg¤Ì=—ÏP™3‘Oòg>IüOY9Z‰ÅU>Ô%Ñɽ&•’é®—Jc2/=£‹õDÓÈ=S5šÓQ4ûó¥h´½$r½´Àš2Ö*ñºÄƒ–1*„(ÉŸ2`•CÔøÏ\Œliª%R­se%yq'È]
    £%æœ*`
    9(e±šnK—åÔô¡\3§#òŒ

     

  14. Uh, I think I've made a SNAFU in DR... Perhaps it's a bug.
    Either way, unless there's a simple fix for a SNAFU, it looks like a clean deinstall/reinstall of DR to fix what might be a bug.

    I changed an entity, to test, to one of the entity classes that is a damage def - at the bottom of the list - "damage_triggerhurt_25".
    Doing this removed the brush from appearing in TDM. No damage.

    OK, np, I kinda knew these didn't work but thought I'd try them anyway.

    Changing back to "trigger_hurt" - it appears and causes damage to the player as it did before.

    So decided to try changing the entity to "atdm:damage_moveable" to see if it worked or not.
    Doing this also removed the brush from appearing in TDM. No damage.

    After this - if I create a new brush, it is impossible to change it from worldspawn to ANY entity class at all.

    However - I am able to change the entity class of any existing object in DR.

    Selecting the brush, clicking the classname in the entity info panel under camera view and then using the "choose entity class" button to bring up the menu, I get the list - but selecting any class and then clicking "add" does nothing.
    Even if I select the brush and then type in the name of the entity, eg "trigger_multiple", under classname - it will not store any change, clicking the tick or pressing enter on the keyboard.

    This persists after (both software and computer) restart, in other maps and in any new map I create.

    I am able to change the entity class of any existing object by either of these "usual" methods otherwise.

    The only way I am able to change a new worldspawn brush into an entity is to select the brush and then right-click and select, "create entity" to bring up the same list from which to select, eg "trigger_mulitple" as I would by clicking the button in the entity info panel.

    Once the entity is created this way - it is then possible to change it using the entity info panel method or by typing in the entity class into the classname box, as usual.

    (it is often faster to type [/paste] "func_static" into the classname box than navigate to "func_static" by creating an entity from worldspawn using the "choose entity class" button or right-click "create entity")

    Furthermore, it appears as if some filters have been activated by choosing these entity classes - meaning that it looks as if deselecting a clip or nodraw texture is deleting the worldspawn brush / func_static.

    The filters it did activate are "clip textures", "func_static entities" (even though they are evidently displayed with any other texture but clip or nodraw...), "nodraw", "visportals" and "world geometry".

    These are filters that I have had selected several instances of DR ago, but since have deactivated all filters... The recent files are correctly displayed.

    Once again deactivating all the filters - it is still impossible to create an entity by any other method than right-clicking it, instead of simply typing in the worldclass box or accessing the entity class directory through the entity info panel button.

    Bit strange.


  15. Perhaps there's a way to check if the player is in water by using the sound of the player entering and exiting the water as the start and end checks, rather than constantly checking for position..?

    Or activating and terminating the script using a pair of trigger_multiples over the water, lower one calling the script to raise the player speed as you want, "in water current" and the uppermost to revert it to "out of water current". (IF the speed > default).

    • Like 1
  16. Destined - would it be possible to have a spoilered copy of text content of your .map file so I can take a look at how you got the damage thing working in DR?

    Also, the entity classes at the end of the list, such as "damage_triggerhurt_25" do not work - they remove the brush from TDM.
    // and for some reason stop me from being able to copy the map from my DR maps folders to darkmod/maps while both are open - have to close TDM in order to copy due to win permission error.

    However, the list of those "damage" classes provides a short list of the damage defs available to use, without having to dig into the TDM/damage.def file to find all the types of damage:

     

    [/code]

    /*
    Damage definitions (additional to the ones defined in doom3/base/pak000/def)

    Tels 2007-11-24 Base class for all damage definitions to cut out double definitions:
    */

    entityDef atdm:damage_base
    {
    "inherit" "atdm:entity_base"
    "editor_displayFolder" "Internal/Weapons/Damage"
    "editor_usage" "Don't use. Base class for all TDM damage objects."

    "editor_bool no_pain_anim" "When set to 1, the damaged entity won't play a pain animation. Defaults to 0."

    "knockback" "0"
    }

    entityDef atdm:damage_none
    {
    "inherit" "atdm:damage_base"

    "damage" "0"
    "kickDir" "0 0 0"
    "push" "0"

    "kick_time" "0"
    "kick_amplitude" "0"

    "editor_usage" "This damage entity does not inflict any damage at all."
    }

    entityDef atdm:damage_simple
    {
    "inherit" "atdm:damage_base"
    "damage" "10"
    "no_sound" "1"
    "no_pain" "1"
    "editor_usage" "Defines a simple damage base class with 10 points, with no sounds or anything."
    }

    entityDef atdm:damage_low
    {
    "inherit" "atdm:damage_base"
    "damage" "10"
    "no_sound" "0"
    "no_pain" "0"
    "editor_usage" "Defines a simple damage base class with 10 points"
    }

    entityDef atdm:damage_generic
    {
    "inherit" "atdm:damage_base"
    "damage" "20"
    "no_pain" "0"
    "kickDir" "1 0 0"
    "push" "6"

    "editor_usage" "Defines a simple damage base class with 20 points"
    }



    entityDef atdm:damage_water
    {
    "inherit" "atdm:damage_base"
    "damage" "30" // the elemental has 20 health
    "no_sound" "0"
    "no_pain" "0"
    "editor_usage" "The damage done to a fire elemental when it is hit with an water arrow."
    }

    entityDef atdm:damage_gas
    {
    "inherit" "atdm:damage_base"
    "damage" "3" // the elemental has 20 health, and the GAS stim is
    // broadcasted every 0.3 seconds, so that should
    // make it last roughly 6.something seconds.
    "no_sound" "0"
    "no_pain" "0"
    "editor_usage" "The damage done to a fire elemental when it is inside a gas cloud."
    }

    entityDef atdm:damage_fire
    {
    "inherit" "atdm:damage_base"
    "damage" "10"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    "burn" "1" // play sizzle sound on player
    "editor_usage" "Defines a simple fire damage base class with 10 points."
    }

    entityDef atdm:damage_holy_water
    {
    "inherit" "atdm:damage_base"
    "damage" "140" //raised from 80 to address issue #0003620
    "no_sound" "1"
    "no_pain" "1"
    "editor_usage" "Damage dealt by holy water."
    }

    entityDef atdm:damage_holy_water_effect
    {
    "inherit" "atdm:damage_base"
    "damage" "0"
    "no_sound" "1"
    "no_pain" "1"

    "smoke_wound_flesh" "tdm_holy_water_hit.prt"
    "smoke_wound_undeadflesh" "tdm_holy_water_hit.prt"
    "smoke_wound_undeadbone" "tdm_holy_water_hit.prt"
    "mtr_wound_flesh" "" // TODO

    "editor_usage" "Damage effect made by a direct hit of a holy water arrow."
    }

    entityDef atdm:damage_energyballDirect
    {
    "inherit" "atdm:damage_base"
    "damage" "20"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    "burn" "1" // play sizzle sound on player
    "editor_usage" "Damage effect made by a direct hit of an energy ball."
    }

    entityDef atdm:damage_energyballSplash
    {
    "inherit" "atdm:damage_base"
    "damage" "20"
    "radius" "50"
    "knockback" "20"
    "push" "20"
    "attackerDamageScale" "0.2"
    "attackerPushScale" "0.2"
    "gib" "1"
    "editor_usage" "Damage effect made by an indirect hit (splash) of an energy ball."
    }

    // the name of this entity is hard-coded into the C++ source:
    entityDef damage_fall_soft
    {
    "inherit" "atdm:damage_base"
    "damage" "1" // greebo: this damage is scaled by the code
    "kickDir" "0 0 -1"
    "kick_time" "100"
    "kick_amplitude" "1"
    "no_sound" "1" // don't play default damage sound
    "snd_damage" "tdm_player_damage_softlanding"
    "editor_usage" "Damage effect when the player falls softly. Damage is scaled by the code depending on speed."
    }

    // the name of this entity is hard-coded into the C++ source:
    entityDef damage_fall_hard
    {
    "inherit" "atdm:damage_base"
    "damage" "1" // greebo: this damage is scaled by the code
    "kickDir" "0 0 -1"
    "kick_time" "300"
    "kick_amplitude" "1"
    "no_sound" "1" // don't play default damage sound
    "snd_damage" "tdm_player_damage_hardlanding"
    "editor_usage" "Damage effect when the player falls hard. Damage is scaled by the code depending on speed."
    }

    // Damage caused by something thrown by a guard
    entityDef atdm:damage_winebottle
    {
    "inherit" "atdm:damage_base"
    "damage" "5"
    "kickDir" "1 0 0"
    "push" "6"
    "mtr_blob" "genericDamage"
    "blob_time" "300"
    "blob_size" "400"
    "blob_offset_x" "400"
    "knockback" "10"
    "kick_time" "1100"
    "kick_amplitude" "0.25"
    "dv_time" "100"
    "smoke_wound_flesh" "bloodwound.smoke"
    }


    entityDef atdm:damage_rock
    {
    "inherit" "atdm:damage_base"
    "damage" "5"
    "kickDir" "1 0 0"
    "push" "6"
    "mtr_blob" "genericDamage"
    "blob_time" "300"
    "blob_size" "400"
    "blob_offset_x" "400"
    "knockback" "7"
    "kick_time" "1100"
    "kick_amplitude" "0.25"
    "dv_time" "100"
    "smoke_wound_flesh" "bloodwound.smoke"
    }

    // grayman #2816 - used by thrown moveables

    entityDef atdm:damage_moveable
    {
    "inherit" "atdm:damage_base"
    "damage" "1" // scaled by mass & velocity at time of impact
    "scale_damage" "1" // scale damage before applying it
    "knockout" "1" // can cause a knockout, but mass and velocity also play a part
    "knockout_power" "0" // powered-up knockout, not used
    "push" "6"
    "kill_all" "0" // if = 1, allow the moveable to kill what it strikes
    "editor_usage" "Damage effect when a moveable hits an AI. Damage is scaled by the code depending on speed."
    }

    entityDef damage_suicide {
    "damage" "9999"
    "noArmor" "1"
    "noGod" "1"
    }




    entityDef damage_triggerhurt_5 {
    "damage" "5"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_10 {
    "damage" "10"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_15 {
    "damage" "15"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_25 {
    "damage" "25"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_50 {
    "damage" "50"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_75 {
    "damage" "75"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_100 {
    "damage" "100"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }

    entityDef damage_triggerhurt_1000 {
    "damage" "1000"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    }



    entityDef damage_crush {
    "damage" "9999"
    "gib" "1"
    "gibNonSolid" "1"
    "noArmor" "1"
    "noGod" "1"
    }

    entityDef damage_gib {
    "damage" "9999"
    "gib" "1"
    "noArmor" "1"
    "noGod" "1"
    }

    entityDef damage_explosion {
    "damage" "70"
    "radius" "200"
    "push" "10000"
    }

    entityDef damage_explodingbarrel {
    "damage" "300"
    "radius" "140"
    "push" "2000"
    "knockback" "100"
    "gib" "1"
    }

    entityDef damage_Smallexplosion {
    "damage" "50"
    "radius" "50"
    "push" "5000"
    "knockback" "50"
    }

    entityDef damage_HugeExplosion {
    "damage" "500"
    "radius" "256"
    "push" "10000"
    "knockback" "200"
    }

    entityDef damage_moverCrush {
    "damage" "1"
    "gib" "1"
    "gibNonSolid" "1"
    }

    entityDef damage_painTrigger {
    "damage" "10"
    }

    entityDef damage_noair {
    "damage" "10"
    "delay" "3.0"
    "kickDir" "0 0 0"
    "noArmor" "1"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "no_air" "1"
    }



    entityDef damage_fatalfall {
    "damage" "300"
    "kickDir" "0 0 -1"
    "noArmor" "1"
    "knockback" "0"
    "kick_time" "300"
    "kick_amplitude" "1"
    "no_sound" "1" // don't play default damage sound
    }

    entityDef damage_lightBreak {
    "damage" "1"
    "radius" "5"
    "push" "20000"
    "knockback" "20"
    }


    entityDef damage_lava {
    "damage" "15"
    "kickDir" "0 0 0"
    "mtr_blob" "genericDamage"
    "blob_time" "0"
    "blob_size" "0"
    "blob_offset_x" "0"
    "knockback" "0"
    "kick_time" "0"
    "kick_amplitude" "0"
    "dv_time" "100"
    "burn" "1" // play sizzle sound on player
    [/code]



    Without being able to get the damage S/R working - I can't test using something such as "atdm:damage_moveable/moverCrush" on the player, which would be a simple way of making a mover cause damage based upon its velocity/instadeath on getting crushed under an elevator)

    The spoilered list (the content of damage.def) would be a useful page to create and link from the S/R page for available "damage defs".
    But, until it's possible to get the S/R damage working - there's no way to test them all to see if they all work as described.

    Do you even exploding barrel and gib in TDM, m8?
    Have a feeling only those prefixed by "atdm:" will work, but want to try them out anyway...

    // wondering if a trigger multiple can be placed over the thing to cause damage and it trigger the "damage_moveable" or "damage_triggerhurt_n"
    // for some reason - after setting entity class as one of the "damage" entities - on creating a new brush, it's impossible to create an entity from ANY worldspawn brush at all, even after restart... oh dear... what have I done here..?

    // For some reason - choosing to create one of these damage entities has activated a bunch of filters, so it appears that no draw and clip entities or worldspawn brushes are being deleted when I deselect them...

  17. A good way to find a texture in is to either do a search of the ../darkmod/tdm_textures_whatever.pk4, or opening a mission where you've seen the texture, selecting that brush and then re-opening your map - it will stay in the media browser.

    As with painting, sometimes it's good to create a collection of brushes for your map, your "palette" of textures used where each face contains one of the textures, so you can quickly select one and apply it without having to browse for it again.

    Similar to keeping a reference of colour swatches and how you achieved that colour by mixing 1:1:1:10, red:green:blue:white for a flesh tone.

    • Like 1
  18. Thanks for the pointers, Judith.

    Destined - nice one with the list and explanation - I will look at it over the weekend (snowed in, anyway...)
    Does this mean that you and Stumpy have figured out the damage stim thing?

    I used the same method - a func_static that was surrounding the brushwork, yet it refused to work. If it's because the damage only works with invisible entities, then that might explain a lot about why it was failing.

    Also... the damage entities in the list (eg, 25, 50, 75) etc... I was under the impression that these were depreciated doom3 assets and didn't work.

    Wonder what the problem is with "use bounds", but - if the damage is ramped by proximity to the nodraw/invisble func_static, then perhaps it's not required... or fighting with some other arg and that's the issue?

    Thanks for the assist - the intro and list look comprehensive (also clarifying about the trigger stim needing an actual trigger to trigger... :/ ) and the examples are very useful by elaborating on specific details in context.
    If you don't mind, I'll remove the didactic language and rejig some grammar so the examples are simplified without losing your instruction.

    There might be a lot of pages needed to expand on some of the S/R terms...

    • Like 1
×
×
  • Create New...