X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=c37ca97933325565571fa739398b4c2321ff836a;hb=70ece48a5ce56ac96a710c67a8acae9bf1f65577;hp=e5741bc01bd5bf81836133131ad40b71eba995ce;hpb=6781b73dc16af00b561fb6311ebf1a3e6851053b;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index e5741bc0..c37ca979 100644 --- a/src/screens.c +++ b/src/screens.c @@ -4024,8 +4024,9 @@ static void drawTypeNameText(char *name, struct TextPosInfo *pos, boolean active) { char text[MAX_PLAYER_NAME_LEN + 2] = { 0 }; - int sx = mSX + ALIGNED_TEXT_XPOS(pos); - int sy = mSY + ALIGNED_TEXT_YPOS(pos); + boolean multiple_users = (game_status == GAME_MODE_PSEUDO_TYPENAMES); + int sx = (multiple_users ? amSX + pos->x : mSX + ALIGNED_TEXT_XPOS(pos)); + int sy = (multiple_users ? amSY + pos->y : mSY + ALIGNED_TEXT_YPOS(pos)); int font_nr = (active ? FONT_ACTIVE(pos->font) : pos->font); int font_width = getFontWidth(font_nr); @@ -4034,7 +4035,7 @@ static void drawTypeNameText(char *name, struct TextPosInfo *pos, sprintf(text, "%s%c", name, (active ? '_' : '\0')); pos->width = strlen(text) * font_width; - sx = mSX + ALIGNED_TEXT_XPOS(pos); + sx = (multiple_users ? amSX + pos->x : mSX + ALIGNED_TEXT_XPOS(pos)); DrawText(sx, sy, text, font_nr); } @@ -4053,16 +4054,15 @@ static void getTypeNameValues(char *name, struct TextPosInfo *pos, int *xpos) TreeInfo *node_first = getTreeInfoFirstGroupEntry(ti); int xpos = MENU_SCREEN_START_XPOS; int ypos = MENU_SCREEN_START_YPOS + ti->cl_cursor; - int font_width = getFontWidth(pos->font); type_name_node = getTreeInfoFromPos(node_first, entry_pos); type_name_nr = entry_pos; strcpy(name, type_name_node->name); - pos->x = xpos * font_width; - pos->y = ypos * font_width; - pos->width = MAX_PLAYER_NAME_LEN * font_width; + pos->x = xpos * 32; + pos->y = ypos * 32; + pos->width = MAX_PLAYER_NAME_LEN * 32; } else { @@ -4093,7 +4093,7 @@ static void setTypeNameValues_Name(char *name, struct TextPosInfo *pos) setString(&node->name_sorting, name); node->color = (strEqual(name, EMPTY_PLAYER_NAME) ? FC_BLUE : FC_RED); - pos->font = (node->color == FC_RED ? FONT_INPUT_1 : FONT_VALUE_OLD); + pos->font = FONT_TEXT_1 + node->color; } } @@ -4102,6 +4102,7 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, { boolean reset_setup = strEqual(name, ""); boolean remove_user = strEqual(name, EMPTY_PLAYER_NAME); + boolean create_user = strEqual(type_name_last, EMPTY_PLAYER_NAME); if (!changed) strcpy(name, type_name_last); @@ -4128,10 +4129,15 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, // temporarily change active user to edited user user.nr = type_name_nr; - // load setup of edited user - LoadSetup(); + // load setup of edited user (unless creating user with current setup) + if (!create_user || + !Request("Use current setup values for the new player?", REQ_ASK)) + LoadSetup(); } + char *setup_filename = getSetupFilename(); + boolean setup_exists = fileExists(setup_filename); + // change name of edited user in setup structure strcpy(setup.player_name, name); @@ -4145,7 +4151,7 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, if (Request("Reset setup values for this player?", REQ_ASK)) { // remove setup config file - unlink(getSetupFilename()); + unlink(setup_filename); // set player name to default player name LoadSetup(); @@ -4154,8 +4160,6 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, strcpy(name, setup.player_name); setTypeNameValues_Name(name, pos); - - Request("Setup values reset to default values!", REQ_CONFIRM); } } else if (remove_user && type_name_nr != 0) @@ -4167,20 +4171,52 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, getStringCat3WithSeparator(user_dir, "REMOVED", getCurrentTimestamp(), "."); - if (rename(user_dir, user_dir_removed) == 0) - Request("Player settings and tapes removed!", REQ_CONFIRM); - else + if (rename(user_dir, user_dir_removed) != 0) Request("Removing settings and tapes failed!", REQ_CONFIRM); checked_free(user_dir_removed); } } + else if (create_user && type_name_nr != 0 && !setup_exists) + { + if (Request("Create empty level set for the new player?", REQ_ASK)) + { + char *levelset_subdir = getNewUserLevelSubdir(); + + if (CreateUserLevelSet(levelset_subdir, name, name, 100, FALSE)) + { + AddUserLevelSetToLevelInfo(levelset_subdir); + + LevelDirTree *leveldir_current_last = leveldir_current; + + leveldir_current = getTreeInfoFromIdentifier(leveldir_first, + levelset_subdir); + + // set level number of newly created level set to default value + LoadLevelSetup_SeriesInfo(); + + // set newly created level set as current level set for new user + SaveLevelSetup_LastSeries(); + SaveLevelSetup_SeriesInfo(); + + leveldir_current = leveldir_current_last; + } + else + { + Request("Creating new level set failed!", REQ_CONFIRM); + } + } + } // restore currently active user user.nr = last_user_nr; // restore setup of currently active user LoadSetup(); + + // restore last level set of currently active user + LoadLevelSetup_LastSeries(); + LoadLevelSetup_SeriesInfo(); } }