diff --git a/src/cube.h b/src/cube.h index 34e8cf1..7388cef 100644 --- a/src/cube.h +++ b/src/cube.h @@ -20,8 +20,8 @@ @property (nonatomic) int framesInMap; @end -enum // block types, order matters! -{ +// block types, order matters! +enum { SOLID = 0, // entirely solid cube [only specifies wtex] CORNER, // half full corner of a wall FHF, // floor heightfield using neighbour vdelta values @@ -44,8 +44,8 @@ struct sqr { uchar tag; // used by triggers }; -enum // hardcoded texture numbers -{ +// hardcoded texture numbers +enum { DEFAULT_SKY = 0, DEFAULT_LIQUID, DEFAULT_WALL, @@ -53,8 +53,8 @@ enum // hardcoded texture numbers DEFAULT_CEIL }; -enum // static entity types -{ +// static entity types +enum { NOTUSED = 0, // entity slot not in use in map LIGHT, // lightsource, attr1 = radius, attr2 = intensity PLAYERSTART, // attr1 = angle @@ -76,8 +76,8 @@ enum // static entity types MAXENTTYPES }; -struct persistent_entity // map entity -{ +// map entity +struct persistent_entity { short x, y, z; // cube aligned position short attr1; uchar type; // type is one of the above @@ -90,8 +90,8 @@ struct entity: public persistent_entity { #define MAPVERSION 5 // bump if map format changes, see worldio.cpp -struct header // map file format header -{ +// map file format header +struct header { char head[4]; // "CUBE" int version; // any >8bit quantity is a little indian int headersize; // sizeof(header) @@ -344,8 +344,8 @@ extern bool demoplayback; #define m_classicsp (gamemode == -2) #define isteam(a, b) (m_teammode && [a isEqual:b]) -enum // function signatures for script functions, see command.cpp -{ +// function signatures for script functions, see command.mm +enum { ARG_1INT, ARG_2INT, ARG_3INT, diff --git a/src/worldlight.mm b/src/worldlight.mm index 38ed5af..58fe2ff 100644 --- a/src/worldlight.mm +++ b/src/worldlight.mm @@ -189,15 +189,16 @@ calclight() VARP(dynlight, 0, 16, 32); -vector dlights; +static OFMutableData *dlights; void cleardlights() { - while (!dlights.empty()) { - block *backup = dlights.pop(); + while (dlights.count > 0) { + block *backup = *(block **)[dlights lastItem]; + [dlights removeLastItem]; blockpaste(*backup); - free(backup); + OFFreeMemory(backup); } } @@ -227,7 +228,13 @@ dodynlight(const OFVector3D &vold, const OFVector3D &v, int reach, int strength, if (b.ys + b.y > ssize - 2) b.ys = ssize - 2 - b.y; - dlights.add(blockcopy(b)); // backup area before rendering in dynlight + if (dlights == nil) + dlights = + [[OFMutableData alloc] initWithItemSize:sizeof(block *)]; + + // backup area before rendering in dynlight + block *copy = blockcopy(b); + [dlights addItem:©]; persistent_entity l = { (short)v.x, (short)v.y, (short)v.z, (short)reach, LIGHT, (uchar)strength, 0, 0 };