diff --git a/include/empobj.h b/include/empobj.h index 65b7a615..4c682570 100644 --- a/include/empobj.h +++ b/include/empobj.h @@ -85,5 +85,7 @@ union empobj_storage { }; extern char *obj_nameof(struct empobj *gp); +extern int put_empobj(struct empobj *gp); +extern void *get_empobj_chr(struct empobj *gp); #endif diff --git a/src/lib/commands/miss.c b/src/lib/commands/miss.c index 88167b52..2e5f723b 100644 --- a/src/lib/commands/miss.c +++ b/src/lib/commands/miss.c @@ -333,17 +333,7 @@ mission(void) gp->mission = mission; gp->opx = x; gp->opy = y; - switch (type) { - case EF_SHIP: - putship(gp->uid, &item.ship); - break; - case EF_LAND: - putland(gp->uid, &item.land); - break; - case EF_PLANE: - putplane(gp->uid, &item.plane); - break; - } + put_empobj(gp); } if (num == 0) { pr("No %s%s\n", ef_nameof(type), splur(num)); diff --git a/src/lib/common/empobj.c b/src/lib/common/empobj.c index 4199a473..5122d13b 100644 --- a/src/lib/common/empobj.c +++ b/src/lib/common/empobj.c @@ -55,3 +55,49 @@ obj_nameof(struct empobj *gp) CANT_HAPPEN("unsupported TYPE"); return ""; } + + +int +put_empobj(struct empobj *gp) +{ + switch (gp->ef_type) + { + case EF_SECTOR: + return ef_write(gp->ef_type, sctoff(gp->x, gp->y), gp); + case EF_NATION: + case EF_BMAP: + case EF_MAP: + return ef_write(gp->ef_type, gp->own, gp); + default: + return ef_write(gp->ef_type, gp->uid, gp); + } +} + +void * +get_empobj_chr(struct empobj *gp) +{ + void *cp; + + switch (gp->ef_type) { + case EF_LAND: + cp = &lchr[(int)gp->type]; + break; + case EF_SHIP: + cp = &mchr[(int)gp->type]; + break; + case EF_PLANE: + cp = &plchr[(int)gp->type]; + break; + case EF_NUKE: + cp = &nchr[(int)gp->type]; + break; + case EF_SECTOR: + cp = &dchr[(int)gp->type]; + break; + default: + CANT_HAPPEN("unsupported TYPE"); + cp = NULL; + break; + } + return cp; +} diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index 4c733d3d..55c87885 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -362,17 +362,7 @@ build_mission_list_type(struct genlist *mi, coord x, coord y, int mission, glp = malloc(sizeof(struct genlist)); memset(glp, 0, sizeof(struct genlist)); glp->type = type; - switch (type) { - case EF_LAND: - glp->cp = &lchr[(int)gp->type]; - break; - case EF_SHIP: - glp->cp = &mchr[(int)gp->type]; - break; - case EF_PLANE: - glp->cp = &plchr[(int)gp->type]; - break; - } + glp->cp = get_empobj_chr(gp); glp->thing = malloc(sizeof(item)); memcpy(glp->thing, &item, sizeof(item)); emp_insque(&glp->queue, &mi[gp->own].queue);