Rename item-subsystem methods (refactor step 5, items)

getItem→promptPackItem now returns (obj, ok) instead of a nil-signaling
pointer; invName→inventoryName; doPot→applyPotionFuse. C breadcrumbs
kept. Behavior unchanged; suite green.
This commit is contained in:
2026-07-07 02:31:38 +02:00
parent 0554f5d4f1
commit 6d798c56ed
14 changed files with 57 additions and 56 deletions

View File

@@ -6,8 +6,8 @@ package game
func (g *RogueGame) wear() { func (g *RogueGame) wear() {
p := &g.Player p := &g.Player
obj := g.getItem("wear", KindArmor) obj, ok := g.promptPackItem("wear", KindArmor)
if obj == nil { if !ok {
return return
} }
@@ -32,7 +32,7 @@ func (g *RogueGame) wear() {
g.wasteTime() g.wasteTime()
obj.Flags.Set(Known) obj.Flags.Set(Known)
sp := g.invName(obj, true) sp := g.inventoryName(obj, true)
p.CurArmor = obj p.CurArmor = obj
if !g.Options.Terse { if !g.Options.Terse {
@@ -70,7 +70,7 @@ func (g *RogueGame) takeOff() {
g.addmsgf("you used to be") g.addmsgf("you used to be")
} }
g.msg(" wearing %c) %s", obj.PackCh, g.invName(obj, true)) g.msg(" wearing %c) %s", obj.PackCh, g.inventoryName(obj, true))
} }
// wasteTime does nothing but let other things happen (armor.c waste_time). // wasteTime does nothing but let other things happen (armor.c waste_time).

View File

@@ -453,7 +453,7 @@ func (g *RogueGame) wizardCommand(ch byte) {
case CTRL('X'): case CTRL('X'):
g.turnSee(p.On(SenseMonsters)) g.turnSee(p.On(SenseMonsters))
case CTRL('~'): case CTRL('~'):
if item := g.getItem("charge", KindWand); item != nil { if item, ok := g.promptPackItem("charge", KindWand); ok {
item.Charges = 10000 item.Charges = 10000
} }
case CTRL('I'): case CTRL('I'):
@@ -738,9 +738,9 @@ func (g *RogueGame) levitCheck() bool {
// call allows a user to call a potion, scroll, or ring something // call allows a user to call a potion, scroll, or ring something
// (command.c call). // (command.c call).
func (g *RogueGame) call() { func (g *RogueGame) call() {
obj := g.getItem("call", KindCallable) obj, ok := g.promptPackItem("call", KindCallable)
// Make certain that it is something that we want to name // Make certain that it is something that we want to name
if obj == nil { if !ok {
return return
} }
@@ -820,7 +820,7 @@ func (g *RogueGame) current(cur *Object, how, where string) {
} }
g.InvDescribe = false g.InvDescribe = false
g.addmsgf("%c) %s", cur.PackCh, g.invName(cur, true)) g.addmsgf("%c) %s", cur.PackCh, g.inventoryName(cur, true))
g.InvDescribe = true g.InvDescribe = true
if where != "" { if where != "" {

View File

@@ -290,7 +290,7 @@ func (g *RogueGame) attack(mp *Monster) int {
removed = true removed = true
g.leavePack(steal, false, false) g.leavePack(steal, false, false)
g.msg("she stole %s!", g.invName(steal, true)) g.msg("she stole %s!", g.inventoryName(steal, true))
} }
} }
} }

View File

@@ -236,8 +236,8 @@ func (g *RogueGame) findObj(y, x int) *Object {
// eat lets her try to eat something (misc.c eat). // eat lets her try to eat something (misc.c eat).
func (g *RogueGame) eat() { func (g *RogueGame) eat() {
obj := g.getItem("eat", KindFood) obj, ok := g.promptPackItem("eat", KindFood)
if obj == nil { if !ok {
return return
} }

View File

@@ -137,7 +137,7 @@ func (g *RogueGame) addPack(obj *Object, silent bool) {
g.addmsgf("you now have ") g.addmsgf("you now have ")
} }
g.msg("%s (%c)", g.invName(obj, !g.Options.Terse), obj.PackCh) g.msg("%s (%c)", g.inventoryName(obj, !g.Options.Terse), obj.PackCh)
} }
} }
@@ -236,7 +236,7 @@ func (g *RogueGame) inventory(list []*Object, kind ObjectKind) bool {
g.NObjs++ g.NObjs++
g.Msgs.MsgEsc = true g.Msgs.MsgEsc = true
line := string(item.PackCh) + ") " + g.invName(item, false) line := string(item.PackCh) + ") " + g.inventoryName(item, false)
if g.addLine("%s", line) == Escape { if g.addLine("%s", line) == Escape {
g.Msgs.MsgEsc = false g.Msgs.MsgEsc = false
g.msg("") g.msg("")
@@ -323,7 +323,7 @@ func (g *RogueGame) moveMsg(obj *Object) {
g.addmsgf("you ") g.addmsgf("you ")
} }
g.msg("moved onto %s", g.invName(obj, true)) g.msg("moved onto %s", g.inventoryName(obj, true))
} }
// pickyInven allows the player to inventory a single item (pack.c // pickyInven allows the player to inventory a single item (pack.c
@@ -337,7 +337,7 @@ func (g *RogueGame) pickyInven() {
} }
if len(p.Pack) == 1 { if len(p.Pack) == 1 {
g.msg("a) %s", g.invName(p.Pack[0], false)) g.msg("a) %s", g.inventoryName(p.Pack[0], false))
return return
} }
@@ -354,7 +354,7 @@ func (g *RogueGame) pickyInven() {
for _, obj := range p.Pack { for _, obj := range p.Pack {
if mch == obj.PackCh { if mch == obj.PackCh {
g.msg("%c) %s", mch, g.invName(obj, false)) g.msg("%c) %s", mch, g.inventoryName(obj, false))
return return
} }
@@ -363,23 +363,24 @@ func (g *RogueGame) pickyInven() {
g.msg("'%s' not in pack", unctrl(mch)) g.msg("'%s' not in pack", unctrl(mch))
} }
// getItem picks something out of a pack for a purpose (pack.c get_item). // promptPackItem picks something out of a pack for a purpose (pack.c
func (g *RogueGame) getItem(purpose string, kind ObjectKind) *Object { // get_item); ok reports whether the player chose an item.
func (g *RogueGame) promptPackItem(purpose string, kind ObjectKind) (obj *Object, ok bool) {
p := &g.Player p := &g.Player
if len(p.Pack) == 0 { if len(p.Pack) == 0 {
g.msg("you aren't carrying anything") g.msg("you aren't carrying anything")
return nil return nil, false
} }
if g.Again { if g.Again {
if g.LastPick != nil { if g.LastPick != nil {
return g.LastPick return g.LastPick, true
} }
g.msg("you ran out") g.msg("you ran out")
return nil return nil, false
} }
for { for {
@@ -402,7 +403,7 @@ func (g *RogueGame) getItem(purpose string, kind ObjectKind) *Object {
g.After = false g.After = false
g.msg("") g.msg("")
return nil return nil, false
} }
g.NObjs = 1 // normal case: person types one char g.NObjs = 1 // normal case: person types one char
@@ -411,7 +412,7 @@ func (g *RogueGame) getItem(purpose string, kind ObjectKind) *Object {
if !g.inventory(p.Pack, kind) { if !g.inventory(p.Pack, kind) {
g.After = false g.After = false
return nil return nil, false
} }
continue continue
@@ -419,7 +420,7 @@ func (g *RogueGame) getItem(purpose string, kind ObjectKind) *Object {
for _, obj := range p.Pack { for _, obj := range p.Pack {
if obj.PackCh == ch { if obj.PackCh == ch {
return obj return obj, true
} }
} }

View File

@@ -16,9 +16,9 @@ type pact struct {
// quaff drinks a potion from the pack (potions.c quaff). // quaff drinks a potion from the pack (potions.c quaff).
func (g *RogueGame) quaff() { func (g *RogueGame) quaff() {
p := &g.Player p := &g.Player
obj := g.getItem("quaff", KindPotion) obj, ok := g.promptPackItem("quaff", KindPotion)
// Make certain that it is something that we want to drink // Make certain that it is something that we want to drink
if obj == nil { if !ok {
return return
} }
@@ -43,7 +43,7 @@ func (g *RogueGame) quaff() {
switch obj.PotionKind() { switch obj.PotionKind() {
case PotionConfusion: case PotionConfusion:
g.doPot(PotionConfusion, !trip) g.applyPotionFuse(PotionConfusion, !trip)
case PotionPoison: case PotionPoison:
g.Items.Potions[PotionPoison].Know = true g.Items.Potions[PotionPoison].Know = true
if p.IsWearing(RingSustainStrength) { if p.IsWearing(RingSustainStrength) {
@@ -118,11 +118,11 @@ func (g *RogueGame) quaff() {
g.SeenStairs = g.seenStairs() g.SeenStairs = g.seenStairs()
} }
g.doPot(PotionLSD, true) g.applyPotionFuse(PotionLSD, true)
case PotionSeeInvisible: case PotionSeeInvisible:
show := p.On(CanSeeInvisible) show := p.On(CanSeeInvisible)
g.doPot(PotionSeeInvisible, false) g.applyPotionFuse(PotionSeeInvisible, false)
if !show { if !show {
g.invisOn() g.invisOn()
@@ -177,9 +177,9 @@ func (g *RogueGame) quaff() {
g.msg("hey, this tastes great. It make you feel warm all over") g.msg("hey, this tastes great. It make you feel warm all over")
case PotionBlindness: case PotionBlindness:
g.doPot(PotionBlindness, true) g.applyPotionFuse(PotionBlindness, true)
case PotionLevitation: case PotionLevitation:
g.doPot(PotionLevitation, true) g.applyPotionFuse(PotionLevitation, true)
} }
g.status() g.status()
@@ -194,9 +194,9 @@ func (g *RogueGame) raiseLevel() {
g.checkLevel() g.checkLevel()
} }
// doPot does a potion with standard setup: it uses a fuse and turns on a // applyPotionFuse does a potion with standard setup: it uses a fuse and
// flag (potions.c do_pot). // turns on a flag (potions.c do_pot).
func (g *RogueGame) doPot(kind PotionKind, knowit bool) { func (g *RogueGame) applyPotionFuse(kind PotionKind, knowit bool) {
pp := &g.data.pActions[kind] pp := &g.data.pActions[kind]
if !g.Items.Potions[kind].Know { if !g.Items.Potions[kind].Know {
g.Items.Potions[kind].Know = knowit g.Items.Potions[kind].Know = knowit

View File

@@ -7,9 +7,9 @@ import "fmt"
// ringOn puts a ring on a hand (rings.c ring_on). // ringOn puts a ring on a hand (rings.c ring_on).
func (g *RogueGame) ringOn() { func (g *RogueGame) ringOn() {
p := &g.Player p := &g.Player
obj := g.getItem("put on", KindRing) obj, ok := g.promptPackItem("put on", KindRing)
// Make certain that it is something that we want to wear // Make certain that it is something that we want to wear
if obj == nil { if !ok {
return return
} }
@@ -65,7 +65,7 @@ func (g *RogueGame) ringOn() {
g.addmsgf("you are now wearing ") g.addmsgf("you are now wearing ")
} }
g.msg("%s (%c)", g.invName(obj, true), obj.PackCh) g.msg("%s (%c)", g.inventoryName(obj, true), obj.PackCh)
} }
// ringOff takes off a ring (rings.c ring_off). // ringOff takes off a ring (rings.c ring_off).
@@ -103,7 +103,7 @@ func (g *RogueGame) ringOff() {
} }
if g.dropCheck(obj) { if g.dropCheck(obj) {
g.msg("was wearing %s(%c)", g.invName(obj, true), obj.PackCh) g.msg("was wearing %s(%c)", g.inventoryName(obj, true), obj.PackCh)
} }
} }

View File

@@ -189,7 +189,7 @@ func (g *RogueGame) totalWinner() {
} }
g.scr.Std.MvPrintwf(line, 0, "%c) %5d %s", obj.PackCh, worth, g.scr.Std.MvPrintwf(line, 0, "%c) %5d %s", obj.PackCh, worth,
g.invName(obj, false)) g.inventoryName(obj, false))
line++ line++
p.Purse += worth p.Purse += worth
} }

View File

@@ -7,8 +7,8 @@ package game
func (g *RogueGame) readScroll() { func (g *RogueGame) readScroll() {
p := &g.Player p := &g.Player
obj := g.getItem("read", KindScroll) obj, ok := g.promptPackItem("read", KindScroll)
if obj == nil { if !ok {
return return
} }

View File

@@ -14,8 +14,8 @@ const (
func (g *RogueGame) doZap() { func (g *RogueGame) doZap() {
p := &g.Player p := &g.Player
obj := g.getItem("zap with", KindWand) obj, ok := g.promptPackItem("zap with", KindWand)
if obj == nil { if !ok {
return return
} }

View File

@@ -94,7 +94,7 @@ type gameData struct {
initWeaps [NumWeaponTypes]weaponSetup initWeaps [NumWeaponTypes]weaponSetup
// pActions is potions.c p_actions[]. The P_SEEINVIS message is dynamic // pActions is potions.c p_actions[]. The P_SEEINVIS message is dynamic
// (it names the fruit) and is computed in doPot. // (it names the fruit) and is computed in applyPotionFuse.
pActions [NumPotionTypes]pact pActions [NumPotionTypes]pact
// idType maps identify scrolls to the kind of item they identify // idType maps identify scrolls to the kind of item they identify

View File

@@ -9,7 +9,7 @@ import (
// invName returns the name of something as it would appear in an inventory // invName returns the name of something as it would appear in an inventory
// (things.c inv_name). // (things.c inv_name).
func (g *RogueGame) invName(obj *Object, drop bool) string { func (g *RogueGame) inventoryName(obj *Object, drop bool) string {
var pb strings.Builder var pb strings.Builder
which := obj.Which which := obj.Which
@@ -142,8 +142,8 @@ func (g *RogueGame) dropIt() {
return return
} }
obj := g.getItem("drop", KindNone) obj, ok := g.promptPackItem("drop", KindNone)
if obj == nil { if !ok {
return return
} }
@@ -162,7 +162,7 @@ func (g *RogueGame) dropIt() {
g.HasAmulet = false g.HasAmulet = false
} }
g.msg("dropped %s", g.invName(obj, true)) g.msg("dropped %s", g.inventoryName(obj, true))
} }
// dropCheck does special checks for dropping or unwielding|unwearing| // dropCheck does special checks for dropping or unwielding|unwearing|
@@ -392,7 +392,7 @@ func (g *RogueGame) printDisc(typ byte) {
if info[order[i]].Know || info[order[i]].Guess != "" { if info[order[i]].Know || info[order[i]].Guess != "" {
obj.Kind = objectKindForGlyph(typ) obj.Kind = objectKindForGlyph(typ)
obj.Which = order[i] obj.Which = order[i]
g.addLine("%s", g.invName(&obj, false)) g.addLine("%s", g.inventoryName(&obj, false))
numFound++ numFound++
} }

View File

@@ -9,8 +9,8 @@ const noWeapon WeaponKind = -1
// missile fires a missile in a given direction (weapons.c missile). // missile fires a missile in a given direction (weapons.c missile).
func (g *RogueGame) missile(ydelta, xdelta int) { func (g *RogueGame) missile(ydelta, xdelta int) {
// Get which thing we are hurling // Get which thing we are hurling
obj := g.getItem("throw", KindWeapon) obj, ok := g.promptPackItem("throw", KindWeapon)
if obj == nil { if !ok {
return return
} }
@@ -113,8 +113,8 @@ func (g *RogueGame) wield() {
p.CurWeapon = oweapon p.CurWeapon = oweapon
obj := g.getItem("wield", KindWeapon) obj, ok := g.promptPackItem("wield", KindWeapon)
if obj == nil { if !ok {
g.After = false g.After = false
return return
@@ -133,7 +133,7 @@ func (g *RogueGame) wield() {
return return
} }
sp := g.invName(obj, true) sp := g.inventoryName(obj, true)
p.CurWeapon = obj p.CurWeapon = obj
if !g.Options.Terse { if !g.Options.Terse {

View File

@@ -119,7 +119,7 @@ func (g *RogueGame) whatis(insist bool, kind ObjectKind) {
var obj *Object var obj *Object
for { for {
obj = g.getItem("identify", kind) obj, _ = g.promptPackItem("identify", kind)
if !insist { if !insist {
break break
@@ -161,7 +161,7 @@ func (g *RogueGame) whatis(insist bool, kind ObjectKind) {
setKnow(obj, g.Items.Rings[:]) setKnow(obj, g.Items.Rings[:])
} }
g.msg("%s", g.invName(obj, false)) g.msg("%s", g.inventoryName(obj, false))
} }
// setKnow sets things up when we really know what a thing is (wizard.c // setKnow sets things up when we really know what a thing is (wizard.c