Shadowrun Returns

Shadowrun Returns

Discover & Share Custom Shadowruns
Create your own stories and campaigns with the easy to use SRR Editor and share them with the Steam Workshop community. Jump-start your own creation by exploring the entire Seattle campaign and seeing how it was built. Click here to learn more and get started with the editor.
Southwind 16 Mar, 2014 @ 8:07am
Need help learning the editor?
Hey it's Southwind here, creator of Shadowrun Unlimited.
I would like to offer my knowledge to those eager developers feeling a little overwhelmed by the editor, and a not finding what they need on the wiki (http://shadowrun-returns.wikispaces.com/). Whether it's a simple question about what a Boolean is, or something more advanced like how to create a great looking explosion, creating a sandbox-type world, or advice on good ways to build shadowruns, plan a campaign etc. I'm happy to help.

Post your questions below, but please keep on topic.
Last edited by Southwind; 16 Mar, 2014 @ 8:44am
< >
Showing 1-15 of 84 comments
Hawthorn 18 Mar, 2014 @ 10:34pm 
You mentioned Sandbox (I am very interested in that) .. do you have a link?
Southwind 19 Mar, 2014 @ 4:52am 
No links, just some Q & A here in the thread. Hopefully it will grow into a database of sorts. Before tackling a sandbox, I will assume again that you have a basic understanding of the editor, such as triggers, variables, and props.

Back to "building a sandbox". This is obviously the most open ended category you can get, but let's just cover the basics for now: creating the world.

A "sandbox world" is basically a bunch if separate maps (scenes) all strung together. You will most likely have several "hub" scenes linked together, such as city blocks, and interior scenes, such as the inside of buildings on those block. Lets start with how to build a Hub.

First you will want to create a Global Variable named "Travel" (or anything you want).
Next you want to create some "Invisible Block" props, one for every entry into the scene (such as outside of a building) and set their interaction type to "Dummy". Name these props "Spawn Location 1", "Spawn Location 2", and so on. Now drag those blocks to their appropriate location within the scene.

Now for the more complicated part (although still pretty simple), the triggers. For every spawn location within a scene you must create a trigger. Luckily if you build one, you can just copy/paste and tweak it. The trigger will look like this:

When: On Map Start
If: Travel (the name of the Global Variable) is equal to 1
Do: Warp Teleport Player0 to Spawn Location 1

The trigger will change depending on the Travel variable. If it equal to 2, teleport the player to spawn location 2, etc. You can also choose to warp teleport additional actors by expanding upon the "Do" command. There's some room to tinker here and figure stuff out.

The final step is creating exit props with triggers. I use the same Invisible Blocks as the Spawn Location props for almost everything in my UGC, including exits. The difference is I set the interaction type to "Generic", and change the symbol to "Transition". I name them
"(TargetSceneName) Exit".

Exit triggers to go with those props will look like this (assuming the Exit will open a scene named Store):

When: Store Exit is interacted with
If: triggering actor is Player0 (usually a good idea to prevent some bugs).
Do: Open scene Store.

Now the exit trigger from the Store back out to the City Block scene will look like this:

When: City Block Exit is interacted with
If: triggering actor is Player0
Do: Set variable Travel to 1
Open scene City Block

Now when the City Block is loaded, the game will see the Travel variable is equal to 1, and Teleport the player to the location of the Spawn Location 1 prop (which should be outside the store building).

This can be used for every interior building within a hub, and for travel between hubs. You can even have an interior building with multiple exits into a zone by setting the Travel variable to a different number at every exit.

Hope that helps you understand how to create a basic layout of a Sandbox world, but the true depth of the Sandbox world is really up to you, and can get infinitely complex. If you have another, more specific question, ask away.
Last edited by Southwind; 19 Mar, 2014 @ 4:54am
Hawthorn 20 Mar, 2014 @ 8:11pm 
How does that scale? Is memory used for every map.. or only one at a time when its loaded? Have you tried building a 64x64 Map (just cut and paste to see if it even loads).

Also one key aspect of sandbox will be persitance. Kill a mob and its dead when you come back. Is that handled in a datastore? Does that scale?
Southwind 20 Mar, 2014 @ 9:13pm 
Memory usage is isolated on map by map basis (scenes). You can theoretically build a massive map, but the bigger, and more populated a scene becomes, the larger the memory and CPU usage. Once it climbs to a high enough level, it can cause instability. It is definitely better to create a cluster of medium sized maps, than try and create a super map.

As far as scale, there are two types of variables: local and global. Local variables are contained within each scene and cannot affect anything outside of that specific map. Global variables on the other hand can track changes to the entire game world, and are very important to a sandbox type game (they will be your best friend). It wouldn't be practical to create a global variable specifically for every mob to check if it's been killed, but could easily be accomplished for boss-types, or to see of an entire area has been cleared.

For example, create a Bool variable called "Gang_Boss_Killed". It will be set to False be default. Now when the player kills the Gang Boss, create a trigger that sets the Bool variable "Gang_Boss_Killed" to True. You can now reference that variable everywhere in the game, creating triggers that will only spawn the Gang Boss and his henchmen if the variable is False, create dialogue options that are only available depending if the options is set to True of False, etc.

Hawthorn 22 Mar, 2014 @ 1:39am 
I am going to assume by your post that Local variables are reset everytime the a scene is reloaded? So I walk in, kill a mob .. leave and come back and here is alive again.

BUT I think this would be a great idea:

Have every major map(scene) have a state variable:

1 = Gang is in peace mode (Full Strngth)
2 = Gang is on Alert mode (there was fighting)
3= Gang is in Survival mode (they took heavy loses)
4= Gang is dead

You could have a global string for each map that tells you which important npcs are aliv. Eg. "1,1,1,1,0" - All alive except for the last one.

With these combinations you can setup the scene correctly :)
Southwind 22 Mar, 2014 @ 3:33am 
That is a great idea for how to handle permanent death of NPC's in a scene, if you wanted to have hostile enemies in every scene. It's not really so something I have implemented, as the setting isn't really a "walking around slaying mobs" type setting (but there's no reason a UGC couldn't be different). Generally there are no hostile mobs in my "world" scenes, just in the "mission" scenes.

I use random encounters in my world scenes. For random encounter, the game generates a number for a Global variable called "Encounter", between 1 and 30, using a trigger. The trigger also sends what's called an Event (basically a way to fire a trigger, or a series of triggers). When the event named "Encounter Check" runs, it checks what the Encounter variable is equal to. If it equals 1, then X event happens, if it equals 2 than Y happens, and so on. One of the encounters would spawn gang members in the scene to harass the player, and that would be where the mob slaying would come in. Each possibility on the encounter list would require it's own trigger, and the "When" function for each trigger would be when the Encounter Check event runs. So when the event runs, every trigger tied to that event would fire, but only one of them would be true (If Encounter = X number), and actually do anything.
Last edited by Southwind; 22 Mar, 2014 @ 3:38am
Hawthorn 22 Mar, 2014 @ 1:43pm 
I like that.

You could still use a global state to affect the World Scenes. Think about letting the players affect the world via choices in a mission. You could have the world state affect the random encounters.

So if the players drive off a gang in a mission, it could make the world better .. or worse (if a worse gang moves in).

Question:
In the Dragonfall the main player block was destroyed after the assault .. did they do that by simply loading a different map? Or do they change the buildings in the same map?
Southwind 22 Mar, 2014 @ 3:54pm 
Yeah I used lots of Boolean global variables to track global changes. For example, in Shadowrun Unlimited players have the option of burning down a drug lab / restaurant. If they do, I set a global variable called "Burned The Yak" to true. Now for the next few story steps the Yak is inaccessible, and certain NPC's comment on the fire. That's exactly what you would do if you wanted to keep track of the fact the gang has been driven off.

You could for example create a boolean global-variable called "Gang Driven Off", and set it to true when the players run the gang out of the city. During the random encounter event, add an extra line to the IF line of the trigger that spawns the gangers that reads "If Gang Driven Off is False". That way the gangers will only spawn if you haven't already driven them from the city. Obviously with that variable as a reference point, you can create some negative effects to the gang being gone, like some revenge happening in the future or a new gang moving in or whatever.

As for your question about the scenes, it would be far easier just to create a second version of the scene, one destroyed, and one not. If you wanted to travel back and forth between the scene like a hub still, you need to add a line to the IF command of every trigger that opens the scene, that checks a boolean global-variable called "City Block Destroyed" (or whatever). It will look like this:

When: Store Exit is interacted with
If: City Block Destroyed is False
Do: Open City Block scene
Otherwise: Open Destroyed City Block scene

However, a note here: If you want to use the Otherwise function of a trigger you should only have one item in the IF line, otherwise it will fire the Otherwise command unless all the IF items are true. So if this is the case, you will have to change the exit trigger so it no longer checks to see if the triggering actor is player0. Instead you will need to modify the Exit props, and change their pre-requisite so that only Player0 can interact with them.
Hawthorn 22 Mar, 2014 @ 8:16pm 
Makes sense .. thanks so much!
netlich 11 Apr, 2014 @ 9:53am 
For the more technical oriented of us is there a cheat sheet or technical spec doc that really gives us all the availabel tools - liek how many var types exist?

The wiki is great but obviously lacking. And I appreciate people who have put hundreds of hours on the tool are making threads like this (hint: thank you!!!) and I would liek to first go through and exhaust any documentation out there before coming back to you guys!
Philip Marlowe 11 Apr, 2014 @ 12:05pm 
^ +1000

Although there's something to be said about the joys from learning through experimentation.

The editor is like the Last Mission of Dragonfall; each time I figure something out I am even more motivated by that sense of "Achievement", like I beat a very hard mission with an unarmed adept, but there's always the next "mission" or problem/challenge.

In the interest of increasing UGCs I request that the devs consider using Steam "Achievements" as rewards to further motivate the community into using the editor.
Last edited by Philip Marlowe; 18 Apr, 2014 @ 4:53am
Big Chris 5 May, 2014 @ 1:37am 
To preface this comment I'm not sure if this is a bug or just me being stupid and missing somthing.
When trying to create a new content pack after naming your content pack you move on to choosing the content pack dependancies, now in every video/page I have read on this page there should be ShadowrunCore and Seattle displayed in content packs. However on mine the table contaning content packs is completely empty, so when I create a pack it has no resources avalible to it because there are no content packs avalible for me to load. Can anyone shed some light on this or tell me if theres somthing I'm missing? (running Mac OS 10.9.2)
Southwind 5 May, 2014 @ 3:35am 
Hmm then only thing I can think of is if the game is looking for the dependencies in a location they aren't. Have you move any of the files, like maybe to a different HD?
Big Chris 5 May, 2014 @ 6:45am 
No they are all exactly where they installed to in steam in Application Support>Steam>SteamApps, although because steam installs into the user library on mac which is a hidden folder it could be having some issues with that, or the way mac packages all its application files into one 'app package'. If I look at the package contents of shadowrun I can easily find all the different content packs like seattle, berlin, dead_man_switch, shadowrun_core, etc. It would be interesting to see if any other mac users are having the same problem. Is there any way to force it to look in a specific folder or do u have any idea where it would be looking at the moment so i could put a copy of the files in there?
Southwind 5 May, 2014 @ 12:24pm 
Sorry, I'm not a Mac guy. You could create the file without dependencies, and try and add them afterwards from within the editor, under File>Edit Dependencies. Otherwise you may have to re-install the game and try that out.
< >
Showing 1-15 of 84 comments
Per page: 1530 50