static void AdjustYC(int *yc) { if (currentMission) { if (currentMission->objectiveCount) AdjustInt(yc, 0, YC_OBJECTIVES + currentMission->objectiveCount - 1, 1); else AdjustInt(yc, 0, YC_OBJECTIVES, 1); } else AdjustInt(yc, 0, YC_MISSIONINDEX, 1); }
void DeleteItem(int index) { int i; currentMission->itemCount--; for (i = index; i < currentMission->itemCount; i++) currentMission->items[i] = currentMission->items[i + 1]; AdjustInt(¤tMission->itemCount, 0, ITEMS_MAX, 0); }
void DeleteObjective(int index) { int i; currentMission->objectiveCount--; for (i = index; i < currentMission->objectiveCount; i++) currentMission->objectives[i] = currentMission->objectives[i + 1]; AdjustInt(¤tMission->objectiveCount, 0, OBJECTIVE_MAX, 0); }
void DeleteSpecial(int index) { int i; currentMission->specialCount--; for (i = index; i < currentMission->specialCount; i++) currentMission->specials[i] = currentMission->specials[i + 1]; AdjustInt(¤tMission->specialCount, 0, SPECIAL_MAX, 0); }
void DeleteCharacter(int index) { int i; currentMission->baddieCount--; for (i = index; i < currentMission->baddieCount; i++) currentMission->baddies[i] = currentMission->baddies[i + 1]; AdjustInt(¤tMission->baddieCount, 0, BADDIE_MAX, 0); }
static void AdjustXC(int yc, int *xc) { switch (yc) { case YC_APPEARANCE: AdjustInt(xc, 0, XC_LEGS, 1); break; case YC_ATTRIBUTES: AdjustInt(xc, 0, XC_DELAY, 1); break; case YC_FLAGS: AdjustInt(xc, 0, XC_SLEEPING, 1); break; case YC_FLAGS2: AdjustInt(xc, 0, XC_AWAKE, 1); break; } }
static void DeleteCharacter(TCampaignSetting * setting, int *index) { int i; setting->characterCount--; for (i = *index; i < setting->characterCount; i++) setting->characters[i] = setting->characters[i + 1]; AdjustInt(&setting->characterCount, 0, 1000, 0); if (*index > 0 && *index >= setting->characterCount - 1) (*index)--; }
static void AdjustXC(int yc, int *xc) { switch (yc) { case YC_CAMPAIGNTITLE: AdjustInt(xc, 0, XC_CAMPAIGNDESC, 1); break; case YC_MISSIONTITLE: AdjustInt(xc, 0, XC_MUSICFILE, 1); break; case YC_MISSIONPROPS: AdjustInt(xc, 0, XC_DENSITY, 1); break; case YC_MISSIONLOOKS: AdjustInt(xc, 0, XC_COLOR4, 1); break; case YC_CHARACTERS: if (currentMission && currentMission->baddieCount) AdjustInt(xc, 0, currentMission->baddieCount - 1, 1); break; case YC_SPECIALS: if (currentMission && currentMission->specialCount) AdjustInt(xc, 0, currentMission->specialCount - 1, 1); break; case YC_ITEMS: if (currentMission && currentMission->itemCount) AdjustInt(xc, 0, currentMission->itemCount - 1, 1); break; case YC_WEAPONS: AdjustInt(xc, 0, XC_MAXWEAPONS, 1); break; default: if (yc >= YC_OBJECTIVES) AdjustInt(xc, 0, XC_FLAGS, 1); break; } }
static void AdjustYC(int *yc) { AdjustInt(yc, 0, YC_WEAPON, 1); }
static void Change(TCampaignSetting * setting, int index, int yc, int xc, int d) { TBadGuy *b; if (index < 0 || index >= setting->characterCount) return; b = &setting->characters[index]; switch (yc) { case YC_APPEARANCE: switch (xc) { case XC_FACE: b->facePic += d; AdjustInt(&b->facePic, 0, FACE_COUNT - 1, 1); break; case XC_SKIN: b->skinColor += d; AdjustInt(&b->skinColor, 0, SHADE_COUNT - 1, 1); break; case XC_HAIR: b->hairColor += d; AdjustInt(&b->hairColor, 0, SHADE_COUNT - 1, 1); break; case XC_BODY: b->bodyColor += d; AdjustInt(&b->bodyColor, 0, SHADE_COUNT - 1, 1); break; case XC_ARMS: b->armColor += d; AdjustInt(&b->armColor, 0, SHADE_COUNT - 1, 1); break; case XC_LEGS: b->legColor += d; AdjustInt(&b->legColor, 0, SHADE_COUNT - 1, 1); break; } break; case YC_ATTRIBUTES: switch (xc) { case XC_SPEED: b->speed += d * 64; AdjustInt(&b->speed, 128, 512, 0); break; case XC_HEALTH: b->health += d * 10; AdjustInt(&b->health, 10, 500, 0); break; case XC_MOVE: b->probabilityToMove += d * 5; AdjustInt(&b->probabilityToMove, 0, 100, 0); break; case XC_TRACK: b->probabilityToTrack += d * 5; AdjustInt(&b->probabilityToTrack, 0, 100, 0); break; case XC_SHOOT: b->probabilityToShoot += d * 5; AdjustInt(&b->probabilityToShoot, 0, 100, 0); break; case XC_DELAY: b->actionDelay += d; AdjustInt(&b->actionDelay, 0, 50, 0); break; } break; case YC_FLAGS: switch (xc) { case XC_ASBESTOS: b->flags ^= FLAGS_ASBESTOS; break; case XC_IMMUNITY: b->flags ^= FLAGS_IMMUNITY; break; case XC_SEETHROUGH: b->flags ^= FLAGS_SEETHROUGH; break; case XC_RUNS_AWAY: b->flags ^= FLAGS_RUNS_AWAY; break; case XC_SNEAKY: b->flags ^= FLAGS_SNEAKY; break; case XC_GOOD_GUY: b->flags ^= FLAGS_GOOD_GUY; break; case XC_SLEEPING: b->flags ^= FLAGS_SLEEPALWAYS; break; } break; case YC_FLAGS2: switch (xc) { case XC_PRISONER: b->flags ^= FLAGS_PRISONER; break; case XC_INVULNERABLE: b->flags ^= FLAGS_INVULNERABLE; break; case XC_FOLLOWER: b->flags ^= FLAGS_FOLLOWER; break; case XC_PENALTY: b->flags ^= FLAGS_PENALTY; break; case XC_VICTIM: b->flags ^= FLAGS_VICTIM; break; case XC_AWAKE: b->flags ^= FLAGS_AWAKEALWAYS; break; } break; case YC_WEAPON: b->gun += d; AdjustInt(&b->gun, 0, GUN_COUNT - 1, 1); break; } }
void AddObjective(void) { currentMission->objectiveCount++; AdjustInt(¤tMission->objectiveCount, 0, OBJECTIVE_MAX, 0); }
static int Change(int yc, int xc, int d, int *mission) { struct EditorInfo edInfo; int limit; if (yc == YC_MISSIONINDEX) { *mission += d; AdjustInt(mission, 0, campaign.missionCount, 0); return 0; } if (!currentMission) return 0; GetEditorInfo(&edInfo); switch (yc) { case YC_MISSIONPROPS: switch (xc) { case XC_WIDTH: currentMission->mapWidth += d; AdjustInt(¤tMission->mapWidth, 16, 64, 0); break; case XC_HEIGHT: currentMission->mapHeight += d; AdjustInt(¤tMission->mapHeight, 16, 64, 0); break; case XC_WALLCOUNT: currentMission->wallCount += d; AdjustInt(¤tMission->wallCount, 0, 200, 0); break; case XC_WALLLENGTH: currentMission->wallLength += d; AdjustInt(¤tMission->wallLength, 1, 100, 0); break; case XC_ROOMCOUNT: currentMission->roomCount += d; AdjustInt(¤tMission->roomCount, 0, 100, 0); break; case XC_SQRCOUNT: currentMission->squareCount += d; AdjustInt(¤tMission->squareCount, 0, 100, 0); break; case XC_DENSITY: currentMission->baddieDensity += d; AdjustInt(¤tMission->baddieDensity, 0, 100, 0); break; } break; case YC_MISSIONLOOKS: switch (xc) { case XC_WALL: currentMission->wallStyle += d; AdjustInt(¤tMission->wallStyle, 0, WALL_COUNT - 1, 1); break; case XC_FLOOR: currentMission->floorStyle += d; AdjustInt(¤tMission->floorStyle, 0, FLOOR_COUNT - 1, 1); break; case XC_ROOM: currentMission->roomStyle += d; AdjustInt(¤tMission->roomStyle, 0, ROOMFLOOR_COUNT - 1, 1); break; case XC_DOORS: currentMission->doorStyle += d; AdjustInt(¤tMission->doorStyle, 0, edInfo.doorCount - 1, 1); break; case XC_KEYS: currentMission->keyStyle += d; AdjustInt(¤tMission->keyStyle, 0, edInfo.keyCount - 1, 1); break; case XC_EXIT: currentMission->exitStyle += d; AdjustInt(¤tMission->exitStyle, 0, edInfo.exitCount - 1, 1); break; case XC_COLOR1: currentMission->wallRange += d; AdjustInt(¤tMission->wallRange, 0, edInfo.rangeCount - 1, 1); break; case XC_COLOR2: currentMission->floorRange += d; AdjustInt(¤tMission->floorRange, 0, edInfo.rangeCount - 1, 1); break; case XC_COLOR3: currentMission->roomRange += d; AdjustInt(¤tMission->roomRange, 0, edInfo.rangeCount - 1, 1); break; case XC_COLOR4: currentMission->altRange += d; AdjustInt(¤tMission->altRange, 0, edInfo.rangeCount - 1, 1); break; } break; case YC_CHARACTERS: currentMission->baddies[xc] += d; AdjustInt(¤tMission->baddies[xc], 0, campaign.characterCount - 1, 1); break; case YC_SPECIALS: currentMission->specials[xc] += d; AdjustInt(¤tMission->specials[xc], 0, campaign.characterCount - 1, 1); break; case YC_WEAPONS: currentMission->weaponSelection ^= (1 << xc); break; case YC_ITEMS: if (KeyDown(SDLK_LSHIFT) || KeyDown(SDLK_RSHIFT)) // Either shift key down? { currentMission->itemDensity[xc] += 5 * d; AdjustInt(¤tMission->itemDensity[xc], 0, 512, 0); } else { currentMission->items[xc] += d; AdjustInt(¤tMission->items[xc], 0, edInfo.itemCount - 1, 1); } break; default: if (yc >= YC_OBJECTIVES) { switch (xc) { case XC_TYPE: currentMission->objectives[yc - YC_OBJECTIVES]. type += d; AdjustInt(¤tMission-> objectives[yc - YC_OBJECTIVES].type, 0, OBJECTIVE_INVESTIGATE, 1); d = 0; case XC_INDEX: switch (currentMission-> objectives[yc - YC_OBJECTIVES].type) { case OBJECTIVE_COLLECT: limit = edInfo.pickupCount - 1; break; case OBJECTIVE_DESTROY: limit = edInfo.itemCount - 1; break; case OBJECTIVE_KILL: case OBJECTIVE_INVESTIGATE: limit = 0; break; case OBJECTIVE_RESCUE: limit = campaign.characterCount - 1; break; } currentMission->objectives[yc - YC_OBJECTIVES]. index += d; AdjustInt(¤tMission-> objectives[yc - YC_OBJECTIVES].index, 0, limit, 1); break; case XC_REQUIRED: currentMission->objectives[yc - YC_OBJECTIVES]. required += d; AdjustInt(¤tMission-> objectives[yc - YC_OBJECTIVES]. required, 0, 100, 1); break; case XC_TOTAL: currentMission->objectives[yc - YC_OBJECTIVES]. count += d; AdjustInt(¤tMission-> objectives[yc - YC_OBJECTIVES].count, 0, 100, 1); break; case XC_FLAGS: currentMission->objectives[yc - YC_OBJECTIVES]. flags += d; AdjustInt(¤tMission-> objectives[yc - YC_OBJECTIVES].flags, 0, 15, 1); break; } } break; } return 1; }