Using the beardlib editor: Irritating things and how to avoid them.
#1
Wrench 
I've been using the beardlib editor to make custom heists for a few weeks, and while doing so I have encountered many things that don't exactly break the editor or stop me from using it, but are frankly very irritating.
Many of these I have not been able to find any information on fixes or workarounds online, and barring an official source for this stuff, I've decided to create my own list so that perhaps you will keep your hair longer than me.

I'll try to include picture examples where I think they are needed, and of course I'll keep adding more as I discover more. This should not be taken as a guide on every facet of the editor, as I wont be talking about every step required to create a heist. Nor am I a master at it myself. I will also include general tips for an improved experience.

Feel free to post your own workarounds or tips if you have any to share, and check the replies to see where any corrections came from.


I use Windows 7, have a 1080Ti and an i5 processor with 8 gigs of ram. Some bugs or glitches may be dependent on these or other variables in your computer.

Tips and Tricks



I'll start with some basic stuff that should help avoid problems more extensive than a single feature or object.


1: Make sure to disabled all of your mods before trying to use the editor.
Many times I have gone through my usual process of un-installing all my mods, but will forget one or two. Mods such as pathfinding fixes and bot modifications can make testing a map a nightmare, as the editor/level will just crash for seemingly no reason or worse, make it work fine with the mod but break without it, creating unintended dependencies that you aren't aware of.


2: The first thing you should do upon creating a new heist and entering the world, is find the setting in the in-editor options and find a box which says "Save map files in binary" and make sure it is unchecked. Example
What this does is ensures that you can edit the .world files for your level, which will become important later.


3: Make sure you have all the mods required to make the editor work correctly. Unless you prefer the legacy editing of files for everything, having translation and rotation gizmos are essential to use the editor. You can find the links on the github page for the editor, and most tutorials will also include it.


4: Try to look at existing heists, and decide which objects you think your level will need before starting. There is nothing more irritating than having to load an extra unit package for a single object, especially when it's something that is not available in any small packages and your level is already pushing the size limits of the engine/tools.


5: Familiarize yourself with the controls, even though the hotkeys are listed in the editor information (found on the little side menu that pops up whenever you want to edit a project) I have had many people ask me how I'm cloning objects by dragging them while holding alt. Note that this hotkey only works with the translation tools, so holding alt and rotating an object will not clone it.


6: Take a good look through all the in editor settings as well. It really helps to know at least roughly what your options are before embarking on a big project. One I somehow missed was the option to change the rotation snapping angles. I didn't think it would be as useful as it is. I currently have it set to 45 degrees.


7: Try to make sure all of your walls/floors/ceilings/etc are set to a whole number when building a level. It is incredibly helpful to have everything at 0, 0, 0 with each other when trying to snap stuff together, as assuming you have your grid snapping usually set at 10 (or some other whole unit) walls and floors will just snap together and fit perfectly, which helps avoiding Z fighting, or tiny gaps/seams in objects that are highly visible to the players.


8: Make backups more frequently than you probably do.
You do not want to accidentally edit a file wrong and not be able to undo it, but if you ever find yourself in that situation, it's nice to only lose a few hours of progress at most, and not the entire project.


9: Create your first project with one simple objective in mind before moving on to another map or adding more objectives.
Creating a multi-day heist with several different objectives on each level is not as scary as it seems on the surface, but trying to build the entire level from start to finish with those objectives in mind, especially if it's your first level, will lead to a lot of frustration and difficulty when testing and debugging. It is pretty simple to connect two existing objectives once they are both working without issues.


10: Try to complete as much of the object placement of your level before moving on to elements, mission objectives, npc's, scripted events and nav meshing.
Once you start messing with things like the nav mesh or things that require .world editing, the editor is much more likely to crash when restarting and in general. By the time my fairly complex heist is nearly done the editor requires a game restart every time I wish to reset the world else it will just crash upon trying to load the level. This varies from person to person, but it slows down the testing phase a lot so it's best to avoid it as long as possible.


11: When editing rotation, press R to turn on rotation and T to turn off translation, and vice versa.
The editor will allow you to click on both a rotation and translation widget at the same time, which often leads to the thing you are trying to rotate zooming off as you move your mouse.


12: You should run the game in a lower resolution window than your screen while using the editor.
For testing it is perfectly fine to crank every setting, however having the game running in a window smaller than your screen size, you can easily switch to a web-page, the .world file or a music playlist without having to wait for the game to reload. I am creating this post with the editor open in a window in the background for easy example screenshots, for instance.


13: If you can find the time to fully watch guides or great resources such as quackertree's creation of cold gold stream, it helps a lot to see someone else and their solutions to a problem you may be having. I wrote a little list of timestamps and days in the cold gold creation video, for example, where he was working on something that I couldn't figure out. Just copying the elements whole-sale from a map file does not usually fix a problem if I don't understand why it's not working.


14: Always try to make sure your floor pieces, or bits that things will walk on, are not touching through walls where possible. If your rooms have a floor that is sticking through a wall, this is usually fine, but when it comes to generating the nav mesh, having all of your floor pieces actually separate independent of walls makes setting up nav blockers much, much easier. If your floors are all connected then you may find yourself having to put a nav blocker on practically every wall to stop the nav generation going places you don't want it to go.
Using the "Quads" check box found under navigation debugging tools in the editor helps a lot when figuring out where the mesh is going wrong.


15: When setting up mission elements, you may want to grab an object named "Plane_Black_Temp". It is a large one-sided black plane that you can stick above your level. From the bottom it is not visible but from the top it is solid black. Apart from being a nice way of black filling an area, it makes the mission element objects easy to see in the editor and means you wont miss click an object in the level if you don't quite hit the element you want.


16: Related to the last tip, try setting your element colours (found in the editor options menu) to something bright. I prefer either full white or a very light blue or green. This will help them stand out against the black plane. The random colours make it easier to read the names when they are all mashed together, but sometimes it will randomly assign them very dark colours which are hard to see and impossible to read in most situations.


17: always be mindful that what you are seeing might not actually be what is in front of you. If your camera is behind say, a ceiling or shadow caster, and you try to click a floor tile, you will select the ceiling object that is in front of you, It's just transparent from the back. This combined with the fact that most walls or floors textured side is actually on one face of a 10 unit thick block, means that making walls too thin can lead to you having to click on the opposite side than you think to select the visible texture.
In this examlpe I have clicked on the wall on the opposite side due to it's hit-box sticking through the blue wall.


18: Related to 17, in the options tab there is an option to jump to the selection tab when an object is selected. I highly recommend you do this as it will let you instantly see the name of the thing you have clicked, and if it says "Important mission script do not delete" and not "wall_132" you will know not to press delete without double checking your selection.


19: It's important to note that you should uninstall the editor and any other mods used while editing (such as the physics fix) when you wish to play with others, as they can make the game unstable and result in frequent crashing.


That's it for more general stuff for now. I will keep adding more as I find or think of them.
The next part will be smaller, more specific bugs or general funny business with the editor that is frustrating to find out the first time, but easily avoided.



1: The biggest bug bear for me at time of posting, is definitely when it comes to editing text colours.
When creating text (in my example I wrote a letter to the player on a whiteboard) it is nice to have some words a different colour to others, to make them stand out or some such. When setting one to be a non-default colour, you must make sure that none of the values given in the RGB sliders are lower than the default or else they will save as 0 0 0 (which is black). If you set a red to say, 100% red but have both blue and green at 0.00, the editor will not save that colour and the text will just appear black upon a reload. The work around is simple, just make sure at least one other slider is above 0.

Update: After more extensive testing, the fix does not seem to work. I have not been able to figure out why some text seems to remember and save the colour correctly, just that fiddling with the colour balance, then saving and reloading until it sticks is the only way to know for sure that it remembered the colours. If anyone has a working fix I'd be glad to hear it; I may try to manually set the colour in the .world file or using an element on startup.

A related note: to open the colour change menu, you may have to click in the space above it, between the option above it so that "editable gui" appears. example
I don't know if this is a problem specific to me, but without that option visible the colour change button does nothing. My mouse is about where I had to click to make it appear.


2: Similarly, some options that units have may not be displayed when first loaded.
An example is the security boxes that you open to cut wires in, they often do not show the "mesh variation" option which is required to make them intractable without editing the file until the level is reloaded. The same can with those creates you open with a crowbar.
If something says "intractable" in it's path name, it should have a mesh variation option. If one does not, try reloading the level to see if one appears.


3: More of a payday bug? But if you set your music volume to 0 (as the editor has no music anyway, so you may not want your own music clashing with the main menu's) and load a level in the editor, it will not save that setting. Either quit and relaunch the game, or load a heist normally and leave it and it should work properly.


4: Everything about ziplines.
To start off on a bad foot, simply clicking on a zipline motor (which is the part you actually use to make a zipline, wire and all) will crash the editor. To place one in your level I suggest nabbing a copy of something like manager mayhem, opening the .world file and pasting one in with a new ID.

To make matters more irritating, because you cannot click on them in the editor, to move them you must edit the file. The easiest way to do this is to place an AIAttention object (or any object really, but I like the AI attention one because it does nothing on its own and is editor only) where you want the start and end of the zipline to be, then edit the position of the zipline and the "end pos=" to match them.

But wait! It gets worse!
The zipline object is actually a total lie, the code that generates them places them at roughly head height based on where you put them, so if you put your position marker object actually on the zipline stand where you want the wire to connect, it will appear about 100 units above that. Instead your should place your markers where you want the player to end up standing before and after the zipline.

Other options that can really be modified (the rotation ones will be overwritten by the zipline code depending on where the end pos is) are the speed and slack. A speed of 1000 is the default zipline speed for the fast heist ones, and 500 is the slow ones. Going much below 500 will make even the shortest zipline slower than walking. The slack is 80 by defualt, and 80 is a good number. Upping it to 100 will make the zipline dip in the middle more. Bare in mind that it will dip like this even when there isn't anything on the zipline, so setting the slack too high will make it look silly when returning to its start position empty.

The "AI will ignore bag" option makes the AI ignore the bag while on the zipline, so guards wont see it for example. And the usage_type="x" option can be either "bag" or "person" to carry either a bag but leave the player behind, or take the player.


5: When you are setting up any interactive item, be it a door, a stack of gold, a keycard or a crate you must set the mesh variation to "interractable" "enable_interaction" or somtimes "activate_door". It differs based on the object, but if you do not do this they will usually default to non-interactive and not do anything.


6: Speaking of mesh variation, if the mesh variation drop-down selector is empty, click on it so that it drops down, then click in the top so that the typing cursor appears, then move the mouse down onto the actual drop-down menu. The options should pop into view when you do this. step one step two bingo


7: Shadow casters are the object that creates shadows in payday 2. Some objects, most objects, will generate their own shadow, but often the layout of a level means that unless you build the entire exterior of a building that a player will never see (something that does nothing but waste render time and increase the map size for nothing) you will have to place these to get shadows. The smallest one I could find was 5x5 which is quite large, however there are a few tricks you can use to get smaller shadows as well as a few non-obvious pitfalls of shadow casters.

To get a smaller shadow, you can rotate the caster. This will skew the shadow on the ground meaning it's possible to make very thin strips of shadow, which can be useful.
One big pitfall of the shadow casters is that they will collide with the player while in the editor, and disabling their collision does not seem to change this. So if you are making interior shadows and then build a way up higher than the invisible (even with "view editor units" on) caster you will hit it.

Another is that the shadows have a maximum render rage, meaning you cannot put shadows on the ground from too far away unless the caster is quite close to the player, so you should avoid putting them a foot above the ground below a building, for example. Also realize that the further you are away from a shadow in the editor, the more jagged and rough the edge will be. When in-game this effect is fixed, but make sure to check that your shadows line up from quite close up.


As I've been writing for a while now, I will leave it here. I shall add more in time as I work towards completing and publishing my first proper map.
Reply
#2
"One big pitfall of the shadow casters is that they will collide with the player" - This actually only happens in the editor. Doesn't happen when playing in-game (As far as I've experienced it).

I'd add one more thing to this list of useful tips: When you're finally testing your map, make sure to 1) Press the "Fix elements" button under Options and 2) Test WITHOUT the Beardlib Editor (& pdmod) installed. - Somehow when you install the BeardLib Editor it also messes with the way your elements work, and it's very likely that some elements of your heist work with the editor, but won't without.

Other than that, very good tips! Thanks for the mentions here and there, aswell! :)
Reply
#3
Wrench 
Custom interactions and you.
"Huuurrrrgh." -Quackertree

So, you want to make a custom interaction.
These can be as useful as using a forklift to move some boxes in Alaska, or in my example that we will be going through today, making a button prompt say "Push da button" because we don't appreciate that wimpy "Press interact to activate the BORING!"

All of this information comes from taking apart other mods and licking quackertree's videos for information, so if it goes horribly wrong, I'm innocent. You will need a copy of Manager Mayhem, as we will be stealing some of Quackertrees' work so that we don't have to do it ourselves. I've been told this is not the only way to create custom interactions, however it's the way I learned to do it and it works for me.

The first thing to do is create the interaction object in your level. You may need to load a package that contains it. Once we have slapped it onto the area we want the interaction prompt to be, we're just going to name it so we can find it easily and leave it for now. We will do all of our modifications in the files, standing near it in the editor when it is not ready will just crash your game.
Here we go!

So! Let's get right into it and start our journey with some files you may not have played around with before, as well as some you should be familiar with.
The files and directories you will want open are as follows (You will be opening your own map instead of Butt Guide, obviously.):

Files in your map.

PAYDAY 2\Maps\Butt Guide: Main.XML
PAYDAY 2\Maps\Butt Guide\levels\Butt Guide\world: World.Mission
PAYDAY 2\Maps\Butt Guide\loc: English.Txt

Files in Manager Mayhem.

PAYDAY 2\Maps\Manager Mayhem: Main.XML
PAYDAY 2\Maps\Manager Mayhem\hooks: Interactiontweak.LUA

Ok so, you may have noticed that your map folder does not contain a hooks folder. We must create one now for this to work! Create a folder (or just copy the one in manager mayhem, being sure to remove any extra files we don't want) in your map dir. The file we want from Quacker is the Interactiontweak.LUA. As we have just nicked something from quacker, we will need to change around some names. Go into your newly created PAYDAY 2\Maps\Butt Guide\Hooks folder and open up the Interactiontweak.Lua file.

Once inside we will get rid of the junk we don't want and replace the map name with our own. Make sure to use underscores for any spaces that your map name has. Like this.
Quote:InteractionTweakData.Butt_Guide = InteractionTweakData.init;

function InteractionTweakData:init(...)

InteractionTweakData:Butt_Guide(...)


end
As you can see I have replaced Manager_Mayhem with Butt_Guide.

Now, the button we are making is as simple as can be, it does not play a sound or anything fancy like that, however there are quite a few possible options you can add.

Some nice person has laid out all the lua files here, so you don't have to manually extract or decompile anything yourself. Once downloaded head to payday-2-lua-master\lib\tweak_data: interactiontweakdata.LUA and peruse the various options available for your interaction if you wish, but for now we're only interested in the following settings.

Quote:self.Push_Button = {}
self.Push_Button.text_id = "Push_Button"
self.Push_Button.action_text_id = "Push_Button_action"
self.Push_Button.timer = 1
self.Push_Button.interact_distance = 250
It is important to note that without at least these lines the function will not work, and will crash your game upon loading.

Now, before we continue there is one more important step. We must add a distinct and 100% unique key to the start of these. If something else ever uses the same exact name as ours it will break horribly.
Simply add some short mix of characters and letters to the start like this.


Quote:self.d345bg_Push_Button = {}
self.d345bg_Push_Button.text_id = "d345bg_Push_Button"
self.d345bg_Push_Button.action_text_id = "d345bg_Push_Button_action"
self.d345bg_Push_Button.timer = 1
self.d345bg_Push_Button.interact_distance = 250


Once this is done you may choose to change the distance or timer, this will change the distance you can press the button and how long you will have to hold the key for it to complete. For now as we cannot test this without first doing a few more things we can just leave it as is. Simply slot this into the file before the end and save the file. You may want to keep this open for future reference.

So! Now that we have set up our custom interaction settings, it's time to actually load them into the game. To do this we need to open our PAYDAY 2\Maps\Butt Guide Main.XML file.
I know the file looks quite intimidating, however we are only here to add the following lines directly above the narrative line.


Quote:<Hooks>
<hook file="hooks/Interactiontweak.lua" source_file="lib/tweak_data/interactiontweakdata"/>
</Hooks>


Slot it in here like so and you're done, we shouldn't be coming back to this file in this guide, so save and we'll continue.

The next step is fairly simple, we are headed over the the PAYDAY 2\Maps\Butt Guide\loc: English.Txt file. Assuming you have not modified it at all, it should be empty to start out with. This file is where all the text that will be displayed during a heist is kept. Everything from custom button prompt text to custom mission objectives will be kept here, for now all we need to do is add the following line so that it looks like this.



Quote:{
"d345bg_Push_Button" : "Push Da Button!",
}


Right so, now we have set up our custom interaction, loaded our custom interaction and have the prompt text itself all done, but we can't go rushing off to test it quite yet!
Now we need to actually set up that interaction element we created all those hours ago, as the beardlib editor usually won't load custom interactions into the interaction list. This just means we have to change a word or two in the .MISSION file, no biggie.

Open your PAYDAY 2\Maps\Butt Guide\levels\Butt Guide\world: World.Mission file and search for your interaction element. Since we named it earlier we can just search for that name and it should come up.

Assuming you did not change any of the element settings other than the name before saving your level, it should look like this.

Quote:<entry index="3" type="table">
<entry key="class" type="string" value="ElementInteraction"/>
<entry key="editor_name" type="string" value="PUSH DA BUTTON"/>
<entry key="id" type="number" value="100000"/>
<entry key="script" type="string" value="default"/>
<entry key="values" type="table">
<entry key="base_delay" type="number" value="0"/>
<entry key="enabled" type="boolean" value="true"/>
<entry key="execute_on_startup" type="boolean" value="false"/>
<entry key="on_executed" type="table">
</entry>
<entry key="override_timer" type="number" value="-1"/>
<entry key="position" type="vector3" value="599.043 -344.654 205.322"/>
<entry key="rotation" type="quaternion" value="0 0 0 -1"/>
<entry key="trigger_times" type="number" value="0"/>
<entry key="tweak_data_id" type="string" value="none"/>
</entry>
</entry>
</entry>
All we have to do is simply change the line 
Quote:<entry key="tweak_data_id" type="string" value="none"/>

to
Quote:<entry key="tweak_data_id" type="string" value="d345bg_Push_Button"/>
and we're done!

After this be sure you've saved everything, reload the level if you left it open and approach the element. Remember that it may not update the "tweak_data_id" that you can see when selecting an interaction element in the editor, but that shouldn't matter.

And it works!

Now we can go back to our tweakdata file and fiddle with the settings; the range might be slightly too high for a button at 250, for example.

Some tips for debugging if it didn't work:

If the game just crashes before getting to the main menu, check to make sure you didn't make a mistake in the Interactiontweak.LUA

If it seems to load fine but crashes as soon as you step close enough for the prompt to pop up, make sure all your "d345bg_Push_Button" codes are the same in both the World.MISSION, English.Txt  and Interactiontweak.Lua files, inconsistencies cause crashes.

If the button prompt shows up and you can activate the button, but it doesn't trigger anything, make sure you are using the correct options in the "Manage On Executed List(elements)" menu. For instance to turn the light off simply telling the unit sequence to execute wont work, we must use the "interacted" alternative so it will trigger after the button has been pressed.

Click Here if you would like to see this done live by Quackertree during his cold gold livestream.
I hope this short guide was helpful!
Reply
#4
Useful tips, can you say, how to inject preplanning module? Just because copied vanilla heist looses it. And what to do if i want to create custom one?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)