BOOL ObjectActionCornerScale(C4Object *cObj) { int32_t iRangeX,iRangeY; // Scaling: check range max to min if (cObj->GetProcedure()==DFA_SCALE) { if (!CheckCornerScale(cObj,iRangeX,iRangeY)) return FALSE; } // Swimming: check range min to max else { iRangeY=2; while (!CornerScaleOkay(cObj,iRangeY,iRangeY)) { iRangeY++; if (iRangeY>CornerRange) return FALSE; } iRangeX=iRangeY; } // Do corner scale if (!cObj->SetActionByName("KneelUp")) cObj->SetActionByName("Walk"); cObj->xdir=cObj->ydir=0; //if (cObj->Action.Dir==DIR_Left) cObj->Action.ComDir=COMD_Left; else cObj->Action.ComDir=COMD_Right; if (cObj->Action.Dir==DIR_Left) cObj->fix_x-=itofix(iRangeX); else cObj->fix_x+=itofix(iRangeX); cObj->fix_y-=itofix(iRangeY); cObj->x=fixtoi(cObj->fix_x); cObj->y=fixtoi(cObj->fix_y); return TRUE; }
BOOL CheckCornerScale(C4Object *cObj, int32_t &iRangeX, int32_t &iRangeY) { for (iRangeX=CornerRange; iRangeX>=1; iRangeX--) for (iRangeY=CornerRange; iRangeY>=1; iRangeY--) if (CornerScaleOkay(cObj,iRangeX,iRangeY)) return TRUE; return FALSE; }
bool ObjectActionCornerScale(C4Object *cObj) { int32_t iRangeX = 1, iRangeY = 1; if (!CornerScaleOkay(cObj,iRangeX,iRangeY)) return false; // Do corner scale if (!cObj->SetActionByName("KneelUp")) cObj->SetActionByName("Walk"); cObj->xdir=cObj->ydir=0; if (cObj->Action.Dir==DIR_Left) cObj->fix_x-=itofix(iRangeX); else cObj->fix_x+=itofix(iRangeX); cObj->fix_y-=itofix(iRangeY); return true; }