X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=71c966a22ef80129f01bf5e365bcfb9ea20ff594;hb=e2b0f3655004bb2b7574f250cc1a0db64ffaba7c;hp=de9c7e37028ee6d75511011d18c1baf1d7326ab8;hpb=cf07764d802b7eafa64da36558e086515577a9f9;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index de9c7e37..71c966a2 100644 --- a/src/files.c +++ b/src/files.c @@ -3160,7 +3160,7 @@ static int LoadLevel_MicroChunk(File *file, struct LevelFileConfigInfo *conf, value = getMappedElement(value); if (data_type == TYPE_BOOLEAN) - *(boolean *)(conf[i].value) = value; + *(boolean *)(conf[i].value) = (value ? TRUE : FALSE); else *(int *) (conf[i].value) = value; @@ -8447,11 +8447,34 @@ void DumpTape(struct TapeInfo *tape) } PrintLine("-", 79); + Print("Tape of Level %03d (file version %08d, game version %08d)\n", tape->level_nr, tape->file_version, tape->game_version); Print(" (effective engine version %08d)\n", tape->engine_version); Print("Level series identifier: '%s'\n", tape->level_identifier); + + Print("Special tape properties: "); + if (tape->property_bits == TAPE_PROPERTY_NONE) + Print("[none]"); + if (tape->property_bits & TAPE_PROPERTY_EM_RANDOM_BUG) + Print("[em_random_bug]"); + if (tape->property_bits & TAPE_PROPERTY_GAME_SPEED) + Print("[game_speed]"); + if (tape->property_bits & TAPE_PROPERTY_PAUSE_MODE) + Print("[pause]"); + if (tape->property_bits & TAPE_PROPERTY_SINGLE_STEP) + Print("[single_step]"); + if (tape->property_bits & TAPE_PROPERTY_SNAPSHOT) + Print("[snapshot]"); + if (tape->property_bits & TAPE_PROPERTY_REPLAYED) + Print("[replayed]"); + if (tape->property_bits & TAPE_PROPERTY_TAS_KEYS) + Print("[tas_keys]"); + if (tape->property_bits & TAPE_PROPERTY_SMALL_GRAPHICS) + Print("[small_graphics]"); + + Print("\n"); PrintLine("-", 79); tape_frame_counter = 0; @@ -8537,6 +8560,7 @@ static void setScoreInfoToDefaultsExt(struct ScoreInfo *scores) scores->last_added_local = -1; scores->updated = FALSE; + scores->uploaded = FALSE; scores->force_last_added = FALSE; } @@ -9317,6 +9341,8 @@ static void UploadScoreToServerExt(struct HttpRequest *request, char *level_name = getEscapedJSON(level.name); char *level_author = getEscapedJSON(level.author); char *player_name = getEscapedJSON(score_entry->name); + char *player_uuid = getEscapedJSON(setup.player_uuid); + char *system_uuid = getEscapedJSON(setup.system_uuid); snprintf(request->body, MAX_HTTP_BODY_SIZE, "{\n" @@ -9332,6 +9358,8 @@ static void UploadScoreToServerExt(struct HttpRequest *request, " \"level_author\": \"%s\",\n" " \"rate_time_over_score\": \"%d\",\n" " \"player_name\": \"%s\",\n" + " \"player_uuid\": \"%s\",\n" + " \"system_uuid\": \"%s\",\n" " \"score\": \"%d\",\n" " \"time\": \"%d\",\n" " \"tape_basename\": \"%s\",\n" @@ -9349,6 +9377,8 @@ static void UploadScoreToServerExt(struct HttpRequest *request, level_author, level.rate_time_over_score, player_name, + player_uuid, + system_uuid, score_entry->score, score_entry->time, score_entry->tape_basename, @@ -9362,6 +9392,8 @@ static void UploadScoreToServerExt(struct HttpRequest *request, checked_free(level_name); checked_free(level_author); checked_free(player_name); + checked_free(player_uuid); + checked_free(system_uuid); ConvertHttpRequestBodyToServerEncoding(request); @@ -9380,6 +9412,8 @@ static void UploadScoreToServerExt(struct HttpRequest *request, return; } + + server_scores.uploaded = TRUE; } static void UploadScoreToServer(int level_nr, char *score_tape_filename, @@ -9416,12 +9450,14 @@ static int UploadScoreToServerThread(void *data_raw) return 0; } -static void UploadScoreToServerAsThread(int nr) +static void UploadScoreToServerAsThread(int nr, char *score_tape_filename) { struct UploadScoreToServerThreadData *data = checked_malloc(sizeof(struct UploadScoreToServerThreadData)); struct ScoreEntry *score_entry = &scores.entry[scores.last_added]; - char *score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); + + if (score_tape_filename == NULL) + score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); data->level_nr = nr; data->score_entry = *score_entry; @@ -9437,7 +9473,15 @@ void SaveServerScore(int nr) if (!runtime.api_server) return; - UploadScoreToServerAsThread(nr); + UploadScoreToServerAsThread(nr, NULL); +} + +void SaveServerScoreFromFile(int nr, char *score_tape_filename) +{ + if (!runtime.api_server) + return; + + UploadScoreToServerAsThread(nr, score_tape_filename); } void LoadLocalAndServerScore(int nr, boolean download_score) @@ -9473,6 +9517,14 @@ static struct TokenInfo global_setup_tokens[] = TYPE_STRING, &setup.player_name, "player_name" }, + { + TYPE_STRING, + &setup.player_uuid, "player_uuid" + }, + { + TYPE_STRING, + &setup.system_uuid, "system_uuid" + }, { TYPE_SWITCH, &setup.multiple_users, "multiple_users" @@ -9643,7 +9695,11 @@ static struct TokenInfo global_setup_tokens[] = }, { TYPE_SWITCH, - &setup.show_snapshot_buttons, "show_snapshot_buttons" + &setup.show_load_save_buttons, "show_load_save_buttons" + }, + { + TYPE_SWITCH, + &setup.show_undo_redo_buttons, "show_undo_redo_buttons" }, { TYPE_SWITCH, @@ -10281,6 +10337,9 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->player_name = getStringCopy(getDefaultUserName(user.nr)); + si->player_uuid = NULL; // (will be set later) + si->system_uuid = NULL; // (will be set later) + si->multiple_users = TRUE; si->sound = TRUE; @@ -10324,7 +10383,8 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->game_frame_delay = GAME_FRAME_DELAY; si->sp_show_border_elements = FALSE; si->small_game_graphics = FALSE; - si->show_snapshot_buttons = FALSE; + si->show_load_save_buttons = FALSE; + si->show_undo_redo_buttons = FALSE; si->only_show_local_scores = FALSE; si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR); @@ -10825,6 +10885,20 @@ static void LoadSetup_SpecialPostProcessing(void) // make sure that scroll delay value stays inside valid range setup.scroll_delay_value = MIN(MAX(MIN_SCROLL_DELAY, setup.scroll_delay_value), MAX_SCROLL_DELAY); + + if (setup.player_uuid == NULL || + setup.system_uuid == NULL) + { + if (setup.player_uuid == NULL) + setup.player_uuid = getStringCopy(GetPlayerUUID()); + + if (setup.system_uuid == NULL) + setup.system_uuid = getStringCopy(GetSystemUUID()); + + SaveSetup(); + } + + SetSystemUUID(setup.system_uuid); } void LoadSetup(void) @@ -10957,7 +11031,8 @@ void SaveSetup(void) for (i = 0; i < ARRAY_SIZE(global_setup_tokens); i++) { // just to make things nicer :) - if (global_setup_tokens[i].value == &setup.multiple_users || + if (global_setup_tokens[i].value == &setup.player_uuid || + global_setup_tokens[i].value == &setup.multiple_users || global_setup_tokens[i].value == &setup.sound || global_setup_tokens[i].value == &setup.graphics_set || global_setup_tokens[i].value == &setup.volume_simple || @@ -13147,6 +13222,11 @@ void ConvertLevels(void) Print("converting level ... "); +#if 0 + // special case: conversion of some EMC levels as requested by ACME + level.game_engine_type = GAME_ENGINE_TYPE_RND; +#endif + level_filename = getDefaultLevelFilename(level_nr); new_level = !fileExists(level_filename);