go: port dungeon generation, items base, pack, and monster creation
rooms.c, passages.c, new_level.c ported in full: room/maze layout, corridor spanning tree with extra connections, passage numbering flood fill, trap/stairs/object placement, treasure rooms. Careful RNG-call ordering throughout keeps generation seed-faithful to C. Supporting subsystems this depends on, also ported: - screen.go: curses replaced by in-memory Window cell buffers behind a Terminal interface (tcell arrives with the UI phase; tests run headless) - io.go: msg/addmsg/endmsg message-line protocol, status line, step_ok - pack.c in full (add_pack sorting/stacking walk, get_item, inventory) - things.c in full (inv_name, new_thing, discovery lists, pagination) - monsters.c in full; chase.c navigation half (roomin/cansee/see_monst/ find_dest/runto/set_oldch); rings.c, armor.c in full - weapons.c/sticks.c creation half (init_weapon, fix_stick, num) - misc.c look() display update, eat, level-up, direction input - daemons.c callbacks except stomach (needs death()) and the runners chase driver (combat phase) - init.c init_player with the starting kit Tests: level invariants across seeds, determinism, 30-depth sweep.
This commit is contained in:
44
game/init.go
44
game/init.go
@@ -3,7 +3,49 @@ package game
|
||||
import "strings"
|
||||
|
||||
// init.c — per-game randomization of item appearances and probability
|
||||
// tables. initPlayer arrives with the pack/items phase (it needs addPack).
|
||||
// tables, and the player roll-up.
|
||||
|
||||
// initPlayer rolls her up (init.c init_player).
|
||||
func (g *RogueGame) initPlayer() {
|
||||
p := &g.Player
|
||||
p.MaxStats = initStats
|
||||
p.Stats = p.MaxStats
|
||||
p.FoodLeft = HungerTime
|
||||
// Give him some food
|
||||
obj := newObject()
|
||||
obj.Type = Food
|
||||
obj.Count = 1
|
||||
g.addPack(obj, true)
|
||||
// And his suit of armor
|
||||
obj = newObject()
|
||||
obj.Type = Armor
|
||||
obj.Which = RingMail
|
||||
obj.Arm = aClass[RingMail] - 1
|
||||
obj.Flags.Set(IsKnow)
|
||||
obj.Count = 1
|
||||
p.CurArmor = obj
|
||||
g.addPack(obj, true)
|
||||
// Give him his weaponry. First a mace.
|
||||
obj = newObject()
|
||||
g.initWeapon(obj, Mace)
|
||||
obj.HPlus = 1
|
||||
obj.DPlus = 1
|
||||
obj.Flags.Set(IsKnow)
|
||||
g.addPack(obj, true)
|
||||
p.CurWeapon = obj
|
||||
// Now a +1 bow
|
||||
obj = newObject()
|
||||
g.initWeapon(obj, Bow)
|
||||
obj.HPlus = 1
|
||||
obj.Flags.Set(IsKnow)
|
||||
g.addPack(obj, true)
|
||||
// Now some arrows
|
||||
obj = newObject()
|
||||
g.initWeapon(obj, Arrow)
|
||||
obj.Count = g.rnd(15) + 25
|
||||
obj.Flags.Set(IsKnow)
|
||||
g.addPack(obj, true)
|
||||
}
|
||||
|
||||
// initColors initializes the potion color scheme for this game
|
||||
// (init.c init_colors).
|
||||
|
||||
Reference in New Issue
Block a user