Adding modding folder with a hacked build.

This commit is contained in:
ml
2026-09-26 08:53:08 +02:00
parent cdb960dc71
commit c91080aba7
755 changed files with 50424 additions and 0 deletions
@@ -0,0 +1,39 @@
package citadel
import (
"github.com/inkyblackness/hacked/ss1/content/archive"
"github.com/inkyblackness/hacked/ss1/world"
)
// DefaultGameState returns a new instance of a game state that the engine creates for a standard game.
func DefaultGameState() *archive.GameState {
state := archive.DefaultGameState()
// location: medical level
state.Set("Current Level", world.StartingLevel)
// location: in the neurosurgery chamber, looking West
state.Set("Hacker Position X", (world.StartingTileX<<16)+0x8000)
state.Set("Hacker Position Y", (world.StartingTileY<<16)+0x8000)
state.Set("Hacker Position Z", 0x01BD00)
state.Set("Hacker Yaw", 0x03243E)
// set first message
state.EMailState(26).SetReceived(true) // Rebecca Lansing's first message
// The engine also sets the active state of email, though this field index is not used.
for index, info := range booleanVariables {
if info.InitValue == nil {
continue
}
state.SetBooleanVar(index, *info.InitValue != 0)
}
for index, info := range integerVariables {
if info.InitValue == nil {
continue
}
state.SetIntegerVar(index, *info.InitValue)
}
return state
}
@@ -0,0 +1,192 @@
package citadel
import "github.com/inkyblackness/hacked/ss1/content/archive"
var integerVariables = archive.GameVariables{
3: archive.GameVariableInfoFor("Engine State").At(2).LimitedBy(0, 100),
12: archive.GameVariableInfoFor("Number of Groves").At(3).LimitedBy(0, 4),
33: archive.GameVariableInfoFor("Destroyed CPUs Level 1").At(0).LimitedBy(0, 100),
34: archive.GameVariableInfoFor("Destroyed CPUs Level 2").At(0).LimitedBy(0, 100),
35: archive.GameVariableInfoFor("Destroyed CPUs Level 3").At(0).LimitedBy(0, 100),
36: archive.GameVariableInfoFor("Destroyed CPUs Level 4").At(0).LimitedBy(0, 100),
37: archive.GameVariableInfoFor("Destroyed CPUs Level 5").At(0).LimitedBy(0, 100),
38: archive.GameVariableInfoFor("Destroyed CPUs Level 6").At(0).LimitedBy(0, 100),
39: archive.GameVariableInfoFor("Killed Cyberguards, largce CSpace").At(0).LimitedBy(0, 100),
}
var booleanVariables = archive.GameVariables{
1: archive.GameVariableInfoFor("(unknown)").At(1),
2: archive.GameVariableInfoFor("(unknown)").At(1),
3: archive.GameVariableInfoFor("(unknown)").At(1),
16: archive.GameVariableInfoFor("(unknown)").At(1),
18: archive.GameVariableInfoFor("(unknown)").At(1),
21: archive.GameVariableInfoFor("(unknown)").At(1),
22: archive.GameVariableInfoFor("(unknown)").At(1),
23: archive.GameVariableInfoFor("(unknown)").At(1),
24: archive.GameVariableInfoFor("(unknown)").At(1),
25: archive.GameVariableInfoFor("(unknown)").At(1),
26: archive.GameVariableInfoFor("(unknown)").At(1),
32: archive.GameVariableInfoFor("(unknown)").At(1),
33: archive.GameVariableInfoFor("(unknown)").At(1),
36: archive.GameVariableInfoFor("(unknown)").At(1),
37: archive.GameVariableInfoFor("(unknown)").At(1),
75: archive.GameVariableInfoFor("(unknown)").At(1),
76: archive.GameVariableInfoFor("(unknown)").At(1),
77: archive.GameVariableInfoFor("(unknown)").At(1),
78: archive.GameVariableInfoFor("(unknown)").At(1),
79: archive.GameVariableInfoFor("(unknown)").At(1),
80: archive.GameVariableInfoFor("(unknown)").At(1),
81: archive.GameVariableInfoFor("(unknown)").At(1),
82: archive.GameVariableInfoFor("(unknown)").At(1),
83: archive.GameVariableInfoFor("(unknown)").At(1),
84: archive.GameVariableInfoFor("(unknown)").At(1),
85: archive.GameVariableInfoFor("(unknown)").At(1),
86: archive.GameVariableInfoFor("(unknown)").At(1),
87: archive.GameVariableInfoFor("(unknown)").At(1),
88: archive.GameVariableInfoFor("(unknown)").At(1),
89: archive.GameVariableInfoFor("(unknown)").At(1),
90: archive.GameVariableInfoFor("(unknown)").At(1),
91: archive.GameVariableInfoFor("(unknown)").At(1),
92: archive.GameVariableInfoFor("(unknown)").At(1),
93: archive.GameVariableInfoFor("(unknown)").At(1),
94: archive.GameVariableInfoFor("(unknown)").At(1),
95: archive.GameVariableInfoFor("(unknown)").At(1),
112: archive.GameVariableInfoFor("(unknown)").At(1),
113: archive.GameVariableInfoFor("(unknown)").At(1),
114: archive.GameVariableInfoFor("(unknown)").At(1),
115: archive.GameVariableInfoFor("(unknown)").At(1),
116: archive.GameVariableInfoFor("(unknown)").At(1),
117: archive.GameVariableInfoFor("(unknown)").At(1),
118: archive.GameVariableInfoFor("(unknown)").At(1),
119: archive.GameVariableInfoFor("(unknown)").At(1),
120: archive.GameVariableInfoFor("(unknown)").At(1),
121: archive.GameVariableInfoFor("(unknown)").At(1),
122: archive.GameVariableInfoFor("(unknown)").At(1),
123: archive.GameVariableInfoFor("(unknown)").At(1),
124: archive.GameVariableInfoFor("(unknown)").At(1),
125: archive.GameVariableInfoFor("(unknown)").At(1),
126: archive.GameVariableInfoFor("(unknown)").At(1),
127: archive.GameVariableInfoFor("(unknown)").At(1),
152: archive.GameVariableInfoFor("Bridge Separated").At(0),
160: archive.GameVariableInfoFor("(unknown)").At(1),
161: archive.GameVariableInfoFor("(unknown)").At(1),
162: archive.GameVariableInfoFor("(unknown)").At(1),
163: archive.GameVariableInfoFor("(unknown)").At(1),
164: archive.GameVariableInfoFor("(unknown)").At(1),
165: archive.GameVariableInfoFor("(unknown)").At(1),
166: archive.GameVariableInfoFor("(unknown)").At(1),
167: archive.GameVariableInfoFor("(unknown)").At(1),
168: archive.GameVariableInfoFor("(unknown)").At(1),
169: archive.GameVariableInfoFor("(unknown)").At(1),
192: archive.GameVariableInfoFor("(unknown)").At(1),
193: archive.GameVariableInfoFor("(unknown)").At(1),
194: archive.GameVariableInfoFor("(unknown)").At(1),
195: archive.GameVariableInfoFor("(unknown)").At(1),
196: archive.GameVariableInfoFor("(unknown)").At(1),
197: archive.GameVariableInfoFor("(unknown)").At(1),
198: archive.GameVariableInfoFor("(unknown)").At(1),
199: archive.GameVariableInfoFor("(unknown)").At(1),
200: archive.GameVariableInfoFor("(unknown)").At(1),
201: archive.GameVariableInfoFor("(unknown)").At(1),
202: archive.GameVariableInfoFor("(unknown)").At(1),
203: archive.GameVariableInfoFor("(unknown)").At(1),
204: archive.GameVariableInfoFor("(unknown)").At(1),
205: archive.GameVariableInfoFor("(unknown)").At(1),
206: archive.GameVariableInfoFor("(unknown)").At(1),
207: archive.GameVariableInfoFor("(unknown)").At(1),
225: archive.GameVariableInfoFor("(unknown)").At(1),
227: archive.GameVariableInfoFor("(unknown)").At(1),
229: archive.GameVariableInfoFor("(unknown)").At(1),
231: archive.GameVariableInfoFor("(unknown)").At(1),
233: archive.GameVariableInfoFor("(unknown)").At(1),
235: archive.GameVariableInfoFor("(unknown)").At(1),
237: archive.GameVariableInfoFor("(unknown)").At(1),
239: archive.GameVariableInfoFor("(unknown)").At(1),
241: archive.GameVariableInfoFor("(unknown)").At(1),
243: archive.GameVariableInfoFor("(unknown)").At(1),
245: archive.GameVariableInfoFor("(unknown)").At(1),
247: archive.GameVariableInfoFor("(unknown)").At(1),
249: archive.GameVariableInfoFor("(unknown)").At(1),
251: archive.GameVariableInfoFor("(unknown)").At(1),
253: archive.GameVariableInfoFor("(unknown)").At(1),
255: archive.GameVariableInfoFor("(unknown)").At(1),
257: archive.GameVariableInfoFor("(unknown)").At(1),
259: archive.GameVariableInfoFor("(unknown)").At(1),
261: archive.GameVariableInfoFor("(unknown)").At(1),
263: archive.GameVariableInfoFor("(unknown)").At(1),
265: archive.GameVariableInfoFor("(unknown)").At(1),
267: archive.GameVariableInfoFor("(unknown)").At(1),
269: archive.GameVariableInfoFor("(unknown)").At(1),
271: archive.GameVariableInfoFor("(unknown)").At(1),
273: archive.GameVariableInfoFor("(unknown)").At(1),
275: archive.GameVariableInfoFor("(unknown)").At(1),
277: archive.GameVariableInfoFor("(unknown)").At(1),
279: archive.GameVariableInfoFor("(unknown)").At(1),
281: archive.GameVariableInfoFor("(unknown)").At(1),
283: archive.GameVariableInfoFor("(unknown)").At(1),
285: archive.GameVariableInfoFor("(unknown)").At(1),
287: archive.GameVariableInfoFor("(unknown)").At(1),
289: archive.GameVariableInfoFor("(unknown)").At(1),
291: archive.GameVariableInfoFor("(unknown)").At(1),
293: archive.GameVariableInfoFor("(unknown)").At(1),
295: archive.GameVariableInfoFor("(unknown)").At(1),
297: archive.GameVariableInfoFor("(unknown)").At(1),
299: archive.GameVariableInfoFor("(unknown)").At(1),
}
// IntegerVariable returns a variable info for integer variables.
func IntegerVariable(index int) *archive.GameVariableInfo {
varInfo := integerVariables.Lookup(index)
if varInfo != nil {
return varInfo
}
varInfo = archive.EngineIntegerVariable(index)
if varInfo == nil {
return nil
}
if index == 31 {
varInfo.Name = "Reactor Code 1"
}
if index == 32 {
varInfo.Name = "Reactor Code 2"
}
return varInfo
}
// BooleanVariable returns a variable info for boolean variables.
func BooleanVariable(index int) *archive.GameVariableInfo {
varInfo := booleanVariables.Lookup(index)
if varInfo != nil {
return varInfo
}
return archive.EngineBooleanVariable(index)
}
// MissionVariables is a collector of mission-specific variable accessors.
type MissionVariables struct{}
var unknownVar = archive.GameVariableInfoFor("(unknown)").At(0)
// IntegerVariable returns a variable info for given index.
func (vars MissionVariables) IntegerVariable(index int) archive.GameVariableInfo {
varInfo := IntegerVariable(index)
if varInfo == nil {
return unknownVar
}
return *varInfo
}
// BooleanVariable returns a variable info for given index.
func (vars MissionVariables) BooleanVariable(index int) archive.GameVariableInfo {
varInfo := BooleanVariable(index)
if varInfo == nil {
return unknownVar
}
return *varInfo
}