From: divverent Date: Mon, 24 Aug 2009 09:45:28 +0000 (+0000) Subject: okay, fix the latest fix :P X-Git-Tag: xonotic-v0.1.0preview~1487 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b19f8f9a27f15b0d5f69632adc8ed3fd255f8b10;p=xonotic%2Fdarkplaces.git okay, fix the latest fix :P git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9142 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/prvm_execprogram.h b/prvm_execprogram.h index f29299d2..8f234f99 100644 --- a/prvm_execprogram.h +++ b/prvm_execprogram.h @@ -82,13 +82,13 @@ OPC->_float = OPA->_float < OPB->_float; break; case OP_AND: - OPC->_float = OPA->_float && OPB->_float; + OPC->_float = FLOAT_IS_TRUE_FOR_INT(OPA->_int) && FLOAT_IS_TRUE_FOR_INT(OBA->_int); // TODO change this back to float, and add AND_I to be used by fteqcc for anything not a float break; case OP_OR: - OPC->_float = OPA->_float || OPB->_float; + OPC->_float = FLOAT_IS_TRUE_FOR_INT(OPA->_int) || FLOAT_IS_TRUE_FOR_INT(OBA->_int); // TODO change this back to float, and add OR_I to be used by fteqcc for anything not a float break; case OP_NOT_F: - OPC->_float = !OPA->_float; + OPC->_float = !FLOAT_IS_TRUE_FOR_INT(OPA->_int); break; case OP_NOT_V: OPC->_float = !OPA->vector[0] && !OPA->vector[1] && !OPA->vector[2]; @@ -259,7 +259,7 @@ //================== case OP_IFNOT: - if (!(OPA->_int & 0x7FFFFFFF)) // also match "negative zero" floats of value 0x80000000 + if(!FLOAT_IS_TRUE_FOR_INT(OPA->_int)) // TODO add an "int-if", and change this one to OPA->_float // although mostly unneeded, thanks to the only float being false being 0x0 and 0x80000000 (negative zero) // and entity, string, field values can never have that value @@ -280,8 +280,8 @@ break; case OP_IF: - if (!(OPA->_int & 0x7FFFFFFF)) // also match "negative zero" floats of value 0x80000000 - // TODO add an "int-if", and change this one to OPA->_float + if(FLOAT_IS_TRUE_FOR_INT(OPA->_int)) + // TODO add an "int-if", and change this one, as well as the FLOAT_IS_TRUE_FOR_INT usages, to OPA->_float // although mostly unneeded, thanks to the only float being false being 0x0 and 0x80000000 (negative zero) // and entity, string, field values can never have that value { diff --git a/quakedef.h b/quakedef.h index efd7bf39..31f2fbc5 100644 --- a/quakedef.h +++ b/quakedef.h @@ -371,5 +371,8 @@ void Sys_Shared_Init(void); // This also includes extended characters, and ALL control chars #define ISWHITESPACEORCONTROL(ch) ((signed char) (ch) <= (signed char) ' ') + +#define FLOAT_IS_TRUE_FOR_INT(x) ((x) & 0x7FFFFFFF) // also match "negative zero" floats of value 0x80000000 + #endif