Jump to content
The Dark Mod Forums

Newbie DarkRadiant Questions


demagogue

Recommended Posts

Thanks a lot guys, I insisted on this hypothesis and found the criminal - it was indeed related to my big visportal, but it was not the portal itself that caused the problem, it was actually a group of caulk brushes that I embedded into the geometry around the portal, to regularize its limits. It seems that embedding the caulk into those brushes (which were of many uses - some were at the limit of the map, sealing the void, some were solid blocks inside it, some were walls to inner spaces sealed from that area I was trying to "portalise") opened the leak somehow, because I kept the portal as it is, turned the caulk into stone and now the map works fine again, tried it for 10 minutes, no problems! And I get to keep my nice portal in an area I thought I would never be able to optimize.

 

Its not the first time caulks give me problems, I dont think I'll be using those guys anytime soon... I'm back in business. ;)

Edited by RPGista
Link to comment
Share on other sites

Or are those animations so subtle that i simply dont see the difference between a normal guard and a "drunken" guard?

 

Setting a guard to "drunk" just changes his idle animation and drops his acuity by half (and may automatically select the drunk vocal set, not sure).

 

I noticed that a guard that is "drunk" does not appear to play anything other than his default idle animation, so when I tried setting a sitting guard to "drunk" and setting his idle animation to the one with the bottle, he never drank from it or did any of the other random idles.

 

You can do the whole thing manually, however. Just add the following spawnargs:

 

"def_attach5" "atdm:prop_winebottle"

"pos_attach5" "hand_l"

"vocal_set_def" "atdm:ai_vocal_set_grumbler_guard_01_drunk" (not sure exact name)

 

"idle_animations_interval" "15"

 

set these to 50%:

 

// acuities, in percent

"acuity_vis" "100"

"acuity_aud" "100"

"acuity_tact" "100"

"acuity_other" "100"

 

Maybe change these as well:

 

"chanceNoticeWeapon" "1.0"

"chanceNoticePerson" "1.0"

"chanceNoticeBlood" "1.0"

"chanceNoticeLight" "1.0"

"chanceNoticeMissingItem" "1.0"

"chanceNoticeDoor" "1.0"

Link to comment
Share on other sites

Thanks to all for answering. I still dont see a difference, but i will leave it this way. To be sure i now used Springheels method and just changed those spawnargs without making him "drunk". Maybe the players will recognize him beeing drunk. °-^

Link to comment
Share on other sites

I dont know if this is supported, but can an unarmed AI pick up a weapon and use it if you give him a chance?

 

How can I control not just the vocal set, but actually each individual sound an AI is capable of saying (including setting the ones I want to silence, or to new sounds), would that be too hard? I dont want for an AI to say random stuff praising the Builder for example, or to whistle; I want to make another one almost silent, and maybe add a couple of sounds for certain situations (say, pain sound, or different idle sounds).

Link to comment
Share on other sites

To be sure i now used Springheels method

 

Oh, one other thing--if you add the following he'll play the swaying drunk idle rather than the standing straight one:

 

"replace_anim_idle" "idle_bottle_drunk"

Link to comment
Share on other sites

No, there are two different ones. If you don't put a number, the code will randomly select from the two as needed. Looks less repetitive that way.

Link to comment
Share on other sites

I dont know if this is supported, but can an unarmed AI pick up a weapon and use it if you give him a chance?

 

No.

 

How can I control not just the vocal set, but actually each individual sound an AI is capable of saying (including setting the ones I want to silence, or to new sounds), would that be too hard? I dont want for an AI to say random stuff praising the Builder for example, or to whistle; I want to make another one almost silent, and maybe add a couple of sounds for certain situations (say, pain sound, or different idle sounds).

 

That's a lot of work, because you need to define a new vocal set to include only the sounds you want.

 

I'll leave it to someone who knows the intricacies of vocal sets to explain how to do this.

Link to comment
Share on other sites

The almost silent one is not as difficult as the others. There is a vocal set I made called mute or something. I think that's now in the main Dark Mod stuff. I used that on Lady Something or other in Heart. Then in that same FM I I think I used the silent one and added one or two spider sounds for the mad woman. So if you open up Heart and look at the vocal defs hopefully you'll be able to figure out what changes you want. Then look in the Dark Mod vocal defs for the actual guard whatever you want and just copy the few coughs and sneezes to the mute copy.

Link to comment
Share on other sites

How can I control not just the vocal set,

 

I can give you some tips but you'll have to be more specific about what you want to do.

 

For the basics, each vocal set has a entitydef:

 

 

 

entityDef atdm:ai_vocal_set_base

{

"inherit" "atdm:entity_base"

"editor_displayFolder" "AI/Internal/Vocal Sets"

"editor_usage" "The default vocal set for AI, defines which sounds are played in the different situations."

 

"editor_vocal_set" "1"

 

// Found something

"snd_somethingSuspicious" "tdm_ai_pro_find_something_suspicious"

"snd_foundComradeBody" "tdm_ai_pro_find_corpse_comrade"

"snd_foundUnconsciousMale" "tdm_ai_pro_find_unconscious_male"

"snd_foundUnconsciousFemale" "tdm_ai_pro_find_unconscious_female"

"snd_foundDeadMale" "tdm_ai_pro_find_corpse_male"

"snd_foundDeadFemale" "tdm_ai_pro_find_corpse_female"

"snd_foundBlood" "tdm_ai_pro_find_blood"

"snd_foundOpenDoor" "tdm_ai_pro_find_open_door"

"snd_foundLightsOff" "tdm_ai_pro_find_light_off"

"snd_foundTorchOut" "tdm_ai_pro_find_light_off"

"snd_foundMissingItem" "tdm_ai_pro_notice_missing_item"

"snd_foundBrokenItem" "tdm_ai_pro_find_something_suspicious"

"snd_foundWeapon" "tdm_ai_pro_find_weapon"

"snd_foundSuspiciousItem" "tdm_ai_pro_find_something_suspicious"

"snd_notice_pickpocket" "tdm_ai_pro_notice_missing_item"

 

"snd_yesRelightTorch" "tdm_ai_pro_relighting"

"snd_noRelightTorch" "tdm_ai_pro_not_relighting"

 

// Inter-AI communication

 

"snd_warnSawEnemy" "tdm_ai_pro_warn_saw_enemy"

"snd_warnSawEvidence" "tdm_ai_pro_warn_saw_enemy"

"snd_warnMissingItem" "tdm_ai_pro_warn_missing_item"

"snd_warnFoundCorpse" "tdm_ai_pro_warn_saw_enemy"

 

// Greetings

"snd_greeting_generic" "tdm_ai_pro_greet_civilian_to_civilian"

 

// Alert-related barks

 

"snd_to_combat" "tdm_ai_pro_to_combat"

"snd_to_combat_company" "tdm_ai_pro_to_combat_company"

"snd_spotted_player_with_body" "tdm_ai_pro_spotted_player_with_body"

 

"snd_combat_melee" "tdm_ai_pro_combat_melee"

"snd_combat_ranged" "tdm_ai_pro_combat_archer"

"snd_combat_throw" "tdm_ai_pro_combat_throw"

 

"snd_combat_blocked_by_player" "tdm_ai_pro_combat_blocked_by_player"

"snd_combat_hit_player" "tdm_ai_pro_combat_hit_player"

"snd_combat_hit_player_company" "tdm_ai_pro_combat_hit_player_company"

 

"snd_killed_enemy" "tdm_ai_pro_combat_hit_player"

 

"snd_charge" "tdm_ai_pro_to_combat"

 

"snd_cantReachTarget" "tdm_ai_pro_enemy_out_of_reach"

"snd_lostTrackOfEnemy" "tdm_ai_pro_lost_track_of_enemy"

"snd_assistFriend" "tdm_ai_pro_assist_friend"

 

"snd_to_flee" "tdm_ai_pro_to_flee"

"snd_flee" "tdm_ai_pro_flee"

 

// AI state transitions

"snd_sleeping" "tdm_ai_builder2_sleep"

 

// These are played while the AI is in idle state and has not seen evidence of intruders before

"snd_relaxed" "tdm_ai_pro_idle_guard"

 

// This is played when the AI is back in idle state but has seen evidence of intruders

"snd_alert_idle" "tdm_ai_pro_idle_guard"

 

 

"snd_drunk" "tdm_ai_pro_idle_guard"

 

// These are played when the AI's alert level changes from idle (alert level 0) to observant (1) or suspicious (2)

// The suffix s is for when the AI sees something, the suffix h is specific for hearing

"snd_alert1" "tdm_ai_pro_to_observant"

"snd_alert1s" "tdm_ai_pro_to_observant_saw"

"snd_alert1h" "tdm_ai_pro_to_observant_heard"

 

// These are played when the AI becomes alerted and goes into searching (3)

// The c suffix is for barks that are played when the AI is in company

"snd_alert3" "tdm_ai_pro_to_searching"

"snd_alert3s" "tdm_ai_pro_to_searching_saw"

"snd_alert3h" "tdm_ai_pro_to_searching_heard"

 

"snd_alert3c" "tdm_ai_pro_to_searching" // MISSING

 

"snd_alert3sc" "tdm_ai_pro_to_searching_saw_company"

"snd_alert3hc" "tdm_ai_pro_to_searching_heard_company"

 

// This is played when the AI is alerted and goes from searching to agitated searching (4)

"snd_alert4" "tdm_ai_pro_to_agitated_searching"

 

// This is played when the AI ramps down to idle after a small alert

"snd_alertdown0" "tdm_ai_pro_alertdown_to_idle"

"snd_alertdown0s" "tdm_ai_pro_alertdown_to_idle_saw"

"snd_alertdown0h" "tdm_ai_pro_alertdown_to_idle_heard"

"snd_alertdown0sus" "tdm_ai_pro_alertdown_to_idle_seen_suspicious"

 

// This is played when the AI ramps down to idle, has not seen evidence of intruders and the last alert was at least at agitated searching

"snd_alertdown0SeenNoEvidence" "tdm_ai_pro_alertdown_to_idle_no_evidence"

 

// This is played when the AI ramps down to idle, the last alert level was at least at searching and the AI has seen evidence of intruders before

"snd_alertdown0SeenEvidence" "tdm_ai_pro_alertdown_to_idle_seen_evidence"

 

// These are played while the AI is doing agitated searching

"snd_state4SeenNoEvidence" "tdm_ai_pro_searching_no_evidence"

"snd_state4SeenEvidence" "tdm_ai_pro_searching_evidence"

 

// Pain/Death sounds

"snd_pain_small" "tdm_ai_pro_pain_small"

"snd_pain_medium" "tdm_ai_pro_pain_small"

"snd_pain_large" "tdm_ai_pro_pain_large"

"snd_pain_huge" "tdm_ai_pro_pain_large"

 

"snd_death" "tdm_ai_pro_die_loud"

"snd_death_liquid" "tdm_ai_pro_drown"

"snd_knockout" "tdm_ai_pro_die_quiet"

 

"snd_failed_knockout" "tdm_ai_pro_failed_ko"

 

"snd_blinded" "tdm_ai_pro_blinded"

"snd_airGasp" "tdm_ai_pro_cough_noair"

 

"snd_cough" "tdm_ai_pro_cough"

 

"snd_eat" "tdm_player_crunch"

 

 

Each spawnarg refers to a specific vocal soundshader, like:

 

tdm_ai_pro_warn_suspicious

{

minDistance 1

maxDistance 25

volume -2

// no_dups

 

sound/voices/pro/tdm_ai_pro_warn_suspicious01.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious02.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious03.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious04.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious05.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious06.ogg

sound/voices/pro/tdm_ai_pro_warn_suspicious07.ogg

}

 

 

Link to comment
Share on other sites

Yes, this does sound complicated... I had the distinct idea that you could set things like "no random idle bark" or something for a character? There are two situations that I wanted to control, one is a builder AI that is supposed to be in a stressful situation so I dont want him to be saying casual stuff like praising the Builder, etc. Another would be one of the monsters, that I wanted to maybe do exactly like Fidcal proposed (will study Heart tomorrow then, thanks for the tip); start from a muted set and add sounds for specific situations, hopefully new sounds, but that seems hard to do? I tried doing just that with some Doom's sounds (swapping with the normal ones, using silence on others), inside the spawnarg list, but that didnt work, I now see its more complicated than that.

Link to comment
Share on other sites

Well, creating a completely new vocal set is hard work- scripting, recording, defining the def - but modifying an existing one is not so bad. It's just a text file and merely by copying it and renaming it and giving that name to the AI spawnarg (it's something like def_vocal_set <name>) works immediately. Then looking in the new def file you made it's just plain text and the sound files or shaders are listed and can be edited/deleted/added to. Every sound can be listened to in Dark Radiant by making a speaker and selecting. You can't copy and paste directly from the selector but you can add it to the speaker and copy from there into your vocal def.

Link to comment
Share on other sites

I had the distinct idea that you could set things like "no random idle bark" or something for a character?

 

There is a spawnarg that set show often the character makes idle barks. You can set the time for something ridiculous, like hours. Can't remember what it is offhand.

Link to comment
Share on other sites

I'll try editting a voice set then, thanks for all the explanations. I did try setting the spawnarg to something pretty large like Springheel suggested and the silence makes the character more believable, even though some idle animations are still somewhat out of place (like strechting, will look into that). Not all characters have all the sounds listed in the spawnarg list, but some do. I have successfuly changed the impact sound of an object that was bugging me (part of a triggered scene), I'll try doing the same with AI.

Link to comment
Share on other sites

[quote]even though some idle animations are still somewhat out of place (like strechting, will look into that[/quote]

You cam set the list of which idle animations are played with the following spawnargs:

// greebo: Comma-separated list of anims

// Animations affecting all channels (refer to anim names in the AI's modelDef)
"idle_animations" "idle_leg_scratch,idle_cough,idle_cough02,idle_armwipe,idle_arm_scratch,idle_sneeze,idle_adjusting_belt,idle_eat,idle_spit,idle_shifting1,idle_shifting2,idle_nose_wipe,idle_nosewipe_short,idle_stretch,idle_stretch02,idle_standontoes,idle_check_hand,idle_scuff"

// Animations only playing on the torso channel. Applicable anytime.
"idle_animations_torso" "idle_cough,idle_nosewipe_short,idle_cough02,idle_armwipe,idle_arm_scratch,idle_sneeze,idle_adjusting_belt,idle_eat,idle_spit,idle_stretch,idle_check_hand"

// Animations only playing on the torso channel while the AI is sitting. Applicable anytime.
"idle_animations_sitting" "idle_sit_shift1,idle_sit_cough01,idle_sit_armdrop01,idle_sit_tap01,idle_sit_neckscratch"
  • Like 1
Link to comment
Share on other sites

Wrestling with objectives now, my last big task, in a bit of a hurry here so excuse the insistance... I have implemented the main objective which was the simplest (get something), and the escape objective; I need two optional, hidden objectives that should only be checked and appear if the player happens to complete them (one is a put an item there and another is to kill a certain AI); I also would like to set a "dont kill a certain type of AI", which doesnt seem to be covered in the tutorials, only individuals. So:

 

How can I make the escape and both optional objectives show up after a) you completed a necessary objective first (get item), or b ) you completed the actual objective. It says that you can set objectives to show up afterwards both at the end or at certain places in the list, but that they need to be triggered by something to do it, and no instructions are given to achieve that - will the completion of another objective or of itself trigger the hidden message to appear?

 

And please if someone knows how to make an objective where you cant kill certain teams, while others are free (say for example, "innocents" - some might be in a neutral team, others will react against you, but are included in the same group of people) - there arent that many AIs like that, would it work to just list them all one by one inside the objectives manager?

Edited by RPGista
Link to comment
Share on other sites

Create a darkmod - Targets - atdm:target_setobjective_visibility

 

Give it the spawnarg obj_id1 with a value that is the objective number to be made visible

 

Target it from the Completion Target box in the objective you want to complete first.

 

Target that same atdm:target_setobjective_visibility from the actual invisible objective itself so it makes itself visible (I'm only 99.9% sure this works. If it doesn't then create another invisible objective exactly the same and make that visible instead from the other one.)

 

With the other problem, make a Kill AI objective, check the boolean NOT radio button and the Player Responsible too. Look at the list of specifers in the Kill Target section below for choices. I'm only 96.25% certain all these work though. ;)

Link to comment
Share on other sites

I like those odds. ;) (Is there anything Fidcal doesnt know about TDM? Thanks one more time!) Im currently working on this, as well as finishing pathing, tweaking a couple of triggered events, and placing ambient sounds - while doing so howecer, found a new bug in the map, it will play all triggered speakers at the beginning of the map, at once, when you fail and restart it... Is this a common thing? VERY annoying.

 

Also learnt bitterly that you can cause the "leak" problem with entities too (slowdown to a crawl) by overlapping triggers with things like paths and speakers. It helps to move them apart but ive been addind more stuff and i thought i was keeping everything in order, but im still getting this. Made some modifications but will only be able to confirm tonight after work...

Edited by RPGista
Link to comment
Share on other sites

Hmmm... Im afraid that didnt change anything. I set the global to 0 just in case, but I still get to hear every triggered speaker at once when the map reloads. They work normally when you get to them later (well, actually one of them is getting clipped for some reason, only plays half, Im assuming its the whole triggered mess he's part of doing it somehow), but this is not good at all... Nobody else ever experienced this? Everything is working fine, again, if not for that happening. On to other things in the meantime.

Link to comment
Share on other sites

When you say 'triggered' how are you actually triggering them. Speakers generally work by proximity - that is, if the player is within the max range. But speakers can also be set to wait for a trigger that is, targetted from something. I'm just wondering if you've got something set up like targetting them from worldspawn?

Link to comment
Share on other sites

I've encountered this as well, but I don't exactly remember the circumstances. Speakers in your vicinity will play, even if marked "s_waitfortrigger". After that, they'll wait for the trigger and play normally, as expected.

 

Needs to be filed in bugtracker and squashed.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recent Status Updates

    • OrbWeaver

      Does anyone actually use the Normalise button in the Surface inspector? Even after looking at the code I'm not quite sure what it's for.
      · 6 replies
    • Ansome

      Turns out my 15th anniversary mission idea has already been done once or twice before! I've been beaten to the punch once again, but I suppose that's to be expected when there's over 170 FMs out there, eh? I'm not complaining though, I love learning new tricks and taking inspiration from past FMs. Best of luck on your own fan missions!
      · 4 replies
    • The Black Arrow

      I wanna play Doom 3, but fhDoom has much better features than dhewm3, yet fhDoom is old, outdated and probably not supported. Damn!
      Makes me think that TDM engine for Doom 3 itself would actually be perfect.
      · 6 replies
    • Petike the Taffer

      Maybe a bit of advice ? In the FM series I'm preparing, the two main characters have the given names Toby and Agnes (it's the protagonist and deuteragonist, respectively), I've been toying with the idea of giving them family names as well, since many of the FM series have named protagonists who have surnames. Toby's from a family who were usually farriers, though he eventually wound up working as a cobbler (this serves as a daylight "front" for his night time thieving). Would it make sense if the man's popularly accepted family name was Farrier ? It's an existing, though less common English surname, and it directly refers to the profession practiced by his relatives. Your suggestions ?
      · 9 replies
    • nbohr1more

      Looks like the "Reverse April Fools" releases were too well hidden. Darkfate still hasn't acknowledge all the new releases. Did you play any of the new April Fools missions?
      · 5 replies
×
×
  • Create New...