Merge branch 'master' into features/disabling-security-rewards

Conflicts:
	resource/FortressForever_english.txt
This commit is contained in:
alaswell 2015-05-24 18:04:48 -06:00
commit 25009c6367
39 changed files with 540 additions and 388 deletions

View file

@ -1,4 +1,4 @@
exec userconfig.cfg
// This config will be executed every time you spawn as this class
// For more information, see our tutorials on the Fortress-Forever Wiki. http://www.fortress-forever.com/wiki/Main_Page
// For more information, see our tutorials on the Fortress-Forever Wiki. http://www.fortress-forever.com/wiki/

View file

@ -66,5 +66,4 @@ cl_updaterate "66"
con_enable 1
//cl_interp "0.03"
name "WhenFFwillOut"

View file

@ -4,4 +4,4 @@
// IMPORTANT: This file DOES NOT auto-execute.
// It must be executed in the developer console with "exec userconfig.cfg" OR in the <classname>.cfg files.
// The first line of each <classname>.cfg should be "exec userconfig.cfg".
// For more information, see our tutorials on the Fortress-Forever Wiki. http://www.fortress-forever.com/wiki/Main_Page
// For more information, see our tutorials on the Fortress-Forever Wiki. http://www.fortress-forever.com/wiki/

View file

@ -42,8 +42,8 @@
SearchPaths
{
Game |gameinfo_path|.
Game hl2
Game FortressForever
Game |gameinfo_path|..\hl2
Game |gameinfo_path|..\platform
}
}
}

83
maps/ff_cornfield.lua Normal file
View file

@ -0,0 +1,83 @@
IncludeScript("base_id");
IncludeScript("base_respawnturret");
IncludeScript("base_location");
respawnturret_attackers = base_respawnturret:new({ team = attackers })
respawnturret_defenders = base_respawnturret:new({ team = defenders })
cornhealthkit = genericbackpack:new({
health = 50,
model = "models/items/healthkit.mdl",
materializesound = "Item.Materialize",
touchsound = "HealthKit.Touch"
})
cornarmorkit = genericbackpack:new({
armor = 200,
model = "models/items/armour/armour.mdl",
materializesound = "Item.Materialize",
touchsound = "ArmorKit.Touch"
})
cornammopack = genericbackpack:new({
health = 35,
armor = 50,
grenades = 20,
nails = 50,
shells = 100,
rockets = 15,
cells = 70,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
function cornammopack:dropatspawn() return false
end
corngrenadepack = genericbackpack:new({
health = 35,
armor = 50,
grenades = 20,
nails = 50,
shells = 100,
rockets = 15,
cells = 70,
mancannons = 1,
gren1 = 2,
gren2 = 1,
respawntime = 30,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
function corngrenadepack:dropatspawn() return false
end
detpack_wall_open = nil
function onroundreset()
-- close the door
if detpack_wall_open then
-- there's no "close".. wtf
OutputEvent("detpack_hole", "Toggle")
detpack_wall_open = nil
end
-- Reset The Turrets
respawnturret_attackers = base_respawnturret:new({ team = attackers })
respawnturret_defenders = base_respawnturret:new({ team = defenders })
end
detpack_trigger = trigger_ff_script:new({})
function detpack_trigger:onexplode( trigger_entity )
if IsDetpack( trigger_entity ) then
ConsoleToAll("The door has been blown open!")
OutputEvent("detpack_hole", "Toggle")
detpack_wall_open = true
end
return EVENT_ALLOWED
end
-- Don't want any body touching/triggering it except the detpack
function trigger_detpackable_door:allowed( trigger_entity ) return EVENT_DISALLOWED
end

21
maps/ff_cornfield.txt Normal file
View file

@ -0,0 +1,21 @@
INVADE AND DEFEND
Objective:
Blue team starts as the attacker. Red team
starts as the defender.
The attacking team must take control of the
town by pushing through and capping the four
Command Points sequentially. The defending
team simply tries to hold out as long as they
can. Once the attackers succeed, teams swap,
and play begins again.
Command Points are captured by taking the flag
from the previous point and carrying it to the
next. When a Command Point is secured, the flag
required to capture the next Command Point
appears on top of it. For example, the flag
needed to capture Command Point 3 will always
spawn at Command Point 2.

View file

@ -14,7 +14,8 @@ function startup()
SetPlayerLimit( Team.kYellow, -1 )
SetPlayerLimit( Team.kGreen, -1 )
SetTeamName( Team.kRed, "Destroyers" )
SetTeamName( Team.kBlue, "Blue Orcas" )
SetTeamName( Team.kRed, "Red Gazelles" )
end
function precache()

View file

@ -1,48 +0,0 @@
-- ff_push.lua
-----------------------------------------------------------------------------
-- includes
-----------------------------------------------------------------------------
IncludeScript("base_push");
-----------------------------------------------------------------------------
-- global overrides
-----------------------------------------------------------------------------
local orig_startup = startup
function startup()
-- set up team names. Localisation?
SetTeamName( Team.kBlue, "Ball Locks" )
SetTeamName( Team.kRed, "Rocket Expediting" )
orig_startup()
end
-----------------------------------------------------------------------------
-- triggers for doors
-----------------------------------------------------------------------------
red_respawn_triggerA = respawndoor:new({ team = Team.kRed })
red_respawn_triggerB = respawndoor:new({ team = Team.kRed })
blue_respawn_triggerA = respawndoor:new({ team = Team.kBlue })
blue_respawn_triggerB = respawndoor:new({ team = Team.kBlue })
-----------------------------------------------------------------------------
-- unique push locations
-----------------------------------------------------------------------------
location_blue_corridor = location_info:new({ text = "Corridor", team = Team.kBlue })
location_red_corridor = location_info:new({ text = "Corridor", team = Team.kRed })
location_blue_lasers = location_info:new({ text = "Lasers", team = Team.kBlue })
location_red_lasers = location_info:new({ text = "Lasers", team = Team.kRed })
location_blue_side_warehouse = location_info:new({ text = "Side Warehouse", team = Team.kBlue })
location_red_side_warehouse = location_info:new({ text = "Side Warehouse", team = Team.kRed })
location_blue_loading_bay = location_info:new({ text = "Loading Bay", team = Team.kBlue })
location_red_loading_bay = location_info:new({ text = "Loading Bay", team = Team.kRed })
location_middle_warehouse = location_info:new({ text = "Middle Warehouse", team = Team.kUnassigned })

View file

@ -1,4 +0,0 @@
PUSH SCORING
Objective: Grab the ball from the centre warehouse and then run it to the enemy company's loading zone! Capture it on the raised platform.
The team with the most captures at the end of the game wins!

View file

@ -1,211 +0,0 @@
// Push soundscape file
// Author: Defrag
// Some sections based on existing valve soundscapes but modified
// generic outside sound
"ff.outside"
{
// constant wind base
"playlooping"
{
"volume" "0.2"
"pitch" "100"
"wave" "ambient/wind/ff_wasteland_wind.wav"
}
// Wind gusts (based on cliffe's cs_assault settings)
"playrandom"
{
"time" "20,30"
"volume" "0.3,0.4"
"pitch" "90,110"
"rndwave"
{
"wave" "ambient/wind/wind_snippet1.wav"
"wave" "ambient/wind/wind_snippet2.wav"
"wave" "ambient/wind/wind_snippet3.wav"
"wave" "ambient/wind/wind_snippet4.wav"
"wave" "ambient/wind/wind_snippet5.wav"
}
}
}
// Rats. Ach, gash!
"push.rats"
{
"playrandom"
{
"time" "20,30"
"volume" "0.3,0.5"
"pitch" "90,100"
"position" "random"
"soundlevel" "SNDLVL_140db"
"rndwave"
{
"wave" "ambient/creatures/rats1.wav"
"wave" "ambient/creatures/rats2.wav"
"wave" "ambient/creatures/rats3.wav"
"wave" "ambient/creatures/rats4.wav"
}
}
}
// workshop noises
"push.workshop"
{
"playrandom"
{
"time" "30,60"
"volume" "0.1,0.2"
"pitch" "90,110"
"position" "random"
"soundlevel" "SNDLVL_140db"
"rndwave"
{
"wave" "ambient/push/airhose.wav"
"wave" "ambient/push/airwrench1.wav"
"wave" "ambient/push/airwrench2.wav"
}
}
}
// outside area between the central warehouse and the base corridor
"push.outside"
{
"dsp" "1"
"dsp_volume" "0.5"
"playsoundscape"
{
"name" "ff.outside"
"volume" "1.0"
}
}
// capture point area
"push.capturepoint"
{
"dsp" "1"
"dsp_volume" "0.5"
"playsoundscape"
{
"name" "ff.outside"
"volume" "1.0"
}
// train going past
"playrandom"
{
"time" "120,180"
"volume" "0.3"
"pitch" "100"
"rndwave"
{
"wave" "ambient/machines/train_rumble.wav"
}
}
}
// side warehouse with no roof
"push.sidewarehouse"
{
"dsp" "1"
"dsp_volume" "0.5"
"playsoundscape"
{
"name" "ff.outside"
"volume" "1.0"
}
"playsoundscape"
{
"name" "push.rats"
"volume" "1.0"
}
"playsoundscape"
{
"name" "push.workshop"
"volume" "1.0"
}
}
// respawn
"push.respawn"
{
"dsp" "1"
"dsp_volume" "0.5"
// General ambient noise
"playlooping"
{
"volume" "0.3"
"pitch" "100"
"wave" "ambient/push/inside_amb1.wav"
}
"playrandom"
{
"time" "30,60"
"volume" "0.3,0.5"
"pitch" "90,100"
"position" "random"
"soundlevel" "SNDLVL_140db"
"rndwave"
{
"wave" "ambient/materials/metal4.wav"
"wave" "ambient/materials/rustypipes1.wav"
"wave" "ambient/materials/rustypipes2.wav"
}
}
}
// main warehouse in centre
"push.centralwarehouse"
{
"dsp" "1"
"dsp_volume" "0.5"
// General ambient noise
"playlooping"
{
"volume" "0.5"
"pitch" "100"
"wave" "ambient/push/inside_amb1.wav"
}
"playsoundscape"
{
"name" "push.workshop"
"volume" "1.0"
}
"playsoundscape"
{
"name" "ff.outside"
"volume" "0.6"
}
}
// doughnut shaped hallway that connects the respawn, cap point, side warehouse etc.
"push.doughnut"
{
"dsp" "1"
"dsp_volume" "0.5"
"playsoundscape"
{
"name" "push.respawn"
"volume" "1.0"
}
"playsoundscape"
{
"name" "ff.outside"
"volume" "0.6"
}
}

View file

@ -124,6 +124,14 @@ blue_dspawn = { validspawn = blue_d_only }
-- AND THEN, SOME MORE STUFF...
-----------------------------------------------------------------------------
red_window_clip = trigger_ff_clip:new({ clipflags = {
ClipFlags.kClipAllPlayers, ClipFlags.kClipAllProjectiles,
ClipFlags.kClipAllBullets,ClipFlags.kClipAllGrenades } })
blue_window_clip = trigger_ff_clip:new({ clipflags = {
ClipFlags.kClipAllPlayers, ClipFlags.kClipAllProjectiles,
ClipFlags.kClipAllBullets,ClipFlags.kClipAllGrenades } })
red_sec = red_security_trigger:new()
blue_sec = blue_security_trigger:new()

View file

@ -6,8 +6,10 @@
-- This file is loaded automatically whenever a map is loaded.
-- Do not change this file.
-----------------------------------------------------------------------------
local _G = getfenv(0)
require "util.utils"
Class = require "util.class"
Collection = require "util.collection"
-----------------------------------------------------------------------------
-- defines
@ -48,6 +50,61 @@ function baseclass:new (o)
end
-----------------------------------------------------------------------------
-- set up pairs and ipairs for iterating the global entity list
--
-- Example usage:
--
-- for ent_id, ent in pairs(GlobalEntityList) do
-- print(ent_id, ent)
-- end
--
-- Note: The order of iteration is always arbitrary
-----------------------------------------------------------------------------
local GlobalEntityListIterator = function()
local entity = GlobalEntityList:FirstEntity()
return function()
local cur_ent = entity
entity = GlobalEntityList:NextEntity(cur_ent)
if cur_ent then
return cur_ent:GetId(), cur_ent
else
return nil
end
end
end
local ipairs_base = ipairs
ipairs = function(t)
if t == GlobalEntityList then
return GlobalEntityListIterator()
end
return ipairs_base(t)
end
local pairs_base = pairs
pairs = function(t)
if t == GlobalEntityList then
return GlobalEntityListIterator()
end
return pairs_base(t)
end
-----------------------------------------------------------------------------
-- make luabind's class_info function safer
-- (don't crash if class_info() is called on non-luabind objects)
-----------------------------------------------------------------------------
local class_info_base = class_info
class_info = function(obj)
local obj_type = type(obj)
if obj_type == "userdata" and getmetatable(obj).__luabind_class then
return class_info_base(obj)
end
return {}
end
-----------------------------------------------------------------------------
-- reset everything
-----------------------------------------------------------------------------

View file

@ -568,7 +568,7 @@ function update_zone_text( player )
if not zone_status then
AddHudText( player, "defender_points_text", "#FF_Defenders", text_x, text_line1y, text_align )
AddHudText( player, "defender_points_text2", "#ADZ_ScoreNotice", text_x, text_line2y, text_align )
AddHudTimer( player, "defender_points_timer", current_timer +1, -1, text_x, text_line3y, text_align )
AddHudTimer( player, "defender_points_timer", current_timer, -1, text_x, text_line3y, text_align )
else
AddHudText( player, "attackers_in_text", "#FF_Attackers", text_x, text_line1y, text_align )
AddHudText( player, "attackers_in_text2", "#ADZ_AreIn", text_x, text_line2y, text_align )
@ -596,7 +596,7 @@ function update_zone_text( player )
if not zone_status then
AddHudTextToAll( "defender_points_text", "#FF_Defenders", text_x, text_line1y, text_align )
AddHudTextToAll( "defender_points_text2", "#ADZ_ScoreNotice", text_x, text_line2y, text_align )
AddHudTimerToAll( "defender_points_timer", current_timer +1, -1, text_x, text_line3y, text_align )
AddHudTimerToAll( "defender_points_timer", current_timer, -1, text_x, text_line3y, text_align )
else
AddHudTextToAll( "attackers_in_text", "#FF_Attackers", text_x, text_line1y, text_align )
AddHudTextToAll( "attackers_in_text2", "#ADZ_AreIn", text_x, text_line2y, text_align )

View file

@ -375,7 +375,7 @@ function player_onchat( player, chatstring )
func(unpack(params))
else
ChatToPlayer(player, "^"..CHAT_COMMAND_COLOR_ERROR.."Unexpected error while executing command")
chat_error("Command function find error for "..command.."("..paramstring.."):".. finderror)
chatbase_error("Command function find error for "..command.."("..paramstring.."):".. finderror)
return true
end

View file

@ -785,7 +785,7 @@ function flaginfo( player_entity )
else
AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
end
AddHudTimer(player, "flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudTimer(player, "flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudIcon(player, hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
elseif _G[flagname].status == 0 then
AddHudText(player, "flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
@ -802,7 +802,7 @@ function flaginfo( player_entity )
else
AddHudText(player, "flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
end
AddHudTimer(player, "flag_tobase_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudTimer(player, "flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudIcon(player, hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end
@ -891,7 +891,7 @@ function update_hud()
else
AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
end
AddHudTimerToAll("flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudTimerToAll("flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudIconToAll( hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
elseif _G[flagname].status == 0 then
AddHudTextToAll("flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
@ -908,7 +908,7 @@ function update_hud()
else
AddHudTextToAll("flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
end
AddHudTimerToAll("flag_tobase_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudTimerToAll("flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
AddHudIconToAll(hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end

View file

@ -1026,7 +1026,7 @@ function flaginfo( player_entity )
else
AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
end
AddHudTimer(player, "flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudTimer(player, "flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudIcon(player, hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
elseif _G[flagname].status == 0 then
AddHudText(player, "flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
@ -1043,7 +1043,7 @@ function flaginfo( player_entity )
else
AddHudText(player, "flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
end
AddHudTimer(player, "flag_tobase_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudTimer(player, "flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudIcon(player, hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end
@ -1140,7 +1140,7 @@ function update_hud()
else
AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
end
AddHudTimerToAll("flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudTimerToAll("flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudIconToAll( hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
elseif _G[flagname].status == 0 then
AddHudTextToAll("flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
@ -1157,7 +1157,7 @@ function update_hud()
else
AddHudTextToAll("flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2)
end
AddHudTimerToAll("flag_tobase_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudTimerToAll("flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3)
AddHudIconToAll(hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end

View file

@ -54,6 +54,13 @@ function security_off( team )
clip:SetClipFlags({ClipFlags.kClipTeamBlue})
end
end
-- add a timer for the security on HUD
if team == "red" then
AddHudTimerToAll( "red_sec_timer", SECURITY_LENGTH, -1, button_red.iconx, button_red.icony + 15, button_red.iconalign )
else
AddHudTimerToAll( "blue_sec_timer", SECURITY_LENGTH, -1, button_blue.iconx, button_blue.icony + 15, button_blue.iconalign )
end
end
-- called when security gets turned on (team is a string prefix, like "red")
@ -76,6 +83,9 @@ function security_on( team )
clip:SetClipFlags(_G[clipname].clipflags)
end
end
-- remove security timer
RemoveHudItemFromAll( team.."_sec_timer" )
end
-----------------------------------------------------------------------------
@ -241,6 +251,8 @@ blue_security_trigger = base_security_trigger:new( { team = Team.kBlue, button =
-- Hurts
-----------------------------------------------------------------------------
-- backwards compatibility
hurt = team_only_trigger:new({})
-- red lasers hurt blue and vice-versa
red_security_hurt = not_red_trigger:new({})
blue_security_hurt = not_blue_trigger:new({})

View file

@ -537,6 +537,7 @@ function baseflag:spawn()
LogLuaEvent(0, 0, "flag_spawn","flag_name",flag:GetName())
self.status = 0
self:refreshStatusIcons(flag:GetName())
flag:StartTrail(self.team)
end
function baseflag:addnotouch(player_id, duration)
@ -723,12 +724,12 @@ end
function baseflag:hasanimation() return true end
function baseflag:gettouchsize( mins, maxs )
mins.x = mins.x
mins.y = mins.y
maxs.x = maxs.x
maxs.y = maxs.y
mins.x = mins.x * 1.50
mins.y = mins.y * 1.50
maxs.x = maxs.x * 1.50
maxs.y = maxs.y * 1.50
mins.z = 0
maxs.z = maxs.z * 0.65
maxs.z = maxs.z * 0.80
end
function baseflag:getphysicssize( mins, maxs )
@ -756,7 +757,7 @@ function baseflag:refreshStatusIcons(flagname)
AddHudIconToAll( self.hudstatusiconcarried, ( flagname .. "_status" ), self.hudstatusiconx, self.hudstatusicony, self.hudstatusiconw, self.hudstatusiconh, self.hudstatusiconalign )
elseif self.status == 2 then
AddHudTextToAll( flagname .. "location", self.droppedlocation, self.hudstatusiconx + 24, (self.hudstatusicony + self.hudstatusiconh), self.hudstatusiconalign )
AddHudTimerToAll( flagname .. "timer", FLAG_RETURN_TIME+1, -1, self.hudstatusiconx, (self.hudstatusicony + self.hudstatusiconh), self.hudstatusiconalign )
AddHudTimerToAll( flagname .. "timer", FLAG_RETURN_TIME, -1, self.hudstatusiconx, (self.hudstatusicony + self.hudstatusiconh), self.hudstatusiconalign )
AddHudIconToAll( self.hudstatusicondropped, ( flagname .. "_status" ), self.hudstatusiconx, self.hudstatusicony, self.hudstatusiconw, self.hudstatusiconh, self.hudstatusiconalign )
else
AddHudIconToAll( self.hudstatusiconhome, ( flagname .. "_status" ), self.hudstatusiconx, self.hudstatusicony, self.hudstatusiconw, self.hudstatusiconh, self.hudstatusiconalign )

View file

@ -0,0 +1,46 @@
-- from http://lua-users.org/wiki/SimpleLuaClasses
function Class(base, _ctor)
local c = {} -- a new class instance
if not _ctor and type(base) == 'function' then
_ctor = base
base = nil
elseif type(base) == 'table' then
-- our new class is a shallow copy of the base class!
for i,v in pairs(base) do
c[i] = v
end
c._base = base
end
-- the class will be the metatable for all its objects,
-- and they will look up their methods in it.
c.__index = c
-- expose a constructor which can be called by <classname>(<args>)
local mt = {}
mt.__call = function(class_tbl, ...)
local obj = {}
setmetatable(obj,c)
if c._ctor then
c._ctor(obj,...)
end
return obj
end
c._ctor = _ctor
c.is_a = function(self, klass)
local m = getmetatable(self)
while m do
if m == klass then return true end
m = m._base
end
return false
end
setmetatable(c, mt)
return c
end
return Class

View file

@ -0,0 +1,222 @@
-- backwards compatibility for the Collection class
local Class = require "util.class"
require "util.utils"
local Collection = Class(function(self, entity_or_entities)
self.entities = totable(entity_or_entities)
self:SetupItemsKey()
end)
Collection.filters = {
[CF.kNone] = function(entity) return true end,
[CF.kPlayers] = function(entity) return IsPlayer(entity) end,
[CF.kHumanPlayers] = function(entity) return IsPlayer(entity) and not CastToPlayer(entity):IsBot() end,
[CF.kBotPlayers] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):IsBot() end,
[CF.kPlayerScout] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kScout end,
[CF.kPlayerSniper] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kSniper end,
[CF.kPlayerSoldier] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kSoldier end,
[CF.kPlayerDemoman] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kDemoman end,
[CF.kPlayerMedic] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kMedic end,
[CF.kPlayerHWGuy] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kHwguy end,
[CF.kPlayerPyro] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kPyro end,
[CF.kPlayerSpy] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kSpy end,
[CF.kPlayerEngineer] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kEngineer end,
[CF.kPlayerCivilian] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kCivilian end,
[CF.kPlayerScout] = function(entity) return IsPlayer(entity) and CastToPlayer(entity):GetClass() == Player.kScout end,
[CF.kTeams] = function(entity) return IsEntity(entity) and entity:GetTeamId() >= Team.kSpectator and entity:GetTeamId() <= Team.kGreen end,
[CF.kTeamSpec] = function(entity) return IsEntity(entity) and entity:GetTeamId() == Team.kSpectator end,
[CF.kTeamBlue] = function(entity) return IsEntity(entity) and entity:GetTeamId() == Team.kBlue end,
[CF.kTeamRed] = function(entity) return IsEntity(entity) and entity:GetTeamId() == Team.kRed end,
[CF.kTeamYellow] = function(entity) return IsEntity(entity) and entity:GetTeamId() == Team.kYellow end,
[CF.kTeamGreen] = function(entity) return IsEntity(entity) and entity:GetTeamId() == Team.kGreen end,
[CF.kProjectiles] = function(entity) return IsProjectile(entity) end,
[CF.kGrenades] = function(entity) return IsGrenade(entity) end,
[CF.kInfoScipts] = function(entity) return IsInfoScript(entity) end,
[CF.kInfoScript_Carried] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsCarried() end,
[CF.kInfoScript_Dropped] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsDropped() end,
[CF.kInfoScript_Returned] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsReturned() end,
[CF.kInfoScript_Active] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsActive() end,
[CF.kInfoScript_Inactive] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsInactive() end,
[CF.kInfoScript_Removed] = function(entity) return IsInfoScript(entity) and CastToInfoScript(entity):IsRemoved() end,
[CF.kTraceBlockWalls] = function(entity) return true end, -- not applicable for this type of filtering
[CF.kBuildables] = function(entity) return IsBuildable(entity) end,
[CF.kDispenser] = function(entity) return IsDispenser(entity) end,
[CF.kSentrygun] = function(entity) return IsSentrygun(entity) end,
[CF.kDetpack] = function(entity) return IsDetpack(entity) end,
[CF.kJumpPad] = function(entity) return IsJumpPad(entity) end,
}
function Collection.PassesFilter(entity, filter)
if not filter then filter = CF.kNone end
assert(Collection.filters[filter], "Unknown filter: "..tostring(filter))
return Collection.filters[filter](entity)
end
function Collection.PassesFilters(entity, filters)
if not filters then return true end
filters = totable(filters)
for _,filter in ipairs(filters) do
if not Collection.PassesFilter(entity, filter) then
return false
end
end
return true
end
function Collection:SetupItemsKey()
-- keep a usable reference to the base metatable
local real_obj = setmetatable({}, getmetatable(self))
-- add special handling of the items key
setmetatable(self, {
-- the items key returns an iterator
__index = function(t, k)
if k == "items" then
local i = 0
local n = self:Count()
return function()
i = i + 1
if i <= n then return self.entities[i] end
end
end
return real_obj[k]
end,
-- protect the items key from being assigned
__newindex = function(t, k, v)
if k == "items" then
return
end
real_obj[k] = v
end
})
end
-- lua tables start at index 1
function Collection.ToLuaIndex(collection_index)
return collection_index+1
end
-- Collection started at index 0
function Collection.ToCollectionIndex(lua_index)
return lua_index-1
end
function Collection:AddItem(entity_or_entities)
local entities_to_add = totable(entity_or_entities)
for i,entity_to_add in ipairs(entities_to_add) do
table.insert(self.entities, entity_to_add)
end
end
function Collection:AddFiltered(entity_or_entities, filters)
local entities_to_add = totable(entity_or_entities)
for i,entity_to_add in ipairs(entities_to_add) do
if Collection.PassesFilters(entity_to_add, filters) then
table.insert(self.entities, entity_to_add)
end
end
end
function Collection:RemoveItem(entity_or_entities)
local entities_to_find = totable(entity_or_entities)
for i,entity_to_find in ipairs(entities_to_find) do
local i = self:FindItemIndex(entity_to_find)
if i then
table.remove(self.entities, Collection.ToLuaIndex(i))
end
end
end
function Collection:RemoveAllItems()
table.clear(self.entities)
end
function Collection:Count()
return #self.entities
end
function Collection:NumItems()
return self:Count()
end
function Collection:IsEmpty()
return self:Count() == 0
end
function Collection:HasItem(entity_or_entities)
local entities_to_find = totable(entity_or_entities)
for i,entity_to_find in ipairs(entities_to_find) do
if self:FindItemIndex(entity_to_find) then
return true
end
end
return false
end
-- this is a strange function
function Collection:GetItem(entity_or_entities)
local entities_to_find = totable(entity_or_entities)
for i,entity_to_find in ipairs(entities_to_find) do
local i = self:FindItemIndex(entity_to_find)
if i then
return self:Element(i)
end
end
end
function Collection:FindItemIndex(entity_to_find)
for i,entity in ipairs(self.entities) do
if entity:GetId() == entity_to_find:GetId() then
return Collection.ToCollectionIndex(i)
end
end
return nil
end
function Collection:Element(i)
return self.entities[Collection.ToLuaIndex(i)]
end
function Collection:GetByFilter(filters)
filters = totable(filters)
-- optimization for players
local players_only = false
for _,filter in ipairs(filters) do
if filter >= CF.kPlayers and filter <= CF.kPlayerScout then
players_only = true
break
end
end
if players_only then
self:AddFiltered(GetPlayers(), filters)
else
for ent_id, entity in ipairs(GlobalEntityList) do
self:AddFiltered(entity, filters)
end
end
end
function Collection:GetByName(name_or_names, filters)
local names_to_find = totable(name_or_names)
filters = totable(filters)
for i,name_to_find in ipairs(names_to_find) do
self:AddFiltered(GetEntitiesByName(name_to_find), filters)
end
end
function Collection:GetInSphere(entity_or_origin, radius, filters)
filters = totable(filters)
local origin = IsEntity(entity_or_origin) and entity_or_origin:GetOrigin() or entity_or_origin
local ignore_walls = not table.contains(filters, CF.kTraceBlockWalls)
self:AddFiltered(GetEntitiesInSphere(origin, radius, ignore_walls), filters)
end
return Collection

View file

@ -0,0 +1,34 @@
function table.clear(tbl)
for k in pairs(tbl) do
tbl[k] = nil
end
end
function table.contains(tbl, element)
if tbl == nil then return false end
for _, value in pairs(tbl) do
if value == element then
return true
end
end
return false
end
function table.contains_any(tbl, elements)
if tbl == nil or elements == nil then return false end
for _, value in pairs(tbl) do
for _, element in pairs(elements) do
if value == element then
return true
end
end
end
return false
end
function totable(obj)
if obj == nil then return {} end
if type(obj) == "table" then return obj end
return {obj}
end

View file

@ -462,7 +462,6 @@ Scheme
"1"
{
"name" "FortressForever - HUD Glyphs"
"custom" "1"
"tall" "16"
"weight" "0"
"antialias" "1"
@ -471,7 +470,6 @@ Scheme
"2"
{
"name" "FortressForever - HUD Glyphs"
"custom" "1"
"tall" "18"
"weight" "0"
"antialias" "1"
@ -480,7 +478,6 @@ Scheme
"3"
{
"name" "FortressForever - HUD Glyphs"
"custom" "1"
"tall" "24"
"weight" "0"
"antialias" "1"
@ -489,7 +486,6 @@ Scheme
"4"
{
"name" "FortressForever - HUD Glyphs"
"custom" "1"
"tall" "32"
"weight" "0"
"antialias" "1"
@ -498,7 +494,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Glyphs"
"custom" "1"
"tall" "40"
"weight" "0"
"antialias" "1"
@ -510,7 +505,6 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "32"
"weight" "0"
"antialias" "1"
@ -519,7 +513,6 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "35"
"weight" "0"
"antialias" "1"
@ -528,7 +521,6 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "37"
"weight" "0"
"antialias" "1"
@ -537,7 +529,6 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "43"
"weight" "0"
"antialias" "1"
@ -546,7 +537,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "47"
"weight" "0"
"antialias" "1"
@ -802,7 +792,6 @@ Scheme
"weight" "0"
"antialias" "0"
"additive" "1"
"custom" "1"
"yres" "1 10000"
}
}
@ -815,7 +804,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
HudNumbers
@ -827,7 +815,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
HudNumbersGlow
@ -841,7 +828,6 @@ Scheme
"scanlines" "2"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
HudNumbersSmall
@ -853,7 +839,6 @@ Scheme
"weight" "1000"
"additive" "1"
"antialias" "1"
"custom" "1"
}
}
HudSelectionNumbers
@ -877,7 +862,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
@ -892,7 +876,6 @@ Scheme
"scanlines" "2"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
@ -914,7 +897,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"tall" "14"
"tall" "15"
"weight" "0"
"antialias" "1"
"additive" "0"
@ -1121,8 +1104,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "24"
"tall" "32"
"weight" "0"
"additive" "0"
"antialias" "1"
@ -1132,8 +1114,7 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "40"
"tall" "48"
"weight" "0"
"additive" "0"
"antialias" "1"
@ -1142,8 +1123,7 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "48"
"tall" "64"
"weight" "0"
"additive" "0"
"antialias" "1"
@ -1152,7 +1132,6 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "80"
"weight" "0"
"yres" "1024 1199"
@ -1161,7 +1140,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "96"
"weight" "0"
"yres" "1200 6000"
@ -1177,7 +1155,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
CreditsText
@ -1200,7 +1177,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
CreditsOutroText
@ -1277,7 +1253,6 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "9"
"weight" "500"
"antialias" "1"
@ -1286,7 +1261,6 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "11"
"weight" "500"
"antialias" "1"
@ -1295,7 +1269,6 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "13"
"weight" "600"
"antialias" "1"
@ -1304,7 +1277,6 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "16"
"weight" "900"
"antialias" "1"
@ -1313,7 +1285,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "17"
"weight" "1000"
"antialias" "1"
@ -1326,7 +1297,6 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "18"
"weight" "500"
"antialias" "1"
@ -1335,7 +1305,6 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "18"
"weight" "500"
"antialias" "1"
@ -1344,7 +1313,6 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "24"
"weight" "600"
"antialias" "1"
@ -1353,7 +1321,6 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "36"
"weight" "900"
"antialias" "1"
@ -1362,7 +1329,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "48"
"weight" "1000"
"antialias" "1"
@ -1374,8 +1340,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "10"
"tall" "12"
"weight" "300"
"antialias" "1"
"yres" "1 599"
@ -1383,8 +1348,7 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "12"
"tall" "14"
"weight" "500"
"antialias" "1"
"yres" "600 767"
@ -1392,8 +1356,7 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "14"
"tall" "16"
"weight" "500"
"antialias" "1"
"yres" "768 1023"
@ -1401,8 +1364,7 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "20"
"tall" "24"
"weight" "1000"
"antialias" "1"
"yres" "1024 1199"
@ -1410,8 +1372,7 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "24"
"tall" "30"
"weight" "1000"
"antialias" "1"
"yres" "1200 10000"
@ -1423,7 +1384,6 @@ Scheme
{
"name" "FortressForever - HUD Glyphs"
"tall" "31"
"custom" "1"
"antialias" "1"
}
}
@ -1433,7 +1393,6 @@ Scheme
{
"name" "FortressForever - HUD Glyphs"
"tall" "31"
"custom" "1"
"antialias" "1"
}
}
@ -1443,7 +1402,6 @@ Scheme
{
"name" "FortressForever - HUD Glyphs"
"tall" "10"
"custom" "1"
"antialias" "1"
}
@ -1454,7 +1412,6 @@ Scheme
{
"name" "FortressForever - HUD Glyphs"
"tall" "20"
"custom" "1"
"antialias" "1"
}
@ -1483,8 +1440,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"tall" "12"
"custom" "1"
"tall" "13"
"antialias" "1"
"additive" "0"
}
@ -1498,7 +1454,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"WeaponIconsSelected"
@ -1512,7 +1467,6 @@ Scheme
"blur" "5"
"scanlines" "2"
"additive" "1"
"custom" "1"
}
}
"WeaponIconsClassSelect"
@ -1524,7 +1478,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"WeaponIconsHUD"
@ -1536,7 +1489,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"WeaponIconsSmall"
@ -1548,7 +1500,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"AmmoIconsSmall"
@ -1560,7 +1511,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"StatusGlyphs"
@ -1572,7 +1522,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"StatusGlyphsSmall"
@ -1584,7 +1533,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"GrenadeIcons"
@ -1607,7 +1555,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "1"
"custom" "1"
}
}
"ClassGlyphs" // icons on hud when you disguise and such
@ -1619,7 +1566,6 @@ Scheme
"weight" "0"
"antialias" "1"
"additive" "0"
"custom" "1"
}
}
@ -1702,7 +1648,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"tall" "10"
"tall" "12"
"weight" "0"
"dropshadow" "1"
"antialias" "1"
@ -1712,7 +1658,7 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"tall" "12"
"tall" "14"
"weight" "0"
"antialias" "1"
"dropshadow" "1"
@ -1721,7 +1667,7 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"tall" "14"
"tall" "16"
"weight" "0"
"antialias" "1"
"dropshadow" "1"
@ -1730,7 +1676,7 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"tall" "20"
"tall" "24"
"weight" "0"
"antialias" "1"
"dropshadow" "1"
@ -1739,7 +1685,7 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"tall" "24"
"tall" "30"
"weight" "0"
"antialias" "1"
"dropshadow" "1"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -252,9 +252,8 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"tall" "14"
"tall" "16"
"antialias" "1"
"custom" "1"
}
}
"DefaultBold" //doesn't appear to be used
@ -263,7 +262,6 @@ Scheme
{
"name" "Tahoma"
"custom" "1"
"tall" "16"
"weight" "500"
}
@ -284,7 +282,6 @@ Scheme
{
"name" "Verdana"
"custom" "1"
"tall" "12"
"weight" "0"
}
@ -295,7 +292,6 @@ Scheme
{
"name" "Verdana"
"custom" "1"
"tall" "13"
"weight" "0"
"dropshadow" "1"
@ -307,7 +303,6 @@ Scheme
{
"name" "Tahoma"
"custom" "1"
"tall" "14"
"weight" "0"
}
@ -319,7 +314,6 @@ Scheme
{
"name" "Verdana"
"custom" "1"
"tall" "18"
"weight" "0"
}
@ -330,8 +324,7 @@ Scheme
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "16"
"tall" "18"
"weight" "500"
"antialias" "1"
}
@ -342,8 +335,7 @@ Scheme
"1"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "16"
"tall" "18"
"weight" "500"
"antialias" "1"
@ -352,8 +344,7 @@ Scheme
"2"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "18"
"tall" "20"
"weight" "500"
"antialias" "1"
"yres" "600 767"
@ -361,8 +352,7 @@ Scheme
"3"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "22"
"tall" "24"
"weight" "500"
"antialias" "1"
"yres" "768 1023"
@ -370,8 +360,7 @@ Scheme
"4"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "24"
"tall" "26"
"weight" "600"
"antialias" "1"
"yres" "1024 1199"
@ -379,7 +368,6 @@ Scheme
"5"
{
"name" "FortressForever - HUD Font"
"custom" "1"
"tall" "32"
"weight" "600"
"antialias" "1"
@ -581,7 +569,6 @@ Scheme
"tall" "72"
"weight" "400"
"antialias" "1"
"custom" "1"
}
}
@ -593,7 +580,6 @@ Scheme
"tall" "120"
"weight" "400"
"antialias" "1"
"custom" "1"
}
}
}

View file

@ -1,4 +1,4 @@
2.46.1
2.5.0
CLIENT version:
- only the first line of this file matters

View file

@ -1,4 +1,4 @@
2.46
2.5.0
SERVER version:
- only the first line of this file matters

Binary file not shown.

BIN
resource/gameui_russian.txt Normal file

Binary file not shown.

BIN
resource/gameui_spanish.txt Normal file

Binary file not shown.

View file

@ -429,7 +429,7 @@
"xpos" "275"
"ypos" "49"
"wide" "185"
"tall" "24"
"tall" "32"
"autoResize" "0"
"pinCorner" "0"
"visible" "1"
@ -439,7 +439,7 @@
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"wrap" "0"
"wrap" "1"
"Default" "0"
}
"innerDisplay"
@ -500,10 +500,10 @@
"border" "DepressedBorder"
"scaleImage" "1"
}
"weapon"
"Crosshair"
{
"ControlName" "ComboBox"
"fieldName" "Weapon"
"fieldName" "Crosshair"
"xpos" "292"
"ypos" "23"
"wide" "150"

View file

@ -43,7 +43,7 @@ PlayerClassData
AmmoData
{
"AMMO_SHELLS" "60"
"AMMO_NAILS" "50"
"AMMO_NAILS" "60"
"AMMO_CELLS" "0"
"AMMO_ROCKETS" "0"
"AMMO_DETPACK" "0"
@ -53,7 +53,7 @@ PlayerClassData
MaxAmmoData
{
"AMMO_SHELLS" "75"
"AMMO_NAILS" "100"
"AMMO_NAILS" "75"
"AMMO_CELLS" "30"
"AMMO_ROCKETS" "25"
"AMMO_DETPACK" "0"

View file

@ -27,6 +27,7 @@ PlayerClassData
ArmamentsData
{
"weapon" "ff_weapon_crowbar"
"weapon" "ff_weapon_shotgun"
"weapon" "ff_weapon_supershotgun"
"weapon" "ff_weapon_rpg"
}

View file

@ -5,7 +5,6 @@ WeaponData
"CycleDecrement" "1" // Number of bullets fired per cycle
"Damage" "108" // Damage per burst
"DamageRadius" "150" // Radius of damage
"RecoilAmount" "1" // Amount of recoil

View file

@ -5,7 +5,6 @@ WeaponData
"CycleDecrement" "1" // Number of bullets fired per cycle
"Damage" "102" // Damage per burst
"DamageRadius" "125" // Radius of damage
"RecoilAmount" "1" // Amount of recoil

View file

@ -27,7 +27,7 @@ WeaponData
"default_clip" "60"
"default_clip2" "-1"
"primary_ammo" "AMMO_SHELLS"
"primary_ammo" "AMMO_NAILS"
"secondary_ammo" "None"
"ffencrypted" "1" // required for the script to load

View file

@ -1,3 +1,3 @@
PatchVersion=1.0.0.1
PatchVersion=1.2.5.0
ProductName=FortressForever
appID=253530