This is pretty awful, but will let me wire up items more easily without needing to do the big refactor into independent menu handlers
157 lines
4.5 KiB
Go
157 lines
4.5 KiB
Go
package flow
|
|
|
|
// TODO: There are Chaos and Ultramarine versions of MainGame. Do we really want
|
|
// to duplicate everything for both?
|
|
|
|
func (f *Flow) linkMainGame() {
|
|
f.linkMainGameActionMenu()
|
|
f.linkMainGameInterfaceOptionsMenu()
|
|
// 5: Holding menu
|
|
f.linkMainGameViewMenu()
|
|
|
|
// 7: General character menu
|
|
f.onClick(mainGame, "7.4", func() { // More button
|
|
f.setActiveNow(mainGame, "7", false)
|
|
f.setActiveNow(mainGame, "8", true)
|
|
})
|
|
|
|
// 8: Character stats
|
|
f.onClick(mainGame, "8.21", func() { // Stat more buttons
|
|
f.setActiveNow(mainGame, "7", true)
|
|
f.setActiveNow(mainGame, "8", false)
|
|
})
|
|
|
|
// 9: Visible enemy menu
|
|
// 10: Friendly squad menu
|
|
// 11: Psyker spell dialogue
|
|
// 12: Inventory dialogue
|
|
f.onClick(mainGame, "12.21", f.hideDialogue(mainGame)) // Exit
|
|
|
|
// 13: exchange menu
|
|
|
|
// 14: Map
|
|
// 14.1: MAP_SPRITE
|
|
// 14.2: Multiplier button (2x)
|
|
f.onClick(mainGame, "14.3", f.setActive(mainGame, "14", false))
|
|
// 14.4: Area
|
|
|
|
// FIXME: the display of left and right interface buttons is hidden by these
|
|
// sprites, because we draw in strict numeric order. Just hide them for now.
|
|
//
|
|
// FIXME: The child element is already set to hidden, while the menu itself
|
|
// is set to active, so maybe this is a hint that menus shouldn't be drawn?
|
|
//
|
|
// FIXME: the approach taken by the original binary in resolutions greater
|
|
// than 640x480 is to draw the menu elements *unscaled*. They are centered,
|
|
// and the dead space is filled by the "interface wing" sprites in the
|
|
// background. Should we replicate this, or keep with the current scaling
|
|
// behaviour? Which is better?
|
|
f.exit = maybeErr(mainGame, f.setActiveNow(mainGame, "15", false)) // Interface wing left
|
|
f.exit = maybeErr(mainGame, f.setActiveNow(mainGame, "16", false)) // Interface wing right
|
|
// 17: Grenade dialogue
|
|
|
|
f.onClick(mainGame, "18.12", f.setActive(mainGame, "18", false)) // Info "dialogue"
|
|
|
|
// 19: Turn start dialogue
|
|
// 20: Chat menu
|
|
|
|
// Chat list menu box - active by default, hide it
|
|
f.exit = maybeErr(mainGame, f.setActiveNow(mainGame, "21", false))
|
|
|
|
}
|
|
|
|
func (f *Flow) linkMainGameActionMenu() {
|
|
// 3: Action menu. These are mostly predicated on selected character state
|
|
// 3.1: Aimed shot
|
|
// 3.2: Shooting
|
|
// 3.3: Walk
|
|
// 3.4: Run
|
|
// 3.5: Crouch/Stand
|
|
// 3.6: Hand to hand (commented out)
|
|
// 3.7: Retrieve
|
|
// 3.8: Door
|
|
// 3.9: Switch
|
|
// 3.10: Overwatch
|
|
// 3.11: Rally/Formation
|
|
// 3.12: Board/Disembark
|
|
// FIXME: for now, this is "end scenario", for convenience
|
|
f.onClick(mainGame, "3.13", func() { // End turn button.
|
|
f.scenario = nil
|
|
f.returnToLastDriverNow(mainGame)
|
|
})
|
|
// 3.14: Special action heal
|
|
// 3.15: Special action techmarine
|
|
// 3.16: Special action jump pack
|
|
// 3.17: Special action spell
|
|
}
|
|
|
|
func (f *Flow) linkMainGameInterfaceOptionsMenu() {
|
|
// 4: Interface options menu
|
|
f.onClick(mainGame, "4.1", f.setReturningDriver(mainGame, options)) // Options button
|
|
|
|
// FIXME: map should be shown top-right, not top-left. We need to support 2x
|
|
// mode as well.
|
|
f.onClick(mainGame, "4.2", f.toggleActive(mainGame, "14")) // Map button
|
|
|
|
// FIXME: mission objectives should be shown top-left, not centered
|
|
f.onClick(mainGame, "4.3", f.toggleActive(mainGame, "18")) // Mission objectives
|
|
|
|
f.onClick(mainGame, "4.4", f.showDialogue(mainGame, "12")) // Inventory
|
|
// 4.5: Next man
|
|
// 4.6: Next enemy
|
|
// 4.7: Total enemy text
|
|
}
|
|
|
|
func (f *Flow) linkMainGameViewMenu() {
|
|
// FIXME: all these buttons should show current state as well as have an
|
|
// effect
|
|
f.onClick(mainGame, "6.1", f.withScenario(func() { // View 100%
|
|
f.scenario.Zoom = 1.0
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.2", f.withScenario(func() { // View 50%
|
|
f.scenario.Zoom = 0.5
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.3", f.withScenario(func() { // View 25%
|
|
f.scenario.Zoom = 0.25
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.4", f.withScenario(func() { // Z index up
|
|
f.scenario.ChangeZIdx(+1)
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.5", f.withScenario(func() { // Z index down
|
|
f.scenario.ChangeZIdx(-1)
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.6", f.withScenario(func() { // Z index 1
|
|
f.scenario.ZIdx = 0
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.7", f.withScenario(func() { // Z index 2
|
|
f.scenario.ZIdx = 1
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.8", f.withScenario(func() { // Z index 3
|
|
f.scenario.ZIdx = 2
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.9", f.withScenario(func() { // Z index 4
|
|
f.scenario.ZIdx = 3
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.10", f.withScenario(func() { // Z index 5
|
|
f.scenario.ZIdx = 4
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.11", f.withScenario(func() { // Z index 6
|
|
f.scenario.ZIdx = 5
|
|
}))
|
|
|
|
f.onClick(mainGame, "6.12", f.withScenario(func() { // Z index 7
|
|
f.scenario.ZIdx = 6
|
|
}))
|
|
|
|
}
|