/** Initialize 3D actor @param bodyIdx 3D actor body index @param actorIdx 3D actor index */ void initModelActor(int32 bodyIdx, int16 actorIdx) { ActorStruct *localActor; int32 entityIdx; int32 entityIdxOld; int currentIndex; uint16 *ptr; int16 var1, var2, var3, var4; int32 result, result1, result2; result = 0; localActor = &sceneActors[actorIdx]; if (localActor->staticFlags.bIsSpriteActor) return; if (actorIdx == 0 && heroBehaviour == kProtoPack && localActor->armor != 0 && localActor->armor != 1) { // if hero setBehaviour(kNormal); } if (bodyIdx != -1) { entityIdx = initBody(bodyIdx, actorIdx); } else { entityIdx = -1; } if (entityIdx != -1) { if (localActor->entity == entityIdx) return; entityIdxOld = localActor->entity; localActor->entity = entityIdx; localActor->body = bodyIdx; currentIndex = localActor->entity; if (bottomLeftX == -32000) { ptr = (uint16 *) bodyTable[localActor->entity]; ptr++; var1 = *((int16 *)ptr++); var2 = *((int16 *)ptr++); localActor->boudingBox.Y.bottomLeft = *((int16 *)ptr++); localActor->boudingBox.Y.topRight = *((int16 *)ptr++); var3 = *((int16 *)ptr++); var4 = *((int16 *)ptr++); if (localActor->staticFlags.bUseMiniZv) { result1 = var2 - var1; // take smaller for bound result2 = var4 - var3; if (result1 < result2) result = result1; else result = result2; result = abs(result); result >>= 1; } else {
inline void initializeNewObject(size_t mark, void *vft, RexxBehaviour *b) { // we need to make this a function object of some type in case // a GC cycle gets triggered before this is complete. By default, // we make this a generic object setVirtualFunctions(vft); setBehaviour(b); // this has a clean set of flags, except for the live mark header.initHeader(mark); // make sure the object is cleared in case this gets marked out of any of // the constructors. clearObject(); }
/** Restart hero variables while opening new scenes */ void restartHeroScene() { sceneHero->controlMode = 1; memset(&sceneHero->dynamicFlags, 0, 2); memset(&sceneHero->staticFlags, 0, 2); sceneHero->staticFlags.bComputeCollisionWithObj = 1; sceneHero->staticFlags.bComputeCollisionWithBricks = 1; sceneHero->staticFlags.bIsZonable = 1; sceneHero->staticFlags.bCanDrown = 1; sceneHero->staticFlags.bCanFall = 1; sceneHero->armor = 1; sceneHero->positionInMoveScript = -1; sceneHero->labelIdx = -1; sceneHero->positionInLifeScript = 0; sceneHero->zone = -1; sceneHero->angle = previousHeroAngle; setActorAngleSafe(sceneHero->angle, sceneHero->angle, 0, &sceneHero->move); setBehaviour(previousHeroBehaviour); cropBottomScreen = 0; }
void setFemale () { setBehaviour (__DRAGONNINJAFEMALEBEHAVIOUR); }
// To control the aspect of the ninja // It can be male or female! void setMale () { setBehaviour (__DRAGONNINJAMALEBEHAVIOUR); }