Skip to content
This repository was archived by the owner on Jul 28, 2018. It is now read-only.

Commit 0032ce4

Browse files
committed
commit for v.0.10.3
1 parent 0f0daf6 commit 0032ce4

File tree

20 files changed

+495
-51
lines changed

20 files changed

+495
-51
lines changed

src/github.com/inkyblackness/res/data/gameobj/Animations.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package gameobj
22

33
import (
4+
"fmt"
5+
46
"github.com/inkyblackness/res"
57
"github.com/inkyblackness/res/data/interpreters"
68
)
79

810
var animationGenerics = interpreters.New().
9-
With("FrameTime", 0, 1).
11+
With("FrameTime", 0, 1).As(interpreters.FormattedRangedValue(0, 255,
12+
func(value int64) string {
13+
return fmt.Sprintf("%3.0f millisec - raw: %d", (float64(value)*900)/255.0, value)
14+
})).
1015
With("EmitsLight", 1, 1).As(interpreters.EnumValue(map[uint32]string{0: "No", 1: "Yes"}))
1116

1217
func initAnimations() {

src/github.com/inkyblackness/res/data/interpreters/Description_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (suite *DescriptionSuite) TestAsRegistersRangeFunctionForLastField(c *check
7777
desc := New().With("fieldA", 0, 2).As(rangeFunc)
7878

7979
inst := desc.For([]byte{0x00, 0x01})
80-
simplifier := NewSimplifier(func(minValue, maxValue int64) {})
80+
simplifier := NewSimplifier(func(minValue, maxValue int64, formatter RawValueFormatter) {})
8181
inst.Describe("fieldA", simplifier)
8282

8383
c.Check(rangeFuncCalled, check.Equals, true)

src/github.com/inkyblackness/res/data/interpreters/Simplifier.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package interpreters
22

33
import (
4+
"fmt"
45
"math"
56
)
67

8+
// RawValueFormatter converts a raw value to a textual form.
9+
type RawValueFormatter func(value int64) string
10+
711
// RawValueHandler is for a simple value range.
8-
type RawValueHandler func(minValue, maxValue int64)
12+
type RawValueHandler func(minValue, maxValue int64, formatter RawValueFormatter)
913

1014
// EnumValueHandler is for enumerated (mapped) values.
1115
type EnumValueHandler func(values map[uint32]string)
@@ -19,10 +23,19 @@ type ObjectIndexHandler func()
1923
// SpecialHandler is for rare occasions.
2024
type SpecialHandler func()
2125

26+
func basicToString(value int64) string {
27+
return fmt.Sprintf("%v", value)
28+
}
29+
2230
// RangedValue creates a field range for specific minimum and maximum values.
2331
func RangedValue(minValue, maxValue int64) FieldRange {
32+
return FormattedRangedValue(minValue, maxValue, basicToString)
33+
}
34+
35+
// FormattedRangedValue is similar to RangedValue, and adds a formatting function.
36+
func FormattedRangedValue(minValue, maxValue int64, formatter RawValueFormatter) FieldRange {
2437
return func(simpl *Simplifier) bool {
25-
return simpl.rangedValue(minValue, maxValue)
38+
return simpl.rangedValue(minValue, maxValue, formatter)
2639
}
2740
}
2841

@@ -51,6 +64,7 @@ func ObjectIndex() FieldRange {
5164
// Currently known special values:
5265
// * BinaryCodedDecimal - for keypads storing their number as BCD
5366
// * LevelTexture - index value into level texture list
67+
// * MaterialOrLevelTexture - index value into level texture list, or material (bit 7 toggles)
5468
// * VariableKey - for actions
5569
// * VariableCondition - for action conditions
5670
// * ObjectType - for 0x00CCSSTT selection
@@ -85,15 +99,15 @@ func NewSimplifier(rawValueHandler RawValueHandler) *Simplifier {
8599
func (simpl *Simplifier) rawValue(e *entry) {
86100
max := int64(math.Pow(2, float64(e.count*8)))
87101
if max == 256 {
88-
simpl.rawValueHandler(0, 255)
102+
simpl.rawValueHandler(0, 255, basicToString)
89103
} else {
90104
half := max / 2
91-
simpl.rawValueHandler(-1, half-1)
105+
simpl.rawValueHandler(-1, half-1, basicToString)
92106
}
93107
}
94108

95-
func (simpl *Simplifier) rangedValue(minValue, maxValue int64) bool {
96-
simpl.rawValueHandler(minValue, maxValue)
109+
func (simpl *Simplifier) rangedValue(minValue, maxValue int64, formatter RawValueFormatter) bool {
110+
simpl.rawValueHandler(minValue, maxValue, formatter)
97111
return true
98112
}
99113

src/github.com/inkyblackness/res/data/interpreters/Simplifier_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func (suite *SimplifierSuite) SetUpTest(c *check.C) {
1515
func (suite *SimplifierSuite) TestRawValueCallsHandler(c *check.C) {
1616
var calledMinValue int64
1717
var calledMaxValue int64
18-
rawHandler := func(minValue, maxValue int64) {
18+
rawHandler := func(minValue, maxValue int64, formatter RawValueFormatter) {
1919
calledMinValue, calledMaxValue = minValue, maxValue
2020
}
2121
simpl := NewSimplifier(rawHandler)
@@ -27,7 +27,7 @@ func (suite *SimplifierSuite) TestRawValueCallsHandler(c *check.C) {
2727
}
2828

2929
func (suite *SimplifierSuite) TestEnumValueReturnsFalseIfNoHandlerRegistered(c *check.C) {
30-
simpl := NewSimplifier(func(minValue, maxValue int64) {})
30+
simpl := NewSimplifier(func(minValue, maxValue int64, formatter RawValueFormatter) {})
3131

3232
result := simpl.enumValue(map[uint32]string{})
3333

@@ -36,7 +36,7 @@ func (suite *SimplifierSuite) TestEnumValueReturnsFalseIfNoHandlerRegistered(c *
3636

3737
func (suite *SimplifierSuite) TestEnumValueCallsRegisteredHandler(c *check.C) {
3838
result := map[uint32]string{}
39-
simpl := NewSimplifier(func(minValue, maxValue int64) {})
39+
simpl := NewSimplifier(func(minValue, maxValue int64, formatter RawValueFormatter) {})
4040
simpl.SetEnumValueHandler(func(values map[uint32]string) {
4141
result = values
4242
})

src/github.com/inkyblackness/res/data/levelobj/Barriers.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,36 @@
11
package levelobj
22

33
import (
4+
"fmt"
5+
46
"github.com/inkyblackness/res/data/interpreters"
57
)
68

79
var baseBarrier = interpreters.New().
810
With("LockVariableIndex", 0, 2).As(interpreters.RangedValue(0, 0x1FF)).
911
With("LockMessageIndex", 2, 1).
10-
With("ForceDoorColor", 3, 1).
11-
With("RequiredAccessLevel", 4, 1).
12-
With("AutoCloseTime", 5, 1).
12+
With("ForceDoorColor", 3, 1).As(interpreters.FormattedRangedValue(0, 255,
13+
func(value int64) (result string) {
14+
if colorText, defined := forceColors[value]; defined {
15+
result = fmt.Sprintf("%s - raw: %d", colorText, value)
16+
} else {
17+
result = fmt.Sprintf("%d", value)
18+
}
19+
return result
20+
})).
21+
With("RequiredAccessLevel", 4, 1).As(interpreters.FormattedRangedValue(0, 30,
22+
func(value int64) (result string) {
23+
if accessLevel, known := accessLevelMasks[1<<uint32(value)]; known {
24+
result = fmt.Sprintf("%s - raw: %d", accessLevel, value)
25+
} else {
26+
result = fmt.Sprintf("Unknown - raw: %d", value)
27+
}
28+
return
29+
})).
30+
With("AutoCloseTime", 5, 1).As(interpreters.FormattedRangedValue(0, 255,
31+
func(value int64) string {
32+
return fmt.Sprintf("%.2f sec - raw: %d", float64(value)*0.5, value)
33+
})).
1334
With("OtherObjectIndex", 6, 2).As(interpreters.ObjectIndex())
1435

1536
func initBarriers() interpreterRetriever {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package levelobj
2+
3+
var forceColors = map[int64]string{
4+
0: "Default (red)",
5+
6+
247: "Gray, medium",
7+
248: "Gray, light",
8+
9+
249: "Red, light",
10+
250: "Green, light",
11+
251: "Blue, light",
12+
13+
252: "Invisible",
14+
15+
253: "Blue, medium",
16+
254: "Green, medium",
17+
255: "Red, medium"}

src/github.com/inkyblackness/res/data/levelobj/Items.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var corpseItem = baseItem.
2525
var severedHeadItem = baseItem.
2626
With("ImageIndex", 2, 1)
2727

28-
var accessMaskDescription = interpreters.Bitfield(map[uint32]string{
28+
var accessLevelMasks = map[uint32]string{
2929
0x00000001: "None",
3030
0x00000002: "Generic1",
3131
0x00000004: "Generic2",
@@ -59,7 +59,9 @@ var accessMaskDescription = interpreters.Bitfield(map[uint32]string{
5959
0x08000000: "Personal4",
6060
0x10000000: "Personal5",
6161
0x20000000: "Personal6",
62-
0x40000000: "Personal7"})
62+
0x40000000: "Personal7"}
63+
64+
var accessMaskDescription = interpreters.Bitfield(accessLevelMasks)
6365

6466
var accessCardItem = baseItem.
6567
With("Ignored0000", 0, 2).As(interpreters.SpecialValue("Ignored")).

src/github.com/inkyblackness/res/data/levelobj/Panels.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package levelobj
22

33
import (
4+
"fmt"
5+
46
"github.com/inkyblackness/res/data/interpreters"
57
"github.com/inkyblackness/res/data/levelobj/actions"
68
"github.com/inkyblackness/res/data/levelobj/conditions"
@@ -38,7 +40,10 @@ var cyberspaceTerminal = gameVariablePanel.
3840

3941
var energyChargeStation = gameVariablePanel.
4042
With("EnergyDelta", 6, 4).As(interpreters.RangedValue(0, 255)).
41-
With("RechargeTime", 10, 4).As(interpreters.RangedValue(0, 3600)).
43+
With("RechargeTime", 10, 4).As(interpreters.FormattedRangedValue(0, 3600,
44+
func(value int64) string {
45+
return fmt.Sprintf("%d sec", value)
46+
})).
4247
With("TriggerObjectIndex", 14, 4).As(interpreters.ObjectIndex()).
4348
With("RechargedTimestamp", 18, 4)
4449

src/github.com/inkyblackness/res/data/levelobj/Scenery.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package levelobj
22

33
import (
4+
"fmt"
5+
46
"github.com/inkyblackness/res/data/interpreters"
57
)
68

@@ -48,15 +50,23 @@ var securityCamera = baseScenery.
4850
With("PanningSwitch", 2, 1).As(interpreters.EnumValue(map[uint32]string{0: "Stationary", 1: "Panning"}))
4951

5052
var solidBridge = baseScenery.
51-
With("Size", 2, 1).
52-
With("Height", 3, 1).
53-
With("TopBottomTexture", 4, 1).
54-
With("SideTexture", 5, 1)
53+
With("Size", 2, 1).As(interpreters.Bitfield(map[uint32]string{0x0F: "X", 0xF0: "Y"})).
54+
With("Height", 3, 1).As(interpreters.SpecialValue("ObjectHeight")).
55+
With("TopBottomTexture", 4, 1).As(interpreters.SpecialValue("MaterialOrLevelTexture")).
56+
With("SideTexture", 5, 1).As(interpreters.SpecialValue("MaterialOrLevelTexture"))
5557

5658
var forceBridge = baseScenery.
57-
With("Size", 2, 1).
58-
With("Height", 3, 1).
59-
With("Color", 6, 1)
59+
With("Size", 2, 1).As(interpreters.Bitfield(map[uint32]string{0x0F: "X", 0xF0: "Y"})).
60+
With("Height", 3, 1).As(interpreters.SpecialValue("ObjectHeight")).
61+
With("Color", 6, 1).As(interpreters.FormattedRangedValue(0, 255,
62+
func(value int64) (result string) {
63+
if colorText, defined := forceColors[value]; defined {
64+
result = fmt.Sprintf("%s - raw: %d", colorText, value)
65+
} else {
66+
result = fmt.Sprintf("%d", value)
67+
}
68+
return result
69+
}))
6070

6171
func initScenery() interpreterRetriever {
6272
displays := newInterpreterLeaf(displayScenery)

src/github.com/inkyblackness/res/data/levelobj/actions/actions.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package actions
22

33
import (
4+
"fmt"
5+
46
"github.com/inkyblackness/res/data/interpreters"
57
)
68

@@ -50,15 +52,19 @@ var showCutsceneDetails = interpreters.New().
5052
With("CutsceneIndex", 0, 4).As(interpreters.EnumValue(map[uint32]string{0: "Death", 1: "Intro", 2: "Ending"})).
5153
With("EndGameFlag", 4, 4).As(interpreters.EnumValue(map[uint32]string{0: "No (not working)", 1: "Yes"}))
5254

55+
func pointOneSecond(value int64) string {
56+
return fmt.Sprintf("%.1f sec", float64(value)*0.1)
57+
}
58+
5359
var triggerOtherObjectsDetails = interpreters.New().
5460
With("Object1Index", 0, 2).As(interpreters.ObjectIndex()).
55-
With("Object1Delay", 2, 2).As(interpreters.RangedValue(0, 6000)).
61+
With("Object1Delay", 2, 2).As(interpreters.FormattedRangedValue(0, 6000, pointOneSecond)).
5662
With("Object2Index", 4, 2).As(interpreters.ObjectIndex()).
57-
With("Object2Delay", 6, 2).As(interpreters.RangedValue(0, 6000)).
63+
With("Object2Delay", 6, 2).As(interpreters.FormattedRangedValue(0, 6000, pointOneSecond)).
5864
With("Object3Index", 8, 2).As(interpreters.ObjectIndex()).
59-
With("Object3Delay", 10, 2).As(interpreters.RangedValue(0, 6000)).
65+
With("Object3Delay", 10, 2).As(interpreters.FormattedRangedValue(0, 6000, pointOneSecond)).
6066
With("Object4Index", 12, 2).As(interpreters.ObjectIndex()).
61-
With("Object4Delay", 14, 2).As(interpreters.RangedValue(0, 6000))
67+
With("Object4Delay", 14, 2).As(interpreters.FormattedRangedValue(0, 6000, pointOneSecond))
6268

6369
var changeLightingDetails = interpreters.New().
6470
Refining("ObjectExtent", 0, 2, interpreters.New().With("Index", 0, 2).As(interpreters.ObjectIndex()), func(inst *interpreters.Instance) bool {

0 commit comments

Comments
 (0)