diff --git a/addons/source-python/data/source-python/client/insurgency/CBaseClient.ini b/addons/source-python/data/source-python/client/insurgency/CBaseClient.ini
new file mode 100644
index 000000000..f2be2f077
--- /dev/null
+++ b/addons/source-python/data/source-python/client/insurgency/CBaseClient.ini
@@ -0,0 +1,7 @@
+# ../data/source-python/client/insurgency/CBaseClient.ini
+
+[virtual_function]
+ [[set_name]]
+ offset_linux = 68
+ offset_windows = 21
+ arguments = STRING
diff --git a/addons/source-python/data/source-python/entities/insurgency/CBaseCombatCharacter.ini b/addons/source-python/data/source-python/entities/insurgency/CBaseCombatCharacter.ini
new file mode 100644
index 000000000..2b5a1d6ad
--- /dev/null
+++ b/addons/source-python/data/source-python/entities/insurgency/CBaseCombatCharacter.ini
@@ -0,0 +1,8 @@
+[virtual_function]
+
+ # _ZN20CBaseCombatCharacter13Weapon_SwitchEP17CBaseCombatWeaponi
+ [[weapon_switch]]
+ offset_linux = 285
+ offset_windows = 284
+ arguments = POINTER, INT
+ return_type = BOOL
diff --git a/addons/source-python/data/source-python/entities/insurgency/CBaseCombatWeapon.ini b/addons/source-python/data/source-python/entities/insurgency/CBaseCombatWeapon.ini
new file mode 100644
index 000000000..8003b3eba
--- /dev/null
+++ b/addons/source-python/data/source-python/entities/insurgency/CBaseCombatWeapon.ini
@@ -0,0 +1,11 @@
+[virtual_function]
+
+ # _ZN17CBaseCombatWeapon13PrimaryAttackEv
+ [[primary_attack]]
+ offset_linux = 286
+ offset_windows = 285
+
+ # _ZN17CBaseCombatWeapon13SecondaryAttackEv
+ [[secondary_attack]]
+ offset_linux = 287
+ offset_windows = 286
diff --git a/addons/source-python/data/source-python/entities/insurgency/CBaseEntity.ini b/addons/source-python/data/source-python/entities/insurgency/CBaseEntity.ini
new file mode 100644
index 000000000..d2cbb0a9a
--- /dev/null
+++ b/addons/source-python/data/source-python/entities/insurgency/CBaseEntity.ini
@@ -0,0 +1,44 @@
+[virtual_function]
+
+ # _ZN11CBaseEntity9SetParentEPS_i
+ [[set_parent]]
+ offset_linux = 37
+ offset_windows = 36
+ arguments = POINTER, INT
+
+ # _ZN11CBaseEntity12OnTakeDamageERK15CTakeDamageInfo
+ [[on_take_damage]]
+ offset_linux = 68
+ offset_windows = 67
+ arguments = POINTER
+ return_type = INT
+
+ # _ZN11CBaseEntity8TeleportEPK6VectorPK6QAngleS2_
+ [[teleport]]
+ offset_linux = 116
+ offset_windows = 115
+ arguments = POINTER, POINTER, POINTER, BOOL
+
+ # _ZN11CBaseEntity11SetTransmitEP18CCheckTransmitInfob
+ [[set_transmit]]
+ offset_linux = 21
+ offset_windows = 20
+ arguments = POINTER, BOOL
+
+ # _ZN11CBaseEntity10StartTouchEPS_
+ [[start_touch]]
+ offset_linux = 105
+ offset_windows = 104
+ arguments = POINTER
+
+ # _ZN11CBaseEntity5TouchEPS_
+ [[touch]]
+ offset_linux = 106
+ offset_windows = 105
+ arguments = POINTER
+
+ # _ZN11CBaseEntity8EndTouchEPS_
+ [[end_touch]]
+ offset_linux = 107
+ offset_windows = 106
+ arguments = POINTER
diff --git a/addons/source-python/data/source-python/entities/insurgency/CBasePlayer.ini b/addons/source-python/data/source-python/entities/insurgency/CBasePlayer.ini
new file mode 100644
index 000000000..12ed63076
--- /dev/null
+++ b/addons/source-python/data/source-python/entities/insurgency/CBasePlayer.ini
@@ -0,0 +1,44 @@
+[virtual_function]
+
+ # _ZN11CBasePlayer10BumpWeaponEP17CBaseCombatWeapon
+ [[bump_weapon]]
+ offset_linux = 438
+ offset_windows = 437
+ arguments = POINTER
+ return_type = BOOL
+
+ # _ZN11CBasePlayer11Weapon_DropEP17CBaseCombatWeaponPK6VectorS4_
+ [[drop_weapon]]
+ offset_linux = 284
+ offset_windows = 283
+ arguments = POINTER, POINTER, POINTER
+
+ # _ZN11CBasePlayer13GiveNamedItemEPKcibP11CBaseEntity
+ [[give_named_item]]
+ offset_linux = 442
+ offset_windows = 441
+ arguments = STRING, INT, BOOL
+ return_type = POINTER
+
+ # _ZN11CBasePlayer16PlayerRunCommandEP8CUserCmdP11IMoveHelper
+ [[run_command]]
+ offset_linux = 461
+ offset_windows = 460
+ arguments = POINTER, POINTER
+
+ # _ZN11CBasePlayer8PreThinkEv
+ [[pre_think]]
+ offset_linux = 362
+ offset_windows = 361
+
+ # _ZN11CBasePlayer9PostThinkEv
+ [[post_think]]
+ offset_linux = 363
+ offset_windows = 362
+
+
+[property]
+
+ [[view_offset]]
+ name = m_vecViewOffset[0]
+ type = Vector
diff --git a/addons/source-python/data/source-python/entities/insurgency/CINSPlayer.ini b/addons/source-python/data/source-python/entities/insurgency/CINSPlayer.ini
new file mode 100644
index 000000000..7df9a6a72
--- /dev/null
+++ b/addons/source-python/data/source-python/entities/insurgency/CINSPlayer.ini
@@ -0,0 +1,7 @@
+[property]
+
+ ragdoll = m_hRagdoll
+
+ [[eye_angle]]
+ name = m_angEyeAngles[0]
+ type = QAngle
diff --git a/addons/source-python/data/source-python/entity_output/insurgency/CBaseEntityOutput.ini b/addons/source-python/data/source-python/entity_output/insurgency/CBaseEntityOutput.ini
new file mode 100644
index 000000000..6b7ccfb58
--- /dev/null
+++ b/addons/source-python/data/source-python/entity_output/insurgency/CBaseEntityOutput.ini
@@ -0,0 +1,10 @@
+# ../data/source-python/entity_output/insurgency/CBaseEntityOutput.ini
+
+binary = server
+
+[function]
+ [[fire_output]]
+ identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f
+ identifier_windows = 55 8B EC 83 EC 20 53 8B C1
+ arguments_linux = POINTER, POINTER, POINTER, FLOAT
+ arguments_windows = INT, INT, INT, INT, POINTER, POINTER, POINTER, FLOAT
\ No newline at end of file
diff --git a/addons/source-python/data/source-python/memory/insurgency/global_pointers.ini b/addons/source-python/data/source-python/memory/insurgency/global_pointers.ini
new file mode 100644
index 000000000..680d574a2
--- /dev/null
+++ b/addons/source-python/data/source-python/memory/insurgency/global_pointers.ini
@@ -0,0 +1,33 @@
+# ../data/source-python/memory/insurgency/global_pointers.ini
+
+[CEntityFactoryDictionary]
+binary = server
+identifier_linux = _ZZ23EntityFactoryDictionaryvE15s_EntityFactory
+identifier_windows = A1 2A 2A 2A 2A A8 01 75 2A 83 C8 01 B9 2A 2A 2A 2A A3 2A 2A 2A 2A
+offset_windows = 13
+level_windows = 1
+
+[CGlobalEntityList]
+binary = server
+identifier_linux = gEntList
+# CFuncElevator::InputMoveToFloor
+identifier_windows = 55 8B EC 57 8B F9 80 BF 30 04 00 00 00
+offset_windows = 140
+level_windows = 1
+
+[IServer]
+binary = bin/engine
+identifier_linux = sv
+# CVEngineServer::LightStyle
+identifier_windows = 55 8B EC 53 8B 5D 0C 56 57 85 DB
+offset_windows = 27
+level_windows = 1
+
+[CBaseTempEntity]
+binary = server
+identifier_linux = _ZN15CBaseTempEntity15s_pTempEntitiesE
+# CBaseTempEntity::PrecacheTempEnts
+identifier_windows = 56 8B 35 2A 2A 2A 2A 85 F6 74 2A EB 2A
+offset_windows = 3
+level_windows = 2
+level_linux = 1
diff --git a/addons/source-python/docs/source-python/source/developing/events/insurgency.rst b/addons/source-python/docs/source-python/source/developing/events/insurgency.rst
new file mode 100644
index 000000000..4cf6cca95
--- /dev/null
+++ b/addons/source-python/docs/source-python/source/developing/events/insurgency.rst
@@ -0,0 +1,1596 @@
+Insurgency
+==========
+
+This is a summary of all known Insurgency events.
+
+
+achievement_earned
+------------------
+
+=========== ==================================================== =======
+Name Description Type
+=========== ==================================================== =======
+achievement short
+player byte
+=========== ==================================================== =======
+
+
+achievement_info_loaded
+-----------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+artillery_called
+----------------
+
+================= ==================================================== =======
+Name Description Type
+================= ==================================================== =======
+lethal bool
+radio_player short
+requesting_player short
+target_x float
+target_y float
+target_z float
+team short
+type string
+================= ==================================================== =======
+
+
+artillery_failed
+----------------
+
+================= ==================================================== =======
+Name Description Type
+================= ==================================================== =======
+lethal bool
+radio_player short
+reason string
+requesting_player short
+team short
+type string
+================= ==================================================== =======
+
+
+artillery_requested
+-------------------
+
+================= ==================================================== =======
+Name Description Type
+================= ==================================================== =======
+lethal bool
+radio_player short
+requesting_player short
+target_x float
+target_y float
+target_z float
+team short
+type string
+================= ==================================================== =======
+
+
+break_breakable
+---------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entindex long
+material byte
+userid short
+======== ==================================================== =======
+
+
+break_prop
+----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entindex long
+userid short
+======== ==================================================== =======
+
+
+client_disconnect
+-----------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+controlpoint_captured
+---------------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+cappers string
+cp byte
+cpname string
+oldteam byte
+priority short
+team byte
+======== ==================================================== =======
+
+
+controlpoint_endtouch
+---------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+area byte
+owner short
+player short
+team short
+====== ==================================================== =======
+
+
+controlpoint_initialized
+------------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+controlpoint_neutralized
+------------------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+cappers string
+cp byte
+cpname string
+oldteam byte
+priority short
+team byte
+======== ==================================================== =======
+
+
+controlpoint_regroup_available
+------------------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+cp byte
+team short
+==== ==================================================== =======
+
+
+controlpoint_regroup_triggered
+------------------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+cp byte
+player short
+team short
+====== ==================================================== =======
+
+
+controlpoint_starttouch
+-----------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+area byte
+object short
+owner short
+player short
+team short
+type short
+====== ==================================================== =======
+
+
+door_moving
+-----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entindex long
+userid short
+======== ==================================================== =======
+
+
+enter_spawnzone
+---------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+entity_killed
+-------------
+
+================== ==================================================== =======
+Name Description Type
+================== ==================================================== =======
+damagebits long
+entindex_attacker long
+entindex_inflictor long
+entindex_killed long
+================== ==================================================== =======
+
+
+entity_visible
+--------------
+
+========== ==================================================== =======
+Name Description Type
+========== ==================================================== =======
+classname string
+entityname string
+subject short
+userid short
+========== ==================================================== =======
+
+
+exit_spawnzone
+--------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+flag_captured
+-------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+cp short
+priority short
+userid short
+======== ==================================================== =======
+
+
+flag_drop
+---------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+priority short
+userid short
+======== ==================================================== =======
+
+
+flag_pickup
+-----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+priority short
+userid short
+======== ==================================================== =======
+
+
+flag_reset
+----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+priority short
+team short
+======== ==================================================== =======
+
+
+flag_returned
+-------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+priority short
+userid short
+======== ==================================================== =======
+
+
+freezecam_started
+-----------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+game_end
+--------
+
+=========== ==================================================== =======
+Name Description Type
+=========== ==================================================== =======
+team1_score short
+team2_score short
+winner byte
+=========== ==================================================== =======
+
+
+game_init
+---------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+game_newmap
+-----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+mapname string
+======= ==================================================== =======
+
+
+game_start
+----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+priority short
+======== ==================================================== =======
+
+
+game_teams_switched
+-------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+gameinstructor_draw
+-------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+gameinstructor_nodraw
+---------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+grenade_detonate
+----------------
+
+=============== ==================================================== =======
+Name Description Type
+=============== ==================================================== =======
+effectedEnemies short
+entityid long
+id short
+userid short
+x float
+y float
+z float
+=============== ==================================================== =======
+
+
+grenade_thrown
+--------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entityid long
+id short
+userid short
+======== ==================================================== =======
+
+
+hide_freezepanel
+----------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+hltv_cameraman
+--------------
+
+===== ==================================================== =======
+Name Description Type
+===== ==================================================== =======
+index short
+===== ==================================================== =======
+
+
+hltv_changed_mode
+-----------------
+
+========== ==================================================== =======
+Name Description Type
+========== ==================================================== =======
+newmode long
+obs_target long
+oldmode long
+========== ==================================================== =======
+
+
+hltv_chase
+----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+distance short
+inertia byte
+ineye byte
+phi short
+target1 short
+target2 short
+theta short
+======== ==================================================== =======
+
+
+hltv_chat
+---------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+text string
+==== ==================================================== =======
+
+
+hltv_fixed
+----------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+fov float
+offset short
+phi short
+posx long
+posy long
+posz long
+target short
+theta short
+====== ==================================================== =======
+
+
+hltv_message
+------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+text string
+==== ==================================================== =======
+
+
+hltv_rank_camera
+----------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+index byte
+rank float
+target short
+====== ==================================================== =======
+
+
+hltv_rank_entity
+----------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+index short
+rank float
+target short
+====== ==================================================== =======
+
+
+hltv_status
+-----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+clients long
+master string
+proxies short
+slots long
+======= ==================================================== =======
+
+
+hltv_title
+----------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+text string
+==== ==================================================== =======
+
+
+hostname_changed
+----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+hostname string
+======== ==================================================== =======
+
+
+instructor_ai_difficulty
+------------------------
+
+============= ==================================================== =======
+Name Description Type
+============= ==================================================== =======
+ai_win bool
+rounds_failed byte
+============= ==================================================== =======
+
+
+instructor_server_hint_create
+-----------------------------
+
+======================== ==================================================== =======
+Name Description Type
+======================== ==================================================== =======
+hint_activator_caption string
+hint_activator_userid short
+hint_allow_nodraw_target bool
+hint_binding string
+hint_caption string
+hint_color string
+hint_flags long
+hint_forcecaption bool
+hint_gamepad_binding string
+hint_icon_offscreen string
+hint_icon_offset float
+hint_icon_onscreen string
+hint_local_player_only bool
+hint_name string
+hint_nooffscreen bool
+hint_range float
+hint_replace_key string
+hint_target long
+hint_timeout short
+======================== ==================================================== =======
+
+
+instructor_server_hint_stop
+---------------------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+hint_name string
+========= ==================================================== =======
+
+
+inventory_close
+---------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+inventory_open
+--------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+map_transition
+--------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+missile_detonate
+----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entityid long
+id short
+userid short
+x float
+y float
+z float
+======== ==================================================== =======
+
+
+missile_launched
+----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entityid long
+id short
+userid short
+======== ==================================================== =======
+
+
+nav_blocked
+-----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+area long
+blocked bool
+======= ==================================================== =======
+
+
+nav_generate
+------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+object_destroyed
+----------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+assister byte
+attacker byte
+attackerteam byte
+cp short
+index short
+team byte
+type byte
+weapon string
+weaponid short
+============ ==================================================== =======
+
+
+player_activate
+---------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_avenged_teammate
+-----------------------
+
+================= ==================================================== =======
+Name Description Type
+================= ==================================================== =======
+avenged_player_id short
+avenger_id short
+================= ==================================================== =======
+
+
+player_blind
+------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_changename
+-----------------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+newname string
+oldname string
+userid short
+======= ==================================================== =======
+
+
+player_connect
+--------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+address string
+bot short
+index byte
+name string
+networkid string
+userid short
+========= ==================================================== =======
+
+
+player_connect_full
+-------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+index byte
+userid short
+====== ==================================================== =======
+
+
+player_death
+------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+assister short
+attacker short
+attackerteam short
+customkill short
+damagebits long
+deathflags short
+lives short
+priority short
+team short
+userid short
+weapon string
+weaponid short
+x float
+y float
+z float
+============ ==================================================== =======
+
+
+player_decal
+------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_disconnect
+-----------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+bot short
+name string
+networkid string
+reason string
+userid short
+========= ==================================================== =======
+
+
+player_drop
+-----------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+entity short
+userid short
+====== ==================================================== =======
+
+
+player_falldamage
+-----------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+damage float
+userid short
+====== ==================================================== =======
+
+
+player_first_spawn
+------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_footstep
+---------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_hintmessage
+------------------
+
+=========== ==================================================== =======
+Name Description Type
+=========== ==================================================== =======
+hintmessage string
+=========== ==================================================== =======
+
+
+player_hurt
+-----------
+
+========== ==================================================== =======
+Name Description Type
+========== ==================================================== =======
+attacker short
+damagebits long
+dmg_health short
+health byte
+hitgroup short
+priority short
+userid short
+weapon string
+weaponid short
+========== ==================================================== =======
+
+
+player_info
+-----------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+bot bool
+index byte
+name string
+networkid string
+userid short
+========= ==================================================== =======
+
+
+player_jump
+-----------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+player_pick_squad
+-----------------
+
+============== ==================================================== =======
+Name Description Type
+============== ==================================================== =======
+class_template string
+squad byte
+squad_slot byte
+userid short
+============== ==================================================== =======
+
+
+player_receive_supply
+---------------------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+ammount short
+userid short
+======= ==================================================== =======
+
+
+player_say
+----------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+text string
+userid short
+====== ==================================================== =======
+
+
+player_spawn
+------------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+teamnum short
+userid short
+======= ==================================================== =======
+
+
+player_stats_updated
+--------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+player_suppressed
+-----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+attacker short
+victim short
+======== ==================================================== =======
+
+
+player_team
+-----------
+
+========== ==================================================== =======
+Name Description Type
+========== ==================================================== =======
+autoteam bool
+disconnect bool
+isbot bool
+oldteam byte
+silent bool
+team byte
+userid short
+========== ==================================================== =======
+
+
+player_use
+----------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+entity short
+userid short
+====== ==================================================== =======
+
+
+radio_requested
+---------------
+
+================= ==================================================== =======
+Name Description Type
+================= ==================================================== =======
+requesting_player short
+team short
+================= ==================================================== =======
+
+
+ragdoll_dissolved
+-----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entindex long
+======== ==================================================== =======
+
+
+rank_mgr_ranks_calculated
+-------------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+read_game_titledata
+-------------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+controllerId short
+============ ==================================================== =======
+
+
+reset_game_titledata
+--------------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+controllerId short
+============ ==================================================== =======
+
+
+round_begin
+-----------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+round_end
+---------
+
+============== ==================================================== =======
+Name Description Type
+============== ==================================================== =======
+message string
+message_string string
+reason byte
+winner byte
+============== ==================================================== =======
+
+
+round_freeze_end
+----------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+round_level_advanced
+--------------------
+
+===== ==================================================== =======
+Name Description Type
+===== ==================================================== =======
+level short
+===== ==================================================== =======
+
+
+round_restart
+-------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+round_start
+-----------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+gametype short
+lives short
+priority short
+timelimit short
+========= ==================================================== =======
+
+
+round_start_pre_entity
+----------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+round_timer_changed
+-------------------
+
+===== ==================================================== =======
+Name Description Type
+===== ==================================================== =======
+delta float
+===== ==================================================== =======
+
+
+server_addban
+-------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+by string
+duration string
+ip string
+kicked bool
+name string
+networkid string
+userid short
+========= ==================================================== =======
+
+
+server_cvar
+-----------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+cvarname string
+cvarvalue string
+========= ==================================================== =======
+
+
+server_message
+--------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+text string
+==== ==================================================== =======
+
+
+server_pre_shutdown
+-------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+reason string
+====== ==================================================== =======
+
+
+server_removeban
+----------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+by string
+ip string
+networkid string
+========= ==================================================== =======
+
+
+server_shutdown
+---------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+reason string
+====== ==================================================== =======
+
+
+server_spawn
+------------
+
+========== ==================================================== =======
+Name Description Type
+========== ==================================================== =======
+address string
+dedicated bool
+game string
+hostname string
+mapname string
+maxplayers long
+os string
+password bool
+port short
+========== ==================================================== =======
+
+
+set_instructor_group_enabled
+----------------------------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+enabled short
+group string
+======= ==================================================== =======
+
+
+show_freezepanel
+----------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+damage_given short
+damage_taken short
+hits_given short
+hits_taken short
+killer short
+victim short
+============ ==================================================== =======
+
+
+smoke_grenade_expire
+--------------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+entityid long
+id short
+userid short
+x float
+y float
+z float
+======== ==================================================== =======
+
+
+spec_mode_updated
+-----------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+spec_target_updated
+-------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+stat_leaderboard_updated
+------------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+stat_local_load_finish
+----------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+stat_local_load_start
+---------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+stat_summary_updated
+--------------------
+
+=========== ==================================================== =======
+Name Description Type
+=========== ==================================================== =======
+localplayer bool
+=========== ==================================================== =======
+
+
+teamplay_broadcast_audio
+------------------------
+
+===== ==================================================== =======
+Name Description Type
+===== ==================================================== =======
+sound string
+team byte
+===== ==================================================== =======
+
+
+theater_loaded
+--------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+time_class
+----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+class short
+seconds float
+userid short
+======= ==================================================== =======
+
+
+time_weapon
+-----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+seconds float
+userid short
+weapon short
+======= ==================================================== =======
+
+
+training_timer
+--------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+duration float
+======== ==================================================== =======
+
+
+user_data_downloaded
+--------------------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+==== ==================================================== =======
+
+
+vote_cast
+---------
+
+=========== ==================================================== =======
+Name Description Type
+=========== ==================================================== =======
+entityid long
+team short
+vote_option byte
+=========== ==================================================== =======
+
+
+vote_changed
+------------
+
+============== ==================================================== =======
+Name Description Type
+============== ==================================================== =======
+potentialVotes byte
+vote_option1 byte
+vote_option2 byte
+vote_option3 byte
+vote_option4 byte
+vote_option5 byte
+============== ==================================================== =======
+
+
+vote_failed
+-----------
+
+==== ==================================================== =======
+Name Description Type
+==== ==================================================== =======
+team byte
+==== ==================================================== =======
+
+
+vote_options
+------------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+count byte
+option1 string
+option2 string
+option3 string
+option4 string
+option5 string
+======= ==================================================== =======
+
+
+vote_passed
+-----------
+
+======= ==================================================== =======
+Name Description Type
+======= ==================================================== =======
+details string
+param1 string
+team byte
+======= ==================================================== =======
+
+
+vote_started
+------------
+
+========= ==================================================== =======
+Name Description Type
+========= ==================================================== =======
+initiator long
+issue string
+param1 string
+team byte
+========= ==================================================== =======
+
+
+weapon_deploy
+-------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_fire
+-----------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+shots byte
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_fire_on_empty
+--------------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+weapon string
+====== ==================================================== =======
+
+
+weapon_firemode
+---------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+firemode byte
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_focus_enter
+------------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_focus_exit
+-----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_holster
+--------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_ironsight
+----------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_lower_sight
+------------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_outofammo
+----------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+weapon_pickup
+-------------
+
+======== ==================================================== =======
+Name Description Type
+======== ==================================================== =======
+userid short
+weaponid short
+======== ==================================================== =======
+
+
+weapon_reload
+-------------
+
+====== ==================================================== =======
+Name Description Type
+====== ==================================================== =======
+userid short
+====== ==================================================== =======
+
+
+write_game_titledata
+--------------------
+
+============ ==================================================== =======
+Name Description Type
+============ ==================================================== =======
+controllerId short
+============ ==================================================== =======
diff --git a/addons/source-python/docs/source-python/source/developing/module_tutorials/listeners.rst b/addons/source-python/docs/source-python/source/developing/module_tutorials/listeners.rst
index ce79c9bb1..d79b3ea44 100644
--- a/addons/source-python/docs/source-python/source/developing/module_tutorials/listeners.rst
+++ b/addons/source-python/docs/source-python/source/developing/module_tutorials/listeners.rst
@@ -111,7 +111,7 @@ Called when a combined model gets precached.
def on_combiner_precache(cache_data_type, model_handle):
pass
-.. note:: This listener only gets called in CS:GO.
+.. note:: This listener only gets called in CS:GO and Insurgency.
OnConVarChanged
diff --git a/addons/source-python/packages/source-python/listeners/__init__.py b/addons/source-python/packages/source-python/listeners/__init__.py
index c7c19e220..a2f694f0d 100644
--- a/addons/source-python/packages/source-python/listeners/__init__.py
+++ b/addons/source-python/packages/source-python/listeners/__init__.py
@@ -587,7 +587,7 @@ def _pre_fire_output(args):
# Get the function name to hook...
if SOURCE_ENGINE in ('bms', 'orangebox', 'gmod'):
_hibernation_function_name = 'SetServerHibernation'
-elif SOURCE_ENGINE in ('blade', 'csgo', 'l4d2'):
+elif SOURCE_ENGINE in ('blade', 'csgo', 'l4d2', 'insurgency'):
_hibernation_function_name = 'ServerHibernationUpdate'
else:
# To remind us to add newly supported engines...
diff --git a/src/core/modules/cvars/insurgency/cvars.h b/src/core/modules/cvars/insurgency/cvars.h
new file mode 100644
index 000000000..813d1fe23
--- /dev/null
+++ b/src/core/modules/cvars/insurgency/cvars.h
@@ -0,0 +1,50 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _CVARS_INSURGENCY_H
+#define _CVARS_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "icvar.h"
+
+
+//-----------------------------------------------------------------------------
+// ICVar extension class.
+//-----------------------------------------------------------------------------
+class ICVarExt
+{
+public:
+ static ConCommandBase* GetCommands(ICvar* pCvar)
+ {
+ ICvar::Iterator iter(pCvar);
+ iter.SetFirst();
+ return iter.Get();
+ };
+};
+
+#endif // _CVARS_INSURGENCY_H
diff --git a/src/core/modules/effects/insurgency/effects_base_wrap.h b/src/core/modules/effects/insurgency/effects_base_wrap.h
new file mode 100644
index 000000000..4618f1e27
--- /dev/null
+++ b/src/core/modules/effects/insurgency/effects_base_wrap.h
@@ -0,0 +1,54 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2012-2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _EFFECTS_BASE_WRAP_INSURGENCY_H
+#define _EFFECTS_BASE_WRAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "game/shared/itempents.h"
+#include "toolframework/itoolentity.h"
+#include "game/server/basetempentity.h"
+
+
+//-----------------------------------------------------------------------------
+// External variables.
+//-----------------------------------------------------------------------------
+extern IServerTools *servertools;
+
+
+//-----------------------------------------------------------------------------
+// Exports CBaseTempEntity.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_temp_entity(T _base, U TempEntity)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+#endif // _EFFECTS_BASE_WRAP_INSURGENCY_H
diff --git a/src/core/modules/engines/insurgency/engines.h b/src/core/modules/engines/insurgency/engines.h
new file mode 100644
index 000000000..2557e5627
--- /dev/null
+++ b/src/core/modules/engines/insurgency/engines.h
@@ -0,0 +1,90 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENGINES_INSURGENCY_H
+#define _ENGINES_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "engine/IEngineSound.h"
+
+
+//-----------------------------------------------------------------------------
+// IVEngineServer extension class.
+//-----------------------------------------------------------------------------
+class GameIVEngineServerExt
+{
+public:
+ static bool IsMapValid(IVEngineServer* pServer, const char* map_name)
+ {
+ return pServer->IsMapValid(map_name);
+ }
+};
+
+
+//-----------------------------------------------------------------------------
+// IEngineSound extension class.
+//-----------------------------------------------------------------------------
+class IEngineSoundExt
+{
+public:
+ static void EmitSound(IEngineSound* pEngineSound, IRecipientFilter& filter, int iEntIndex, int iChannel, const char *pSample,
+ float flVolume, float flAttenuation, int iFlags, int iPitch, const Vector *pOrigin, const Vector *pDirection,
+ tuple origins, bool bUpdatePositions, float soundtime, int speakerentity)
+ {
+ CUtlVector *pUtlVecOrigins = NULL;
+ CUtlVector vecOrigins;
+ if (len(origins) > 0)
+ {
+ pUtlVecOrigins = &vecOrigins;
+ for(int i=0; i < len(origins); i++)
+ {
+ vecOrigins.AddToTail(extract(origins[i]));
+ }
+ }
+
+ pEngineSound->EmitSound(filter, iEntIndex, iChannel, pSample, -1, pSample, flVolume, flAttenuation, 0, iFlags, iPitch, pOrigin, pDirection,
+ pUtlVecOrigins, bUpdatePositions, soundtime, speakerentity);
+ }
+
+ static void StopSound(IEngineSound* pEngineSound, int iEntIndex, int iChannel, const char *pSample)
+ {
+ pEngineSound->StopSound(iEntIndex, iChannel, pSample, -1);
+ }
+};
+
+
+//---------------------------------------------------------------------------------
+// IEngineTrace
+//---------------------------------------------------------------------------------
+inline int GetPointContents(const Vector &vecAbsPosition, IHandleEntity** ppEntity)
+{
+ return enginetrace->GetPointContents(vecAbsPosition, MASK_ALL, ppEntity);
+}
+
+
+#endif // _ENGINES_INSURGENCY_H
diff --git a/src/core/modules/engines/insurgency/engines_wrap.h b/src/core/modules/engines/insurgency/engines_wrap.h
new file mode 100644
index 000000000..6884b92b4
--- /dev/null
+++ b/src/core/modules/engines/insurgency/engines_wrap.h
@@ -0,0 +1,115 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENGINES_WRAP_INSURGENCY_H
+#define _ENGINES_WRAP_INSURGENCY_H
+
+//---------------------------------------------------------------------------------
+// Includes.
+//---------------------------------------------------------------------------------
+#include "eiface.h"
+#include "engine/IEngineSound.h"
+#include "engine/IEngineTrace.h"
+
+
+//---------------------------------------------------------------------------------
+// External variables.
+//---------------------------------------------------------------------------------
+extern IEngineTrace* enginetrace;
+
+
+//---------------------------------------------------------------------------------
+// IVEngineServer visitor function.
+//---------------------------------------------------------------------------------
+template
+T IVEngineServer_Visitor(T cls)
+{
+ cls
+ .add_property("game_server_steamid",
+ make_function(
+ &IVEngineServer::GetGameServerSteamID,
+ reference_existing_object_policy()
+ ),
+ "Returns the SteamID of the game server."
+ )
+
+ .add_property("server_version",
+ &IVEngineServer::GetServerVersion,
+ "Returns the version of the server."
+ )
+
+ .def("create_fake_client_ex",
+ &IVEngineServer::CreateFakeClientEx,
+ reference_existing_object_policy()
+ )
+
+ .add_property("server",
+ make_function(
+ &IVEngineServer::GetIServer,
+ reference_existing_object_policy()
+ )
+ )
+
+ .add_property("achievement_mgr",
+ make_function(
+ &IVEngineServer::GetAchievementMgr,
+ reference_existing_object_policy()
+ ),
+ &IVEngineServer::SetAchievementMgr,
+ "Return the achievement manager."
+ )
+ ;
+
+ return cls;
+}
+
+
+//---------------------------------------------------------------------------------
+// IEngineSound visitor function.
+//---------------------------------------------------------------------------------
+template
+T IEngineSound_Visitor(T cls)
+{
+ return cls;
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports IServerGameDLL.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_server_game_dll(T _server, U ServerGameDLL)
+{
+ // Methods...
+ ServerGameDLL.def("server_hibernation_update", &IServerGameDLL::ServerHibernationUpdate);
+
+ // Class info...
+ BEGIN_CLASS_INFO(IServerGameDLL)
+ FUNCTION_INFO(ServerHibernationUpdate)
+ END_CLASS_INFO()
+}
+
+#endif // _ENGINES_WRAP_INSURGENCY_H
diff --git a/src/core/modules/entities/blade/entities_constants_wrap.h b/src/core/modules/entities/blade/entities_constants_wrap.h
index 27c4c72b5..2fd4551b0 100644
--- a/src/core/modules/entities/blade/entities_constants_wrap.h
+++ b/src/core/modules/entities/blade/entities_constants_wrap.h
@@ -43,6 +43,16 @@ void export_engine_specific_damage_types(T _constants)
}
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ // Nothing specific to Blade...
+}
+
+
//-----------------------------------------------------------------------------
// Exports SolidFlags_t.
//-----------------------------------------------------------------------------
diff --git a/src/core/modules/entities/bms/entities_constants_wrap.h b/src/core/modules/entities/bms/entities_constants_wrap.h
index bd1492c3a..0c2bb841a 100644
--- a/src/core/modules/entities/bms/entities_constants_wrap.h
+++ b/src/core/modules/entities/bms/entities_constants_wrap.h
@@ -43,6 +43,16 @@ void export_engine_specific_damage_types(T _constants)
}
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ // Nothing specific to BMS...
+}
+
+
//-----------------------------------------------------------------------------
// Exports SolidFlags_t.
//-----------------------------------------------------------------------------
diff --git a/src/core/modules/entities/csgo/entities_constants_wrap.h b/src/core/modules/entities/csgo/entities_constants_wrap.h
index 9eed272e9..f90e29548 100644
--- a/src/core/modules/entities/csgo/entities_constants_wrap.h
+++ b/src/core/modules/entities/csgo/entities_constants_wrap.h
@@ -44,6 +44,16 @@ void export_engine_specific_damage_types(T _constants)
}
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ // Nothing specific to CS:GO...
+}
+
+
//-----------------------------------------------------------------------------
// Exports SolidFlags_t.
//-----------------------------------------------------------------------------
diff --git a/src/core/modules/entities/entities_constants_wrap.cpp b/src/core/modules/entities/entities_constants_wrap.cpp
index 4a5147cfc..50df7f003 100644
--- a/src/core/modules/entities/entities_constants_wrap.cpp
+++ b/src/core/modules/entities/entities_constants_wrap.cpp
@@ -159,6 +159,12 @@ void export_entity_states(scope _constants)
_constants.attr("FL_DISSOLVING") = FL_DISSOLVING;
_constants.attr("FL_TRANSRAGDOLL") = FL_TRANSRAGDOLL;
_constants.attr("FL_UNBLOCKABLE_BY_PLAYER") = FL_UNBLOCKABLE_BY_PLAYER;
+
+ // Insurgency specific constants...
+ _constants.attr("FL_FREEZING") = -LONG_MAX;
+
+ // Engine specific stuff...
+ export_engine_specific_entity_state_flags(_constants);
}
diff --git a/src/core/modules/entities/insurgency/entities.h b/src/core/modules/entities/insurgency/entities.h
new file mode 100644
index 000000000..b93ca8c83
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities.h
@@ -0,0 +1,117 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_INSURGENCY_H
+#define _ENTITIES_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "dt_send.h"
+#include "server_class.h"
+#include "game/shared/ehandle.h"
+#include "isaverestore.h"
+#include "datamap.h"
+#include "game/shared/takedamageinfo.h"
+
+
+//-----------------------------------------------------------------------------
+// CTakeDamageInfo wrapper class.
+//-----------------------------------------------------------------------------
+class TakeDamageInfoWrapper: public TakeDamageInfoBaseWrapper
+{
+public:
+ int get_penetrated()
+ {
+ return m_iObjectsPenetrated;
+ }
+
+ void set_penetrated(int iPenetrated)
+ {
+ m_iObjectsPenetrated = iPenetrated;
+ }
+
+ uint32 get_bullet()
+ {
+ return m_uiBulletID;
+ }
+
+ void set_bullet(uint32 uiBullet)
+ {
+ m_uiBulletID = uiBullet;
+ }
+
+ uint8 get_recoil()
+ {
+ return m_uiRecoilIndex;
+ }
+
+ void set_recoil(uint8 uiRecoil)
+ {
+ m_uiRecoilIndex = uiRecoil;
+ }
+};
+
+
+//-----------------------------------------------------------------------------
+// CTakeDamageInfo extension class.
+//-----------------------------------------------------------------------------
+class TakeDamageInfoExt
+{
+public:
+ static int get_penetrated(CTakeDamageInfo *pTakeDamageInfo)
+ {
+ return ((TakeDamageInfoWrapper *)pTakeDamageInfo)->get_penetrated();
+ }
+
+ static void set_penetrated(CTakeDamageInfo *pTakeDamageInfo, int iPenetrated)
+ {
+ ((TakeDamageInfoWrapper *)pTakeDamageInfo)->set_penetrated(iPenetrated);
+ }
+
+ static uint32 get_bullet(CTakeDamageInfo *pTakeDamageInfo)
+ {
+ return ((TakeDamageInfoWrapper *)pTakeDamageInfo)->get_bullet();
+ }
+
+ static void set_bullet(CTakeDamageInfo *pTakeDamageInfo, uint32 uiBullet)
+ {
+ ((TakeDamageInfoWrapper *)pTakeDamageInfo)->set_bullet(uiBullet);
+ }
+
+ static uint8 get_recoil(CTakeDamageInfo *pTakeDamageInfo)
+ {
+ return ((TakeDamageInfoWrapper *)pTakeDamageInfo)->get_recoil();
+ }
+
+ static void set_recoil(CTakeDamageInfo *pTakeDamageInfo, uint8 uiRecoil)
+ {
+ ((TakeDamageInfoWrapper *)pTakeDamageInfo)->set_recoil(uiRecoil);
+ }
+};
+
+
+#endif // _ENTITIES_INSURGENCY_H
diff --git a/src/core/modules/entities/insurgency/entities_constants_wrap.h b/src/core/modules/entities/insurgency/entities_constants_wrap.h
new file mode 100644
index 000000000..58ba73879
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_constants_wrap.h
@@ -0,0 +1,110 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_CONSTANTS_INSURGENCY_WRAP_H
+#define _ENTITIES_CONSTANTS_INSURGENCY_WRAP_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "utilities/wrap_macros.h"
+
+
+//-----------------------------------------------------------------------------
+// Exports damage types.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_damage_types(T _constants)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ _constants.attr("FL_FREEZING") = FL_FREEZING;
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports SolidFlags_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_solid_flags(T _constants, U SolidFlags)
+{
+ SolidFlags.value("TRIGGER_TOUCH_PLAYER", FSOLID_TRIGGER_TOUCH_PLAYER);
+ SolidFlags.value("NOT_MOVEABLE", FSOLID_NOT_MOVEABLE);
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports entity effects.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_effects(T _constants)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports RenderMode_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_render_mode(T _constants, U RenderEffects)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports RenderFx_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_render_effects(T _constants, U RenderEffects)
+{
+ RenderEffects.value("FADE_OUT", kRenderFxFadeOut);
+ RenderEffects.value("FADE_IN", kRenderFxFadeIn);
+ RenderEffects.value("PULSE_FAST_WIDER", kRenderFxPulseFastWider);
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports Collision_Group_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_collision_group(T _constants, U CollisionGroup)
+{
+ CollisionGroup.value("PZ_CLIP", COLLISION_GROUP_PZ_CLIP);
+ CollisionGroup.value("DEBRIS_BLOCK_PROJECTILE", COLLISION_GROUP_DEBRIS_BLOCK_PROJECTILE);
+}
+
+
+#endif // _ENTITIES_CONSTANTS_INSURGENCY_WRAP_H
diff --git a/src/core/modules/entities/insurgency/entities_datamaps.h b/src/core/modules/entities/insurgency/entities_datamaps.h
new file mode 100644
index 000000000..ba0ac5930
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_datamaps.h
@@ -0,0 +1,59 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_DATAMAP_INSURGENCY_H
+#define _ENTITIES_DATAMAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "datamap.h"
+
+
+//-----------------------------------------------------------------------------
+// typedescription_t extension class.
+//-----------------------------------------------------------------------------
+class TypeDescriptionExt
+{
+public:
+ static int get_offset(const typedescription_t& pTypeDesc)
+ {
+ return pTypeDesc.fieldOffset;
+ }
+
+ static int get_flat_offset(const typedescription_t& pTypeDesc)
+ {
+ return pTypeDesc.flatOffset[TD_OFFSET_NORMAL];
+ }
+
+ static int get_packed_offset(const typedescription_t& pTypeDesc)
+ {
+ return pTypeDesc.flatOffset[TD_OFFSET_PACKED];
+ }
+};
+
+
+#endif // _ENTITIES_DATAMAP_INSURGENCY_WRAP_H
diff --git a/src/core/modules/entities/insurgency/entities_datamaps_wrap.h b/src/core/modules/entities/insurgency/entities_datamaps_wrap.h
new file mode 100644
index 000000000..e81437b1a
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_datamaps_wrap.h
@@ -0,0 +1,72 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_DATAMAPS_INSURGENCY_H
+#define _ENTITIES_DATAMAPS_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "entities_datamaps.h"
+
+
+//-----------------------------------------------------------------------------
+// Exports datamap_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_datamap(T _datamaps, U DataMap)
+{
+ DataMap.def_readonly("packed_size", &datamap_t::m_nPackedSize);
+
+ // TODO: Expose optimized_datamap_t...
+ // DataMap.def_readonly("optimized_datamap", &datamap_t::m_pOptimizedDataMap);
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports typedescription_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_type_description(T _datamaps, U TypeDescription)
+{
+ TypeDescription.add_property("flat_offset", &TypeDescriptionExt::get_flat_offset);
+ TypeDescription.add_property("packed_offset", &TypeDescriptionExt::get_packed_offset);
+ TypeDescription.def_readonly("flat_group", &typedescription_t::flatGroup);
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports fieldtype_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_field_types(T _datamaps, U FieldTypes)
+{
+ FieldTypes.value("INTEGER64", FIELD_INTEGER64);
+ FieldTypes.value("VECTOR4D", FIELD_VECTOR4D);
+}
+
+
+#endif // _ENTITIES_DATAMAPS_INSURGENCY_H
diff --git a/src/core/modules/entities/insurgency/entities_factories_wrap.h b/src/core/modules/entities/insurgency/entities_factories_wrap.h
new file mode 100644
index 000000000..6e508a4d1
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_factories_wrap.h
@@ -0,0 +1,55 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_FACTORIES_WRAP_INSURGENCY_H
+#define _ENTITIES_FACTORIES_WRAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "utilities/wrap_macros.h"
+#include "toolframework/itoolentity.h"
+#include "utilities/conversions.h"
+#include "modules/memory/memory_tools.h"
+
+
+//-----------------------------------------------------------------------------
+// External variables.
+//-----------------------------------------------------------------------------
+extern IServerTools *servertools;
+
+
+//-----------------------------------------------------------------------------
+// Exports CEntityFactoryDictionary.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_factory_dictionary(T _factories, U EntityFactoryDictionary)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+#endif // _ENTITIES_FACTORIES_WRAP_INSURGENCY_H
diff --git a/src/core/modules/entities/insurgency/entities_props.h b/src/core/modules/entities/insurgency/entities_props.h
new file mode 100644
index 000000000..27317f4aa
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_props.h
@@ -0,0 +1,49 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_PROPS_INSURGENCY_H
+#define _ENTITIES_PROPS_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "server_class.h"
+
+
+//-----------------------------------------------------------------------------
+// ServerClass extension class.
+//-----------------------------------------------------------------------------
+class ServerClassExt
+{
+public:
+ static const char *get_name(ServerClass *pServerClass)
+ {
+ return (const char *)pServerClass->m_pNetworkName;
+ }
+};
+
+
+#endif // _ENTITIES_PROPS_INSURGENCY_H
diff --git a/src/core/modules/entities/insurgency/entities_props_wrap.h b/src/core/modules/entities/insurgency/entities_props_wrap.h
new file mode 100644
index 000000000..b8bbb3b83
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_props_wrap.h
@@ -0,0 +1,80 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_PROPS_WRAP_INSURGENCY_H
+#define _ENTITIES_PROPS_WRAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "dt_common.h"
+#include "dt_send.h"
+#include "entities_props.h"
+
+
+//-----------------------------------------------------------------------------
+// Expose ServerClass.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_server_class(T _props, U ServerClass_)
+{
+ ServerClass_.add_property("name", &ServerClassExt::get_name);
+}
+
+
+//-----------------------------------------------------------------------------
+// Expose SendProp.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_send_prop(T _props, U SendProp_)
+{
+ SendProp_.add_property("priority", &SendProp::GetPriority);
+ SendProp_.def("get_priority", &SendProp::GetPriority);
+}
+
+
+//-----------------------------------------------------------------------------
+// Expose SendPropType.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_send_prop_types(T _props, U SendPropType_)
+{
+ SendPropType_.value("INT64", DPT_Int64);
+}
+
+
+//-----------------------------------------------------------------------------
+// Expose SendPropVariant.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_send_prop_variant(T _props, U SendPropVariant)
+{
+ SendPropVariant.def("get_int64", &SendPropVariantExt::get_typed_value);
+ SendPropVariant.def("get_int64", &SendPropVariantExt::get_typed_value);
+}
+
+
+#endif // _ENTITIES_PROPS_WRAP_INSURGENCY_H
diff --git a/src/core/modules/entities/insurgency/entities_wrap.h b/src/core/modules/entities/insurgency/entities_wrap.h
new file mode 100644
index 000000000..217f87c16
--- /dev/null
+++ b/src/core/modules/entities/insurgency/entities_wrap.h
@@ -0,0 +1,49 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2014 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _ENTITIES_WRAP_INSURGENCY_H
+#define _ENTITIES_WRAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "entities.h"
+
+
+//-----------------------------------------------------------------------------
+// Exports CTakeDamageInfo.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_take_damage_info(T _entities, U TakeDamageInfo)
+{
+ TakeDamageInfo.add_property("radius", &CTakeDamageInfo::GetRadius, &CTakeDamageInfo::SetRadius);
+ TakeDamageInfo.add_property("penetrated", &TakeDamageInfoExt::get_penetrated, &TakeDamageInfoExt::set_penetrated);
+ TakeDamageInfo.add_property("bullet", &TakeDamageInfoExt::get_bullet, &TakeDamageInfoExt::set_bullet);
+ TakeDamageInfo.add_property("recoil", &TakeDamageInfoExt::get_recoil, &TakeDamageInfoExt::set_recoil);
+}
+
+
+#endif // _ENTITIES_WRAP_INSURGENCY_H
diff --git a/src/core/modules/entities/l4d2/entities_constants_wrap.h b/src/core/modules/entities/l4d2/entities_constants_wrap.h
index a98127e6c..54d62a4c7 100644
--- a/src/core/modules/entities/l4d2/entities_constants_wrap.h
+++ b/src/core/modules/entities/l4d2/entities_constants_wrap.h
@@ -43,6 +43,16 @@ void export_engine_specific_damage_types(T _constants)
}
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ // Nothing specific to Left4Dead2...
+}
+
+
//-----------------------------------------------------------------------------
// Exports SolidFlags_t.
//-----------------------------------------------------------------------------
diff --git a/src/core/modules/entities/orangebox/entities_constants_wrap.h b/src/core/modules/entities/orangebox/entities_constants_wrap.h
index 77c120ecf..d4c24da38 100644
--- a/src/core/modules/entities/orangebox/entities_constants_wrap.h
+++ b/src/core/modules/entities/orangebox/entities_constants_wrap.h
@@ -46,6 +46,16 @@ void export_engine_specific_damage_types(T _constants)
}
+//-----------------------------------------------------------------------------
+// Exports entity state flags.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_entity_state_flags(T _constants)
+{
+ // Nothing specific to OrangeBox...
+}
+
+
//-----------------------------------------------------------------------------
// Exports SolidFlags_t.
//-----------------------------------------------------------------------------
diff --git a/src/core/modules/events/events_generator.cpp b/src/core/modules/events/events_generator.cpp
index ddc4d48ce..4aa11cfcf 100644
--- a/src/core/modules/events/events_generator.cpp
+++ b/src/core/modules/events/events_generator.cpp
@@ -40,6 +40,9 @@ const char* CGameEventDescriptor::GetName()
#if defined(ENGINE_CSGO) || defined(ENGINE_LEFT4DEAD2) || defined(ENGINE_BLADE)
CGameEventManager2* manager = (CGameEventManager2*) gameeventmanager;
return manager->event_names[name_index].key;
+#elif defined(ENGINE_INSURGENCY)
+ CGameEventManager2* manager = (CGameEventManager2*) gameeventmanager;
+ return manager->events.GetElementName(this->eventid);
#else
return name;
#endif
diff --git a/src/core/modules/events/events_generator.h b/src/core/modules/events/events_generator.h
index 90a0fc3e2..d2686f657 100644
--- a/src/core/modules/events/events_generator.h
+++ b/src/core/modules/events/events_generator.h
@@ -38,6 +38,7 @@ using namespace boost::python;
#include "igameevents.h"
#include "tier1/utlmap.h"
#include "tier1/utlvector.h"
+#include "tier1/utldict.h"
//-----------------------------------------------------------------------------
@@ -95,6 +96,15 @@ class CGameEventDescriptor
bool reliable; // 33
char unknown[18]; // 34
// Total size: 52
+#elif defined(ENGINE_INSURGENCY)
+ int eventid; // 0 - Same like name_index - OK
+ int name_index; // 4 - OK
+ KeyValues *keys; // 8 - OK
+ CUtlVector listeners; // 12
+ bool local; // 32
+ bool reliable; // 33
+ char unknown[22]; // 34
+ // Total size: 56
#else
char name[MAX_EVENT_NAME_LENGTH]; // 0
int eventid; // 32
@@ -118,6 +128,9 @@ class CGameEventManager2: public IGameEventManager2
#if defined(ENGINE_CSGO) || defined(ENGINE_LEFT4DEAD2) || defined(ENGINE_BLADE)
char unknown[96];
CUtlRBTree< CUtlMap::Node_t, int > event_names;
+#elif defined (ENGINE_INSURGENCY)
+ char unknown[96];
+ CUtlDict events;
#endif
};
diff --git a/src/core/modules/globals/insurgency/globals_wrap.h b/src/core/modules/globals/insurgency/globals_wrap.h
new file mode 100644
index 000000000..bd8fa3e12
--- /dev/null
+++ b/src/core/modules/globals/insurgency/globals_wrap.h
@@ -0,0 +1,56 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2012 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _GLOBALS_WRAP_INSURGENCY_H
+#define _GLOBALS_WRAP_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "edict.h"
+
+
+//-----------------------------------------------------------------------------
+// CGlobalVarsBase visitor method.
+//-----------------------------------------------------------------------------
+template
+T GlobalsBase_Visitor(T cls)
+{
+ return cls;
+}
+
+
+//-----------------------------------------------------------------------------
+// CGlobalVars visitor method.
+//-----------------------------------------------------------------------------
+template
+T Globals_Visitor(T cls)
+{
+ return cls;
+}
+
+
+#endif // _GLOBALS_WRAP_INSURGENCY_H
diff --git a/src/core/modules/keyvalues/keyvalues_wrap.cpp b/src/core/modules/keyvalues/keyvalues_wrap.cpp
index adadaae34..1f154623f 100644
--- a/src/core/modules/keyvalues/keyvalues_wrap.cpp
+++ b/src/core/modules/keyvalues/keyvalues_wrap.cpp
@@ -317,7 +317,7 @@ void export_keyvalues_types(scope _keyvalues)
KeyValuesType.value("COLOR", KeyValues::TYPE_COLOR);
KeyValuesType.value("UNINT64", KeyValues::TYPE_UINT64);
-#ifdef ENGINE_CSGO
+#if defined(ENGINE_CSGO) || defined(ENGINE_INSURGENCY)
// TODO: Move this to a engine specific file
KeyValuesType.value("COMPILED_INT_BYTE", KeyValues::TYPE_COMPILED_INT_BYTE);
KeyValuesType.value("COMPILED_INT_0", KeyValues::TYPE_COMPILED_INT_0);
diff --git a/src/core/modules/messages/messages.cpp b/src/core/modules/messages/messages.cpp
index f59a03d14..0cc4f4d5c 100644
--- a/src/core/modules/messages/messages.cpp
+++ b/src/core/modules/messages/messages.cpp
@@ -63,7 +63,7 @@ CUserMessage::CUserMessage(IRecipientFilter& recipients, const char* message_nam
BOOST_RAISE_EXCEPTION(PyExc_NameError, "Invalid message name: '%s'.", message_name);
}
- #if defined(ENGINE_LEFT4DEAD2) || defined(ENGINE_BLADE)
+ #if defined(ENGINE_LEFT4DEAD2) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
m_buffer = engine->UserMessageBegin(&recipients, m_index, message_name);
#else
m_buffer = engine->UserMessageBegin(&recipients, m_index);
diff --git a/src/core/modules/players/insurgency/players_constants_wrap.h b/src/core/modules/players/insurgency/players_constants_wrap.h
new file mode 100644
index 000000000..012402403
--- /dev/null
+++ b/src/core/modules/players/insurgency/players_constants_wrap.h
@@ -0,0 +1,56 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _PLAYERS_CONSTANTS_INSURGENCY_WRAP_H
+#define _PLAYERS_CONSTANTS_INSURGENCY_WRAP_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "utilities/wrap_macros.h"
+
+
+//-----------------------------------------------------------------------------
+// Exports DamageTypes.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_player_buttons(T _constants)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+//-----------------------------------------------------------------------------
+// Exports HideHudFlags
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_hide_hud_flags(T _constants)
+{
+ // Nothing specific to Insurgency...
+}
+
+
+#endif // _PLAYERS_CONSTANTS_INSURGENCY_WRAP_H
diff --git a/src/core/modules/players/insurgency/players_wrap.h b/src/core/modules/players/insurgency/players_wrap.h
new file mode 100644
index 000000000..0dbbb4750
--- /dev/null
+++ b/src/core/modules/players/insurgency/players_wrap.h
@@ -0,0 +1,39 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2012-2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _PLAYERS_WRAP_INSURGENCY_H
+#define _PLAYERS_WRAP_INSURGENCY_H
+
+
+//-----------------------------------------------------------------------------
+// IPlayerInfo extension class
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_user_cmd(scope _players, T UserCmd)
+{
+}
+
+#endif // _PLAYERS_WRAP_INSURGENCY_H
diff --git a/src/core/modules/steam/insurgency/steam_wrap.h b/src/core/modules/steam/insurgency/steam_wrap.h
new file mode 100644
index 000000000..1168b969b
--- /dev/null
+++ b/src/core/modules/steam/insurgency/steam_wrap.h
@@ -0,0 +1,70 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _STEAM_WRAP_INSURGENCY_H
+#define _STEAM_WRAP_INSURGENCY_H
+
+template
+void export_engine_specific_steamid(scope _steam, T SteamID)
+{
+ SteamID.def(
+ "create_blank_anonymous_user_account",
+ &CSteamID::CreateBlankAnonUserLogon,
+ "Create an anonymous user login to be filled in by the AM.",
+ ("universe")
+ );
+
+ SteamID.def(
+ "is_lobby",
+ &CSteamID::IsLobby,
+ "Return True if this is a lobby account ID."
+ );
+
+ SteamID.def(
+ "is_anonymous_account",
+ &CSteamID::BAnonAccount,
+ "Return True if this is an anonymous account."
+ );
+
+ SteamID.def(
+ "is_anonymous_user_account",
+ &CSteamID::BAnonUserAccount,
+ "Return True if this is an anonymous user account."
+ );
+}
+
+template
+void export_engine_specific_universe(scope _steam, T Universe)
+{
+ Universe.value("RC", k_EUniverseRC);
+}
+
+template
+void export_engine_specific_account_type(scope _steam, T AccountType)
+{
+}
+
+#endif // _STEAM_WRAP_INSURGENCY_H
diff --git a/src/core/modules/weapons/insurgency/weapons_constants_wrap.h b/src/core/modules/weapons/insurgency/weapons_constants_wrap.h
new file mode 100644
index 000000000..e801b1200
--- /dev/null
+++ b/src/core/modules/weapons/insurgency/weapons_constants_wrap.h
@@ -0,0 +1,40 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _WEAPONS_CONSTANTS_INSURGENCY_WRAP_H
+#define _WEAPONS_CONSTANTS_INSURGENCY_WRAP_H
+
+//-----------------------------------------------------------------------------
+// Exports WeaponSound_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_weapon_sound(T _constants, U WeaponSound)
+{
+ WeaponSound.value("FAST_RELOAD", FAST_RELOAD);
+}
+
+
+#endif // _WEAPONS_CONSTANTS_INSURGENCY_WRAP_H
diff --git a/src/core/modules/weapons/insurgency/weapons_scripts_wrap.h b/src/core/modules/weapons/insurgency/weapons_scripts_wrap.h
new file mode 100644
index 000000000..e757cdcc9
--- /dev/null
+++ b/src/core/modules/weapons/insurgency/weapons_scripts_wrap.h
@@ -0,0 +1,39 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef _WEAPONS_SCRIPTS_INSURGENCY_WRAP_H
+#define _WEAPONS_SCRIPTS_INSURGENCY_WRAP_H
+
+//-----------------------------------------------------------------------------
+// Expose WeaponDataBase_t.
+//-----------------------------------------------------------------------------
+template
+void export_engine_specific_weapon_database(T _scripts)
+{
+ // Nothing specific to Insurgency...
+}
+
+#endif // _WEAPONS_SCRIPTS_INSURGENCY_WRAP_H
diff --git a/src/core/patches/insurgency/patches.cpp b/src/core/patches/insurgency/patches.cpp
new file mode 100644
index 000000000..a4fe5121b
--- /dev/null
+++ b/src/core/patches/insurgency/patches.cpp
@@ -0,0 +1,35 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2012 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#include "convar.h"
+#ifndef PATCH_CONVAR_H_PUBLIC_FLAGS
+#error "Make ConCommandBase::m_nFlags public."
+#endif
+
+#include "utilities/baseentity.h"
+#ifndef PATCH_NETWORK_HANDLE_BASE_DEFINITION
+#error "We need the CNetworkHandle definition..."
+#endif
diff --git a/src/core/patches/insurgency/undefined_symbols.h b/src/core/patches/insurgency/undefined_symbols.h
new file mode 100644
index 000000000..642c04462
--- /dev/null
+++ b/src/core/patches/insurgency/undefined_symbols.h
@@ -0,0 +1,65 @@
+/**
+* =============================================================================
+* Source Python
+* Copyright (C) 2015 Source Python Development Team. All rights reserved.
+* =============================================================================
+*
+* This program is free software; you can redistribute it and/or modify it under
+* the terms of the GNU General Public License, version 3.0, as published by the
+* Free Software Foundation.
+*
+* This program 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 the GNU General Public License for more
+* details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program. If not, see .
+*
+* As a special exception, the Source Python Team gives you permission
+* to link the code of this program (as well as its derivative works) to
+* "Half-Life 2," the "Source Engine," and any Game MODs that run on software
+* by the Valve Corporation. You must obey the GNU General Public License in
+* all respects for all other code used. Additionally, the Source.Python
+* Development Team grants this exception to all derivative works.
+*/
+
+#ifndef UNDEFINED_SYMBOLS_INSURGENCY_H
+#define UNDEFINED_SYMBOLS_INSURGENCY_H
+
+//-----------------------------------------------------------------------------
+// Includes.
+//-----------------------------------------------------------------------------
+#include "dt_send.h"
+#include "game/shared/ehandle.h"
+#include "isaverestore.h"
+#include "datamap.h"
+#include "game/shared/takedamageinfo.h"
+
+
+//-----------------------------------------------------------------------------
+// CTakeDamageInfo constructor declaration.
+//-----------------------------------------------------------------------------
+CTakeDamageInfo::CTakeDamageInfo()
+{
+ m_vecDamageForce = vec3_origin;
+ m_vecDamagePosition = vec3_origin;
+ m_vecReportedPosition = vec3_origin;
+ m_hInflictor = NULL;
+ m_hAttacker = NULL;
+ m_hWeapon = NULL;
+ m_flDamage = 0.0f;
+ m_flMaxDamage = 0.0f;
+ m_flBaseDamage = BASEDAMAGE_NOT_SPECIFIED;
+ m_bitsDamageType = 0;
+ m_iDamageCustom = 0;
+ m_iDamageStats = 0;
+ m_iAmmoType = -1;
+ m_flRadius = 0.0f;
+ m_iDamagedOtherPlayers = 0;
+ m_iObjectsPenetrated = 0;
+ m_uiBulletID = 0;
+ m_uiRecoilIndex = 0;
+}
+
+#endif // _UNDEFINED_SYMBOLS_INSURGENCY_H
diff --git a/src/core/sp_main.cpp b/src/core/sp_main.cpp
index 3e966daf3..182b3ac83 100644
--- a/src/core/sp_main.cpp
+++ b/src/core/sp_main.cpp
@@ -283,7 +283,7 @@ CSourcePython::~CSourcePython()
//-----------------------------------------------------------------------------
bool CSourcePython::Load( CreateInterfaceFn interfaceFactory, CreateInterfaceFn gameServerFactory )
{
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
DevMsg(1, MSG_PREFIX "Connecting interfaces...\n");
ConnectInterfaces(&interfaceFactory, 1);
#else
@@ -400,7 +400,7 @@ void CSourcePython::Unload( void )
ConVar_Unregister( );
// New in CSGO...
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
DevMsg(1, MSG_PREFIX "Disconnecting interfaces...\n");
DisconnectInterfaces();
#else
@@ -575,7 +575,7 @@ PLUGIN_RESULT CSourcePython::ClientCommand( edict_t *pEntity, const CCommand &ar
//-----------------------------------------------------------------------------
// Alien Swarm.
//-----------------------------------------------------------------------------
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
void CSourcePython::ClientFullyConnect( edict_t *pEntity )
{
unsigned int iEntityIndex;
@@ -586,7 +586,7 @@ void CSourcePython::ClientFullyConnect( edict_t *pEntity )
}
#endif
-#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
void CSourcePython::OnEdictAllocated( edict_t *edict )
{
unsigned int iEntityIndex;
@@ -649,7 +649,7 @@ void CSourcePython::OnDataUnloaded( MDLCacheDataType_t type, MDLHandle_t handle
CALL_LISTENERS(OnDataUnloaded, type, handle);
}
-#ifdef ENGINE_CSGO
+#if defined(ENGINE_CSGO) || defined(ENGINE_INSURGENCY)
void CSourcePython::OnCombinerPreCache(MDLCacheDataType_t type, MDLHandle_t handle )
{
if (m_pOldMDLCacheNotifier)
@@ -666,7 +666,9 @@ bool CSourcePython::ShouldSupressLoadWarning(MDLHandle_t handle)
return result;
}
+#endif
+#if defined(ENGINE_CSGO)
bool CSourcePython::BNetworkCryptKeyCheckRequired( uint32 unFromIP, uint16 usFromPort,
uint32 unAccountIdProvidedByClient, bool bClientWantsToUseCryptKey )
{
diff --git a/src/core/sp_main.h b/src/core/sp_main.h
index ba6fba73a..391a6267b 100644
--- a/src/core/sp_main.h
+++ b/src/core/sp_main.h
@@ -79,11 +79,11 @@ class CSourcePython: public IServerPluginCallbacks, public IEntityListener, publ
// -------------------------------------------
// Alien Swarm.
// -------------------------------------------
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
virtual void ClientFullyConnect( edict_t *pEntity );
#endif
-#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
virtual void OnEdictAllocated( edict_t *edict );
virtual void OnEdictFreed( const edict_t *edict );
#endif
@@ -117,7 +117,7 @@ class CSourcePython: public IServerPluginCallbacks, public IEntityListener, publ
// -------------------------------------------
virtual void OnDataLoaded( MDLCacheDataType_t type, MDLHandle_t handle );
virtual void OnDataUnloaded( MDLCacheDataType_t type, MDLHandle_t handle );
-#ifdef ENGINE_CSGO
+#if defined(ENGINE_CSGO) || defined(ENGINE_INSURGENCY)
virtual void OnCombinerPreCache(MDLCacheDataType_t type, MDLHandle_t handle );
virtual bool ShouldSupressLoadWarning(MDLHandle_t handle);
#endif
diff --git a/src/loader/loader_main.cpp b/src/loader/loader_main.cpp
index e1736219a..0ec82eaaf 100644
--- a/src/loader/loader_main.cpp
+++ b/src/loader/loader_main.cpp
@@ -445,7 +445,7 @@ PLUGIN_RESULT CSourcePython::ClientCommand( edict_t *pEntity, const CCommand &ar
//---------------------------------------------------------------------------------
// Alien Swarm.
//---------------------------------------------------------------------------------
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
void CSourcePython::ClientFullyConnect( edict_t *pEntity )
{
if (m_pCorePlugin != NULL)
@@ -455,7 +455,7 @@ void CSourcePython::ClientFullyConnect( edict_t *pEntity )
}
#endif
-#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
void CSourcePython::OnEdictAllocated( edict_t *edict )
{
if (m_pCorePlugin != NULL)
diff --git a/src/loader/loader_main.h b/src/loader/loader_main.h
index 8882cd011..c9524ddb1 100644
--- a/src/loader/loader_main.h
+++ b/src/loader/loader_main.h
@@ -72,11 +72,11 @@ class CSourcePython: public IServerPluginCallbacks
// -------------------------------------------
// Counter-Strike: Global Offensive
// -------------------------------------------
-#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
virtual void ClientFullyConnect( edict_t *pEntity );
#endif
-#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE)
+#if defined(ENGINE_CSGO) || defined(ENGINE_BMS) || defined(ENGINE_BLADE) || defined(ENGINE_INSURGENCY)
virtual void OnEdictAllocated( edict_t *edict );
virtual void OnEdictFreed( const edict_t *edict );
#endif
diff --git a/src/makefiles/branch/insurgency.cmake b/src/makefiles/branch/insurgency.cmake
new file mode 100644
index 000000000..309cfe980
--- /dev/null
+++ b/src/makefiles/branch/insurgency.cmake
@@ -0,0 +1,10 @@
+# ------------------------------------------------------------------
+# File: src/makefiles/branch/insurgency.cmake
+# Purpose: This is the CMake file for the insurgency branch.
+# ------------------------------------------------------------------
+
+# ------------------------------------------------------------------
+# Set the engine version.
+# ------------------------------------------------------------------
+Set(SOURCE_ENGINE "insurgency")
+add_definitions(-DENGINE_INSURGENCY)
\ No newline at end of file
diff --git a/src/makefiles/linux/linux.base.cmake b/src/makefiles/linux/linux.base.cmake
index 215b76b65..7d9c0eb01 100644
--- a/src/makefiles/linux/linux.base.cmake
+++ b/src/makefiles/linux/linux.base.cmake
@@ -82,6 +82,15 @@ If(SOURCE_ENGINE MATCHES "csgo" OR SOURCE_ENGINE MATCHES "blade")
)
EndIf()
+If(SOURCE_ENGINE MATCHES "insurgency")
+ Set(SOURCEPYTHON_LINK_LIBRARIES
+ "${SOURCEPYTHON_LINK_LIBRARIES}"
+ ${SOURCESDK_LIB}/linux/interfaces_i486.a
+ ${SOURCESDK_LIB}/linux/libtier0_srv.so
+ ${SOURCESDK_LIB}/linux/libvstdlib_srv.so
+ )
+EndIf()
+
If(SOURCE_ENGINE MATCHES "csgo")
Set(SOURCEPYTHON_LINK_LIBRARIES
"${SOURCEPYTHON_LINK_LIBRARIES}"
diff --git a/src/makefiles/win32/win32.base.cmake b/src/makefiles/win32/win32.base.cmake
index 2bc26a91b..bc23a742d 100644
--- a/src/makefiles/win32/win32.base.cmake
+++ b/src/makefiles/win32/win32.base.cmake
@@ -66,7 +66,7 @@ Set(SOURCEPYTHON_LINK_LIBRARIES
)
# CSGO Engine adds in interfaces.lib
-If( SOURCE_ENGINE MATCHES "csgo" OR SOURCE_ENGINE MATCHES "blade")
+If( SOURCE_ENGINE MATCHES "csgo" OR SOURCE_ENGINE MATCHES "blade" OR SOURCE_ENGINE MATCHES "insurgency")
Set(SOURCEPYTHON_LINK_LIBRARIES
${SOURCEPYTHON_LINK_LIBRARIES}
${SOURCESDK_LIB}/public/interfaces.lib
diff --git a/src/patches/insurgency/public/networkvar.h b/src/patches/insurgency/public/networkvar.h
new file mode 100644
index 000000000..3c0516277
--- /dev/null
+++ b/src/patches/insurgency/public/networkvar.h
@@ -0,0 +1,823 @@
+//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef NETWORKVAR_H
+#define NETWORKVAR_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "tier0/dbg.h"
+#include "convar.h"
+
+#if defined( CLIENT_DLL ) || defined( GAME_DLL )
+ #include "basehandle.h"
+#endif
+
+#ifdef _MSC_VER
+#pragma warning( disable : 4284 ) // warning C4284: return type for 'CNetworkVarT::operator ->' is 'int *' (ie; not a UDT or reference to a UDT. Will produce errors if applied using infix notation)
+#endif
+
+#define MyOffsetOf( type, var ) ( (int)&((type*)0)->var )
+
+#ifdef _DEBUG
+ #undef new
+ extern bool g_bUseNetworkVars;
+ #define CHECK_USENETWORKVARS if(g_bUseNetworkVars)
+#else
+ #define CHECK_USENETWORKVARS // don't check for g_bUseNetworkVars
+#endif
+
+
+
+// network vars use memcmp when fields are set. To ensure proper behavior your
+// object's memory should be initialized to zero. This happens for entities automatically
+// use this for other classes.
+class CMemZeroOnNew
+{
+public:
+ void *operator new( size_t nSize )
+ {
+ void *pMem = MemAlloc_Alloc( nSize );
+ V_memset( pMem, 0, nSize );
+ return pMem;
+ }
+
+ void* operator new( size_t nSize, int nBlockUse, const char *pFileName, int nLine )
+ {
+ void *pMem = MemAlloc_Alloc( nSize, pFileName, nLine );
+ V_memset( pMem, 0, nSize );
+ return pMem;
+ }
+
+ void operator delete(void *pData)
+ {
+ if ( pData )
+ {
+ g_pMemAlloc->Free(pData);
+ }
+ }
+
+ void operator delete( void* pData, int nBlockUse, const char *pFileName, int nLine )
+ {
+ if ( pData )
+ {
+ g_pMemAlloc->Free(pData, pFileName, nLine );
+ }
+ }
+};
+
+
+inline int InternalCheckDeclareClass( const char *pClassName, const char *pClassNameMatch, void *pTestPtr, void *pBasePtr )
+{
+ // This makes sure that casting from ThisClass to BaseClass works right. You'll get a compiler error if it doesn't
+ // work at all, and you'll get a runtime error if you use multiple inheritance.
+ Assert( pTestPtr == pBasePtr );
+
+ // This is triggered by IMPLEMENT_SERVER_CLASS. It does DLLClassName::CheckDeclareClass( #DLLClassName ).
+ // If they didn't do a DECLARE_CLASS in DLLClassName, then it'll be calling its base class's version
+ // and the class names won't match.
+ Assert( (void*)pClassName == (void*)pClassNameMatch );
+ return 0;
+}
+
+
+template
+inline int CheckDeclareClass_Access( T *, const char *pShouldBe )
+{
+ return T::CheckDeclareClass( pShouldBe );
+}
+
+#ifndef _STATIC_LINKED
+#ifdef _MSC_VER
+#if defined(_DEBUG) && (_MSC_VER > 1200 )
+ #define VALIDATE_DECLARE_CLASS 1
+#endif
+#endif
+#endif
+
+#ifdef VALIDATE_DECLARE_CLASS
+
+ #define DECLARE_CLASS( className, baseClassName ) \
+ typedef baseClassName BaseClass; \
+ typedef className ThisClass; \
+ template friend int CheckDeclareClass_Access(T *, const char *pShouldBe); \
+ static int CheckDeclareClass( const char *pShouldBe ) \
+ { \
+ InternalCheckDeclareClass( pShouldBe, #className, (ThisClass*)0xFFFFF, (BaseClass*)(ThisClass*)0xFFFFF ); \
+ return CheckDeclareClass_Access( (BaseClass *)NULL, #baseClassName ); \
+ }
+
+ // Use this macro when you have a base class, but it's part of a library that doesn't use network vars
+ // or any of the things that use ThisClass or BaseClass.
+ #define DECLARE_CLASS_GAMEROOT( className, baseClassName ) \
+ typedef baseClassName BaseClass; \
+ typedef className ThisClass; \
+ template friend int CheckDeclareClass_Access(T *, const char *pShouldBe); \
+ static int CheckDeclareClass( const char *pShouldBe ) \
+ { \
+ return InternalCheckDeclareClass( pShouldBe, #className, (ThisClass*)0xFFFFF, (BaseClass*)(ThisClass*)0xFFFFF ); \
+ }
+
+ // Deprecated macro formerly used to work around VC++98 bug
+ #define DECLARE_CLASS_NOFRIEND( className, baseClassName ) \
+ DECLARE_CLASS( className, baseClassName )
+
+ #define DECLARE_CLASS_NOBASE( className ) \
+ typedef className ThisClass; \
+ template friend int CheckDeclareClass_Access(T *, const char *pShouldBe); \
+ static int CheckDeclareClass( const char *pShouldBe ) \
+ { \
+ return InternalCheckDeclareClass( pShouldBe, #className, 0, 0 ); \
+ }
+
+#else
+ #define DECLARE_CLASS( className, baseClassName ) \
+ typedef baseClassName BaseClass; \
+ typedef className ThisClass;
+
+ #define DECLARE_CLASS_GAMEROOT( className, baseClassName ) DECLARE_CLASS( className, baseClassName )
+ #define DECLARE_CLASS_NOFRIEND( className, baseClassName ) DECLARE_CLASS( className, baseClassName )
+
+ #define DECLARE_CLASS_NOBASE( className ) typedef className ThisClass;
+#endif
+
+
+
+
+// All classes that contain CNetworkVars need a NetworkStateChanged() function. If the class is not an entity,
+// it needs to forward the call to the entity it's in. These macros can help.
+
+ // These macros setup an entity pointer in your class. Use IMPLEMENT_NETWORKVAR_CHAIN before you do
+ // anything inside the class itself.
+ class CBaseEntity;
+ class CAutoInitEntPtr
+ {
+ public:
+ CAutoInitEntPtr()
+ {
+ m_pEnt = NULL;
+ }
+ CBaseEntity *m_pEnt;
+ };
+
+ //TODO: Currently, these don't get the benefit of tracking changes to individual vars.
+ // Would be nice if they did.
+ #define DECLARE_NETWORKVAR_CHAIN() \
+ CAutoInitEntPtr __m_pChainEntity; \
+ void NetworkStateChanged() { CHECK_USENETWORKVARS __m_pChainEntity.m_pEnt->NetworkStateChanged(); } \
+ void NetworkStateChanged( void *pVar ) { CHECK_USENETWORKVARS __m_pChainEntity.m_pEnt->NetworkStateChanged(); }
+
+ #define IMPLEMENT_NETWORKVAR_CHAIN( varName ) \
+ (varName)->__m_pChainEntity.m_pEnt = this;
+
+
+
+// Use this macro when you want to embed a structure inside your entity and have CNetworkVars in it.
+template< class T >
+static inline void DispatchNetworkStateChanged( T *pObj )
+{
+ CHECK_USENETWORKVARS pObj->NetworkStateChanged();
+}
+template< class T >
+static inline void DispatchNetworkStateChanged( T *pObj, void *pVar )
+{
+ CHECK_USENETWORKVARS pObj->NetworkStateChanged( pVar );
+}
+
+
+#define DECLARE_EMBEDDED_NETWORKVAR() \
+ template friend int ServerClassInit(T *); \
+ template friend int ClientClassInit(T *); \
+ virtual void NetworkStateChanged() {} virtual void NetworkStateChanged( void *pProp ) {}
+
+// NOTE: Assignment operator is disabled because it doesn't call copy constructors of scalar types within the aggregate, so they are not marked changed
+#define CNetworkVarEmbedded( type, name ) \
+ class NetworkVar_##name; \
+ friend class NetworkVar_##name; \
+ static inline int GetOffset_##name() { return MyOffsetOf(ThisClass,name); } \
+ typedef ThisClass ThisClass_##name; \
+ class NetworkVar_##name : public type \
+ { \
+ template< class T > NetworkVar_##name& operator=( const T &val ) { *((type*)this) = val; return *this; } \
+ public: \
+ void CopyFrom( const type &src ) { *((type *)this) = src; NetworkStateChanged(); } \
+ type & GetForModify( void ) { NetworkStateChanged(); return *((type *)this); } \
+ virtual void NetworkStateChanged() \
+ { \
+ DispatchNetworkStateChanged( (ThisClass_##name*)( ((char*)this) - GetOffset_##name() ) ); \
+ } \
+ virtual void NetworkStateChanged( void *pVar ) \
+ { \
+ DispatchNetworkStateChanged( (ThisClass_##name*)( ((char*)this) - GetOffset_##name() ), pVar ); \
+ } \
+ }; \
+ NetworkVar_##name name;
+
+
+
+template< class Type, class Changer >
+class CNetworkVarBase
+{
+public:
+ CNetworkVarBase()
+ {
+ }
+
+ FORCEINLINE explicit CNetworkVarBase( Type val )
+ : m_Value( val )
+ {
+ NetworkStateChanged();
+ }
+
+ FORCEINLINE const Type& SetDirect( const Type &val )
+ {
+ NetworkStateChanged();
+ m_Value = val;
+ return m_Value;
+ }
+
+ FORCEINLINE const Type& Set( const Type &val )
+ {
+ if ( m_Value != val )
+ {
+ NetworkStateChanged();
+ m_Value = val;
+ }
+ return m_Value;
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator=( const C &val )
+ {
+ return Set( ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator=( const CNetworkVarBase< C, Changer > &val )
+ {
+ return Set( ( const Type )val.m_Value );
+ }
+
+ FORCEINLINE Type& GetForModify()
+ {
+ NetworkStateChanged();
+ return m_Value;
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator+=( const C &val )
+ {
+ return Set( m_Value + ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator-=( const C &val )
+ {
+ return Set( m_Value - ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator/=( const C &val )
+ {
+ return Set( m_Value / ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator*=( const C &val )
+ {
+ return Set( m_Value * ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator^=( const C &val )
+ {
+ return Set( m_Value ^ ( const Type )val );
+ }
+
+ template< class C >
+ FORCEINLINE const Type& operator|=( const C &val )
+ {
+ return Set( m_Value | ( const Type )val );
+ }
+
+ FORCEINLINE const Type& operator++()
+ {
+ return (*this += 1);
+ }
+
+ FORCEINLINE Type operator--()
+ {
+ return (*this -= 1);
+ }
+
+ FORCEINLINE Type operator++( int ) // postfix version..
+ {
+ Type val = m_Value;
+ (*this += 1);
+ return val;
+ }
+
+ FORCEINLINE Type operator--( int ) // postfix version..
+ {
+ Type val = m_Value;
+ (*this -= 1);
+ return val;
+ }
+
+ // For some reason the compiler only generates type conversion warnings for this operator when used like
+ // CNetworkVarBase = 0x1
+ // (it warns about converting from an int to an unsigned char).
+ template< class C >
+ FORCEINLINE const Type& operator&=( const C &val )
+ {
+ return Set( m_Value & ( const Type )val );
+ }
+
+ FORCEINLINE operator const Type&() const
+ {
+ return m_Value;
+ }
+
+ FORCEINLINE const Type& Get() const
+ {
+ return m_Value;
+ }
+
+ FORCEINLINE const Type* operator->() const
+ {
+ return &m_Value;
+ }
+
+ Type m_Value;
+
+protected:
+ FORCEINLINE void NetworkStateChanged()
+ {
+ Changer::NetworkStateChanged( this );
+ }
+};
+
+template< class Type, class Changer >
+class CNetworkColor32Base : public CNetworkVarBase< Type, Changer >
+{
+ typedef CNetworkVarBase< Type, Changer > base;
+public:
+ inline void Init( byte rVal, byte gVal, byte bVal )
+ {
+ SetR( rVal );
+ SetG( gVal );
+ SetB( bVal );
+ }
+ inline void Init( byte rVal, byte gVal, byte bVal, byte aVal )
+ {
+ SetR( rVal );
+ SetG( gVal );
+ SetB( bVal );
+ SetA( aVal );
+ }
+
+ const Type& operator=( const Type &val )
+ {
+ return Set( val );
+ }
+
+ const Type& operator=( const CNetworkColor32Base &val )
+ {
+ return base::Set( val.m_Value );
+ }
+
+ inline byte GetR() const { return this->m_Value.r; }
+ inline byte GetG() const { return this->m_Value.g; }
+ inline byte GetB() const { return this->m_Value.b; }
+ inline byte GetA() const { return this->m_Value.a; }
+ inline void SetR( byte val ) { SetVal( this->m_Value.r, val ); }
+ inline void SetG( byte val ) { SetVal( this->m_Value.g, val ); }
+ inline void SetB( byte val ) { SetVal( this->m_Value.b, val ); }
+ inline void SetA( byte val ) { SetVal( this->m_Value.a, val ); }
+
+protected:
+ inline void SetVal( byte &out, const byte &in )
+ {
+ if ( out != in )
+ {
+ this->NetworkStateChanged();
+ out = in;
+ }
+ }
+};
+
+
+// Network vector wrapper.
+template< class Type, class Changer >
+class CNetworkVectorBase : public CNetworkVarBase< Type, Changer >
+{
+ typedef CNetworkVarBase< Type, Changer > base;
+public:
+ FORCEINLINE void Init( float ix=0, float iy=0, float iz=0 )
+ {
+ base::Set( Type( ix, iy, iz ) );
+ }
+
+ FORCEINLINE const Type& operator=( const Type &val )
+ {
+ return base::Set( val );
+ }
+
+ FORCEINLINE const Type& operator=( const CNetworkVectorBase &val )
+ {
+ return base::Set( val.m_Value );
+ }
+
+ FORCEINLINE float GetX() const { return this->m_Value.x; }
+ FORCEINLINE float GetY() const { return this->m_Value.y; }
+ FORCEINLINE float GetZ() const { return this->m_Value.z; }
+ FORCEINLINE float operator[]( int i ) const { return this->m_Value[i]; }
+
+ FORCEINLINE void SetX( float val ) { DetectChange( this->m_Value.x, val ); }
+ FORCEINLINE void SetY( float val ) { DetectChange( this->m_Value.y, val ); }
+ FORCEINLINE void SetZ( float val ) { DetectChange( this->m_Value.z, val ); }
+ FORCEINLINE void Set( int i, float val ) { DetectChange( this->m_Value[i], val ); }
+
+ FORCEINLINE bool operator==( const Type &val ) const
+ {
+ return this->m_Value == (Type)val;
+ }
+
+ FORCEINLINE bool operator!=( const Type &val ) const
+ {
+ return this->m_Value != (Type)val;
+ }
+
+ FORCEINLINE const Type operator+( const Type &val ) const
+ {
+ return this->m_Value + val;
+ }
+
+ FORCEINLINE const Type operator-( const Type &val ) const
+ {
+ return this->m_Value - val;
+ }
+
+ FORCEINLINE const Type operator*( const Type &val ) const
+ {
+ return this->m_Value * val;
+ }
+
+ FORCEINLINE const Type& operator*=( float val )
+ {
+ return base::Set( this->m_Value * val );
+ }
+
+ FORCEINLINE const Type operator*( float val ) const
+ {
+ return this->m_Value * val;
+ }
+
+ FORCEINLINE const Type operator/( const Type &val ) const
+ {
+ return this->m_Value / val;
+ }
+
+private:
+ FORCEINLINE void DetectChange( float &out, float in )
+ {
+ if ( out != in )
+ {
+ this->NetworkStateChanged();
+ out = in;
+ }
+ }
+};
+
+
+// Network vector wrapper.
+template< class Type, class Changer >
+class CNetworkQuaternionBase : public CNetworkVarBase< Type, Changer >
+{
+ typedef CNetworkVarBase< Type, Changer > base;
+public:
+ inline void Init( float ix=0, float iy=0, float iz=0, float iw = 0 )
+ {
+ base::Set( Quaternion( ix, iy, iz, iw ) );
+ }
+
+ const Type& operator=( const Type &val )
+ {
+ return Set( val );
+ }
+
+ const Type& operator=( const CNetworkQuaternionBase &val )
+ {
+ return Set( val.m_Value );
+ }
+
+ inline float GetX() const { return this->m_Value.x; }
+ inline float GetY() const { return this->m_Value.y; }
+ inline float GetZ() const { return this->m_Value.z; }
+ inline float GetW() const { return this->m_Value.w; }
+ inline float operator[]( int i ) const { return this->m_Value[i]; }
+
+ inline void SetX( float val ) { DetectChange( this->m_Value.x, val ); }
+ inline void SetY( float val ) { DetectChange( this->m_Value.y, val ); }
+ inline void SetZ( float val ) { DetectChange( this->m_Value.z, val ); }
+ inline void SetW( float val ) { DetectChange( this->m_Value.w, val ); }
+ inline void Set( int i, float val ) { DetectChange( this->m_Value[i], val ); }
+
+ bool operator==( const Type &val ) const
+ {
+ return this->m_Value == (Type)val;
+ }
+
+ bool operator!=( const Type &val ) const
+ {
+ return this->m_Value != (Type)val;
+ }
+
+ const Type operator+( const Type &val ) const
+ {
+ return this->m_Value + val;
+ }
+
+ const Type operator-( const Type &val ) const
+ {
+ return this->m_Value - val;
+ }
+
+ const Type operator*( const Type &val ) const
+ {
+ return this->m_Value * val;
+ }
+
+ const Type& operator*=( float val )
+ {
+ return Set( this->m_Value * val );
+ }
+
+ const Type operator*( float val ) const
+ {
+ return this->m_Value * val;
+ }
+
+ const Type operator/( const Type &val ) const
+ {
+ return this->m_Value / val;
+ }
+
+private:
+ inline void DetectChange( float &out, float in )
+ {
+ if ( out != in )
+ {
+ this->NetworkStateChanged();
+ out = in;
+ }
+ }
+};
+
+
+#define PATCH_NETWORK_HANDLE_BASE_DEFINITION
+// Network ehandle wrapper.
+#if 1
+ template< class Type, class Changer >
+ class CNetworkHandleBase : public CNetworkVarBase< CBaseHandle, Changer >
+ {
+ typedef CNetworkVarBase< CBaseHandle, Changer > base;
+ public:
+ const Type* operator=( const Type *val )
+ {
+ return Set( val );
+ }
+
+ const Type& operator=( const CNetworkHandleBase &val )
+ {
+ const CBaseHandle &handle = CNetworkVarBase::Set( val.m_Value );
+ return *(const Type*)handle.Get();
+ }
+
+ bool operator !() const
+ {
+ return !this->m_Value.Get();
+ }
+
+ operator Type*() const
+ {
+ return static_cast< Type* >( this->m_Value.Get() );
+ }
+
+ const Type* Set( const Type *val )
+ {
+ if ( CNetworkHandleBase::m_Value != val )
+ {
+ this->NetworkStateChanged();
+ CNetworkHandleBase::m_Value = val;
+ }
+ return val;
+ }
+
+ Type* Get() const
+ {
+ return reinterpret_cast< Type* >( CNetworkHandleBase::m_Value.Get() );
+ }
+
+ Type* operator->() const
+ {
+ return static_cast< Type* >( CNetworkHandleBase::m_Value.Get() );
+ }
+
+ bool operator==( const Type *val ) const
+ {
+ return CNetworkHandleBase::m_Value == val;
+ }
+
+ bool operator!=( const Type *val ) const
+ {
+ return CNetworkHandleBase::m_Value != val;
+ }
+ };
+
+
+
+ #define CNetworkHandle( type, name ) CNetworkHandleInternal( type, name, NetworkStateChanged )
+
+ #define CNetworkHandleInternal( type, name, stateChangedFn ) \
+ NETWORK_VAR_START( type, name ) \
+ NETWORK_VAR_END( type, name, CNetworkHandleBase, stateChangedFn )
+#endif
+
+
+// Use this macro to define a network variable.
+#define CNetworkVar( type, name ) \
+ NETWORK_VAR_START( type, name ) \
+ NETWORK_VAR_END( type, name, CNetworkVarBase, NetworkStateChanged )
+
+
+// Use this macro when you have a base class with a variable, and it doesn't have that variable in a SendTable,
+// but a derived class does. Then, the entity is only flagged as changed when the variable is changed in
+// an entity that wants to transmit the variable.
+ #define CNetworkVarForDerived( type, name ) \
+ virtual void NetworkStateChanged_##name() {} \
+ virtual void NetworkStateChanged_##name( void *pVar ) {} \
+ NETWORK_VAR_START( type, name ) \
+ NETWORK_VAR_END( type, name, CNetworkVarBase, NetworkStateChanged_##name )
+
+ #define CNetworkVectorForDerived( name ) \
+ virtual void NetworkStateChanged_##name() {} \
+ virtual void NetworkStateChanged_##name( void *pVar ) {} \
+ CNetworkVectorInternal( Vector, name, NetworkStateChanged_##name )
+
+ #define CNetworkHandleForDerived( type, name ) \
+ virtual void NetworkStateChanged_##name() {} \
+ virtual void NetworkStateChanged_##name( void *pVar ) {} \
+ CNetworkHandleInternal( type, name, NetworkStateChanged_##name )
+
+ #define CNetworkArrayForDerived( type, name, count ) \
+ virtual void NetworkStateChanged_##name() {} \
+ virtual void NetworkStateChanged_##name( void *pVar ) {} \
+ CNetworkArrayInternal( type, name, count, NetworkStateChanged_##name )
+
+ #define IMPLEMENT_NETWORK_VAR_FOR_DERIVED( name ) \
+ virtual void NetworkStateChanged_##name() { CHECK_USENETWORKVARS NetworkStateChanged(); } \
+ virtual void NetworkStateChanged_##name( void *pVar ) { CHECK_USENETWORKVARS NetworkStateChanged( pVar ); }
+
+
+// This virtualizes the change detection on the variable, but it is ON by default.
+// Use this when you have a base class in which MOST of its derived classes use this variable
+// in their SendTables, but there are a couple that don't (and they
+// can use DISABLE_NETWORK_VAR_FOR_DERIVED).
+ #define CNetworkVarForDerived_OnByDefault( type, name ) \
+ virtual void NetworkStateChanged_##name() { CHECK_USENETWORKVARS NetworkStateChanged(); } \
+ virtual void NetworkStateChanged_##name( void *pVar ) { CHECK_USENETWORKVARS NetworkStateChanged( pVar ); } \
+ NETWORK_VAR_START( type, name ) \
+ NETWORK_VAR_END( type, name, CNetworkVarBase, NetworkStateChanged_##name )
+
+ #define DISABLE_NETWORK_VAR_FOR_DERIVED( name ) \
+ virtual void NetworkStateChanged_##name() {} \
+ virtual void NetworkStateChanged_##name( void *pVar ) {}
+
+
+
+// Vectors + some convenient helper functions.
+#define CNetworkVector( name ) CNetworkVectorInternal( Vector, name, NetworkStateChanged )
+#define CNetworkQAngle( name ) CNetworkVectorInternal( QAngle, name, NetworkStateChanged )
+
+#define CNetworkVectorInternal( type, name, stateChangedFn ) \
+ NETWORK_VAR_START( type, name ) \
+ NETWORK_VAR_END( type, name, CNetworkVectorBase, stateChangedFn )
+
+#define CNetworkQuaternion( name ) \
+ NETWORK_VAR_START( Quaternion, name ) \
+ NETWORK_VAR_END( Quaternion, name, CNetworkQuaternionBase, NetworkStateChanged )
+
+// Helper for color32's. Contains GetR(), SetR(), etc.. functions.
+#define CNetworkColor32( name ) \
+ NETWORK_VAR_START( color32, name ) \
+ NETWORK_VAR_END( color32, name, CNetworkColor32Base, NetworkStateChanged )
+
+
+#define CNetworkString( name, length ) \
+ class NetworkVar_##name; \
+ friend class NetworkVar_##name; \
+ typedef ThisClass MakeANetworkVar_##name; \
+ class NetworkVar_##name \
+ { \
+ public: \
+ operator const char*() const { return m_Value; } \
+ const char* Get() const { return m_Value; } \
+ char* GetForModify() \
+ { \
+ NetworkStateChanged(); \
+ return m_Value; \
+ } \
+ protected: \
+ inline void NetworkStateChanged() \
+ { \
+ CHECK_USENETWORKVARS ((ThisClass*)(((char*)this) - MyOffsetOf(ThisClass,name)))->NetworkStateChanged(); \
+ } \
+ private: \
+ char m_Value[length]; \
+ }; \
+ NetworkVar_##name name;
+
+
+
+
+// Use this to define networked arrays.
+// You can access elements for reading with operator[], and you can set elements with the Set() function.
+#define CNetworkArrayInternal( type, name, count, stateChangedFn ) \
+ class NetworkVar_##name; \
+ friend class NetworkVar_##name; \
+ typedef ThisClass MakeANetworkVar_##name; \
+ class NetworkVar_##name \
+ { \
+ public: \
+ template friend int ServerClassInit(T *); \
+ const type& operator[]( int i ) const \
+ { \
+ return Get( i ); \
+ } \
+ \
+ const type& Get( int i ) const \
+ { \
+ Assert( i >= 0 && i < count ); \
+ return m_Value[i]; \
+ } \
+ \
+ type& GetForModify( int i ) \
+ { \
+ Assert( i >= 0 && i < count ); \
+ NetworkStateChanged( i ); \
+ return m_Value[i]; \
+ } \
+ \
+ void Set( int i, const type &val ) \
+ { \
+ Assert( i >= 0 && i < count ); \
+ if( memcmp( &m_Value[i], &val, sizeof(type) ) ) \
+ { \
+ NetworkStateChanged( i ); \
+ m_Value[i] = val; \
+ } \
+ } \
+ const type* Base() const { return m_Value; } \
+ int Count() const { return count; } \
+ type m_Value[count]; \
+ protected: \
+ inline void NetworkStateChanged( int index ) \
+ { \
+ CHECK_USENETWORKVARS ((ThisClass*)(((char*)this) - MyOffsetOf(ThisClass,name)))->stateChangedFn( &m_Value[index] ); \
+ } \
+ }; \
+ NetworkVar_##name name;
+
+
+#define CNetworkArray( type, name, count ) CNetworkArrayInternal( type, name, count, NetworkStateChanged )
+
+
+// Internal macros used in definitions of network vars.
+#define NETWORK_VAR_START( type, name ) \
+ class NetworkVar_##name; \
+ friend class NetworkVar_##name; \
+ typedef ThisClass MakeANetworkVar_##name; \
+ class NetworkVar_##name \
+ { \
+ public: \
+ template friend int ServerClassInit(T *);
+
+
+#define NETWORK_VAR_END( type, name, base, stateChangedFn ) \
+ public: \
+ static inline void NetworkStateChanged( void *ptr ) \
+ { \
+ CHECK_USENETWORKVARS ((ThisClass*)(((char*)ptr) - MyOffsetOf(ThisClass,name)))->stateChangedFn( ptr ); \
+ } \
+ }; \
+ base< type, NetworkVar_##name > name;
+
+
+
+#endif // NETWORKVAR_H
diff --git a/src/patches/insurgency/public/tier1/convar.h b/src/patches/insurgency/public/tier1/convar.h
new file mode 100644
index 000000000..5b46e7407
--- /dev/null
+++ b/src/patches/insurgency/public/tier1/convar.h
@@ -0,0 +1,1016 @@
+//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
+//
+// Purpose:
+//
+// $Workfile: $
+// $Date: $
+//
+//-----------------------------------------------------------------------------
+// $NoKeywords: $
+//===========================================================================//
+
+#ifndef CONVAR_H
+#define CONVAR_H
+
+#if _WIN32
+#pragma once
+#endif
+
+#include "tier0/dbg.h"
+#include "tier1/iconvar.h"
+#include "tier1/utlvector.h"
+#include "tier1/utlstring.h"
+#include "Color.h"
+#include "icvar.h"
+
+#ifdef _WIN32
+#define FORCEINLINE_CVAR FORCEINLINE
+#elif POSIX
+#define FORCEINLINE_CVAR inline
+#else
+#error "implement me"
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Uncomment me to test for threading issues for material system convars
+// NOTE: You want to disable all threading when you do this
+// +host_thread_mode 0 +r_threaded_particles 0 +sv_parallel_packentities 0 +sv_disable_querycache 0
+//-----------------------------------------------------------------------------
+//#define CONVAR_TEST_MATERIAL_THREAD_CONVARS 1
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class ConVar;
+class CCommand;
+class ConCommand;
+class ConCommandBase;
+struct characterset_t;
+
+
+
+//-----------------------------------------------------------------------------
+// Any executable that wants to use ConVars need to implement one of
+// these to hook up access to console variables.
+//-----------------------------------------------------------------------------
+class IConCommandBaseAccessor
+{
+public:
+ // Flags is a combination of FCVAR flags in cvar.h.
+ // hOut is filled in with a handle to the variable.
+ virtual bool RegisterConCommandBase( ConCommandBase *pVar ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Helper method for console development
+//-----------------------------------------------------------------------------
+#if defined( _X360 )
+void ConVar_PublishToVXConsole();
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Called when a ConCommand needs to execute
+//-----------------------------------------------------------------------------
+typedef void ( *FnCommandCallbackV1_t )( void );
+typedef void ( *FnCommandCallback_t )( const CCommand &command );
+
+#define COMMAND_COMPLETION_MAXITEMS 64
+#define COMMAND_COMPLETION_ITEM_LENGTH 64
+
+//-----------------------------------------------------------------------------
+// Returns 0 to COMMAND_COMPLETION_MAXITEMS worth of completion strings
+//-----------------------------------------------------------------------------
+typedef int ( *FnCommandCompletionCallback )( const char *partial, char commands[ COMMAND_COMPLETION_MAXITEMS ][ COMMAND_COMPLETION_ITEM_LENGTH ] );
+
+
+//-----------------------------------------------------------------------------
+// Interface version
+//-----------------------------------------------------------------------------
+class ICommandCallback
+{
+public:
+ virtual void CommandCallback( const CCommand &command ) = 0;
+};
+
+class ICommandCompletionCallback
+{
+public:
+ virtual int CommandCompletionCallback( const char *pPartial, CUtlVector< CUtlString > &commands ) = 0;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: The base console invoked command/cvar interface
+//-----------------------------------------------------------------------------
+class ConCommandBase
+{
+ friend class CCvar;
+ friend class ConVar;
+ friend class ConCommand;
+ friend void ConVar_Register( int nCVarFlag, IConCommandBaseAccessor *pAccessor );
+ friend void ConVar_PublishToVXConsole();
+
+ // FIXME: Remove when ConVar changes are done
+ friend class CDefaultCvar;
+
+public:
+ ConCommandBase( void );
+ ConCommandBase( const char *pName, const char *pHelpString = 0,
+ int flags = 0 );
+
+ virtual ~ConCommandBase( void );
+
+ virtual bool IsCommand( void ) const;
+
+ // Check flag
+ virtual bool IsFlagSet( int flag ) const;
+ // Set flag
+ virtual void AddFlags( int flags );
+ // Clear flag
+ virtual void RemoveFlags( int flags );
+
+ virtual int GetFlags() const;
+
+ // Return name of cvar
+ virtual const char *GetName( void ) const;
+
+ // Return help text for cvar
+ virtual const char *GetHelpText( void ) const;
+
+ // Deal with next pointer
+ const ConCommandBase *GetNext( void ) const;
+ ConCommandBase *GetNext( void );
+
+ virtual bool IsRegistered( void ) const;
+
+ // Returns the DLL identifier
+ virtual CVarDLLIdentifier_t GetDLLIdentifier() const;
+
+protected:
+ virtual void Create( const char *pName, const char *pHelpString = 0,
+ int flags = 0 );
+
+ // Used internally by OneTimeInit to initialize/shutdown
+ virtual void Init();
+ void Shutdown();
+
+ // Internal copy routine ( uses new operator from correct module )
+ char *CopyString( const char *from );
+
+private:
+ // Next ConVar in chain
+ // Prior to register, it points to the next convar in the DLL.
+ // Once registered, though, m_pNext is reset to point to the next
+ // convar in the global list
+ ConCommandBase *m_pNext;
+
+ // Has the cvar been added to the global list?
+ bool m_bRegistered;
+
+ // Static data
+ const char *m_pszName;
+ const char *m_pszHelpString;
+
+#define PATCH_CONVAR_H_PUBLIC_FLAGS
+public:
+ // ConVar flags
+ int m_nFlags;
+
+protected:
+ // ConVars add themselves to this list for the executable.
+ // Then ConVar_Register runs through all the console variables
+ // and registers them into a global list stored in vstdlib.dll
+ static ConCommandBase *s_pConCommandBases;
+
+ // ConVars in this executable use this 'global' to access values.
+ static IConCommandBaseAccessor *s_pAccessor;
+};
+
+
+//-----------------------------------------------------------------------------
+// Command tokenizer
+//-----------------------------------------------------------------------------
+class CCommand
+{
+public:
+ CCommand();
+ CCommand( int nArgC, const char **ppArgV );
+ bool Tokenize( const char *pCommand, characterset_t *pBreakSet = NULL );
+ void Reset();
+
+ int ArgC() const;
+ const char **ArgV() const;
+ const char *ArgS() const; // All args that occur after the 0th arg, in string form
+ const char *GetCommandString() const; // The entire command in string form, including the 0th arg
+ const char *operator[]( int nIndex ) const; // Gets at arguments
+ const char *Arg( int nIndex ) const; // Gets at arguments
+
+ // Helper functions to parse arguments to commands.
+ const char* FindArg( const char *pName ) const;
+ int FindArgInt( const char *pName, int nDefaultVal ) const;
+
+ static int MaxCommandLength();
+ static characterset_t* DefaultBreakSet();
+
+private:
+ enum
+ {
+ COMMAND_MAX_ARGC = 64,
+ COMMAND_MAX_LENGTH = 512,
+ };
+
+ int m_nArgc;
+ int m_nArgv0Size;
+ char m_pArgSBuffer[ COMMAND_MAX_LENGTH ];
+ char m_pArgvBuffer[ COMMAND_MAX_LENGTH ];
+ const char* m_ppArgv[ COMMAND_MAX_ARGC ];
+};
+
+inline int CCommand::MaxCommandLength()
+{
+ return COMMAND_MAX_LENGTH - 1;
+}
+
+inline int CCommand::ArgC() const
+{
+ return m_nArgc;
+}
+
+inline const char **CCommand::ArgV() const
+{
+ return m_nArgc ? (const char**)m_ppArgv : NULL;
+}
+
+inline const char *CCommand::ArgS() const
+{
+ return m_nArgv0Size ? &m_pArgSBuffer[m_nArgv0Size] : "";
+}
+
+inline const char *CCommand::GetCommandString() const
+{
+ return m_nArgc ? m_pArgSBuffer : "";
+}
+
+inline const char *CCommand::Arg( int nIndex ) const
+{
+ // FIXME: Many command handlers appear to not be particularly careful
+ // about checking for valid argc range. For now, we're going to
+ // do the extra check and return an empty string if it's out of range
+ if ( nIndex < 0 || nIndex >= m_nArgc )
+ return "";
+ return m_ppArgv[nIndex];
+}
+
+inline const char *CCommand::operator[]( int nIndex ) const
+{
+ return Arg( nIndex );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: The console invoked command
+//-----------------------------------------------------------------------------
+class ConCommand : public ConCommandBase
+{
+friend class CCvar;
+
+public:
+ typedef ConCommandBase BaseClass;
+
+ ConCommand( const char *pName, FnCommandCallbackV1_t callback,
+ const char *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 );
+ ConCommand( const char *pName, FnCommandCallback_t callback,
+ const char *pHelpString = 0, int flags = 0, FnCommandCompletionCallback completionFunc = 0 );
+ ConCommand( const char *pName, ICommandCallback *pCallback,
+ const char *pHelpString = 0, int flags = 0, ICommandCompletionCallback *pCommandCompletionCallback = 0 );
+
+ virtual ~ConCommand( void );
+
+ virtual bool IsCommand( void ) const;
+
+ virtual int AutoCompleteSuggest( const char *partial, CUtlVector< CUtlString > &commands );
+
+ virtual bool CanAutoComplete( void );
+
+ // Invoke the function
+ virtual void Dispatch( const CCommand &command );
+
+private:
+ // NOTE: To maintain backward compat, we have to be very careful:
+ // All public virtual methods must appear in the same order always
+ // since engine code will be calling into this code, which *does not match*
+ // in the mod code; it's using slightly different, but compatible versions
+ // of this class. Also: Be very careful about adding new fields to this class.
+ // Those fields will not exist in the version of this class that is instanced
+ // in mod code.
+
+ // Call this function when executing the command
+ union
+ {
+ FnCommandCallbackV1_t m_fnCommandCallbackV1;
+ FnCommandCallback_t m_fnCommandCallback;
+ ICommandCallback *m_pCommandCallback;
+ };
+
+ union
+ {
+ FnCommandCompletionCallback m_fnCompletionCallback;
+ ICommandCompletionCallback *m_pCommandCompletionCallback;
+ };
+
+ bool m_bHasCompletionCallback : 1;
+ bool m_bUsingNewCommandCallback : 1;
+ bool m_bUsingCommandCallbackInterface : 1;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: A console variable
+//-----------------------------------------------------------------------------
+class ConVar : public ConCommandBase, public IConVar
+{
+friend class CCvar;
+friend class ConVarRef;
+friend class SplitScreenConVarRef;
+
+public:
+ typedef ConCommandBase BaseClass;
+
+ ConVar( const char *pName, const char *pDefaultValue, int flags = 0);
+
+ ConVar( const char *pName, const char *pDefaultValue, int flags,
+ const char *pHelpString );
+ ConVar( const char *pName, const char *pDefaultValue, int flags,
+ const char *pHelpString, bool bMin, float fMin, bool bMax, float fMax );
+ ConVar( const char *pName, const char *pDefaultValue, int flags,
+ const char *pHelpString, FnChangeCallback_t callback );
+ ConVar( const char *pName, const char *pDefaultValue, int flags,
+ const char *pHelpString, bool bMin, float fMin, bool bMax, float fMax,
+ FnChangeCallback_t callback );
+
+ virtual ~ConVar( void );
+
+ virtual bool IsFlagSet( int flag ) const;
+ virtual const char* GetHelpText( void ) const;
+ virtual bool IsRegistered( void ) const;
+ virtual const char *GetName( void ) const;
+ // Return name of command (usually == GetName(), except in case of FCVAR_SS_ADDED vars
+ virtual const char *GetBaseName( void ) const;
+ virtual int GetSplitScreenPlayerSlot() const;
+
+ virtual void AddFlags( int flags );
+ virtual int GetFlags() const;
+ virtual bool IsCommand( void ) const;
+
+ // Install a change callback (there shouldn't already be one....)
+ void InstallChangeCallback( FnChangeCallback_t callback, bool bInvoke = true );
+ void RemoveChangeCallback( FnChangeCallback_t callbackToRemove );
+
+ int GetChangeCallbackCount() const { return m_pParent->m_fnChangeCallbacks.Count(); }
+ FnChangeCallback_t GetChangeCallback( int slot ) const { return m_pParent->m_fnChangeCallbacks[ slot ]; }
+
+ // Retrieve value
+ virtual float GetFloat( void ) const;
+ virtual int GetInt( void ) const;
+ FORCEINLINE_CVAR Color GetColor( void ) const;
+ FORCEINLINE_CVAR bool GetBool() const { return !!GetInt(); }
+ FORCEINLINE_CVAR char const *GetString( void ) const;
+
+ // Compiler driven selection for template use
+ template T Get( void ) const;
+ template T Get( T * ) const;
+
+ // Any function that allocates/frees memory needs to be virtual or else you'll have crashes
+ // from alloc/free across dll/exe boundaries.
+
+ // These just call into the IConCommandBaseAccessor to check flags and set the var (which ends up calling InternalSetValue).
+ virtual void SetValue( const char *value );
+ virtual void SetValue( float value );
+ virtual void SetValue( int value );
+ virtual void SetValue( Color value );
+
+ // Reset to default value
+ void Revert( void );
+
+ // True if it has a min/max setting
+ bool HasMin() const;
+ bool HasMax() const;
+
+ bool GetMin( float& minVal ) const;
+ bool GetMax( float& maxVal ) const;
+
+ float GetMinValue() const;
+ float GetMaxValue() const;
+
+ const char *GetDefault( void ) const;
+
+ // Value
+ struct CVValue_t
+ {
+ char *m_pszString;
+ int m_StringLength;
+
+ // Values
+ float m_fValue;
+ int m_nValue;
+ };
+
+ FORCEINLINE_CVAR CVValue_t &GetRawValue()
+ {
+ return m_Value;
+ }
+ FORCEINLINE_CVAR const CVValue_t &GetRawValue() const
+ {
+ return m_Value;
+ }
+
+private:
+ bool InternalSetColorFromString( const char *value );
+ // Called by CCvar when the value of a var is changing.
+ virtual void InternalSetValue(const char *value);
+ // For CVARs marked FCVAR_NEVER_AS_STRING
+ virtual void InternalSetFloatValue( float fNewValue );
+ virtual void InternalSetIntValue( int nValue );
+ virtual void InternalSetColorValue( Color value );
+
+ virtual bool ClampValue( float& value );
+ virtual void ChangeStringValue( const char *tempVal, float flOldValue );
+
+ virtual void Create( const char *pName, const char *pDefaultValue, int flags = 0,
+ const char *pHelpString = 0, bool bMin = false, float fMin = 0.0,
+ bool bMax = false, float fMax = false, FnChangeCallback_t callback = 0 );
+
+ // Used internally by OneTimeInit to initialize.
+ virtual void Init();
+
+
+
+protected:
+
+ // This either points to "this" or it points to the original declaration of a ConVar.
+ // This allows ConVars to exist in separate modules, and they all use the first one to be declared.
+ // m_pParent->m_pParent must equal m_pParent (ie: m_pParent must be the root, or original, ConVar).
+ ConVar *m_pParent;
+
+ // Static data
+ const char *m_pszDefaultValue;
+
+ CVValue_t m_Value;
+
+ // Min/Max values
+ bool m_bHasMin;
+ float m_fMinVal;
+ bool m_bHasMax;
+ float m_fMaxVal;
+
+ // Call this function when ConVar changes
+ CUtlVector< FnChangeCallback_t > m_fnChangeCallbacks;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a float
+// Output : float
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR float ConVar::GetFloat( void ) const
+{
+#ifdef CONVAR_TEST_MATERIAL_THREAD_CONVARS
+ Assert( ThreadInMainThread() || IsFlagSet( FCVAR_MATERIAL_THREAD_MASK | FCVAR_ACCESSIBLE_FROM_THREADS ) );
+#endif
+ return m_pParent->m_Value.m_fValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an int
+// Output : int
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR int ConVar::GetInt( void ) const
+{
+#ifdef CONVAR_TEST_MATERIAL_THREAD_CONVARS
+ Assert( ThreadInMainThread() || IsFlagSet( FCVAR_MATERIAL_THREAD_MASK | FCVAR_ACCESSIBLE_FROM_THREADS ) );
+#endif
+ return m_pParent->m_Value.m_nValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a color
+// Output : Color
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR Color ConVar::GetColor( void ) const
+{
+#ifdef CONVAR_TEST_MATERIAL_THREAD_CONVARS
+ Assert( ThreadInMainThread() || IsFlagSet( FCVAR_MATERIAL_THREAD_MASK | FCVAR_ACCESSIBLE_FROM_THREADS ) );
+#endif
+ unsigned char *pColorElement = ((unsigned char *)&m_pParent->m_Value.m_nValue);
+ return Color( pColorElement[0], pColorElement[1], pColorElement[2], pColorElement[3] );
+}
+
+
+//-----------------------------------------------------------------------------
+
+template <> FORCEINLINE_CVAR float ConVar::Get( void ) const { return GetFloat(); }
+template <> FORCEINLINE_CVAR int ConVar::Get( void ) const { return GetInt(); }
+template <> FORCEINLINE_CVAR bool ConVar::Get( void ) const { return GetBool(); }
+template <> FORCEINLINE_CVAR const char * ConVar::Get( void ) const { return GetString(); }
+template <> FORCEINLINE_CVAR float ConVar::Get( float *p ) const { return ( *p = GetFloat() ); }
+template <> FORCEINLINE_CVAR int ConVar::Get( int *p ) const { return ( *p = GetInt() ); }
+template <> FORCEINLINE_CVAR bool ConVar::Get( bool *p ) const { return ( *p = GetBool() ); }
+template <> FORCEINLINE_CVAR const char * ConVar::Get( char const **p ) const { return ( *p = GetString() ); }
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
+// Output : const char *
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR const char *ConVar::GetString( void ) const
+{
+#ifdef CONVAR_TEST_MATERIAL_THREAD_CONVARS
+ Assert( ThreadInMainThread() || IsFlagSet( FCVAR_MATERIAL_THREAD_MASK | FCVAR_ACCESSIBLE_FROM_THREADS ) );
+#endif
+ if ( m_nFlags & FCVAR_NEVER_AS_STRING )
+ return "FCVAR_NEVER_AS_STRING";
+
+ char const *str = m_pParent->m_Value.m_pszString;
+ return str ? str : "";
+}
+
+class CSplitScreenAddedConVar : public ConVar
+{
+ typedef ConVar BaseClass;
+public:
+ CSplitScreenAddedConVar( int nSplitScreenSlot, const char *pName, const ConVar *pBaseVar ) :
+ BaseClass
+ (
+ pName,
+ pBaseVar->GetDefault(),
+ // Keep basevar flags, except remove _SS and add _SS_ADDED instead
+ ( pBaseVar->GetFlags() & ~FCVAR_SS ) | FCVAR_SS_ADDED,
+ pBaseVar->GetHelpText(),
+ pBaseVar->HasMin(),
+ pBaseVar->GetMinValue(),
+ pBaseVar->HasMax(),
+ pBaseVar->GetMaxValue()
+ ),
+ m_pBaseVar( pBaseVar ),
+ m_nSplitScreenSlot( nSplitScreenSlot )
+ {
+ for ( int i = 0; i < pBaseVar->GetChangeCallbackCount(); ++i )
+ {
+ InstallChangeCallback( pBaseVar->GetChangeCallback( i ), false );
+ }
+ Assert( nSplitScreenSlot >= 1 );
+ Assert( nSplitScreenSlot < MAX_SPLITSCREEN_CLIENTS );
+ Assert( m_pBaseVar );
+ Assert( IsFlagSet( FCVAR_SS_ADDED ) );
+ Assert( !IsFlagSet( FCVAR_SS ) );
+ }
+
+ const ConVar *GetBaseVar() const;
+ virtual const char *GetBaseName() const;
+ void SetSplitScreenPlayerSlot( int nSlot );
+ virtual int GetSplitScreenPlayerSlot() const;
+
+protected:
+
+ const ConVar *m_pBaseVar;
+ int m_nSplitScreenSlot;
+};
+
+FORCEINLINE_CVAR const ConVar *CSplitScreenAddedConVar::GetBaseVar() const
+{
+ Assert( m_pBaseVar );
+ return m_pBaseVar;
+}
+
+FORCEINLINE_CVAR const char *CSplitScreenAddedConVar::GetBaseName() const
+{
+ Assert( m_pBaseVar );
+ return m_pBaseVar->GetName();
+}
+
+FORCEINLINE_CVAR void CSplitScreenAddedConVar::SetSplitScreenPlayerSlot( int nSlot )
+{
+ m_nSplitScreenSlot = nSlot;
+}
+
+FORCEINLINE_CVAR int CSplitScreenAddedConVar::GetSplitScreenPlayerSlot() const
+{
+ return m_nSplitScreenSlot;
+}
+
+//-----------------------------------------------------------------------------
+// Used to read/write convars that already exist (replaces the FindVar method)
+//-----------------------------------------------------------------------------
+class ConVarRef
+{
+public:
+ ConVarRef( const char *pName );
+ ConVarRef( const char *pName, bool bIgnoreMissing );
+ ConVarRef( IConVar *pConVar );
+
+ void Init( const char *pName, bool bIgnoreMissing );
+ bool IsValid() const;
+ bool IsFlagSet( int nFlags ) const;
+ IConVar *GetLinkedConVar();
+
+ // Get/Set value
+ float GetFloat( void ) const;
+ int GetInt( void ) const;
+ Color GetColor( void ) const;
+ bool GetBool() const { return !!GetInt(); }
+ const char *GetString( void ) const;
+
+ void SetValue( const char *pValue );
+ void SetValue( float flValue );
+ void SetValue( int nValue );
+ void SetValue( Color value );
+ void SetValue( bool bValue );
+
+ const char *GetName() const;
+
+ const char *GetDefault() const;
+
+ const char *GetBaseName() const;
+
+ int GetSplitScreenPlayerSlot() const;
+
+private:
+ // High-speed method to read convar data
+ IConVar *m_pConVar;
+ ConVar *m_pConVarState;
+};
+
+
+//-----------------------------------------------------------------------------
+// Did we find an existing convar of that name?
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR bool ConVarRef::IsFlagSet( int nFlags ) const
+{
+ return ( m_pConVar->IsFlagSet( nFlags ) != 0 );
+}
+
+FORCEINLINE_CVAR IConVar *ConVarRef::GetLinkedConVar()
+{
+ return m_pConVar;
+}
+
+FORCEINLINE_CVAR const char *ConVarRef::GetName() const
+{
+ return m_pConVar->GetName();
+}
+
+FORCEINLINE_CVAR const char *ConVarRef::GetBaseName() const
+{
+ return m_pConVar->GetBaseName();
+}
+
+FORCEINLINE_CVAR int ConVarRef::GetSplitScreenPlayerSlot() const
+{
+ return m_pConVar->GetSplitScreenPlayerSlot();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a float
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR float ConVarRef::GetFloat( void ) const
+{
+ return m_pConVarState->m_Value.m_fValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an int
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR int ConVarRef::GetInt( void ) const
+{
+ return m_pConVarState->m_Value.m_nValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a color
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR Color ConVarRef::GetColor( void ) const
+{
+ return m_pConVarState->GetColor();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR const char *ConVarRef::GetString( void ) const
+{
+ Assert( !IsFlagSet( FCVAR_NEVER_AS_STRING ) );
+ return m_pConVarState->m_Value.m_pszString;
+}
+
+
+FORCEINLINE_CVAR void ConVarRef::SetValue( const char *pValue )
+{
+ m_pConVar->SetValue( pValue );
+}
+
+FORCEINLINE_CVAR void ConVarRef::SetValue( float flValue )
+{
+ m_pConVar->SetValue( flValue );
+}
+
+FORCEINLINE_CVAR void ConVarRef::SetValue( int nValue )
+{
+ m_pConVar->SetValue( nValue );
+}
+
+FORCEINLINE_CVAR void ConVarRef::SetValue( Color value )
+{
+ m_pConVar->SetValue( value );
+}
+
+FORCEINLINE_CVAR void ConVarRef::SetValue( bool bValue )
+{
+ m_pConVar->SetValue( bValue ? 1 : 0 );
+}
+
+FORCEINLINE_CVAR const char *ConVarRef::GetDefault() const
+{
+ return m_pConVarState->m_pszDefaultValue;
+}
+
+//-----------------------------------------------------------------------------
+// Helper for referencing splitscreen convars (i.e., "name" and "name2")
+//-----------------------------------------------------------------------------
+class SplitScreenConVarRef
+{
+public:
+ SplitScreenConVarRef( const char *pName );
+ SplitScreenConVarRef( const char *pName, bool bIgnoreMissing );
+ SplitScreenConVarRef( IConVar *pConVar );
+
+ void Init( const char *pName, bool bIgnoreMissing );
+ bool IsValid() const;
+ bool IsFlagSet( int nFlags ) const;
+
+ // Get/Set value
+ float GetFloat( int nSlot ) const;
+ int GetInt( int nSlot ) const;
+ Color GetColor( int nSlot ) const;
+ bool GetBool( int nSlot ) const { return !!GetInt( nSlot ); }
+ const char *GetString( int nSlot ) const;
+
+ void SetValue( int nSlot, const char *pValue );
+ void SetValue( int nSlot, float flValue );
+ void SetValue( int nSlot, int nValue );
+ void SetValue( int nSlot, Color value );
+ void SetValue( int nSlot, bool bValue );
+
+ const char *GetName( int nSlot ) const;
+
+ const char *GetDefault() const;
+
+ const char *GetBaseName() const;
+
+private:
+ struct cv_t
+ {
+ IConVar *m_pConVar;
+ ConVar *m_pConVarState;
+ };
+
+ cv_t m_Info[ MAX_SPLITSCREEN_CLIENTS ];
+};
+
+//-----------------------------------------------------------------------------
+// Did we find an existing convar of that name?
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR bool SplitScreenConVarRef::IsFlagSet( int nFlags ) const
+{
+ return ( m_Info[ 0 ].m_pConVar->IsFlagSet( nFlags ) != 0 );
+}
+
+FORCEINLINE_CVAR const char *SplitScreenConVarRef::GetName( int nSlot ) const
+{
+ return m_Info[ nSlot ].m_pConVar->GetName();
+}
+
+FORCEINLINE_CVAR const char *SplitScreenConVarRef::GetBaseName() const
+{
+ return m_Info[ 0 ].m_pConVar->GetBaseName();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a float
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR float SplitScreenConVarRef::GetFloat( int nSlot ) const
+{
+ return m_Info[ nSlot ].m_pConVarState->m_Value.m_fValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an int
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR int SplitScreenConVarRef::GetInt( int nSlot ) const
+{
+ return m_Info[ nSlot ].m_pConVarState->m_Value.m_nValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an int
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR Color SplitScreenConVarRef::GetColor( int nSlot ) const
+{
+ return m_Info[ nSlot ].m_pConVarState->GetColor();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
+//-----------------------------------------------------------------------------
+FORCEINLINE_CVAR const char *SplitScreenConVarRef::GetString( int nSlot ) const
+{
+ Assert( !IsFlagSet( FCVAR_NEVER_AS_STRING ) );
+ return m_Info[ nSlot ].m_pConVarState->m_Value.m_pszString;
+}
+
+
+FORCEINLINE_CVAR void SplitScreenConVarRef::SetValue( int nSlot, const char *pValue )
+{
+ m_Info[ nSlot ].m_pConVar->SetValue( pValue );
+}
+
+FORCEINLINE_CVAR void SplitScreenConVarRef::SetValue( int nSlot, float flValue )
+{
+ m_Info[ nSlot ].m_pConVar->SetValue( flValue );
+}
+
+FORCEINLINE_CVAR void SplitScreenConVarRef::SetValue( int nSlot, int nValue )
+{
+ m_Info[ nSlot ].m_pConVar->SetValue( nValue );
+}
+
+FORCEINLINE_CVAR void SplitScreenConVarRef::SetValue( int nSlot, Color value )
+{
+ m_Info[ nSlot ].m_pConVar->SetValue( value );
+}
+
+FORCEINLINE_CVAR void SplitScreenConVarRef::SetValue( int nSlot, bool bValue )
+{
+ m_Info[ nSlot ].m_pConVar->SetValue( bValue ? 1 : 0 );
+}
+
+FORCEINLINE_CVAR const char *SplitScreenConVarRef::GetDefault() const
+{
+ return m_Info[ 0 ].m_pConVarState->m_pszDefaultValue;
+}
+
+//-----------------------------------------------------------------------------
+// Called by the framework to register ConCommands with the ICVar
+//-----------------------------------------------------------------------------
+void ConVar_Register( int nCVarFlag = 0, IConCommandBaseAccessor *pAccessor = NULL );
+void ConVar_Unregister( );
+
+
+//-----------------------------------------------------------------------------
+// Utility methods
+//-----------------------------------------------------------------------------
+void ConVar_PrintDescription( const ConCommandBase *pVar );
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Utility class to quickly allow ConCommands to call member methods
+//-----------------------------------------------------------------------------
+#ifdef _MSC_VER
+#pragma warning (disable : 4355 )
+#endif
+
+template< class T >
+class CConCommandMemberAccessor : public ConCommand, public ICommandCallback, public ICommandCompletionCallback
+{
+ typedef ConCommand BaseClass;
+ typedef void ( T::*FnMemberCommandCallback_t )( const CCommand &command );
+ typedef int ( T::*FnMemberCommandCompletionCallback_t )( const char *pPartial, CUtlVector< CUtlString > &commands );
+
+public:
+ CConCommandMemberAccessor( T* pOwner, const char *pName, FnMemberCommandCallback_t callback, const char *pHelpString = 0,
+ int flags = 0, FnMemberCommandCompletionCallback_t completionFunc = 0 ) :
+ BaseClass( pName, this, pHelpString, flags, ( completionFunc != 0 ) ? this : NULL )
+ {
+ m_pOwner = pOwner;
+ m_Func = callback;
+ m_CompletionFunc = completionFunc;
+ }
+
+ ~CConCommandMemberAccessor()
+ {
+ Shutdown();
+ }
+
+ void SetOwner( T* pOwner )
+ {
+ m_pOwner = pOwner;
+ }
+
+ virtual void CommandCallback( const CCommand &command )
+ {
+ Assert( m_pOwner && m_Func );
+ (m_pOwner->*m_Func)( command );
+ }
+
+ virtual int CommandCompletionCallback( const char *pPartial, CUtlVector< CUtlString > &commands )
+ {
+ Assert( m_pOwner && m_CompletionFunc );
+ return (m_pOwner->*m_CompletionFunc)( pPartial, commands );
+ }
+
+private:
+ T* m_pOwner;
+ FnMemberCommandCallback_t m_Func;
+ FnMemberCommandCompletionCallback_t m_CompletionFunc;
+};
+
+#ifdef _MSC_VER
+#pragma warning ( default : 4355 )
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Utility macros to quicky generate a simple console command
+//-----------------------------------------------------------------------------
+#define CON_COMMAND( name, description ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description ); \
+ static void name( const CCommand &args )
+
+#ifdef CLIENT_DLL
+ #define CON_COMMAND_SHARED( name, description ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command_client( #name "_client", name, description ); \
+ static void name( const CCommand &args )
+#else
+ #define CON_COMMAND_SHARED( name, description ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description ); \
+ static void name( const CCommand &args )
+#endif
+
+
+#define CON_COMMAND_F( name, description, flags ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description, flags ); \
+ static void name( const CCommand &args )
+
+#ifdef CLIENT_DLL
+ #define CON_COMMAND_F_SHARED( name, description, flags ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command_client( #name "_client", name, description, flags ); \
+ static void name( const CCommand &args )
+#else
+ #define CON_COMMAND_F_SHARED( name, description, flags ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description, flags ); \
+ static void name( const CCommand &args )
+#endif
+
+
+#define CON_COMMAND_F_COMPLETION( name, description, flags, completion ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description, flags, completion ); \
+ static void name( const CCommand &args )
+
+#ifdef CLIENT_DLL
+ #define CON_COMMAND_F_COMPLETION_SHARED( name, description, flags, completion ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command_client( #name "_client", name, description, flags, completion ); \
+ static void name( const CCommand &args )
+#else
+ #define CON_COMMAND_F_COMPLETION_SHARED( name, description, flags, completion ) \
+ static void name( const CCommand &args ); \
+ static ConCommand name##_command( #name, name, description, flags, completion ); \
+ static void name( const CCommand &args )
+#endif
+
+
+#define CON_COMMAND_EXTERN( name, _funcname, description ) \
+ void _funcname( const CCommand &args ); \
+ static ConCommand name##_command( #name, _funcname, description ); \
+ void _funcname( const CCommand &args )
+
+#define CON_COMMAND_EXTERN_F( name, _funcname, description, flags ) \
+ void _funcname( const CCommand &args ); \
+ static ConCommand name##_command( #name, _funcname, description, flags ); \
+ void _funcname( const CCommand &args )
+
+#define CON_COMMAND_MEMBER_F( _thisclass, name, _funcname, description, flags ) \
+ void _funcname( const CCommand &args ); \
+ friend class CCommandMemberInitializer_##_funcname; \
+ class CCommandMemberInitializer_##_funcname \
+ { \
+ public: \
+ CCommandMemberInitializer_##_funcname() : m_ConCommandAccessor( NULL, name, &_thisclass::_funcname, description, flags ) \
+ { \
+ m_ConCommandAccessor.SetOwner( GET_OUTER( _thisclass, m_##_funcname##_register ) ); \
+ } \
+ private: \
+ CConCommandMemberAccessor< _thisclass > m_ConCommandAccessor; \
+ }; \
+ \
+ CCommandMemberInitializer_##_funcname m_##_funcname##_register; \
+
+
+#endif // CONVAR_H