Dragofer 1347 Posted October 23, 2020 Report Share Posted October 23, 2020 4 minutes ago, Destined said: You can try to copy the shader of another surface and paste it onto your patch. If I remember correctly this had worked for some arches I made. You need to copy from a brush's surface onto a patch, and the brush surface has to be on the same plane as the patch. This is a 2D projection, so it'll work best for flat patches. Quote FM: One Step Too Far | FM: Down by the Riverside | FM: Perilous Refuge Dragofer's Stuff | Dragofer's Scripting | A to Z Scripting Guide Link to post Share on other sites
Geep 247 Posted October 24, 2020 Report Share Posted October 24, 2020 @MirceaKitsune Just another thought on the gramophone. You probably want to put a spinning disk on it. Create a disk, make it into a func_rotating with spawnarg "speed" of (say) -100, and an appropriate texture. textures/darkmod/decals/metal/drain_cover worked for me. Quote Link to post Share on other sites
Destined 614 Posted October 24, 2020 Report Share Posted October 24, 2020 11 hours ago, Dragofer said: You need to copy from a brush's surface onto a patch, and the brush surface has to be on the same plane as the patch. This is a 2D projection, so it'll work best for flat patches. Good to know. In my case this apparently has been the case by chance. Quote Link to post Share on other sites
MirceaKitsune 249 Posted October 25, 2020 Report Share Posted October 25, 2020 Ran into an issue with an AI last night: I'm trying to have a noble playing the lute, which I'm doing by giving the AI spawnargs "def_attach5 atdm:prop_playable_lute" and "pos_attach5 hand_l". I'm running into two problems: The lute is offset and floating above the character, and although they're playing the singing animation I don't hear anything. I'm hoping that for the song I won't need a speaker, as it's probably difficult to make it stop and resume whenever the AI becomes alert or goes back to sitting at the table. Quote Link to post Share on other sites
STRUNK 270 Posted October 25, 2020 Report Share Posted October 25, 2020 (edited) @MirceaKitsune 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: Edited October 25, 2020 by STRUNK Quote Link to post Share on other sites
Dragofer 1347 Posted October 25, 2020 Report Share Posted October 25, 2020 4 hours ago, MirceaKitsune said: The lute is offset and floating above the character When attaching entities to AIs, the entities sometimes need to be rotated by putting spawnargs into their entity defs which specify their rotation and offset compared to a specific joint (in this case: something attached to the joint "velvetcap_1"). "angles_velvetcap_1" "90 90 0" "origin_velvetcap_1" "3 1.2 .2" I think if you specify a name_attach5 in addition to the def_attach5, for example "lute", then you can skip modifying the entity def and instead apply a spawnarg like "set angles_velvetcap_1 on lute" "90 90 0". This is why you sometimes have "wearable" versions of props for attaching to AIs. Maybe there's one already for the lute? Can check Goldwell's missions for an existing example, I believe Northdale 2 is the one with a skeleton bard playing a lute. Quote FM: One Step Too Far | FM: Down by the Riverside | FM: Perilous Refuge Dragofer's Stuff | Dragofer's Scripting | A to Z Scripting Guide Link to post Share on other sites
Geep 247 Posted October 26, 2020 Report Share Posted October 26, 2020 JackFarmer's "Hidden Hands: Vitalic Fever" also has a lute player. 1 Quote Link to post Share on other sites
MirceaKitsune 249 Posted October 26, 2020 Report Share Posted October 26, 2020 The lute player resuming playing isn't a necessity, just dropping the lute once the alert level is high enough for him to start walking around, he can stop playing forever then. The main issue is how to set up the speaker so the song also stops, I'm not sure how you make an AI trigger a speaker off at a given alert level... I'll check that thread in more detail. In the meantime I really need help with flattening the texture on curve patches, particularly on end caps. Here's a screenshot of an arch I'm making which shows exactly why this is an issue and what I'm trying to avoid. Quote Link to post Share on other sites
STRUNK 270 Posted October 26, 2020 Report Share Posted October 26, 2020 (edited) @MirceaKitsune 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: Edited October 26, 2020 by STRUNK 1 Quote Link to post Share on other sites
Destined 614 Posted October 26, 2020 Report Share Posted October 26, 2020 (edited) 3 hours ago, MirceaKitsune said: In the meantime I really need help with flattening the texture on curve patches, particularly on end caps. Here's a screenshot of an arch I'm making which shows exactly why this is an issue and what I'm trying to avoid. In this case, you can select the surface next to the end caps (Ctrl+Shift+LMB) select "Copy Shader" (in the Edit tab), then select the end cap and choose "Paste Shader". This should lead to the end caps having the exact same shader as the surfaces around it (so you also don't have any transition problems). Edited October 26, 2020 by Destined Quote Link to post Share on other sites
MirceaKitsune 249 Posted October 26, 2020 Report Share Posted October 26, 2020 59 minutes ago, Destined said: In this case, you can select the surface next to the end caps (Ctrl+Shift+LMB) select "Copy Shader" (in the Edit tab), then select the end cap and choose "Paste Shader". This should lead to the end caps having the exact same shader as the surfaces around it (so you also don't have any transition problems). Thank you very much, that did it! For the lute: I'm not sure how comfortable I am with using a fake objective just to turn it off from playing, that feels like a cheap hack to work around a limitation. Is there no other way? Just as importantly, I can't fix its offset issue. What joint should I be attaching it to? Like I said I give the AI "def_attach5 atdm:prop_playable_lute" (which gets the object to show and the character's playing animation going). With that though I also need a pos_attach5 otherwise the map will crash at startup with a complaint. I tried both "pos_attach5 hand_l" and "pos_attach5 hand_r" however both cause the lute to be offset incorrectly and float above the hand. 1 Quote Link to post Share on other sites
STRUNK 270 Posted October 26, 2020 Report Share Posted October 26, 2020 @MirceaKitsune 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 Quote Link to post Share on other sites
PranQster 454 Posted October 26, 2020 Report Share Posted October 26, 2020 (edited) In Siegeshop, I had set a lute player up like this before attaching props to AI w/ def_attach was a thing. Though in that mission the AI is ignorant to the world around him and never goes on alert. The (manually positioned) model I used was 'models/darkmod/musical/lute01_held.lwo' and with 'bindToJoint' 'Spine_Dummy', in addition to bind to the AI. A rotation value was specified on the lute, which I floated about an inch in front of the t-posed AI's tunic, at waist level, in a playing position. On the AI, I used 'bindToJoint' 'Spine_Dummy' and targeted him to a 'path_cycleanim' with 'anim' 'play_lute_idle' set on it. In the case of this AI, I also set him to have 0 awareness on everything so he just keeps playing. Of course, in this case I just used a static speaker and if he's k/o'd, the speaker will just keep playing music and the lute will be still attached to him on the floor. So this won't help with the speaker or the ditching of the lute when alerted, but may provide a different approach of the AI holding the lute. Edited October 26, 2020 by PranQster clarification Quote System: Mageia Linux Cauldron, aka Mageia 8 Link to post Share on other sites
MirceaKitsune 249 Posted October 27, 2020 Report Share Posted October 27, 2020 Fixed the attachment problem for now. For some reason it didn't crash any more after I removed the joint specification... maybe it only does that for atdm:prop_winebottle, I did the same thing for a drunk guard in parallel. How would I go about making the lute player completely unaware so he never becomes alert... and ideally immune to damage dealt by the player too so you can't kill him with weapons. Also I'm running into a new issue: I'm teleporting a bunch of undead, and for some reason they become alert when they find the dead bodies of some guards / civilians I'm killing with a scripted trigger (the one we discussed earlier). Is there a flag to make a specific AI ignore dead bodies it finds and not become alert to them? Quote Link to post Share on other sites
Destined 614 Posted October 27, 2020 Report Share Posted October 27, 2020 There is a whole range of chanceNotice* spawnargs, that handle such things. From a quick search I gathered that ragdolls are considered persons (according to their AIUse spawnarg), so I assume that this is the reason they are recognised by the undead. You can try to set the spawnarg chanceNoticePerson to 0, but I am not sure, which other consequences this has. I assume the player is not defined as a person, so they might still see him as an enemy, but if you want them to interact with living AI (i.e. guards, townsfolk), this will not work anymore. Quote Link to post Share on other sites
MirceaKitsune 249 Posted October 27, 2020 Report Share Posted October 27, 2020 "chanceNoticePerson 0" doesn't solve it, the AI becomes alert all the same. What else can I try? Also please let me know how to make the lute player invincible as well as never becoming alert. That's going to look goofy but it's the best option easily available so I'll go for that. Quote Link to post Share on other sites
Dragofer 1347 Posted October 27, 2020 Report Share Posted October 27, 2020 1 hour ago, MirceaKitsune said: "chanceNoticePerson 0" doesn't solve it, the AI becomes alert all the same. What else can I try? You could disable the visual stims emitted by those AIs, in the same script that kills / knocks them out. $name_of_ai.StimEnable(14, 0); 14 is the ID# of visual stims (found in script/tdm_stim_response.script), 0 is to disable. (If they start ragdolled at map start you can just disable the visual stim in the S/R Editor). 1 hour ago, MirceaKitsune said: Also please let me know how to make the lute player invincible as well as never becoming alert. That's going to look goofy but it's the best option easily available so I'll go for that. One method is to encase him in a brush of nodrawsolid and apply health 1000. If you want to go further you could make a looping script that refreshes his health every few seconds. For never becoming alert, you can set all his acuities to 0. 1 Quote FM: One Step Too Far | FM: Down by the Riverside | FM: Perilous Refuge Dragofer's Stuff | Dragofer's Scripting | A to Z Scripting Guide Link to post Share on other sites
STRUNK 270 Posted October 27, 2020 Report Share Posted October 27, 2020 (edited) @MirceaKitsune 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) Edited October 27, 2020 by STRUNK Quote Link to post Share on other sites
Bienie 417 Posted October 27, 2020 Report Share Posted October 27, 2020 4 hours ago, Dragofer said: You could disable the visual stims emitted by those AIs, in the same script that kills / knocks them out. $name_of_ai.StimEnable(14, 0); 14 is the ID# of visual stims (found in script/tdm_stim_response.script), 0 is to disable. (If they start ragdolled at map start you can just disable the visual stim in the S/R Editor). One method is to encase him in a brush of nodrawsolid and apply health 1000. If you want to go further you could make a looping script that refreshes his health every few seconds. For never becoming alert, you can set all his acuities to 0. As it happens I am actually working on the exact same thing as @MirceaKitsune for a Halloween update of CoS 3. I've ran into the exact same problem, my revenants go haywire when they see the corpses of the former guards around town. I tried adding the .StimEnable(14, 0); to the kill script, and it seems to work... partially. The revenants no longer "see" the corpses, but if they walk into them they become alerted. Don't know if there is a "proprioception" stim that you can turn off as well to maybe solve it? 3 hours ago, STRUNK said: @MirceaKitsune 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) I just tried becomeRagdoll and stopmove and hilarity ensued! I was walking up to one laying flat on the ground to see if the corpse was frobable and he turned his head and said "I could use an ale right now!" He then started flopping his feet around like he was trying to walk. If anything I would say he had one ale too many! ^^ It seems the script makes them fall to the ground and paralyze everything but their head, feet and hands, and they just keep going on as usual as if nothing was wrong. After that I tried adding .kill() first in the script but similarly to Dragofer's StimEnable idea the revenants still alert if they touch the corpse. It also has the odd effect of killing them but freezing them in place like wax figures until you frob them when they fall flat. All in all an interesting test session, but there are still some kinks to iron out in this script. 1 Quote My Fan Missions: Series: Standalone: Chronicles of Skulduggery 1: Pearls and Swine The Night of Reluctant Benefaction Chronicles of Skulduggery 2: A Precarious Position Langhorne Lodge Chronicles of Skulduggery 3: Sacricide Link to post Share on other sites
Bienie 417 Posted October 27, 2020 Report Share Posted October 27, 2020 6 hours ago, MirceaKitsune said: "chanceNoticePerson 0" doesn't solve it, the AI becomes alert all the same. What else can I try? Also please let me know how to make the lute player invincible as well as never becoming alert. That's going to look goofy but it's the best option easily available so I'll go for that. Not sure if it's helpful but I had a lute player in CoS 1 that was deaf, blind and mute. The setup is very ghetto, but if you can keep him from taking damage (or the lute stays floating mid air and sound keeps playing) and he's doesn't need to do anything but play the lute it should work. Quote My Fan Missions: Series: Standalone: Chronicles of Skulduggery 1: Pearls and Swine The Night of Reluctant Benefaction Chronicles of Skulduggery 2: A Precarious Position Langhorne Lodge Chronicles of Skulduggery 3: Sacricide Link to post Share on other sites
STRUNK 270 Posted October 28, 2020 Report Share Posted October 28, 2020 (edited) @MirceaKitsune @Bienie 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 Edited October 28, 2020 by STRUNK Quote Link to post Share on other sites
Dragofer 1347 Posted October 28, 2020 Report Share Posted October 28, 2020 Other venues towards making ragdolls invisible would be: - set the "AIuse" spawnarg to something like "-" - use actual ragdoll entities instead of killing AIs - or show the ragdolls to the undead in a blue room so they can freak out there without being seen, give them time to relax before teleporting them to the playable area For making the lute music stop, only thing that comes to mind now is to make an invisible objective that checks whether the AI is dead or alerted to level 3+, and triggers the speaker once. Quote FM: One Step Too Far | FM: Down by the Riverside | FM: Perilous Refuge Dragofer's Stuff | Dragofer's Scripting | A to Z Scripting Guide Link to post Share on other sites
MirceaKitsune 249 Posted October 28, 2020 Report Share Posted October 28, 2020 Seems I have to think how I'm going to deal with those two issues. For now there's another little thing I'm trying to achieve and don't know how to: After completing an objective, I want to change the music the player will hear until the end of the map. Is there a way to enforce a given ambiance after a trigger is executed, ignoring the one in the location info of the room? Or perhaps a way to turn off a location info then activate another one for a given zone, with the second location info disabled by default and flipped on once the trigger is hit? Quote Link to post Share on other sites
STRUNK 270 Posted October 28, 2020 Report Share Posted October 28, 2020 @MirceaKitsune I think I found how the DropDead script works for zombies now. See last sentence in my former post. Quote Link to post Share on other sites
joebarnin 244 Posted October 28, 2020 Report Share Posted October 28, 2020 2 hours ago, MirceaKitsune said: Seems I have to think how I'm going to deal with those two issues. For now there's another little thing I'm trying to achieve and don't know how to: After completing an objective, I want to change the music the player will hear until the end of the map. Is there a way to enforce a given ambiance after a trigger is executed, ignoring the one in the location info of the room? Or perhaps a way to turn off a location info then activate another one for a given zone, with the second location info disabled by default and flipped on once the trigger is hit? Try this technique: https://wiki.thedarkmod.com/index.php?title=Location_Settings#Sound_Override. I think it was used by JackFarmer in the HH:TLC mission. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.