beginning conversion of all kaos construcors to be of the form: newKaosType(char* args) to make map generation code maintainable
This commit is contained in:
parent
1c26ee6a82
commit
ffde2dc832
5 changed files with 72 additions and 63 deletions
4
Engine.c
4
Engine.c
|
@ -327,7 +327,7 @@ int init(int argc, char* args[])
|
|||
void writeSpellBook()
|
||||
{
|
||||
HyperKaos* testSpell = newHyperKaos(1,0,0,0,0,0);
|
||||
Kaos* stopPlayer = newManip(hero, 0,0);
|
||||
Kaos* stopPlayer = newManip("hero, xSpd 0, ySpd 0");
|
||||
Kaos* beam = newSpell_Beam();
|
||||
addKaos(testSpell, stopPlayer);
|
||||
addKaos(testSpell, beam);
|
||||
|
@ -336,7 +336,7 @@ void writeSpellBook()
|
|||
spellBook[0] = testSpell;
|
||||
|
||||
testSpell = newHyperKaos(1,0,0,0,0,0);
|
||||
Kaos* stopPlayer2 = newManip(hero, 0,0);
|
||||
Kaos* stopPlayer2 = newManip("hero, xSpd 0, ySpd 0");
|
||||
Kaos* flash = newSpell_Flash();
|
||||
addKaos(testSpell, stopPlayer2);
|
||||
addKaos(testSpell, flash);
|
||||
|
|
34
Kaos.c
34
Kaos.c
|
@ -24,11 +24,21 @@ Kaos* rawKaos()
|
|||
return self;
|
||||
}
|
||||
|
||||
Kaos* newConversation(int i)
|
||||
Kaos* newConversation(char* args)
|
||||
{
|
||||
int i;
|
||||
Kaos* core = rawKaos();
|
||||
Conversation* self = malloc(sizeof(Conversation));
|
||||
|
||||
if (sscanf(args, "textBox %d", &i) != 1)
|
||||
{
|
||||
free(core);
|
||||
free(self);
|
||||
self = NULL;
|
||||
core = NULL;
|
||||
return core;
|
||||
}
|
||||
|
||||
self->index = i;
|
||||
|
||||
core->kType = self;
|
||||
|
@ -132,11 +142,31 @@ void deleteChoice(Kaos* self)
|
|||
free(self);
|
||||
}
|
||||
|
||||
Kaos* newManip(Player* t, int x, int y)
|
||||
Kaos* newManip(char* args)
|
||||
{
|
||||
Player* t;
|
||||
int rm, x, y;
|
||||
int pSlot = -1;
|
||||
Kaos* core = rawKaos();
|
||||
Manip* self = malloc(sizeof(Manip));
|
||||
|
||||
t = hero;
|
||||
|
||||
if (sscanf(args, "room %u, person %u, xSpd %d, ySpd %d",
|
||||
&rm, &pSlot, &x, &y) != 4)
|
||||
if (sscanf(args, "hero, xSpd %d, ySpd %d",
|
||||
&x, &y) != 2)
|
||||
{
|
||||
free(core);
|
||||
core = NULL;
|
||||
free(self);
|
||||
self = NULL;
|
||||
return core;
|
||||
}
|
||||
|
||||
if (pSlot >=0)
|
||||
t = mapBuffer[rm]->people[pSlot];
|
||||
|
||||
self->target= t;
|
||||
self->xSpd = x;
|
||||
self->ySpd = y;
|
||||
|
|
4
Kaos.h
4
Kaos.h
|
@ -91,7 +91,7 @@ typedef struct kaos_Spell_Flash
|
|||
|
||||
Kaos* rawKaos();
|
||||
|
||||
Kaos* newConversation(int i);
|
||||
Kaos* newConversation(char* args);
|
||||
void runConversation(Kaos* self);
|
||||
void deleteConversation(Kaos* target);
|
||||
|
||||
|
@ -99,7 +99,7 @@ Kaos* newChoice(char* q, char* a1, char* a2, HyperKaos* p1, HyperKaos* p2);
|
|||
void runChoice(Kaos* self);
|
||||
void deleteChoice(Kaos* target);
|
||||
|
||||
Kaos* newManip(Player* t, int x, int y);
|
||||
Kaos* newManip(char* args);
|
||||
void runManip(Kaos* self);
|
||||
void deleteManip(Kaos* target);
|
||||
|
||||
|
|
87
WorldData.c
87
WorldData.c
|
@ -111,7 +111,7 @@ int worldBuilder(enum dataChunks chunk)
|
|||
case 229: //loadFX
|
||||
fp = &buildSFX;
|
||||
break;
|
||||
case 125: //BGM
|
||||
case 125: //loadBGM
|
||||
fp = &buildBGM;
|
||||
break;
|
||||
case 100: //addSigil
|
||||
|
@ -232,7 +232,7 @@ int buildKaos(char* props)
|
|||
{
|
||||
int slot;
|
||||
char kType, kProps[990];
|
||||
int (*fp)(int s, char* props);
|
||||
Kaos* (*fp)(char* args);
|
||||
|
||||
if (sscanf(props, "slot %u, class %c, %[^\n]",
|
||||
&slot, &kType, kProps) != 3)
|
||||
|
@ -241,13 +241,13 @@ int buildKaos(char* props)
|
|||
switch (kType)
|
||||
{
|
||||
case 'C':
|
||||
fp = &buildConvo;
|
||||
fp = &newConversation;
|
||||
break;
|
||||
case 'W':
|
||||
// fp = &buildWait;
|
||||
break;
|
||||
case 'M':
|
||||
fp = &buildManip;
|
||||
fp = &newManip;
|
||||
break;
|
||||
case 'L':
|
||||
//if (buildLook(slot, kProps) != 0) return 1;
|
||||
|
@ -266,40 +266,11 @@ int buildKaos(char* props)
|
|||
break;
|
||||
|
||||
}
|
||||
if (!fp(slot, kProps))
|
||||
if (!(kaosData[slot] = fp(kProps)))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int buildConvo(int slot, char* kProps)
|
||||
{
|
||||
int tSlot;
|
||||
if (sscanf(kProps, "textbox %u", &tSlot) != 1)
|
||||
return 0;
|
||||
printf(">>convo\n");
|
||||
kaosData[slot] = newConversation(tSlot);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int buildManip(int slot, char* kProps)
|
||||
{
|
||||
int rm, pSlot, x, y;
|
||||
pSlot = -1;
|
||||
Player* target = hero;
|
||||
if (sscanf(kProps, "room %u, person %u, xSpd %d, ySpd %d",
|
||||
&rm, &pSlot, &x, &y) != 4)
|
||||
if (sscanf(kProps, "player, xSpd %d, ySpd %d",
|
||||
&x, &y) != 2)
|
||||
return 0;
|
||||
|
||||
if (pSlot >= 0)
|
||||
target = mapBuffer[rm]->people[pSlot];
|
||||
|
||||
printf(">>manip\n");
|
||||
kaosData[slot] = newManip(target, x, y);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int buildObstruction(char* props)
|
||||
{
|
||||
int rm, x, y, w, h;
|
||||
|
@ -378,12 +349,12 @@ int buildPerson(char* props)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int countMapThings(enum dataChunks chunk)
|
||||
int* countMapThings(int* count, enum dataChunks chunk)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
char datafile[256];
|
||||
char lineBuffer[1024];
|
||||
char cmdBuffer[24];
|
||||
char propsBuffer[998];
|
||||
char cchunk[4];
|
||||
|
||||
FILE* worldInfo;
|
||||
|
@ -397,26 +368,43 @@ int countMapThings(enum dataChunks chunk)
|
|||
worldInfo = fopen(datafile, "r");
|
||||
while (fgets(lineBuffer, 1024, worldInfo))
|
||||
{
|
||||
if (lineBuffer[0] == x)
|
||||
count++;
|
||||
sscanf(lineBuffer, "%[^:]: %[^\t\n]", cmdBuffer, propsBuffer);
|
||||
switch(hashCmd(cmdBuffer))
|
||||
{
|
||||
case 200:
|
||||
count[0]++;
|
||||
break;
|
||||
case 45:
|
||||
count[1]++;
|
||||
break;
|
||||
case 109:
|
||||
count[2]++;
|
||||
break;
|
||||
case 229:
|
||||
count[3]++;
|
||||
break;
|
||||
case 125:
|
||||
count[4]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
void dataPurge(int a, int b, int c, int d, int e)
|
||||
void dataPurge(int* objs)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < a; i++)
|
||||
for (i = 0; i < objs[0]; i++)
|
||||
deleteRoom(mapData[i]);
|
||||
for (i = 0; i < b; i++)
|
||||
for (i = 0; i < objs[2]; i++)
|
||||
deleteTextBox(dialogueData[i]);
|
||||
for (i = 0; i < c; i++)
|
||||
for (i = 0; i < objs[1]; i++)
|
||||
kaosData[i]->destroy(kaosData[i]);
|
||||
|
||||
#ifdef SOUND_ON
|
||||
for (i = 0; i < d; i++)
|
||||
for (i = 0; i < objs[3]; i++)
|
||||
Mix_FreeMusic(bgmData[i]);
|
||||
for (i = 0; i < e; i++)
|
||||
for (i = 0; i < objs[4]; i++)
|
||||
Mix_FreeChunk(sfxData[i]);
|
||||
#endif
|
||||
|
||||
|
@ -424,14 +412,9 @@ void dataPurge(int a, int b, int c, int d, int e)
|
|||
|
||||
void unloadData(enum dataChunks chunk)
|
||||
{
|
||||
int a, b, c, d, e;
|
||||
int thingsCount[5] = {0,0,0,0,0};
|
||||
printf("Unloading old map chunk\n");
|
||||
a = countMapThings('R', chunk);
|
||||
b = countMapThings('T', chunk);
|
||||
c = countMapThings('K', chunk);
|
||||
d = countMapThings('M', chunk);
|
||||
e = countMapThings('S', chunk);
|
||||
dataPurge(a,b,c,d,e);
|
||||
dataPurge(countMapThings(thingsCount, chunk));
|
||||
printf("Unloaded old map chunk\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -29,11 +29,7 @@ int modTextBox(char* props);
|
|||
|
||||
int chainKaos(char* props);
|
||||
|
||||
int buildConvo(int slot, char* kProps);
|
||||
|
||||
int buildManip(int slot, char* kProps);
|
||||
|
||||
int countMapThings(char x, enum dataChunks chunk);
|
||||
int* countMapThings(int* counts, enum dataChunks chunk);
|
||||
|
||||
void unloadData(enum dataChunks chunk);
|
||||
|
||||
|
|
Loading…
Reference in a new issue