summaryrefslogtreecommitdiff
path: root/mapblk.go
blob: bd2b455868679eee4f19a8ee5f8cb69f4f250358 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package mt

type MapBlkFlags uint8

const (
	BlkIsUnderground MapBlkFlags = 1 << iota
	BlkDayNightDiff
	BlkLightExpired
	BlkNotGenerated
)

type LitFromBlks uint16

const AlwaysLitFrom LitFromBlks = 0xf000

func LitFrom(d Dir, b LightBank) LitFromBlks {
	return 1 << (uint8(d) + uint8(6*b))
}

type MapBlk struct {
	Flags   MapBlkFlags
	LitFrom LitFromBlks

	//mt:const uint8(2)     // Size of param0 in bytes.
	//mt:const uint8(1 + 1) // Size of param1 and param2 combined, in bytes.

	Param0 [4096]Content
	Param1 [4096]uint8
	Param2 [4096]uint8

	NodeMetas map[uint16]*NodeMeta
}

// Pos2BlkPos converts a node position to a MapBlk position and index.
func Pos2Blkpos(pos [3]int16) (blkpos [3]int16, i uint16) {
	for j := range pos {
		blkpos[j] = pos[j] >> 4
		i |= uint16(pos[j]&0xf) << (4 * j)
	}

	return
}

// BlkPos2Pos converts a MapBlk position and index to a node position.
func Blkpos2Pos(blkpos [3]int16, i uint16) (pos [3]int16) {
	for j := range pos {
		pos[j] = blkpos[j]<<4 | int16(i>>(4*j)&0xf)
	}

	return
}