aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/game/action_farm.go2
-rw-r--r--internal/game/cmd_hide.go6
-rw-r--r--internal/game/cmd_look.go32
-rw-r--r--internal/game/sys_safespot.go8
4 files changed, 17 insertions, 31 deletions
diff --git a/internal/game/action_farm.go b/internal/game/action_farm.go
index 6361901..87ea6b7 100644
--- a/internal/game/action_farm.go
+++ b/internal/game/action_farm.go
@@ -614,7 +614,7 @@ func (g *Game) showFarmPatches(sess *net.Session, p *player.Player) {
sess.WriteLine("")
for _, d := range displays {
- sess.WriteLine(fmt.Sprintf(" A %s: %s.", d.name, d.line))
+ sess.WriteLine(fmt.Sprintf("A %s: %s.", d.name, d.line))
}
}
diff --git a/internal/game/cmd_hide.go b/internal/game/cmd_hide.go
index 9445949..2dca478 100644
--- a/internal/game/cmd_hide.go
+++ b/internal/game/cmd_hide.go
@@ -87,10 +87,10 @@ func (g *Game) executeHide(sess *net.Session, args []string, rawInput string) {
if st.SafespotLevel <= 0 {
if cfg.RespawnTicks > 0 {
sess.WriteLine(fmt.Sprintf("The %s has been destroyed and hasn't reformed yet.", objDef.Name))
- } else {
- sess.WriteLine(fmt.Sprintf("The %s has been completely destroyed.", objDef.Name))
+ return
}
- return
+ st.SafespotLevel = len(cfg.Levels)
+ st.SafespotTicksAtLevel = 0
}
inCombat := combat.GetCombat(p.Name) != nil
diff --git a/internal/game/cmd_look.go b/internal/game/cmd_look.go
index 4cc556a..903b32d 100644
--- a/internal/game/cmd_look.go
+++ b/internal/game/cmd_look.go
@@ -24,8 +24,8 @@ func (g *Game) doLook(sess *net.Session) {
g.showRoomName(sess, p, room)
g.showRoomDescription(sess, p, room)
- g.showRoomMobs(sess, p, room)
g.showRoomObjects(sess, p, room)
+ g.showRoomMobs(sess, p, room)
g.showGroundItems(sess, p, room)
g.showRoomExits(sess, p, room)
g.showRoomPlayers(sess, p, room)
@@ -104,7 +104,7 @@ func (g *Game) showRoomMobs(sess *net.Session, p *player.Player, room *world.Roo
}
mobLevel := mobCombatLevel(m)
levelStr := g.levelColorize(sess, playerLevel, mobLevel, fmt.Sprintf("(level %d)", mobLevel))
- sess.WriteLine(fmt.Sprintf(" %s %s%s%s", g.colorize(sess, mobColor, displayName), levelStr, hp, desc))
+ sess.WriteLine(fmt.Sprintf("%s %s%s%s", g.colorize(sess, mobColor, displayName), levelStr, hp, desc))
}
}
}
@@ -128,7 +128,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.
continue
}
- if def.Hidden && (def.Safespot == nil || g.safespotTier(p) < def.Safespot.Tier) {
+ if def.Hidden {
continue
}
@@ -136,24 +136,6 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.
continue
}
- if def.Hidden && def.Safespot != nil {
- st := g.World.GetObjState(p.RoomID, objID, 0)
- levelInfo := ""
- if st != nil {
- if st.SafespotLevel <= 0 && def.Safespot.RespawnTicks > 0 {
- continue
- }
- if st.SafespotLevel <= 0 {
- levelInfo = " (destroyed)"
- } else if st.SafespotLevel < len(def.Safespot.Levels) {
- levelInfo = " (degraded)"
- }
- }
- sess.WriteLine(fmt.Sprintf(" %s that could provide cover.%s",
- g.objColorize(sess, def, def.Name), levelInfo))
- continue
- }
-
type instInfo struct {
idx int
depleted bool
@@ -216,7 +198,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.
if showTimers && len(instances) > 0 && instances[0].quality > 0 {
qualityTimer = fmt.Sprintf(" (Burning for %d more ticks)", instances[0].quality)
}
- sess.WriteLine(fmt.Sprintf(" %s%s%s", line, suffix, qualityTimer))
+ sess.WriteLine(fmt.Sprintf("%s%s%s", line, suffix, qualityTimer))
}
for _, ins := range timed {
@@ -234,7 +216,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.
if showTimers {
timer = fmt.Sprintf(" (despawn: %d/%d)", ins.sharedCur, ins.sharedMax)
}
- sess.WriteLine(fmt.Sprintf(" %s%s%s", line, tag, timer))
+ sess.WriteLine(fmt.Sprintf("%s%s%s", line, tag, timer))
}
for _, ins := range depleted {
@@ -252,7 +234,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.
if showTimers {
timer = fmt.Sprintf(" (respawns in %d ticks)", ins.respawnIn)
}
- sess.WriteLine(fmt.Sprintf(" %s (depleted)%s%s", line, tag, timer))
+ sess.WriteLine(fmt.Sprintf("%s (depleted)%s%s", line, tag, timer))
}
}
}
@@ -549,7 +531,7 @@ func (g *Game) doLookTarget(sess *net.Session, input string) {
if realSt != nil {
levelStr := "intact"
if realSt.SafespotLevel <= 0 {
- levelStr = "destroyed"
+ levelStr = fmt.Sprintf("intact (level %d/%d)", len(def.Safespot.Levels), len(def.Safespot.Levels))
} else if realSt.SafespotLevel < len(def.Safespot.Levels) {
levelStr = fmt.Sprintf("degraded (level %d/%d)", realSt.SafespotLevel, len(def.Safespot.Levels))
} else {
diff --git a/internal/game/sys_safespot.go b/internal/game/sys_safespot.go
index ffb7948..b0e94c2 100644
--- a/internal/game/sys_safespot.go
+++ b/internal/game/sys_safespot.go
@@ -99,7 +99,7 @@ func (g *Game) activateSafespot(sess *net.Session, p *player.Player, ss *Safespo
return
}
- if cfg.RespawnOnHide {
+ if cfg.RespawnOnHide && len(st.SafespotOccupants) == 0 {
st.SafespotLevel = len(cfg.Levels)
st.SafespotTicksAtLevel = 0
} else if st.SafespotLevel <= 0 {
@@ -211,7 +211,11 @@ func (g *Game) degradeSafespot(st *world.ObjState, objDef *object.ObjectDef, cfg
}
}
st.SafespotOccupants = nil
- g.scheduleSafespotRespawn(st, objDef, cfg)
+ if cfg.RespawnTicks > 0 {
+ g.scheduleSafespotRespawn(st, objDef, cfg)
+ } else {
+ g.World.RemoveObjInstance(st.RoomID, objDef.ID)
+ }
return
}