Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Handles Lweapons thrown in an arc.
- void __UpdateLWMThrow(lweapon wpn)
- {
- // LW_ZH_I_WORK: Current jump
- // LW_ZH_I_WORK_2: Current Z position
- // LW_ZH_I_MOVEMENT_ARG: Initial jump
- wpn->Jump=0; // Override engine handling of Z movement
- // Just thrown
- if(wpn->Misc[LW_ZH_I_WORK]==0 && wpn->Misc[LW_ZH_I_MOVEMENT_ARG]!=0)
- {
- wpn->Misc[LW_ZH_I_WORK]=wpn->Misc[LW_ZH_I_MOVEMENT_ARG];
- wpn->Misc[LW_ZH_I_MOVEMENT_ARG]=0;
- }
- // Fall
- wpn->Misc[LW_ZH_I_WORK_2]=Max(wpn->Misc[LW_ZH_I_WORK_2]+wpn->Misc[LW_ZH_I_WORK], 0);
- if(!IsSideview())
- wpn->Z=wpn->Misc[LW_ZH_I_WORK_2];
- else
- wpn->Y = 176-wpn->Misc[LW_ZH_I_WORK_2];
- if(wpn->Misc[LW_ZH_I_WORK_2]>0 &&
- !OnSidePlatform(wpn->X, wpn->Y,
- wpn->HitXOffset,
- wpn->HitYOffset,
- wpn->HitHeight,wpn->HitWidth)) // Z>0
- wpn->Misc[LW_ZH_I_WORK]=Max(wpn->Misc[LW_ZH_I_WORK]-GH_GRAVITY, -GH_TERMINAL_VELOCITY);
- else{
- bool done=false;
- // Bounce
- if((wpn->Misc[LW_ZH_I_MOVEMENT_ARG2]&LWMF_BOUNCE)!=0){
- // Falling fast enough?
- if(wpn->Misc[LW_ZH_I_WORK]<-0.5){ // Jump<=-0.5
- wpn->Misc[LW_ZH_I_WORK]*=-0.5;
- wpn->Step*=0.75;
- }
- // Not fast enough
- else
- done=true;
- }
- // Don't bounce
- else
- done=true;
- // Movement ended; stop or die?
- if(done){
- if((wpn->Misc[LW_ZH_I_MOVEMENT_ARG2]&LWMF_DIE)!=0){
- wpn->Z=0;
- KillLWeapon(wpn);
- }
- else{
- wpn->Misc[LW_ZH_I_MOVEMENT]=0;
- wpn->Step=0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement