Thanks for the write up Fitz, I really liked reading through. And thanks for the how you did the cat eye pupils, that was very interesting :] Lots of ideas for cutscenes now.

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
// new module script
#define MAX_REGIONS 15
#define MAX_HOTSPOTS 49
#define MAX_POSSIBLE_ROOMS 100
#define MAX_POSSIBLE_CHARACTERS 100
struct RoomSaveData{
bool exists;
bool load_from_save;
int ObjectCount;
bool object_isnull[MAX_ROOM_OBJECTS];
int object_X[MAX_ROOM_OBJECTS];
int object_Y[MAX_ROOM_OBJECTS];
bool object_Visible[MAX_ROOM_OBJECTS];
bool object_Clickable[MAX_ROOM_OBJECTS];
int object_Transparency[MAX_ROOM_OBJECTS];
int object_Graphic[MAX_ROOM_OBJECTS];
int object_View[MAX_ROOM_OBJECTS];
int object_Loop[MAX_ROOM_OBJECTS];
int object_Frame[MAX_ROOM_OBJECTS];
bool hotspot_Enabled[MAX_HOTSPOTS];
bool region_Enabled[MAX_REGIONS];
};
struct CharacterSaveData{
bool exists;
String Name;
int Room;
int x;
int y;
int z;
int Transparency;
bool Clickable;
int View;
int Frame;
int Loop;
int inventoryQuantity[MAX_GAME_ITEMS];
};
struct GameSaveData{
int character_count;
int invetoryitem_count;
int player_ID;
};
GameSaveData save_data_game;
RoomSaveData save_data_rooms[MAX_POSSIBLE_ROOMS];
CharacterSaveData save_data_charas[MAX_POSSIBLE_CHARACTERS];
//------------------------------------------------------------------------
// PRIVATE FUNCTIONS
//-------o-----------------------------------------------------------------
void storeCharacterData(){
int i;
int j;
i=0;
save_data_game.character_count = Game.CharacterCount;
save_data_game.invetoryitem_count = Game.InventoryItemCount+1;
save_data_game.player_ID = player.ID;
while(i<save_data_game.character_count){
if(character[i]!=null){
save_data_charas[i].exists=true;
save_data_charas[i].Name = character[i].Name;
save_data_charas[i].Room = character[i].Room;
save_data_charas[i].x = character[i].x;
save_data_charas[i].y = character[i].y;
save_data_charas[i].z = character[i].z;
save_data_charas[i].Transparency = character[i].Transparency;
save_data_charas[i].Clickable = character[i].Clickable;
save_data_charas[i].View = character[i].View;
save_data_charas[i].Frame = character[i].Frame;
save_data_charas[i].Loop = character[i].Loop;
j=1;
while(j<save_data_game.invetoryitem_count){
save_data_charas[i].inventoryQuantity[j] = character[i].InventoryQuantity[j];
j++;
}
} else {
save_data_charas[i].exists=false;
}
i++;
}
}
String CharacterSaveData_toString(){
String rstr="{\"characters\": {[";
int i;
int j;
i=0;
while(i<save_data_game.character_count){
if(save_data_charas[i].exists){
rstr=rstr.Append(String.Format(" \"%d\":{[",i));
rstr=rstr.Append(String.Format(" \"exists\": %d,[",save_data_charas[i].exists));
rstr=rstr.Append(String.Format(" \"Name\": \"%s\",[",save_data_charas[i].Name));
rstr=rstr.Append(String.Format(" \"Room\": %d,[",save_data_charas[i].Room));
rstr=rstr.Append(String.Format(" \"x\": %d,[",save_data_charas[i].x));
rstr=rstr.Append(String.Format(" \"y\": %d,[",save_data_charas[i].y));
rstr=rstr.Append(String.Format(" \"z\": %d,[",save_data_charas[i].z));
rstr=rstr.Append(String.Format(" \"Transparency\": %d,[",save_data_charas[i].Transparency));
rstr=rstr.Append(String.Format(" \"Clickable\": %d,[",save_data_charas[i].Clickable));
rstr=rstr.Append(String.Format(" \"View\": %d,[",save_data_charas[i].View));
rstr=rstr.Append(String.Format(" \"Frame\": %d,[",save_data_charas[i].Frame));
rstr=rstr.Append(String.Format(" \"Loop\": %d,[",save_data_charas[i].Loop));
rstr=rstr.Append(String.Format(" \"inventoryQuantity\":{["));
j=1;
while(j<save_data_game.invetoryitem_count-1){
rstr=rstr.Append(String.Format(" \"%d\": %d,[",j, save_data_charas[i].inventoryQuantity[j]));
j++;
}
rstr=rstr.Append(String.Format(" \"%d\": %d[",j, save_data_charas[i].inventoryQuantity[j]));
rstr=rstr.Append(String.Format(" }[ },["));
}
i++;
}
rstr=rstr.Append(String.Format(" }[ }["));
return rstr;
}
void storeCurrentRoomData(){
int i;
int r = player.Room;
save_data_rooms[r].load_from_save = false;
save_data_rooms[r].exists = true;
save_data_rooms[r].ObjectCount = Room.ObjectCount;
i=0;
while(i<save_data_rooms[r].ObjectCount){
if(object[i] != null){
save_data_rooms[r].object_isnull[i] = false;
save_data_rooms[r].object_X[i] = object[i].X;
save_data_rooms[r].object_Y[i] = object[i].Y;
save_data_rooms[r].object_Visible[i] = object[i].Visible;
save_data_rooms[r].object_Clickable[i] = object[i].Clickable;
save_data_rooms[r].object_Transparency[i] = object[i].Transparency;
save_data_rooms[r].object_Graphic[i] = object[i].Graphic;
save_data_rooms[r].object_View[i] = object[i].View;
save_data_rooms[r].object_Loop[i] = object[i].Loop;
save_data_rooms[r].object_Frame[i] = object[i].Frame;
} else {
save_data_rooms[r].object_isnull[i] = true;
}
i++;
}
i=0;
while(i<MAX_HOTSPOTS){
save_data_rooms[r].hotspot_Enabled[i] = hotspot[i].Enabled;
i++;
}
i=0;
while(i<MAX_REGIONS){
save_data_rooms[r].region_Enabled[i] = region[i].Enabled;
i++;
}
}
String RoomSaveData_toString(){
String rstr="{\"rooms\": {[";
int i;
int j;
i=0;
while(i<MAX_POSSIBLE_ROOMS){
if(save_data_rooms[i].exists){
rstr=rstr.Append(String.Format(" \"%d\":{[",i));
rstr=rstr.Append(String.Format(" \"exists\": %d,[",save_data_rooms[i].exists));
rstr=rstr.Append(String.Format(" \"load_from_save\": \"%d\",[",save_data_rooms[i].load_from_save));
rstr=rstr.Append(String.Format(" \"ObjectCount\": \"%d\",[",save_data_rooms[i].ObjectCount));
rstr=rstr.Append(String.Format(" \"objects\":{["));
j=0;
while(j<save_data_rooms[i].ObjectCount){
rstr=rstr.Append(String.Format(" \"%d\": {",j));
rstr=rstr.Append(String.Format(" \"isnull\": %d,[", save_data_rooms[i].object_isnull[j]));
rstr=rstr.Append(String.Format(" \"X\": %d,[", save_data_rooms[i].object_X[j]));
rstr=rstr.Append(String.Format(" \"Y\": %d,[", save_data_rooms[i].object_Y[j]));
rstr=rstr.Append(String.Format(" \"Visible\": %d,[", save_data_rooms[i].object_Visible[j]));
rstr=rstr.Append(String.Format(" \"Clickable\": %d,[", save_data_rooms[i].object_Clickable[j]));
rstr=rstr.Append(String.Format(" \"Transparency\": %d,[", save_data_rooms[i].object_Transparency[j]));
rstr=rstr.Append(String.Format(" \"Graphic\": %d,[", save_data_rooms[i].object_Graphic[j]));
rstr=rstr.Append(String.Format(" \"View\": %d,[", save_data_rooms[i].object_View[j]));
rstr=rstr.Append(String.Format(" \"Loop\": %d,[", save_data_rooms[i].object_Loop[j]));
rstr=rstr.Append(String.Format(" \"Frame\": %d,[", save_data_rooms[i].object_Frame[j]));
if(j<save_data_rooms[i].ObjectCount-1){
rstr=rstr.Append(String.Format(" },"));
} else {
rstr=rstr.Append(String.Format(" }"));
}
j++;
}
rstr=rstr.Append(String.Format(" },"));
rstr=rstr.Append(String.Format(" \"regions\":{["));
j=0;
while(j<MAX_REGIONS){
rstr=rstr.Append(String.Format(" \"%d\": { \"Enabled\": %d }, [",j,save_data_rooms[i].region_Enabled[j]));
j++;
}
rstr=rstr.Append(String.Format(" },"));
rstr=rstr.Append(String.Format(" \"hotspot\":{["));
j=0;
while(j<MAX_HOTSPOTS){
rstr=rstr.Append(String.Format(" \"%d\": { \"Enabled\": %d }, [",j,save_data_rooms[i].hotspot_Enabled[j]));
j++;
}
rstr=rstr.Append(String.Format(" },"));
}
i++;
}
rstr=rstr.Append(String.Format(" }[}["));
return rstr;
}
void storeCurrentData(){
storeCharacterData();
storeCurrentRoomData();
}
void writeToFile(String content, String filename){
File *output = File.Open(filename, eFileWrite);
if (output == null) {
Display("Error opening file.");
} else {
String lineToWrite;
String restOfContent;
restOfContent = content.Copy();
while(restOfContent.Length > 0 && restOfContent.IndexOf("[")>0){
lineToWrite = restOfContent.Substring(0, restOfContent.IndexOf("["));
restOfContent = restOfContent.Substring(restOfContent.IndexOf("[")+1, restOfContent.Length- restOfContent.IndexOf("[")-1);
output.WriteRawLine(lineToWrite);
}
output.Close();
}
}
String readFile(String filename){
}
//------------------------------------------------------------------------
// PUBLIC FUNCTIONS
//------------------------------------------------------------------------
static void PortableSaveGame::save(int slot, String description){
storeCurrentData();
String fstr;
fstr=CharacterSaveData_toString();
fstr=fstr.Append(RoomSaveData_toString());
writeToFile(fstr, "atemp.json");
}
static void PortableSaveGame::restore(int slot){
}
//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
function on_event (EventType event, int data)
{
if(event == eEventLeaveRoom){
storeCurrentRoomData();
} else if(event == eEventEnterRoomBeforeFadein){
//do necessary loading from save
}
}
struct PortableSaveGame{
import static void save(int slot, String description);
import static void restore(int slot);
};
By continuing to use this site you agree to the use of cookies. Please visit this page to see exactly how we use these.
Page created in 0.203 seconds with 15 queries.