Skip to content

Commit

Permalink
Add CharacterStore (#140)
Browse files Browse the repository at this point in the history
Rename CharacterDescription to Character
Remove gCharacterDesc
  • Loading branch information
cxong committed Nov 1, 2013
1 parent 9704dc5 commit a4c8b4c
Show file tree
Hide file tree
Showing 14 changed files with 279 additions and 193 deletions.
38 changes: 21 additions & 17 deletions src/cdogs.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,20 +93,21 @@ void DrawObjectiveInfo(int idx, int x, int y, struct Mission *mission)
TOffsetPic pic;
TranslationTable *table = NULL;
int i = 0;
CharacterDescription *cd;
Character *cd;

switch (mission->objectives[idx].type)
{
case OBJECTIVE_KILL:
cd = &gCharacterDesc[mission->baddieCount + CHARACTER_OTHERS];
cd = CharacterStoreGetOther(
&gCampaign.Setting.characters, mission->baddieCount);
i = cd->looks.face;
table = &cd->table;
pic.picIndex = cHeadPic[i][DIRECTION_DOWN][STATE_IDLE];
pic.dx = cHeadOffset[i][DIRECTION_DOWN].dx;
pic.dy = cHeadOffset[i][DIRECTION_DOWN].dy;
break;
case OBJECTIVE_RESCUE:
cd = &gCharacterDesc[CHARACTER_PRISONER];
cd = CharacterStoreGetPrisoner(&gCampaign.Setting.characters, 0);
i = cd->looks.face;
table = &cd->table;
pic.picIndex = cHeadPic[i][DIRECTION_DOWN][STATE_IDLE];
Expand Down Expand Up @@ -307,7 +308,11 @@ void Summary(int x, struct PlayerData *data, int character)
CDogsTextStringWithTableAt(x, y, "Failed mission", &tableFlamed);

y += 2 * CDogsTextHeight();
DisplayPlayer(x, data->name, &gCharacterDesc[character], 0);
DisplayPlayer(
x,
data->name,
&gCampaign.Setting.characters.players[character],
0);
sprintf(s, "Score: %d", data->score);
CDogsTextStringAt(x, y, s);
y += CDogsTextHeight();
Expand Down Expand Up @@ -461,7 +466,7 @@ void ShowScore(GraphicsDevice *device, int score1, int score2)
DisplayPlayer(
CenterOfLeft(60),
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
sprintf(s, "Score: %d", score1);
CDogsTextStringAt(
Expand All @@ -471,7 +476,7 @@ void ShowScore(GraphicsDevice *device, int score1, int score2)

DisplayPlayer(
CenterOfRight(60), gPlayer2Data.name,
&gCharacterDesc[CHARACTER_PLAYER2],
&gCampaign.Setting.characters.players[1],
0);
sprintf(s, "Score: %d", score2);
CDogsTextStringAt(
Expand All @@ -484,7 +489,7 @@ void ShowScore(GraphicsDevice *device, int score1, int score2)
DisplayPlayer(
CenterX(TextGetStringWidth(s)),
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
}

Expand All @@ -504,12 +509,12 @@ void FinalScore(GraphicsDevice *device, int score1, int score2)
DisplayPlayer(
CenterOfLeft(60),
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
DisplayPlayer(
CenterOfRight(60),
gPlayer2Data.name,
&gCharacterDesc[CHARACTER_PLAYER2],
&gCampaign.Setting.characters.players[1],
0);
CDogsTextStringAtCenter("It's a draw!");
}
Expand All @@ -518,7 +523,7 @@ void FinalScore(GraphicsDevice *device, int score1, int score2)
DisplayPlayer(
CenterOfLeft(60),
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
CDogsTextStringAt(
CenterOfLeft(TextGetStringWidth(IS_WINNER)),
Expand All @@ -530,7 +535,7 @@ void FinalScore(GraphicsDevice *device, int score1, int score2)
DisplayPlayer(
CenterOfRight(60),
gPlayer2Data.name,
&gCharacterDesc[CHARACTER_PLAYER2],
&gCampaign.Setting.characters.players[1],
0);
CDogsTextStringAt(
CenterOfRight(TextGetStringWidth(IS_WINNER)),
Expand Down Expand Up @@ -585,12 +590,12 @@ void Victory(GraphicsDevice *graphics)
DisplayPlayer(
50,
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
DisplayPlayer(
200,
gPlayer2Data.name,
&gCharacterDesc[CHARACTER_PLAYER2],
&gCampaign.Setting.characters.players[1],
0);
if (gPlayer1Data.survived)
gPlayer1Data.missions++;
Expand All @@ -603,7 +608,7 @@ void Victory(GraphicsDevice *graphics)
DisplayPlayer(
125,
gPlayer1Data.name,
&gCharacterDesc[CHARACTER_PLAYER1],
&gCampaign.Setting.characters.players[0],
0);
gPlayer1Data.missions++;
}
Expand Down Expand Up @@ -663,7 +668,7 @@ static void InitPlayers(int twoPlayers, int maxHealth, int mission)
gPlayer1Data.kills = gPlayer1Data.friendlies = 0;
gPlayer1Data.allTime = gPlayer1Data.today = -1;
gPlayer1Data.lastMission = mission;
gPlayer1 = AddActor(&gCharacterDesc[CHARACTER_PLAYER1]);
gPlayer1 = AddActor(&gCampaign.Setting.characters.players[0]);
gPlayer1->weapon = WeaponCreate(gPlayer1Data.weapons[0]);
gPlayer1->flags = FLAGS_PLAYER1;
PlaceActor(gPlayer1);
Expand All @@ -675,7 +680,7 @@ static void InitPlayers(int twoPlayers, int maxHealth, int mission)
gPlayer2Data.kills = gPlayer2Data.friendlies = 0;
gPlayer2Data.allTime = gPlayer2Data.today = -1;
gPlayer2Data.lastMission = mission;
gPlayer2 = AddActor(&gCharacterDesc[CHARACTER_PLAYER2]);
gPlayer2 = AddActor(&gCampaign.Setting.characters.players[1]);
gPlayer2->weapon = WeaponCreate(gPlayer2Data.weapons[0]);
gPlayer2->flags = FLAGS_PLAYER2;
PlaceActor(gPlayer2);
Expand Down Expand Up @@ -1081,7 +1086,6 @@ int main(int argc, char *argv[])
exit(0);
}
memcpy(origPalette, gPicManager.palette, sizeof(origPalette));
InitializeTranslationTables();

CDogsTextInit(GetDataFilePath("graphics/font.px"), -2);

Expand Down
4 changes: 2 additions & 2 deletions src/cdogs/actors.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void DrawCharacter(int x, int y, TActor * actor)
int headDir = dir;
int headState = state;

CharacterDescription *c = actor->character;
Character *c = actor->character;
TranslationTable *table = (TranslationTable *) c->table;
HSV *tint = NULL;
int f = c->looks.face;
Expand Down Expand Up @@ -292,7 +292,7 @@ void DrawCharacter(int x, int y, TActor * actor)
}


TActor *AddActor(CharacterDescription *c)
TActor *AddActor(Character *c)
{
TActor *actor;
CCALLOC(actor, sizeof(TActor));
Expand Down
4 changes: 2 additions & 2 deletions src/cdogs/actors.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ struct Actor {
int stateCounter;
int lastCmd;
int soundLock;
CharacterDescription *character;
Character *character;
Weapon weapon;
int dx, dy;

Expand Down Expand Up @@ -160,7 +160,7 @@ void UpdateActorState(TActor * actor, int ticks);
int MoveActor(TActor * actor, int x, int y);
void CommandActor(TActor *actor, int cmd, int ticks);
void SlideActor(TActor *actor, int cmd);
TActor *AddActor(CharacterDescription *c);
TActor *AddActor(Character *c);
TActor *RemoveActor(TActor *actor);
void UpdateAllActors(int ticks);
TActor *ActorList(void);
Expand Down
42 changes: 17 additions & 25 deletions src/cdogs/ai.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,6 @@ void CommandBadGuys(int ticks)
TActor *actor;
int roll, cmd;
int count = 0;
int character;
int bypass;
int delayModifier;
int rollLimit;
Expand Down Expand Up @@ -603,12 +602,9 @@ void CommandBadGuys(int ticks)
gMission.missionData->baddieDensity > 0 &&
count < MAX(1, (gMission.missionData->baddieDensity * gConfig.Game.EnemyDensity) / 100))
{
TActor *baddie;
character =
CHARACTER_OTHERS +
rand() % gMission.missionData->baddieCount;
character = MIN(character, CHARACTER_COUNT);
baddie = AddActor(&gCharacterDesc[character]);
Character *character = CharacterStoreGetRandomBaddie(
&gCampaign.Setting.characters);
TActor *baddie = AddActor(character);
PlaceBaddie(baddie);
gBaddieCount++;
}
Expand All @@ -617,26 +613,23 @@ void CommandBadGuys(int ticks)
void InitializeBadGuys(void)
{
int i, j;
int character;
TActor *actor;

if (gMission.missionData->specialCount > 0) {
if (gMission.missionData->specialCount > 0)
{
for (i = 0; i < gMission.missionData->objectiveCount; i++)
if (gMission.missionData->objectives[i].type ==
OBJECTIVE_KILL) {
for (j = 0;
j < gMission.objectives[i].count;
j++) {
character =
CHARACTER_OTHERS +
gMission.missionData->baddieCount +
rand() %
gMission.missionData->specialCount;
actor = AddActor(&gCharacterDesc[character]);
{
if (gMission.missionData->objectives[i].type == OBJECTIVE_KILL)
{
for (j = 0; j < gMission.objectives[i].count; j++)
{
actor = AddActor(CharacterStoreGetRandomSpecial(
&gCampaign.Setting.characters));
actor->tileItem.flags |= ObjectiveToTileItem(i);
PlaceBaddie(actor);
}
}
}
}

for (i = 0; i < gMission.missionData->objectiveCount; i++)
Expand All @@ -645,7 +638,8 @@ void InitializeBadGuys(void)
{
for (j = 0; j < gMission.objectives[i].count; j++)
{
actor = AddActor(&gCharacterDesc[CHARACTER_PRISONER]);
actor = AddActor(CharacterStoreGetPrisoner(
&gCampaign.Setting.characters, 0));
actor->tileItem.flags |= ObjectiveToTileItem(i);
if (HasLockedRooms())
{
Expand Down Expand Up @@ -673,10 +667,8 @@ void CreateEnemies(void)
i < MAX(1, (gMission.missionData->baddieDensity * gConfig.Game.EnemyDensity) / 100);
i++)
{
int character = MIN(
CHARACTER_OTHERS + rand() % gMission.missionData->baddieCount,
CHARACTER_COUNT);
TActor *enemy = AddActor(&gCharacterDesc[character]);
TActor *enemy = AddActor(CharacterStoreGetRandomBaddie(
&gCampaign.Setting.characters));
PlaceBaddie(enemy);
gBaddieCount++;
}
Expand Down
2 changes: 1 addition & 1 deletion src/cdogs/automap.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ static void DisplayPlayer(TActor *player, Vec2i pos, int scale)
pos = Vec2iAdd(pos, Vec2iScale(playerPos, scale));
if (scale >= 2)
{
CharacterDescription *c = player->character;
Character *c = player->character;
int picIdx = cHeadPic[c->looks.face][DIRECTION_DOWN][STATE_IDLE];
PicPaletted *pic = PicManagerGetOldPic(&gPicManager, picIdx);
pos.x -= pic->w / 2;
Expand Down
3 changes: 2 additions & 1 deletion src/cdogs/campaigns.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,12 @@ void CampaignTerminate(CampaignOptions *campaign)
void CampaignSettingInit(CampaignSettingNew *setting)
{
memset(setting, 0, sizeof *setting);
CharacterStoreInit(&setting->characters);
}
void CampaignSettingTerminate(CampaignSettingNew *setting)
{
CFREE(setting->missions);
CFREE(setting->characters);
CharacterStoreTerminate(&setting->characters);
memset(setting, 0, sizeof *setting);
}

Expand Down
4 changes: 2 additions & 2 deletions src/cdogs/campaigns.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ typedef struct
char description[200];
int missionCount;
struct Mission *missions;
int characterCount;
CharacterDescription *characters;
int characterCount; // note: legacy, only used for editor
CharacterStore characters;
} CampaignSettingNew;

typedef struct
Expand Down
Loading

0 comments on commit a4c8b4c

Please sign in to comment.