-
Posts
479 -
Joined
-
Last visited
-
Days Won
14
Posts posted by STRUNK
-
-
I think I found a solution!!
VIDEO - Guards and Zombies don't bother dead bodies, but react to the player
EDITED. What I posted first didn't work. This I tested and think really works.
void DropDead() //Or whatever name you gave it { $Target1.setEnemy($Guard1); //Target1 is becoming enemy to Guard1 (before it dies) //Guard1 is the name of the AI that shouldn't bother about the corpse $Target1.setEnemy($Guard2); $Target1.setEnemy($Guard3); $Target1.kill(); $Target2.setEnemy($Guard1); $Target2.setEnemy($Guard2); $Target2.setEnemy($Guard3); $Target2.kill(); $Target3.setEnemy($Guard1); $Target3.setEnemy($Guard2); $Target3.setEnemy($Guard3); $Target3.kill(); }
Be sure to put the Guard(s) in a different team then the Target(s) (In the enty editor, spawnarg team) and that they are not too close to the Target(s) when they drop dead.
To work for zombies, just use the "old" DropDead script and set the zombie's spawnarg acuity_tact to 0
-
In the script, could you test replace kill with becomeRagdoll to see if the zombies react to that?
void DropDead() //Or whatever name you gave it { $Target_1.becomeRagdoll(); $Target_2.becomeRagdoll(); $Target_3.becomeRagdoll(); }
If they don't react, the fallen ones should be stopped flopping around, and I still don't know how to do that. I found stopMove() and https://modwiki.dhewm3.org/StopAnim_(script_event)
You could try
void DropDead() //Or whatever name you gave it { $Target_1.becomeRagdoll(); $Target_1.stopMove(); $Target_2.becomeRagdoll(); $Target_2.stopMove(); $Target_3.becomeRagdoll(); $Target_3.stopMove(); }
but I don't know if it works.
I also don't know how and if stopAnim works ...
For the Luteplayer beïng invincible you could add this to your script
void KeepPlayingLute() // or void wathever_name_YouWant { $LutePlayer.ignoreDamage(); //Did test } void main() // this exact name "main" will be called by the system itself at gamestart. It only "knows" the things above it, not under it { KeepPlayingLute(); //This says: execute KeepPlayerLute. //Note: The other script you made for the AI dropping dead when player gets the trophy is called by the objecive }
Here is a page with the script events from doom3, they work for TDM. There is a lot to play around with: https://modwiki.dhewm3.org/Script_events_(Doom_3)
-
You schouldn't attach it to a joint. You schould only have spawnarg "def_attach5 : atdm:prop_playable_lute" for the lute prop overwrites/sets the "idle anim" and the position of the lute.
https://forums.thedarkmod.com/index.php?/topic/9082-newbie-darkradiant-questions/&do=findComment&comment=452516
-
To mute the lute with an invisable objective set the following, where LuteMusic is the name of the speaker and LutePlayer is the name of the AI:
- 1
-
I found the entity definition for this lute:
Spoiler// Springheel: attaching this lute will activate playing behaviour.
entityDef atdm:prop_playable_lute
{
"inherit" "atdm:moveable_lute01"
"editor_displayFolder" "Props"
"editor_usage" "Attaching this lute will activate playing behaviour.""model" "models/darkmod/musical/lute01_held.lwo"
"frobable" "0" // don't frob until the AI drops it
"is_mantleable" "0"
"drop_when_ragdoll" "1"
"drop_set_frobable" "1""unbindOnalertIndex" "2"
"replace_anim_idle_sit" "play_lute_idle"
"joint" "Hips"
}
It seems you only have to attach it and the rest is done for you, so you don't have to specify a joint.
As for the sound I guess you have to use a speaker. Here is a thread about the lute:
-
I don't know .. : )
-
Aha : )
When I make a spere patch and then apply a texture it seems ok.
-
Why don't you have a flat patch then?
-
I don't understand what you mean. You have a patch that is half a sphere and want to have that rug fitting the patch, or do you want a straigt flat rug/carpet?
-
I tried again with the grammo, but nothing happens, even with a trigger in between. I guess a model on it's own doesn't have anything in it to define what happens when frobbed, so a frob_action_script should be added. I also tried frob_action_script:frob_door , that is already in the game itself, so doesn't have to be scripted separately, but that doesn't work. But I found a post regarding this:
That way it works without having to write your own script : )
Thanks .. I have put the simple/obvious method in to the post/tutorial.
- 1
-
I figured it out and changed it in the post.
-
Thanx for the wiki link, I got it figured out. There is a checkbox "Player responsible", and when that is checked for the "do NOT kill"Component, the mission only fails when the player kills an AI, not when AI is killed by a script.
I got it working.
I made a little map with the things you want to happen, and added a little something to the script to have the AI not drop dead all at once, but with a little time in between. Be shure to also read the wiki page about Objectives that Destined linked to to understand what is going on in the Map -> Objectives (editor). Note that the yellow cube is a "atdm:target_addobjectives" and the (renamed) "kill" script is not called by a (simular looking) "atdm:target_callscriptfunction" but from the Objective(s) "Steal the Trophy".
Put the map and the script in the folder where your own map and script is, so you can check it out and run it like your own map.
Objectives.mapObjectives.script VIDEO Objectives
For the gramophone: Create model -> darkmod/musical/grammo3.ase. If you want music to come out of it when frobbed, add 2 spawnargs in the Entity editor (of the gramophone) : frobable:1 and frob_action_script:frob_trigger
Now Create speaker (like you create an entity or a model etc) and choose: The Dark Mod 2.0 (Standalone)/sfx/world/musical/frob_instrument_victrola , and click ok.
Then, in the speakers Entity editor add a new spawnarg: s_waitfortrigger:1 (otherwise it starts playing at game/map start).
Now simply select the grammo, then the speaker and press ctrl+k so the speaker is triggerd when the grammo gets frobbed.
You can set the reach of the sound comming from the speaker by dragging in or out the cricle(sphere) around it (a bit like how you can do with lights). Also read https://wiki.thedarkmod.com/index.php?title=Setting_Up_Speakers for more about working with speakers.
I also made a more complex map with the gramophone and playing music is now an objective to complete the mission, adding yet an other way to complete objectives :
Objectives2.scriptObjectives2.map Video Objectives2
-
8 hours ago, grayman said:
What's happening in the game at the moment you want to kill this NPC?
Are you trying to get it to happen in the background, or is the player going to perform some action?
It should happen when an objective is completed.
-
Oh sorry for that, may bad. I didn't think of that. Glad you got your first script to work.
-
30 minutes ago, grayman said:
In your objective, fill in this field:
Never worked with objectives, so I don't even know where to find (fill in) that : D
The script I understand.
-
With a button you can also trigger scripts to run. $NPC_Name.kill(); should go in a script. In fact it's very simple, and can get very complicated. When you make a switch, instead of targeting a light ( ctrl+k), you can trigger a "atdm:target_callscriptfunction" (rightclick (with nothing selected) and choose Create entity -> Targets -> atdm:target_callscriptfunction. You'll get a yellow cube. Select the switch, then the yellow cube and press ctrl+k.
Then select only the yellow cube. In the entity inspector you add a new "spawnarg" by typing in the first box: call and in the second box: kill, like this:
Then you have to open notepad and type the following, where $Target_1 $Target_ etc (you can add more targets ofc.) are the names of the AI that should die, with $ in front of it ($gatekeeper, $guard2, $whatever ... ).
void kill() //this could also be: void DropDead() if you set the spawnarg "call" to "DropDead" { $Target_1.kill(); $Target_2.kill(); $Target_3.kill(); }
Then save it with the same name as your map as a .script file; yourmap.script.
That .script file must now be put in the same directory as where your .map file is, and it should work.
Springheels method is easier for this case, especially when you bind the damage brush to the AI ... but with a little knowledge of scripting you can do a whole lot of epic stuff : )
-
That would be it : D But how to have a finished objective trigger that? (I never did anything with objectives)
-
I'm trying to get stopAnim( float channel, float frames ) to work, but I don't even have a clue about what the channel should be : D And when putting -1 as frames, is it never going to stop (endles number of frames)? The ragdoll is working, but they keep flopping around a bit : P
Other thing is, my approach would be scripting the event with becomeRagdoll and having the AI lay still. Simultaniously a death screem is triggered from speakers bound to the targeted guards. But I haven't got experience with AI in a map yet.
How would you approach this?
-
I found this script event: BecomeRagdoll https://modwiki.dhewm3.org/BecomeRagdoll_(script_event)
If you are familliar with writing scripts you can try if that does what you want, otherwise I can try making a simple script for it.
-
The camera approach to the "portal" doesn't seem to work in any way I can imagine. Even tried adding a mirror to point the camera at. Now I had an other idea: having a brush with portal_sky texture, you can see through a wall with that, to move over a wall relative to the players position but the problem is .. you can only see through the wall when it's still worldspawn, so it can't be moved by script ..
Does anyone know of an other glich that works when it's a func_mover ... or any other glich that might worth looking into?
-
There is a button in the top of the screen called "Select Group Parts" (looks like a rubix cube a bit). When you activate it you can select individual brushes .. it seems. Other entities like triggers and models can't be selected that way ... it seems. (I just tried this for the first time).
- 1
-
I'm trying to recreate some sort of portal like in @Dragofer's post above and have a camera a target_null and a screen. I have the target_null moving relative (in an other room) to the players EyePos(ition) .. but it doesn't change the view. (have a visable cube bound to it to check if it it's indeed moving, and it is). When I place the target_null in a different place in DR, the view angle of the camera is different, so it seems to me it only checks whet the target_null is at gamestart, but doesn't update after that.
Is there a spawnarg that should be applied to have it update all the time, or do I have to take a different approach and ajust the camera view angle (rotation) with a script?
EDIT: Have the camera now looking around, but ofc. this doesn't work, for when you pan a camera, the straight horizontal lines get skewed on the screen : )
- 1
-
I'm gonna try if this works : )
- 1
-
If a camera was in an other room, and it stays in relatively the same position as the players head (getOrigin() and add distance in one direction to be in the other room). And you can make it "look" the same direction as the player (getViewAngles( )), you could have that video feed showing on a screen in the room where the player is, so he can see it.
Newbie DarkRadiant Questions
in TDM Editors Guild
Posted
@MirceaKitsune
I think I found how the DropDead script works for zombies now. See last sentence in my former post.