Jump to content
The Dark Mod Forums

Apples and Peaches: Obsttorte's Mapping and Scripting Thread


Obsttorte

Recommended Posts

OK. I've made the last changes and now it's done. This is the state:

  • everything is done with one stim
  • there is a ready scriptobject file which just need to be included via tdm_custom_scripts.script
  • only one spawnarg per entity needs to be changed to make it run
  • no triggers or targets are needed
  • no manual S+R setup needed
  • the main method in the mapname.script file needs only to contain one line
  • AI reacts to stealing, carrying things (bodies, weapons from dead guards, crates,...), lockpicking, weapon drawn and forbidden area entrance
  • hostility carries form one ai to another if player and the hostile ai is visible by neutral ai
  • ai will become hostile if they find an unconscious or dead body and see the player shortly after the KO/kill

So how does the setup work? You'll need to create a script folder in your project folder (where the maps folder, def folder and so on are) and put the script file in it which I'll upoad later. In addition you need a file called tdm_custom_scripts.script with the following code line

#include "script/name_of_script_file.script"

name_of_script_file will be the name of the file I am going to upload.

Then you need to create a mymapname.script file in your maps folder with the following piece of code

void main() {
thread checkStatus();
}

That's it from the coding side.

 

Now what must be done in DR?

On all flashbombs, flashmines and mines change the scriptobject by adding the string "_stim" at the end. So for flashbombs you would change "playertools_flashbomb" to "playertools_flashbomb_stim".

On all AI change scriptobject to "ai_stim". On all loot objects (and what else the player may not grab) set the spawnarg "frob_action_script" "frobsLoot".

On all info_location entities add the spawnarg "call_on_entry" "setNeutralZone" / "setHostileZone" dependend on whether the player is allowed to be there or not.

That's it.

 

Example map and script file will follow. I'll also go to add a wiki article describing the usage in detail and change the old one so it says that it is outdated.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

hitmanstyleII.pk4.txt

 

Here's the example map.

 

responseScript.script.txt

 

This is the script file. Remove the .txt ending.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Link to comment
Share on other sites

How to create a diary/note book

 

There once was the question on this forum, if people like taking notes during the game. The answers varied, but there where some who said that they don't like this, as they are playing in the dark for example.

 

The best solution to this problem seem to have some sort of diary that the player can carry around, and in which notes are automatically added once a certain condition is fulfilled.

 

Examples:

  • The player overhears a conversation, in which one guard tells another where a key can be found. Let's assume it's a key to a treasury, then the note added may be like "The key for the treasury can be found ..."
  • The player finds a readable with a code needed to open a certain door. "The key for door ... is"

And so one. So here is what you need.

 

First of all you need this script filetdm_diary.script.txt (delete the .txt ending). Place it in your script folder and add the line

#include "script/tdm_diary.script"

to the tdm_custom_scripts.script file in the same directory.

 

Now we have the scripts available and can use them in our mission.

 

1. Create the diary

 

Create a mobile readable and set the following spawnargs:

  • "scriptobject" "flexible_readable"
  • "gui_page1" any gui you like
  • "num_pages" "1"
  • "lineNums" "0"
  • "max_lines" the number of lines fitting on one page dependend on the gui choosen

That's it for the diary itself. To add a note to the diary, create a gui_message entity (to be found under targets). Change the following spawnargs:

  • "call" "addMessage"
  • "diary" name of the diary entity above
  • "lines" number of lines your note will need
  • "text" the text to be added
  • "scriptobject" "tdm_diary"

Line breaks between each note will automatically be added. Same goes for new pages if needed. To let the entity add the note, you just need to trigger it.

 

Have fun. :smile:

  • Like 1

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

A while ago I posted an approach to trigger events, if the player was looking at something. I created a scriptobject that can be used for such an approach.

trigger_look.script.txt

This scriptobject does allow an entity to trigger it's targets, if it is seen by a specified entity. The term "is seen" does only apply wordly to the player. For other entities (mainly AI) this means they must face the direction (so the z value is ignored). This is because the visibility directions function on them does not work properly. Nevermind.

 

To make it work you just need to copy the above file into your scripts directory and include it with

#include "script/trigger_look.script"

in your tdm_custom_scripts.script file. Don't forget to delete the .txt ending.

 

In DarkRadiant, if you want an object to react to for example the player looking at it, add the spawnarg "scriptobject" "trigger_look" on it. That's it. If the player is now looking at the object, it will trigger it's targets.

 

The specific behaviour of the object can be controlled by some spawnargs:

  • entityname: the name of the entity to react to (regarding the look direction) (default: player1)
  • stim: the number of the stim that activates the check (default: 23=PLAYER_STIM)
  • distance: the distance between the object to look at and the entity causing the check that should not be exceeded (default:1024)
  • tolerance: the view angle tolerance (default: 0.1), the higher this value, the less precise the entity must be looked at
  • once: if set to 1, one time use only (default: 0)

So without any spawnargs set this entity reacts to the player in a relatively high distance. If you want to use custom stims, they start with 1000 upwards.

 

EDIT: The entity only checks if it is looked at. The real visibility, so if something is in the view between the entity and the viewer, is not checked. Use the distance spawnarg to bypass negative side-effects through this behaviour. If someone needs a version that checks visibility, to, just post here and I will create one. (The same accounts for other stuff may needed).

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Wow, I hope you're documenting these somewhere...they all sound very cool but I don't have time to explore them right now.

Link to comment
Share on other sites

I created some wiki articles. If there is any other kind of documentation needed, I can do that. :smile:

  • Like 3

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Extremely useful additions, brilliant work man... People should really try including the system on a mission like NHAT (city section), a working npc behaviour would surely give it a whole new level!

  • Like 1
Link to comment
Share on other sites

Thanks.

 

I'm currently working on the "civilian AI run to alarm button and push it" behaviour. At the current state there are two outcomings.

  1. If there are no fleepoints in the map, the ai runs to the button, plays the proper animation and activates the alarm
  2. if there are fleepoints in the map, the ai still runs to the button, but the animation is not played (the alarm gets still activated) and than it immediality runs to the fleepoint

Is there a way to surpress the fleeing behaviour, so I can tell an AI not to flee? Otherwise the ai still does what he should (trigger hte alarm), but it looks quite strange (drive-by triggering so to say).

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

A little addition to the hitmanstyle script. Due to some simplifications I've done there are other behaviours that ill cause the ai to get alerted:

  • carrying an object (for example a crate)
  • climbing on objects (but not jumping)

I need to fix that. Sorry.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I've fixed the hitmanstyle script object: responseScript.script.txt

 

Two additions:

 

A while ago shadowhide had posted a possibility to get in-game shops running. I wrapped it up into a script object: shop_item.script.txt

 

I got the fleeing AI triggering an alarm to work. It's not optimal, but it works: tdm_alarm_ai.script.txt

 

Documentation:

 

Regarding the hitmanstyle script nothing has changed, so you can stick to the above doc.

 

Shop: To get it running simply create a model of the object to sell. Add the spawnarg "scriptobject" "shop_item" and "item" "<itemname>" where itemname is the name of the entity to sell. For example atdm:ammo_waterarrow.

 

Additional spawnargs:

price, amount (both pretty self explanatory I guess)

 

AI alarming.

 

On all AI's you want to be able to setup an alarm, set "scriptobject" "alarm_ai". The ai must flee to make use of this, so use it on civilians. Than place fleepoints in front of every alarm button and let it target the button. Set the fleepoint to guarded using the spawnarg "is_guarded" "1". Let the ai target all those fleepoints. (Don't worry, they wont walk to them).

 

Spawnargs:

 

alarm_wait controls the time that must pass before an AI will use an alarm button (any of them) again. (The default value is two minutes).

 

What happens. If you alert such an AI, it will run to the next guarded fleepoint. If there is a button nearby (or a lever or whatelse), he uses it. Letting the button trigger an alarm is up to you. After that the AI will run to a fleepoint far away from the player. If you want this behaviour also for other AI hostile to this one, you have to add a player stim to them.

 

Have Fun :smile:

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Wow, that alarm bit sounds really cool!

 

I'm completely ignorant when it comes to scripting, but could we enable that behaviour by default by including your script in the core mod? Are there performance issues to consider?

Link to comment
Share on other sites

I need to bypass some things to get it working. The current script is more or less adopted to the circumstences. I guess if it should be hardcoded, there are more performant ways to go. Regarding performance issues in this script I make use of the player stim. Don't know how much it would impact on large maps.

 

EDIT: I've copletely forgot to mention that the code for the diary is based upon the code for the tdm_gui_message object written by Flanders. Sorry.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Btw, there is a vocal definition for AI who are shouting for an alarm to be sounded: snd_raise_alarm. ("To arms! Raise the Alarm! Sound the alarm bells!" etc) Maybe you can work that in somehow.

 

 

I guess if it should be hardcoded, there are more performant ways to go.

 

I personally think this behaviour deserves to be hardcoded, if that's possible (I have no idea what kind of work is involved with that). It's something I've hoped to see for a long time with our AI.

 

By the way, mappers can set how much damage armed AI take before they flee, so if mappers want armed AI to flee quickly during a fight to go raise an alarm, they can change that spawnarg (I can't remember what it is right now though).

Link to comment
Share on other sites

I agree with Springs AI running to an alarm button would be an excellent addition.

 

Are these new mapper options wikified, by the way? It would be a crime if these were forgotten as time marches mercilessly forward.

Clipper

-The mapper's best friend.

Link to comment
Share on other sites

A lot of these new things seem to overlap with the plan for the Security Level feature, which I was going to turn to after March 24th (with grayman, but now it seems he's taking a break, which is fine & well deserved BTW). But anyway, the plan is we want to allow mappers to vary guard reactions (neutral until they see X) with spawnargs on the AI & locations (so we're talking about changes in the source)... The missing pieces have been exactly what Obs has been scripting. But there's other things we want to add too, like whether the AI has a "crime" memory, more conditions, & other things I forgot just now...

 

Maybe Obsttorte could help me out when I get to it?

I agree we need this in the core mod, but I feel it should be done as a proper system.

What do you see when you turn out the light? I can't tell you but I know that it's mine.

Link to comment
Share on other sites

personally think this behaviour deserves to be hardcoded, if that's possible (I have no idea what kind of work is involved with that).

It's surely possible. I'll see if I find the time to take a look at the code to find out where the fleeing behaviour is handled. The behaviour would then be like

  • flee to a fleepoint
  • check if it has a spawnarg set pointing to an alarm button (mybe not target, but something new like alarm_button or so)
  • play the animation+soundbark+trigger the button

I guess these are pretty simple changes. We'll see.

Btw, there is a vocal definition for AI who are shouting for an alarm to be sounded: snd_raise_alarm. ("To arms! Raise the Alarm! Sound the alarm bells!" etc) Maybe you can work that in somehow.

Will take a look at that.

By the way, mappers can set how much damage armed AI take before they flee, so if mappers want armed AI to flee quickly during a fight to go raise an alarm, they can change that spawnarg (I can't remember what it is right now though).

Yep. It's low_health_script and low health_treshhold (or similar). Didn't mentioned that to not make things too confusing. I didn't testet it yet, but the provided function should work for them, too.

Are these new mapper options wikified, by the way? It would be a crime if these were forgotten as time marches mercilessly forward.

The hitmanstyle thingy is wikified and the automap. For the other scriptobjects I need to write wiki articles. Unfortunately it seems that I'm not able to add links to these articles in the summary pages. For example, if you search for ai you get the page with all the wiki articles refering ai setups, but my article regarding the hitmanstyle approach (definetely need a new name for that one) is not listed there and I can't add a link.

 

So I'm not sure if those articles can be found that easely by someone searching randomly for it.

 

Thanks a lot for your warm words by the way. Again, if there is other behaviour someone likes to be set up I would be glad to take a look at it.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Maybe Obsttorte could help me out when I get to it?

Always happy to help :smile: (I guess grayman deserves a break after all the improvements he had provided in the last weeks, especially the annoying sound issue he solved. And I can't wait to play his next FM).

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Great! I'll feel much better about it with another set of eyes.

I'll PM you my notes for it in a week or 2.

What do you see when you turn out the light? I can't tell you but I know that it's mine.

Link to comment
Share on other sites

Fine.

 

Addition. I've found the fleeing code. It's in game/ai/ai.cpp.

 

 

bool idAI::Flee(idEntity* entityToFleeFrom, bool fleeingEvent, int algorithm, int distanceOption) // grayman #3317
{
EscapePointAlgorithm algorithmType = static_cast<EscapePointAlgorithm>(algorithm);

if ( !aas || ( !entityToFleeFrom && !fleeingEvent ) ) // grayman #3317
{
 StopMove( MOVE_STATUS_DEST_UNREACHABLE );
 AI_DEST_UNREACHABLE = true;
 return false;
}
// The current AI origin
const idVec3& org = physicsObj.GetOrigin();
// These two will hold the travel destination info
idVec3 moveDest;
int moveAreaNum(-1);
if (algorithmType != FIND_AAS_AREA_FAR_FROM_THREAT)
{
 // Use the EscapePointManager to locate a pathFlee entity
 // Setup the escape conditions
 EscapeConditions conditions;

 conditions.fromEntity = entityToFleeFrom;
 // grayman #3317 - need threat position if fleeing an event
 if ( fleeingEvent )
 {
  conditions.threatPosition = GetMemory().posEvidenceIntruders;
 }
 else
 {
  conditions.threatPosition.Zero();
 }
 conditions.aas = aas;
 conditions.fromPosition = org;
 conditions.self = this;
 conditions.distanceOption = static_cast<EscapeDistanceOption>(distanceOption);
 conditions.algorithm = algorithmType;
 conditions.minDistanceToThreat = 0.0f;
 // Request the escape goal from the manager
 EscapeGoal goal = gameLocal.m_EscapePointManager->GetEscapeGoal(conditions);
 if (goal.escapePointId == -1)
 {
  // Invalid escape point id returned
  return false;
 }
 // Get the actual point (this should never be NULL)
 EscapePoint* targetPoint = gameLocal.m_EscapePointManager->GetEscapePoint(goal.escapePointId);
 moveDest = targetPoint->origin;
 moveAreaNum = targetPoint->areaNum;
}
else
{
 // algorithm == FIND_AAS_AREA_FAR_FROM_THREAT
 int areaNum = PointReachableAreaNum(org);
 idVec3 pos;
 aasObstacle_t obstacle;
 int numObstacles;
 if ( entityToFleeFrom != NULL ) // grayman #3317
 {
  // consider the entity the monster is getting close to as an obstacle
  obstacle.absBounds = entityToFleeFrom->GetPhysics()->GetAbsBounds();
  if ( entityToFleeFrom == enemy.GetEntity() )
  {
   pos = lastVisibleEnemyPos;
  }
  else
  {
   pos = entityToFleeFrom->GetPhysics()->GetOrigin();
  }
  numObstacles = 1;
 }
 else // fleeing from an event (i.e. murder)
 {
  pos = GetMemory().posEvidenceIntruders;
  numObstacles = 0;
 }
 // Setup the evaluator class
 tdmAASFindEscape findEscapeArea(pos, org, distanceOption, 100);
 aasGoal_t dummy;
 aas->FindNearestGoal(dummy, areaNum, org, pos, travelFlags, &obstacle, numObstacles, findEscapeArea); // grayman #3317
 aasGoal_t& goal = findEscapeArea.GetEscapeGoal();
 if (goal.areaNum == -1)
 {
  // Invalid escape point id returned
  return false;
 }
 moveDest = goal.origin;
 moveAreaNum = goal.areaNum;
}
StopMove(MOVE_STATUS_DONE);
MoveToPosition(moveDest);
return true;
}

 

 

The code checks for a fleepoint matching the conditions passed (for example EP_FIND_GUARDED, EP_FIND_NEAREST and so one). Anyways, I wouldn't place the alarm code there. At the end the method calls the function moveToPosition(pos) where pos is the point the ai should move to. This is a script function which refers to this function here I guess

 

 

/*
=====================
idAI::MoveToPosition
=====================
*/
bool idAI::MoveToPosition( const idVec3 &pos, float accuracy )
{
// Clear the "blocked" flag in the movement subsystem
movementSubsystem->SetBlockedState(ai::MovementSubsystem::ENotBlocked);
// Check if we already reached the position
if ( ReachedPos( pos, move.moveCommand ) )
{
 StopMove( MOVE_STATUS_DONE );
 return true;
}
if (   ( GetMoveType() == MOVETYPE_SIT )
 || ( GetMoveType() == MOVETYPE_SLEEP )
 || ( GetMoveType() == MOVETYPE_SIT_DOWN )
 || ( GetMoveType() == MOVETYPE_GET_UP )
 || ( GetMoveType() == MOVETYPE_LAY_DOWN )
 || ( GetMoveType() == MOVETYPE_GET_UP_FROM_LYING ) )
{
 GetUp();
 return true;
}
idVec3 org = pos;
move.toAreaNum = 0;
aasPath_t path;
if ( aas )
{
 move.toAreaNum = PointReachableAreaNum( org );
 aas->PushPointIntoAreaNum( move.toAreaNum, org ); // if this point is outside this area, it will be moved to one of the area's edges
 int areaNum = PointReachableAreaNum( physicsObj.GetOrigin() );
 if ( !PathToGoal( path, areaNum, physicsObj.GetOrigin(), move.toAreaNum, org, this ) )
 {
  StopMove( MOVE_STATUS_DEST_UNREACHABLE );
  AI_DEST_UNREACHABLE = true;
  return false;
 }
}
if ( !move.toAreaNum && !NewWanderDir( org ) )
{
 StopMove( MOVE_STATUS_DEST_UNREACHABLE );
 AI_DEST_UNREACHABLE = true;
 return false;
}
// Valid path to goal, check if we need to use an elevator
if (path.type == PATHTYPE_ELEVATOR)
{
 NeedToUseElevator(path.elevatorRoute);
}
move.moveDest  = org;
move.goalEntity  = NULL;
move.moveCommand = MOVE_TO_POSITION;
move.moveStatus  = MOVE_STATUS_MOVING;
move.startTime  = gameLocal.time;
move.speed   = fly_speed;
move.accuracy  = accuracy;
AI_MOVE_DONE  = false;
AI_DEST_UNREACHABLE = false;
AI_FORWARD   = true;
m_pathRank   = rank; // grayman #2345
return true;
}

 

 

As you can see in the beginning it checks if the point was already reached. I guess this is the best place to insert the code

  • check if ai was currently fleeing
  • check for alarm button
  • face it, play anim+sound, trigger the button

The first point may be handled by retrieving the current alert level. I don't know if there is a variable that stores the fact the ai is currently fleeing, but it doesn't seem so.

Regarding the alarm_button. In the moveToPosition method the ai doesnt' know the fleepoint anymore. So it may be an idea to check for the button in the flee method and if there is one save a pointer to it. In the moveToPosition method inside the targetReached loop we than need to check whether this pointer is not the null pointer, activate the target (button) the pointer points to and delete the pointer (so it is the null pointer again). Then the last step must be handled (animation and sound).

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

This behaviour would only be triggered, if the fleeing algorithm is not GET_AAS_AREA_FAR_FROM_THREAT.

 

One possibility is the following. Add a member pointer CBinaryFrobMover* (I guess this is used for button, too) initialized with NULL. Let's call it alarm_target.

 

In the flee method

// Get the actual point (this should never be NULL)
 EscapePoint* targetPoint = gameLocal.m_EscapePointManager->GetEscapePoint(goal.escapePointId);
 moveDest = targetPoint->origin;
 moveAreaNum = targetPoint->areaNum;
 alarm_button=targetPoint->spawnArgs.getEntity("alarm_button"); //does such a function exist? does it give back a pointer?

In the moveToPosition method

// Check if we already reached the position
if ( ReachedPos( pos, move.moveCommand ) )
{
 StopMove( MOVE_STATUS_DONE );
 if (alarm_target!=NULL) {
float tempdist=(physicsObj.getOrigin()-alarm_target->physicsObj.getOrigin()).LengthFast(); //just to be sure we are close enough
if (tempdist>128) return true; //too far away, we are done
//play animation
alarm_target->Activate(this); //activate the button
alarm_target=NULL; //reset the pointer
 }
 return true;
}

Note that this is more pseudocode. I've used the scriptfunctions here. I have to look up the correct functions, but basically that's it.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

wiki article describing the in-game shop scriptobject: http://wiki.thedarkm...le=In-game_shop

 

wiki article describing the note book scriptobject: http://wiki.thedarkm...matic_note_book

 

wiki article describing the trigger_look scriptobject: http://wiki.thedarkmod.com/index.php?title=Triggering_events_when_looking_at_something

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I've tried applying the fleeing behaviour to guarded AI. However, the script is called but the guarded AI behve completely different when receiving the flee command as the civilian one does.

 

post-11230-0-56300900-1363721781_thumb.jpg

 

Will stick to that.

  • Like 1

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

Heh.

 

When you say "guarded AI" do you mean "an AI that is a guard carrying a weapon"?

 

Are you working with 1.08, or with the latest TDM in SVN? I ask because fleeing behavior has improved in SVN.

 

At some point we'll need to test your hitman-style script with SVN if you haven't been doing that already.

Link to comment
Share on other sites

I use 1.08.

 

Is the svn downloadable somewhere. And are there any instructions on how to compile it. I have both windows and lunix so I would prefer the OS where it is easier :smile:

 

And yes, guarded AI means armed. Ten years of english lessons and nothing learned :smile:

 

Btw: Any feedback regarding the fleeing behaviour would be nice. I don't know if what I've posted make much sense as I didn't have much time thinking about it. I used the svn code that is public available to check the methods. Is this the up to date version.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

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

    • Petike the Taffer

      I've finally managed to log in to The Dark Mod Wiki. I'm back in the saddle and before the holidays start in full, I'll be adding a few new FM articles and doing other updates. Written in Stone is already done.
      · 4 replies
    • nbohr1more

      TDM 15th Anniversary Contest is now active! Please declare your participation: https://forums.thedarkmod.com/index.php?/topic/22413-the-dark-mod-15th-anniversary-contest-entry-thread/
       
      · 0 replies
    • JackFarmer

      @TheUnbeholden
      You cannot receive PMs. Could you please be so kind and check your mailbox if it is full (or maybe you switched off the function)?
      · 1 reply
    • OrbWeaver

      I like the new frob highlight but it would nice if it was less "flickery" while moving over objects (especially barred metal doors).
      · 4 replies
    • nbohr1more

      Please vote in the 15th Anniversary Contest Theme Poll
       
      · 0 replies
×
×
  • Create New...