Invasion RPG ---VERY early development

Been working on a gamemode designed around unreal tournaments 2004’s invasion rpg.


The only screenshot i have atm is the leveling system output (will make all of this silent when this is ready for release it is just there to make sure leveling up works as intended) 024x768&size_mode=2

This is the biggest project i have undertaken and it is already pushing what i know about lua to its max so any encouragement will be welcome

I am looking for anyone who would be willing to be a part of this project, i am planning on putting this on github to allow anyone to make suggestions and post bug reports.

This will be a FREE release. Most of what i code i sell to cover server costs but i know this would NEVER take off if i sold it. (probably won’t anyways with the amount of people who don’t care about new gamemodes )


  • Leveling (experience based on damage dealt)
  • Skill Saving (no way to input skill points yet)
  • Networking the skills
  • Very basic hud

Currently working skills

  • Shot Speed (100 shotspeed bonus = 2x shot speed [sp]Max[/sp])
  • Bonus health

Things to complete

  • Weapons
  • Skill Point menu
  • Monster Spawning
  • Weapon modifiers/ powerups
  • Class system
  • Multiple accounts

Skills to implement

  • Bonus ammo
  • Vampirism
  • Adrenaline system (mana) to use relics
  • Passive regen


– Figured out how to get random locations on the map to spawn npcs


ToDo Skill point allocation menu Wave system needs to fine tuned HUD! Work out the best way to spawn npcs (currently using navmesh box centers to find good spots)

Wave System Completed (mostly im sure i will add more to it in the future)
Wave will not progress unless all npcs(that were spawned by invation and not the map) are dead

If you have no content to show, why make a thread this early? Oh and you spelt ‘Experience’ wrong too.

it is spelled exactly like you spelled it?
oh in the image, like isaid just debugging output


This is also to force motivation, if people look forward to this i will be more likely to push forward and get this done.

Will NPCs have their own types of stats or will their damage,damage reduction and health scale off of the lowest level player like the RPG mutator did? Personally that was a pretty bullshit thing since it made the presence of low level players necessary to make things actually killable.

But anyway, if your motivation is genuine I wish you the best with that project as it’s gonna require a lot of work, IIRC even the RPG mutator had lots of hacky stuff to make everything work.

Planning on scaling the monsters lvls by lowest lvl player but i can make a config option for that its not hard.

and the great thing about gmod is the fact that lua and gmod are made to be edited, unreal tournament had some pretty set in stone rules

I’m looking forward to this much more than I ought to be.

i’m debating on if i should learn how to make nextbot monsters for this or if i should make node monsters.

I have next to no experience with npcs so anyone willing to work on npcs would be great :wink:

You should

nextbots would be smarter… if they are made smarter XD but then that would require all maps used by the gamemode to have nav meshes. (very few maps do) using preexisting maps is what i was really hoping for

You can use navmeshes for just about any map. They are a separate file from the map, and are generated by the engine after compile. In Gmod you have to do this manually, but CS:S to my knowledge does it automatically.

sadly they have to be navgened prior players actually wanting to join, this gamemode is ment to be played on way more then 1 map so you would have to generate a navmesh for every map you wanted to use it on

Going to have to get back on this. I took a break from it in order to work on my own servers but i dont have a whole lot to work on for my servers atm so it looks like i will mess with this again.

If anyone is interested in coding some npcs to go with this i would be grateful

looks pretty nice.
me like.

Just got finished networking all the skills data (first time really messing with networkvar…)

and put in a VERY basic hud (just a place holder for now)|1024:576&composite-to=,|1024:576&background-color=black

experience saves and loads between sessions now just have get the skills menu implemented and il be in the home stretch for early alpha testing :slight_smile:

i have not done a whole lot on this since i announced it and today was my first day working on this directly

(though i did code a few things i will be using in this for my personal servers)

The network variables for the player. (hope i did this right its the first time iv used it)
function Class:SetupDataTables()
self.Player:NetworkVar(“Int”, 0, “Exper”)
self.Player:NetworkVar(“Int”, 1, “BonusHealth”)
self.Player:NetworkVar(“Int”, 2, “ShotSpeed”)
self.Player:NetworkVar(“Int”, 3, “BonusAmmo”)
self.Player:NetworkVar(“Int”, 4, “DamageBonus”)
self.Player:NetworkVar(“Int”, 5, “Lvl”)
self.Player:NetworkVar(“Int”, 6, “Sp”) --available skill points
Is this the proper way to do this? i feel this is alot more efficient then making a nwint for each one

any ideas on how to determine where the monsters spawn?

Just to decide on exactly what to do or is it a code-wise issue?

code ideas, currently my idea is to trace outwards from the player to a wall if there is enough distance (buffer zone of a none firm 500?) pick a spot after 500 but before the wall, make sure that the location is in the world then spawn?

What I do is set spawn entities around the map, and pick the spawn that is closest to a player and is not in their direct line of sight ( behind a wall )

yes but the issue with that is then there would be map setup for every map, with this gamemode it is suppose to be playable on just about any map

[editline]13th December 2015[/editline]

i think i actually have an idea, since im already going to require all maps to have a navmesh i will get the centers of all nav areas and store those in a table, from there i have a list of possible locations

local function getnavareaspawns()
inv.possiblespawns = {}
timer.Simple(1, function( )
for k, v in pairs(navmesh.GetAllNavAreas()) do
–if v:GetCenter().y <= 200 and v:GetCenter().y >= -200 then
table.insert(inv.possiblespawns, v:GetCenter())
hook.Add(“Initialize”, “getnavarea”, getnavareaspawns)

function GM:InitPostEntity()
timer.Create(“spawnstuff” , 3 , 0, findspawnpoints)
function findspawnpoints()
local spawnpoint = table.Random(inv.possiblespawns)

local testent = ents.Create("npc_antlion")



Worked like a charm :slight_smile: now to just do a trace on all spawn points to check that an ent can actually spawn there and optimize it