typedef struct player Player; typedef struct hyperKaos HyperKaos; typedef struct kaos { void* kType; void (*run)(struct kaos* self); void (*destroy)(struct kaos* self); struct kaos* next; } Kaos; typedef struct kaos_Conversation { Kaos* core; int index; } Conversation; typedef struct kaos_Choice { Kaos* core; SDL_Surface* question; SDL_Surface* answ1; SDL_Surface* answ2; HyperKaos* path1; HyperKaos* path2; } Choice; typedef struct kaos_Manip { Kaos* core; Player* target; int xSpd, ySpd; } Manip; typedef struct kaos_Look { Kaos* core; Player* target; char dir; } Look; typedef struct kaos_FaceEachother { Kaos* core; Player* p1; Player* p2; } FaceEachother; #ifdef SOUND_ON typedef struct kaos_PlaySound { Kaos* core; int i; } PlaySound; #endif typedef struct kaos_Teleport { Kaos* core; Player* target; int x, y; int out; SDL_Surface* aura; } Teleport; typedef struct kaos_Erase { Kaos* core; char type; int index; } Erase; typedef struct kaos_Wait { Kaos* core; char type; int frames; } Wait; typedef struct kaos_Spell_Beam { Kaos* core; SDL_Surface* aura; } Spell_Beam; Kaos* rawKaos(); Kaos* newConversation(int i); void runConversation(Kaos* self); void deleteConversation(Kaos* target); 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); void runManip(Kaos* self); void deleteManip(Kaos* target); Kaos* newLook(Player* t, char d); void runLook(Kaos* self); void deleteLook(Kaos* target); Kaos* newTeleport(Player* p, int x, int y, int o); void runTeleport(Kaos* self); void deleteTeleport(Kaos* target); Kaos* newFaceEachother(Player* p1, Player* p2); void runFaceEachother(Kaos* self); void deleteFaceEachother(Kaos* target); #ifdef SOUND_ON Kaos* newPlaySound(int i); void runPlaySound(Kaos* self); void deletePlaySound(Kaos* target); #endif Kaos* newErase(char t, int i); void runErase(Kaos* self); void deleteErase(Kaos* target); Kaos* newWait(char t, int i); void runWait(Kaos* self); void deleteWait(Kaos* target); Kaos* newSpell_Beam(); void runSpell_Beam(Kaos* self); void deleteSpell_Beam(Kaos* target);