Jump to content
The Dark Mod Forums

Newbie DarkRadiant Questions


demagogue

Recommended Posts

Test for misaligned brushes/patch leak - caulk wall.

If fixes. Leave it there and fix with sound damper if required if count allows.

If not - there's a problem. Copy to outside section (for texture, etc...) - Delete and rebuild.

Often I will caulk room the entire level and simply visportal the leak(s) I can't fix and set sound dampening to max, if there's an AI about on the other side..

Snapping to gird works ok for regular aligned brushes at tiny scale (ie, totally square and made from brush, "make room" no mesh) - for patch mesh (intersect might look crap) or angled brushes (often requires something to break up sharp connection line) on any axis - it can be annoying.

Link to comment
Share on other sites

It's definitely not the sealing brushes, they were all snapped to grid 8. I suspect it was a problem with my origin placement being on a seam between sealing brushes, and TDM getting confused by this. I've since tried to correct my sealing brushes with full overlap instead of corners touching corners; hopefully the problem was as simple as that and not something more complicated, but I guess we'll see. Thanks for the suggestions though!

Link to comment
Share on other sites

Delete and rebuild, I would :P


My questions:

Is there a way to "wake up" an AI without having to delete it's KO'd ragdoll and respawn a new one with different behaviours..? Cos I'm having difficulty with the scripting for these actions. Mostly timing, which I think I can figure out and apply to named character (eg, KO'd kidnap victim will wake in 10 mins after being dropped off at objective point - seems more fair than 10 mins from KO, cos idk how game will handle a carried AI being deleted) ... Also don't seem to be getting anywhere with:

deleteSelectionSet(string name)

Rather than spawn a new AI, i'm simply starting a "dormant" AI that's hidden behind a keyless locked door and having it run away... Can't find wiki help on spawning AI, or deleting/destroying the KO'd ragdolls... only reference I can find in 300 pages is to do with the work-around for the sleeping AI KO sinking ragdolls into the beds.


Idk how to do this and I can't seem to figure it out.


Is there some secret spawnarg that allows for a discovered body to be "woken up" and resume it's default behaviour after everyone returns to normal from alert?


Thanks!

Link to comment
Share on other sites

Thanks - You make it sound easy...




But it's not because there appears to be several ways of doing it, although - being the dunce I am - I don't understand how to get any of them working, script, stim/response, objective/death calls, whatever.

Since KO counts as costing some health - it appears necessary to set a float and then have this act as the "IF KO'D THEN" bit... but - idk how to do it so it works - there's nothing I can find that explains how this might be possible.




// to make sure script isn't called on KO and only on dropping kidnap victim, objective complete (irreversable=0), or not
 
spawnarg "call: removevic" on objective.
// destroying the ragdoll for "victim" and replacing with "woozy victim"



void removevic()
{    
 
// player has 5 mins to fulfil other objectives (if not complete) before kidnap victim wakes and wanders off

 
ai victim = sys.getEntity(nameofvictim);

float health = nameofvictim.getHealth();

if ( health < 100 )  
{
// how to not have to use isPlayerResponsibleForDeath(); make new entity also fulfil objective and fail if dies..?

wait(600);
kill(nameofvictim);

}


// make use of death_script spawnarg to call spawnwoozy

void spawnwoozy()

{

destroy(nameofvictim);   

entity woozy_vic = sys.spawn("atdm:ai_whateveritwas");

copyBind(woozy_victim_in_spawn_pit); ..?

woozy_vic.setOrigin(thisplacerighthere);

woozy_vic randompath() / wander();
}

For everyone else on the map (cos idk how to blanket every AI), was thinking something like...

// from stims?


void wakeup01()

{

KO_Knockout(nameofAI $player1);

// so dropping a heavy object on them really does knock them out for the duration.

float random(600 6000)

wait(random);

kill(nameofAI);

}

// use death_script to called wakeup02 to spawn duplicate AI (figure out how to set alert level)



void wakeup02()

{

getOrigin(nameof KO'd AI);

entity sys.spawn("atdm:ai_whateveritwas");

setOrigin(nameof KO'd AI);

destroy(nameof KO'd AI);

copyBind(nameof KO'd AI);

}



I'm sure there's a way to randomise the wait time so it could be anywhere between concussion and permanent brain damage / coma time unconsciousness. Idk how to call that properly, though.

But that's the logic - just don't know how to talk in script to get it to do the whole "wake up a KO'd person" thing... Don't care if the player witnesses it happening - low chance - include warning bark and figure some way to reduce the AI's senses for a short time, in case the player happens to be in the immediate area.

Hey - maybe they can spawn as sleepers, on the floor..? that would mean they'd be "awake" again, perhaps mutter and stuff as a "we're not as good as dead" and give the player a shock if they ran past what they thought was a KO'd enemy:)

This kind of thing would also be cool for mages that explode in firey hurt-inducing mage rage when killed, or disperse into swarms of rats or become ghosts or immortals / re-animating as zombies or skeletons (after being "devoured by rats" that converge on the corpse) or vanishing in a puff of smoke, only to reappear somewhere else - would be good for the werebeast hunt/e[r/d] thing, as it would never really "die", but continually hunt the player.


Mostly, though - it'd be nice to have an AI "wake up" after being knocked out after a certain period of time.

Just - can't get it working at all...

Tried stims and triggers and stuff - looks like it has to be script stuff...




...but I haven't got a fkn clue what I am doing.


Edited by teh_saccade
Link to comment
Share on other sites

There is a "ko_script" which you can specify on ai via a spawnarg named like that, which get's called once the ai got knocked out (similar to the death_sript). Besides that, you could also alter the scriptobject of the ai.

  • 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

The main problem, I can think of is, that the KOed AI is not the AI anymore, but is replaced by a ragdoll. If I remember correctly, the ragdoll is not targeted by scripts that use the name of the AI. One thing I could think of (although I also don't know the srcipt commands for that) would be to teleport the AI to a room outside the map instead of removing it (this would have to be changed in the game's KO script, if you want to do it in general). Then you could put the AI to sleep there (this will require the AI to go through the "go to sleep" animation, so it should not be teleported back in that time) and after a set time you replace the ragdoll with the sleeping AI. As the AI is not removed, but only teleported all spawnargs should still be as they were before (especially the name). With the script event "alertAI" (see Wiki for details; I don't know how to jump to the according entry on the page, sorry) you can alert the AI after teleporting. The only thing missing here is how to target the ragdoll. Here I have no idea how to get the name of it...

  • Like 1
Link to comment
Share on other sites

BTW: I just stumbled on the post, where I got the information about ragdolls not being AI anymore:

 

 

No they're not "alive". Ragdolls are not AI any more. Technically they are animated entities -- like waving flags -- but with no animations or scripts running. You can probably set them to non-solid but a better idea would be to cover them in a clip brush so that the player and AI step over them naturally even if they can't be moved.

 

It's from the thread about posing unconcious bodies.

  • Like 1
Link to comment
Share on other sites

Thanks Obs - idk about that arg - that's a good way to blanket everyone on a level...

Destined - Thanks for pointing that out!!! The KO'd not being AI is why I tried the float health < 100 thing as a call if to do stuff or not. But if the ragdoll can't be targetted..? Nice spot - tyvm, but... bollocks... How the heck to find the entity name of each ragdoll instance created..?


Making a "teleport dungeon" with cells for each and every AI might be a pain, but it was something that has crossed my mind, although not quite in the manner you have suggested... More like clone factories... for ragdoll clear-up replacement. Guess I won't delete that map just yet....

Your backwards approach makes total sense.

But idk if someone calmly laying down for a quiet nap is the correct response to being bludgeoned on the head...

Would have to give all AI "ko immune" and call script for each one on any damage for them to be "KO'd/ aka goto sleep".

One premise I can think of for that is if starter arrows were said to be tipped with a sleeping poison and blackjack and sword was removed from player inventory at start, "well, that's the last of it" when infiltrated and completed objective, arrows behave normally again, no poison left... The AI would also wake up if there was an alarm or the player didn't creep past or caused a wake-up event if put to sleep, which would compensate for "sleeping on the job" if in sight of another AI. Though this "elite asleep on the job" might be mitigated through judicious placement of guards and the player causing them to be re-awoken by their comrades to join a search or didn't realise they would wake up again, leaving them with less and less arrows to keep putting them asleep with every mistake - ramped difficulty through tools and player skill, rather than stats. Perfect. NO deaths cos armour means leg shots only. Or starting at higher alert so even headshot doesn't kill for rampart archers...

Now THAT would make for an interesting (if somewhat linear) challenge area, if designed to be difficult bow-work and route, with random interest AI so it's not routine... objective: to put the perimeter's elite, armoured and un-KO-able guards to sleep (undetected), as there's no other way in (one carries key on front), only for them to be awake again on the way back out - maybe a wait for so it can be a take out both guarding the locked gate under the search-light tower at once thing... Chuck a civilian in who's gonna get killed or panic when shot and cause an alert and that's the trap. Prime Directive: Protect the Innocent (and don't arrest OCP officer)

Sneakable in reverse through a few different routes, cos player now has tools, lockpicks, flipped [search]lights off, poss. has random element of time of wake-up return to patrol, access to alternate route unavailable from approach, maybe saved a few gas/water/rope/vine arrows, guards spotting player no longer fail so can just book it out the front door, etc...), once player has ninja'd in and found their blackjack, sword, tools and anything else to deal with the rest of the crew inside, if needed (obj #2 - gear up from the armoury).

Way more fun than simply sneaking up behind someone and konking 'em out, being a ninja assassin and having to pull off some stealthy bow-work, with an interesting character/story intro angle, to get in before you can go back to to the regular beatings and bloody mutilations... I mean stealth.

Maybe a loose multi-level "hedgemaze", with overlooks for player and keen-eye'd archers on the walls who'd have to be taken first for stealth, would conceal the bodies, but still provide cause for a prowling AI to walk over a sleeping AI and wake them up again... esp if overlapping patrol routes on tighter corridors. hmmm... needs planning the level design, building it, then scripting that stuff...



Great idea Destined! That sounds like a really fun way to make approaching a barracks or walled compound far more interesting and forcing an element of tense confrontation and development of a more aggressive-stealth character, that still retains a shred of humanity to not introduce every AI to the pointy end of a sharp thing for all those pacifists out there.

Maybe holy water effect can be altered to achieve this, reskinning undead and "making human", to provide actual limited number of instances of use... Except revenants are now immune to holy water... oh yeah... great. First movers don't crush stuff any more - now undead are even bigger dicks than they were already. Wondered why those buggers were so much tougher than they used to be.

Undead suck - figuratively, totally - except vampires, which do only literally...


Haven't tried "stopRagdoll()", because there doesn't appear to be a way to call the ragdoll entity name/id that's created.

Although... there is a way to kinda name ragdolls, such as "gertrude's corpse" or whatever through shouldered_name / shouldered_name_dead... perhaps that's the way to reference them somehow?

Maybe through getShouldered/Dragged/Grabbed() to find the entity id of the ragdoll to target..?
That would work for a single target waking back up, such as the kidnap victim's ragdoll entity ID, perhaps... or any other bodies that were moved through KO arg call:)
Unless the player carries them for 600-6000 seconds.

Thanks for the reminder about alertAI - I forgot about that. After a while that list starts to blur into one - could do with some divide breaks for ease of reading, maybe (usu. control+f and word guessing).
Also, "actor: actor causing alert"? that's the player? unsure if correct word used there... maybe "actor [to be] alerted" would be more clear. Ambiguous context...

Will have a play with the KO arg, but if it works the way it appears - which would be a great way to enter - the only way I know to target a ragdoll is something like http://wiki.thedarkmod.com/index.php?title=Dead_Bodies

AFAIK, created ragdolls are all the same base name for model, but given entity id's?
Only way I know how to find that is to take the save file typeinfo...


Idk it's too complicated for me to figure out...


Reckon I'm gonna go for Destined's sleeping poison idea challenge rather than the wakeup on KO scripting - I don't understand how to do that.
Decent trade-off, I reckon, and it's a break-away from normal play-style for most missions while still satisfying the no-kill crowd. Fair trade.

360 aerial blackjacks and long distance headshots (or waiting for my hot cuppa to get cold) get a bit dull after the first few thousand times.
Christ, imagine having to do it every 5 minutes when someone wakes back up as you're sprinting around finding that last 1 gold coin you missed somewhere...

I'd rather kill everyone than KO them - way more fun to play assassin/infiltrator as prologue to mission.



Cheers for the help:)

Link to comment
Share on other sites

Glad I could help. Although I think you misunderstood me regarding the sleeping: My idea was to teleport KOed AI instead of removing them, but still create the ragdoll (the room you teleport them to does not need to have cells; in this case we don't need to be humane, but you can still give them some water and food, if you like ;) ). Then you put the AI to sleep in this room and after some time you teleport the AI to the position of the ragdoll and remove the ragdoll. There will be glitches, of course, but you would end up with KOed AI that can be woken after some time (i.e. the ragdol being replaced by the sleeping AI). This still leaves the problem that you need the name of the ragdoll so you can get the current position of the ragdoll and remove it. Maybe the console command "g_showEntityInfo 1" can help in this regard. Not sure if this also shows the name of entities, but it is worth a try. If there is a naming convention, you could see it with this. Of course, the "sleep arrow" idea is still interesting :)

 

I agree, the script events list is a little bit crowded, but ctrl+f helped me most of the time. The "actor" arg for alertAI should be the player (in this case). I believe this can be changed to alert AI without counting to the player's stealth score (like guard being alerted by non-player thieves or builders being alerted by pagans).

Link to comment
Share on other sites

Yeah, the ragdoll thing kinda turned me off the idea - idk if it's gonna be possible to achieve. I've another gripe too, but that's for its own thread.

IIRC, dead bodies were assigned entity id in some order - this means it would be impossible to consistently target anyone, unless there was only one ragdoll in the mission (kidnap victim) and I'm not a fan of disallowing people the freedom to get into a fight or KO someone or beat their longest headshot record or whatever. Or the KO script call could grab it somehow... (idk)...


Was thinking of playing through a bunch of missions soon again, because over half of the maps I was working on are no longer working... so if there's anything like that - i'll open it up and have a butcher's.

Link to comment
Share on other sites

ERH - the fps drops substantially because of the ragdolls physics (which is sometimes very funny) - try making a massive pile of bodies in any mission, it'll do the same.

You've manually placed 10 ragdolls in your map..? Props.

One solution would be to trap them in a nodraw brushbox, or build a cage around them or put rocks on them or something... A reason why they'd be stuck at the bottom.

Or - lower the floor a few units, drag them into position at the "sunk" position, save ragdolls or whatever the command is, then raise the floor so they are touching or - better - slightly clipped and therefore pinned (hopefully not flapping about). Turn off frob in spawnargs for entities (idk if applies to ragdolls?) in case player tries to rescue or pose them in suggestive positions for TDS&M mod...

Any impulse /forcefield in the water with objects makes everything go crazy for me, but you could try adding a downwards impulse to the water to help them settle faster. But... since model's mass is changed in water... they will probably bounce off and be pushed back down and it would lower performance even more, due to forcefield's constant checks.

Try tweaking position and raising floor til it intersects so they are starting off as dropped as possible.

On my rig, usually about 10-12 bodies stacked will drop FPS when one is dragged out of the pile and shot through the head with an arrow.
I learned never to dispose of more than a few bodies in any one pool of water in this game because can wreck it.

Oh wait - you could try to put living AI in the water standing on the bottom, make sure they can drown - put their health to 1, critical to 0, start sleeping (on floor arg 1 might be required) - and just let them drown and it might help - they'll already be lying at the bottom of the drink:)

(reckon 10 might be a bit taxing for the game)

OR

Have the ragdolls drop into empty space (no water there) then triggeronce a script as the player moves from start that spawns water worldspawn brush in that space..?

Edited by teh_saccade
  • Like 1
Link to comment
Share on other sites

This command don't even use word pendulum but looks like it mimics its movement, sadly I don't see any effect of it.

 * Initiates a rotation back and forth along the given angles with the given speed and phase.
 */
scriptEvent void    sway(float speed, float phase, vector angles);

Aside from one above, is there a way to turn off pendulums? Simple triggering do nothing.

S2wtMNl.gif

Link to comment
Share on other sites

maybe you could use a script to set values on pendulum to all be zero, or speed to zero, then it shouldn't move. even though it thinks it is.

 

it might just be as simple as triggering the pendulum, if its like other movers, then triggering them a second time usually stops them.

Edited by stumpy
Link to comment
Share on other sites

This command don't even use word pendulum but looks like it mimics its movement, sadly I don't see any effect of it.

 * Initiates a rotation back and forth along the given angles with the given speed and phase.
 */
scriptEvent void    sway(float speed, float phase, vector angles);

Aside from one above, is there a way to turn off pendulums? Simple triggering do nothing.

What kind of entity did you try to use it on? It is intented for func_movers.

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 you could use a script to set values on pendulum to all be zero, or speed to zero, then it shouldn't move. even though it thinks it is.

 

it might just be as simple as triggering the pendulum, if its like other movers, then triggering them a second time usually stops them.

Thats what I was trying to do:

     $func_static_3.sway(0, 0, '0 0 0');

but it have no effect on moving pendulum.

 

What kind of entity did you try to use it on? It is intented for func_movers.

 

I want to stop pendulum from moving. I guess the hard way is to .hide pendulum and .show func_static with the same model.

Shame you can't control pendulums; if you want controlled speed up / slow down you have the spline mover - but its not looping.

Edited by ERH+

S2wtMNl.gif

Link to comment
Share on other sites

Having new issues with my custom arrow model. I seem to have fixed the missing collision mesh problem, which was likely due to my lwo exporter using the object or mesh name for the material which I had not considered renaming to the texture. Now however I get a crash, apparently due to a LOD mesh causing memory issues (I obviously don't plan to have LOD models for the arrow).

 

Here is the log when running TDM from bash. Anyone know what may be causing this and how to get rid of it please?

--------- Map Initialization ---------
Map: test
glprogs/ambientEnvironment.vfp
glprogs/ambientEnvironment.vfp
----------- Game Map Init ------------
collision data:
     3 models
   343 vertices (8 KB)
   623 edges (21 KB)
   275 polygons (19 KB)
    22 brushes (3 KB)
    71 nodes (1 KB)
   394 polygon refs (3 KB)
    58 brush refs (0 KB)
   454 internal edges
     0 sharp edges
     0 contained polygons removed
     0 polygons merged
    57 KB total memory used
2 msec to load collision data.
map bounds are (1088.0, 1088.0, 800.0)
max clip sector is (68.0, 68.0, 50.0)
    0 bytes passage memory used to build PVS
    0 msec to calculate PVS
    2 areas
    0 portals
    0 areas visible on average
    8 bytes PVS data
[Load AAS]
loading maps/test.aas48
[Load AAS]
loading maps/test.aas96
[Load AAS]
loading maps/test.aas32
done.
[Load AAS]
loading maps/test.aas100
[Load AAS]
loading maps/test.aas_rat
[Load AAS]
loading maps/test.aas_elemental
ConversationManager: Found 0 valid conversations.
Entering tdm_main()
Exiting tdm_main()
Spawning entities
signal caught: Segmentation fault
si_code 1
Trying to exit gracefully..
--------- Game Map Shutdown ----------
ModelGenerator memory: 12 LOD entries with 0 users using 96 bytes.
--------- Game Map Shutdown done -----
Shutting down sound hardware
----------- Alsa Shutdown ------------
close pcm
dlclose
--------------------------------------
idRenderSystem::Shutdown()
I18NLocal: Shutdown.
------------ Game Shutdown -----------
ModelGenerator memory: No LOD entries.
Shutdown event system
--------------------------------------
shutdown terminal support
About to exit with code 0
Link to comment
Share on other sites

 

Shame you can't control pendulums;

That's what func_movers are meant for ;)

 

 

signal caught: Segmentation fault

I think that is a memory issue. If you don't set things up to use LOD, they won't do so by themselves. Are you sure LOD is causing the issue?

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 think that is a memory issue. If you don't set things up to use LOD, they won't do so by themselves. Are you sure LOD is causing the issue?

 

I haven't manually configured any LOD settings, but that's what the console output is saying. What else could it be? Clearly it's induced by my lwo file, as I don't get the issue if I'm not using it in the def.

Link to comment
Share on other sites

si code 1 = task performed successfully but with error?

projectile weapons, eg, arrows, don't have LOD, afaik.

Therefore do not believe it is the arrows causing issue:

LOD:

Supported entity types:

  • Models that don't move (i.e. func static models)

From TDM v 2.03:

  • Animated models like waving flags and laundry (i.e. anything with spawnclass idAnimated)
  • AI
  • Animated attachments to AI


    If you have created your arrows (or any other player inventory) as LOD model and they are not func_static or animated - this may be a cause for your error.

    Unless you have misused func_portal to do window /fog trick with visportal via LOD.


    /* if its any cosolation - it is the LOD system that has messed me up a few times too with IWO errors. These have been addressed by deleting the models [in DR] and correctly reloading. Although, for me - it was AI only - not entity based upon atdm:weapon_base */

ps, there's a whole section on pendulums in the wiki somewhere.
looping spline using func_mover requires scripting (eg, while) as used in example here:

 

// function that binds the objects - eg, weight, shaft and cog, etc..
 
void setup_objects ()
{
// eg, $pendulum1.bind ($pendulum2);
// etc...
}
 
// function starts slowed pendulum
 
void pendulum ()
{
$anchor.time(40);
$anchor.accelTime(.1);
$anchor.decelTime(.1);

// beacuse now has time, will not continue along spline without obvious "reset" to origin (esp if rotating or looped or swinging, etc...)

$anchor.startSpline($spline1);
while (1) {
$do the spline thing; // or whatever
 
sys.waitFor ($name of object entity, to finish its loop);
}
}
 
// function that executes when the script is loaded
 
void main ()
{
setup_objects();
name_of_object_entity_to_loop();
}

A must for moving platform puzzles or swings of death or time traps or agility challenges and stuff.




Edited by teh_saccade
Link to comment
Share on other sites

 

I haven't manually configured any LOD settings, but that's what the console output is saying. What else could it be? Clearly it's induced by my lwo file, as I don't get the issue if I'm not using it in the def.

Where? I don't see any reference to lod there.

 

Probably something is wrong with either your def or your model.

  • 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

That looks like a confirmation, that there is nothing that uses LOD. As nothing uses LOD, there are no LOD memory chunks to free.

 

Ah, okay... I thought that was the reason for the crash. The only logical assumption in this case is that the exported model has a bug that's causing idTech 4 to freak out; I'll play around with the exporter options and other parameters, and see if anything makes it go away.

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

    • Ansome

      Finally got my PC back from the shop after my SSD got corrupted a week ago and damaged my motherboard. Scary stuff, but thank goodness it happened right after two months of FM development instead of wiping all my work before I could release it. New SSD, repaired Motherboard and BIOS, and we're ready to start working on my second FM with some added version control in the cloud just to be safe!
      · 0 replies
    • Petike the Taffer  »  DeTeEff

      I've updated the articles for your FMs and your author category at the wiki. Your newer nickname (DeTeEff) now comes first, and the one in parentheses is your older nickname (Fieldmedic). Just to avoid confusing people who played your FMs years ago and remember your older nickname. I've added a wiki article for your latest FM, Who Watches the Watcher?, as part of my current updating efforts. Unless I overlooked something, you have five different FMs so far.
      · 0 replies
    • 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
×
×
  • Create New...