Skip to content

Commit

Permalink
Implement object initial states parsing 🛋️.
Browse files Browse the repository at this point in the history
  • Loading branch information
gmarty committed May 11, 2024
1 parent ffc7a6e commit e27374a
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/containers/ResourceExplorer.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const ResourceExplorer = ({ rom, res, resources }) => {
<RoomsContainer
rooms={resources.rooms}
roomgfx={resources.roomgfx}
globdata={resources.globdata[0]}
/>
}>
<Route
Expand All @@ -26,6 +27,7 @@ const ResourceExplorer = ({ rom, res, resources }) => {
<RoomsContainer
rooms={resources.rooms}
roomgfx={resources.roomgfx}
globdata={resources.globdata[0]}
/>
}
/>
Expand Down
9 changes: 7 additions & 2 deletions src/containers/RoomsContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import RoomTabs from '../components/RoomTabs';
import Palettes from '../components/Palettes';
import RoomGfx from '../components/RoomGfx';

const RoomsContainer = ({ rooms, roomgfx }) => {
const RoomsContainer = ({ rooms, roomgfx, globdata }) => {
const { roomId } = useParams();
const [hoveredObject, setHoveredObject] = useState(null);
const [selectedObjects, setSelectedObjects] = useState([]);
Expand All @@ -32,7 +32,12 @@ const RoomsContainer = ({ rooms, roomgfx }) => {
setRoom(room);

// Clear the selected objects when the room changes.
const selectedObjects = Array(room?.header?.objectsNum || 0).fill(false);
const selectedObjects = Array(room?.header?.objectsNum || 0);
for (let i = 0; i < selectedObjects.length; i++) {
const objNum = room.objects[i].num;
const initialState = globdata.globdata[objNum];
selectedObjects[i] = !!(initialState & 0b10000000);
}
setSelectedObjects(selectedObjects);
}, [roomId]);

Expand Down
23 changes: 23 additions & 0 deletions src/lib/parser/parseGlobdata.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import Parser from './parser.js';

const parseGlobdata = (arrayBuffer, i = 0, offset = 0) => {
const parser = new Parser(arrayBuffer);
const metadata = {
id: i,
offset,
size: arrayBuffer.byteLength,
};

const globdata = [];

for (let i = 0; i < parser.length; i++) {
globdata.push(parser.getUint8());
}

return {
metadata,
globdata,
};
};

export default parseGlobdata;
12 changes: 12 additions & 0 deletions src/lib/parser/parseRom.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import parseRooms from './parseRooms.js';
import parseRoomGfx from './parseRoomGfx.js';
import parseGlobdata from './parseGlobdata.js';
import parsePreps from './parsePreps.js';

const parseRom = (arrayBuffer, res) => {
const rooms = [];
const roomgfx = [];
const globdata = [];
const preps = [];

for (let i = 0; i < res?.rooms?.length; i++) {
Expand All @@ -25,6 +27,15 @@ const parseRom = (arrayBuffer, res) => {
roomgfx.push(item);
}

for (let i = 0; i < res?.globdata?.length; i++) {
const [offset, length] = res.globdata[i];

const buffer = arrayBuffer.slice(offset, offset + length);
const item = parseGlobdata(buffer, i, offset);
item.buffer = buffer;
globdata.push(item);
}

for (let i = 0; i < res?.preplist?.length; i++) {
const [offset, length] = res.preplist[i];

Expand All @@ -37,6 +48,7 @@ const parseRom = (arrayBuffer, res) => {
return {
rooms,
roomgfx,
globdata,
preps,
};
};
Expand Down
2 changes: 1 addition & 1 deletion src/lib/resources.js
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@ const proto = {
// [0x17f05, 0x0055], [0x1bf87, 0x003b], [0x17f05, 0x0055], [0x23fa9, 0x0045], [0x1ffbd, 0x0040],
// [0x1bfc2, 0x003c], [0x17f90, 0x003a], [0x17f90, 0x003a], [0x17f05, 0x0055], [0x13fab, 0x004b],
// ],
// globdata: [[0x2ca11, 0x0307]],
globdata: [[0x2ca11, 0x0307]],
// // sprite palette data
// sprpals: [[0x0bfc1, 0x0010], [0x0bfd1, 0x0010]],
// // associates costume IDs with sprite sets (indexes into SPRLENS/SPROFFS)
Expand Down

0 comments on commit e27374a

Please sign in to comment.