feat: integrate daily challenges, codex recording, and unlock triggers
- Add DailyMode/DailyDate fields to GameSession; use daily seed for floor generation - Add [D] Daily Challenge button in lobby for solo daily sessions - Record codex entries for monsters and shop items during gameplay - Trigger unlock checks (fifth_class, hard_mode, mutations) on game over - Trigger title checks (novice, explorer, veteran, champion, gold_king) on game over - Save daily records on game over for daily mode sessions - Add daily leaderboard tab with Tab key cycling in leaderboard view Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,6 +84,8 @@ type GameSession struct {
|
||||
lastActivity map[string]time.Time // fingerprint -> last activity time
|
||||
HardMode bool
|
||||
ActiveMutation *Mutation
|
||||
DailyMode bool
|
||||
DailyDate string
|
||||
}
|
||||
|
||||
type playerActionMsg struct {
|
||||
@@ -210,7 +212,12 @@ func (s *GameSession) AddPlayer(p *entity.Player) {
|
||||
func (s *GameSession) StartFloor() {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(time.Now().UnixNano())))
|
||||
if s.DailyMode {
|
||||
seed := DailySeed(s.DailyDate) + int64(s.state.FloorNum)
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(seed)))
|
||||
} else {
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(time.Now().UnixNano())))
|
||||
}
|
||||
s.state.Phase = PhaseExploring
|
||||
s.state.TurnNum = 0
|
||||
|
||||
|
||||
@@ -373,7 +373,12 @@ func (s *GameSession) advanceFloor() {
|
||||
p.Skills.Points++
|
||||
}
|
||||
s.state.FloorNum++
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(time.Now().UnixNano())))
|
||||
if s.DailyMode {
|
||||
seed := DailySeed(s.DailyDate) + int64(s.state.FloorNum)
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(seed)))
|
||||
} else {
|
||||
s.state.Floor = dungeon.GenerateFloor(s.state.FloorNum, rand.New(rand.NewSource(time.Now().UnixNano())))
|
||||
}
|
||||
s.state.Phase = PhaseExploring
|
||||
s.state.CombatTurn = 0
|
||||
s.addLog(fmt.Sprintf("Descending to B%d...", s.state.FloorNum))
|
||||
|
||||
Reference in New Issue
Block a user