Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
map_making:map_making_tutorial [2020/07/31 00:50]
fiveman1
map_making:map_making_tutorial [2021/02/23 18:25] (current)
fiveman1 typo
Line 1: Line 1:
-=====Map Making Tutorial/Basics for Roblox bhop/surf map making=====+======Map Making Tutorial/Basics for Roblox bhop/surf map making====== 
 + 
 +===== Introduction =====
  
-==Introduction== 
  
 This tutorial assumes you are somewhat familiar with how to use Roblox Studio. You only need to know how to add parts and manipulate them, as well as how to use the Explorer tab to manipulate parts' names and properties.  This tutorial assumes you are somewhat familiar with how to use Roblox Studio. You only need to know how to add parts and manipulate them, as well as how to use the Explorer tab to manipulate parts' names and properties. 
Line 9: Line 10:
 You will have to test the maps using [[https://www.roblox.com/games/517201717/Bhop-Maptest|bhop maptest]] or [[https://www.roblox.com/games/517206177/Surf-Maptest|surf maptest]]. You will have to test the maps using [[https://www.roblox.com/games/517201717/Bhop-Maptest|bhop maptest]] or [[https://www.roblox.com/games/517206177/Surf-Maptest|surf maptest]].
  
----- +===== The basics =====
- +
-==The basics==+
  
 To start, you will need: To start, you will need:
Line 26: Line 25:
 To add a trigger, or a part that resets you when you touch it, name a part ''Trigger#''. The ''#'' should correspond to the Spawn it is associated with (''Trigger2'' sends you to ''Spawn2'', etc.) To add a trigger, or a part that resets you when you touch it, name a part ''Trigger#''. The ''#'' should correspond to the Spawn it is associated with (''Trigger2'' sends you to ''Spawn2'', etc.)
  
----- +==== Note about Spawns and Triggers ==== 
- + 
-//Note about Spawns and Triggers:// +
  
 Spawns should always face upright, the game will always spawn you in the middle on the top face, so if the part is rotated 180 degrees, you will spawn on the bottom.  Spawns should always face upright, the game will always spawn you in the middle on the top face, so if the part is rotated 180 degrees, you will spawn on the bottom. 
Line 40: Line 38:
 Finally, Triggers will not send you backwards. If your current spawn is ''Spawn5'' and you touch ''Trigger2'' you will get sent to ''Spawn5''. Finally, Triggers will not send you backwards. If your current spawn is ''Spawn5'' and you touch ''Trigger2'' you will get sent to ''Spawn5''.
  
-----+===== Platforms and Surfs =====
  
-==Platforms and Surfs== +Next for a Bhop map, you can start by adding ''Platform''s. By naming a part ''Platform'', players will be forced to jump on it or they will be reset.
- +
-Next for a Bhop map, you can start by adding ''Platform''s. By naming a part ''Platform'', players will be forced to jump on it or they will be reset. Additionally, if a surface you can normally surf on is a ''Platform'', you will be forced to jump on it instead.+
  
 Surf maps will have ''Surf''s instead. Name a part ''Surf'' and you will surf on it even if you would normally be able to jump on it. Surf maps will have ''Surf''s instead. Name a part ''Surf'' and you will surf on it even if you would normally be able to jump on it.
Line 52: Line 48:
 If you want to create a teleport between two sections, you can do so using the ''Teleport#'' part. The # corresponds to the Spawn you will be sent to. Like Triggers, Teleports will not send you backwards. If you want to create a teleport between two sections, you can do so using the ''Teleport#'' part. The # corresponds to the Spawn you will be sent to. Like Triggers, Teleports will not send you backwards.
  
----- 
  
-==Full map part list==+===== How to test and submit your map ===== 
 + 
 +First, upload your map model to Roblox. Do this by right clicking the model and selecting "Save to Roblox". Make sure it is uncopylocked. 
 + 
 +Next, you will have to join the [[http://discord.gg/Fw8E75X|Roblox Bhop/Surf discord]]. Once you have joined, go to either the #maptest-bhop channel or the #maptest-surf channel. Then type !take link/ID where link/ID is a link to the model or the asset ID for the model. 
 + 
 +The bot will tell you when it has taken the map. If it could not take it read the error it tells you and fix what you did wrong. Once accepted, go to either [[https://www.roblox.com/games/517201717|bhop maptest]] or [[https://www.roblox.com/games/517206177|surf maptest]]. 
 + 
 +Once in-game, in chat, type ''/map id'' where the ID is the asset ID for your map. For example, the asset ID of ''https://www.roblox.com/library/5366980124'' is ''5366980124''
 + 
 +Finally, you can ''/nominate'' your map and ''/rtv''
 + 
 +//Note: The model cannot update while you are inside maptest. If you want to test a new version you will have to make a new model and give it to the bot or create a new server using the ''/startserver'' command.// 
 + 
 +===== Lighting / Why does my map look different in maptest? ===== 
 + 
 +Read the [[map making:lighting guide|lighting guide]]. 
 + 
 +===== Making a booster ===== 
 + 
 +Boosters do not have special names. To make a booster you simply change the Velocity property of a normal part or a ''Platform''. When the player jumps on it they will immediately be given the velocity specified by the parts Velocity property. 
 + 
 +For example, if a player with a velocity of 40 u/s in the positive x-direction jumps on a part with velocity (30, 0, 0), their velocity will now be 70 u/s in the x-direction. To help discern direction in Studio there is a cube at the top right with axes. 
 + 
 +It is recommended to use a script when changing the Velocity property, because this property is reset whenever the part is moved, including if the map model itself is moved. 
 +By using a script it is easy to store and come back to the value without having to worry if you reset it accidentally. 
 + 
 +<code Lua> 
 +-- Example script (put the script inside the part you want to turn into a booster): 
 +script.Parent.Velocity = Vector3.new(0,0,0) 
 +</code> 
 + 
 +Finally, if you want to make a vertical booster with a specific height, you can do so with a simple physics equation. The height variable is in studs (so the example will boost the player 30 studs high).  
 +The gravity variable should be set to 100 for bhop and 50 for surf, because the gravity is different between the two games. 
 + 
 +<code Lua> 
 +local height = 30 
 +local gravity = 100 
 +script.Parent.Velocity = Vector3.new(0, math.sqrt(2 * height * gravity), 0) 
 +</code> 
 + 
 +===== Caveats and things to keep in mind ===== 
 + 
 +Unions and meshes do not have normal collision. In bhop/surf they will simply have a box for collision. It is the same box you see in Studio when you select a union/mesh and highlight it.  
 +To work around this you can create your own collision manually by making individual parts and making them invisible, and making the original union/mesh CanCollide false. 
 + 
 +Avoid having surfaces on the same level as another and directly adjacent to eachother. This greatly increased the chances of a player accidentally edge boosting on the part and losing lots of their speed.  
 +If you need to have this, it is recommended to make the parts CanCollide false, and creating a single invisible part that outlines the parts inside. This is common practice for certain platform designs. 
 + 
 + 
 +===== Full map part list =====
  
   * ''MapStart''   * ''MapStart''
Line 61: Line 106:
     * The end of your map. Your timer will end when you enter this. Should always be CanCollide false.     * The end of your map. Your timer will end when you enter this. Should always be CanCollide false.
   * ''Platform''   * ''Platform''
-    * Parts that you must jump on. You will be reset if you don't jump on these. Additionally, ''Platform''s allow you to jump on surfaces normally you would surf instead.+    * Parts that you must jump on. You will be reset if you don't jump on these.
   * ''Surf''   * ''Surf''
     * Parts that you must surf on. You will surf on these even if you could jump normally.     * Parts that you must surf on. You will surf on these even if you could jump normally.
   * ''Spawn#''   * ''Spawn#''
     * Parts you Spawn on. You will spawn in the center of the top face.     * Parts you Spawn on. You will spawn in the center of the top face.
 +  * ''SpawnAt#''
 +    * Touching a ''SpawnAt#'' will update your Spawn to the corresponding ''Spawn#''. This can be more useful than traditional triggers in certain situations in order to prevent trigger skips.
   * ''Trigger#''   * ''Trigger#''
     * Parts that reset you. The # corresponds to the Spawn they are meant to send you to.     * Parts that reset you. The # corresponds to the Spawn they are meant to send you to.
   * ''ForceTrigger#''   * ''ForceTrigger#''
-    * Same as above but will send you backwards.+    * Same as above but can send you backwards.
   * ''Teleport#''   * ''Teleport#''
-    * Parts that teleport you forwards to a new Spawn. The # corresponds to the given Spawn.+    * Parts that teleport you forwards to a new Spawn. The # corresponds to the given Spawn. Unlike Triggers these will not reset you to the start with autorestart enabled.
   * ''ForceTeleport#''   * ''ForceTeleport#''
     * Same as above but can send you backwards.     * Same as above but can send you backwards.
Line 81: Line 128:
     * The # is the amount of times you are allowed to jump on the part. Jumping on it consecutively more times than the # will reset you.     * The # is the amount of times you are allowed to jump on the part. Jumping on it consecutively more times than the # will reset you.
   * ''WormholeIn#'' and ''WormholeOut#''   * ''WormholeIn#'' and ''WormholeOut#''
-    * WormholeIn# will send you to the corresponding WormHoleOut#. The transition is seamless. The parts must have the same dimensions (size). Use teleports for non-seamless transitions.+    * WormholeIn# will send you to the corresponding WormHoleOut#. The transition is seamless, it's very useful for making impossible geometriesIn the most common use case the parts have the exact same size, but coordinates are mapped linearly from the surface of one to the other if they are different sizes. Use teleports for non-seamless transitions.
   * ''Accelerator''   * ''Accelerator''
     * Accelerates players in a given direction/acceleration at a constant rate. Adjust the Velocity property of this part to adjust where/how much the accelerator should accelerate the player inside of it. Should always be CanCollide false.     * Accelerates players in a given direction/acceleration at a constant rate. Adjust the Velocity property of this part to adjust where/how much the accelerator should accelerate the player inside of it. Should always be CanCollide false.
   * ''Water''   * ''Water''
     * When inside you can swim and has custom swimming physics. Adjust the Velocity property to give it a current. Adjust the CustomPhysicalProperties Density and Friction to adjust the fluid density and drag coefficient respectively (these are 1.0 and 0.1 by default). Should always be CanCollide false.     * When inside you can swim and has custom swimming physics. Adjust the Velocity property to give it a current. Adjust the CustomPhysicalProperties Density and Friction to adjust the fluid density and drag coefficient respectively (these are 1.0 and 0.1 by default). Should always be CanCollide false.
 +
 +=====Resources=====
 +
 +==Map Kits==
 +[[https://www.roblox.com/library/5466364144/barebones-bhop-surf-map-kit|Barebones map kit]]
 +
 +[[https://www.roblox.com/library/1033600018/bhop-map-name|drumman22's map making kit]]
 +
 +[[https://www.roblox.com/library/5258147910/fiveman1s-bhop-map-kit|fiveman1's map making kit]]
 +
 +==Plugins==
 +
 +[[https://www.roblox.com/library/144938633/Archimedes-Two-v2-4|Archimedes Two/Arc]] Very useful plugin for creating smooth surf ramps and smooth surfaces
 +
 +[[https://www.roblox.com/library/213664111/Celestial-Body-Dragger|Celestial Body Dragger]] Makes it easy to drag and reposition the sun
 +
 +[[https://www.roblox.com/library/143613186/Model-Resize-Plugin-2-1-DRAG-TO-RESIZE|Model Resizer]] Allows you to resize models/selections by a given scale
 +
 +[[https://www.roblox.com/library/166951203/Stravant-MaterialFlip|Material Flip]] Allows you to rotate textures (with some limitation)
 +
 +[[https://www.roblox.com/library/217792838/Stravant-Model-Reflect|Reflect]] Flip parts
 +
 +[[https://www.roblox.com/library/165687726/Stravant-GapFill-Extrude-Fixed|Gap Fill]] Automatically creates parts to fill gaps between two parts
 +
 +[[https://www.roblox.com/library/165534573/Stravant-ResizeAlign-Fixed|Resize Align]] Resize a part to meet another part by clicking on two faces
Navigation