static void writeptr(int address, globalval value, int addressOffset = 0 /*fix vectors on .variables, each value was overwriting the previous*/) { entvars_t entvars = getedict(address).v; int offset = ((address % pr_edict_size) - 96) / 4; offset += addressOffset; if (offset > 104) { entvars.variables[offset - 105] = value; return; } switch (offset) { case 0: entvars.modelindex = cast_float(value); break; case 1: entvars.absmin[0] = cast_float(value); break; case 2: entvars.absmin[1] = cast_float(value); break; case 3: entvars.absmin[2] = cast_float(value); break; case 4: entvars.absmax[0] = cast_float(value); break; case 5: entvars.absmax[1] = cast_float(value); break; case 6: entvars.absmax[2] = cast_float(value); break; case 7: entvars.ltime = cast_float(value); break; case 8: entvars.movetype = cast_float(value); break; case 9: entvars.solid = cast_float(value); break; case 10: entvars.origin[0] = cast_float(value); break; case 11: entvars.origin[1] = cast_float(value); break; case 12: entvars.origin[2] = cast_float(value); break; case 13: entvars.oldorigin[0] = cast_float(value); break; case 14: entvars.oldorigin[1] = cast_float(value); break; case 15: entvars.oldorigin[2] = cast_float(value); break; case 16: entvars.velocity[0] = cast_float(value); break; case 17: entvars.velocity[1] = cast_float(value); break; case 18: entvars.velocity[2] = cast_float(value); break; case 19: entvars.angles[0] = cast_float(value); break; case 20: entvars.angles[1] = cast_float(value); break; case 21: entvars.angles[2] = cast_float(value); break; case 22: entvars.avelocity[0] = cast_float(value); break; case 23: entvars.avelocity[1] = cast_float(value); break; case 24: entvars.avelocity[2] = cast_float(value); break; case 25: entvars.punchangle[0] = cast_float(value); break; case 26: entvars.punchangle[1] = cast_float(value); break; case 27: entvars.punchangle[2] = cast_float(value); break; case 28: entvars.classname = cast_int(value); break; case 29: entvars.model = cast_int(value); break; case 30: entvars.frame = cast_float(value); break; case 31: entvars.skin = cast_float(value); break; case 32: entvars.effects = cast_float(value); break; case 33: entvars.mins[0] = cast_float(value); break; case 34: entvars.mins[1] = cast_float(value); break; case 35: entvars.mins[2] = cast_float(value); break; case 36: entvars.maxs[0] = cast_float(value); break; case 37: entvars.maxs[1] = cast_float(value); break; case 38: entvars.maxs[2] = cast_float(value); break; case 39: entvars.size[0] = cast_float(value); break; case 40: entvars.size[1] = cast_float(value); break; case 41: entvars.size[2] = cast_float(value); break; case 42: entvars.touch = cast_int(value); break; case 43: entvars.use = cast_int(value); break; case 44: entvars.think = cast_int(value); break; case 45: entvars.blocked = cast_int(value); break; case 46: entvars.nextthink = cast_float(value); break; case 47: entvars.groundentity = cast_int(value); break; case 48: entvars.health = cast_float(value); break; case 49: entvars.frags = cast_float(value); break; case 50: entvars.weapon = cast_float(value); break; case 51: entvars.weaponmodel = cast_int(value); break; case 52: entvars.weaponframe = cast_float(value); break; case 53: entvars.currentammo = cast_float(value); break; case 54: entvars.ammo_shells = cast_float(value); break; case 55: entvars.ammo_nails = cast_float(value); break; case 56: entvars.ammo_rockets = cast_float(value); break; case 57: entvars.ammo_cells = cast_float(value); break; case 58: entvars.items = cast_float(value); break; case 59: entvars.takedamage = cast_float(value); break; case 60: entvars.chain = cast_int(value); break; case 61: entvars.deadflag = cast_float(value); break; case 62: entvars.view_ofs[0] = cast_float(value); break; case 63: entvars.view_ofs[1] = cast_float(value); break; case 64: entvars.view_ofs[2] = cast_float(value); break; case 65: entvars.button0 = cast_float(value); break; case 66: entvars.button1 = cast_float(value); break; case 67: entvars.button2 = cast_float(value); break; case 68: entvars.impulse = cast_float(value); break; case 69: entvars.fixangle = cast_float(value); break; case 70: entvars.v_angle[0] = cast_float(value); break; case 71: entvars.v_angle[1] = cast_float(value); break; case 72: entvars.v_angle[2] = cast_float(value); break; case 73: entvars.idealpitch = cast_int(value); break; case 74: entvars.netname = cast_int(value); break; case 75: entvars.enemy = cast_int(value); break; case 76: entvars.flags = cast_float(value); break; case 77: entvars.colormap = cast_float(value); break; case 78: entvars.team = cast_float(value); break; case 79: entvars.max_health = cast_float(value); break; case 80: entvars.teleport_time = cast_float(value); break; case 81: entvars.armortype = cast_float(value); break; case 82: entvars.armorvalue = cast_float(value); break; case 83: entvars.waterlevel = cast_float(value); break; case 84: entvars.watertype = cast_float(value); break; case 85: entvars.ideal_yaw = cast_float(value); break; case 86: entvars.yaw_speed = cast_float(value); break; case 87: entvars.aiment = cast_int(value); break; case 88: entvars.goalentity = cast_int(value); break; case 89: entvars.spawnflags = cast_float(value); break; case 90: entvars.target = cast_int(value); break; case 91: entvars.targetname = cast_int(value); break; case 92: entvars.dmg_take = cast_float(value); break; case 93: entvars.dmg_save = cast_float(value); break; case 94: entvars.dmg_inflictor = cast_int(value); break; case 95: entvars.owner = cast_int(value); break; case 96: entvars.movedir[0] = cast_float(value); break; case 97: entvars.movedir[1] = cast_float(value); break; case 98: entvars.movedir[2] = cast_float(value); break; case 99: entvars.message = cast_int(value); break; case 100: entvars.sounds = cast_float(value); break; case 101: entvars.noise = cast_int(value); break; case 102: entvars.noise1 = cast_int(value); break; case 103: entvars.noise2 = cast_int(value); break; case 104: entvars.noise3 = cast_int(value); break; default: Debug.WriteLine("cant write offset " + offset); break; } }
public static void pr_globals_write(int address, globalval value) { //Debug.WriteLine(string.Format("pr_globals_write {0}: {1}", address, value)); globalvars_t globalvars = pr_global_struct[address * 4 / sizeof_globalvars_t]; int offset = address % (sizeof_globalvars_t / 4); switch (offset) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: globalvars.pad[offset] = cast_int(value); break; case 28: globalvars.self = cast_int(value); break; case 29: globalvars.other = cast_int(value); break; case 30: globalvars.world = cast_int(value); break; case 31: globalvars.time = cast_float(value); break; case 32: globalvars.frametime = cast_float(value); break; case 33: globalvars.force_retouch = cast_float(value); break; case 34: globalvars.mapname = cast_int(value); break; case 35: globalvars.deathmatch = cast_float(value); break; case 36: globalvars.coop = cast_float(value); break; case 37: globalvars.teamplay = cast_float(value); break; case 38: globalvars.serverflags = cast_float(value); break; case 39: globalvars.total_secrets = cast_float(value); break; case 40: globalvars.total_monsters = cast_float(value); break; case 41: globalvars.found_secrets = cast_float(value); break; case 42: globalvars.killed_monsters = cast_float(value); break; case 43: globalvars.parm1 = cast_float(value); break; case 44: globalvars.parm2 = cast_float(value); break; case 45: globalvars.parm3 = cast_float(value); break; case 46: globalvars.parm4 = cast_float(value); break; case 47: globalvars.parm5 = cast_float(value); break; case 48: globalvars.parm6 = cast_float(value); break; case 49: globalvars.parm7 = cast_float(value); break; case 50: globalvars.parm8 = cast_float(value); break; case 51: globalvars.parm9 = cast_float(value); break; case 52: globalvars.parm10 = cast_float(value); break; case 53: globalvars.parm11 = cast_float(value); break; case 54: globalvars.parm12 = cast_float(value); break; case 55: globalvars.parm13 = cast_float(value); break; case 56: globalvars.parm14 = cast_float(value); break; case 57: globalvars.parm15 = cast_float(value); break; case 58: globalvars.parm16 = cast_float(value); break; case 59: globalvars.v_forward[0] = cast_float(value); break; case 60: globalvars.v_forward[1] = cast_float(value); break; case 61: globalvars.v_forward[2] = cast_float(value); break; case 62: globalvars.v_up[0] = cast_float(value); break; case 63: globalvars.v_up[1] = cast_float(value); break; case 64: globalvars.v_up[2] = cast_float(value); break; case 65: globalvars.v_right[0] = cast_float(value); break; case 66: globalvars.v_right[1] = cast_float(value); break; case 67: globalvars.v_right[2] = cast_float(value); break; case 68: globalvars.trace_allsolid = cast_float(value); break; case 69: globalvars.trace_startsolid = cast_float(value); break; case 70: globalvars.trace_fraction = cast_float(value); break; case 71: globalvars.trace_endpos[0] = cast_float(value); break; case 72: globalvars.trace_endpos[1] = cast_float(value); break; case 73: globalvars.trace_endpos[2] = cast_float(value); break; case 74: globalvars.trace_plane_normal[0] = cast_float(value); break; case 75: globalvars.trace_plane_normal[1] = cast_float(value); break; case 76: globalvars.trace_plane_normal[2] = cast_float(value); break; case 77: globalvars.trace_plane_dist = cast_float(value); break; case 78: globalvars.trace_ent = cast_int(value); break; case 79: globalvars.trace_inopen = cast_float(value); break; case 80: globalvars.trace_inwater = cast_float(value); break; case 81: globalvars.msg_entity = cast_int(value); break; case 82: globalvars.main = cast_int(value); break; case 83: globalvars.StartFrame = cast_int(value); break; case 84: globalvars.PlayerPreThink = cast_int(value); break; case 85: globalvars.PlayerPostThink = cast_int(value); break; case 86: globalvars.ClientKill = cast_int(value); break; case 87: globalvars.ClientConnect = cast_int(value); break; case 88: globalvars.PutClientInServer = cast_int(value); break; case 89: globalvars.ClientDisconnect = cast_int(value); break; case 90: globalvars.SetNewParms = cast_int(value); break; case 91: globalvars.SetChangeParms = cast_int(value); break; default: Debug.WriteLine("cant write global var offset" + offset); break; } }
static string PR_ValueString(int type, globalval val) { ddef_t def; dfunction_t f; type &= ~DEF_SAVEGLOBAL; switch ((etype_t)type) { case etype_t.ev_string: line = pr_string(cast_int(val)); break; case etype_t.ev_entity: line = "entity " + NUM_FOR_EDICT(PROG_TO_EDICT(cast_int(val))); break; case etype_t.ev_function: f = pr_functions[cast_int(val)]; line = pr_string(f.s_name) + "()"; break; case etype_t.ev_field: def = ED_FieldAtOfs(cast_int(val)); line = "." + pr_string(def.s_name); break; case etype_t.ev_void: line = "void"; break; case etype_t.ev_float: line = string.Format("{0:F1}", cast_float(val)); break; case etype_t.ev_vector: var vec = (double[])val; //line = "'" + vec[0] + " " + vec[1] + " " + vec[2] + "'"; line = string.Format("'{0:F1} {1:F1} {2:F1}'", vec[0], vec[1], vec[2]); break; case etype_t.ev_pointer: line = "pointer"; break; default: line = "bad type " + type; break; } return line; }
public static float cast_float(globalval value) { float val; if (value == null) { val = 0; } else if (value.Type == globalval_type.Int) { val = BitConverter.ToSingle(BitConverter.GetBytes((int)value.Value), 0); } else if (value.Type == globalval_type.Float) { val = (float)value.Value; } else { val = (float)(double)value.Value; } //Debug.WriteLine(string.Format("cast_float old: {0} ", value == null ? "null" : value.Value)); //Debug.WriteLine(string.Format("cast_float new: {0} ", val)); if (float.IsNaN(val)) { Debug.WriteLine(string.Format("cast_float NaN: {0} type: {1}", cast_int(value), value.Type)); } return val; }
public static int cast_int(globalval value) { int val; if (value == null) { val = 0; } else if (value.Type == globalval_type.Float) { val = BitConverter.ToInt32(BitConverter.GetBytes((float)value.Value), 0); } else if (value.Type == globalval_type.Double) { val = BitConverter.ToInt32(BitConverter.GetBytes((float)(double)value.Value), 0); } else { val = (int)value.Value; //CastHelpers.ToUint32(????? } //Debug.WriteLine(string.Format("cast_float old: {0} ", value == null ? "null" : value.Value)); //Debug.WriteLine(string.Format("cast_float new: {0} ", val)); return val; }