How to manually reload

From EDukeWiki
Revision as of 10:40, 26 February 2011 by EmericaSkater (talk | contribs) (Just a tutorial showing how to code in a manual reload for the pistol)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This tutorial will explain how, by accessing a few members of the player structure and manipulating some game events, the player can be given an option to manually reload the pistol, rather than shooting till the clip's empty.

First, we'll declare the necessary gamevars...

gamevar PISTOLAMMO 0 1 
gamevar KICKBACK 0 1
gamevar PWEAPON 0 1 
gamevar PISTOLMAGAZINE 0 1
gamevar PERPLAYER1 0 1
gamevar WEAPON1_CLIP 0 0 // this last gamevar disable's the game's automatic reloading

then, under the APLAYER line in the game.con, we'll store our static variables that will be used, and code in a few functions that the reload is supposed to perform...


actor APLAYER MAXPLAYERHEALTH PSTAND 0 0
getplayer[THISACTOR].curr_weapon PWEAPON // the player's current weapon
getplayer[THISACTOR].kickback_pic KICKBACK // the frame of animation the player's weapon is at
getplayer[THISACTOR].ammo_amount 1 PISTOLAMMO // the player's pistol ammo

ifvare PWEAPON 1 { // if the player has the pistol selected...
ifvarl PISTOLMAGAZINE 1 { // and his magazine count is at zero...

getplayer[THISACTOR].weapon_pos PERPLAYER1 ifvarn PERPLAYER1 0 break // if he has a weapon that's lowering off screen, break


 else { ifvarl PISTOLAMMO 1 break else setplayer[THISACTOR].reloading 1 setplayer[THISACTOR].kickback_pic 4 } } // otherwise, if he has ammo for the pistol, start the reloading anim      

ifvare KICKBACK 5 { // if the reloading animation is on its second frame...
ifvarg PISTOLAMMO 11 { setvar PISTOLMAGAZINE 12 } // if the player has at least twelve pistol rounds left, then set his magazine counter to a full magazine
else setvarvar PISTOLMAGAZINE PISTOLAMMO } } // otherwise set the magazine counter equal to his remaining ammo

Next we'll access the DOFIRE event, which is called if/when a weapon fires its projectile...


onevent EVENT_DOFIRE 

ifvare PWEAPON 1 { // if the player has the pistol selected when he fires a projectile...

ifvarl PISTOLMAGAZINE 1 break else { subvar PISTOLMAGAZINE 1 } } // subtract 1 from the magazine count, unless it's already at zero

endevent

In order to perform a reload, you'll need to assign it a key, which means booting out one of the game's more useless functions. In this example, it'll be the TURNAROUND key...

definegamefuncname 36 RELOAD // rename it, so it'll appear as RELOAD in the control settings menu

onevent EVENT_TURNAROUND 
setvar RETURN -1 // disable the event
ifvare PWEAPON 1 { // if the player has the pistol armed

 ifvare PISTOLMAGAZINE 12 break // and his magazine is full, break

else ifvarvare PISTOLMAGAZINE PISTOLAMMO break // if his magazine is equal to his pistol ammo, break

 else setplayer[THISACTOR].reloading 1 setplayer[THISACTOR].kickback_pic 4 } // otherwise, start the reloading sequence
endevent

Because the game's original reloading system is disabled, the player won't load in a clip when the game starts up. We'll take care of that, as well as another potential glitch, by accessing the RESET_PLAYER event.

onevent EVENT_RESETPLAYER
setvar PISTOLMAGAZINE 0 // if the player was reset to his starting position (i.e, he died), reset the clip amount to zero.
ifvare PWEAPON 1 { // if he has the pistol selected when he loads into the map...
setplayer[THISACTOR].reloading 1 
setplayer[THISACTOR].kickback_pic 4 } // start the reloading sequence.
endevent

The code that was under the APLAYER line made sure the player will automatically reload the pistol if his magazine's empty (and of course, he has the ammunition to do so), however he'll still shoot the projectile even if the magazine's empty, unless the firing key is disabled appropriately...

onevent EVENT_PRESSEDFIRE //when the player presses the fire button...
ifvare PWEAPON 1 { // and he has the pistol armed...
ifvarl PISTOLMAGAZINE 1 { setvar RETURN -1 } } // if his magazine is at zero, disable the firing key
endevent

And lastly, we're going to want the player to know what his magazine count's at, so we'll put a small counter next to the ammo amount...

onevent EVENT_DISPLAYREST
digitalnumberz 2930 280 175 PISTOLMAGAZINE 0 0 0 0 0 xdim ydim 50000 // display the magazine count at a slightly smaller size (50000) next to the ammo
endevent