diff --git a/ctanks.c b/ctanks.c index f7d1049..7d7c7c5 100644 --- a/ctanks.c +++ b/ctanks.c @@ -116,13 +116,14 @@ tanks_fire_cannon(struct tanks_game *game, float theta = this->angle + this->turret.current; float rpos[2]; - /* If someone's a crater, this is easy */ - if (this->killer || that->killer) { + /* If someone's a crater, this is easy (unless we were just killed by the other one, in which case + we have to check the other direction) */ + if ((this->killer && this->killer != that) || that->killer) { return; } /* Did they collide? */ - if (dist2 < TANK_COLLISION_ADJ2) { + if ((!this->killer) && dist2 < TANK_COLLISION_ADJ2) { this->killer = that; this->cause_death = "collision"; diff --git a/forf.c b/forf.c index 18e950d..b85de82 100644 --- a/forf.c +++ b/forf.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "forf.h" #include "dump.h" @@ -348,7 +349,7 @@ forf_proc_div(struct forf_env *env) long a = forf_pop_num(env); long b = forf_pop_num(env); - if (0 == a) { + if (0 == a || (a == -1 && b == LONG_MIN)) { env->error = forf_error_divzero; return; } @@ -361,7 +362,7 @@ forf_proc_mod(struct forf_env *env) long a = forf_pop_num(env); long b = forf_pop_num(env); - if (0 == a) { + if (0 == a || (a == -1 && b == LONG_MIN)) { env->error = forf_error_divzero; return; }