forked from aboood40091/PointlessMaker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
structs.py
108 lines (88 loc) · 2.75 KB
/
structs.py
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# PointlessMaker
# Version 0.2
# Copyright © 2017 MasterVermilli0n/AboodXD
# This file is part of PointlessMaker.
# PointlessMaker is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# PointlessMaker is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import struct
class CourseData(struct.Struct):
def __init__(self, bom):
super().__init__(bom + '4x2I4xH6BQB7x66s2sx3BH2BI104s12xI')
self.bom = bom
def data(self, data, pos):
(self.version,
self.checksum,
self.year,
self.month,
self.day,
self.hour,
self.minute,
self.unk1,
self.unk2,
self.levelcode,
self.unk3,
self.name,
self.mode,
self.theme,
self.unk4,
self.unk5,
self.timer,
self.scroll,
self.flags,
self.areaWidth,
self.miiData,
self.numObjects) = self.unpack_from(data, pos)
self.mii = MiiData()
self.mii.data(self.miiData, self.bom)
class MiiData(struct.Struct):
def __init__(self):
super().__init__('<IQI6s2xH20sH16sB7x20sI')
def data(self, miiData, bom):
(self.ID,
self.sysID,
self.date,
self.MAC,
self.opt,
self.name,
self.size_,
self.design,
self.copying,
self.unk1,
self.unk2) = self.unpack_from(miiData, 0)
(self.country,
self.uploadFlag) = struct.unpack(bom + '2I', miiData[0x60:])
self.name = self.u16BytestrByteSwap(self.name)
def u16BytestrByteSwap(self, bytestr):
swapped = bytearray()
for i in range(0, len(self.name), 2):
swapped.append(bytestr[i + 1])
swapped.append(bytestr[i])
return bytes(swapped)
class Object(struct.Struct):
def __init__(self, bom):
super().__init__(bom + '2Ih2B3I2b2h2b')
def data(self, data, pos):
(self.x,
self.z,
self.y,
self.w,
self.h,
self.parentFlags,
self.childFlags,
self.data,
self.objType,
self.childType,
self.linkID,
self.eIndex,
self._1E,
self.cTID) = self.unpack_from(data, pos)