Skip to content

Commit 234a170

Browse files
committed
some s3k stuff
1 parent ffc9f3d commit 234a170

File tree

5 files changed

+133
-34
lines changed

5 files changed

+133
-34
lines changed

TODO

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ BUFFER
1717
// autozoom based on sprite size for sprites tab
1818

1919
// reverse endianness
20+
// new mapping screen always show
2021

2122
// other
2223

app/formats/scripts/debug.js

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,11 @@ Object.defineProperty(window, 'log', {
4949
const Debug = observer(function () {
5050
return (
5151
log.enabled && (
52-
<div
53-
style={{
54-
border: '1px solid limegreen',
55-
borderRadius: 5,
56-
padding: 5,
57-
margin: 5,
58-
height: '100%',
59-
width: 500,
60-
overflowY: 'scroll',
61-
color: 'limegreen',
62-
backgroundColor: 'black',
63-
fontWeight: 'bold',
52+
<>
53+
<div style={{
6454
position: 'absolute',
65-
top: 0,
66-
left: 0,
67-
zIndex: 10,
68-
resize: 'both',
69-
}}
70-
>
71-
<div>
55+
zIndex: 11,
56+
}}>
7257
<Button
7358
color="red"
7459
onClick={() => {
@@ -111,8 +96,29 @@ const Debug = observer(function () {
11196
clear storage
11297
</Button>
11398
</div>
114-
<pre>{log.output}</pre>
115-
</div>
99+
<div
100+
style={{
101+
border: '1px solid limegreen',
102+
borderRadius: 5,
103+
padding: 5,
104+
margin: 5,
105+
maxHeight: '100vh',
106+
width: 500,
107+
color: 'limegreen',
108+
backgroundColor: 'black',
109+
fontWeight: 'bold',
110+
position: 'absolute',
111+
top: 20,
112+
left: 0,
113+
bottom: 0,
114+
zIndex: 10,
115+
resize: 'both',
116+
overflowY: 'scroll',
117+
}}
118+
>
119+
<pre>{log.output}</pre>
120+
</div>
121+
</>
116122
)
117123
);
118124
});

app/formats/scripts/run-script.js

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,32 @@ function catchFunc(func) {
4949
}
5050

5151
function makeOffsetTable({ read, write }) {
52-
return (size = constants.dc.w) => [
53-
() => ({ ref }) => {
54-
let a = 0x7FFF;
52+
return (size = constants.dc.w, { items } = {}) => [
53+
({ getCursor }) => ({ ref }) => {
54+
const cursor = getCursor();
55+
if (!ref.global.a) {
56+
ref.global.a = 0x7FFF;
57+
}
5558
const headers = [];
56-
for (let i = 0; i < 1e5 && i < a; i += 2) {
57-
const header = read(size) & 0x7FFF;
59+
for (let i = cursor; i < 1e5 && i < ref.global.a; i = getCursor()) {
60+
const header = (read(size) & 0x7FFF) + cursor;
5861
headers.push(header);
59-
if (header < a && !(header === 0)) {
60-
a = header;
62+
logger('= HEADER =', header);
63+
// logger(a, header < a, header, cursor);
64+
if (header < ref.global.a && !(header === 0)) {
65+
ref.global.a = header;
6166
}
67+
// logger('HEADER LIMIT', i, a, cursor, a - cursor);
68+
if (items && headers.length >= items) break;
69+
}
70+
if (!ref.global.firstHeader) {
71+
ref.global.firstHeader = true;
72+
ref.global.cleanup.push(({ sprites }) => {
73+
sprites.splice(0, sprites.length);
74+
// sprites.push([]);
75+
});
6276
}
6377
ref.global.cleanup.push(({ sprites, spritesAddr }) => {
64-
sprites.splice(0, sprites.length);
6578
headers.forEach(header => {
6679
if (header === 0) {
6780
sprites.push([]); // handle zero header optimization
@@ -157,21 +170,22 @@ export default catchFunc((file) => {
157170
return value;
158171
});
159172

173+
const getCursor = () => cursor;
160174
const global = { cleanup: [] };
161175
const sprites = [];
162176
const spritesAddr = {};
163177
sectionList.forEach(([readFrame], i) => {
164-
logger(`|> section `, i);
178+
logger(`====== SECTION ======`, i);
165179
read: for (let spriteIndex = 0; spriteIndex < readLimit; spriteIndex++) {
166-
logger(`| sprite ${spriteIndex.toString(16)} `);
180+
logger(`== SPRITE == ${spriteIndex.toString(16)} `);
167181
const sprite = [];
168182
const ref = { global };
169183
spritesAddr[cursor] = sprite;
170-
const readMapping = readFrame(spriteIndex);
184+
const readMapping = readFrame({ getCursor }, spriteIndex);
171185
if (readMapping) {
172186
logger('read mapping');
173187
for (let frameIndex = 0; frameIndex < readLimit; frameIndex++) {
174-
logger(`.frame ${frameIndex.toString(16)} `);
188+
logger(`= FRAME = ${frameIndex.toString(16)} `);
175189
const mapping = {};
176190
const param = {
177191
mapping,

scripts/Sonic 3&K Player.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Flex2 Mapping Definition - Sonic 3 Player
1+
// Flex2 Mapping Definition - Sonic 3&K Player
22

33
const {
44
mappings,

scripts/Sonic 3&K Sonic.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Flex2 Mapping Definition - Sonic 3&K Sonic
2+
3+
const {
4+
mappings,
5+
dplcs,
6+
offsetTable,
7+
write,
8+
read,
9+
dc,
10+
nybble,
11+
endFrame,
12+
skipFrame,
13+
signed,
14+
} = Flex2;
15+
16+
mappings([
17+
offsetTable(dc.w, { items: 251 }),
18+
offsetTable(dc.w),
19+
[
20+
() => {
21+
const quantity = read(dc.w);
22+
return quantity > 0 && (({ mapping }, frameIndex) => {
23+
mapping.top = read(dc.b, signed);
24+
read(nybble);
25+
mapping.width = read(2) + 1;
26+
mapping.height = read(2) + 1;
27+
mapping.priority = read(1);
28+
mapping.palette = read(2);
29+
mapping.vflip = read(1);
30+
mapping.hflip = read(1);
31+
mapping.art = read(11);
32+
mapping.left = read(dc.w, signed);
33+
if (frameIndex === quantity - 1) return endFrame;
34+
});
35+
},
36+
({ sprite }) => {
37+
write(dc.w, sprite.length);
38+
return ({ mapping }) => {
39+
// top
40+
write(dc.b, mapping.top);
41+
write(nybble, 0);
42+
// size
43+
write(2, mapping.width - 1);
44+
write(2, mapping.height - 1);
45+
// 1 player
46+
write(1, mapping.priority);
47+
write(2, mapping.palette);
48+
write(1, mapping.vflip);
49+
write(1, mapping.hflip);
50+
write(11, mapping.art);
51+
// left
52+
write(dc.w, mapping.left);
53+
};
54+
},
55+
],
56+
]);
57+
58+
dplcs([
59+
offsetTable(dc.w, { items: 251 }),
60+
offsetTable(dc.w),
61+
[
62+
() => {
63+
const quantity = read(dc.w);
64+
return quantity > 0 && (({ mapping }, frameIndex) => {
65+
mapping.size = read(nybble) + 1;
66+
mapping.art = read(nybble * 3);
67+
if (frameIndex + 1 === quantity) return endFrame;
68+
});
69+
},
70+
({ sprite }) => {
71+
write(dc.w, sprite.length);
72+
return ({ mapping }) => {
73+
write(nybble, mapping.size - 1);
74+
write(nybble * 3, mapping.art);
75+
};
76+
},
77+
],
78+
]);

0 commit comments

Comments
 (0)