Created
October 10, 2017 07:50
-
-
Save jkoppel/2127218bf7baa9278898ce43bb79d64b to your computer and use it in GitHub Desktop.
Find the rectangles!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| void army::Walk(signed int dir, int last, int notFirst) { | |
| int targCell = this->GetAdjacentCellIndex(this->occupiedHex, dir); | |
| gCloseMove = IsCloseMove(targCell); | |
| // Bridge opening | |
| if (this->owningSide == 1 | |
| && gpCombatManager->isCastleBattle | |
| && (targCell == 58 || targCell == 59 || targCell == 60 && this->owningSide == 1 && this->creature.creature_flags & TWO_HEXER) | |
| && gpCombatManager->drawBridgePosition == BRIDGE_CLOSED) { | |
| this->animationType = ANIMATION_TYPE_STANDING; | |
| this->animationFrame = 0; | |
| gpCombatManager->DrawFrame(1, 0, 0, 0, 75, 1, 1); | |
| gpCombatManager->LowerDoor(); | |
| notFirst = 0; | |
| } | |
| giWalkingFrom = this->occupiedHex; | |
| giWalkingTo = targCell; | |
| if (this->creature.creature_flags & TWO_HEXER) { | |
| giWalkingFrom2 = this->occupiedHex + ((unsigned int)(this->facingRight - 1) < 1 ? 1 : -1); | |
| giWalkingTo2 = targCell + ((unsigned int)(this->facingRight - 1) < 1 ? 1 : -1); | |
| } else { | |
| giWalkingFrom2 = -1; | |
| giWalkingTo2 = -1; | |
| } | |
| giWalkingYMod = 0; | |
| BuildTempWalkSeq(&this->frameInfo, last, notFirst); | |
| this->field_8A = dir; | |
| if (!notFirst) { | |
| giMinExtentY = 640; | |
| giMinExtentX = 640; | |
| giMaxExtentY = 0; | |
| giMaxExtentX = 0; | |
| gbComputeExtent = 1; | |
| gbSaveBiggestExtent = 1; | |
| gbReturnAfterComputeExtent = 1; | |
| this->DrawToBuffer(gpCombatManager->combatGrid[this->occupiedHex].centerX, gpCombatManager->combatGrid[this->occupiedHex].occupyingCreatureBottomY, 0); | |
| gbReturnAfterComputeExtent = 0; | |
| gbSaveBiggestExtent = 0; | |
| gbComputeExtent = 0; | |
| } | |
| if (giMinExtentX < 0) | |
| giMinExtentX = 0; | |
| if (giMinExtentY < 0) | |
| giMinExtentY = 0; | |
| if (giMaxExtentX > 639) | |
| giMaxExtentX = 639; | |
| if (giMaxExtentY > 442) | |
| giMaxExtentY = 442; | |
| int offsetX = giMinExtentX; | |
| int offsetY = giMinExtentY; | |
| int v12 = giMaxExtentX; | |
| int v6 = giMaxExtentY; | |
| this->field_8E = 0; | |
| if (dir >= 3) { | |
| if (this->facingRight == 1) { | |
| this->field_8E = 1; | |
| this->facingRight = 1 - this->facingRight; | |
| if (this->creature.creature_flags & TWO_HEXER) | |
| ++this->occupiedHex; | |
| } | |
| } else if (!this->facingRight) { | |
| this->field_8E = 1; | |
| this->facingRight = 1 - this->facingRight; | |
| if (this->creature.creature_flags & TWO_HEXER) | |
| --this->occupiedHex; | |
| } | |
| if (!dir || dir == 5) | |
| this->field_6 = 0; | |
| if (dir == 2 || dir == 3) | |
| this->field_6 = 3; | |
| this->animationFrame = 0; | |
| this->animationType = ANIMATION_TYPE_WALKING; | |
| if (!gbNoShowCombat) | |
| gpSoundManager->MemorySample(this->combatSounds[0]); | |
| if (!notFirst) { | |
| gpCombatManager->combatGrid[this->occupiedHex].unitOwner = -1; | |
| gpCombatManager->DrawFrame(0, 0, 0, 0, 75, 1, 1); | |
| gpCombatManager->combatGrid[this->occupiedHex].unitOwner = gpCombatManager->otherCurrentSideThing; | |
| if (!gbNoShowCombat) | |
| gpWindowManager->screenBuffer->CopyTo(gpCombatManager->probablyBitmapForCombatScreen, 0, 0, 0, 0, 0x280u, 443); | |
| gpCombatManager->zeroedAfterAnimatingDeathAndHolySpells = 0; | |
| } | |
| if (!gbNoShowCombat) { | |
| for (int i = 0; this->frameInfo.animationLengths[6] > i; ++i) { | |
| this->animationFrame = i; | |
| if (notFirst || i) { | |
| gpCombatManager->probablyBitmapForCombatScreen->CopyTo( | |
| gpWindowManager->screenBuffer, | |
| giMinExtentX, | |
| giMinExtentY, | |
| giMinExtentX, | |
| giMinExtentY, | |
| giMaxExtentX - giMinExtentX + 1, | |
| giMaxExtentY - giMinExtentY + 1); | |
| if (giMinExtentX < 0) | |
| giMinExtentX = 0; | |
| if (giMinExtentY < 0) | |
| giMinExtentY = 0; | |
| if (giMaxExtentX > 639) | |
| giMaxExtentX = 639; | |
| if (giMaxExtentY > 442) | |
| giMaxExtentY = 442; | |
| offsetX = giMinExtentX; | |
| offsetY = giMinExtentY; | |
| v12 = giMaxExtentX; | |
| v6 = giMaxExtentY; | |
| } | |
| giMinExtentY = 640; | |
| giMinExtentX = 640; | |
| giMaxExtentY = 0; | |
| giMaxExtentX = 0; | |
| gbComputeExtent = 1; | |
| gbSaveBiggestExtent = 1; | |
| gbReturnAfterComputeExtent = 1; | |
| this->DrawToBuffer( | |
| gpCombatManager->combatGrid[this->occupiedHex].centerX, | |
| gpCombatManager->combatGrid[this->occupiedHex].occupyingCreatureBottomY, | |
| 0); | |
| gbReturnAfterComputeExtent = 0; | |
| gbComputeExtent = 0; | |
| gbSaveBiggestExtent = 0; | |
| if (giMinExtentX < 0) | |
| giMinExtentX = 0; | |
| if (giMinExtentY < 0) | |
| giMinExtentY = 0; | |
| if (giMaxExtentX > 639) | |
| giMaxExtentX = 639; | |
| if (giMaxExtentY > 442) | |
| giMaxExtentY = 442; | |
| gbCurrArmyDrawn = 0; | |
| gbComputeExtent = 1; | |
| gbLimitToExtent = 1; | |
| this->field_11D = 0; | |
| gpCombatManager->DrawFrame(0, 0, 0, 0, 75, 0, 1); | |
| this->field_11D = 1; | |
| gbLimitToExtent = 0; | |
| gbComputeExtent = 0; | |
| gbCurrArmyDrawn = 1; | |
| if (giMinExtentX < offsetX) | |
| offsetX = giMinExtentX; | |
| if (offsetY > giMinExtentY) | |
| offsetY = giMinExtentY; | |
| if (giMaxExtentX > v12) | |
| v12 = giMaxExtentX; | |
| if (giMaxExtentY > v6) | |
| v6 = giMaxExtentY; | |
| DelayTil(&glTimers); | |
| glTimers = (signed __int64)((double)KBTickCount() | |
| + (double)this->frameInfo.stepTime | |
| * gfCombatSpeedMod[giCombatSpeed] | |
| / (double)this->frameInfo.animationLengths[6]); | |
| gpWindowManager->UpdateScreenRegion(offsetX, offsetY, v12 - offsetX + 1, v6 - offsetY + 1); | |
| } | |
| } | |
| int adjCell = this->GetAdjacentCellIndex(this->occupiedHex, dir); | |
| gpCombatManager->combatGrid[this->occupiedHex].stackIdx = -1; | |
| gpCombatManager->combatGrid[this->occupiedHex].unitOwner = -1; | |
| gpCombatManager->combatGrid[this->occupiedHex].occupiersOtherHexIsToLeft = -1; | |
| if (this->creature.creature_flags & TWO_HEXER) { | |
| int v4 = this->occupiedHex + ((unsigned int)(this->facingRight - 1) < 1 ? 1 : -1); | |
| gpCombatManager->combatGrid[v4].stackIdx = -1; | |
| gpCombatManager->combatGrid[v4].unitOwner = -1; | |
| gpCombatManager->combatGrid[v4].occupiersOtherHexIsToLeft = -1; | |
| } | |
| gpCombatManager->combatGrid[adjCell].unitOwner = LOBYTE(this->owningSide); | |
| gpCombatManager->combatGrid[adjCell].stackIdx = LOBYTE(this->stackIdx); | |
| gpCombatManager->combatGrid[adjCell].occupiersOtherHexIsToLeft = -1; | |
| if (this->creature.creature_flags & TWO_HEXER) { | |
| int v7 = adjCell + ((unsigned int)(this->facingRight - 1) < 1 ? 1 : -1); | |
| gpCombatManager->combatGrid[v7].unitOwner = LOBYTE(this->owningSide); | |
| gpCombatManager->combatGrid[v7].stackIdx = LOBYTE(this->stackIdx); | |
| gpCombatManager->combatGrid[v7].occupiersOtherHexIsToLeft = adjCell <= v7; | |
| gpCombatManager->combatGrid[adjCell].occupiersOtherHexIsToLeft = adjCell >= v7; | |
| } | |
| this->occupiedHex = adjCell; | |
| if (this->field_8E) { | |
| this->facingRight = 1 - this->facingRight; | |
| OccupyHexes(this); | |
| this->field_8E = 0; | |
| } | |
| giWalkingFrom = -1; | |
| giWalkingFrom2 = -1; | |
| giWalkingTo = -1; | |
| giWalkingTo2 = -1; | |
| this->field_6 = 1; | |
| if (last == 1) { | |
| this->animationType = ANIMATION_TYPE_STANDING; | |
| this->animationFrame = 0; | |
| gpCombatManager->DrawFrame(1, 1, 0, 0, 75, 1, 1); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment