lit align 4 LABELV $79 byte 4 0 byte 4 0 byte 4 0 export pitch_roll_for_slope code proc pitch_roll_for_slope 1200 28 file "../g_object.c" line 22 ;1:// leave this line at the top for all g_xxxx.cpp files... ;2:#include "g_local.h" ;3: ;4:extern void G_MoverTouchPushTriggers( gentity_t *ent, vec3_t oldOrg ); ;5:void G_StopObjectMoving( gentity_t *object ); ;6: ;7:/* ;8:==================================================================== ;9:void pitch_roll_for_slope (edict_t *forwhom, vec3_t *slope) ;10: ;11:MG ;12: ;13:This will adjust the pitch and roll of a monster to match ;14:a given slope - if a non-'0 0 0' slope is passed, it will ;15:use that value, otherwise it will use the ground underneath ;16:the monster. If it doesn't find a surface, it does nothinh\g ;17:and returns. ;18:==================================================================== ;19:*/ ;20: ;21:void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope ) ;22:{ line 24 ;23: vec3_t slope; ;24: vec3_t nvf, ovf, ovr, startspot, endspot, new_angles = { 0, 0, 0 }; ADDRLP4 12 ADDRGP4 $79 INDIRB ASGNB 12 line 29 ;25: float pitch, mod, dot; ;26: float oldmins2; ;27: ;28: //if we don't have a slope, get one ;29: if( !pass_slope || VectorCompare( vec3_origin, pass_slope ) ) ADDRLP4 100 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 100 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $82 ADDRGP4 vec3_origin ARGP4 ADDRLP4 100 INDIRP4 ARGP4 ADDRLP4 104 ADDRGP4 VectorCompare CALLI4 ASGNI4 ADDRLP4 104 INDIRI4 CNSTI4 0 EQI4 $80 LABELV $82 line 30 ;30: { line 33 ;31: trace_t trace; ;32: ;33: VectorCopy( forwhom->r.currentOrigin, startspot ); ADDRLP4 72 ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 34 ;34: startspot[2] += forwhom->r.mins[2] + 4; ADDRLP4 72+8 ADDRLP4 72+8 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 CNSTF4 1082130432 ADDF4 ADDF4 ASGNF4 line 35 ;35: VectorCopy( startspot, endspot ); ADDRLP4 84 ADDRLP4 72 INDIRB ASGNB 12 line 36 ;36: endspot[2] -= 300; ADDRLP4 84+8 ADDRLP4 84+8 INDIRF4 CNSTF4 1133903872 SUBF4 ASGNF4 line 37 ;37: trap_Trace( &trace, forwhom->r.currentOrigin, vec3_origin, vec3_origin, endspot, forwhom->s.number, MASK_SOLID ); ADDRLP4 108 ARGP4 ADDRLP4 1188 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1188 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 1192 ADDRGP4 vec3_origin ASGNP4 ADDRLP4 1192 INDIRP4 ARGP4 ADDRLP4 1192 INDIRP4 ARGP4 ADDRLP4 84 ARGP4 ADDRLP4 1188 INDIRP4 INDIRI4 ARGI4 CNSTI4 1 ARGI4 ADDRGP4 trap_Trace CALLV pop line 41 ;38:// if(trace_fraction>0.05&&forwhom.movetype==MOVETYPE_STEP) ;39:// forwhom.flags(-)FL_ONGROUND; ;40: ;41: if ( trace.fraction >= 1.0 ) ADDRLP4 108+8 INDIRF4 CNSTF4 1065353216 LTF4 $85 line 42 ;42: return; ADDRGP4 $78 JUMPV LABELV $85 line 44 ;43: ;44: if( !( &trace.plane ) ) ADDRLP4 108+24 CVPU4 4 CNSTU4 0 NEU4 $88 line 45 ;45: return; ADDRGP4 $78 JUMPV LABELV $88 line 47 ;46: ;47: if ( VectorCompare( vec3_origin, trace.plane.normal ) ) ADDRGP4 vec3_origin ARGP4 ADDRLP4 108+24 ARGP4 ADDRLP4 1196 ADDRGP4 VectorCompare CALLI4 ASGNI4 ADDRLP4 1196 INDIRI4 CNSTI4 0 EQI4 $91 line 48 ;48: return; ADDRGP4 $78 JUMPV LABELV $91 line 50 ;49: ;50: VectorCopy( trace.plane.normal, slope ); ADDRLP4 60 ADDRLP4 108+24 INDIRB ASGNB 12 line 51 ;51: } ADDRGP4 $81 JUMPV LABELV $80 line 53 ;52: else ;53: { line 54 ;54: VectorCopy( pass_slope, slope ); ADDRLP4 60 ADDRFP4 4 INDIRP4 INDIRB ASGNB 12 line 55 ;55: } LABELV $81 line 58 ;56: ;57: ;58: AngleVectors( forwhom->r.currentAngles, ovf, ovr, NULL ); ADDRFP4 0 INDIRP4 CNSTI4 380 ADDP4 ARGP4 ADDRLP4 24 ARGP4 ADDRLP4 36 ARGP4 CNSTP4 0 ARGP4 ADDRGP4 AngleVectors CALLV pop line 60 ;59: ;60: vectoangles( slope, new_angles ); ADDRLP4 60 ARGP4 ADDRLP4 12 ARGP4 ADDRGP4 vectoangles CALLV pop line 61 ;61: pitch = new_angles[PITCH] + 90; ADDRLP4 52 ADDRLP4 12 INDIRF4 CNSTF4 1119092736 ADDF4 ASGNF4 line 62 ;62: new_angles[ROLL] = new_angles[PITCH] = 0; ADDRLP4 108 CNSTF4 0 ASGNF4 ADDRLP4 12 ADDRLP4 108 INDIRF4 ASGNF4 ADDRLP4 12+8 ADDRLP4 108 INDIRF4 ASGNF4 line 64 ;63: ;64: AngleVectors( new_angles, nvf, NULL, NULL ); ADDRLP4 12 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 112 CNSTP4 0 ASGNP4 ADDRLP4 112 INDIRP4 ARGP4 ADDRLP4 112 INDIRP4 ARGP4 ADDRGP4 AngleVectors CALLV pop line 66 ;65: ;66: mod = DotProduct( nvf, ovr ); ADDRLP4 48 ADDRLP4 0 INDIRF4 ADDRLP4 36 INDIRF4 MULF4 ADDRLP4 0+4 INDIRF4 ADDRLP4 36+4 INDIRF4 MULF4 ADDF4 ADDRLP4 0+8 INDIRF4 ADDRLP4 36+8 INDIRF4 MULF4 ADDF4 ASGNF4 line 68 ;67: ;68: if ( mod<0 ) ADDRLP4 48 INDIRF4 CNSTF4 0 GEF4 $100 line 69 ;69: mod = -1; ADDRLP4 48 CNSTF4 3212836864 ASGNF4 ADDRGP4 $101 JUMPV LABELV $100 line 71 ;70: else ;71: mod = 1; ADDRLP4 48 CNSTF4 1065353216 ASGNF4 LABELV $101 line 73 ;72: ;73: dot = DotProduct( nvf, ovf ); ADDRLP4 56 ADDRLP4 0 INDIRF4 ADDRLP4 24 INDIRF4 MULF4 ADDRLP4 0+4 INDIRF4 ADDRLP4 24+4 INDIRF4 MULF4 ADDF4 ADDRLP4 0+8 INDIRF4 ADDRLP4 24+8 INDIRF4 MULF4 ADDF4 ASGNF4 line 75 ;74: ;75: if ( forwhom->client ) ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $106 line 76 ;76: { line 77 ;77: forwhom->client->ps.viewangles[PITCH] = dot * pitch; ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 156 ADDP4 ADDRLP4 56 INDIRF4 ADDRLP4 52 INDIRF4 MULF4 ASGNF4 line 78 ;78: forwhom->client->ps.viewangles[ROLL] = ((1-Q_fabs(dot)) * pitch * mod); ADDRLP4 56 INDIRF4 ARGF4 ADDRLP4 116 ADDRGP4 Q_fabs CALLF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 164 ADDP4 CNSTF4 1065353216 ADDRLP4 116 INDIRF4 SUBF4 ADDRLP4 52 INDIRF4 MULF4 ADDRLP4 48 INDIRF4 MULF4 ASGNF4 line 79 ;79: oldmins2 = forwhom->r.mins[2]; ADDRLP4 96 ADDRFP4 0 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 ASGNF4 line 80 ;80: forwhom->r.mins[2] = -24 + 12 * fabs(forwhom->client->ps.viewangles[PITCH])/180.0f; ADDRLP4 120 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 120 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 156 ADDP4 INDIRF4 ARGF4 ADDRLP4 124 ADDRGP4 fabs CALLF4 ASGNF4 ADDRLP4 120 INDIRP4 CNSTI4 324 ADDP4 CNSTF4 1094713344 ADDRLP4 124 INDIRF4 MULF4 CNSTF4 1127481344 DIVF4 CNSTF4 3250585600 ADDF4 ASGNF4 line 82 ;81: //FIXME: if it gets bigger, move up ;82: if ( oldmins2 > forwhom->r.mins[2] ) ADDRLP4 96 INDIRF4 ADDRFP4 0 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 LEF4 $107 line 83 ;83: {//our mins is now lower, need to move up line 85 ;84: //FIXME: trace? ;85: forwhom->client->ps.origin[2] += (oldmins2 - forwhom->r.mins[2]); ADDRLP4 128 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 132 ADDRLP4 128 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 ASGNP4 ADDRLP4 132 INDIRP4 ADDRLP4 132 INDIRP4 INDIRF4 ADDRLP4 96 INDIRF4 ADDRLP4 128 INDIRP4 CNSTI4 324 ADDP4 INDIRF4 SUBF4 ADDF4 ASGNF4 line 86 ;86: forwhom->r.currentOrigin[2] = forwhom->client->ps.origin[2]; ADDRLP4 136 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 136 INDIRP4 CNSTI4 376 ADDP4 ADDRLP4 136 INDIRP4 CNSTI4 408 ADDP4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 ASGNF4 line 87 ;87: trap_LinkEntity( forwhom ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 88 ;88: } line 89 ;89: } ADDRGP4 $107 JUMPV LABELV $106 line 91 ;90: else ;91: { line 92 ;92: forwhom->r.currentAngles[PITCH] = dot * pitch; ADDRFP4 0 INDIRP4 CNSTI4 380 ADDP4 ADDRLP4 56 INDIRF4 ADDRLP4 52 INDIRF4 MULF4 ASGNF4 line 93 ;93: forwhom->r.currentAngles[ROLL] = ((1-Q_fabs(dot)) * pitch * mod); ADDRLP4 56 INDIRF4 ARGF4 ADDRLP4 116 ADDRGP4 Q_fabs CALLF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 388 ADDP4 CNSTF4 1065353216 ADDRLP4 116 INDIRF4 SUBF4 ADDRLP4 52 INDIRF4 MULF4 ADDRLP4 48 INDIRF4 MULF4 ASGNF4 line 94 ;94: } LABELV $107 line 95 ;95:} LABELV $78 endproc pitch_roll_for_slope 1200 28 export G_BounceObject proc G_BounceObject 44 12 line 104 ;96: ;97:/* ;98:================ ;99:G_BounceObject ;100: ;101:================ ;102:*/ ;103:void G_BounceObject( gentity_t *ent, trace_t *trace ) ;104:{ line 110 ;105: vec3_t velocity; ;106: float dot, bounceFactor; ;107: int hitTime; ;108: ;109: // reflect the velocity on the trace plane ;110: hitTime = level.previousTime + ( level.time - level.previousTime ) * trace->fraction; ADDRLP4 20 ADDRGP4 level+36 INDIRI4 CVIF4 4 ADDRGP4 level+32 INDIRI4 ADDRGP4 level+36 INDIRI4 SUBI4 CVIF4 4 ADDRFP4 4 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 MULF4 ADDF4 CVFI4 4 ASGNI4 line 111 ;111: BG_EvaluateTrajectoryDelta( &ent->s.pos, hitTime, velocity ); ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 ARGP4 ADDRLP4 20 INDIRI4 ARGI4 ADDRLP4 0 ARGP4 ADDRGP4 BG_EvaluateTrajectoryDelta CALLV pop line 112 ;112: dot = DotProduct( velocity, trace->plane.normal ); ADDRLP4 24 ADDRFP4 4 INDIRP4 ASGNP4 ADDRLP4 16 ADDRLP4 0 INDIRF4 ADDRLP4 24 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 MULF4 ADDRLP4 0+4 INDIRF4 ADDRLP4 24 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 MULF4 ADDF4 ADDRLP4 0+8 INDIRF4 ADDRLP4 24 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 MULF4 ADDF4 ASGNF4 line 114 ;113:// bounceFactor = 60/ent->mass; // NOTENOTE Mass is not yet implemented ;114: bounceFactor = 1.0f; ADDRLP4 12 CNSTF4 1065353216 ASGNF4 line 115 ;115: if ( bounceFactor > 1.0f ) ADDRLP4 12 INDIRF4 CNSTF4 1065353216 LEF4 $116 line 116 ;116: { line 117 ;117: bounceFactor = 1.0f; ADDRLP4 12 CNSTF4 1065353216 ASGNF4 line 118 ;118: } LABELV $116 line 119 ;119: VectorMA( velocity, -2*dot*bounceFactor, trace->plane.normal, ent->s.pos.trDelta ); ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 ADDRLP4 0 INDIRF4 ADDRFP4 4 INDIRP4 CNSTI4 24 ADDP4 INDIRF4 CNSTF4 3221225472 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 12 INDIRF4 MULF4 MULF4 ADDF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 40 ADDP4 ADDRLP4 0+4 INDIRF4 ADDRFP4 4 INDIRP4 CNSTI4 28 ADDP4 INDIRF4 CNSTF4 3221225472 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 12 INDIRF4 MULF4 MULF4 ADDF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 ADDRLP4 0+8 INDIRF4 ADDRFP4 4 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 CNSTF4 3221225472 ADDRLP4 16 INDIRF4 MULF4 ADDRLP4 12 INDIRF4 MULF4 MULF4 ADDF4 ASGNF4 line 122 ;120: ;121: //FIXME: customized or material-based impact/bounce sounds ;122: if ( ent->s.eFlags & EF_BOUNCE_HALF ) ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 INDIRI4 CNSTI4 32 BANDI4 CNSTI4 0 EQI4 $120 line 123 ;123: { line 124 ;124: VectorScale( ent->s.pos.trDelta, 0.5, ent->s.pos.trDelta ); ADDRLP4 28 ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 28 INDIRP4 CNSTF4 1056964608 ADDRLP4 28 INDIRP4 INDIRF4 MULF4 ASGNF4 ADDRLP4 32 ADDRFP4 0 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 32 INDIRP4 CNSTF4 1056964608 ADDRLP4 32 INDIRP4 INDIRF4 MULF4 ASGNF4 ADDRLP4 36 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 36 INDIRP4 CNSTF4 1056964608 ADDRLP4 36 INDIRP4 INDIRF4 MULF4 ASGNF4 line 127 ;125: ;126: // check for stop ;127: if ( ((trace->plane.normal[2] > 0.7&&g_gravity.value>0) || (trace->plane.normal[2]<-0.7&&g_gravity.value<0)) && ((ent->s.pos.trDelta[2]<40&&g_gravity.value>0)||(ent->s.pos.trDelta[2]>-40&&g_gravity.value<0)) ) //this can happen even on very slightly sloped walls, so changed it from > 0 to > 0.7 ADDRFP4 4 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 CNSTF4 1060320051 LEF4 $129 ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 GTF4 $128 LABELV $129 ADDRFP4 4 INDIRP4 CNSTI4 32 ADDP4 INDIRF4 CNSTF4 3207803699 GEF4 $122 ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 GEF4 $122 LABELV $128 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 INDIRF4 CNSTF4 1109393408 GEF4 $131 ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 GTF4 $130 LABELV $131 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 INDIRF4 CNSTF4 3256877056 LEF4 $122 ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 GEF4 $122 LABELV $130 line 128 ;128: { line 131 ;129: //G_SetOrigin( ent, trace->endpos ); ;130: //ent->nextthink = level.time + 500; ;131: ent->s.apos.trType = TR_STATIONARY; ADDRFP4 0 INDIRP4 CNSTI4 48 ADDP4 CNSTI4 0 ASGNI4 line 132 ;132: VectorCopy( ent->r.currentAngles, ent->s.apos.trBase ); ADDRLP4 40 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 40 INDIRP4 CNSTI4 60 ADDP4 ADDRLP4 40 INDIRP4 CNSTI4 380 ADDP4 INDIRB ASGNB 12 line 133 ;133: VectorCopy( trace->endpos, ent->r.currentOrigin ); ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 12 ADDP4 INDIRB ASGNB 12 line 134 ;134: VectorCopy( trace->endpos, ent->s.pos.trBase ); ADDRFP4 0 INDIRP4 CNSTI4 24 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 12 ADDP4 INDIRB ASGNB 12 line 135 ;135: ent->s.pos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 136 ;136: return; ADDRGP4 $110 JUMPV LABELV $122 line 138 ;137: } ;138: } LABELV $120 line 143 ;139: ;140: // NEW--It would seem that we want to set our trBase to the trace endpos ;141: // and set the trTime to the actual time of impact.... ;142: // FIXME: Should we still consider adding the normal though?? ;143: VectorCopy( trace->endpos, ent->r.currentOrigin ); ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 12 ADDP4 INDIRB ASGNB 12 line 144 ;144: ent->s.pos.trTime = hitTime; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRLP4 20 INDIRI4 ASGNI4 line 146 ;145: ;146: VectorCopy( ent->r.currentOrigin, ent->s.pos.trBase ); ADDRLP4 28 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 28 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 28 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 147 ;147: VectorCopy( trace->plane.normal, ent->pos1 );//??? ADDRFP4 0 INDIRP4 CNSTI4 548 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 24 ADDP4 INDIRB ASGNB 12 line 148 ;148:} LABELV $110 endproc G_BounceObject 44 12 export G_RunObject proc G_RunObject 1148 28 line 162 ;149: ;150: ;151:/* ;152:================ ;153:G_RunObject ;154: ;155: TODO: When transition to 0 grav, push away from surface you were resting on ;156: TODO: When free-floating in air, apply some friction to your trDelta (based on mass?) ;157:================ ;158:*/ ;159:extern void DoImpact( gentity_t *self, gentity_t *other, qboolean damageSelf ); ;160:extern void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope ); ;161:void G_RunObject( gentity_t *ent ) ;162:{ line 165 ;163: vec3_t origin, oldOrg; ;164: trace_t tr; ;165: gentity_t *traceEnt = NULL; ADDRLP4 1080 CNSTP4 0 ASGNP4 line 168 ;166: ;167: //FIXME: floaters need to stop floating up after a while, even if gravity stays negative? ;168: if ( ent->s.pos.trType == TR_STATIONARY )//g_gravity.value <= 0 && ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 0 NEI4 $134 line 169 ;169: { line 170 ;170: ent->s.pos.trType = TR_GRAVITY; ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 CNSTI4 5 ASGNI4 line 171 ;171: VectorCopy( ent->r.currentOrigin, ent->s.pos.trBase ); ADDRLP4 1108 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1108 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 1108 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 172 ;172: ent->s.pos.trTime = level.previousTime;//?necc? ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+36 INDIRI4 ASGNI4 line 173 ;173: if ( !g_gravity.value ) ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 NEF4 $137 line 174 ;174: { line 175 ;175: ent->s.pos.trDelta[2] += 100; ADDRLP4 1112 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 1112 INDIRP4 ADDRLP4 1112 INDIRP4 INDIRF4 CNSTF4 1120403456 ADDF4 ASGNF4 line 176 ;176: } LABELV $137 line 177 ;177: } LABELV $134 line 179 ;178: ;179: ent->nextthink = level.time + FRAMETIME; ADDRFP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 181 ;180: ;181: VectorCopy( ent->r.currentOrigin, oldOrg ); ADDRLP4 1096 ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 183 ;182: // get current position ;183: BG_EvaluateTrajectory( &ent->s.pos, level.time, origin ); ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 ARGP4 ADDRGP4 level+32 INDIRI4 ARGI4 ADDRLP4 1084 ARGP4 ADDRGP4 BG_EvaluateTrajectory CALLV pop line 185 ;184: //Get current angles? ;185: BG_EvaluateTrajectory( &ent->s.apos, level.time, ent->r.currentAngles ); ADDRLP4 1108 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1108 INDIRP4 CNSTI4 48 ADDP4 ARGP4 ADDRGP4 level+32 INDIRI4 ARGI4 ADDRLP4 1108 INDIRP4 CNSTI4 380 ADDP4 ARGP4 ADDRGP4 BG_EvaluateTrajectory CALLV pop line 187 ;186: ;187: if ( VectorCompare( ent->r.currentOrigin, origin ) ) ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 1084 ARGP4 ADDRLP4 1112 ADDRGP4 VectorCompare CALLI4 ASGNI4 ADDRLP4 1112 INDIRI4 CNSTI4 0 EQI4 $143 line 188 ;188: {//error - didn't move at all! line 189 ;189: return; ADDRGP4 $133 JUMPV LABELV $143 line 193 ;190: } ;191: // trace a line from the previous position to the current position, ;192: // ignoring interactions with the missile owner ;193: trap_Trace( &tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, origin, ADDRLP4 0 ARGP4 ADDRLP4 1120 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1120 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 1120 INDIRP4 CNSTI4 316 ADDP4 ARGP4 ADDRLP4 1120 INDIRP4 CNSTI4 328 ADDP4 ARGP4 ADDRLP4 1084 ARGP4 ADDRLP4 1120 INDIRP4 CNSTI4 536 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $146 ADDRLP4 1116 ADDRFP4 0 INDIRP4 CNSTI4 536 ADDP4 INDIRP4 INDIRI4 ASGNI4 ADDRGP4 $147 JUMPV LABELV $146 ADDRLP4 1116 ADDRFP4 0 INDIRP4 INDIRI4 ASGNI4 LABELV $147 ADDRLP4 1116 INDIRI4 ARGI4 ADDRFP4 0 INDIRP4 CNSTI4 508 ADDP4 INDIRI4 ARGI4 ADDRGP4 trap_Trace CALLV pop line 196 ;194: ent->parent ? ent->parent->s.number : ent->s.number, ent->clipmask ); ;195: ;196: if ( !tr.startsolid && !tr.allsolid && tr.fraction ) ADDRLP4 1124 CNSTI4 0 ASGNI4 ADDRLP4 0+4 INDIRI4 ADDRLP4 1124 INDIRI4 NEI4 $148 ADDRLP4 0 INDIRI4 ADDRLP4 1124 INDIRI4 NEI4 $148 ADDRLP4 0+8 INDIRF4 CNSTF4 0 EQF4 $148 line 197 ;197: { line 198 ;198: VectorCopy( tr.endpos, ent->r.currentOrigin ); ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 0+12 INDIRB ASGNB 12 line 199 ;199: trap_LinkEntity( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 trap_LinkEntity CALLV pop line 200 ;200: } ADDRGP4 $149 JUMPV LABELV $148 line 203 ;201: else ;202: //if ( tr.startsolid ) ;203: { line 204 ;204: tr.fraction = 0; ADDRLP4 0+8 CNSTF4 0 ASGNF4 line 205 ;205: } LABELV $149 line 207 ;206: ;207: G_MoverTouchPushTriggers( ent, oldOrg ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 1096 ARGP4 ADDRGP4 G_MoverTouchPushTriggers CALLV pop line 223 ;208: /* ;209: if ( !(ent->s.eFlags & EF_TELEPORT_BIT) && !(ent->svFlags & SVF_NO_TELEPORT) ) ;210: { ;211: G_MoverTouchTeleportTriggers( ent, oldOrg ); ;212: if ( ent->s.eFlags & EF_TELEPORT_BIT ) ;213: {//was teleported ;214: return; ;215: } ;216: } ;217: else ;218: { ;219: ent->s.eFlags &= ~EF_TELEPORT_BIT; ;220: } ;221: */ ;222: ;223: if ( tr.fraction == 1 ) ADDRLP4 0+8 INDIRF4 CNSTF4 1065353216 NEF4 $154 line 224 ;224: { line 225 ;225: if ( g_gravity.value <= 0 ) ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 GTF4 $157 line 226 ;226: { line 227 ;227: if ( ent->s.apos.trType == TR_STATIONARY ) ADDRFP4 0 INDIRP4 CNSTI4 48 ADDP4 INDIRI4 CNSTI4 0 NEI4 $160 line 228 ;228: { line 229 ;229: VectorCopy( ent->r.currentAngles, ent->s.apos.trBase ); ADDRLP4 1128 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1128 INDIRP4 CNSTI4 60 ADDP4 ADDRLP4 1128 INDIRP4 CNSTI4 380 ADDP4 INDIRB ASGNB 12 line 230 ;230: ent->s.apos.trType = TR_LINEAR; ADDRFP4 0 INDIRP4 CNSTI4 48 ADDP4 CNSTI4 2 ASGNI4 line 231 ;231: ent->s.apos.trDelta[1] = flrand( -300, 300 ); CNSTF4 3281387520 ARGF4 CNSTF4 1133903872 ARGF4 ADDRLP4 1132 ADDRGP4 flrand CALLF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 76 ADDP4 ADDRLP4 1132 INDIRF4 ASGNF4 line 232 ;232: ent->s.apos.trDelta[0] = flrand( -10, 10 ); CNSTF4 3240099840 ARGF4 CNSTF4 1092616192 ARGF4 ADDRLP4 1136 ADDRGP4 flrand CALLF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 72 ADDP4 ADDRLP4 1136 INDIRF4 ASGNF4 line 233 ;233: ent->s.apos.trDelta[2] = flrand( -10, 10 ); CNSTF4 3240099840 ARGF4 CNSTF4 1092616192 ARGF4 ADDRLP4 1140 ADDRGP4 flrand CALLF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 80 ADDP4 ADDRLP4 1140 INDIRF4 ASGNF4 line 234 ;234: ent->s.apos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 52 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 235 ;235: } LABELV $160 line 236 ;236: } LABELV $157 line 238 ;237: //friction in zero-G ;238: if ( !g_gravity.value ) ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 NEF4 $133 line 239 ;239: { line 240 ;240: float friction = 0.975f; ADDRLP4 1128 CNSTF4 1064933786 ASGNF4 line 242 ;241: //friction -= ent->mass/1000.0f; ;242: if ( friction < 0.1 ) ADDRLP4 1128 INDIRF4 CNSTF4 1036831949 GEF4 $166 line 243 ;243: { line 244 ;244: friction = 0.1f; ADDRLP4 1128 CNSTF4 1036831949 ASGNF4 line 245 ;245: } LABELV $166 line 247 ;246: ;247: VectorScale( ent->s.pos.trDelta, friction, ent->s.pos.trDelta ); ADDRLP4 1132 ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 ASGNP4 ADDRLP4 1132 INDIRP4 ADDRLP4 1132 INDIRP4 INDIRF4 ADDRLP4 1128 INDIRF4 MULF4 ASGNF4 ADDRLP4 1136 ADDRFP4 0 INDIRP4 CNSTI4 40 ADDP4 ASGNP4 ADDRLP4 1136 INDIRP4 ADDRLP4 1136 INDIRP4 INDIRF4 ADDRLP4 1128 INDIRF4 MULF4 ASGNF4 ADDRLP4 1140 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 ASGNP4 ADDRLP4 1140 INDIRP4 ADDRLP4 1140 INDIRP4 INDIRF4 ADDRLP4 1128 INDIRF4 MULF4 ASGNF4 line 248 ;248: VectorCopy( ent->r.currentOrigin, ent->s.pos.trBase ); ADDRLP4 1144 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1144 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 1144 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 249 ;249: ent->s.pos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 250 ;250: } line 251 ;251: return; ADDRGP4 $133 JUMPV LABELV $154 line 257 ;252: } ;253: ;254: //hit something ;255: ;256: //Do impact damage ;257: traceEnt = &g_entities[tr.entityNum]; ADDRLP4 1080 CNSTI4 828 ADDRLP4 0+52 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ASGNP4 line 258 ;258: if ( tr.fraction || (traceEnt && traceEnt->takedamage) ) ADDRLP4 0+8 INDIRF4 CNSTF4 0 NEF4 $173 ADDRLP4 1080 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $170 ADDRLP4 1080 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 CNSTI4 0 EQI4 $170 LABELV $173 line 259 ;259: { line 260 ;260: if ( !VectorCompare( ent->r.currentOrigin, oldOrg ) ) ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ARGP4 ADDRLP4 1096 ARGP4 ADDRLP4 1132 ADDRGP4 VectorCompare CALLI4 ASGNI4 ADDRLP4 1132 INDIRI4 CNSTI4 0 NEI4 $174 line 261 ;261: {//moved and impacted line 262 ;262: if ( (traceEnt && traceEnt->takedamage) ) ADDRLP4 1080 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $176 ADDRLP4 1080 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 CNSTI4 0 EQI4 $176 line 263 ;263: {//hurt someone line 265 ;264:// G_Sound( ent, G_SoundIndex( "sound/movers/objects/objectHurt.wav" ) ); ;265: } LABELV $176 line 267 ;266:// G_Sound( ent, G_SoundIndex( "sound/movers/objects/objectHit.wav" ) ); ;267: } LABELV $174 line 268 ;268: DoImpact( ent, traceEnt, qtrue ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 1080 INDIRP4 ARGP4 CNSTI4 1 ARGI4 ADDRGP4 DoImpact CALLV pop line 269 ;269: } LABELV $170 line 271 ;270: ;271: if ( !ent || (ent->takedamage&&ent->health <= 0) ) ADDRLP4 1132 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1132 INDIRP4 CVPU4 4 CNSTU4 0 EQU4 $180 ADDRLP4 1136 CNSTI4 0 ASGNI4 ADDRLP4 1132 INDIRP4 CNSTI4 680 ADDP4 INDIRI4 ADDRLP4 1136 INDIRI4 EQI4 $178 ADDRLP4 1132 INDIRP4 CNSTI4 676 ADDP4 INDIRI4 ADDRLP4 1136 INDIRI4 GTI4 $178 LABELV $180 line 272 ;272: {//been destroyed by impact line 275 ;273: //chunks? ;274:// G_Sound( ent, G_SoundIndex( "sound/movers/objects/objectBreak.wav" ) ); ;275: return; ADDRGP4 $133 JUMPV LABELV $178 line 279 ;276: } ;277: ;278: //do impact physics ;279: if ( ent->s.pos.trType == TR_GRAVITY )//tr.fraction < 1.0 && ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 INDIRI4 CNSTI4 5 NEI4 $181 line 280 ;280: {//FIXME: only do this if no trDelta line 281 ;281: if ( g_gravity.value <= 0 || tr.plane.normal[2] < 0.7 ) ADDRGP4 g_gravity+8 INDIRF4 CNSTF4 0 LEF4 $188 ADDRLP4 0+24+8 INDIRF4 CNSTF4 1060320051 GEF4 $183 LABELV $188 line 282 ;282: { line 283 ;283: if ( ent->s.eFlags&(EF_BOUNCE|EF_BOUNCE_HALF) ) ADDRFP4 0 INDIRP4 CNSTI4 8 ADDP4 INDIRI4 CNSTI4 48 BANDI4 CNSTI4 0 EQI4 $182 line 284 ;284: { line 285 ;285: if ( tr.fraction <= 0.0f ) ADDRLP4 0+8 INDIRF4 CNSTF4 0 GTF4 $191 line 286 ;286: { line 287 ;287: VectorCopy( tr.endpos, ent->r.currentOrigin ); ADDRFP4 0 INDIRP4 CNSTI4 368 ADDP4 ADDRLP4 0+12 INDIRB ASGNB 12 line 288 ;288: VectorCopy( tr.endpos, ent->s.pos.trBase ); ADDRFP4 0 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 0+12 INDIRB ASGNB 12 line 289 ;289: VectorClear( ent->s.pos.trDelta ); ADDRLP4 1140 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1144 CNSTF4 0 ASGNF4 ADDRLP4 1140 INDIRP4 CNSTI4 44 ADDP4 ADDRLP4 1144 INDIRF4 ASGNF4 ADDRLP4 1140 INDIRP4 CNSTI4 40 ADDP4 ADDRLP4 1144 INDIRF4 ASGNF4 ADDRLP4 1140 INDIRP4 CNSTI4 36 ADDP4 ADDRLP4 1144 INDIRF4 ASGNF4 line 290 ;290: ent->s.pos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 291 ;291: } ADDRGP4 $182 JUMPV LABELV $191 line 293 ;292: else ;293: { line 294 ;294: G_BounceObject( ent, &tr ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0 ARGP4 ADDRGP4 G_BounceObject CALLV pop line 295 ;295: } line 296 ;296: } line 298 ;297: else ;298: {//slide down? line 300 ;299: //FIXME: slide off the slope ;300: } line 301 ;301: } ADDRGP4 $182 JUMPV LABELV $183 line 303 ;302: else ;303: { line 304 ;304: ent->s.apos.trType = TR_STATIONARY; ADDRFP4 0 INDIRP4 CNSTI4 48 ADDP4 CNSTI4 0 ASGNI4 line 305 ;305: pitch_roll_for_slope( ent, tr.plane.normal ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0+24 ARGP4 ADDRGP4 pitch_roll_for_slope CALLV pop line 308 ;306: //ent->r.currentAngles[0] = 0;//FIXME: match to slope ;307: //ent->r.currentAngles[2] = 0;//FIXME: match to slope ;308: VectorCopy( ent->r.currentAngles, ent->s.apos.trBase ); ADDRLP4 1140 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1140 INDIRP4 CNSTI4 60 ADDP4 ADDRLP4 1140 INDIRP4 CNSTI4 380 ADDP4 INDIRB ASGNB 12 line 312 ;309: //okay, we hit the floor, might as well stop or prediction will ;310: //make us go through the floor! ;311: //FIXME: this means we can't fall if something is pulled out from under us... ;312: G_StopObjectMoving( ent ); ADDRFP4 0 INDIRP4 ARGP4 ADDRGP4 G_StopObjectMoving CALLV pop line 313 ;313: } line 314 ;314: } ADDRGP4 $182 JUMPV LABELV $181 line 315 ;315: else if (ent->s.weapon != WP_SABER) ADDRFP4 0 INDIRP4 CNSTI4 276 ADDP4 INDIRI4 CNSTI4 2 EQI4 $198 line 316 ;316: { line 317 ;317: ent->s.apos.trType = TR_STATIONARY; ADDRFP4 0 INDIRP4 CNSTI4 48 ADDP4 CNSTI4 0 ASGNI4 line 318 ;318: pitch_roll_for_slope( ent, tr.plane.normal ); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 0+24 ARGP4 ADDRGP4 pitch_roll_for_slope CALLV pop line 321 ;319: //ent->r.currentAngles[0] = 0;//FIXME: match to slope ;320: //ent->r.currentAngles[2] = 0;//FIXME: match to slope ;321: VectorCopy( ent->r.currentAngles, ent->s.apos.trBase ); ADDRLP4 1140 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1140 INDIRP4 CNSTI4 60 ADDP4 ADDRLP4 1140 INDIRP4 CNSTI4 380 ADDP4 INDIRB ASGNB 12 line 322 ;322: } LABELV $198 LABELV $182 line 325 ;323: ;324: //call touch func ;325: ent->touch( ent, &g_entities[tr.entityNum], &tr ); ADDRLP4 1140 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 1140 INDIRP4 ARGP4 CNSTI4 828 ADDRLP4 0+52 INDIRI4 MULI4 ADDRGP4 g_entities ADDP4 ARGP4 ADDRLP4 0 ARGP4 ADDRLP4 1140 INDIRP4 CNSTI4 648 ADDP4 INDIRP4 CALLV pop line 326 ;326:} LABELV $133 endproc G_RunObject 1148 28 export G_StopObjectMoving proc G_StopObjectMoving 16 0 line 330 ;327: ;328: ;329:void G_StopObjectMoving( gentity_t *object ) ;330:{ line 331 ;331: object->s.pos.trType = TR_STATIONARY; ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 CNSTI4 0 ASGNI4 line 332 ;332: VectorCopy( object->r.currentOrigin, object->s.origin ); ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 0 INDIRP4 CNSTI4 92 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 333 ;333: VectorCopy( object->r.currentOrigin, object->s.pos.trBase ); ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 4 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 334 ;334: VectorClear( object->s.pos.trDelta ); ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 12 CNSTF4 0 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 44 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 40 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 ADDRLP4 8 INDIRP4 CNSTI4 36 ADDP4 ADDRLP4 12 INDIRF4 ASGNF4 line 343 ;335: ;336: /* ;337: //Stop spinning ;338: VectorClear( self->s.apos.trDelta ); ;339: vectoangles(trace->plane.normal, self->s.angles); ;340: VectorCopy(self->s.angles, self->r.currentAngles ); ;341: VectorCopy(self->s.angles, self->s.apos.trBase); ;342: */ ;343:} LABELV $202 endproc G_StopObjectMoving 16 0 export G_StartObjectMoving proc G_StartObjectMoving 4 4 line 346 ;344: ;345:void G_StartObjectMoving( gentity_t *object, vec3_t dir, float speed, trType_t trType ) ;346:{ line 347 ;347: VectorNormalize (dir); ADDRFP4 4 INDIRP4 ARGP4 ADDRGP4 VectorNormalize CALLF4 pop line 350 ;348: ;349: //object->s.eType = ET_GENERAL; ;350: object->s.pos.trType = trType; ADDRFP4 0 INDIRP4 CNSTI4 12 ADDP4 ADDRFP4 12 INDIRI4 ASGNI4 line 351 ;351: VectorCopy( object->r.currentOrigin, object->s.pos.trBase ); ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 0 INDIRP4 CNSTI4 24 ADDP4 ADDRLP4 0 INDIRP4 CNSTI4 368 ADDP4 INDIRB ASGNB 12 line 352 ;352: VectorScale(dir, speed, object->s.pos.trDelta ); ADDRFP4 0 INDIRP4 CNSTI4 36 ADDP4 ADDRFP4 4 INDIRP4 INDIRF4 ADDRFP4 8 INDIRF4 MULF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 40 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 4 ADDP4 INDIRF4 ADDRFP4 8 INDIRF4 MULF4 ASGNF4 ADDRFP4 0 INDIRP4 CNSTI4 44 ADDP4 ADDRFP4 4 INDIRP4 CNSTI4 8 ADDP4 INDIRF4 ADDRFP4 8 INDIRF4 MULF4 ASGNF4 line 353 ;353: object->s.pos.trTime = level.time; ADDRFP4 0 INDIRP4 CNSTI4 16 ADDP4 ADDRGP4 level+32 INDIRI4 ASGNI4 line 364 ;354: ;355: /* ;356: //FIXME: incorporate spin? ;357: vectoangles(dir, object->s.angles); ;358: VectorCopy(object->s.angles, object->s.apos.trBase); ;359: VectorSet(object->s.apos.trDelta, 300, 0, 0 ); ;360: object->s.apos.trTime = level.time; ;361: */ ;362: ;363: //FIXME: make these objects go through G_RunObject automatically, like missiles do ;364: if ( object->think == NULL ) ADDRFP4 0 INDIRP4 CNSTI4 636 ADDP4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $205 line 365 ;365: { line 366 ;366: object->nextthink = level.time + FRAMETIME; ADDRFP4 0 INDIRP4 CNSTI4 632 ADDP4 ADDRGP4 level+32 INDIRI4 CNSTI4 100 ADDI4 ASGNI4 line 367 ;367: object->think = G_RunObject; ADDRFP4 0 INDIRP4 CNSTI4 636 ADDP4 ADDRGP4 G_RunObject ASGNP4 line 368 ;368: } LABELV $205 line 370 ;369: else ;370: {//You're responsible for calling RunObject line 371 ;371: } LABELV $206 line 372 ;372:} LABELV $203 endproc G_StartObjectMoving 4 4 import DoImpact import G_MoverTouchPushTriggers import trap_ROFF_Purge_Ent import trap_ROFF_Play import trap_ROFF_Cache import trap_ROFF_UpdateEntities import trap_ROFF_Clean import trap_SP_GetStringTextString import trap_SP_Register import trap_SP_RegisterServer import trap_SnapVector import trap_GeneticParentsAndChildSelection import trap_BotResetWeaponState import trap_BotFreeWeaponState import trap_BotAllocWeaponState import trap_BotLoadWeaponWeights import trap_BotGetWeaponInfo import trap_BotChooseBestFightWeapon import trap_BotAddAvoidSpot import trap_BotInitMoveState import trap_BotFreeMoveState import trap_BotAllocMoveState import trap_BotPredictVisiblePosition import trap_BotMovementViewTarget import trap_BotReachabilityArea import trap_BotResetLastAvoidReach import trap_BotResetAvoidReach import trap_BotMoveInDirection import trap_BotMoveToGoal import trap_BotResetMoveState import trap_BotFreeGoalState import trap_BotAllocGoalState import trap_BotMutateGoalFuzzyLogic import trap_BotSaveGoalFuzzyLogic import trap_BotInterbreedGoalFuzzyLogic import trap_BotFreeItemWeights import trap_BotLoadItemWeights import trap_BotUpdateEntityItems import trap_BotInitLevelItems import trap_BotSetAvoidGoalTime import trap_BotAvoidGoalTime import trap_BotGetLevelItemGoal import trap_BotGetMapLocationGoal import trap_BotGetNextCampSpotGoal import trap_BotItemGoalInVisButNotVisible import trap_BotTouchingGoal import trap_BotChooseNBGItem import trap_BotChooseLTGItem import trap_BotGetSecondGoal import trap_BotGetTopGoal import trap_BotGoalName import trap_BotDumpGoalStack import trap_BotDumpAvoidGoals import trap_BotEmptyGoalStack import trap_BotPopGoal import trap_BotPushGoal import trap_BotResetAvoidGoals import trap_BotRemoveFromAvoidGoals import trap_BotResetGoalState import trap_BotSetChatName import trap_BotSetChatGender import trap_BotLoadChatFile import trap_BotReplaceSynonyms import trap_UnifyWhiteSpaces import trap_BotMatchVariable import trap_BotFindMatch import trap_StringContains import trap_BotGetChatMessage import trap_BotEnterChat import trap_BotChatLength import trap_BotReplyChat import trap_BotNumInitialChats import trap_BotInitialChat import trap_BotNumConsoleMessages import trap_BotNextConsoleMessage import trap_BotRemoveConsoleMessage import trap_BotQueueConsoleMessage import trap_BotFreeChatState import trap_BotAllocChatState import trap_Characteristic_String import trap_Characteristic_BInteger import trap_Characteristic_Integer import trap_Characteristic_BFloat import trap_Characteristic_Float import trap_BotFreeCharacter import trap_BotLoadCharacter import trap_EA_ResetInput import trap_EA_GetInput import trap_EA_EndRegular import trap_EA_ForcePower import trap_EA_Alt_Attack import trap_EA_View import trap_EA_Move import trap_EA_DelayedJump import trap_EA_Jump import trap_EA_SelectWeapon import trap_EA_MoveRight import trap_EA_MoveLeft import trap_EA_MoveBack import trap_EA_MoveForward import trap_EA_MoveDown import trap_EA_MoveUp import trap_EA_Crouch import trap_EA_Respawn import trap_EA_Use import trap_EA_Attack import trap_EA_Talk import trap_EA_Gesture import trap_EA_Action import trap_EA_Command import trap_EA_SayTeam import trap_EA_Say import trap_AAS_PredictClientMovement import trap_AAS_Swimming import trap_AAS_AlternativeRouteGoals import trap_AAS_PredictRoute import trap_AAS_EnableRoutingArea import trap_AAS_AreaTravelTimeToGoalArea import trap_AAS_AreaReachability import trap_AAS_IntForBSPEpairKey import trap_AAS_FloatForBSPEpairKey import trap_AAS_VectorForBSPEpairKey import trap_AAS_ValueForBSPEpairKey import trap_AAS_NextBSPEntity import trap_AAS_PointContents import trap_AAS_TraceAreas import trap_AAS_PointReachabilityAreaIndex import trap_AAS_PointAreaNum import trap_AAS_Time import trap_AAS_PresenceTypeBoundingBox import trap_AAS_Initialized import trap_AAS_EntityInfo import trap_AAS_AreaInfo import trap_AAS_BBoxAreas import trap_BotUserCommand import trap_BotGetServerCommand import trap_BotGetSnapshotEntity import trap_BotLibTest import trap_BotLibUpdateEntity import trap_BotLibLoadMap import trap_BotLibStartFrame import trap_BotLibDefine import trap_BotLibVarGet import trap_BotLibVarSet import trap_BotLibShutdown import trap_BotLibSetup import trap_DebugPolygonDelete import trap_DebugPolygonCreate import trap_GetEntityToken import trap_GetUsercmd import trap_BotFreeClient import trap_BotAllocateClient import trap_EntityContact import trap_EntitiesInBox import trap_UnlinkEntity import trap_LinkEntity import trap_AreasConnected import trap_AdjustAreaPortalState import trap_InPVSIgnorePortals import trap_InPVS import trap_PointContents import trap_Trace import trap_SetBrushModel import trap_GetServerinfo import trap_SetUserinfo import trap_GetUserinfo import trap_GetConfigstring import trap_SetConfigstring import trap_SendServerCommand import trap_DropClient import trap_LocateGameData import trap_Cvar_VariableStringBuffer import trap_Cvar_VariableValue import trap_Cvar_VariableIntegerValue import trap_Cvar_Set import trap_Cvar_Update import trap_Cvar_Register import trap_SendConsoleCommand import trap_FS_GetFileList import trap_FS_FCloseFile import trap_FS_Write import trap_FS_Read import trap_FS_FOpenFile import trap_Args import trap_Argv import trap_Argc import trap_Milliseconds import trap_Error import trap_Printf import g_timeouttospec import g_forceDodge import g_dismember import g_singlePlayer import g_enableBreath import g_enableDust import g_rankings import pmove_msec import pmove_fixed import g_smoothClients import g_blueteam import g_redteam import g_debugUp import g_debugRight import g_debugForward import g_filterBan import g_banIPs import g_teamForceBalance import g_teamAutoJoin import g_allowVote import g_blood import g_doWarmup import g_warmup import g_motd import g_synchronousClients import g_adaptRespawn import g_weaponTeamRespawn import g_weaponRespawn import g_debugDamage import g_debugAlloc import g_debugMove import g_inactivity import g_forcerespawn import g_quadfactor import g_knockback import g_speed import g_gravity import g_needpass import g_password import g_friendlySaber import g_friendlyFire import g_saberInterpolate import g_capturelimit import g_timelimit import g_duel_fraglimit import g_fraglimit import g_duelWeaponDisable import g_weaponDisable import g_forcePowerDisable import g_spawnInvulnerability import g_forceRegenTime import g_saberLocking import g_privateDuel import g_forceBasedTeams import g_maxForceRank import g_dmflags import g_autoMapCycle import g_restarted import g_maxGameClients import g_maxclients import g_cheats import g_dedicated import g_gametype import g_entities import level import Pickup_Team import CheckTeamStatus import TeamplayInfoMessage import Team_GetLocationMsg import Team_GetLocation import SelectSagaSpawnPoint import SelectCTFSpawnPoint import Team_FreeEntity import Team_ReturnFlag import Team_InitGame import Team_CheckHurtCarrier import Team_FragBonuses import Team_DroppedFlagThink import AddTeamScore import TeamColorString import OtherTeamName import TeamName import OtherTeam import BotAIStartFrame import BotAIShutdownClient import BotAISetupClient import BotAILoadMap import BotAIShutdown import BotAISetup import B_CleanupAlloc import B_InitAlloc import InFieldOfVision import BotOrder import OrgVisible import InitSagaMode import G_ClearClientLog import G_LogExit import G_LogWeaponOutput import G_LogWeaponInit import G_LogWeaponItem import G_LogWeaponPowerup import G_LogWeaponFrag import G_LogWeaponDeath import G_LogWeaponKill import G_LogWeaponDamage import G_LogWeaponFire import G_LogWeaponPickup import Jedi_DodgeEvasion import ForceTelepathy import ForceThrow import ForceSeeing import ForceTeamForceReplenish import ForceTeamHeal import ForceAbsorb import ForceProtect import ForceGrip import ForceRage import ForceSpeed import ForceHeal import ForcePowerUsableOn import WP_ForcePowersUpdate import WP_SpawnInitForcePowers import WP_InitForcePowers import WP_SaberInitBladeData import WP_SaberCanBlock import WP_SaberPositionUpdate import WP_ForcePowerStop import HasSetSaberOnly import G_PreDefSound import G_RefreshNextMap import G_DoesMapSupportGametype import BotInterbreedEndMatch import Svcmd_BotList_f import Svcmd_AddBot_f import G_BotConnect import G_RemoveQueuedBotBegin import G_CheckBotSpawn import G_GetBotInfoByName import G_GetBotInfoByNumber import G_InitBots import UpdateTournamentInfo import G_WriteSessionData import G_InitWorldSession import G_InitSessionData import G_ReadSessionData import Svcmd_GameMem_f import G_InitMemory import G_Alloc import Team_CheckDroppedItem import OnSameTeam import G_RunClient import ClientEndFrame import ClientThink import G_CheckClientTimeouts import ClientCommand import ClientBegin import ClientDisconnect import ClientUserinfoChanged import ClientConnect import G_GetStripEdString import G_Error import G_Printf import SendScoreboardMessageToAllClients import G_LogPrintf import G_RunThink import CheckTeamLeader import SetLeader import FindIntermissionPoint import g_ff_objectives import DeathmatchScoreboardMessage import G_SetStats import MoveClientToIntermission import BlowDetpacks import FireWeapon import G_FilterPacket import G_ProcessIPBans import ConsoleCommand import gJMSaberEnt import SpotWouldTelefrag import CalculateRanks import AddScore import player_die import ClientSpawn import InitBodyQue import BeginIntermission import respawn import CopyToBodyQue import SelectSpawnPoint import SetClientViewAngle import PickTeam import TeamLeader import TeamCount import CheckGauntletAttack import SnapVectorTowards import CalcMuzzlePoint import LogAccuracyHit import WP_FireGenericBlasterMissile import WP_FireTurretMissile import G_PlayerBecomeATST import ATST_ManageDamageBoxes import TeleportPlayer import trigger_teleporter_touch import Touch_DoorTrigger import G_RunMover import WP_FireBlasterMissile import G_ExplodeMissile import G_BounceProjectile import CreateMissile import G_RunMissile import G_ReflectMissile import ExplodeDeath import TossClientCubes import TossClientItems import TossClientWeapon import body_die import G_RadiusDamage import G_Damage import CanDamage import trap_G2API_SetBoneAnim import trap_G2API_GetGLAName import trap_G2API_SetBoneAngles import trap_G2API_CleanGhoul2Models import trap_G2API_RemoveGhoul2Model import trap_G2API_HasGhoul2ModelOnIndex import trap_G2API_DuplicateGhoul2Instance import trap_G2API_CopySpecificGhoul2Model import trap_G2API_CopyGhoul2Instance import trap_G2API_SetBoltInfo import trap_G2API_AddBolt import trap_G2API_InitGhoul2Model import trap_G2API_GetBoltMatrix_NoReconstruct import trap_G2API_GetBoltMatrix import trap_G2_HaveWeGhoul2Models import trap_G2_SetGhoul2ModelIndexes import trap_G2_ListModelBones import trap_G2_ListModelSurfaces import G_SkinIndex import BuildShaderStateConfig import AddRemap import G_SetOrigin import G_AddEvent import G_AddPredictableEvent import vtos import tv import G_TouchSolids import G_TouchTriggers import G_EntitiesFree import G_FreeEntity import G_KillG2Queue import G_SendG2KillQueue import TryUse import G_EntitySound import G_SoundAtLoc import G_Sound import G_MuteSound import G_ScreenShake import G_PlayEffect import G_TempEntity import G_Spawn import G_InitGentity import G_SetAngles import G_SetMovedir import G_UseTargets import G_PickTarget import G_RadiusList import G_Find import G_KillBox import G_TeamCommand import G_EffectIndex import G_SoundIndex import G_ModelIndex import SaveRegisteredItems import RegisterItem import ClearRegisteredItems import Touch_Item import Add_Ammo import ArmorIndex import Think_Weapon import FinishSpawningItem import G_SpawnItem import SetRespawn import LaunchItem import Drop_Item import PrecacheItem import UseHoldableItem import RespawnItem import G_RunItem import G_CheckTeamItems import ItemUse_MedPack import ItemUse_Seeker import ItemUse_Sentry import ItemUse_Shield import ItemUse_Binoculars import G_GetDuelWinner import Cmd_EngageDuel_f import Cmd_ToggleSaber_f import G_ItemUsable import Cmd_SaberAttackCycle_f import Cmd_FollowCycle_f import SetTeam import BroadcastTeamChange import StopFollowing import Cmd_Score_f import G_NewString import G_SpawnEntitiesFromString import G_SpawnVector import G_SpawnInt import G_SpawnFloat import G_SpawnString import g2SaberInstance import precachedKyle import forcePowerDarkLight import WeaponAttackAnim import WeaponReadyAnim import BG_OutOfMemory import BG_StringAlloc import BG_TempFree import BG_TempAlloc import BG_AllocUnaligned import BG_Alloc import BG_CanUseFPNow import BG_HasYsalamiri import BG_GetItemIndexByTag import BG_ParseAnimationFile import BG_PlayerTouchesItem import BG_G2PlayerAngles import BG_PlayerStateToEntityStateExtraPolate import BG_PlayerStateToEntityState import BG_TouchJumpPad import BG_AddPredictableEventToPlayerstate import BG_EvaluateTrajectoryDelta import BG_EvaluateTrajectory import BG_ForcePowerDrain import BG_SaberStartTransAnim import BG_InDeathAnim import BG_InRoll import BG_SaberInSpecialAttack import BG_SpinningSaberAnim import BG_FlippingAnim import BG_SaberInIdle import BG_SaberInSpecial import BG_SaberInAttack import BG_DirectFlippingAnim import BG_InSaberStandAnim import BG_InSpecialJump import BG_LegalizedForcePowers import saberMoveData import BG_CanItemBeGrabbed import BG_FindItemForHoldable import BG_FindItemForPowerup import BG_FindItemForWeapon import BG_FindItem import vectoyaw import bg_numItems import bg_itemlist import Pmove import PM_UpdateViewAngles import pm import bgForcePowerCost import forceMasteryPoints import forceMasteryLevels import bgGlobalAnimations import BGPAFtextLoaded import forcePowerSorted import WP_MuzzlePoint import ammoData import weaponData import GetStringForID import GetIDForString import Q_irand import irand import flrand import Rand_Init import Com_Printf import Com_Error import Info_NextPair import Info_Validate import Info_SetValueForKey_Big import Info_SetValueForKey import Info_RemoveKey_big import Info_RemoveKey import Info_ValueForKey import va import Q_CleanStr import Q_PrintStrlen import Q_strcat import Q_strncpyz import Q_strrchr import Q_strupr import Q_strlwr import Q_stricmpn import Q_strncmp import Q_stricmp import Q_isalpha import Q_isupper import Q_islower import Q_isprint import Com_sprintf import Parse3DMatrix import Parse2DMatrix import Parse1DMatrix import SkipRestOfLine import SkipBracedSection import COM_MatchToken import COM_ParseWarning import COM_ParseError import COM_Compress import COM_ParseExt import COM_Parse import SkipWhitespace import COM_GetCurrentParseLine import COM_BeginParseSession import COM_DefaultExtension import COM_StripExtension import COM_SkipPath import Com_Clamp import PerpendicularVector import AngleVectors import MatrixMultiply import MakeNormalVectors import RotateAroundDirection import RotatePointAroundVector import ProjectPointOnPlane import PlaneFromPoints import AngleDelta import AngleNormalize180 import AngleNormalize360 import AnglesSubtract import AngleSubtract import LerpAngle import AngleMod import BoxOnPlaneSide import SetPlaneSignbits import AxisCopy import AxisClear import AnglesToAxis import vectoangles import Q_crandom import Q_random import Q_rand import Q_acos import Q_log2 import VectorRotate import Vector4Scale import VectorNormalize2 import VectorNormalize import CrossProduct import VectorInverse import VectorNormalizeFast import DistanceSquared import Distance import VectorLengthSquared import VectorLength import VectorCompare import AddPointToBounds import ClearBounds import RadiusFromBounds import NormalizeColor import ColorBytes4 import ColorBytes3 import _VectorMA import _VectorScale import _VectorCopy import _VectorAdd import _VectorSubtract import _DotProduct import ByteToDir import DirToByte import powf import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkBlue import colorLtBlue import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import colorTable import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import forceSpeedLevels import FloatSwap import LongSwap import ShortSwap import acos import fabs import abs import tan import atan2 import cos import sin import sqrt import floor import ceil import memcpy import memset import memmove import sscanf import vsprintf import _atoi import atoi import _atof import atof import toupper import tolower import strncpy import strstr import strchr import strcmp import strcpy import strcat import strlen import rand import srand import qsort