User talk:Mr.p.kiwi: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎Disc Room: Finished! Mostly!)
(removed Disc Room tutorial from my talk page)
Line 37: Line 37:
== External Links ==
== External Links ==
*[http://meta.wikimedia.org/wiki/Help:Table| How to create tables]
*[http://meta.wikimedia.org/wiki/Help:Table| How to create tables]
= Disc Room =
[[Image:Insert disk.jpg|thumb|right|300px|This is how you do it...]]
The '''disc room''' is the final challenge Atlas and P-body must face when completing a course. It is placed in parts beyond GLaDOS's influence and serves as a last stand of the humans against GLaDOS's growing control over the facility.
== Disc Emitter ==
the '''disc emitter''' is the device that creates the discs. It can re-create the disc in case the disc is lost or dissolved. It is usually placed near the '''Disc Receiver''' at the end of the last chamber of the course. However it doesn't have to be like that; placing the emitter at the start of the chamber can lead to some interesting puzzles, in which the main priority is to make sure the disc wouldn't get lost.
=== Step 1 ===
[[Image:Disk emitter1.jpg|350px|thumb|right|Snap on the [[Basic Construction#The_grid|grid]]: 2]]
Create a [[prop_static]] and set it's model to <code>models/props_gameplay/laser_disc_player.mdl</code>, place it anywhere in your disc room. This is where the disc would be picked up from.
We will create the disc now; a [[prop_dynamic_override]]. Set its [[Hammer Object Properties Dialog|properties]] as follows:
::{| class=standard-table
!  Property Name || Value
|-
| Parent || spawner_door
|-
| Disable Shadows || Yes
|-
| World Model || laser_disc.mdl
|-
| Name || start_disc
|}
Place the disc model in the device as detailed in the picture to the right.
Now create a 8x20x1 brush and texture it with <code>tools/toolsinvisible</code>. Place it on top of the disc model, again, as shown on the picture to the right. Tie the brush to an entity (by pressing {{key|Ctrl|T}}) and make it a [[func_door]]. Now set its properties as follows:
::{| class=standard-table
!  Property Name || Value
|-
| Name || spawner_door
|-
| Speed || 26
|-
| Start Sound || World.LaserDiskLoad
|-
| Delay Before Reset (-1 stay) || -1
|-
| Loop Moving Sound || Yes
|-
| Move Direction || 0 0 0
|}
{{Note|The Move Direction should be set to whatever [[QAngle|Pitch Yaw Roll]] you have for your <code>laser_disc_player.mdl</code>.}}
Another entity must be made now a [[prop_physics_override]], this will be the disc the players would carry around. Hold {{Key|Shift}} and drag the ''start_disc'' to the point it is no longer in the device and only it's 'tip' touches the entrance. Change it's "Class" to prop_physics_override and name it disc.
=== Step 2 ===
Here we would make some templates to respawn the disc in case it gets lost.
{{Note|This step is not crucial for the emitter to operate, skip to step 3 if there is no way to lose the disc in your map.}}
Create a [[point_template]] with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || template_disc_spawn
|-
| Template 1 || start_disc
|-
| Template 2 || spawner_door
|}
Create one more point_template with these properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || template_disc
|-
| Template 1 || disc
|}
=== Step 3 ===
[[Image:Disk emitter2.jpg|350px|thumb|right|This time, everything's included.<br>Snap on the [[Basic Construction#The_grid|grid]]: 8]]
After making all the entities needed to get the emitter to work, all that is left is to connect their actions to form a disc; let's make some [[Inputs and Outputs|I/O]] connections!
<br>Start by creating a [[logic_auto]] with the following output:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnMapSpawn || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
|}
{{Tip|We would use this entity again further in the tutorial, don't forget it's here.}}
Open your '''spawner_door''' '[[Inputs and Outputs#Outputs|Output]]' tab and add the following properties:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || ClearParent || &nbsp; || 0.00 || No
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || TurnOff || &nbsp; || 0.00 || No
|-
| [[Image:Io11.png]] || OnFullyOpen || template_disc || ForceSpawn || &nbsp; || 0.00 || No
|-
| [[Image:Io11.png]] || OnFullyOpen || start_disc || Kill || &nbsp; || 0.10 || No
|-
| [[Image:Io11.png]] || OnFullyOpen || spawner_door || Kill || &nbsp; || 0.10 || No
|}
Now add the following output to your '''template_disc_spawn''':
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnEntitySpawned || spawner_door || Open || &nbsp; || 0.00 || No
|}
Make sure that the entity that detects when the disc has been lost or killed has the following output:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnTrigger || template_disk_spawn || ForceSpawn || &nbsp; || 0.00 || No
|}
{{Tip|It is usually advised to let the entity which destroyed said disc to fire the output. For example, when the [[Emancipation Grid|fizzler]] dissolves the disc, it will fire the output OnDissolve. Check that there are no other physic objects that can get dissolved by that fizzler.}}
Now the emitter should be working, and dispensing new discs when the last one is gone. However, this is only a third of the process of getting the disc room to be functioning.
== Disc Receiver ==
The '''disc receiver''' (also '''disc player''') is where the disc is placed to fulfill it's purpose; placing the disc in the receiver turns on the video showing the information GLaDOS was looking for.
=== Step 1 ===
[[Image:Disk loader1.jpg|350px|thumb|right|Snap on the [[Basic Construction#The_grid|grid]]: 2]]
Place a prop_static in your disc room, and set it's model to <code>models/props_gameplay/laser_disc_player.mdl</code>. This is where the player will place the disc to end the level.
When the player places the disc near the receiver the disc that was carried would be removed and a hidden disc would load. We will do this to have better control over the way the disc will enter the receiver and to simply overcome a lot of problems. Another '''prop_dynamic_override''' would be required, the one that would load in the device by being attached to a func_door.
::{| class=standard-table
!  Property Name || Value
|-
| Parent || loader_door
|-
| Disable Shadows || Yes
|-
| World Model || laser_disc.mdl
|-
| Name || hidden_disc
|}
The disc needs to be placed as detailed in the picture to the right.
Now create a func_door brush with the <code>tools/toolsinvisible</code>. Place it on top of the disc model, again, as shown on the picture to the right. Add the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || loader_door
|-
| Speed || 8
|-
| Start Sound || World.LaserDiskLoad
|-
| Delay Before Reset (-1 stay) || -1
|-
| Loop Moving Sound || Yes
|-
| Move Direction || 0 180 0
|}
{{Note|The Move Direction should be set to the opposite Pitch Yaw Roll you have for your laser_disc_player.mdl.}}
{{Note|The func_door brush length depends on how far you want the disc to go; the disc has a 25 unit radius<sup>[http://en.wikipedia.org/wiki/Radius]</sup>, so you can judge by that. In the picture above the brush is 26 units long, making the entire disc go in.}}
=== Step 2 ===
'''Step 1''' lists the visible entities used for the disc receiver, this step will list the invisible entities.
<br>The first is a [[trigger_once]] brush, and the second is a [[filter_activator_name]]. Add now the following properties:
1. The '''trigger_once''':
::{| class=standard-table
!  Property Name || Value
|-
| Name || &nbsp;
|-
| Filter Name || disc_filter
|}
Ensure the '''Physics Objects''' flag is checked.
2. The '''filter_activator_name''':
::{| class=standard-table
!  Property Name || Value
|-
| Name || disc_filter
|-
| Filter Name || disc
|}
=== Step 3 ===
To get everything interacting, we will use the I/O system. Remember that logic_auto we used? Open it's Outputs tab and add the following properties:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnStartTouch || hidden_disc || TurnOff || &nbsp; || 0.00 || No
|}
Add the following output to the trigger_once:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnStartTouch || hidden_disc || TurnOn || &nbsp; || 0.00 || No
|-
| [[Image:Io13.png]] || OnStartTouch || !activator || Kill || &nbsp; || 0.00 || No
|-
| [[Image:Io11.png]] || OnStartTouch || loader_door || Open || &nbsp; || 0.00 || No
|}
{{Note|[[Hammer]] might show the !activator command in red. Just ignore it, in-game it'll work fine.}}
To the loader_door entity add one output:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io12.png]] || OnFullyOpen || disc_loaded_relay || Trigger || &nbsp; || 0.00 || No
|}
{{Note|At this point we haven't yet made the disc_loaded_relay entity, so it might show that output as broken, at the moment.}}
Now the disc receiver should be operating and accepting the disc when it's placed in it. This is, however, only one more step in the process of completing the disc room.
== Projected Movie ==
[[Image:Coop bts blueprints.jpg|thumb|right|300px|This is the part where the magic happens.]]
The '''projected movie''' is the sequence that happens after loading the disc. Including the bot explosion at the end.
=== Step 1 ===
We will start by placing a prop_static and set it's model to <code>projector_screen.mdl</code>  (Easily found by typing "projector" in the model filter bar). Now on it's lower left corner place a [[vgui_movie_display]] with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || insert_disc_movie
|-
| Movie Filename || media/insert_disk.bik
|-
| Loop Movie || Yes
|-
| Stretch to Fill || Yes
|-
| Force precache || Yes
|-
| Panel width || 156
|-
| Panel height || 112
|}
Again open the properties of our logic_auto and add these outputs:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnMapSpawn || insert_disc_movie || Enable || &nbsp; || 0.00 || No
|}
Now make another vgui_movie_display entity at the exact same spot as the last one (simply shift drag the one you have just created one unit, and move it back). The only difference will be the name and the video it will display:
::{| class=standard-table
!  Property Name || Value
|-
| Name || aperture_movie
|-
| Movie Filename || media/coop_bts_blueprints.bik
|-
| Loop Movie || Yes
|-
| Stretch to Fill || Yes
|-
| Force precache || Yes
|-
| Panel width || 156
|-
| Panel height || 112
|}
=== Step 2 ===
[[Image:Projector Screen.jpg|thumb|right|300px|This is how it should probably look like.]]
Remember that '''disc_loaded_relay''' entity we used but didn't make? Well, we're using it now. First create a [[logic_relay]] and name it disc_loaded_relay. Open the Outputs flag and add the following properties:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnTrigger || insert_disc_movie || Disable || &nbsp; || 2.00 || No
|-
| [[Image:Io11.png]] || OnTrigger || aperture_movie || Enable || &nbsp; || 2.00 || No
|}
create an [[ambient_generic]] with these properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || disc_windup_sound
|-
| Sound Name || World.LaserDiskPowerUp
|}
And add to the disc_loaded_relay one more output:
:{| border=1 cellpadding="2" cellspacing="1"
|- align=left style="background:#DCDCDC; color:black"
!
! My Output > !! Target Entity !! Target Input !! Parameter !! Delay !! Only Once
|-
| [[Image:Io11.png]] || OnTrigger || disc_windup_sound || PlaySound || &nbsp; || 0.00 || No
|}
And at last everything should be working!
<br>{{todo|Check if my tutorial does lead to a successful and operating disc room, anyone up to it?}}
== Finishing up ==
I need to do this...
# <code>models/props_underground/projector.mdl</code>
# <code>models/props_office/whiteboard_coop.mdl</code>
# More detail

Revision as of 10:19, 10 November 2011

Tables

Trying to create good looking tables! ...You know, for the articles; but they need to reach perfection somewhere. If YOU feel like it, you can create a table here too, so that everyone can learn, including yourself. You can experiment on this page all day long - just leave your name as the title of the table, so that it'll be more organized.

To do such a thing, you would need to do something like this:

{| class="standard-table"
|+ your name goes here
!Header
|-
|Table
|}

For example:

Mr.p.kiwi 23:43, 31 July 2011 (PDT)
This will be a header This will be a header2 This will be a header3
Column1; Row1 Column2; Row1
Column 1; Row 2&3 Column3; Row2
Column2; Row3 Column3; Row3


External Links