Convert more files to pure Objective-C

FossilOrigin-Name: b250dfa8d49dc6cf7dd86d6c7836733467c87769e3cedaa4678b94d411b7be12
This commit is contained in:
Jonathan Schleifer 2025-03-20 21:18:29 +00:00
parent 565a845aaf
commit b4d52ea3ec
12 changed files with 75 additions and 76 deletions

View file

@ -9,7 +9,7 @@
int nextmode = 0; // nextmode becomes gamemode after next map load
VAR(gamemode, 1, 0, 0);
void
static void
mode(int n)
{
addmsg(1, 2, SV_GAMEMODE, nextmode = n);
@ -144,17 +144,17 @@ respawnself()
showscores(false);
}
void
static void
arenacount(
DynamicEntity *d, int &alive, int &dead, OFString **lastteam, bool &oneteam)
DynamicEntity *d, int *alive, int *dead, OFString **lastteam, bool *oneteam)
{
if (d.state != CS_DEAD) {
alive++;
(*alive)++;
if (![*lastteam isEqual:d.team])
oneteam = false;
*oneteam = false;
*lastteam = d.team;
} else
dead++;
(*dead)++;
}
int arenarespawnwait = 0;
@ -177,8 +177,8 @@ arenarespawn()
for (id player in players)
if (player != [OFNull null])
arenacount(
player, alive, dead, &lastteam, oneteam);
arenacount(player1, alive, dead, &lastteam, oneteam);
player, &alive, &dead, &lastteam, &oneteam);
arenacount(player1, &alive, &dead, &lastteam, &oneteam);
if (dead > 0 && (alive <= 1 || (m_teammode && oneteam))) {
conoutf(
@"arena round is over! next round in 5 seconds...");
@ -332,7 +332,7 @@ spawnplayer(DynamicEntity *d)
// movement input code
#define dir(name, v, d, s, os) \
void name(bool isdown) \
static void name(bool isdown) \
{ \
player1.s = isdown; \
player1.v = isdown ? d : (player1.os ? -(d) : 0); \

View file

@ -197,11 +197,9 @@ addmsg(int rel, int num, int type, ...)
{
if (demoplayback)
return;
if (num != msgsizelookup(type)) {
fatal([OFString
stringWithFormat:@"inconsistant msg size for %d (%d != %d)",
type, num, msgsizelookup(type)]);
}
if (num != msgsizelookup(type))
fatal(@"inconsistant msg size for %d (%d != %d)", type, num,
msgsizelookup(type));
if (messages.count == 100) {
conoutf(@"command flood protection (type %d)", type);
return;

View file

@ -308,7 +308,7 @@ localservertoclient(uchar *buf, int len)
int xs = getint(&p);
int ys = getint(&p);
int v = getint(&p);
block b = { x, y, xs, ys };
struct block b = { x, y, xs, ys };
switch (type) {
case SV_EDITH:
editheightxy(v != 0, getint(&p), &b);

View file

@ -12,12 +12,12 @@ bool editmode = false;
// invariant: all code assumes that these are kept inside MINBORD distance of
// the edge of the map
block sel;
struct block sel;
OF_CONSTRUCTOR()
{
enqueueInit(^{
sel = (block) {
sel = (struct block) {
variable(@"selx", 0, 0, 4096, &sel.x, NULL, false),
variable(@"sely", 0, 0, 4096, &sel.y, NULL, false),
variable(@"selxs", 0, 0, 4096, &sel.xs, NULL, false),
@ -34,7 +34,7 @@ bool selset = false;
makeundo(); \
loop(x, sel->xs) loop(y, sel->ys) \
{ \
sqr *s = S(sel->x + x, sel->y + y); \
struct sqr *s = S(sel->x + x, sel->y + y); \
b; \
} \
remip(sel, 0); \
@ -48,7 +48,7 @@ bool dragging = false;
int lastx, lasty, lasth;
int lasttype = 0, lasttex = 0;
sqr rtex;
static struct sqr rtex;
VAR(editing, 0, 0, 1);
@ -121,7 +121,7 @@ noselection()
void
selectpos(int x, int y, int xs, int ys)
{
block s = { x, y, xs, ys };
struct block s = { x, y, xs, ys };
sel = s;
selh = 0;
correctsel();
@ -130,7 +130,7 @@ selectpos(int x, int y, int xs, int ys)
void
makesel()
{
block s = { min(lastx, cx), min(lasty, cy), abs(lastx - cx) + 1,
struct block s = { min(lastx, cx), min(lasty, cy), abs(lastx - cx) + 1,
abs(lasty - cy) + 1 };
sel = s;
selh = max(lasth, ch);
@ -141,9 +141,9 @@ makesel()
VAR(flrceil, 0, 0, 2);
// finds out z height when cursor points at wall
float
sheight(
sqr *s, sqr *t, float z) // finds out z height when cursor points at wall
sheight(struct sqr *s, struct sqr *t, float z)
{
return !flrceil // z-s->floor<s->ceil-z
? (s->type == FHF ? s->floor - t->vdelta / 4.0f : (float)s->floor)
@ -165,7 +165,7 @@ cursorupdate() // called every frame from hud
if (OUTBORD(cx, cy))
return;
sqr *s = S(cx, cy);
struct sqr *s = S(cx, cy);
// selected wall
if (fabs(sheight(s, s, z) - z) > 1) {
@ -194,7 +194,7 @@ cursorupdate() // called every frame from hud
for (int iy = cy - GRIDSIZE; iy <= cy + GRIDSIZE; iy++) {
if (OUTBORD(ix, iy))
continue;
sqr *s = S(ix, iy);
struct sqr *s = S(ix, iy);
if (SOLID(s))
continue;
float h1 = sheight(s, s, z);
@ -207,7 +207,7 @@ cursorupdate() // called every frame from hud
linestyle(GRIDW, 0x80, 0xFF, 0x80);
else
linestyle(GRIDW, 0x80, 0x80, 0x80);
block b = { ix, iy, 1, 1 };
struct block b = { ix, iy, 1, 1 };
box(&b, h1, h2, h3, h4);
linestyle(GRID8, 0x40, 0x40, 0xFF);
if (!(ix & GRIDM))
@ -224,7 +224,7 @@ cursorupdate() // called every frame from hud
if (!SOLID(s)) {
float ih = sheight(s, s, z);
linestyle(GRIDS, 0xFF, 0xFF, 0xFF);
block b = { cx, cy, 1, 1 };
struct block b = { cx, cy, 1, 1 };
box(&b, ih, sheight(s, SWS(s, 1, 0, ssize), z),
sheight(s, SWS(s, 1, 1, ssize), z),
sheight(s, SWS(s, 0, 1, ssize), z));
@ -247,9 +247,9 @@ pruneundos(int maxremain) // bound memory
{
int t = 0;
for (ssize_t i = (ssize_t)undos.count - 1; i >= 0; i--) {
block *undo = *(block **)[undos itemAtIndex:i];
struct block *undo = [undos mutableItemAtIndex:i];
t += undo->xs * undo->ys * sizeof(sqr);
t += undo->xs * undo->ys * sizeof(struct sqr);
if (t > maxremain) {
OFFreeMemory(undo);
[undos removeItemAtIndex:i];
@ -262,9 +262,9 @@ makeundo()
{
if (undos == nil)
undos =
[[OFMutableData alloc] initWithItemSize:sizeof(block *)];
[[OFMutableData alloc] initWithItemSize:sizeof(struct block *)];
block *copy = blockcopy(&sel);
struct block *copy = blockcopy(&sel);
[undos addItem:&copy];
pruneundos(undomegs << 20);
}
@ -277,13 +277,13 @@ editundo()
conoutf(@"nothing more to undo");
return;
}
block *p = *(block **)undos.lastItem;
struct block *p = undos.mutableLastItem;
[undos removeLastItem];
blockpaste(p);
OFFreeMemory(p);
}
block *copybuf = NULL;
static struct block *copybuf = NULL;
void
copy()
@ -351,7 +351,7 @@ editdrag(bool isDown)
// strictly triggered locally. They all have very similar structure.
void
editheightxy(bool isfloor, int amount, const block *sel)
editheightxy(bool isfloor, int amount, const struct block *sel)
{
loopselxy(
if (isfloor) {
@ -376,7 +376,7 @@ editheight(int flr, int amount)
COMMAND(editheight, ARG_2INT)
void
edittexxy(int type, int t, const block *sel)
edittexxy(int type, int t, const struct block *sel)
{
loopselxy(switch (type) {
case 0:
@ -419,7 +419,7 @@ replace()
EDITSELMP;
loop(x, ssize) loop(y, ssize)
{
sqr *s = S(x, y);
struct sqr *s = S(x, y);
switch (lasttype) {
case 0:
if (s->ftex == rtex.ftex)
@ -439,12 +439,12 @@ replace()
break;
}
}
block b = { 0, 0, ssize, ssize };
struct block b = { 0, 0, ssize, ssize };
remip(&b, 0);
}
void
edittypexy(int type, const block *sel)
edittypexy(int type, const struct block *sel)
{
loopselxy(s->type = type);
}
@ -485,7 +485,7 @@ corner()
COMMAND(corner, ARG_NONE)
void
editequalisexy(bool isfloor, const block *sel)
editequalisexy(bool isfloor, const struct block *sel)
{
int low = 127, hi = -128;
loopselxy({
@ -515,7 +515,7 @@ equalize(int flr)
COMMAND(equalize, ARG_1INT)
void
setvdeltaxy(int delta, const block *sel)
setvdeltaxy(int delta, const struct block *sel)
{
loopselxy(s->vdelta = max(s->vdelta + delta, 0));
remipmore(sel, 0);
@ -555,9 +555,9 @@ arch(int sidedelta, int _a)
sel.xs = MAXARCHVERT;
if (sel.ys > MAXARCHVERT)
sel.ys = MAXARCHVERT;
block *sel_ = &sel;
struct block *sel_ = &sel;
// Ugly hack to make the macro work.
block *sel = sel_;
struct block *sel = sel_;
loopselxy(s->vdelta = sel->xs > sel->ys
? (archverts[sel->xs - 1][x] +
(y == 0 || y == sel->ys - 1 ? sidedelta : 0))
@ -577,9 +577,9 @@ slope(int xd, int yd)
off -= yd * sel.ys;
sel.xs++;
sel.ys++;
block *sel_ = &sel;
struct block *sel_ = &sel;
// Ugly hack to make the macro work.
block *sel = sel_;
struct block *sel = sel_;
loopselxy(s->vdelta = xd * x + yd * y + off);
remipmore(sel, 0);
}
@ -612,9 +612,9 @@ void
edittag(int tag)
{
EDITSELMP;
block *sel_ = &sel;
struct block *sel_ = &sel;
// Ugly hack to make the macro work.
block *sel = sel_;
struct block *sel = sel_;
loopselxy(s->tag = tag);
}

View file

@ -29,9 +29,9 @@ initEntities()
ents = [[OFMutableArray alloc] init];
}
void
renderent(Entity *e, OFString *mdlname, float z, float yaw, int frame = 0,
int numf = 1, int basetime = 0, float speed = 10.0f)
static void
renderent(Entity *e, OFString *mdlname, float z, float yaw, int frame/* = 0*/,
int numf/* = 1*/, int basetime/* = 0*/, float speed/* = 10.0f*/)
{
rendermodel(mdlname, frame, numf, 0, 1.1f,
OFMakeVector3D(e.x, z + S(e.x, e.y)->floor, e.y), yaw, 0, false,
@ -67,7 +67,7 @@ renderentities()
(float)(1 +
sin(lastmillis / 100.0 + e.x + e.y) /
20),
lastmillis / 10.0f);
lastmillis / 10.0f, 0,1,0,10.0f);
} else {
switch (e.attr2) {
case 1:
@ -84,7 +84,8 @@ renderentities()
e.y) /
20),
lastmillis /
(e.attr2 ? 1.0f : 10.0f));
(e.attr2 ? 1.0f : 10.0f),
0, 1, 0, 10.0f);
break;
case 4:
@ -136,12 +137,12 @@ baseammo(int gun)
static int
radditem(int i, int v)
{
itemstat &is = itemstats[ents[i].type - I_SHELLS];
struct itemstat *is = &itemstats[ents[i].type - I_SHELLS];
ents[i].spawned = false;
v += is.add;
if (v > is.max)
v = is.max;
playsoundc(is.sound);
v += is->add;
if (v > is->max)
v = is->max;
playsoundc(is->sound);
return v;
}

View file

@ -21,17 +21,17 @@ executable('client',
'ServerEntity.m',
'ServerInfo.m',
'Variable.m',
'clients.mm',
'clientextras.mm',
'clientgame.mm',
'clients2c.mm',
'clients.m',
'clientextras.m',
'clientgame.m',
'clients2c.m',
'commands.mm',
'console.mm',
'editing.mm',
'entities.mm',
'console.m',
'editing.m',
'entities.m',
'init.mm',
'menus.mm',
'monster.mm',
'menus.m',
'monster.m',
'physics.mm',
'rendercubes.mm',
'renderextras.mm',

View file

@ -63,7 +63,7 @@ basicmonster(int type, int yaw, int state, int trigger, int move)
type = 0;
}
DynamicEntity *m = newdynent();
monstertype *t = &monstertypes[(m.mtype = type)];
struct monstertype *t = &monstertypes[(m.mtype = type)];
m.eyeheight = 2.0f;
m.aboveeye = 1.9f;
m.radius *= t->bscale / 10.0f;
@ -138,7 +138,7 @@ monsterclear()
// height-correct line of sight for monster shooting/seeing
bool
los(float lx, float ly, float lz, float bx, float by, float bz, OFVector3D &v)
los(float lx, float ly, float lz, float bx, float by, float bz, OFVector3D *v)
{
if (OUTBORD((int)lx, (int)ly) || OUTBORD((int)bx, (int)by))
return false;
@ -151,7 +151,7 @@ los(float lx, float ly, float lz, float bx, float by, float bz, OFVector3D &v)
float y = ly;
int i = 0;
for (;;) {
sqr *s = S(fast_f2nat(x), fast_f2nat(y));
struct sqr *s = S(fast_f2nat(x), fast_f2nat(y));
if (SOLID(s))
break;
float floor = s->floor;
@ -163,9 +163,9 @@ los(float lx, float ly, float lz, float bx, float by, float bz, OFVector3D &v)
float rz = lz - ((lz - bz) * (i / (float)steps));
if (rz < floor || rz > ceil)
break;
v.x = x;
v.y = y;
v.z = rz;
v->x = x;
v->y = y;
v->z = rz;
x += dx / (float)steps;
y += dy / (float)steps;
i++;
@ -174,9 +174,9 @@ los(float lx, float ly, float lz, float bx, float by, float bz, OFVector3D &v)
}
bool
enemylos(DynamicEntity *m, OFVector3D &v)
enemylos(DynamicEntity *m, OFVector3D *v)
{
v = m.o;
*v = m.o;
return los(
m.o.x, m.o.y, m.o.z, m.enemy.o.x, m.enemy.o.y, m.enemy.o.z, v);
}
@ -261,7 +261,7 @@ monsteraction(DynamicEntity *m)
// contact
{
OFVector3D target;
if (editmode || !enemylos(m, target))
if (editmode || !enemylos(m, &target))
return; // skip running physics
normalise(m, enemyyaw);
float angle = (float)fabs(enemyyaw - m.yaw);
@ -295,7 +295,7 @@ monsteraction(DynamicEntity *m)
m.targetyaw = enemyyaw;
if (m.trigger < lastmillis) {
OFVector3D target;
if (!enemylos(m, target)) {
if (!enemylos(m, &target)) {
// no visual contact anymore, let monster get
// as close as possible then search for player
transition(m, M_HOME, 1, 800, 500);

View file

@ -202,7 +202,7 @@ checkpings()
}
}
void
extern "C" void
refreshservers()
{
checkresolver();