1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// loading and saving of savegames & demos, dumps the spawn state of all
// mapents, the full state of all dynents (monsters + player)
#include "cube.h"
#import "DynamicEntity.h"
#import "Entity.h"
#ifdef OF_BIG_ENDIAN
static const int islittleendian = 0;
#else
static const int islittleendian = 1;
#endif
|
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// loading and saving of savegames & demos, dumps the spawn state of all
// mapents, the full state of all dynents (monsters + player)
#include "cube.h"
#import "DynamicEntity.h"
#import "Entity.h"
#import "Monster.h"
#ifdef OF_BIG_ENDIAN
static const int islittleendian = 0;
#else
static const int islittleendian = 1;
#endif
|
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
min(getclientmap().UTF8StringLength, _MAXDEFSTR - 1));
gzwrite(f, map, _MAXDEFSTR);
gzputi(gamemode);
gzputi(ents.count);
for (Entity *e in ents)
gzputc(f, e.spawned);
gzwrite(f, data.items, data.count);
OFArray<DynamicEntity *> *monsters = getmonsters();
gzputi(monsters.count);
for (DynamicEntity *monster in monsters) {
data = [monster dataBySerializing];
gzwrite(f, data.items, data.count);
}
gzputi(players.count);
for (id player in players) {
gzput(player == [OFNull null]);
data = [player dataBySerializing];
|
|
|
|
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
min(getclientmap().UTF8StringLength, _MAXDEFSTR - 1));
gzwrite(f, map, _MAXDEFSTR);
gzputi(gamemode);
gzputi(ents.count);
for (Entity *e in ents)
gzputc(f, e.spawned);
gzwrite(f, data.items, data.count);
OFArray<Monster *> *monsters = Monster.monsters;
gzputi(monsters.count);
for (Monster *monster in monsters) {
data = [monster dataBySerializing];
gzwrite(f, data.items, data.count);
}
gzputi(players.count);
for (id player in players) {
gzput(player == [OFNull null]);
data = [player dataBySerializing];
|
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
[OFMutableData dataWithCapacity:DynamicEntity.serializedSize];
[data increaseCountBy:DynamicEntity.serializedSize];
gzread(f, data.mutableItems, data.count);
[player1 setFromSerializedData:data];
player1.lastAction = lastmillis;
int nmonsters = gzgeti();
OFArray<DynamicEntity *> *monsters = getmonsters();
if (nmonsters != monsters.count)
return loadgameout();
for (DynamicEntity *monster in monsters) {
gzread(f, data.mutableItems, data.count);
[monster setFromSerializedData:data];
// lazy, could save id of enemy instead
monster.enemy = player1;
// also lazy, but no real noticable effect on game
monster.lastAction = monster.trigger = lastmillis + 500;
if (monster.state == CS_DEAD)
monster.lastAction = 0;
}
restoremonsterstate();
int nplayers = gzgeti();
loopi(nplayers) if (!gzget())
{
DynamicEntity *d = getclient(i);
assert(d);
gzread(f, data.mutableItems, data.count);
|
|
|
|
|
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
|
[OFMutableData dataWithCapacity:DynamicEntity.serializedSize];
[data increaseCountBy:DynamicEntity.serializedSize];
gzread(f, data.mutableItems, data.count);
[player1 setFromSerializedData:data];
player1.lastAction = lastmillis;
int nmonsters = gzgeti();
OFArray<Monster *> *monsters = Monster.monsters;
if (nmonsters != monsters.count)
return loadgameout();
for (Monster *monster in monsters) {
gzread(f, data.mutableItems, data.count);
[monster setFromSerializedData:data];
// lazy, could save id of enemy instead
monster.enemy = player1;
// also lazy, but no real noticable effect on game
monster.lastAction = monster.trigger = lastmillis + 500;
if (monster.state == CS_DEAD)
monster.lastAction = 0;
}
[Monster restoreAll];
int nplayers = gzgeti();
loopi(nplayers) if (!gzget())
{
DynamicEntity *d = getclient(i);
assert(d);
gzread(f, data.mutableItems, data.count);
|