TTT grenades consist of two parts: a SWEP and a projectile.
For example, the incendiary grenade SWEP is in:
/terrortown/entities/weapons/weapon_zm_molotov/
shared.luaIt uses weapon_tttbasegrenade as its SWEP.Base, and that base does most of the work. The incendiary weapon really just sets its model and stuff, as well as SWEP:GetGrenadeName(), which specifies what projectile the SWEP should throw.
When a grenade SWEP is "fired", it creates the SENT named by GetGrenadeName and propels it forward. All grenades do this, so if you look at the SWEPs for the discomb or smoke grenade, they only differ in the model stuff and which SENT they throw. The grenade base takes care of all the throwing and stuff.
If you checked the incendiary SWEP, you will have noted its projectile is set as "ttt_firegrenade_proj", which is here:
/terrortown/entities/entities/ttt_firegrenade_proj/
shared.luaAgain, most of the work is done in the entity's base class, in this case ttt_basegrenade_proj. All a grenade projectile SENT does is specify how it looks and how it should explode. The explosion is created in ENT:Explode(tr), where "tr" is a trace towards the ground that the grenade is lying on (for effects). The incendiary projectile checks some things, creates some effects, and creates fire entities.
So, to create or port a new grenade, you can copy one of the existing grenade SWEPs and just change the name/model/etc. Then you put the name of the grenade projectile entity you're about to make in the GetGrenadeName function. That's it for the SWEP. You then copy one of the existing grenade projectile SENTs and again change name, model, the works. Lastly, you change ENT:Explode to create the explosion you want. If you're porting a grenade, this will hopefully just be a copy/paste job.
That should be it. It should be as easy as creating bog standard TTT guns, only the explosion part requires some Lua work.