void preCacheSounds(char *filename) { char *line, *savePtr; unsigned char *buffer; savePtr = NULL; if (game.audio == FALSE) { return; } buffer = loadFileFromPak(filename); line = strtok_r((char *)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'; } preCacheSound(line); line = strtok_r(NULL, "\n", &savePtr); } free(buffer); }
void initCursor(char *name) { char line[MAX_LINE_LENGTH], *token, *savePtr; unsigned char *buffer; savePtr = NULL; cursor.tileID = 0; cursor.entityType = 0; cursor.entity.weight = 0; cursor.entity.originalWeight = 0; cursor.entity.inUse = TRUE; loadProperties(entityNames[0], &cursor.entity); cursor.entity.active = TRUE; cursor.entity.alpha = 255; if (cursor.entity.weight == 0) { cursor.entity.weight = 1; cursor.entity.originalWeight = 1; } cursor.entity.draw = &drawLoopingAnimationToMap; snprintf(line, sizeof(line), "data/cursor/%s.dat", name); buffer = loadFileFromPak(line); token = strtok_r((char *)buffer, "\n", &savePtr); while (token != NULL) { STRNCPY(entityNames[entityNamesLength], token, MAX_VALUE_LENGTH); if (entityNames[entityNamesLength][strlen(entityNames[entityNamesLength]) - 1] == '\n') { entityNames[entityNamesLength][strlen(entityNames[entityNamesLength]) - 1] = '\0'; } if (entityNames[entityNamesLength][strlen(entityNames[entityNamesLength]) - 1] == '\r') { entityNames[entityNamesLength][strlen(entityNames[entityNamesLength]) - 1] = '\0'; } entityNamesLength++; token = strtok_r(NULL, "\n", &savePtr); } free(buffer); }
void loadSpritesFromFile(char *name, int *index) { char *line, *savePtr; unsigned char *buffer; int i; savePtr = NULL; buffer = loadFileFromPak(name); i = 0; line = strtok_r((char *)buffer, "\n", &savePtr); while (line != NULL) { if (line[0] == '#' || line[0] == '\n') { line = strtok_r(NULL, "\n", &savePtr); continue; } if (spriteID == MAX_SPRITES) { showErrorAndExit("Ran out of space for Sprites"); } if (line[strlen(line) - 1] == '\n') { line[strlen(line) - 1] = '\0'; } if (line[strlen(line) - 1] == '\r') { line[strlen(line) - 1] = '\0'; } index[i] = loadSprite(line); i++; line = strtok_r(NULL, "\n", &savePtr); } free(buffer); }
int patchEntities(double versionFile, char *mapName) { char patchFile[MAX_PATH_LENGTH], *line, *savePtr, itemName[MAX_VALUE_LENGTH]; char key[MAX_VALUE_LENGTH], value[MAX_VALUE_LENGTH]; int skipping = FALSE, x, y, read, found, saveMap; unsigned char *buffer; Entity *e; EntityList *el, *entities; Target *t; savePtr = NULL; snprintf(patchFile, sizeof(patchFile), "data/patch/%0.2f.dat", versionFile); saveMap = TRUE; if (existsInPak(patchFile) == TRUE) { buffer = loadFileFromPak(patchFile); line = strtok_r((char *)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'; } sscanf(line, "%s", itemName); if (strcmpignorecase(itemName, "MAP_NAME") == 0) { sscanf(line, "%*s %s\n", itemName); skipping = strcmpignorecase(itemName, mapName) == 0 ? FALSE : TRUE; } else if (strcmpignorecase(itemName, "MODIFY_OBJECTIVE") == 0 && skipping == FALSE) { sscanf(line, "%*s \"%[^\"]\" \"%[^\"]\"", key, value); modifyObjective(key, value); } else if (strcmpignorecase(itemName, "REMOVE_OBJECTIVE") == 0 && skipping == FALSE) { sscanf(line, "%*s \"%[^\"]\"", key); removeObjective(key); } else if (strcmpignorecase(itemName, "REMOVE_TRIGGER") == 0 && skipping == FALSE) { sscanf(line, "%*s \"%[^\"]\"", key); removeGlobalTrigger(key); removeTrigger(key); } else if (strcmpignorecase(line, "ADD_ENTITY") == 0 && skipping == FALSE) { loadResources(savePtr); } else if (strcmpignorecase(itemName, "REMOVE_ENTITY") == 0 && skipping == FALSE) { read = sscanf(line, "%*s %s %d %d", itemName, &x, &y); found = FALSE; e = getEntityByObjectiveName(itemName); if (e != NULL) { e->inUse = FALSE; found = TRUE; } if (found == FALSE) { t = getTargetByName(itemName); if (t != NULL) { t->active = FALSE; found = TRUE; } } if (found == FALSE && read == 3) { e = getEntityByStartXY(x, y); if (e != NULL) { e->inUse = FALSE; found = TRUE; } } } else if (strcmpignorecase(itemName, "UPDATE_ENTITY") == 0 && skipping == FALSE) { read = sscanf(line, "%*s %s %s %s", itemName, key, value); if (strcmpignorecase(itemName, "PLAYER") == 0) { e = &player; } else { e = getEntityByObjectiveName(itemName); } if (e != NULL) { if (strcmpignorecase(value, "NULL") == 0) { STRNCPY(value, "", sizeof(value)); } setProperty(e, key, value); } } else if (strcmpignorecase(itemName, "UPDATE_ENTITY_BY_START") == 0 && skipping == FALSE) { read = sscanf(line, "%*s %d %d %s %[^\n]s", &x, &y, key, value); e = getEntityByStartXY(x, y); if (e != NULL) { setProperty(e, key, value); } } else if (strcmpignorecase(itemName, "UPDATE_ENTITY_BY_XY") == 0 && skipping == FALSE) { read = sscanf(line, "%*s %d %d %s %[^\n]s", &x, &y, key, value); e = getEntityByXY(x, y); if (e != NULL) { setProperty(e, key, value); } } else if (strcmpignorecase(itemName, "TRANSLATE_ENTITIES") == 0 && skipping == FALSE) { read = sscanf(line, "%*s %d %d", &x, &y); entities = getEntities(); player.x -= x; player.y -= y; for (el=entities->next;el!=NULL;el=el->next) { e = el->entity; e->x -= x; e->y -= y; if (e->startX - x > 0) { e->startX -= x; } if (e->startY - y > 0) { e->startY -= y; } if (e->endX - x > 0) { e->endX -= x; } if (e->endY - y > 0) { e->endY -= y; } } t = getTargets(); for (x=0;x<MAX_TARGETS;x++) { if (t[x].active == TRUE) { if (t[x].x - x > 0) { t[x].x -= x; } if (t[x].y - y > 0) { t[x].y -= y; } } } } else if (strcmpignorecase(itemName, "RENAME_MAP") == 0 && skipping == FALSE) { saveMap = FALSE; } line = strtok_r(NULL, "\n", &savePtr); } free(buffer); } return saveMap; }