Differences From Artifact [94bda1495e]:
- File
src/savegamedemo.m
— part of check-in
[75e920ae30]
at
2025-03-29 14:25:43
on branch trunk
— Switch from clang-format to manual formatting
clang-format does too many weird things. (user: js, size: 12562) [annotate] [blame] [check-ins using]
To Artifact [09c2cc3e3c]:
- File src/savegamedemo.m — part of check-in [c634a689e7] at 2025-03-29 17:13:40 on branch trunk — More style fixes (user: js, size: 12031) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
160 161 162 163 164 165 166 | char mapname[_MAXDEFSTR] = { 0 }; char buf[8]; gzread(f, buf, 8); if (strncmp(buf, "CUBESAVE", 8)) goto out; if (gzgetc(f) != islittleendian) | | | | | | | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | char mapname[_MAXDEFSTR] = { 0 }; char buf[8]; gzread(f, buf, 8); if (strncmp(buf, "CUBESAVE", 8)) goto out; if (gzgetc(f) != islittleendian) // not supporting save->load accross incompatible architectures // simpifies things a LOT goto out; if (gzgeti() != SAVEGAMEVERSION || gzgeti() != DynamicEntity.serializedSize) goto out; gzread(f, mapname, _MAXDEFSTR); nextmode = gzgeti(); // continue below once map has been loaded and client & server // have updated changemap(@(mapname)); return; out: conoutf(@"aborting: savegame/demo from a different version of " @"cube or cpu architecture"); stop(); } COMMAND(loadgame, ARG_1STR, (^ (OFString *name) { OFString *path = [OFString stringWithFormat: @"savegames/%@.csgz", name]; OFIRI *IRI = [Cube.sharedInstance.userDataIRI IRIByAppendingPathComponent: path]; loadstate(IRI); })) void loadgameout() { stop(); conoutf(@"loadgame incomplete: savegame from a different version of " @"this map"); } void loadgamerest() { if (demoplayback || !f) return; |
︙ | ︙ | |||
377 378 379 380 381 382 383 | setclient(democlientnum, [Player.player1 copy]); readdemotime(); } VAR(demodelaymsec, 0, 120, 500); // spline interpolation | | | | | | | | | | | | | | | | | | 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | setclient(democlientnum, [Player.player1 copy]); readdemotime(); } VAR(demodelaymsec, 0, 120, 500); // spline interpolation #define catmulrom(z, a, b, c, s, dest) \ { \ OFVector3D t1 = OFSubtractVectors3D(b, z); \ t1 = OFMultiplyVector3D(t1, 0.5f); \ \ OFVector3D t2 = OFSubtractVectors3D(c, a); \ t2 = OFMultiplyVector3D(t2, 0.5f); \ \ float s2 = s * s; \ float s3 = s * s2; \ \ dest = OFMultiplyVector3D(a, 2 * s3 - 3 * s2 + 1); \ OFVector3D t = OFMultiplyVector3D(b, -2 * s3 + 3 * s2); \ dest = OFAddVectors3D(dest, t); \ t1 = OFMultiplyVector3D(t1, s3 - 2 * s2 + s); \ dest = OFAddVectors3D(dest, t1); \ t2 = OFMultiplyVector3D(t2, s3 - s2); \ dest = OFAddVectors3D(dest, t2); \ } void fixwrap(DynamicEntity *a, DynamicEntity *b) { while (b.yaw - a.yaw > 180) a.yaw += 360; |
︙ | ︙ | |||
449 450 451 452 453 454 455 | gzgetv(&dorig); particle_splash(3, ddamage, 1000, dorig); } // FIXME: set more client state here } // insert latest copy of player into history | < | | | 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 | gzgetv(&dorig); particle_splash(3, ddamage, 1000, dorig); } // FIXME: set more client state here } // insert latest copy of player into history if (extras && (playerhistory.count == 0 || playerhistory.lastObject.lastUpdate != playbacktime)) { Player *d = [target copy]; d.lastUpdate = playbacktime; if (playerhistory == nil) playerhistory = [[OFMutableArray alloc] init]; [playerhistory addObject: d]; |
︙ | ︙ |