Remove skedar

This commit is contained in:
Ryan Dwyer 2022-11-05 11:48:51 +10:00
parent 8367d9bc31
commit 7f7dbfc830
5 changed files with 44 additions and 317 deletions

View File

@ -137,13 +137,6 @@ s32 g_FemGuardHeads[3] = {
u32 bodyGetRace(s32 bodynum)
{
switch (bodynum) {
case BODY_SKEDAR:
case BODY_MINISKEDAR:
case BODY_SKEDARKING:
return RACE_SKEDAR;
}
return RACE_HUMAN;
}
@ -209,14 +202,6 @@ struct model *body0f02ce8c(s32 bodynum, s32 headnum, struct modelfiledata *bodyf
}
}
}
} else if (bodyfiledata->skel == &g_SkelSkedar) {
if (g_HeadsAndBodies[bodynum].canvaryheight && varyheight && bodynum == BODY_SKEDAR) {
// Set height to between 65% and 85%
f32 frac = RANDOMFRAC();
scale *= 2.0f * (0.1f * frac) - 0.1f + 0.75f;
}
if (1);
}
}
@ -487,10 +472,6 @@ void bodyAllocateChr(s32 stagenum, struct packedchr *packed, s32 cmdindex)
// Make chr punch slower
chr->flags2 |= CHRFLAG1_ADJUSTPUNCHSPEED;
}
if (CHRRACE(chr) == RACE_SKEDAR) {
chr->chrflags |= CHRCFLAG_FORCEAUTOAIM;
}
}
}
}

View File

@ -1656,18 +1656,15 @@ void chrHandleJointPositioned(s32 joint, Mtxf *mtx)
}
// Apply flinch when chr is shot
if (g_CurModelChr->flinchcnt >= 0
&& (CHRRACE(g_CurModelChr) == RACE_HUMAN || CHRRACE(g_CurModelChr) == RACE_SKEDAR)) {
bool isskedar = CHRRACE(g_CurModelChr) == RACE_SKEDAR;
if (g_CurModelChr->flinchcnt >= 0 && (CHRRACE(g_CurModelChr) == RACE_HUMAN)) {
if (g_CurModelChr->hidden2 & CHRH2FLAG_HEADSHOTTED) {
if (joint == neckjoint) {
f32 flinchamount = chrGetFlinchAmount(g_CurModelChr);
s32 flinchtype = (g_CurModelChr->hidden2 >> 13) & 7;
f32 mult = isskedar ? 25.0f : 60.0f;
f32 mult = 60.0f;
if ((flinchtype & 1) == 0) {
mult = isskedar ? 37.5f : 85.0f;
mult = 85.0f;
}
if (flinchtype >= 5 && flinchtype < 8) {
@ -1856,13 +1853,6 @@ void chr0f022214(struct chrdata *chr, struct prop *prop, bool fulltick)
if (obj->hidden & OBJHFLAG_EMBEDDED) {
mtx00015be4(sp104, &obj->embedment->matrix, &sp80);
thing.unk00 = &sp80;
} else if (CHRRACE(chr) == RACE_SKEDAR) {
// The skedar hand position is rotated weirdly, so compensate for it
mtx4LoadYRotation(1.3192588090897f, &sp80);
mtx4LoadZRotation(1.5705462694168f, &sp40);
mtx4MultMtx4InPlace(&sp40, &sp80);
mtx4MultMtx4InPlace(sp104, &sp80);
thing.unk00 = &sp80;
} else if (prop == chr->weapons_held[HAND_LEFT]) {
// Flip the model
mtx4LoadZRotation(M_BADPI, &sp80);
@ -3098,9 +3088,6 @@ void chrGetBloodColour(s16 bodynum, u8 *colour1, u32 *colour2)
}
return;
case BODY_MRBLONDE:
case BODY_SKEDAR:
case BODY_MINISKEDAR:
case BODY_SKEDARKING:
if (colour1) {
colour1[0] = 0x40;
colour1[1] = 0x19;
@ -3259,20 +3246,6 @@ Gfx *chrRender(struct prop *prop, Gfx *gdl, bool xlupass)
renderdata.unk30 = 7;
}
// Set Skedar eyes open or closed
if (model->filedata->skel == &g_SkelSkedar) {
struct modelnode *node1 = modelGetPart(model->filedata, MODELPART_SKEDAR_EYESOPEN);
struct modelnode *node2 = modelGetPart(model->filedata, MODELPART_SKEDAR_EYESCLOSED);
if (node1 && node2) {
union modelrwdata *data1 = modelGetNodeRwData(model, node1);
union modelrwdata *data2 = modelGetNodeRwData(model, node2);
data2->toggle.visible = chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD;
data1->toggle.visible = !data2->toggle.visible;
}
}
// Set Maian eyes open or closed
if (chr->headnum == HEAD_THEKING
|| chr->headnum == HEAD_ELVIS
@ -3348,11 +3321,7 @@ Gfx *chrRender(struct prop *prop, Gfx *gdl, bool xlupass)
f32 radius;
if (gaptoground <= 400 && g_Vars.currentplayer->visionmode != VISIONMODE_XRAY) {
if (chr->bodynum == BODY_SKEDAR || chr->bodynum == BODY_SKEDARKING) {
radius = 80;
} else {
radius = 35;
}
radius = 35;
if (chr->chrflags & CHRCFLAG_NOSHADOW) {
shadowalpha = 0;
@ -5041,7 +5010,7 @@ void chrHit(struct shotdata *shotdata, struct hit *hit)
if (!chr->noblood && !isclose && shotdata->gset.weaponnum != WEAPON_TRANQUILIZER) {
u8 darker;
if (chr->bodynum == BODY_MRBLONDE || race == RACE_SKEDAR) {
if (chr->bodynum == BODY_MRBLONDE) {
darker = true;
} else {
darker = false;
@ -5062,7 +5031,7 @@ void chrHit(struct shotdata *shotdata, struct hit *hit)
&& shotdata->gset.weaponnum != WEAPON_TRANQUILIZER) {
u8 darker;
if (chr->bodynum == BODY_MRBLONDE || race == RACE_SKEDAR) {
if (chr->bodynum == BODY_MRBLONDE) {
darker = true;
} else {
darker = false;
@ -5141,23 +5110,6 @@ void chrsCheckForNoise(f32 noiseradius)
if (distance > 1.0f) {
chrRecordLastHearTargetTime(&g_ChrSlots[i]);
#if PIRACYCHECKS
{
s32 *i = (s32 *)&__scHandleRetrace;
s32 *end = (s32 *)&__scHandleTasks;
u32 checksum = 0;
while (i < end) {
checksum *= 2;
checksum += *i;
i++;
}
if (checksum != CHECKSUM_PLACEHOLDER) {
g_HeadsAndBodies[BODY_SKEDARKING].filenum = 0;
}
}
#endif
}
}
}

View File

@ -1669,8 +1669,6 @@ void chrChooseStandAnimation(struct chrdata *chr, f32 mergetime)
modelSetAnimLooping(chr->model, 0, 16);
modelSetAnimEndFrame(chr->model, 120);
}
} else if (race == RACE_SKEDAR) {
modelSetAnimation(chr->model, ANIM_00C0, random() % 2, 0, 0.5, mergetime);
} else if (race == RACE_DRCAROLL) {
modelSetAnimation(chr->model, ANIM_013E, 0, 0, 0.5, mergetime);
} else if (race == RACE_ROBOT) {
@ -2073,14 +2071,6 @@ void chrSidestepChooseAnimation(struct chrdata *chr)
modelSetAnimEndFrame(chr->model, 32);
}
}
} else if (race == RACE_SKEDAR) {
if (chr->act_sidestep.side) {
modelSetAnimation(chr->model, ANIM_0328, false, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 27);
} else {
modelSetAnimation(chr->model, ANIM_0328, true, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 27);
}
}
}
@ -2176,14 +2166,6 @@ void chrRunPosChooseAnimation(struct chrdata *chr)
#endif
modelSetAnimation(chr->model, ANIM_RUNNING_ONEHANDGUN, flip, 0, mult, 16);
}
} else if (race == RACE_SKEDAR) {
f32 mult = 0.5;
#if PAL
chr->act_runpos.eta60 = 1.0f / (func0f02dff0(ANIM_SKEDAR_RUNNING) * mult) * distance * 0.83333331346512f;
#else
chr->act_runpos.eta60 = 1.0f / (func0f02dff0(ANIM_SKEDAR_RUNNING) * mult) * distance;
#endif
modelSetAnimation(chr->model, ANIM_SKEDAR_RUNNING, flip, 0, mult, 16);
}
}
@ -3211,57 +3193,6 @@ void chrBeginDeath(struct chrdata *chr, struct coord *dir, f32 relangle, s32 hit
}
}
}
} else if (race == RACE_SKEDAR) {
struct animtablerow *row;
if (relangle > 2.3558194637299f && relangle < 3.9263656139374f) {
// Player is behind the Skedar - use specific set of anims
row = &g_AnimTablesByRace[race][1 + (random() % 6)].deathanims[random() % 3];
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
} else {
// Normal Skedar death
if (index >= 0
&& g_AnimTablesByRace[race][index].deathanims != NULL
&& g_AnimTablesByRace[race][index].deathanimcount > 0) {
s32 tmp = random() % g_AnimTablesByRace[race][index].deathanimcount;
row = &g_AnimTablesByRace[race][index].deathanims[tmp];
} else {
row = &g_AnimTablesByRace[race][0].deathanims[0];
}
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
impactforce3 = gsetGetImpactForce(gset);
if (impactforce3 <= 0 && (chr->chrflags & CHRCFLAG_DIEWITHFORCE)) {
impactforce3 = 6;
}
if (row->unk10 != 0 && impactforce3 > 0) {
chr->act_die.timeextra = impactforce3 * 15;
chr->act_die.elapseextra = 0;
chr->act_die.extraspeed.x = dir->x * impactforce3;
chr->act_die.extraspeed.y = dir->y * impactforce3;
chr->act_die.extraspeed.z = dir->z * impactforce3;
}
}
} else if (race == RACE_DRCAROLL) {
// empty
}
// Handle multiplayer stats and kill count
@ -3279,7 +3210,7 @@ void chrBeginDeath(struct chrdata *chr, struct coord *dir, f32 relangle, s32 hit
}
// Drop items
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if (chr->weapons_held[0] && (chr->weapons_held[0]->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(chr->weapons_held[0], DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
@ -3507,8 +3438,6 @@ void chrYeetFromPos(struct chrdata *chr, struct coord *exppos, f32 force)
if (race == RACE_HUMAN) {
row = &g_YeetAnimsHuman[g_YeetAnimIndexesByRaceAngle[race][angleindex].indexes[subindex]];
} else if (race == RACE_SKEDAR) {
row = &g_YeetAnimsSkedar[g_YeetAnimIndexesByRaceAngle[race][angleindex].indexes[subindex]];
}
chrStopFiring(chr);
@ -3713,36 +3642,6 @@ void chrChoke(struct chrdata *chr, s32 choketype)
if (nextindexmaian >= ARRAYCOUNT(sounds)) {
nextindexmaian = 0;
}
} else if (race == RACE_SKEDAR) {
if (chr->bodynum == BODY_MINISKEDAR) {
s16 sounds[] = {
SFX_SKEDAR_ROAR_0536,
SFX_SKEDAR_ROAR_0537,
SFX_SKEDAR_ROAR_0538,
SFX_SKEDAR_ROAR_0539,
SFX_SKEDAR_ROAR_053A,
};
soundnum = sounds[random() % 5];
nextindexskedar++;
if (nextindexskedar >= ARRAYCOUNT(sounds)) {
nextindexskedar = 0;
}
} else {
s16 sounds[] = {
SFX_SKEDAR_ROAR_052D,
SFX_SKEDAR_ROAR_052E,
SFX_SKEDAR_ROAR_052F,
};
soundnum = sounds[random() % 3];
nextindexskedar++;
if (nextindexskedar >= ARRAYCOUNT(sounds)) {
nextindexskedar = 0;
}
}
} else if (chr->headnum == HEAD_DDSHOCK) {
s16 sounds[] = {
SFX_ARGH_MALE_0086,
@ -4370,7 +4269,7 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
// If chr is dying or already dead, consider making their head flinch
// then we're done
if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD) {
if (hitpart == HITPART_HEAD && chr->actiontype == ACT_DIE && race != RACE_SKEDAR && isfar) {
if (hitpart == HITPART_HEAD && chr->actiontype == ACT_DIE && isfar) {
struct coord pos;
pos.x = vprop->pos.x - vector->x;
pos.y = vprop->pos.y - vector->y;
@ -4431,27 +4330,17 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
damage *= 0.25f;
}
// Hits to a Skedar's tail are 10x more lethal
if (race == RACE_SKEDAR && hitpart == HITPART_TAIL) {
damage *= 10;
}
// Apply damage multipliers based on which body parts were hit,
// and flinch head if shot in the head
if (hitpart == HITPART_HEAD) {
if (race == RACE_SKEDAR) {
damage += damage;
damage *= 4;
if (isfar && !usedshield) {
chrFlinchHead(chr, angle);
} else {
damage *= 4;
damage *= headshotdamagescale;
if (isfar && !usedshield) {
chrFlinchHead(chr, angle);
damage *= headshotdamagescale;
if (gset->weaponnum == WEAPON_COMBATKNIFE && gset->weaponfunc != FUNC_POISON) {
damage += damage;
}
if (gset->weaponnum == WEAPON_COMBATKNIFE && gset->weaponfunc != FUNC_POISON) {
damage += damage;
}
}
} else if (hitpart == HITPART_TORSO) {
@ -4491,10 +4380,6 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
if (aprop) {
achr = aprop->chr;
if (achr && achr->bodynum == BODY_MINISKEDAR) {
blurscale = 4;
}
}
if (!achr
@ -5461,7 +5346,7 @@ void chrNavTickMagic(struct chrdata *chr, struct waydata *waydata, f32 speed, st
chrSetLookAngle(chr, atan2f(prop->pos.x - pad.pos.x, prop->pos.z - pad.pos.z));
}
if (CHRRACE(chr) == RACE_HUMAN || CHRRACE(chr) == RACE_SKEDAR) {
if (CHRRACE(chr) == RACE_HUMAN) {
chrStop(chr);
}
}
@ -5560,7 +5445,7 @@ void chrGoPosChooseAnimation(struct chrdata *chr)
return;
}
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if ((gun1 && gun2) || (!gun1 && !gun2)) {
heavy = false;
flip = random() % 2;
@ -5574,15 +5459,7 @@ void chrGoPosChooseAnimation(struct chrdata *chr)
}
}
if (race == RACE_SKEDAR) {
if (gospeed == GOPOSFLAG_RUN) {
anim = ANIM_SKEDAR_RUNNING;
} else if (gospeed == GOPOSFLAG_JOG) {
anim = ANIM_0393;
} else if (gospeed == GOPOSFLAG_WALK) {
anim = ANIM_0392;
}
} else {
{
if (heavy) {
if (gospeed == GOPOSFLAG_RUN) {
// Human, heavy weapon, running
@ -5936,7 +5813,7 @@ void chrPatrolChooseAnimation(struct chrdata *chr)
s32 ismale = g_HeadsAndBodies[chr->bodynum].ismale;
f32 speed;
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if ((leftprop && rightprop) || (!leftprop && !rightprop)) {
// No weapon, or double weapons
heavy = false;
@ -5952,19 +5829,15 @@ void chrPatrolChooseAnimation(struct chrdata *chr)
}
}
if (race == RACE_SKEDAR) {
modelSetAnimation(chr->model, ANIM_0392, flip, 0, 0.25f, 16);
} else {
speed = 0.5f * func0f02dff0(ANIM_0028) / func0f02dff0(ANIM_006B);
speed = 0.5f * func0f02dff0(ANIM_0028) / func0f02dff0(ANIM_006B);
if (heavy) {
modelSetAnimation(chr->model, random() % 2 ? ANIM_0018 : ANIM_0028, flip, 0, speed, 16);
} else if (ismale) {
s32 anims[] = { ANIM_006B, ANIM_001B, ANIM_0016 };
modelSetAnimation(chr->model, anims[random() % 3], flip, 0, speed, 16);
} else {
modelSetAnimation(chr->model, random() % 2 ? ANIM_005C : ANIM_0072, flip, 0, speed, 16);
}
if (heavy) {
modelSetAnimation(chr->model, random() % 2 ? ANIM_0018 : ANIM_0028, flip, 0, speed, 16);
} else if (ismale) {
s32 anims[] = { ANIM_006B, ANIM_001B, ANIM_0016 };
modelSetAnimation(chr->model, anims[random() % 3], flip, 0, speed, 16);
} else {
modelSetAnimation(chr->model, random() % 2 ? ANIM_005C : ANIM_0072, flip, 0, speed, 16);
}
} else if (race == RACE_DRCAROLL) {
modelSetAnimation(chr->model, ANIM_015F, false, 0, 0.5f, 16);
@ -6484,7 +6357,7 @@ bool chrTrySidestep(struct chrdata *chr)
{
u8 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
if ((race == RACE_HUMAN)
&& chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
@ -6558,9 +6431,7 @@ bool chrTryRunSideways(struct chrdata *chr)
{
u32 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
&& chrIsReadyForOrders(chr)
&& g_Vars.lvframe60 - chr->lastwalk60 > TICKS(180)) {
if (race == RACE_HUMAN && chrIsReadyForOrders(chr) && g_Vars.lvframe60 - chr->lastwalk60 > TICKS(180)) {
struct prop *prop = chr->prop;
f32 distance = 200.0f + RANDOMFRAC() * 200.0f;
struct coord vector;
@ -6679,9 +6550,7 @@ bool chrTryAttackAmount(struct chrdata *chr, u32 arg1, u32 arg2, u8 lower, u8 up
{
u8 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
&& chrIsReadyForOrders(chr)
&& chr->weapons_held[0]) {
if (race == RACE_HUMAN && chrIsReadyForOrders(chr) && chr->weapons_held[0]) {
s32 quantity;
f32 percentage;
struct weaponobj *weapon = chr->weapons_held[0]->weapon;
@ -6733,7 +6602,7 @@ bool chrTryAttackStand(struct chrdata *chr, u32 attackflags, s32 entityid)
return true;
}
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if (chrGetHeldUsableProp(chr, 0) ||
(chrGetHeldUsableProp(chr, 1))) {
chrAttackStand(chr, attackflags, entityid);
@ -6749,7 +6618,7 @@ bool chrTryAttackKneel(struct chrdata *chr, u32 attackflags, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if (chrIsReadyForOrders(chr) && (chrGetHeldUsableProp(chr, 0) || chrGetHeldUsableProp(chr, 1))) {
chrAttackKneel(chr, attackflags, entityid);
return true;
@ -6763,7 +6632,7 @@ bool chrTryAttackLie(struct chrdata *chr, u32 attackflags, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (race == RACE_HUMAN) {
if (chrIsReadyForOrders(chr) && (chrGetHeldUsableProp(chr, 0) || chrGetHeldUsableProp(chr, 1))) {
chrAttackLie(chr, attackflags, entityid);
return true;
@ -7477,37 +7346,6 @@ bool chrTryPunch(struct chrdata *chr, u8 reverse)
chrhitradius = 120;
playerhitradius = 120;
animindex = random() % 11;
} else if (race == RACE_SKEDAR) {
anims = g_SkedarPunchAnims;
chrhitradius = 200;
#if VERSION >= VERSION_NTSC_1_0
playerhitradius = 200;
#else
playerhitradius = 350;
#endif
startframe = 20;
if (reverse) {
// Skedar kick behind
animindex = 5;
} else if (!chr->weapons_held[HAND_RIGHT] && !chr->weapons_held[HAND_LEFT]) {
// Unarmed: Only use indexes 0 or 1
animindex = random() % 2;
} else {
// Allow indexes 0-4, but if 3 or 4 then flip the anim based on
// which hand is holding the gun
animindex = random() % 5;
if (animindex >= 3) {
if (!chr->weapons_held[HAND_RIGHT] || !chr->weapons_held[HAND_LEFT]) {
if (chr->weapons_held[HAND_RIGHT]) {
chranimflags = 0;
} else if (chr->weapons_held[HAND_LEFT]) {
chranimflags = CHRANIMFLAG_FLIP;
}
}
}
}
}
if (chrHasFlag(chr, CHRFLAG1_ADJUSTPUNCHSPEED, BANK_1)) {
@ -7613,7 +7451,7 @@ void chrTickStand(struct chrdata *chr)
return;
}
if (!chr->aibot && (race == RACE_HUMAN || race == RACE_SKEDAR) && chr->act_stand.flags > 0) {
if (!chr->aibot && race == RACE_HUMAN && chr->act_stand.flags > 0) {
if (chr->act_stand.reaim) {
chr->act_stand.turning = chrTurn(chr, chr->act_stand.turning, modelGetNumAnimFrames(chr->model) - 1, 1, 0);
@ -7649,9 +7487,6 @@ void chrTickStand(struct chrdata *chr)
modelSetAnimEndFrame(chr->model, animGetNumFrames(ANIM_0028) - 1);
}
}
} else if (race == RACE_SKEDAR) {
modelSetAnimation(chr->model, ANIM_0392, random() % 2, 0, 0.5f, 16);
modelSetAnimEndFrame(chr->model, animGetNumFrames(ANIM_0392) - 1);
}
} else if (chr->act_stand.flags & ATTACKFLAG_AIMATDIRECTION) {
chr->act_stand.flags = 0;
@ -11343,8 +11178,6 @@ void chrTickRunPos(struct chrdata *chr)
} else {
fVar7 = func0f02dff0(ANIM_RUNNING_TWOHANDGUN);
}
} else if (race == RACE_SKEDAR) {
fVar7 = func0f02dff0(ANIM_SKEDAR_RUNNING);
}
chr->act_runpos.neardist += fVar7 * g_Vars.lvupdate60freal * modelGetAbsAnimSpeed(model);
@ -12718,9 +12551,7 @@ void chrTickPatrol(struct chrdata *chr)
bool chrTrySkJump(struct chrdata *chr, u8 arg1, u8 arg2, s32 arg3, u8 arg4)
{
if (chr && chr->actiontype != ACT_SKJUMP
&& chrIsReadyForOrders(chr)
&& CHRRACE(chr) == RACE_SKEDAR) {
if (chr && chr->actiontype != ACT_SKJUMP && chrIsReadyForOrders(chr)) {
return chrStartSkJump(chr, arg1, arg2, arg3, arg4);
}
@ -12901,7 +12732,7 @@ void chraTick(struct chrdata *chr)
|| (chr->chrflags & CHRCFLAG_00040000)
|| chr->alertness >= 65
|| (chr->aibot && (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD))) {
u8 pass = race == RACE_HUMAN || race == RACE_SKEDAR;
u8 pass = race == RACE_HUMAN;
chr->sleep = 0;
if (race == RACE_ROBOT) {

View File

@ -113,27 +113,6 @@ s32 footstepChooseSound(struct chrdata *chr, s32 footstepindex)
return 0;
}
if (CHRRACE(chr) == RACE_SKEDAR && chr->bodynum != BODY_MINISKEDAR) {
u32 result;
chr->lastfootsample ^= 1;
if (floortype == FLOORTYPE_METAL) {
if (chr->lastfootsample) {
result = SFX_FOOTSTEP_8191;
} else {
result = SFX_FOOTSTEP_8192;
}
} else {
if (chr->lastfootsample) {
result = SFX_FOOTSTEP_818F;
} else {
result = SFX_FOOTSTEP_8190;
}
}
return result;
}
running = footstepIsRunning(g_FootstepAnims[footstepindex].animnum);
do {
@ -168,18 +147,10 @@ void footstepCheckDefault(struct chrdata *chr)
for (i = 0; i < ARRAYCOUNT(g_FootstepAnims); i++) {
if (modelGetAnimNum(chr->model) == g_FootstepAnims[i].animnum) {
if (CHRRACE(chr) == RACE_SKEDAR && g_FootstepAnims[i].animnum == ANIM_SKEDAR_RUNNING) {
if ((frame >= 2 && prevframe < 2) || (frame >= 17 && prevframe < 17)) { \
chr->footstep = 1;
} else if ((frame >= 10 && prevframe < 10) || (frame >= 25 && prevframe < 25)) {
chr->footstep = 2;
}
} else {
if (frame >= g_FootstepAnims[i].frame1 && prevframe < g_FootstepAnims[i].frame1) {
chr->footstep = 1;
} else if (frame >= g_FootstepAnims[i].frame2 && prevframe < g_FootstepAnims[i].frame2) {
chr->footstep = 2;
}
if (frame >= g_FootstepAnims[i].frame1 && prevframe < g_FootstepAnims[i].frame1) {
chr->footstep = 1;
} else if (frame >= g_FootstepAnims[i].frame2 && prevframe < g_FootstepAnims[i].frame2) {
chr->footstep = 2;
}
soundnum = footstepChooseSound(chr, i);
@ -248,18 +219,10 @@ void footstepCheckMagic(struct chrdata *chr)
chr->oldframe = frame;
if (ydiff < 250 && xdiff * xdiff + zdiff * zdiff < 3000000) {
if (CHRRACE(chr) == RACE_SKEDAR && g_FootstepAnims[index].animnum == ANIM_SKEDAR_RUNNING) {
if ((frame >= 2 && prevframe < 2) || (frame >= 17 && prevframe < 17)) {
chr->footstep = 1;
} else if ((frame >= 10 && prevframe < 10) || (frame >= 25 && prevframe < 25)) {
chr->footstep = 2;
}
} else {
if (frame >= g_FootstepAnims[index].frame1 && prevframe < g_FootstepAnims[index].frame1) {
chr->footstep = 1;
} else if (frame >= g_FootstepAnims[index].frame2 && prevframe < g_FootstepAnims[index].frame2) {
chr->footstep = 2;
}
if (frame >= g_FootstepAnims[index].frame1 && prevframe < g_FootstepAnims[index].frame1) {
chr->footstep = 1;
} else if (frame >= g_FootstepAnims[index].frame2 && prevframe < g_FootstepAnims[index].frame2) {
chr->footstep = 2;
}
soundnum = footstepChooseSound(chr, index);

View File

@ -68,7 +68,7 @@ void splatTickChr(struct prop *prop)
if (race != RACE_DRCAROLL && race != RACE_ROBOT) {
u8 isskedar = false;
if (race == RACE_SKEDAR || chr->bodynum == BODY_MRBLONDE) {
if (chr->bodynum == BODY_MRBLONDE) {
isskedar = true;
}