Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
4a1658d
Port AI node graph nodes, links and network
ZehMatt Oct 11, 2026
5bd245e
Load the AI node graph from the map's .ain file
ZehMatt Oct 11, 2026
06949cf
Refactor the loading, avoid copying the entire data, make it testable
ZehMatt Oct 11, 2026
2f9474c
Replace schedule text parsing with typed schedule definitions
ZehMatt Oct 11, 2026
5e0be2f
Initialize the AI network manager through DelayedInit like the SDK
ZehMatt Oct 11, 2026
aa967a0
Port node entity spawning for loaded AI graphs
ZehMatt Oct 11, 2026
db85c10
Port AI dynamic links and link controllers
ZehMatt Oct 11, 2026
847356d
Port AI node per-hull positions and hint slot
ZehMatt Oct 11, 2026
4a70081
Port NPC step height and stand-on checks
ZehMatt Oct 11, 2026
f020629
Port CAI_MoveProbe::CheckStandPosition
ZehMatt Oct 11, 2026
7308d7c
Port navigator CanFitAtNode and CanFitAtPosition
ZehMatt Oct 11, 2026
d857afb
Port NPC unusable node check and hint groups
ZehMatt Oct 11, 2026
eaa32a8
Port AI network NearestNodeToPoint and node cache
ZehMatt Oct 11, 2026
5b2bf1b
Port AI move result types and route distance helpers
ZehMatt Oct 11, 2026
b49b0d2
Port nav ignore and NPC jump legality helpers
ZehMatt Oct 11, 2026
a4deea8
Fix StopwatchBase Expired ignoring running state
ZehMatt Oct 11, 2026
b71a580
Fix FVisible missing ai_ignoreplayers check for NPCs
ZehMatt Oct 11, 2026
3ff10d5
Fix GetStoppedActivity ignoring arrival activity
ZehMatt Oct 11, 2026
c122f93
Fix unregistered AI_BaseNPC hearing and lost-enemy outputs
ZehMatt Oct 11, 2026
3a2c009
Port studio movement data and sequence velocity queries
ZehMatt Oct 11, 2026
5636f28
Port quadratic solver and infinite ray sphere intersection
ZehMatt Oct 11, 2026
c6cf914
Port entity movement and collision helpers used by AI
ZehMatt Oct 11, 2026
e5b8581
Port move probe move limits and local move goal types
ZehMatt Oct 11, 2026
00e16f5
Port AI path and waypoint list
ZehMatt Oct 11, 2026
b253f22
Port node link shuffling, floor height and hint types
ZehMatt Oct 11, 2026
b7aa2de
Port AI pathfinder
ZehMatt Oct 11, 2026
b9ea790
Port AI move solver and plane solver
ZehMatt Oct 11, 2026
8e60b86
Port AI local navigator and movement sink
ZehMatt Oct 11, 2026
c23c3ef
Port AI motor
ZehMatt Oct 11, 2026
26df811
Port AI navigator
ZehMatt Oct 11, 2026
45f23a9
Port NPC navigation hooks and movement tasks
ZehMatt Oct 11, 2026
f1dba97
Port behavior host bridges and behavior schedules
ZehMatt Oct 11, 2026
fed4aff
Port AI senses and NPC sensing
ZehMatt Oct 11, 2026
40c3d08
Port NPC enemy memory and enemy selection
ZehMatt Oct 11, 2026
a72316b
Port AI sentence queue and NPC sound timing
ZehMatt Oct 11, 2026
8b96dd3
Fix OnScheduleChange missing goal and sound cleanup
ZehMatt Oct 11, 2026
1e78d71
Port ai_goal_police and policing behavior
ZehMatt Oct 11, 2026
ae6e069
Rename hl2 game directory to sdn and add skill cfgs
ZehMatt Oct 11, 2026
5d9a5b3
Port NPC facing, sequence, chase path and turn tasks
ZehMatt Oct 11, 2026
95a5db8
Port npc_metropolice schedules, tasks, sentences and anim events
ZehMatt Oct 11, 2026
c312073
Port default AI relationships and player classification
ZehMatt Oct 11, 2026
ee3448d
Port scripted_sequence and NPC script tasks
ZehMatt Oct 12, 2026
68e76c2
Port NPC death schedule, die task and ragdoll handoff
ZehMatt Oct 12, 2026
d88c1e5
Port RefreshSkillData skill cfg execution
ZehMatt Oct 12, 2026
72a6d8f
Fix shared activities missing from the activity remap database
ZehMatt Oct 12, 2026
290c27d
Port physics_npc_solver
ZehMatt Oct 12, 2026
241ac23
Fix VPhysicsUpdate not touching triggers or relinking children
ZehMatt Oct 12, 2026
a968b42
Port AI hint system and info_node_hint spawning
ZehMatt Oct 12, 2026
759a48d
Port AI goal entity base class
ZehMatt Oct 12, 2026
8200a4b
Port act busy behavior and ai_goal_actbusy
ZehMatt Oct 12, 2026
82f3a66
Port engine trace GetCollideable
ZehMatt Oct 12, 2026
c19643f
Port breakable prop physgun pickup and pickup outputs
ZehMatt Oct 12, 2026
55fe0bb
Port AI shot regulator and move-and-shoot overlay
ZehMatt Oct 12, 2026
c217bbb
Rename Animevent to AnimEventId
ZehMatt Oct 12, 2026
8054798
Scrap this idiotic GetInteractionID system
ZehMatt Oct 12, 2026
3babb54
Simplify schedule class names using nameof
ZehMatt Oct 12, 2026
4bc4538
Fix PostRunStopMoving skipping the stopping path
ZehMatt Oct 12, 2026
ec50283
Port NPC helpers used by player allies
ZehMatt Oct 12, 2026
a4e8887
Port AI_PlayerAlly without speech
ZehMatt Oct 12, 2026
f4183be
Port NPC_PlayerCompanion schedule core
ZehMatt Oct 12, 2026
a8b954e
Port npc_citizen
ZehMatt Oct 12, 2026
4cd98e4
Fix template NPCs spawning instead of being stored
ZehMatt Oct 12, 2026
21e7fa3
Fix owner death notices for removed characters
ZehMatt Oct 12, 2026
dfcdde1
Port npc_maker and npc_template_maker
ZehMatt Oct 12, 2026
afe3c86
Report inaccessible field accessor types as compile errors
ZehMatt Oct 12, 2026
c4b46e9
Fix keyfields using private enum types
ZehMatt Oct 12, 2026
184679d
Port instanced scenes for actor expressions
ZehMatt Oct 12, 2026
0bd3887
Port ai_goal_actbusy_queue
ZehMatt Oct 12, 2026
0f6396a
Port TASK_MOVE_AWAY_PATH
ZehMatt Oct 12, 2026
d7f8598
Port citizen package activity tables
ZehMatt Oct 12, 2026
0b251bd
Port WorldSpaceSlerp
ZehMatt Oct 12, 2026
e77a5ab
Put back the lost AggressiveInlining
ZehMatt Oct 12, 2026
2b632bb
Fix bad loop using Util.PlayerByIndex
ZehMatt Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore

# Source .VPK files. Mklink them if you want them.
Game.Assets/hl2/*.vpk
Game.Assets/sdn/*.vpk
datatables_dump/*

# User-specific files
Expand Down Expand Up @@ -400,18 +400,18 @@ FodyWeavers.xsd

# JetBrains Rider
*.sln.iml
Game.Assets/hl2/steam.inf
Game.Assets/hl2/maps/*
Game.Assets/hl2/scripts
Game.Assets/hl2/maps
Game.Assets/sdn/steam.inf
Game.Assets/sdn/maps/*
Game.Assets/sdn/scripts
Game.Assets/sdn/maps
Game.Assets/platform
Game.Assets/sourceengine
Game.Assets/hl2/cfg/autoexec.cfg
Game.Assets/sdn/cfg/autoexec.cfg
Game.Assets/**/*_bak/
Game.Assets/hl2/resource
Game.Assets/sdn/resource
Source.Launcher/Properties/launchSettings.json
/.idea
Source.DataDescGen/
Game.Assets/hl2/cache/workshop
Game.Assets/hl2/gamemodes
Game.Assets/hl2/lua
Game.Assets/sdn/cache/workshop
Game.Assets/sdn/gamemodes
Game.Assets/sdn/lua
22 changes: 11 additions & 11 deletions Game.Assets/Assets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,31 @@ public static void CheckRequired() {

public static List<AssetMapping> GetRequiredAssets() {
List<AssetMapping> list = [
new("hl2/steam.inf", "garrysmod/steam.inf"),
new("sdn/steam.inf", "garrysmod/steam.inf"),
new("sourceengine", "sourceengine", IsDirectory: true),
new("platform", "platform", IsDirectory: true),
new("hl2/maps", "garrysmod/maps", IsDirectory: true),
new("hl2/materials", "garrysmod/materials", IsDirectory: true),
new("hl2/resource", "garrysmod/resource", IsDirectory: true),
new("hl2/scenes", "garrysmod/scenes", IsDirectory: true),
new("sdn/maps", "garrysmod/maps", IsDirectory: true),
new("sdn/materials", "garrysmod/materials", IsDirectory: true),
new("sdn/resource", "garrysmod/resource", IsDirectory: true),
new("sdn/scenes", "garrysmod/scenes", IsDirectory: true),
#if GMOD_DLL
new("hl2/gamemodes", "garrysmod/gamemodes", IsDirectory: true),
new("hl2/lua", "garrysmod/lua", IsDirectory: true),
new("sdn/gamemodes", "garrysmod/gamemodes", IsDirectory: true),
new("sdn/lua", "garrysmod/lua", IsDirectory: true),
#endif
new("hl2/cache/workshop", "garrysmod/cache/workshop", IsDirectory: true, Optional: false),
new("hl2/settings", "garrysmod/settings", IsDirectory: true)
new("sdn/cache/workshop", "garrysmod/cache/workshop", IsDirectory: true, Optional: false),
new("sdn/settings", "garrysmod/settings", IsDirectory: true)
];

string[] specificGmodVpks = ["dir", "000", "001", "002"];
foreach (var suffix in specificGmodVpks)
list.Add(new($"hl2/garrysmod_{suffix}.vpk", $"garrysmod/garrysmod_{suffix}.vpk"));
list.Add(new($"sdn/garrysmod_{suffix}.vpk", $"garrysmod/garrysmod_{suffix}.vpk"));

return list;
}

public static List<AssetMapping> GetOptionalAssets() {
return [
new("hl2/cfg/autoexec.cfg", "garrysmod/cfg/autoexec.cfg", Optional: true)
new("sdn/cfg/autoexec.cfg", "garrysmod/cfg/autoexec.cfg", Optional: true)
];
}

Expand Down
2 changes: 1 addition & 1 deletion Game.Assets/Game.Assets.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<ProjectReference Include="..\Source.GUI.Controls\Source.GUI.Controls.csproj" />
</ItemGroup>
<ItemGroup>
<Content Include="**\*" Exclude="**\*.cs;**\*.csproj;obj\**;bin\**;**\*_bak\**;sourceengine\**;platform\**;hl2\resource\**;hl2\gamemodes\**;hl2\lua\**;hl2\cache\workshop\**;hl2\maps\**;hl2\steam.inf;hl2\garrysmod_*.vpk;hl2\cfg\autoexec.cfg" CopyToOutputDirectory="PreserveNewest" />
<Content Include="**\*" Exclude="**\*.cs;**\*.csproj;obj\**;bin\**;**\*_bak\**;sourceengine\**;platform\**;sdn\resource\**;sdn\gamemodes\**;sdn\lua\**;sdn\cache\workshop\**;sdn\maps\**;sdn\steam.inf;sdn\garrysmod_*.vpk;sdn\cfg\autoexec.cfg" CopyToOutputDirectory="PreserveNewest" />
<None Remove="@(Content)" />
</ItemGroup>

Expand Down
274 changes: 274 additions & 0 deletions Game.Assets/sdn/cfg/skill.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
// ===========
// NPCs
// ============
// Barnacle
sk_barnacle_health "35"

// Barney
sk_barney_health "35"

// Bullseye
sk_bullseye_health "35"

// Bullsquid
//sk_bullsquid_health "120"
//sk_bullsquid_dmg_bite "15"
//sk_bullsquid_dmg_whip "25"

// Citizen
sk_citizen_health "40"

// Combine Soldier
sk_combine_s_health "50"
sk_combine_s_kick "10"

// Combine Guard
sk_combine_guard_health "70"
sk_combine_guard_kick "15"

// strider
sk_strider_health "350"
sk_strider_num_missiles1 "5"
sk_strider_num_missiles2 "7"
sk_strider_num_missiles3 "7"

// Headcrab
sk_headcrab_health "10"
sk_headcrab_melee_dmg "5"

// Fast Headcrab
sk_headcrab_fast_health "10"

// Poison Headcrab
sk_headcrab_poison_health "35"

// Houndeye
//sk_houndeye_health "80"
//sk_houndeye_dmg_blast "25"

// Manhack
sk_manhack_health "25"
sk_manhack_melee_dmg "20"

// Metropolice
sk_metropolice_health "40"
sk_metropolice_stitch_reaction "1.0"
sk_metropolice_stitch_tight_hitcount "2"
sk_metropolice_stitch_at_hitcount "1"
sk_metropolice_stitch_behind_hitcount "3"
sk_metropolice_stitch_along_hitcount "2"

// Rollermine
sk_rollermine_shock "10"
sk_rollermine_stun_delay "3"
sk_rollermine_vehicle_intercept "1"

// Scanner (City)
sk_scanner_health "30"
sk_scanner_dmg_dive "25"

// Stalker
sk_stalker_health "50"
sk_stalker_melee_dmg "5"

// Vortigaunt
sk_vortigaunt_health "100"
sk_vortigaunt_dmg_claw "10"
sk_vortigaunt_dmg_rake "25"
sk_vortigaunt_dmg_zap "50"
sk_vortigaunt_armor_charge "30"

// Zombie
sk_zombie_health "50"
sk_zombie_dmg_one_slash "10"
sk_zombie_dmg_both_slash "25"

// Poison Zombie
sk_zombie_poison_health "175"
sk_zombie_poison_dmg_spit "20"

//Antlion
sk_antlion_health "30"
sk_antlion_swipe_damage "5"
sk_antlion_jump_damage "5"

//Antlion Guard
sk_antlionguard_health "500"
sk_antlionguard_dmg_charge "20"
sk_antlionguard_dmg_shove "10"

//Antlion Grub
//sk_antliongrub_health "5"

//Ichthyosaur
sk_ichthyosaur_health "200"
sk_ichthyosaur_melee_dmg "8"
sk_ichthyosaur_shake "20"

// Combine Gunship
sk_gunship_burst_size "15"
sk_gunship_health_increments "5"
sk_npc_dmg_gunship "40"
sk_npc_dmg_gunship_to_plr "3"

// Combine Helicopter
sk_npc_dmg_helicopter "6"
sk_npc_dmg_helicopter_to_plr "3"
sk_helicopter_grenadedamage "30"
sk_helicopter_grenaderadius "275"
sk_helicopter_grenadeforce "55000"

// Combine Dropship
sk_npc_dmg_dropship "2"

// Combine APC
sk_apc_health "750"


// =================
// WEAPONS
// =================

sk_plr_dmg_ar2 "8"
sk_npc_dmg_ar2 "3"
sk_max_ar2 "60"
sk_max_ar2_altfire "3"

sk_plr_dmg_alyxgun "5"
sk_npc_dmg_alyxgun "3"
sk_max_alyxgun "150"

sk_plr_dmg_pistol "5"
sk_npc_dmg_pistol "3"
sk_max_pistol "150"

sk_plr_dmg_smg1 "4"
sk_npc_dmg_smg1 "3"
sk_max_smg1 "225"

sk_plr_dmg_buckshot "8"
sk_npc_dmg_buckshot "3"
sk_max_buckshot "30"

sk_plr_dmg_rpg_round "100"
sk_npc_dmg_rpg_round "50"
sk_max_rpg_round "3"

sk_plr_dmg_smg1_grenade "100"
sk_npc_dmg_smg1_grenade "50"
sk_max_smg1_grenade "3"
sk_smg1_grenade_radius "250"

//sk_plr_dmg_gauss "25"
//sk_plr_max_dmg_gauss "30"

sk_plr_dmg_sniper_round "20"
sk_npc_dmg_sniper_round "100"
sk_max_sniper_round "30"

sk_plr_dmg_357 "40"
sk_npc_dmg_357 "30"
sk_max_357 "12"

sk_plr_dmg_crossbow "100"
sk_npc_dmg_crossbow "10"
sk_max_crossbow "10"

sk_plr_dmg_airboat "3"
sk_npc_dmg_airboat "3"

//sk_dmg_sniper_penetrate_plr "10"
//sk_dmg_sniper_penetrate_npc "100"

sk_plr_dmg_grenade "150"
sk_npc_dmg_grenade "75"
sk_max_grenade "5"

sk_plr_dmg_crowbar "10"
sk_npc_dmg_crowbar "5"

sk_plr_dmg_stunstick "10"
sk_npc_dmg_stunstick "40" // Kill a citizen in one hit

//sk_plr_dmg_satchel "150"
//sk_npc_dmg_satchel "75"
//sk_satchel_radius "150"

// Mortar Synth projectile
//sk_dmg_energy_grenade "2"
//sk_energy_grenade_radius "100"

sk_dmg_homer_grenade "20"
sk_homer_grenade_radius "100"

// Bullsquid spit
//sk_dmg_spit_grenade "5"
//sk_spit_grenade_radius "50"

//sk_plr_dmg_tripmine "150"
//sk_npc_dmg_tripmine "125"
//sk_tripmine_radius "200"

sk_plr_dmg_fraggrenade "125"
sk_npc_dmg_fraggrenade "75"
sk_fraggrenade_radius "250"

// HEALTH/SUIT CHARGE DISTRIBUTION
sk_suitcharger "75"
sk_suitcharger_citadel "500"
sk_suitcharger_citadel_maxarmor "200"
sk_battery "15"
sk_healthcharger "50"
sk_healthkit "25"
sk_healthvial "10"

// Combine balls
sk_combineball_seek_angle "15"
sk_combineball_guidefactor "1.0"

// NPC damage adjusters
sk_npc_head "3"
sk_npc_chest "1"
sk_npc_stomach "1"
sk_npc_arm "1"
sk_npc_leg "1"

// player damage adjusters
sk_player_head "3"
sk_player_chest "1"
sk_player_stomach "1"
sk_player_arm "1"
sk_player_leg "1"

// Allies
sk_ally_regen_time "0.2"

// Jeep
sk_max_gauss_round "30"


ai_enable_fear_behavior "1"

// zombine
sk_zombie_soldier_health "100"

// Episodic APC - Experimental
sk_apc_missile_damage "50"

// Antlion air attack
sk_antlion_air_attack_dmg "10"

// Antlion worker
sk_antlion_worker_spit_speed "600"
sk_antlion_worker_health "60"

// Vortigaunt charge limit
sk_vortigaunt_armor_charge "15"
sk_vortigaunt_armor_charge_per_token "5"
sk_vortigaunt_dmg_zap "25"

// Poison headcrab
sk_headcrab_poison_npc_damage "20.0"

// advisor
sk_advisor_health "1000"
1 change: 1 addition & 0 deletions Game.Assets/sdn/cfg/skill_manifest.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exec skill.cfg
File renamed without changes.
6 changes: 3 additions & 3 deletions Game.Assets/hl2/gameinfo.txt → Game.Assets/sdn/gameinfo.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

SearchPaths
{
game+mod hl2/garrysmod.vpk
game+mod sdn/garrysmod.vpk

game |all_source_engine_paths|sourceengine/hl2_textures.vpk
game |all_source_engine_paths|sourceengine/hl2_sound_vo_english.vpk
Expand All @@ -26,12 +26,12 @@

mod+mod_write+default_write_path |gameinfo_path|.

game+game_write hl2
game+game_write sdn

game |all_source_engine_paths|sourceengine
platform |all_source_engine_paths|platform

game+download hl2/download
game+download sdn/download
}
}
}
Loading
Loading