[Scummvm-git-logs] scummvm master -> 96e418743a6b92e184ff50a3ac06332510f7c257

sev- sev at scummvm.org
Fri Sep 9 10:59:21 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
96e418743a FULLPIPE: Further work on scene27 bats knocking logic


Commit: 96e418743a6b92e184ff50a3ac06332510f7c257
    https://github.com/scummvm/scummvm/commit/96e418743a6b92e184ff50a3ac06332510f7c257
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-09T10:59:11+02:00

Commit Message:
FULLPIPE: Further work on scene27 bats knocking logic

Changed paths:
    engines/fullpipe/scenes/scene27.cpp



diff --git a/engines/fullpipe/scenes/scene27.cpp b/engines/fullpipe/scenes/scene27.cpp
index f236fcc..21c8209 100644
--- a/engines/fullpipe/scenes/scene27.cpp
+++ b/engines/fullpipe/scenes/scene27.cpp
@@ -39,9 +39,8 @@ namespace Fullpipe {
 
 struct Bat {
 	StaticANIObject *ani;
-	int field_4;
 	double power;
-	double field_10;
+	double angle;
 	double currX;
 	double currY;
 	double powerCos;
@@ -227,10 +226,12 @@ void sceneHandler27_maidSwab() {
 }
 
 void sceneHandler27_startBat(StaticANIObject *bat) {
+	debugC(2, kDebugSceneLogic, "scene27: startBat");
+
 	Bat *newbat = new Bat;
 
 	newbat->power = g_vars->scene27_launchPhase * 2.5 + 8.0;
-	newbat->field_10 = 0;
+	newbat->angle = 0;
 	newbat->ani = bat;
 	newbat->powerCos = newbat->power * cos(0.0);
 	newbat->powerSin = newbat->power * sin(0.0);
@@ -292,7 +293,7 @@ void sceneHandler27_wipeDo() {
 
 	for (uint i = 0; i < g_vars->scene27_bats.size(); i++) {
 		if (g_vars->scene27_bats[i]->currX < 800.0) {
-			g_vars->scene27_bats[i]->field_10 = atan2(520.0 - g_vars->scene27_bats[i]->currY, 800.0 - g_vars->scene27_bats[i]->currX);
+			g_vars->scene27_bats[i]->angle = atan2(520.0 - g_vars->scene27_bats[i]->currY, 800.0 - g_vars->scene27_bats[i]->currX);
 			g_vars->scene27_bats[i]->power += 1.0;
 		}
 	}
@@ -334,42 +335,59 @@ void sceneHandler27_knockBats(int bat1n, int bat2n) {
 	Bat *bat1 = g_vars->scene27_bats[bat1n];
 	Bat *bat2 = g_vars->scene27_bats[bat2n];
 
+	debugC(2, kDebugSceneLogic, "scene27: knockBats(%d, %d)", bat1n, bat2n);
+
 	if (0.0 != bat1->power) {
 		double rndF = (double)g_fp->_rnd->getRandomNumber(32767) * 0.0000009155552842799158 - 0.015
 			+ atan2(bat2->currY - bat1->currY, bat2->currX - bat1->currX);
 		double rndCos = cos(rndF);
 		double rndSin = sin(rndF);
 
-		double pow1x = cos(bat1->field_10 - rndF) * (double)((bat2->currX - bat1->currX) >= 0 ? 1 : -1) * bat1->power;
-		double pow1y = sin(bat1->field_10 - rndF) * (double)((bat2->currY - bat1->currY) >= 0 ? 1 : -1) * bat1->power;
+		double pow1x = cos(bat1->angle - rndF) * (double)((bat2->currX - bat1->currX) >= 0 ? 1 : -1) * bat1->power;
+		double pow1y = sin(bat1->angle - rndF) * (double)((bat2->currY - bat1->currY) >= 0 ? 1 : -1) * bat1->power;
+
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat1 from: powerCos: %f powerSin: %f, power: %f, angle: %f",
+				bat1->powerCos, bat1->powerSin, bat1->power, bat1->angle);
 
 		bat1->powerCos -= pow1x * 1.1;
 		bat1->powerSin -= pow1y * 1.1;
 
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat1 to: powerCos: %f powerSin: %f", bat1->powerCos, bat1->powerSin);
+
 		rndF = ((double)g_fp->_rnd->getRandomNumber(32767) * 0.0000009155552842799158 - 0.015
 								+ atan2(bat1->currY - bat2->currY, bat1->currX - bat2->currX));
-		double pow2x = cos(bat2->field_10 - rndF) * (double)((bat1->currX - bat2->currX) >= 0 ? 1 : -1) * bat2->power;
-		double pow2y = sin(bat2->field_10 - rndF) * (double)((bat1->currY - bat2->currY) >= 0 ? 1 : -1) * bat2->power;
+		double pow2x = cos(bat2->angle - rndF) * (double)((bat1->currX - bat2->currX) >= 0 ? 1 : -1) * bat2->power;
+		double pow2y = sin(bat2->angle - rndF) * (double)((bat1->currY - bat2->currY) >= 0 ? 1 : -1) * bat2->power;
+
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat2 from: powerCos: %f powerSin: %f, power: %f, angle: %f",
+				bat2->powerCos, bat2->powerSin, bat2->power, bat2->angle);
 
 		bat2->powerCos -= pow2x * 1.1;
 		bat2->powerSin -= pow2y * 1.1;
 
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat2 to: powerCos: %f powerSin: %f", bat2->powerCos, bat2->powerSin);
+
 		double dy = bat1->currY - bat2->currY;
 		double dx = bat1->currX - bat2->currX;
-		double dist = (sqrt(rndSin * rndSin * 0.25 + rndCos * rndCos) * 54.0 - sqrt(dx * dx + dy * dy)) / cos(rndF - bat1->field_10);
-		bat1->currX = (double)bat1->currX - cos(bat1->field_10) * (dist + 1.0);
-		bat1->currY = (double)bat1->currY - sin(bat1->field_10) * (dist + 1.0);
+		double dist = (sqrt(rndSin * rndSin * 0.25 + rndCos * rndCos) * 54.0 - sqrt(dx * dx + dy * dy)) / cos(rndF - bat1->angle);
+		bat1->currX = (double)bat1->currX - cos(bat1->angle) * (dist + 1.0);
+		bat1->currY = (double)bat1->currY - sin(bat1->angle) * (dist + 1.0);
 
 		bat1->powerCos += pow2x * 0.64;
 
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat1 x: %g y: %g", bat1->currX, bat1->currY);
+
 		if (bat1->currX <= 500.0)
 			bat1->powerSin = 0.0;
 		else
 			bat1->powerSin += pow2y * 0.64;
 
-		bat1->field_10 = atan2(bat1->powerSin, bat1->powerCos);
+		bat1->angle = atan2(bat1->powerSin, bat1->powerCos);
 		bat1->power = sqrt(bat1->powerCos * bat1->powerCos + bat1->powerSin * bat1->powerSin);
 
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat1 corrected: powerCos: %f powerSin: %f, power: %f, angle: %f",
+				bat1->powerCos, bat1->powerSin, bat1->power, bat1->angle);
+
 		bat2->powerCos += pow1x * 0.64;
 
 		if (bat2->currX <= 500.0)
@@ -377,9 +395,12 @@ void sceneHandler27_knockBats(int bat1n, int bat2n) {
 		else
 			bat2->powerSin += pow1y * 0.64;
 
-		bat2->field_10 = atan2(bat2->powerSin, bat2->powerCos);
+		bat2->angle = atan2(bat2->powerSin, bat2->powerCos);
 		bat2->power = sqrt(bat2->powerCos * bat2->powerCos + bat2->powerSin * bat2->powerSin);
 
+		debugC(3, kDebugSceneLogic, "scene27: knockBats: bat2 corrected: powerCos: %f powerSin: %f, power: %f, angle: %f",
+				bat2->powerCos, bat2->powerSin, bat2->power, bat2->angle);
+
 		g_fp->playSound(SND_27_026, 0);
 	}
 }
@@ -541,22 +562,22 @@ void sceneHandler27_animateBats() {
 	for (uint i = 0; i < g_vars->scene27_bats.size(); i++) {
 		Bat *bat = g_vars->scene27_bats[i];
 
-		bat->currX = cos(bat->field_10) * bat->power + bat->currX;
-		bat->currY = sin(bat->field_10) * bat->power + bat->currY;
+		bat->currX = cos(bat->angle) * bat->power + bat->currX;
+		bat->currY = sin(bat->angle) * bat->power + bat->currY;
 
 		bat->ani->setOXY((int)bat->currX, (int)bat->currY);
 		bat->ani->_priority = (int)(600.0 - bat->currY);
 
 		double powerDelta;
 
-		if (cos(bat->field_10) >= 0.0 || bat->currX >= 362.0)
+		if (cos(bat->angle) >= 0.0 || bat->currX >= 362.0)
 			powerDelta = bat->power * 0.035;
 		else
 			powerDelta = bat->power * 0.4;
 
 		bat->power -= powerDelta;
-		bat->powerCos = cos(bat->field_10) * bat->power;
-		bat->powerSin = sin(bat->field_10) * bat->power;
+		bat->powerCos = cos(bat->angle) * bat->power;
+		bat->powerSin = sin(bat->angle) * bat->power;
 
 		if (bat->power >= 0.5)
 			g_vars->scene27_knockCount++;





More information about the Scummvm-git-logs mailing list