diff options
Diffstat (limited to 'engines/sci/engine/kmath.cpp')
-rw-r--r-- | engines/sci/engine/kmath.cpp | 66 |
1 files changed, 27 insertions, 39 deletions
diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp index 6925970d8a..ae8cc038dd 100644 --- a/engines/sci/engine/kmath.cpp +++ b/engines/sci/engine/kmath.cpp @@ -29,16 +29,14 @@ reg_t -kRandom(state_t *s, int funct_nr, int argc, reg_t *argv) -{ - return make_reg(0, - SKPV(0) + (int) ((SKPV(1) + 1.0 - SKPV(0)) * (rand() / (RAND_MAX + 1.0)))); +kRandom(state_t *s, int funct_nr, int argc, reg_t *argv) { + return make_reg(0, + SKPV(0) + (int)((SKPV(1) + 1.0 - SKPV(0)) * (rand() / (RAND_MAX + 1.0)))); } reg_t -kAbs(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kAbs(state_t *s, int funct_nr, int argc, reg_t *argv) { /* This is a hack, but so is the code in Hoyle1 that needs it. */ if (argv[0].segment) return make_reg(0, 0x3e8); /* Yes people, this is an object */ @@ -47,19 +45,17 @@ kAbs(state_t *s, int funct_nr, int argc, reg_t *argv) reg_t -kSqrt(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kSqrt(state_t *s, int funct_nr, int argc, reg_t *argv) { return make_reg(0, (gint16) sqrt((float) abs(SKPV(0)))); } int -get_angle(int xrel, int yrel) -{ +get_angle(int xrel, int yrel) { if ((xrel == 0) && (yrel == 0)) return 0; else { - int val = (int) (180.0/PI * atan2((double)xrel, (double)-yrel)); + int val = (int)(180.0 / PI * atan2((double)xrel, (double) - yrel)); if (val < 0) val += 360; @@ -67,7 +63,7 @@ get_angle(int xrel, int yrel) FSCI. SCI games sometimes check for equality with "round" angles */ if (val % 45 == 44) - val++; + val++; else if (val % 45 == 1) val--; @@ -76,8 +72,7 @@ get_angle(int xrel, int yrel) } reg_t -kGetAngle(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kGetAngle(state_t *s, int funct_nr, int argc, reg_t *argv) { /* Based on behavior observed with a test program created with ** SCI Studio. */ @@ -89,7 +84,7 @@ kGetAngle(state_t *s, int funct_nr, int argc, reg_t *argv) int yrel = y1 - y2; /* y-axis is mirrored. */ int angle; - /* Move (xrel, yrel) to first quadrant. */ + /* Move (xrel, yrel) to first quadrant. */ if (y1 < y2) yrel = -yrel; if (x2 < x1) @@ -118,64 +113,58 @@ kGetAngle(state_t *s, int funct_nr, int argc, reg_t *argv) reg_t -kGetDistance(state_t *s, int funct_nr, int argc, reg_t *argv) -{ - int xrel = (int) (((float) SKPV(1) - SKPV_OR_ALT(3, 0))/cos(SKPV_OR_ALT(5, 0)* PI / 180.0)); /* This works because cos(0)==1 */ - int yrel = SKPV(0) - SKPV_OR_ALT(2, 0); +kGetDistance(state_t *s, int funct_nr, int argc, reg_t *argv) { + int xrel = (int)(((float) SKPV(1) - SKPV_OR_ALT(3, 0)) / cos(SKPV_OR_ALT(5, 0) * PI / 180.0)); /* This works because cos(0)==1 */ + int yrel = SKPV(0) - SKPV_OR_ALT(2, 0); return make_reg(0, (gint16)sqrt((float) xrel*xrel + yrel*yrel)); } reg_t -kTimesSin(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kTimesSin(state_t *s, int funct_nr, int argc, reg_t *argv) { int angle = SKPV(0); int factor = SKPV(1); - return make_reg(0, (int) (factor * 1.0 * sin(angle * PI / 180.0))); + return make_reg(0, (int)(factor * 1.0 * sin(angle * PI / 180.0))); } reg_t -kTimesCos(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kTimesCos(state_t *s, int funct_nr, int argc, reg_t *argv) { int angle = SKPV(0); int factor = SKPV(1); - return make_reg(0, (int) (factor * 1.0 * cos(angle * PI / 180.0))); + return make_reg(0, (int)(factor * 1.0 * cos(angle * PI / 180.0))); } reg_t -kCosDiv(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kCosDiv(state_t *s, int funct_nr, int argc, reg_t *argv) { int angle = SKPV(0); int value = SKPV(1); double cosval = cos(angle * PI / 180.0); if ((cosval < 0.0001) && (cosval > 0.0001)) { - SCIkwarn(SCIkWARNING,"Attepted division by zero\n"); + SCIkwarn(SCIkWARNING, "Attepted division by zero\n"); return make_reg(0, (gint16)0x8000); } else - return make_reg(0, (gint16) (value/cosval)); + return make_reg(0, (gint16)(value / cosval)); } reg_t -kSinDiv(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kSinDiv(state_t *s, int funct_nr, int argc, reg_t *argv) { int angle = SKPV(0); int value = SKPV(1); double sinval = sin(angle * PI / 180.0); if ((sinval < 0.0001) && (sinval > 0.0001)) { - SCIkwarn(SCIkWARNING,"Attepted division by zero\n"); + SCIkwarn(SCIkWARNING, "Attepted division by zero\n"); return make_reg(0, (gint16)0x8000); } else - return make_reg(0, (gint16) (value/sinval)); + return make_reg(0, (gint16)(value / sinval)); } reg_t -kTimesTan(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kTimesTan(state_t *s, int funct_nr, int argc, reg_t *argv) { int param = SKPV(0); int scale = SKPV_OR_ALT(1, 1); @@ -184,12 +173,11 @@ kTimesTan(state_t *s, int funct_nr, int argc, reg_t *argv) SCIkwarn(SCIkWARNING, "Attempted tan(pi/2)"); return make_reg(0, (gint16)0x8000); } else - return make_reg(0, (gint16) -(tan(param * PI / 180.0) * scale)); + return make_reg(0, (gint16) - (tan(param * PI / 180.0) * scale)); } reg_t -kTimesCot(state_t *s, int funct_nr, int argc, reg_t *argv) -{ +kTimesCot(state_t *s, int funct_nr, int argc, reg_t *argv) { int param = SKPV(0); int scale = SKPV_OR_ALT(1, 1); @@ -197,5 +185,5 @@ kTimesCot(state_t *s, int funct_nr, int argc, reg_t *argv) SCIkwarn(SCIkWARNING, "Attempted tan(pi/2)"); return make_reg(0, (gint16)0x8000); } else - return make_reg(0, (gint16) (tan(param * PI / 180.0) * scale)); + return make_reg(0, (gint16)(tan(param * PI / 180.0) * scale)); } |