Thread: RuneTF gamemode
View Single Post
Author Message
happs
Junior Member
Join Date: Aug 2012
Old 06-29-2013 , 04:42   RuneTF gamemode
Reply With Quote #1


Runes are power-ups that grant special abilities. You can have only one rune active at a time, and it will remain active until death.


Design Rationale
The original Quake Runes mod was a free-for-all player deathmatch. Many of the runes had abilities increasing the players survivability or fragging efficiency. When porting the concept to Team Fortress, it became apparent that some of the runes were too strong in a team objective-based setting. Similar to the design philosophy of the weapon alternatives, runes that increase a players damage output come with negative effects.

When designing new runes, the focus was to complement team-play more than buffing individual players. Some runes can become more effective when used in coordination with teammates. Because of the random nature of the rune drops, runes that only effect certain classes were avoided. However some runes are certainly more effective in the hands of certain classes. To facilitate teamplay runes can be shared with teammates by dropping them on the ground.

Although most runes have passive abilities, some runes require activating with the command +use.


List of Runes
Aware - Periodically scans your nearby surroundings. Shows class and health of nearby players.

Recall - Teleport to a previous location. +use sets or clears teleport destination. When far enough away, teleports player to destination.

Blink - Teleports between two locations. +use to toggle destinations.

IronDome - Launches interceptor rockets upon death. Interceptor rockets cause knockback only. Based on javalia

DeadMansTrigger - Triggers explosion upon death. +use to activate with greater effect. When fully detonated the affected players are temporarily stunned. Contact with interceptor rockets negate this runes effects.

Sharing - Healthkits and ammokits picked up are shared with nearby teammates.

Rage - Increases rate of fire upon damaging an enemy. Prolonged usage can cause adverse effects.

Powerplay - Instantly respawns fallen teammates when you kill three enemies in under 10 seconds.

Shared Sacrifice - Incoming damage is divided among nearby teammates.

Diamond Skin - Damage reduced by 10. The bleed, jarate, milk, and stun conditions have no effect.

Engineering - Grants speed boost when carrying objects. Steals enemy sentries upon death.

Ammo - Passively replenishes ammo. Active with +use to restore your weapon clip. Additionally, engineers gain metal, and spies gain cloak time.

Pounce - Passively grants more control over movement when in the air. Shamelessly copied from Chanz

Vault - Passively increases height of jumps.

Assault - Grants a speed boost when ubered.

Vanguard - Redirects damage from nearby weaker teammates to you.

AirBud - Increased air movement. Decreased gravity.

Sabotage - Deal extra damage to buildings and take extra damage from engineers. Stronger spy sappers.

Melee - Melee attacks only. Damage increased.

Haste - Slight buff to player movement speed. Penality when under the effects of jarate, bleed, milk, or daze.

Repulsion - Enemy rockets, flares, and arrows are pushed away from the player.


Installation
Requires sdkhooks

Copy materials, models and sound directories into respective tf mod folder. Copy plugins, extensions, gamedata, data into the respective sourcemod folder.

Add to your server.cfg tf_allow_player_use 1, it is required!

Alternatively add exec happs.cfg to your server.cfg, provides useful aliases for testing runetf.


Currently, only stock maps have rune spawn points. But an in-game menu is provided to add spawn points to custom maps.


cvars
Code:
rune_enable			Enables runetf game-mode
rune_version			Version
rune_spawn_interval		Time between random spawns
rune_spawn_lifetime		Time until a spawned rune expires
rune_spawn_droptime		Time until a rune dropped by a player expires
rune_round_start_clear		Clear runes on map and from players when a new round starts
rune_round_end_clear		Clear runes on map and from players when a mini-round ends

st_gamedesc_override		Changes game type to RuneTF.  Set to empty string to disable.

rune_vote_threshold		Percentage of players needed to toggle runetf
rune_vote_allow_enable		Allow rune voting to enable
rune_vote_allow_disable		Allow rune voting to disable

rune_update_mapcfg		If you modify the map spawn configuration files, you should set this to 0
rune_update_branch		Change the branch the autoupdater will use to sync with
You can change these cvars on a per map basis by adding them to a cfg/mapname.cfg file.


User Commands
Code:
+use				players must have bound a key to +use
!drop				drop your currently held rune
!inspect_rune			shows rune held by player or targeting
!runes				vote to enable runetf
!norunes			vote to disable runetf
!info_rune			display a runes abilities
Dev Commands
Code:
!spawn_rune			spawn a specific rune
!menu_rune			manipulate spawn generators
/toggle_spawn_rune		enable !spawn__rune for everyone
/sm_give			give the target player a specific rune
/sm_take			take from the target player a specific rune
sm_give and sm_take bypass the checks if a player already has a rune, and should only be used when developing new runes.

Use !spawn_rune when play-testing.


Spawn Generator
Runes do not spawn at random locations in the map. All spawn locations have a fixed origin, angle and force. Each spawn point has a unique number. There are two arrays, a global array and a disabled array. Periodically, as configurable by rune_spawn_interval, a random rune from the global array will be selected and spawned. You can group spawn points into named clusters.

The !menu_rune command is the interface you should use to create new rune generators. It is a wrapper around most of the lower-level commands listed below.

There is a third array, the working set, that is used when creating new spawn points. The working set is not saved to disk, and must be merged for changes to take effect.

Code:
sm_gen			list the contents of all three arrays
sm_gen set <...>	manipulate properties of spawn point
sm_it				iterate through an array
Before you can do anything useful with the spawn points, you have to create a cluster. Clusters can have any number of spawn points, and each spawn point can be a member of any number of clusters. Currently, it is not possible to remove a cluster from the config unless you manually edit the map config file and remove all references to it; so choose wisely.

Code:
sm_gen cluster create <cluster>
All spawn points that are currently in the working set will automatically be added to the created cluster.


Code:
sm_cluster <cluster?>								list cluster membership and events
sm_gen cluster <add|remove> <cluster> [id|lower-upper]		change cluster membership status of a sequence of spawn points
sm_gen cluster load <cluster>						loads all spawn points in the cluster from the working set
sm_gen cluster drop <cluster>						drop all spawn points in the cluster from the working set

Each spawn point has a boolean flag that assigns it's membership to the global array or disabled array when the map is started. (or new full round)
Code:
sm_gen cluster <enable|disable> <cluster name>		Change the startup membership of every spawn point in a cluster.

To get an idea of what a cluster will look like, you can spawn an entire cluster at once. This is how I created the graphic in the logo.
Code:
sm_gen cluster spawn <cluster>			Spawn temporary runes from cluster

Clusters can be tied to map entity outputs to create events that will do one of four actions:
  1. Spawn cluster of runes at once.
  2. Add spawn points into global array if not already
  3. Remove spawn points from global array if not already
  4. Toggle each spawn point between global and disabled.


Code:
sm_cluster <cluster?>			display cluster events
sm_gen event <cluster> remove <#>			remove event #number from cluster, starting at 0
sm_gen event <cluster> <create|clone>			low-level event tools; use !menu_rune

The event that is triggered can either be from an output of any classname, or a named entitiy of a particular classname.

For example;
Code:
sm_gen event blue_forward create Add ByEnt control_point_1 OnCapTeam2
This will add all rune spawn points from blue_forward when the team_control_point entity named control_point_1 is captured by team blu.

Code:
sm_gen event center_ramps create Spawn ByClass trigger_capture_area OnEndCap
All spawn points in the cluster center_ramps will be spawn a rune when any team_control_point is captured by either team.



When you are done, always make sure to merge and save your changes.
Code:
sm_gen merge		Copy working set into persistent arrays, overriding changes if id already exists.
sm_gen_save			Save persistant arrays to disk.
test_spawn			Test your changes with spawn_test.



Optional Plugins
The only required plugins are spawn_test, spawn_gen and the runetf extension.
Code:
rune_vote		Handles the !runes and !norunes vote commands, and rune_enable forwards.
rune_help		Greets players with a description of the game-mode, and warns players every ~5 mins if they have never used +use.
rune_info		Displays rune descriptions with the !info_rune command.
rune_plugin_updater	Periodically check for new releases of the plugin.
rune_updater		Separately check for new map spawn generator files.  If you modify any, set rune_update_mapcfg 0!
Compiling
Source is located at github if you wish to contribute.

Requires sdkhooks, steamtools, smlib, color.inc

Updater required for plugin autoupdates.
Attached Thumbnails
Click image for larger version

Name:	rune_web.jpg
Views:	2870
Size:	37.6 KB
ID:	121934  
Attached Files
File Type: zip runetf_mdl_mp3.zip (585.9 KB, 368 views)
File Type: zip runetf_v1.zip (492.2 KB, 363 views)
File Type: zip master.zip (1.17 MB, 365 views)

Last edited by happs; 07-07-2013 at 01:47.
happs is offline