Portal 2

Portal 2

88 ratings
Portal 2: How to unlock unused pings (Complete guide)
By Nanoman2525
You probably already know about the hidden ping menu for thumbs up, thumbs down, etc.

But did you know that you could modify existing ping tool menus?
   
Award
Favorite
Favorited
Unfavorite
Before we get into this...
If you are not the best at editing files or are just really lazy, you can download two maxed out ping tool sets I personally made from this link below. (One for the standard and one for the playtest menu)

If you have no idea what the playtest menu is, read more into the guide and I'll give an in-depth explanation of it.

https://drive.google.com/drive/folders/1xrvnlNPYOn7HRrm-0LMBqvWcr2-6qPbR

This will work on all PC platforms.

In order to install these ping sets, just download the "pak01_dir.vpk" file and simply place it in this directory of your Portal 2 installation: steamapps/common/Portal 2/bin
  • File contents of pak01_dir.vpk:
    • Two custom textures for the ping tool icons
    • Maxes out the standard ping menu (radialmenu.txt)
    • Maxes out the playtest ping menu (radialmenuplaytest.txt)

Preview: (Courtesy of PieCreeper)
Changelogs regarding these pings...
For speedrunners,
The base ruling on these pings is that they are legal to use in any multiplayer game mode under the condition that they do not provide external advantage to your gameplay that normal pings would not be able to do; There's no conceivable way to make that happen in my experience. The package linked above is fine to use. (Betsruner approved)

UPDATED NOTE:
As of September 1st, 2022, SRDC verifiers require that you upload all custom pak01_dir.vpk file(s) that you used for your speedruns alongside your demos. Just note that this also includes your custom ping content if stored in a VPK.

UPDATED NOTE #2:
As of August 5th, 2024, SRDC verifiers require that the form in which you install this content MUST follow the Modpack rules. Check out the P2SR Discord or the announcement made on the official speedrun website[www.speedrun.com] for more information. You can download the Modpack for this content through the link provided at the top of this guide. Just don’t edit it, or your run may be invalidated. Additionally, because this content has been listed as a Modpack, you do not need to include this VPK file in your submission.

-------------------------------------------------------------------------------------------------------

For anyone that cares,
(might make a bit more sense if you read this after reading the guide)
As of March 25th, 2023, the Portal 2 update has broken the signify client command defined in server.dll. Pings only transmit remotely to other clients if the destination of the ping is a world brush. Pinging most prop-based entities do not work directly, as the max entity index that the game allows for now is 33 for some reason. The pings will appear to work only on the initiator's end, but not show to other players. Server operators will now see the error message: "Ill-formed signify command from client!" in the console each time a player attempts to ping an entity-based prop with an index above 33. A successful ping is noted when your player speaks after pinging.

+coop_ping remains intact.


(TL;DR pings don't work at all if u ping props now, even in base game without modifications...)

To revert the update's changes, you would need to patch the byte sequence of 83 FE 21 7F CB with 90 90 90 90 90 in server.dll, which skips the check for comparing the entity index with 33.

UPDATED NOTE:
Per the January 4th, 2024 game update, the above issue has been fixed.
Playtest menu...
The playtest menu is a hidden and completely functional ping tool menu that was left in the game. This specific ping tool menu was made for playtesters at Valve to express themselves while playing singleplayer PeTi maps and was simply left in the game.

It is easy to bring back the playtest menu, but you need to have the developer console enabled first.
To enable this, follow these steps from the main menu:

1. Options
2. Keyboard/Mouse
3. Enable Developer Console

Now that this setting is enabled, you can press the tilde key "~" located to the left of the number "1" key on U.S. keyboards to pull up the console.

With this console open, you can modify the base command below:

bind (key) +mouse_menu_playtest

The modification of the command can be done by replacing the phrase, "(key)", with any letter/key on your keyboard. If I wanted to make the playtest menu come up whenever I pressed the letter "c" on my keyboard, then I would type in the following:

bind c +mouse_menu_playtest

Do keep in mind that in standard builds of the game (apart from Portal 2 - Educational Version), this playtest menu can open improperly when playing the singleplayer mode and will also prevent you from progressing in-game. You will need to restart Portal 2 to fix this.
Unused ping command...
In Portal 2, there is a hidden prototype of the ping tools that we see in gameplay currently. It has no menu ui, changes color depending on the location of the ping, and leaves an X-mark decal.

It seemingly does not play sound either, however, that functionality does exist. The game attempts to play an included game sound defined in soundscripts by the name of "Player.Coop_Ping", however, stock Portal 2 is missing a sound file by the name of npc\roller\mine\rmine_chirp_quest1.wav which prevents sound being played. Adding this sound file to your installation manually will restore this functionality. It can be found in other Source games such as Half-Life 2 and Portal.

Oddly, this does not change the decal angles of the ping particle depending on where you ping, suggesting that this ping command was an early implementation of the default one we see today.

What's even more interesting is how after pinging anything, even the void, logic_playerproxy will fire an output of "OnCoopPing", despite this entity not being functional in multiplayer games and this ping command not being allowed in singleplayer games.

Assuming you have followed the steps of unlocking the developer console, it is fairly simple to recover this ping through this command:

bind (key) +coop_ping

Once again, you should replace the "(key)" phrase with any letter/key on your keyboard of your choice, to activate this ping while in-game.

List of unused pings...

Fun fact: This ping was referenced as a normally included ping in the Portal 2 PS3 manual.
command: portal_move
icon: hud/commands/portal_move






command: slime_no_drink
icon: hud/commands/slime_no_drink






command: turret_warning
icon: hud/commands/turret_warning
List of technically unused pings...
While these countdown pings are seen in the game, it is possible to use each of them separately as regular pings. They each function exactly as they would in a normal countdown.





command: countdown_3
icon: hud/commands/countdown_3






command: countdown_2
icon: hud/commands/countdown_2






command: countdown_1
icon: hud/commands/countdown_1






command: countdown_go
icon: hud/commands/countdown_go



As you have probably seen in the preview image at the start of the guide, you may have noticed that the co-op player death image is actually a ping. This ping was hardcoded into Portal 2 to play after death sequences but it is still possible to invoke normally. The game refers back to an "iconsheet" (which has both of the death images on a single image), and pulls out its respective "parts" when needed. In layman's terms, the pings don't have clear, separate icons like the other pings do.

The pak01_dir.vpk file contains two separate icons for the death images due to this issue, and is taken from the iconsheet located in hud/gameinstructor_iconsheet3




command: death_blue

If you're using the broken iconsheet image:
icon: hud/gameinstructor_iconsheet3
If you're using pak01_dir.vpk:
icon: hud/commands/death_blue









command: death_orange

If you're using the broken iconsheet image:
icon: hud/gameinstructor_iconsheet3
If you're using pak01_dir.vpk:
icon: hud/commands/death_orange
List of standard pings...



command: box_putdown
icon: hud/commands/box_drop






command: box_pickup
icon: hud/commands/box_pickup






command: button_press
icon: hud/commands/button_press






command: button_tall_press
icon: hud/commands/button_tall_press






command: countdown
icon: hud/commands/countdown






command: look
icon: hud/commands/generic_look






command: move_here
icon: hud/commands/move_here






command: portal_enter
icon: hud/commands/portal_enter_floor






command: portal_enter
icon: hud/commands/portal_enter_wall






command: portal_exit
icon: portal_exit_floor






command: portal_exit
icon: portal_exit_wall






command: portal_place_floor
icon: hud/commands/portal_place_floor






command: portal_place_wall
icon: hud/commands/portal_place_wall
List of playtest pings...



command: done
icon: hud/commands/cancel






command: love_it
icon: hud/commands/love_it






command: hate_it
icon: hud/commands/hate_it






command: confused
icon: hud/commands/confused






command: stuck
icon: hud/commands/stuck
Okay, so how can I modify my existing ping menu(s)?
It might take a hot minute to understand what I'm about to tell you, but it'll make sense, trust me.

There are two ping tool menus that you can change:
  • Standard (+mouse_menu)
  • Playtest (+mouse_menu_playtest)
For changing the standard ping tool menu, navigate to the directory:
steamapps/common/Portal 2/portal2/scripts/radialmenu.txt

For changing the playtest ping tool menu, navigate to the directory:
steamapps/common/Portal 2/portal2_dlc2/scripts/radialmenuplaytest.txt

Use a text editor to open these files. Any works.
Walkthrough of how to edit the files...
Please note that capitalization does matter when rewriting the files.
-------------------------------------------------------------------------------------------------------

First parameter:

The very first parameter can come in two forms depending on which file you edit: "RadialMenu" or "RadialMenuPlaytest". These are important to keep!

Do not define both of these parameters in the same file!
Use the parameter in whichever file it obviously belongs to.

Example code so far (assuming the file is radialmenu.txt):
"RadialMenu" { }
-------------------------------------------------------------------------------------------------------

Second parameter:

This is the most complex parameter.
The file references which pings will show up when you are aiming at:

- A certain entity (stuff that ISN'T a wall, floor, or ceiling)
- A world brush (stuff that IS a wall, floor, or ceiling)
- Open portals

The game attempts to sort these three conditions through the use of the following parameters:
  • "Default"
  • "Command,Entity.(entity name here)"
  • "Command,World.Wall"
  • "Command,World.NoPortal_Wall"
  • "Command,World.Ceiling"
  • "Command,World.NoPortal_Ceiling"
  • "Command,World.Floor"
  • "Command,World.NoPortal_Floor"
  • "Command,Portal.Orange"
  • "Command,Portal.Blue"

    There are also three unused parameters for slime written inside of the client binary, each of which work perfectly fine, but will not work for most of the Portal 2 slime textures you aim at, unfortunately. The texture/material has to have "%compileSlime" 1 defined in the .vmt file in order for the ping tool to recognize the surfaces as slime. Interestingly, this parameter is found in Portal's slime textures, but is not present in most, if not all Portal 2 slime textures. This is also why Portal 2's slime feels more fluid than Portal 1's slime.

  • "Command,World.SlimeWall"
  • "Command,World.SlimeFloor"
  • "Command,World.SlimeCeiling"

Notes about the listed parameters:

It is very important to always have "Default" defined as one of your parameters!

"Default" applies if you aren't looking at any of the three aforementioned characteristics, (entity, world brush, and portals) which will pretty much only be the void for the standard & playtest ping menus. The game also defaults to "Default" if the game cannot find the parameter that is being called upon by a player.

Valve packaged the playtest menu to only use the "Default" command, so it has no arguments as to what the player is looking at. This essentially means that whatever you look at, the pings will stay the same in the menu no matter what. (unless you add arguments yourself)

If a parameter has the phrase "World.NoPortal_", then it obviously references what pings should come up if the surface is not portalable, as opposed to "World.".

The "Portal.Blue" command refers to the primary portals that can be shot by players.
Similarly, "Portal.Orange" refers to the secondary portals.

Example code so far (assuming the file is radialmenu.txt):
"RadialMenu" { "Default" { } "Command,Entity.npc_portal_turret_floor" { } }

Using the TAB button is the best way to space out the code perfectly.
-------------------------------------------------------------------------------------------------------

Third parameter:

Additionally, in these files, you will find that the ping tool options are organized by cardinal directions, and never diagonally. While Portal 2 does support diagonal options in ping tool menus, Valve most likely removed the extra pings to maintain a simple aesthetic.

The directions that are supported in the ping tool menus:
  • Center
  • North
  • East
  • South
  • West
  • NorthEast
  • SouthEast
  • SouthWest
  • NorthWest

The order of these directions in code do not matter.

Example code so far (assuming the file is radialmenu.txt):
"RadialMenu" { "Default" { "North" { } } "Command,Entity.npc_portal_turret_floor" { "North" { } } }
-------------------------------------------------------------------------------------------------------

Fourth parameter:

Now comes the actual customization.
Pick out whichever ping you wish to use from the list provided in this guide and copy both the respective "command" and "icon" parameters into your code.

Although you really only need to include "command" and "icon", interestingly, there are more options that are acceptable for the fourth parameter:
  • "text" - Game tries to gather this string value, but is seemingly obsolete.

  • "command" - What ping command you will input to the server for other players to see.

  • "icon" - What icon/image will show up on YOUR ping menu as Atlas. It can be any texture. (Cannot equal \0)

  • "icon2" - What icon/image will show up on YOUR ping menu as P-Body. If this parameter is not defined, then P-Body will follow what "icon" dictates. It can be any texture. (Cannot equal \0)

  • "glados" - Must be defined with integer values. If set to 1, then on the calibration map, mp_coop_start, GLaDOS will speak to the team that pings an invalid surface before players obtain the portal gun.

  • "owner" - Must input a valid direction as seen in the third parameter. This makes it so that when the player hovers over this option, it will instead forward the selection to the one indicated by this parameter.

You most likely will not be using any of these except for "command" and "icon", since the others do not make sense to use in this context, but it is possible if you ever want to use them.

Example code so far (assuming the file is radialmenu.txt):
"RadialMenu" { "Default" { "North" { "command" "countdown" "icon" "hud/commands/countdown" } } "Command,Entity.npc_portal_turret_floor" { "North" { "command" "confused" "icon" "hud/commands/confused" } } }

Effectively, this makes it so that if the player aims at an entity with the classname "npc_portal_turret_floor", then the option at the top will be for displaying the question mark. If the player doesn't aim at the turret, then the top option will revert to the "Default", being a countdown.
Example Code...
Let's say we wanted to add an option on the west part of the ping tool for showing the unused turret ping when pointing at a turret, and this is what we have currently:

"RadialMenu" { "Default" { "North" { "command" "countdown" "icon" "hud/commands/countdown" } "Center" { "command" "look" "icon" "hud/commands/generic_look" } "South" { "command" "move_here" "icon" "hud/commands/move_here" } } "Command,Entity.npc_portal_turret_floor" { "North" { "command" "countdown" "icon" "hud/commands/countdown" } "Center" { "command" "look" "icon" "hud/commands/generic_look" } "South" { "command" "move_here" "icon" "hud/commands/move_here" } } }

Adding code to resemble something like this will work just fine:

"RadialMenu" { "Default" { "North" { "command" "countdown" "icon" "hud/commands/countdown" } "Center" { "command" "look" "icon" "hud/commands/generic_look" } "South" { "command" "move_here" "icon" "hud/commands/move_here" } } "Command,Entity.npc_portal_turret_floor" { "North" { "command" "countdown" "icon" "hud/commands/countdown" } "Center" { "command" "look" "icon" "hud/commands/generic_look" } "South" { "command" "move_here" "icon" "hud/commands/move_here" } "West"
{
"command" "turret_warning"
"icon" "hud/commands/turret_warning"
}
} }

Before editing:



















After editing:
Hardcoded parameters & chart...
For both the standard and playtest pings, there are several parameters predefined in the game's code that determine how they behave. These are hardcoded functionalities and cannot be altered through the script files, though I found it pretty cool to know about, since it puts the pieces together.

The parameters include:
  1. The name of the command.
    • Game checks for a set of specific commands defined in code that we provide in our script files and does not ping if a command doesn't match exactly.
    • (All valid commands are shown in the list of pings)
  2. The icon of the command.
    • Game has a set icon defined in code that displays in the server after a specific ping is made based on the "command" parameter.
    • The "icon" parameter defined in the script files is what determines what icon pops up in the ping menus on your end, not what icon shows up in-game on the server.
      • Note: This means that you cannot change what icons other players see in the server no matter what. You can only show the hardcoded icons through what is given in the "command" parameter.
    • (Respective icons are shown in the list of pings)
  3. Should this ping command add a decal?
    • Hardcoded per ping
  4. Should this ping image be tinted depending on player team?
    • Hardcoded per player team
      • Tint to the RGB value of "255 160 32" if on Team 2 (Red)
      • Tint to the RGB value of "64 160 255" if on any other team
  5. Should this ping scale by distance as the player moves?
    • Hardcoded per ping
  6. Should this ping play a low, normal, or high pitch?
    • Hardcoded per ping

No decal vs. decal:
























Chart of each ping and what is allowed:

Ping Name
Add a decal?
Tint?
Scale by distance?
Pitch?
look
Yes
Yes
Yes
Normal
death_blue
No
No
No
No Sound
death_orange
No
No
No
No Sound
countdown_3
No
Yes
No
Low
countdown_2
No
Yes
No
Low
countdown_1
No
Yes
No
Low
countdown_go
No
Yes
No
High
move_here
Yes
Yes
Yes
Normal
portal_place_floor
Yes
Yes
Yes
Normal
portal_place_wall
Yes
Yes
Yes
Normal
portal_move
No
Yes
Yes
Normal
portal_enter
No
Yes
Yes
Normal
portal_exit
No
Yes
Yes
Normal
slime_no_drink
No
Yes
Yes
Normal
box_pickup
No
Yes
Yes
Normal
box_putdown
Yes
Yes
Yes
Normal
button_press
No
Yes
Yes
Normal
button_tall_press
No
Yes
Yes
Normal
turret_warning
No
Yes
Yes
Normal
love_it
Yes
Yes
Yes
Normal
stuck
Yes
Yes
Yes
Normal
hate_it
Yes
Yes
Yes
Normal
confused
Yes
Yes
Yes
Normal

The last hardcoded command is "done" and it cancels everything

What's interesting is that for portal_enter and portal_exit, the game checks if an open portal is exactly plane with a floor or not. If it is, then it changes the icon that shows in the server to the floor portal icon. If not, then it uses the wall icon.
This extra check is not made with placing portals, since they are separated to portal_place_floor and portal_place_wall commands.
That's all there is to it...
Nice job sticking around until the end of the guide. By now, you should be able to customize most aspects of your ping tool as you so choose!
28 Comments
Nanoman2525  [author] Aug 3 @ 1:43pm 
@Nullacron The ping trace functionality is beyond the scope of this guide. You'll need to modify the game code to change that behavior.
Nullacron Jul 12 @ 8:51pm 
Considering the ping tool sees the Excursion Funnel, is there something for that...? Is the funnel itself a valid, pingable entity?
Nanoman2525  [author] Jun 30 @ 10:20pm 
@Nullacron I got it from GameBanana as a custom vpk file. You could alternatively use the SourceAutoRecord plugin and change the colors through a command for ease.
Nullacron Jun 29 @ 9:05am 
@Nanoman2525 where'd you get the Black and White portals thing? I've been looking for a black and white portals mod forever.
Nanoman2525  [author] Jun 21 @ 6:07pm 
@Nullacron Not that I know of. The ones I have listed are the only ones I know about.
Nullacron Jun 21 @ 2:14am 
Is there any other world brush stuff?
LP0818 Mar 29 @ 11:29am 
THANKSSSSSSS
Nanoman2525  [author] Sep 3, 2024 @ 5:59pm 
@NightWatchMaker You can if you'd like, however, it may not be allowed in speedruns unless you get your version whitelisted with moderators. Simply edit the files yourself using this guide.
Slasher Sep 3, 2024 @ 4:27pm 
can you remove the non essential things from the custom pings menu you made like the death icons and no drinking slime
Nanoman2525  [author] Aug 8, 2024 @ 11:41am 
@AMJ It's the Sixense MotionPack DLC.