Jump to content
The Dark Mod Forums

jaredmitchell

Member
  • Posts

    48
  • Joined

  • Last visited

Posts posted by jaredmitchell

  1. 37 minutes ago, JackFarmer said:

    Why didn't you create a project set up in both DR and DM directly targeting your WIP? That would have made things much easier when it comes to mission testing (and wip names should - of course - be as short as possible! :) ).

    Well now you tell me that's a possibility! Yes that would be much more convenient, I should look up how to do that while waiting for feedback to come in.

    And I did use the readables editor at first, but it kept having issues with relocating what I had already written. I imagine that's related to your first point of project configuration. Hopefully I can go forward a smarter mapper now.

  2. It's probably also for gameplay and level design reasons; if there's two characters standing around in an area the player can access (or shoot at), what happens when the player attacks them, or if they're merely spotted? What if this is a sequence that they need to pay attention to in order to to complete the mission (i.e. it gives the player a necessary piece of information) and it gets interrupted?

    It's probably no wonder why the conversation in Eavesdropping in Thief II happens completely behind an unopenable door. :P

    I kind of have one in my not great map; to deal with the problem above, the two guards won't play the next line in the conversation if either of them have an awareness of the player above a certain point. Regrettably, this doesn't interrupt the currently playing line (I couldn't figure out a way to interrupt currently-playing VO), which can lead to some awkward moments if they start chasing you.

    • Like 2
  3. 22 hours ago, Dragofer said:

    There's possibly a way to make your idea work: I'm also making a ship mission, in which I've split the exterior from the interior and transfer the player between them via script. The great advantage of this is you can build your interior without being restricted by the exterior; a further advantage in your case is you can turn your ship exterior into a func_static.

    You have 2 options to transfer the player:

    A ) frobbing a door teleports the player. You may want to handle what happens if the player is being pursued by an AI (level 5 alert). The easiest solutions by far and away are to either make an objective not to get spotted by ship AIs, or to do nothing. Most people quickload anyway when they get spotted

    Oh, that's smart! I think that might work. I was assuming prior that the exterior would be part of the off-stage recreation.

    As for getting the pathfinding working on the exterior, my concern is that the monsterclip brush seems to form collision, not just AAS data, so I don't know if there's a way for the guards on the deck to "sink" through to a lower level when the ship changes locks. I think I can fictionalize reasons why there wouldn't be any crew outside, so I'm not too concerned.

    Anyways, thank you! I think I have a way forward now.

  4. 17 hours ago, VanishedOne said:

    It might be possible to take that suggestion and teleport the player to/from an alternative version of the ship, hiding the transition either with a cutscene/fade or by making sure the player is somewhere that won't have jarring views.

    I've thought about the teleporter idea, but I don't know how viable it is, given that the player can jump off the side of the ship into the water from any point on the top decks. If there's a trigger or set of triggers that could be attached to the ship, and I could get the offset of the player from the ship's center, then maybe.
     

    21 hours ago, grayman said:

    It is true that simple pathfinding across moving platforms is limited to elevators. But this is based on the AI standing still and letting the elevator platform carry him to the destination floor. Probably not what you want.

    Do they have to be absolutely still while the transition happens? I ask because in the context of the canal, the ship only moves vertically at a couple of different spots. I made a diagram for my design doc:

    340697197_CanalDiagram.png.1195c0958c05fde559fc8ded6068f70c.png

    The elevator wiki page is ambiguous, but it gives me the impression that both the AAS solid and AAS obstacle brushes used form an invisible floor at each stop for the AI to walk on. If so, my thinking is that I could just have a few planes of AAS brushes and selectively toggle them as the ship progresses:

    761658351_CanalDiagramw_AAS.png.90e1cab16138c4c491c9180efa796f82.png

    Is this viable?

    EDIT: Should mention that the proposed solution above would be paired with AAS obstacle entities lining the perimeter of the ship that would move with it, in order to prevent AI from walking off the sides of the ship or bumping into the walls. I'm assuming you can set the AAS obstacle entities' position, as I've been successful in doing that for the func_liquid volumes that will form the water of the canal.

  5. Hey there,

    I'm writing this with egg on my face. Basically put, the level I'm currently working on depended on the assumption that I could get AI patrolling and pathfinding on moving platforms. Unfortunately I think I misremembered what TDM can do, as I've quickly found out that monsterclip brushes need to be worldspawn. Does anyone know a way around this, a way to achieve a similar effect, or am I just shit out of luck?

    The concept of my map centers around a ship moving through a multi-lock canal; the player is supposed to sneak onto the ship while it's moving, steal an item off the ship, and then get back onto shore. My assumption is that having enemies on the boat would require the aas32 data to update. This is the map I've been streaming the making of, if it helps to have a sense of how far in I am.

    I've been messing around with small experiments in test maps to find a workaround or hack, but I've been unsuccessful. I tried looking at using aas_obstacle brushes, but they only seem to generate walls for AI, and not a walkable surface (despite them being used as such in this example on the wiki).

    Push comes to shove I can just have the ship docked and static throughout the mission, but I feel like that's not as fun. Any ideas?

  6. As people have mentioned above, the scripting language for idTech4 is pretty similar to C++. However, it and C++ are also close to C#, which I think is an easier language to learn. If you don't mind spending time in another engine, Unity has C# support, plus a ton of video tutorials and a really well-documented set of functions for C#.

     

    I mostly say this because the Dark Mod wiki articles are pretty threadbare, and it was easier for me to figure out how scripting for it was different from scripting from other languages. If you want to jump right into TDM scripts, though, I'd be willing to help you through what you specifically want to do, and I'm sure plenty of other people on this site would say the same.

    • Like 1
  7.  

    Hey there was somewhere around here a mod for Doom 3 that turns it into an Arx Fatalis inspired free mod total overhaul.

    Don't have time to try it out but might note it to myself if anyone else here wants to see what's the hype all about and/or if it's better or not than the original Arx Fatalis.

     

     

    Yes, that is Arx - End of Sun. It is now also standalone.

     

    Holy crap, how many open-source versions of immersive sims based on idTech4 are there? Next thing I know you'll tell me there's a Terra Nova one. :P

    • Like 1
  8. Given this community's love for Looking Glass-style games, I recently got Arx Fatalis for free accidentally. :P

     

    I downloaded the demo data from Steam, but had to install the open-source version, Arx Libertatis, to get it to run. I've been playing it for the past couple weeks and the game hasn't stopped me from playing further, which took me a while to realize. I'm wondering if this would work for other people as well.

     

    Given that the game's now open-source, you can create mods and compile the level editor yourself, which I figure is also of interest to people here.

    • Like 1
  9. Huh, funnily enough I've been working my way through Pathologic the past couple months.

     

    I'm playing the original version from 2005, which is a bit tough to understand at points, but I think it's successful at communicating what it wants. I agree with Anderson, play the original, and then we'll all get a chance to contrast it with the remake when that comes out.

  10. Great stuff! This definitely looks like what my Game Art Major classmates were up to. :P

     

    Do you think inefficient meshes are a common problem in TDM? I only took one class in 3D modelling so I'm not the best person to pick that out. I definitely think that would contribute to a lot of the performance issues I have.

  11. Alright, once more:

     

    I'm trying to figure out a way to pass a variable to another script object, but I can't seem to find a way to do that. Specifically, I need a way to communicate the position of the current entity the player has tied their tether arrow to, preferably to my player script object.

     

    Using callFunction() on an entity doesn't allow me to pass any arguments to the function called (as far as I can tell), so I tried implementing some functions in a map script so that I could use callGlobalFunction(), which at least allows me to pass an entity. However, given that I have functions like this:

    //functions in my map script. currentTiePos is a vector variable defined earlier
    void setTiePos(entity tie)
    {
        currentTiePos = tie.getWorldOrigin();
        sys.println("Global setTiePos");
    }
    
    vector getTiePos(entity something)
    {
        sys.println("Global getTiePos"); 
        return currentTiePos;
    }
    

     

    I thought that this would be a functional workaround. While setTiePos() works as intended, whenever I try to call getTiePos() via callGlobalFunction() to assign a vector, the Dark Mod launcher flags this as an error. I think it's likely because a string is used to access a function in callGlobalFunction(), so the interpreter can't check that the corresponding function returns the proper data type.

     

    So, does anyone know how I can either pass a value to another script object, or get a value from a global function? Thank you again for your help!

  12. In AAA studios now, a growing trend in the workflow is to give the entire level to an environment artist to decorate; the bulk of the level will be made up of one giant static mesh, with scattered objects around to decorate with. While this is great to allow the artist to create something that looks believable, it allows for less tweaking by the level designer (i.e. if some cover or something similar needs to be moved a few units).

     

    I had a professor in college who worked at id, and apparently the workflow there was to create a blockout in 3DSMax with the appropriate dimensions for everything, and then just give it to an artist. I did a design test with a company that asked me to do the same.

    • Like 2
  13. Damn, Judith, that's a hell of a quote.

     

    Oddly enough, though, it seems like developers releasing mod tools seems to be much more of a rarity these days. This could be a function of the aforementioned complexity increase of level design (as well as, presumably, the increased complexity of certain developers' engines and editors), but I think is more a result of prevalence of engines like Unity and Unreal. This is probably both due to more developers using them, since proprietary engines are difficult and costly to make, as well as more hobbyists using them, since they provide way more freedom and are often more user-friendly.

     

    I've started to notice, though, that the lack of more recent mod tools is also going to be an issue for aspiring devs. I wanted to focus specifically on level design in college, but a lot of the more prevalent level editors (Hammer, Radiant) are starting to age and be seen as less relevant. When I told my friends that I wanted to make a level for a particular game, they would ask me why I didn't just make something in Unity or Unreal. This is despite needing to define the systems of a game first before I could build levels for it, or choosing from a scant offering of mod-compatible games built on those engines.

    I think the new DOOM's Snapmap is a pretty good compromise here: create an in-game level editor that automates a lot of the more complex aspects of level design. Unfortunately it feels too restrictive to me, but it's a good starting point, I think.

    • Like 1
  14. So, you want the windowDef holding your map image to render a specific section of the material? That's an interesting problem to tackle.

     

    I'm not the most experienced with the GUI scripting system, but looking here, it seems like using the matscalex and matscaley properties might be the way to go for the scaling, at least.

     

    So, something like:

    windowDef MapviewerWindow
    {
    	rect	3,-8,580,350
    	visible	1
    	background	"guis/assets/mainmenu/lumi-tooltipblueback"
    }
    
    windowDef MapViewerMapZoomIn
    {
        rect    370,124,40,40
        visible    1
        bordersize    1
        bordercolor    1,0,0,1
        forecolor    0,0,1,1
        text    "+"
        textscale    0.8
        textalign    1
    
        onAction
        {
            set "MapviewerWindow::matscalex" "MapviewerWindow::matscalex + 0.2"
            set "MapviewerWindow::matscaley" "MapviewerWindow::matscaley + 0.2"
        }
    }
    
    windowDef MapViewerMapZoomOut 
    {
        rect    453,125,40,40
        visible    1
        bordersize    1
        bordercolor    1,0,0,1
        forecolor    0,0,1,1
        text    "-"
        textscale    0.8
        textalign    1
    
        onAction
        {
            set "MapviewerWindow::matscalex" "MapviewerWindow::matscalex + 0.2"
            set "MapviewerWindow::matscaley" "MapviewerWindow::matscaley + 0.2"
        }
    }
    

     

    Note that I'm not 100% confident you can call variables you're trying to set as arguments (i.e. the "MapviewerWindow::matscalex + 0.2" statements), but in the format of this scripting language there's not really a way to use a += or -= statement.

     

    Try that and see if it works.

  15.  

    Are you just editing the player script? Or are you also making custom scripts? If you are making custom ones, have you added them to the main scrip?

     

    I made a copy of the player script to edit its logic and put it in the script folder of my mission files. It's included in the tdm_custom_scripts.script file that I used, which has been working with the other script objects that I've written.

     

     

    You also need to be careful that any custom script needs to be included in the main script in the right order, any script that requires another script needs those to run first, for example the player script needs to be included after the ai_base script, because it inherits from ai_base, in the main script file that means top to bottom.

     

    That was a good suggestion. I tried it, but alas, that did not solve my problem.

     

    My problem is that I similarly made a copy of the player entityDef file, and told it to use my custom player script object. However, when the map loads, it doesn't seem to recognize my script, and just prints an error to the console.

  16. Okay, sorry, more help plz:

     

    I wanted to add a bool to the player script object (defined in tdm_player.script) to toggle when they come into/out of the range of a place where they can tie off their tether (defined by the entity tie_off which I've defined). I created a copy of this script and put it in the appropriate place with my mission files, included it in my tdm_custom_scripts file, and made the appropriate changes (adding the bool, as well as getter and setter functions).

     

    Previously, I used a modified player_thief entityDef to get the player to be able to pick up my new tether arrow entity. However, it doesn't seem to be reading my version of the player script, with the map file crashing when I try to access my specific functions. I then changed the object name to "player_tether" and told the entityDef to use this as its script object. Now when I try to run my map it gives me this error, which seems to confirm that it can't/won't load my version of the player script object:

     

    playerobjecterror.png?ssl=1&w=800

     

    Does anyone know how to get around this? Thank you very much (again)!

  17. Ah ha! That got me pointed in the right direction. Thank you.

     

    According to a post on the iddev site, the weapon slots were defined in the player.def file. Making a copy of it in my mission files and changing the rope arrow slot to the tether arrow slot now allows me to pick it up. Hopefully now I can try and figure out the logic of this arrow without bothering you guys too much. :P

    • Like 2
  18. Sorry to prolong this now, but now I have an issue where the tether arrow won't be added to the player's inventory (on frobbing it, a message is generated in the console saying it "couldn't be added"). As far as I know, my entityDef and weapon script are basically the same as from when I copied them from the rope arrow files, with changes only made to the class names and text for the inventory.

     

    Anyone know what's happening? Here's the .def file just in case:

     

     

    As well as the .script:

     

    EDIT: Removed the code snippets, since they were really long and ended up not being relevant

     

    Thanks again!

×
×
  • Create New...