diff --git a/src/clientgame.mm b/src/clientgame.mm index 7f782d7..6df78f8 100644 --- a/src/clientgame.mm +++ b/src/clientgame.mm @@ -11,7 +11,7 @@ void mode(int n) { addmsg(1, 2, SV_GAMEMODE, nextmode = n); -}; +} COMMAND(mode, ARG_1INT) bool intermission = false; @@ -493,7 +493,7 @@ initclient() } void -startmap(char *name) // called just after a map load +startmap(OFString *name) // called just after a map load { if (netmapstart() && m_sp) { gamemode = 0; @@ -507,9 +507,7 @@ startmap(char *name) // called just after a map load player1->frags = 0; loopv(players) if (players[i]) players[i]->frags = 0; resetspawns(); - @autoreleasepool { - clientmap = @(name); - } + clientmap = name; if (editmode) toggleedit(); setvar(@"gamespeed", 100); diff --git a/src/clients2c.mm b/src/clients2c.mm index 676c6f9..edfc80b 100644 --- a/src/clients2c.mm +++ b/src/clients2c.mm @@ -18,7 +18,9 @@ void changemapserv(char *name, int mode) // forced map change from the server { gamemode = mode; - load_world(name); + @autoreleasepool { + load_world(@(name)); + } } void @@ -364,7 +366,9 @@ localservertoclient( conoutf(@"received map \"%s\" from server, reloading..", text); int mapsize = getint(p); - writemap(text, mapsize, p); + @autoreleasepool { + writemap(@(text), mapsize, p); + } p += mapsize; changemapserv(text, gamemode); break; diff --git a/src/protos.h b/src/protos.h index 51e2e65..866dd21 100644 --- a/src/protos.h +++ b/src/protos.h @@ -88,7 +88,7 @@ extern void writeclientinfo(OFStream *stream); // clientgame extern void mousemove(int dx, int dy); extern void updateworld(int millis); -extern void startmap(char *name); +extern void startmap(OFString *name); extern void changemap(OFString *name); extern void initclient(); extern void spawnplayer(dynent *d); @@ -183,8 +183,8 @@ extern void render_particles(int time); // worldio extern void save_world(OFString *fname); -extern void load_world(char *mname); -extern void writemap(char *mname, int msize, uchar *mdata); +extern void load_world(OFString *mname); +extern void writemap(OFString *mname, int msize, uchar *mdata); extern OFData *readmap(OFString *mname); extern void loadgamerest(); extern void incomingdemodata(uchar *buf, int len, bool extras = false); diff --git a/src/world.mm b/src/world.mm index e56137a..d4908c3 100644 --- a/src/world.mm +++ b/src/world.mm @@ -469,7 +469,7 @@ empty_world( s->ceil = 16; s->vdelta = 0; s->defer = 0; - }; + } strncpy(hdr.head, "CUBE", 4); hdr.version = MAPVERSION; @@ -481,12 +481,12 @@ empty_world( { *S(x + ssize / 4, y + ssize / 4) = *SWS(oldworld, x, y, ssize / 2); - }; + } loopv(ents) { ents[i].x += ssize / 4; ents[i].y += ssize / 4; - }; + } } else { strn0cpy(hdr.maptitle, "Untitled Map by Unknown", 128); hdr.waterlevel = -100000; @@ -495,27 +495,28 @@ empty_world( ents.setsize(0); block b = {8, 8, ssize - 16, ssize - 16}; edittypexy(SPACE, b); - }; + } calclight(); - startmap("base/unnamed"); + startmap(@"base/unnamed"); if (oldworld) { free(oldworld); toggleedit(); execute("fullbright 1"); - }; -}; + } +} void mapenlarge() { empty_world(-1, false); -}; +} + void newmap(int i) { empty_world(i, false); -}; +} COMMAND(mapenlarge, ARG_NONE) COMMAND(newmap, ARG_1INT) diff --git a/src/worldio.mm b/src/worldio.mm index 18fb35c..499a838 100644 --- a/src/worldio.mm +++ b/src/worldio.mm @@ -120,10 +120,13 @@ toptimize() // FIXME: only does 2x2, make atleast for 4x4 also // these two are used by getmap/sendmap.. transfers compressed maps directly void -writemap(char *mname, int msize, uchar *mdata) +writemap(OFString *mname, int msize, uchar *mdata) { - setnames(mname); + @autoreleasepool { + setnames(mname.UTF8String); + } backup(cgzname, bakname); + FILE *f = fopen(cgzname, "wb"); if (!f) { conoutf(@"could not write map to %s", cgzname); @@ -131,7 +134,7 @@ writemap(char *mname, int msize, uchar *mdata) } fwrite(mdata, 1, msize, f); fclose(f); - conoutf(@"wrote map %s as file %s", mname, cgzname); + conoutf(@"wrote map %@ as file %s", mname, cgzname); } OFData * @@ -241,13 +244,15 @@ save_world(OFString *mname) COMMANDN(savemap, save_world, ARG_1STR) void -load_world(char *mname) // still supports all map formats that have existed - // since the earliest cube betas! +load_world(OFString *mname) // still supports all map formats that have existed + // since the earliest cube betas! { stopifrecording(); cleardlights(); pruneundos(); - setnames(mname); + @autoreleasepool { + setnames(mname.UTF8String); + } gzFile f = gzopen(cgzname, "rb9"); if (!f) { conoutf(@"could not read map %s", cgzname);