aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_look.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-19 18:20:26 -0400
committerhistoria <[not public]>2026-06-19 18:20:26 -0400
commit0ea4eec5dd2122c6704216971eb1249276297867 (patch)
tree430fbbef04e837820f1d031c190f52ecd6112e25 /internal/game/cmd_look.go
parent3a58125d14bb307f861b38c6c5b0a63babde7e08 (diff)
downloadthehouseoficarus-0ea4eec5dd2122c6704216971eb1249276297867.tar.gz
shop fixes, 'toggle' completely removed, movement speed increased
Diffstat (limited to 'internal/game/cmd_look.go')
-rw-r--r--internal/game/cmd_look.go43
1 files changed, 34 insertions, 9 deletions
diff --git a/internal/game/cmd_look.go b/internal/game/cmd_look.go
index 6c83130..5fa2cf4 100644
--- a/internal/game/cmd_look.go
+++ b/internal/game/cmd_look.go
@@ -15,18 +15,30 @@ import (
)
func (g *Game) doLook(sess *net.Session) {
- p := sess.Player.(*player.Player)
+ p := sess.Player
room, err := g.World.LoadRoom(p.RoomID)
if err != nil {
sess.WriteLine("You are in a void.")
return
}
+ g.showRoomName(sess, p, room)
+ g.showRoomDescription(sess, p, room)
+ g.showRoomMobs(sess, p, room)
+ g.showRoomObjects(sess, p, room)
+ g.showGroundItems(sess, p, room)
+ g.showRoomExits(sess, p, room)
+ g.showRoomPlayers(sess, p, room)
+}
+
+func (g *Game) showRoomName(sess *net.Session, p *player.Player, room *world.Room) {
sess.WriteLines(
"",
fmt.Sprintf("%s (%s)", g.colorize(sess, "room_name", room.Name), g.colorize(sess, "room_number", fmt.Sprintf("#%d", room.ID))),
)
+}
+func (g *Game) showRoomDescription(sess *net.Session, p *player.Player, room *world.Room) {
descWidth := p.OptionInt("room_desc_width")
if descWidth <= 0 {
descWidth = 70
@@ -51,8 +63,10 @@ func (g *Game) doLook(sess *net.Session) {
sess.WriteLine(line)
}
}
+}
- mobs := g.MobStore.MobsInRoom(p.RoomID)
+func (g *Game) showRoomMobs(sess *net.Session, p *player.Player, room *world.Room) {
+ mobs := g.MobStore.MobsInRoom(p.RoomID)
if len(mobs) > 0 {
sort.Slice(mobs, func(i, j int) bool {
iDamaged := mobs[i].HP < mobs[i].MaxHP
@@ -93,7 +107,9 @@ func (g *Game) doLook(sess *net.Session) {
sess.WriteLine(fmt.Sprintf(" %s %s%s%s", g.colorize(sess, npcColor, displayName), levelStr, hp, desc))
}
}
+}
+func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world.Room) {
objs := g.World.AllObjInstances(p.RoomID)
if len(objs) > 0 {
sess.WriteLine("")
@@ -155,6 +171,9 @@ func (g *Game) doLook(sess *net.Session) {
}
roomDesc := def.InRoomDescription
+ if roomDesc != "" {
+ roomDesc = color.ExpandTags(g.colorMode(sess), roomDesc)
+ }
coloredName := g.objColorize(sess, def, def.Name)
coloredPlural := g.objColorize(sess, def, def.Name+"s")
@@ -217,7 +236,9 @@ func (g *Game) doLook(sess *net.Session) {
}
g.showFarmPatches(sess, p)
+}
+func (g *Game) showGroundItems(sess *net.Session, p *player.Player, room *world.Room) {
ground := g.World.GroundItemsDetailed(p.RoomID)
if len(ground) > 0 {
showDespawn := p.OptionBool("despawn")
@@ -334,13 +355,15 @@ func (g *Game) doLook(sess *net.Session) {
}
}
}
+}
+func (g *Game) showRoomExits(sess *net.Session, p *player.Player, room *world.Room) {
if len(room.Exits) > 0 {
sess.WriteLine("")
- if p.OptionBool("exits") {
+ if p.OptionBool("exits") {
sess.WriteLine("Exits:")
type exitLine struct {
- dir string
+ dir string
targetName string
}
var lines []exitLine
@@ -383,11 +406,13 @@ func (g *Game) doLook(sess *net.Session) {
sess.WriteLine("")
}
}
+}
+func (g *Game) showRoomPlayers(sess *net.Session, p *player.Player, room *world.Room) {
others := g.Hub.PlayersInRoom(p.RoomID)
for _, other := range others {
if other != sess && other.Player != nil {
- op := other.Player.(*player.Player)
+ op := other.Player
line := fmt.Sprintf("\n%s is here", g.colorize(sess, "player_name", op.Name))
if cs := combat.GetCombat(op.Name); cs != nil {
if mob := g.MobStore.GetInstance(cs.MobID); mob != nil && mob.HP > 0 {
@@ -408,7 +433,7 @@ func (g *Game) doLook(sess *net.Session) {
}
func (g *Game) doLookTarget(sess *net.Session, input string) {
- p := sess.Player.(*player.Player)
+ p := sess.Player
lower := strings.ToLower(input)
if exitDir := g.World.ResolveExit(lower); exitDir != "" {
@@ -572,7 +597,7 @@ func (g *Game) doLookTarget(sess *net.Session, input string) {
if other == sess || other.Player == nil {
continue
}
- op := other.Player.(*player.Player)
+ op := other.Player
if strings.ToLower(op.Name) != lower {
continue
}
@@ -584,7 +609,7 @@ func (g *Game) doLookTarget(sess *net.Session, input string) {
}
func showPlayerInfo(g *Game, sess *net.Session, p *player.Player) {
- myP := sess.Player.(*player.Player)
+ myP := sess.Player
theirLevel := p.CombatLevel()
levelStr := g.levelColorize(sess, myP.CombatLevel(), theirLevel, fmt.Sprint(theirLevel))
sess.WriteLines(
@@ -623,7 +648,7 @@ func showPlayerInfo(g *Game, sess *net.Session, p *player.Player) {
}
func (g *Game) doExits(sess *net.Session) {
- p := sess.Player.(*player.Player)
+ p := sess.Player
room, err := g.World.LoadRoom(p.RoomID)
if err != nil || len(room.Exits) == 0 {
sess.WriteLine("There are no exits here.")