From 6a0f3d7a252de4b1741cfe5e1c561412c602becc Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Tue, 9 Jun 2026 20:32:44 -0400 Subject: feat: better login screen --- internal/game/game.go | 53 +++++++++++++++++++++++++---------------------- internal/net/server.go | 23 ++++++++++++++++++-- internal/player/player.go | 4 +++- 3 files changed, 52 insertions(+), 28 deletions(-) (limited to 'internal') diff --git a/internal/game/game.go b/internal/game/game.go index 0e1b82d..528c895 100644 --- a/internal/game/game.go +++ b/internal/game/game.go @@ -98,7 +98,7 @@ func (g *Game) handleAccountName(sess *net.Session, input string) { } else { sess.Account = &net.AccountEntry{Name: name} sess.State = net.StateNewAccountPass - sess.Write("Account not found. Enter a password to create it (or press enter to cancel): ") + sess.Write("A new visitor to this rock!\nChoose password: ") } } @@ -379,7 +379,7 @@ func (g *Game) handlePurgeAccount(sess *net.Session, input string) { // Delete account file os.Remove(g.AccountStore.AccountPath(sess.Account.Name)) - sess.WriteLine(fmt.Sprintf("Account %s has been purged.", sess.Account.Name)) + sess.WriteLine(fmt.Sprintf("Account %s has been purged. Thanks for playing.", sess.Account.Name)) sess.Conn.Close() } @@ -387,22 +387,25 @@ func (g *Game) showMenu(sess *net.Session) { sess.State = net.StateMenu lines := []string{ "", - fmt.Sprintf("Welcome, %s!", sess.Account.Name), + fmt.Sprintf("SUCCESSFUL LOGIN as %s.", sess.Account.Name), "", - "(C)onnect to character", } if len(sess.Account.Characters) > 0 { - lines = append(lines, "(L)ist characters") + lines = append(lines, + " (C)onnect character to TC", + "", + " (L)ist characters", + " (R)ename character", + " (D)elete character", + ) } lines = append(lines, - "(N)ew character", - "(R)ename character", - "(D)elete character", - "(P)urge account", - "(A)ccount rename", - "(Q)uit", + " (N)ew character", + " (P)urge account", + " (A)ccount rename", + " (Q)uit", "", - "Choice: ", + "INPUT: ", ) sess.WriteLines(lines...) } @@ -410,11 +413,11 @@ func (g *Game) showMenu(sess *net.Session) { func (g *Game) handleMenu(sess *net.Session, input string) { switch strings.ToLower(strings.TrimSpace(input)) { case "": - sess.Write("Choice: ") + sess.Write("INPUT: ") case "c": if len(sess.Account.Characters) == 0 { - sess.WriteLine("\nNo characters on this account.") - sess.Write("\nChoice: ") + sess.WriteLine("\nSYSTEM ERROR: Make a character with 'N' first!") + sess.Write("\nINPUT: ") return } if len(sess.Account.Characters) == 1 { @@ -431,19 +434,19 @@ func (g *Game) handleMenu(sess *net.Session, input string) { case "l": if len(sess.Account.Characters) == 0 { - sess.WriteLine("\nNo characters on this account.") + sess.WriteLine("\nSYSTEM ERROR: Zero characters on this account.\n(Make a character with 'N' first)") } else { - sess.WriteLine("\nCharacters:") + sess.WriteLine("\nSELECT Humans FROM GaiaZeroFour:") for _, name := range sess.Account.Characters { sess.WriteLine(fmt.Sprintf(" - %s", name)) } } - sess.Write("\nChoice: ") + sess.Write("\nINPUT: ") case "n": sess.State = net.StateNewCharName sess.PendingChar = "" - sess.Write("Character name: ") + sess.Write("What's your character name?: ") case "a": sess.State = net.StateRenameAccount @@ -467,12 +470,12 @@ func (g *Game) handleMenu(sess *net.Session, input string) { for i, name := range sess.Account.Characters { sess.WriteLine(fmt.Sprintf(" %d) %s", i+1, name)) } - sess.Write("\nChoice: ") + sess.Write("\n> : ") case "d": if len(sess.Account.Characters) == 0 { sess.WriteLine("\nNo characters to delete.") - sess.Write("\nChoice: ") + sess.Write("\nINPUT: ") return } if len(sess.Account.Characters) == 1 { @@ -483,23 +486,23 @@ func (g *Game) handleMenu(sess *net.Session, input string) { for i, name := range sess.Account.Characters { sess.WriteLine(fmt.Sprintf(" %d) %s", i+1, name)) } - sess.Write("\nChoice: ") + sess.Write("\n>: ") return } g.showDeleteConfirm(sess) case "p": sess.State = net.StatePurgeAccount - sess.WriteLine(fmt.Sprintf("\nPurge account %s and all characters? Type PURGE %s to confirm, or anything else to cancel.", sess.Account.Name, sess.Account.Name)) + sess.WriteLine(fmt.Sprintf("\nPurge account %s and all characters?\nTo be clear you are about to PERMANENTLY DELETE EVERYTHING!\nType PURGE %s to confirm, or anything else to cancel.", sess.Account.Name, sess.Account.Name)) sess.Write("\n> ") case "q": - sess.WriteLine("Goodbye.") + sess.WriteLine("Later.") sess.Conn.Close() return default: - sess.Write("Invalid choice. Choice: ") + sess.Write("SYNTAX ERROR\nINPUT: ") } } diff --git a/internal/net/server.go b/internal/net/server.go index fa0b509..e5761a2 100644 --- a/internal/net/server.go +++ b/internal/net/server.go @@ -160,8 +160,27 @@ func (s *Server) handleSession(session *Session, handler func(*Session, string)) }() _, _ = session.Conn.Write([]byte("\033[2J\033[H")) // clear screen - session.Write("Welcome to Third Collapse!\r\n") - session.Write("Account name: ") + + welcomeart := ` + , 3333333 333 333 333 3333333 3333333 + | 33! 33! 333 33! 33! 333 33! 333 ':. + + -+- * 3!! 3!3!3!3! !!3 3!3!!3! 3!3 !3! '::._ * + | !!: !!: !!! !!: !!: :!! !!: !!! '._) + : : : : : : : : :: : : , + . * , + , welcome to third collapse . * + + 3333333 333333 333 , 333 333333 3333333 333333 33333333 + !33 33! 333 33! 33! 33! 333 33! 333 !33 33! + !3! 3!3 !3! 3!! 3!! + 3!3!3!3! 3!33!3! !33!! 3!!!:! + :!! !!: !!! !!: !!: !!: !!! !!: !:! !!: + :: :: : : :. : : ::.: : : ::.: : : : : : ::.: : : :: ::: + + +` + + session.Write(welcomeart) + session.Write("ACCOUNT NAME> ") for { line, err := session.Reader.ReadString('\n') diff --git a/internal/player/player.go b/internal/player/player.go index 581fc04..ad56923 100644 --- a/internal/player/player.go +++ b/internal/player/player.go @@ -25,12 +25,13 @@ const ( Construction SkillName = "construction" Scavenging SkillName = "scavenging" Hunter SkillName = "hunter" + Slayer SkillName = "slayer" ) var AllSkills = []SkillName{ Attack, Strength, Defense, Hitpoints, Ranged, Science, Technology, Fishing, Cooking, Woodcutting, Mining, Smithing, Crafting, Fletching, - Alchemy, Thieving, Agility, Construction, Scavenging, Hunter, + Alchemy, Thieving, Agility, Construction, Scavenging, Hunter, Slayer, } var SkillAbbr = map[SkillName]string{ @@ -54,6 +55,7 @@ var SkillAbbr = map[SkillName]string{ Construction: "con", Scavenging: "scv", Hunter: "hnt", + Slayer: "sly", } type AttackStyle string -- cgit v1.2.3