void addEntityFromScript(char *line) { char entityType[MAX_VALUE_LENGTH], entityName[MAX_VALUE_LENGTH], objectiveName[MAX_VALUE_LENGTH]; int x, y; Entity *e; sscanf(line, "%s %s \"%[^\"]\" %d %d", entityType, entityName, objectiveName, &x, &y); e = addEntityFromResource(entityType, entityName, x, y); e->startX = x; e->startY = y; e->endX = x; e->endY = y; if (strcmpignorecase(objectiveName, " ") != 0) { STRNCPY(e->objectiveName, objectiveName, sizeof(e->objectiveName)); } }
char *loadResources(char *buffer) { int i, startX, startY, type, name, resourceType; char *token, *line, itemName[MAX_VALUE_LENGTH], *savePtr2, *savePtr; Entity *e; savePtr = NULL; resourceType = ENTITY_DATA; if (key == NULL || value == NULL) { key = malloc(sizeof(char *) * MAX_PROPS_FILES); value = malloc(sizeof(char *) * MAX_PROPS_FILES); if (key == NULL || value == NULL) { showErrorAndExit("Ran out of memory when loading properties"); } for (i=0;i<MAX_PROPS_FILES;i++) { key[i] = malloc(MAX_VALUE_LENGTH); value[i] = malloc(MAX_VALUE_LENGTH); if (key[i] == NULL || value[i] == NULL) { showErrorAndExit("Ran out of memory when loading properties"); } } } for (i=0;i<MAX_PROPS_FILES;i++) { key[i][0] = '\0'; value[i][0] = '\0'; } i = 0; name = type = startX = startY = -1; e = NULL; line = strtok_r(buffer, "\n", &savePtr); while (line != NULL) { if (line[strlen(line) - 1] == '\n') { line[strlen(line) - 1] = '\0'; } if (line[strlen(line) - 1] == '\r') { line[strlen(line) - 1] = '\0'; } if (line[0] == '#' || line[0] == '\n') { line = strtok_r(NULL, "\n", &savePtr); continue; } else if (line[0] == ' ') { printf("WARNING: Line starts with a space\n"); #if DEV == 1 exit(0); #endif line = strtok_r(NULL, "\n", &savePtr); continue; } sscanf(line, "%s", itemName); if (strcmpignorecase(itemName, "MAP_NAME") == 0) { break; } else if (strcmpignorecase(itemName, "UPDATE_ENTITY") == 0 || strcmpignorecase(itemName, "REMOVE_ENTITY") == 0) { break; } else if (strcmpignorecase(line, "PLAYER_INVENTORY") == 0) { resourceType = PLAYER_INVENTORY; } else if (strstr(line, "INVENTORY_INDEX") != NULL) { sscanf(line, "%*s %d", &startX); setInventoryIndex(startX); } else if (strcmpignorecase(line, "ENTITY_DATA") == 0) { resourceType = ENTITY_DATA; } else if (strcmpignorecase(line, "{") == 0) { i = 0; name = type = startX = startY = -1; e = NULL; } else if (strcmpignorecase(line, "}") == 0) { e = addEntityFromResource(value[type], value[name], startX == -1 ? 0 : atoi(value[startX]), startY == -1 ? 0 : atoi(value[startY])); if (e != NULL) { for (i=0;i<MAX_PROPS_FILES;i++) { if (strlen(key[i]) > 0) { setProperty(e, key[i], value[i]); } } if (resourceType == PLAYER_INVENTORY) { addToInventory(e); } } for (i=0;i<MAX_PROPS_FILES;i++) { key[i][0] = '\0'; value[i][0] = '\0'; } i = 0; } else { token = strtok_r(line, " ", &savePtr2); STRNCPY(key[i], token, MAX_VALUE_LENGTH); token = strtok_r(NULL, "\0", &savePtr2); if (token != NULL) { STRNCPY(value[i], token, MAX_VALUE_LENGTH); } else { key[i][0] = '\0'; } if (strcmpignorecase(key[i], "TYPE") == 0) { type = i; } else if (strcmpignorecase(key[i], "START_X") == 0) { startX = i; } else if (strcmpignorecase(key[i], "START_Y") == 0) { startY = i; } else if (strcmpignorecase(key[i], "NAME") == 0) { name = i; } i++; } line = strtok_r(NULL, "\n", &savePtr); } loadInventoryItems(); return line; }