X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=4e41573bc7411db3c1633abba84063b132447aee;hb=cccb83dbdafab8352529ab45e116befd9050c407;hp=95c953709603bee860dcdebb1166aad83af2120f;hpb=222f9f6633633ad0a39c2014d6914866b77cf391;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 95c95370..4e41573b 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; } } @@ -4110,12 +4110,12 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, if (strEqual(name, "")) strcpy(name, EMPTY_PLAYER_NAME); + setTypeNameValues_Name(name, pos); + // if player name not changed, no further action required if (strEqual(name, type_name_last)) return; - setTypeNameValues_Name(name, pos); - // redraw player name before (possibly) opening request dialogs drawTypeNameText(name, pos, FALSE); @@ -4135,6 +4135,9 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, LoadSetup(); } + char *setup_filename = getSetupFilename(); + boolean setup_exists = fileExists(setup_filename); + // change name of edited user in setup structure strcpy(setup.player_name, name); @@ -4148,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(); @@ -4174,12 +4177,46 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos, 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(); } }