/*
* CSB Furien Mod
* Copyright (C) 2026 counter-strike-boost.com
*
* A Furien mod core. Furiens (Terrorists) get a knife only, high speed, low
* gravity, multi-jump and partial invisibility; Anti-Furiens (CTs) keep full
* weapons and a flashlight. Every attribute is a cvar, loadouts are applied on
* spawn, multi-jump is handled in PlayerPreThink, and a HUD shows how many of
* each side are still alive.
*
* Inspired by Furien Mod by Askhanar. Independent GPL re-implementation.
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version. It is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See for details.
*/
#include
#include
#include
#include
new const PLUGIN[] = "CSB Furien Mod"
new const VERSION[] = "1.0.0"
new const AUTHOR[] = "counter-strike-boost.com"
new g_pEnabled, g_pSpeed, g_pGravity, g_pMaxJumps, g_pInvis, g_pHealth
new g_iJumps[33]
new bool:g_bDidJump[33]
new g_iHudSync
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_pEnabled = register_cvar("csb_furien_enabled", "1")
g_pSpeed = register_cvar("csb_furien_speed", "320.0")
g_pGravity = register_cvar("csb_furien_gravity", "0.5")
g_pMaxJumps = register_cvar("csb_furien_maxjumps", "2")
g_pInvis = register_cvar("csb_furien_invis", "120")
g_pHealth = register_cvar("csb_furien_hp", "150")
RegisterHam(Ham_Spawn, "player", "fwSpawnPost", 1)
register_forward(FM_PlayerPreThink, "fwPreThink")
g_iHudSync = CreateHudSyncObj()
set_task(1.0, "taskHud", 0, _, _, "b")
}
public fwSpawnPost(id)
{
if (!get_pcvar_num(g_pEnabled) || !is_user_alive(id))
return
new team = get_user_team(id)
if (team == 1)
applyFurien(id)
else if (team == 2)
applyAntiFurien(id)
}
applyFurien(id)
{
strip_user_weapons(id)
give_item(id, "weapon_knife")
set_user_health(id, get_pcvar_num(g_pHealth))
set_user_maxspeed(id, get_pcvar_float(g_pSpeed))
set_user_gravity(id, get_pcvar_float(g_pGravity))
/* partial invisibility */
new alpha = get_pcvar_num(g_pInvis)
if (alpha < 0)
alpha = 0
else if (alpha > 255)
alpha = 255
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, alpha)
g_iJumps[id] = 0
client_print(id, print_chat, "[CSB] You are a Furien: knife, speed, low gravity and multi-jump.")
}
applyAntiFurien(id)
{
set_user_gravity(id, 1.0)
set_user_maxspeed(id, 250.0)
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
/* flashlight ready */
set_user_footsteps(id, 0)
client_print(id, print_chat, "[CSB] You are an Anti-Furien: full weapons. Hunt the Furiens.")
}
public fwPreThink(id)
{
if (!get_pcvar_num(g_pEnabled) || !is_user_alive(id))
return
if (get_user_team(id) != 1)
return
new flags = pev(id, pev_flags)
if (flags & FL_ONGROUND)
{
g_iJumps[id] = 0
g_bDidJump[id] = false
return
}
new button = pev(id, pev_button)
new oldbutton = pev(id, pev_oldbuttons)
new maxJumps = get_pcvar_num(g_pMaxJumps)
if ((button & IN_JUMP) && !(oldbutton & IN_JUMP) && g_iJumps[id] < maxJumps)
{
static Float:fVel[3]
pev(id, pev_velocity, fVel)
fVel[2] = 265.0
set_pev(id, pev_velocity, fVel)
g_iJumps[id]++
}
}
public taskHud()
{
if (!get_pcvar_num(g_pEnabled))
return
new fur = 0, anti = 0
new players[32], num
get_players(players, num, "ae")
for (new i = 0; i < num; i++)
{
if (get_user_team(players[i]) == 1)
fur++
else if (get_user_team(players[i]) == 2)
anti++
}
set_hudmessage(255, 80, 80, 0.02, 0.06, 0, 0.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(0, g_iHudSync, "Furiens: %d Anti-Furiens: %d", fur, anti)
}