okay, fix the latest fix :P
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 24 Aug 2009 09:45:28 +0000 (09:45 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 24 Aug 2009 09:45:28 +0000 (09:45 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9142 d7cf8633-e32d-0410-b094-e92efae38249

prvm_execprogram.h
quakedef.h

index f29299d..8f234f9 100644 (file)
                                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];
                //==================
 
                        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
                                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
                                {
index efd7bf3..31f2fbc 100644 (file)
@@ -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