The bits to add.

g_cmds.c:

        if (Q_stricmp (cmd, "use") == 0)
                Cmd_Use_f (ent);
//GRAPPLY BIT
        else if (Q_stricmp(cmd, "hook") == 0) {
                if (strcmp (ent->client->pers.weapon->classname, "weapon_grapple")) {
                        CTFWeapon_Grapple_Fire (ent);
                }
        } else if (Q_stricmp(cmd, "unhook") == 0) {
                if (strcmp (ent->client->pers.weapon->classname, "weapon_grapple")) {
                        CTFResetGrapple (ent->client->ctf_grapple);
                }
        }
//END GRAPPLY BIT
        else if (Q_stricmp (cmd, "drop") == 0)
                Cmd_Drop_f (ent);
 

First we wish to add two new console commands - "hook" & "unhook".  "hook" will fire the hook
off, and "unhook" will release it.  Now we we are able to use "+hook" to bind the actions to
one key, i.e.

	bind g +hook

When 'g' is pressed "hook" is run, then when 'g' is released "unhook" is run.


g_ctf.c:

void CTFResetGrapple(edict_t *self)
{
//GRAPPLY BIT
        if (self && self->owner && self->owner->client && self->owner->client->ctf_grapple) {
                float volume = 1.0;
 
This is adding extra checking for the grapple to check that the player is alive and whether
they have the grapple selected.  We allow the user to use both on-hand and off-hand grappling.


And that should be it :)
