diff --git a/src/components/MainScene/Lain.tsx b/src/components/MainScene/Lain.tsx
index f7c5830..40c416f 100644
--- a/src/components/MainScene/Lain.tsx
+++ b/src/components/MainScene/Lain.tsx
@@ -32,7 +32,7 @@ import leanRightSpriteSheet from "../../static/sprite/lean_right.png";
import lookAroundSpriteSheet from "../../static/sprite/look_around.png";
import playWithHairSpriteSheet from "../../static/sprite/play_with_hair.png";
-import { useLainStore } from "../../store";
+import { useMainSceneStore } from "../../store";
type LainConstructorProps = {
sprite: string;
@@ -353,7 +353,7 @@ type LainProps = {
};
const Lain = (props: LainProps) => {
- const lainMoveState = useLainStore((state) => state.lainMoveState);
+ const lainMoveState = useMainSceneStore((state) => state.lainMoveState);
const lainAnimationDispatch = useMemo(() => {
const anims = {
diff --git a/src/components/MainScene/SyncedComponents/HUD.tsx b/src/components/MainScene/SyncedComponents/HUD.tsx
index f9864ef..f74fabd 100644
--- a/src/components/MainScene/SyncedComponents/HUD.tsx
+++ b/src/components/MainScene/SyncedComponents/HUD.tsx
@@ -8,33 +8,36 @@ import longHudMirrored from "../../../static/sprite/long_hud_mirrored.png";
import boringHud from "../../../static/sprite/long_hud_boring.png";
import boringHudMirrored from "../../../static/sprite/long_hud_boring_mirrored.png";
import { a, useSpring } from "@react-spring/three";
-import { useHudStore, useNodeStore, useSiteStore } from "../../../store";
-import node_huds from "../../../resources/node_huds.json";
+import { useMainSceneStore } from "../../../store";
import MediumLetter from "../../TextRenderer/MediumLetter";
-import site_a from "../../../resources/site_a.json";
-import site_b from "../../../resources/site_b.json";
-import { SiteType } from "./Site";
+
+export type HUDType = {
+ mirrored: number;
+ long: {
+ position: number[];
+ initial_position: number[];
+ };
+ boring: {
+ position: number[];
+ initial_position: number[];
+ };
+ big: {
+ position: number[];
+ initial_position: number[];
+ };
+ big_text: number[];
+ medium_text: {
+ position: number[];
+ initial_position: number[];
+ };
+};
const HUD = () => {
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const currentSite = useSiteStore((state) => state.currentSite);
-
- const greenText = useMemo(() => {
- if (activeNodeId === "UNKNOWN") return "".split("");
- else {
- const siteData = currentSite === "a" ? site_a : site_b;
- const level = activeNodeId.substr(0, 2);
-
- return (siteData as SiteType)[level][activeNodeId].title.split("");
- }
- }, [activeNodeId, currentSite]);
-
- const active = useHudStore((state) => state.active);
- const id = useHudStore((state) => state.id);
-
- const currentHud = useMemo(() => node_huds[id as keyof typeof node_huds], [
- id,
- ]);
+ const greenText = useMainSceneStore((state) =>
+ state.activeNode.title.split("")
+ );
+ const active = useMainSceneStore((state) => state.hudActive);
+ const currentHud = useMainSceneStore((state) => state.hud);
const hudElementState = useSpring({
bigHUDPositionX: active,
@@ -145,7 +148,7 @@ const HUD = () => {
position-z={-8.7}
scale={[0.02, 0.035, 0.02]}
>
- {greenText.map((letter, idx) => (
+ {greenText.map((letter: string, idx: number) => (
))}
diff --git a/src/components/MainScene/SyncedComponents/Site.tsx b/src/components/MainScene/SyncedComponents/Site.tsx
index dc419ad..26d016e 100644
--- a/src/components/MainScene/SyncedComponents/Site.tsx
+++ b/src/components/MainScene/SyncedComponents/Site.tsx
@@ -1,11 +1,6 @@
import React, { Suspense, useMemo } from "react";
import { a, useSpring } from "@react-spring/three";
-import {
- useLevelStore,
- useMainSceneStore,
- useNodeStore,
- useSiteStore,
-} from "../../../store";
+import { useLevelStore, useMainSceneStore, useSiteStore } from "../../../store";
import ActiveLevelNodes from "./Site/ActiveLevelNodes";
import InactiveLevelNodes from "./Site/InactiveLevelNodes";
import Rings from "./Site/Rings";
@@ -69,7 +64,7 @@ const Site = (props: SiteProps) => {
config: { duration: 3400 },
});
- const gameProgress = useNodeStore((state) => state.gameProgress);
+ const gameProgress = useMainSceneStore((state) => state.gameProgress);
const currentSite = useSiteStore((state) => state.currentSite);
diff --git a/src/components/MainScene/SyncedComponents/Site/ActiveLevelNodes.tsx b/src/components/MainScene/SyncedComponents/Site/ActiveLevelNodes.tsx
index 2dec24f..5c53483 100644
--- a/src/components/MainScene/SyncedComponents/Site/ActiveLevelNodes.tsx
+++ b/src/components/MainScene/SyncedComponents/Site/ActiveLevelNodes.tsx
@@ -1,22 +1,26 @@
import React, { useEffect, useMemo } from "react";
import Node from "./Node";
import node_positions from "../../../../resources/node_positions.json";
-import { useNodeStore } from "../../../../store";
+import { useMainSceneStore } from "../../../../store";
import { isNodeVisible } from "../../../../core/nodeSelector";
import { NodesProps } from "../Site";
const ActiveLevelNodes = (props: NodesProps) => {
- const activeNodeState = useNodeStore((state) => state.activeNodeState);
+ const activeNodeId = useMainSceneStore((state) => state.activeNode.id);
const activeLevelNodes = useMemo(
() => props.siteData[props.activeLevel as keyof typeof props.siteData],
[props]
);
+ useEffect(() => {
+ console.log(activeNodeId);
+ }, [activeNodeId]);
+
return (
<>
{Object.entries(activeLevelNodes).map((node: [string, any]) => {
- if (isNodeVisible(node[0], props.gameProgress, props.currentSite)) {
+ if (isNodeVisible(node[1], props.gameProgress)) {
return (
{
.rotation
}
key={node[1].node_name}
- active={node[0] === activeNodeState.id}
+ active={node[0] === activeNodeId}
level={node[0].substr(0, 2)}
/>
);
diff --git a/src/components/MainScene/SyncedComponents/Site/InactiveLevelNodes.tsx b/src/components/MainScene/SyncedComponents/Site/InactiveLevelNodes.tsx
index 0d597c0..a106190 100644
--- a/src/components/MainScene/SyncedComponents/Site/InactiveLevelNodes.tsx
+++ b/src/components/MainScene/SyncedComponents/Site/InactiveLevelNodes.tsx
@@ -25,7 +25,7 @@ const InactiveLevelNodes = memo((props: NodesProps) => {
return (
<>
{Object.entries(visibleNodes).map((node: [string, any]) => {
- if (isNodeVisible(node[0], props.gameProgress, props.currentSite)) {
+ if (isNodeVisible(node[1], props.gameProgress)) {
return (
{
- // the game only has a couple of sprite that it displays in the hub
- // dynamically importnig them would be worse for performance,
- // so we import all of them here and then use this function to
- // associate a sprite with the path
-
const tex = useMemo(() => {
if (props.nodeName.includes("S")) {
return [SSkn, SSKnActive];
@@ -106,66 +101,29 @@ const Node = memo((props: NodeContructorProps) => {
}
`;
- // these pieces of state get updated transiently rather than reactively
- // to avoid excess unnecessary renders (this is absolutely crucial for performance).
-
const [
- {
- activeNodePosX,
- activeNodePosY,
- activeNodePosZ,
- activeNodeRotZ,
- activeNodeVisible,
- activeNodeScale,
- },
+ { activeNodePos, activeNodeRot, activeNodeScale, activeNodeVisible },
set,
] = useSpring(() => ({
- activeNodePosX: useNodeStore.getState().activeNodeState.interactedWith
- ? useNodeStore.getState().activeNodeState.posX
- : props.position[0],
- activeNodePosY: useNodeStore.getState().activeNodeState.interactedWith
- ? level_y_values[props.level as keyof typeof level_y_values] +
- useNodeStore.getState().activeNodeState.posY
- : props.position[1],
- activeNodePosZ: useNodeStore.getState().activeNodeState.interactedWith
- ? useNodeStore.getState().activeNodeState.posZ
- : props.position[2],
- activeNodeRotZ: useNodeStore.getState().activeNodeState.interactedWith
- ? useNodeStore.getState().activeNodeState.rotZ
- : 0,
- activeNodeScale: useNodeStore.getState().activeNodeState.shrinking ? 0 : 1,
+ activeNodePos: props.position,
+ activeNodeRot: [0, 0, 0],
+ activeNodeScale: 1,
activeNodeVisible: true,
config: { duration: 800 },
}));
useEffect(() => {
- useNodeStore.subscribe(set, (state) => ({
- activeNodePosX: useNodeStore.getState().activeNodeState.interactedWith
- ? state.activeNodeState.posX
- : props.position[0],
- activeNodePosY: useNodeStore.getState().activeNodeState.interactedWith
- ? state.activeNodeState.posY
- : props.position[1],
- activeNodePosZ: useNodeStore.getState().activeNodeState.interactedWith
- ? state.activeNodeState.posZ
- : props.position[2],
- activeNodeRotZ: useNodeStore.getState().activeNodeState.interactedWith
+ useMainSceneStore.subscribe(set, (state) => ({
+ activeNodePos: state.activeNodeState.interactedWith
+ ? state.activeNodePos
+ : props.position,
+ activeNodeRot: state.activeNodeState.interactedWith
? state.activeNodeState.rotZ
: 0,
- activeNodeScale: useNodeStore.getState().activeNodeState.shrinking
- ? 0
- : 1,
- activeNodeVisible: useNodeStore.getState().activeNodeState.visible,
+ activeNodeScale: state.activeNodeState.shrinking ? 0 : 1,
+ activeNodeVisible: state.activeNodeState.visible,
}));
- }, [
- props.level,
- activeNodePosX,
- activeNodePosZ,
- activeNodeRotZ,
- props.position,
- set,
- props.rotation,
- ]);
+ }, [props.level, props.position, set, props.rotation]);
useFrame(() => {
if (materialRef.current) {
@@ -189,10 +147,9 @@ const Node = memo((props: NodeContructorProps) => {
scale-z={activeNodeScale}
>
x)}
+ position-y={activeNodePos.interpolate((x, y, z) => y)}
+ position-z={activeNodePos.interpolate((x, y, z) => z)}
rotation-y={props.rotation[1]}
visible={activeNodeVisible}
scale={[0.36, 0.18, 0.36]}
diff --git a/src/components/MainScene/SyncedComponents/Site/NodeAnimations.tsx b/src/components/MainScene/SyncedComponents/Site/NodeAnimations.tsx
index c844ccb..7c20e10 100644
--- a/src/components/MainScene/SyncedComponents/Site/NodeAnimations.tsx
+++ b/src/components/MainScene/SyncedComponents/Site/NodeAnimations.tsx
@@ -1,21 +1,21 @@
import React from "react";
-import { useNodeStore } from "../../../../store";
+import { useMainSceneStore } from "../../../../store";
import NodeExplosion from "./NodeAnimations/NodeExplosion";
import NodeRip from "./NodeAnimations/NodeRip";
const NodeAnimations = () => {
- const nodeShrinking = useNodeStore(
+ const nodeShrinking = useMainSceneStore(
(state) => state.activeNodeState.shrinking
);
- const nodeExploding = useNodeStore(
+ const nodeExploding = useMainSceneStore(
(state) => state.activeNodeState.exploding
);
return (
<>
- {nodeExploding ? : <>>}
- {nodeShrinking ? : <>>}
+ {nodeExploding && }
+ {nodeShrinking && }
>
);
};
diff --git a/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion.tsx b/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion.tsx
index fda3c1a..79ce161 100644
--- a/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion.tsx
+++ b/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion.tsx
@@ -4,10 +4,10 @@ import node_explosion_line_positions from "../../../../../resources/node_explosi
import { useFrame } from "react-three-fiber";
import GoldNode from "./NodeExplosion/GoldNode";
-import { useNodeStore } from "../../../../../store";
+import { useMainSceneStore } from "../../../../../store";
const NodeExplosion = () => {
- const explosionVisible = useNodeStore(
+ const explosionVisible = useMainSceneStore(
(state) => state.activeNodeState.exploding
);
diff --git a/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion/GoldNode.tsx b/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion/GoldNode.tsx
index 4e84b91..c439ec1 100644
--- a/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion/GoldNode.tsx
+++ b/src/components/MainScene/SyncedComponents/Site/NodeAnimations/NodeExplosion/GoldNode.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useMemo, useRef, useState } from "react";
+import React, { useEffect, useMemo, useRef } from "react";
import { GLTF, GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import * as THREE from "three";
import { useFrame, useLoader } from "react-three-fiber";
@@ -16,21 +16,7 @@ import Lda from "../../../../../../static/sprite/Lda.png";
import LdaGold from "../../../../../../static/sprite/Lda_gold.png";
import MULTI from "../../../../../../static/sprite/MULTI.png";
import MULTIGold from "../../../../../../static/sprite/MULTI_gold.png";
-import {
- useLevelStore,
- useNodeStore,
- useSiteStore,
-} from "../../../../../../store";
-import site_a from "../../../../../../resources/site_a.json";
-import site_b from "../../../../../../resources/site_b.json";
-import { SiteType } from "../../../Site";
-import SSKnActive from "../../../../../../static/sprite/SSkn_active.png";
-import MULTIActive from "../../../../../../static/sprite/MULTI_active.png";
-import DcActive from "../../../../../../static/sprite/Dc_active.png";
-import TdaActive from "../../../../../../static/sprite/Tda_active.png";
-import CouActive from "../../../../../../static/sprite/Cou_active.png";
-import DiaActive from "../../../../../../static/sprite/Dia_active.png";
-import LdaActive from "../../../../../../static/sprite/Lda_active.png";
+import { useMainSceneStore } from "../../../../../../store";
type GLTFResult = GLTF & {
nodes: {
@@ -48,43 +34,38 @@ type GoldNodeProps = {
const GoldNode = (props: GoldNodeProps) => {
const { nodes } = useLoader(GLTFLoader, "models/goldNode.glb");
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const activeLevel = useLevelStore((state) => state.activeLevel);
- const currentSite = useSiteStore((state) => state.currentSite);
-
- const siteData = currentSite === "a" ? site_a : site_b;
-
- const activeNodeData = (siteData as SiteType)[activeLevel][activeNodeId];
- const activeNodeName = activeNodeData.node_name;
+ const activeNodeName = useMainSceneStore(
+ (state) => state.activeNode.node_name
+ );
const tex = useMemo(() => {
if (activeNodeName.includes("S")) {
- return [SSkn, SSKnActive];
+ return [SSkn, SSKnGold];
} else if (
activeNodeName.startsWith("P") ||
activeNodeName.startsWith("G") ||
activeNodeName.includes("?")
) {
- return [MULTI, MULTIActive];
+ return [MULTI, MULTIGold];
} else if (activeNodeName.includes("Dc")) {
- return [Dc, DcActive];
+ return [Dc, DcGold];
} else {
switch (activeNodeName.substr(0, 3)) {
case "Tda":
- return [Tda, TdaActive];
+ return [Tda, TdaGold];
case "Cou":
- return [Cou, CouActive];
+ return [Cou, CouGold];
case "Dia":
- return [Dia, DiaActive];
+ return [Dia, DiaGold];
case "Lda":
- return [Lda, LdaActive];
+ return [Lda, LdaGold];
case "Ere":
case "Ekm":
case "Eda":
case "TaK":
case "Env":
- return [MULTI, MULTIActive];
+ return [MULTI, MULTIGold];
}
}
}, [activeNodeName]);
@@ -109,7 +90,6 @@ const GoldNode = (props: GoldNodeProps) => {
}
});
-
return (
{
- const nodeShrinking = useNodeStore(
+ const nodeShrinking = useMainSceneStore(
(state) => state.activeNodeState.shrinking
);
const [shouldAnimate, setShouldAnimate] = useState(false);
diff --git a/src/components/MediaScene/Images.tsx b/src/components/MediaScene/Images.tsx
index 8dc517c..88990cf 100644
--- a/src/components/MediaScene/Images.tsx
+++ b/src/components/MediaScene/Images.tsx
@@ -1,24 +1,22 @@
-import React, { useEffect, useMemo, useState } from "react";
+import React, { useEffect, useState } from "react";
import {
useIdleStore,
- useLevelStore,
+ useMainSceneStore,
useMediaStore,
- useNodeStore,
useSceneStore,
useSiteStore,
} from "../../store";
import { a, useSpring } from "@react-spring/three";
-import { LevelType, SiteType } from "../MainScene/SyncedComponents/Site";
-import site_a from "../../resources/site_a.json";
-import site_b from "../../resources/site_b.json";
import dummy from "../../static/sprite/dummy.png";
import * as THREE from "three";
import { useLoader } from "react-three-fiber";
const Images = () => {
const idleNodeImages = useIdleStore((state) => state.images);
+ const nodeImages = useMainSceneStore(
+ (state) => state.activeNodeState.image_table_indices
+ );
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
const currentScene = useSceneStore((state) => state.currentScene);
const [imageScaleY, setImageScaleY] = useState(3.75);
@@ -27,8 +25,6 @@ const Images = () => {
const currentSite = useSiteStore((state) => state.currentSite);
- const siteData = currentSite === "a" ? site_a : site_b;
-
const dummyTex = useLoader(THREE.TextureLoader, dummy);
const mediaPercentageElapsed = useMediaStore(
@@ -40,17 +36,10 @@ const Images = () => {
config: { duration: 300 },
});
- const activeLevel = useLevelStore((state) => state.activeLevel);
- const activeLevelData: LevelType = useMemo(
- () => siteData[activeLevel as keyof typeof siteData],
- [activeLevel, siteData]
- );
-
useEffect(() => {
let images;
if (currentScene === "media" || currentScene === "tak") {
- images = (siteData as SiteType)[activeLevel][activeNodeId]
- .image_table_indices;
+ images = nodeImages;
} else if (currentScene === "idle_media") {
images = idleNodeImages;
}
@@ -77,15 +66,7 @@ const Images = () => {
}
});
}
- }, [
- activeLevel,
- activeLevelData,
- activeNodeId,
- currentScene,
- currentSite,
- idleNodeImages,
- siteData,
- ]);
+ }, [currentScene, currentSite, idleNodeImages, nodeImages]);
useEffect(() => {
if (mediaPercentageElapsed === 0 && sceneImages[0]) {
diff --git a/src/components/MediaScene/MediaPlayer.tsx b/src/components/MediaScene/MediaPlayer.tsx
index c25ef28..1391cea 100644
--- a/src/components/MediaScene/MediaPlayer.tsx
+++ b/src/components/MediaScene/MediaPlayer.tsx
@@ -6,19 +6,15 @@ import React, {
useRef,
useState,
} from "react";
-import site_a from "../../resources/site_a.json";
-import site_b from "../../resources/site_b.json";
import {
useEndSceneStore,
useIdleStore,
- useLevelStore,
+ useMainSceneStore,
useMediaStore,
- useNodeStore,
useSceneStore,
useSiteStore,
} from "../../store";
import t from "../../static/webvtt/test.vtt";
-import { SiteType } from "../MainScene/SyncedComponents/Site";
import endroll from "../../static/movie/ENDROLL1.STR[0].webm";
import xa0001 from "../../static/audio/a/Xa0001.mp4";
import xa0006 from "../../static/audio/a/Xa0006.mp4";
@@ -34,19 +30,17 @@ const MediaPlayer = () => {
);
const idleMedia = useIdleStore((state) => state.media);
+ const nodeMedia = useMainSceneStore((state) => state.activeNode.media_file);
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const activeLevel = useLevelStore((state) => state.activeLevel);
+ const triggersFinalVideo = useMainSceneStore(
+ (state) => state.activeNode.triggers_final_video
+ );
const requestRef = useRef();
const videoRef = createRef();
const currentSite = useSiteStore((state) => state.currentSite);
- const siteData = useMemo(() => (currentSite === "a" ? site_a : site_b), [
- currentSite,
- ]);
-
// end scene specific stuff
const endMediaPlayedCount = useEndSceneStore(
(state) => state.mediaPlayedCount
@@ -76,10 +70,7 @@ const MediaPlayer = () => {
if (currentScene === "end") {
incrementEndMediaPlayedCount();
} else {
- if (
- (siteData as SiteType)[activeLevel][activeNodeId]
- .triggers_final_video === 1
- ) {
+ if (triggersFinalVideo === 1) {
resetEndMediaPlayedCount();
setScene("end");
} else {
@@ -91,14 +82,12 @@ const MediaPlayer = () => {
}
}
}, [
- activeLevel,
- activeNodeId,
currentScene,
incrementEndMediaPlayedCount,
resetEndMediaPlayedCount,
setPercentageElapsed,
setScene,
- siteData,
+ triggersFinalVideo,
videoRef,
]);
@@ -140,8 +129,6 @@ const MediaPlayer = () => {
}
} else {
if (currentScene === "media" || currentScene === "tak") {
- const nodeMedia = (siteData as SiteType)[activeLevel][activeNodeId]
- .media_file;
if (nodeMedia.includes("XA")) {
import(
"../../static/audio/" + currentSite + "/" + nodeMedia + ".ogg"
@@ -188,13 +175,11 @@ const MediaPlayer = () => {
}
}
}, [
- activeLevel,
- activeNodeId,
currentScene,
currentSite,
endMediaPlayedCount,
idleMedia,
- siteData,
+ nodeMedia,
videoRef,
]);
diff --git a/src/components/MediaScene/Selectables/RightSide.tsx b/src/components/MediaScene/Selectables/RightSide.tsx
index e46c664..b0c2166 100644
--- a/src/components/MediaScene/Selectables/RightSide.tsx
+++ b/src/components/MediaScene/Selectables/RightSide.tsx
@@ -1,26 +1,16 @@
import React, { useCallback, useMemo } from "react";
-import {useLevelStore, useMediaWordStore, useNodeStore, useSiteStore} from "../../../store";
+import { useMainSceneStore, useMediaWordStore } from "../../../store";
import Word from "./RightSide/Word";
-import { useSpring, a } from "@react-spring/three";
+import { a, useSpring } from "@react-spring/three";
import word_position_states from "../../../resources/word_position_states.json";
import * as THREE from "three";
-import site_a from "../../../resources/site_a.json";
-import { SiteType } from "../../MainScene/SyncedComponents/Site";
-import site_b from "../../../resources/site_b.json";
type RightSideProps = {
activeMediaComponent: string;
};
const RightSide = (props: RightSideProps) => {
- const activeLevel = useLevelStore((state) => state.activeLevel);
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
-
- const currentSite = useSiteStore((state) => state.currentSite);
-
- const siteData = currentSite === "a" ? site_a : site_b;
-
- const words = (siteData as SiteType)[activeLevel][activeNodeId].words;
+ const words = useMainSceneStore((state) => state.activeNode.words);
const posStateIdx = useMediaWordStore(
(state) => state.posStateIdx
diff --git a/src/components/TextRenderer/BigLetter.tsx b/src/components/TextRenderer/BigLetter.tsx
index 6b2d20b..343c4cf 100644
--- a/src/components/TextRenderer/BigLetter.tsx
+++ b/src/components/TextRenderer/BigLetter.tsx
@@ -84,6 +84,7 @@ const BigLetter = memo(
config: { duration: 200 },
});
+ console.log('rend')
return (
{
// main scene
const currentSite = useSiteStore((state) => state.currentSite);
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices);
+ // const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
+ // const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices);
const siteTransformState = useSiteStore((state) => state.transformState);
const activeLevel = useLevelStore((state) => state.activeLevel);
const mainSubscene = useMainSceneStore((state) => state.subscene);
@@ -74,7 +73,7 @@ const EventManager = () => {
pauseMatrixIdx,
])
);
- const gameProgress = useNodeStore((state) => state.gameProgress);
+ // const gameProgress = useNodeStore((state) => state.gameProgress);
// media scene
const mediaComponentMatrixIndices = useMediaStore(
@@ -199,13 +198,13 @@ const EventManager = () => {
mainSubscene: mainSubscene,
keyPress: keyPress,
siteTransformState: siteTransformState,
- activeNodeId: activeNodeId,
- nodeMatrixIndices: nodeMatrixIndices,
+ // activeNodeId: activeNodeId,
+ // nodeMatrixIndices: nodeMatrixIndices,
activeLevel: activeLevel,
selectedLevel: selectedLevel,
pauseMatrixIdx: pauseMatrixIdx,
activePauseComponent: activePauseComponent,
- gameProgress: gameProgress,
+ // gameProgress: gameProgress,
currentSite: currentSite,
});
break;
@@ -246,13 +245,10 @@ const EventManager = () => {
currentScene,
mainSubscene,
siteTransformState,
- activeNodeId,
- nodeMatrixIndices,
activeLevel,
selectedLevel,
pauseMatrixIdx,
activePauseComponent,
- gameProgress,
currentSite,
activeMediaComponent,
wordPosStateIdx,
diff --git a/src/core/StateManagers/GameManagers/GameLoader.tsx b/src/core/StateManagers/GameManagers/GameLoader.tsx
index 1265e01..7e451ef 100644
--- a/src/core/StateManagers/GameManagers/GameLoader.tsx
+++ b/src/core/StateManagers/GameManagers/GameLoader.tsx
@@ -1,9 +1,7 @@
import { useCallback, useEffect } from "react";
import {
- useHudStore,
useLevelStore,
useMainSceneStore,
- useNodeStore,
useSiteSaveStore,
useSiteStore,
} from "../../../store";
@@ -35,13 +33,13 @@ const GameLoader = (props: StateManagerProps) => {
const setCurrentSite = useSiteStore((state) => state.setCurrentSite);
// node setter
- const setActiveNodeState = useNodeStore((state) => state.setActiveNodeState);
- const setNodeMatrixIndices = useNodeStore(
+ const setActiveNode = useMainSceneStore((state) => state.setNode);
+ const setNodeMatrixIndices = useMainSceneStore(
(state) => state.setNodeMatrixIndices
);
// node hud setter
- const setHudId = useHudStore((state) => state.setId);
+ const setHud = useMainSceneStore((state) => state.setHud);
const changeSite = useCallback(
(site: string) => {
@@ -71,19 +69,19 @@ const GameLoader = (props: StateManagerProps) => {
setBigText(targetYellowText);
// load new site node
- setActiveNodeState(siteToLoad.activeNodeId, "id");
+ setActiveNode(siteToLoad.activeNodeId);
setNodeMatrixIndices(siteToLoad.nodeMatrixIndices);
// load new site node hud
- setHudId(siteToLoad.nodeHudId);
+ setHud(siteToLoad.nodeHudId);
},
[
setActiveLevel,
- setActiveNodeState,
+ setActiveNode,
setBigTexPos,
setBigText,
setCurrentSite,
- setHudId,
+ setHud,
setNodeMatrixIndices,
setSiteTransformState,
siteASaveState,
diff --git a/src/core/StateManagers/MainSceneEventManager.tsx b/src/core/StateManagers/MainSceneEventManager.tsx
index b1b2436..9fdc3ab 100644
--- a/src/core/StateManagers/MainSceneEventManager.tsx
+++ b/src/core/StateManagers/MainSceneEventManager.tsx
@@ -3,7 +3,6 @@ import {
useLevelSelectionStore,
useLevelStore,
useMainSceneStore,
- useNodeStore,
usePauseStore,
useSiteStore,
} from "../../store";
@@ -32,8 +31,8 @@ type MainSceneEventManagerProps = {
const MainSceneEventManager = (props: MainSceneEventManagerProps) => {
// all the possible context needed to calculate new state
const currentSite = useSiteStore((state) => state.currentSite);
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices);
+ const activeNodeId = useMainSceneStore((state) => state.activeNodeState.id);
+ const nodeMatrixIndices = useMainSceneStore((state) => state.activeNodeMatrixIndices);
const siteTransformState = useSiteStore((state) => state.transformState);
const activeLevel = useLevelStore((state) => state.activeLevel);
const mainSubscene = useMainSceneStore((state) => state.subscene);
@@ -44,7 +43,7 @@ const MainSceneEventManager = (props: MainSceneEventManagerProps) => {
pauseMatrixIdx,
])
);
- const gameProgress = useNodeStore((state) => state.gameProgress);
+ const gameProgress = useMainSceneStore((state) => state.gameProgress);
const timePassedSinceLastKeyPress = useRef(-1);
diff --git a/src/core/StateManagers/MainSceneManagers/BigTextManager.tsx b/src/core/StateManagers/MainSceneManagers/BigTextManager.tsx
index f5781ba..8ab7825 100644
--- a/src/core/StateManagers/MainSceneManagers/BigTextManager.tsx
+++ b/src/core/StateManagers/MainSceneManagers/BigTextManager.tsx
@@ -1,10 +1,10 @@
import { useCallback, useEffect } from "react";
-import node_huds from "../../../resources/node_huds.json";
import site_a from "../../../resources/site_a.json";
import site_b from "../../../resources/site_b.json";
import { useMainSceneStore } from "../../../store";
-import { SiteType } from "../../../components/MainScene/SyncedComponents/Site";
+import { NodeDataType } from "../../../components/MainScene/SyncedComponents/Site";
import { StateManagerProps } from "../EventManager";
+import { HUDType } from "../../../components/MainScene/SyncedComponents/HUD";
const BigTextManager = (props: StateManagerProps) => {
const setText = useMainSceneStore((state) => state.setBigText);
@@ -13,17 +13,12 @@ const BigTextManager = (props: StateManagerProps) => {
const setXOffset = useMainSceneStore((state) => state.setBigTextXOffset);
const setPos = useMainSceneStore((state) => state.setBigTextPos);
- const siteData = useMainSceneStore(
- useCallback((state) => (state.activeSite === "a" ? site_a : site_b), [])
- );
-
const animateYellowTextWithMove = useCallback(
(
posXOffset: number,
posYOffset: number,
- newActiveHudId: string,
- newActiveNodeId: string,
- newLevel: string,
+ hud: HUDType,
+ node: NodeDataType | "UNKNOWN",
delay: number
) => {
// animate the letters to match that of site's
@@ -40,12 +35,9 @@ const BigTextManager = (props: StateManagerProps) => {
setTimeout(() => {
// animate it to new pos x/y
- setPos(node_huds[newActiveHudId as keyof typeof node_huds].big_text);
+ setPos(hud.big_text);
// set new text according to the node name
- const targetText =
- newActiveNodeId === "UNKNOWN"
- ? "Unknown"
- : (siteData as SiteType)[newLevel][newActiveNodeId].node_name;
+ const targetText = node === "UNKNOWN" ? "Unknown" : node.node_name;
setText(targetText);
}, 3000);
@@ -55,22 +47,22 @@ const BigTextManager = (props: StateManagerProps) => {
setXOffset(0);
}, 3900);
},
- [setPos, setText, setXOffset, siteData]
+ [setPos, setText, setXOffset]
);
const animateYellowTextWithoutMove = useCallback(
- (newActiveHudId: string, newActiveNodeId: string, level: string) => {
+ (hud: HUDType, node: NodeDataType) => {
// make current hud big text shrink
setXOffset(-1);
setTimeout(() => {
// animate it to new pos x/y
- setPos(node_huds[newActiveHudId as keyof typeof node_huds].big_text);
+ setPos(hud.big_text);
}, 400);
setTimeout(() => {
// set new text according to the node name
- setText((siteData as SiteType)[level][newActiveNodeId].node_name);
+ setText(node.node_name);
}, 1000);
setTimeout(() => {
@@ -78,7 +70,7 @@ const BigTextManager = (props: StateManagerProps) => {
setXOffset(0);
}, 1200);
},
- [setPos, setText, setXOffset, siteData]
+ [setPos, setText, setXOffset]
);
const initializeLevelSelection = useCallback(() => {
@@ -99,36 +91,33 @@ const BigTextManager = (props: StateManagerProps) => {
}, [setColor, setPos, setText, setXOffset]);
const levelSelectionBack = useCallback(
- (activeNodeId: string, activeHudId: string, level: string) => {
+ (node: NodeDataType, hud: HUDType) => {
setXOffset(-1);
setTimeout(() => {
- setPos(node_huds[activeHudId as keyof typeof node_huds].big_text);
+ setPos(hud.big_text);
}, 400);
setTimeout(() => {
setColor("yellow");
- setText((siteData as SiteType)[level][activeNodeId].node_name);
+ setText(node.node_name);
}, 1000);
setTimeout(() => {
setXOffset(0);
}, 1200);
},
- [setColor, setPos, setText, setXOffset, siteData]
+ [setColor, setPos, setText, setXOffset]
);
const toggleVisibleAfterLevelSelect = useCallback(
- (activeNodeId: string, activeHudId: string, level: string) => {
+ (node: NodeDataType | "UNKNOWN", hud: HUDType) => {
setVisible(false);
setTimeout(() => {
- setPos(node_huds[activeHudId as keyof typeof node_huds].big_text[0]);
+ setPos(hud.big_text[0]);
setColor("yellow");
- const targetText =
- activeNodeId === "UNKNOWN"
- ? "Unknown"
- : (siteData as SiteType)[level][activeNodeId].node_name;
+ const targetText = node === "UNKNOWN" ? "Unknown" : node.node_name;
setText(targetText);
}, 400);
@@ -137,82 +126,46 @@ const BigTextManager = (props: StateManagerProps) => {
setVisible(true);
}, 3900);
},
- [setColor, setPos, setText, setVisible, siteData]
+ [setColor, setPos, setText, setVisible]
);
const dispatchObject = useCallback(
(eventState: {
event: string;
- activeHudId: string;
- activeNodeId: string;
+ hud: HUDType;
+ node: NodeDataType;
level: string;
}) => {
switch (eventState.event) {
case "site_up":
return {
action: animateYellowTextWithMove,
- value: [
- 0,
- -1.5,
- eventState.activeHudId,
- eventState.activeNodeId,
- eventState.level,
- 1300,
- ],
+ value: [0, -1.5, eventState.hud, eventState.node, 1300],
};
case "site_down":
return {
action: animateYellowTextWithMove,
- value: [
- 0,
- 1.5,
- eventState.activeHudId,
- eventState.activeNodeId,
- eventState.level,
- 1300,
- ],
+ value: [0, 1.5, eventState.hud, eventState.node, 1300],
};
case "site_left":
return {
action: animateYellowTextWithMove,
- value: [
- Math.PI / 4,
- 0,
- eventState.activeHudId,
- eventState.activeNodeId,
- eventState.level,
- 1100,
- ],
+ value: [Math.PI / 4, 0, eventState.hud, eventState.node, 1100],
};
case "site_right":
return {
action: animateYellowTextWithMove,
- value: [
- -Math.PI / 4,
- 0,
- eventState.activeHudId,
- eventState.activeNodeId,
- eventState.level,
- 1100,
- ],
+ value: [-Math.PI / 4, 0, eventState.hud, eventState.node, 1100],
};
case "change_node":
return {
action: animateYellowTextWithoutMove,
- value: [
- eventState.activeHudId,
- eventState.activeNodeId,
- eventState.level,
- ],
+ value: [eventState.hud, eventState.node],
};
case "level_selection_back":
return {
action: levelSelectionBack,
- value: [
- eventState.activeNodeId,
- eventState.activeHudId,
- eventState.level,
- ],
+ value: [eventState.node, eventState.hud],
};
case "toggle_level_selection":
return {
@@ -222,11 +175,7 @@ const BigTextManager = (props: StateManagerProps) => {
case "select_level_down":
return {
action: toggleVisibleAfterLevelSelect,
- value: [
- eventState.activeNodeId,
- eventState.activeHudId,
- eventState.level,
- ],
+ value: [eventState.node, eventState.hud],
};
}
},
diff --git a/src/core/StateManagers/MainSceneManagers/LainManager.tsx b/src/core/StateManagers/MainSceneManagers/LainManager.tsx
index 502a504..fdb3298 100644
--- a/src/core/StateManagers/MainSceneManagers/LainManager.tsx
+++ b/src/core/StateManagers/MainSceneManagers/LainManager.tsx
@@ -1,9 +1,9 @@
import { useCallback, useEffect } from "react";
-import { useLainStore } from "../../../store";
+import { useMainSceneStore } from "../../../store";
import { StateManagerProps } from "../EventManager";
const LainManager = (props: StateManagerProps) => {
- const setLainMoveState = useLainStore((state) => state.setLainMoveState);
+ const setLainMoveState = useMainSceneStore((state) => state.setLainMoveState);
const dispatchObject = useCallback(
(eventState: { event: string }) => {
diff --git a/src/core/StateManagers/MainSceneManagers/NodeHUDManager.tsx b/src/core/StateManagers/MainSceneManagers/NodeHUDManager.tsx
index c04b94d..8e0161a 100644
--- a/src/core/StateManagers/MainSceneManagers/NodeHUDManager.tsx
+++ b/src/core/StateManagers/MainSceneManagers/NodeHUDManager.tsx
@@ -1,47 +1,48 @@
import { useCallback, useEffect } from "react";
-import { useHudStore } from "../../../store";
+import { useMainSceneStore } from "../../../store";
import { StateManagerProps } from "../EventManager";
+import {HUDType} from "../../../components/MainScene/SyncedComponents/HUD";
const NodeHUDManager = (props: StateManagerProps) => {
- const setId = useHudStore((state) => state.setId);
- const toggleActive = useHudStore((state) => state.toggleActive);
+ const set = useMainSceneStore((state) => state.setHud);
+ const toggleActive = useMainSceneStore((state) => state.toggleHudActive);
const moveAndChangeNode = useCallback(
- (targetNodeHudId: string) => {
+ (hud: HUDType) => {
toggleActive();
setTimeout(() => {
- setId(targetNodeHudId);
+ set(hud);
toggleActive();
}, 3900);
},
- [setId, toggleActive]
+ [set, toggleActive]
);
const changeNode = useCallback(
- (targetNodeHudId: string) => {
+ (hud: HUDType) => {
toggleActive();
setTimeout(() => {
- setId(targetNodeHudId);
+ set(hud);
toggleActive();
}, 500);
},
- [setId, toggleActive]
+ [set, toggleActive]
);
const selectLevelAnimation = useCallback(
- (targetNodeHudId: string) => {
+ (hud: HUDType) => {
setTimeout(() => {
- setId(targetNodeHudId);
+ set(hud);
toggleActive();
}, 3900);
},
- [setId, toggleActive]
+ [set, toggleActive]
);
const dispatchObject = useCallback(
- (eventState: { event: string; activeHudId: string }) => {
+ (eventState: { event: string; hud: HUDType }) => {
switch (eventState.event) {
case "site_up":
case "site_down":
@@ -49,12 +50,12 @@ const NodeHUDManager = (props: StateManagerProps) => {
case "site_right":
return {
action: moveAndChangeNode,
- value: [eventState.activeHudId],
+ value: [eventState.hud],
};
case "change_node":
return {
action: changeNode,
- value: [eventState.activeHudId],
+ value: [eventState.hud],
};
case "toggle_level_selection":
case "level_selection_back":
@@ -65,7 +66,7 @@ const NodeHUDManager = (props: StateManagerProps) => {
case "select_level_down":
return {
action: selectLevelAnimation,
- value: [eventState.activeHudId],
+ value: [eventState.hud],
};
}
},
diff --git a/src/core/StateManagers/MainSceneManagers/NodeManager.tsx b/src/core/StateManagers/MainSceneManagers/NodeManager.tsx
index 6e16504..962b4f3 100644
--- a/src/core/StateManagers/MainSceneManagers/NodeManager.tsx
+++ b/src/core/StateManagers/MainSceneManagers/NodeManager.tsx
@@ -1,10 +1,12 @@
import { useCallback, useEffect } from "react";
-import { useNodeStore } from "../../../store";
+import { useMainSceneStore } from "../../../store";
import { StateManagerProps } from "../EventManager";
+import { NodeDataType } from "../../../components/MainScene/SyncedComponents/Site";
const NodeManager = (props: StateManagerProps) => {
- const setActiveNodeState = useNodeStore((state) => state.setActiveNodeState);
- const setNodeMatrixIndices = useNodeStore(
+ const setActiveNode = useMainSceneStore((state) => state.setNode);
+ const setActiveNodeState = useMainSceneStore((state) => state.setNodeState);
+ const setNodeMatrixIndices = useMainSceneStore(
(state) => state.setNodeMatrixIndices
);
@@ -173,7 +175,7 @@ const NodeManager = (props: StateManagerProps) => {
const updateActiveNode = useCallback(
(
- newActiveNodeId: string,
+ node: NodeDataType,
newNodeMatrixIndices: {
matrixIdx: number;
rowIdx: number;
@@ -183,17 +185,17 @@ const NodeManager = (props: StateManagerProps) => {
delay?: number
) => {
setTimeout(() => {
- setActiveNodeState(newActiveNodeId, "id");
+ setActiveNode(node);
setNodeMatrixIndices(newNodeMatrixIndices);
}, delay);
},
- [setActiveNodeState, setNodeMatrixIndices]
+ [setActiveNode, setNodeMatrixIndices]
);
const dispatchObject = useCallback(
(eventState: {
event: string;
- activeNodeId: string;
+ node: NodeDataType;
nodeMatrixIndices: {
matrixIdx: number;
rowIdx: number;
@@ -202,6 +204,7 @@ const NodeManager = (props: StateManagerProps) => {
siteRotY: number;
idleNodeId?: string;
}) => {
+ console.log(eventState.node);
switch (eventState.event) {
case "site_up":
case "site_down":
@@ -211,17 +214,12 @@ const NodeManager = (props: StateManagerProps) => {
case "select_level_down":
return {
action: updateActiveNode,
- value: [
- eventState.activeNodeId,
- eventState.nodeMatrixIndices,
- true,
- 3900,
- ],
+ value: [eventState.node, eventState.nodeMatrixIndices, true, 3900],
};
case "change_node":
return {
action: updateActiveNode,
- value: [eventState.activeNodeId, eventState.nodeMatrixIndices],
+ value: [eventState.node, eventState.nodeMatrixIndices],
};
case "throw_node_media":
case "throw_node_gate":
diff --git a/src/core/mainSceneEventHandler.ts b/src/core/mainSceneEventHandler.ts
index 6ecad5f..5dbfefc 100644
--- a/src/core/mainSceneEventHandler.ts
+++ b/src/core/mainSceneEventHandler.ts
@@ -1,7 +1,4 @@
-import site_a from "../resources/site_a.json";
-import site_b from "../resources/site_b.json";
-import nodeSelector, { getNodeHudId, getNodeId } from "./nodeSelector";
-import { SiteType } from "../components/MainScene/SyncedComponents/Site";
+import nodeSelector, { getNode, getNodeHud } from "./nodeSelector";
const handleMainSceneEvent = (gameContext: any) => {
let event;
@@ -17,8 +14,8 @@ const handleMainSceneEvent = (gameContext: any) => {
const siteASaveState = gameContext.siteASaveState;
const siteBSaveState = gameContext.siteBSaveState;
- let activeNodeId = gameContext.activeNodeId;
- let activeHudId;
+ let activeNode = gameContext.activeNode;
+ let activeHud;
let nodeMatrixIndices = gameContext.nodeMatrixIndices;
let level = parseInt(gameContext.activeLevel);
let siteRotY = gameContext.siteTransformState.rotY;
@@ -34,7 +31,7 @@ const handleMainSceneEvent = (gameContext: any) => {
case "UP":
selectedNodeData = nodeSelector({
action: `site_${keyPress.toLowerCase()}`,
- activeId: activeNodeId,
+ activeId: activeNode,
nodeMatrixIndices: nodeMatrixIndices,
level: level,
siteRotY: siteRotY,
@@ -45,12 +42,12 @@ const handleMainSceneEvent = (gameContext: any) => {
if (selectedNodeData) {
event = selectedNodeData.event;
- activeNodeId = selectedNodeData.newActiveNodeId;
+ activeNode = selectedNodeData.node;
nodeMatrixIndices = selectedNodeData.newNodeMatrixIndices;
siteRotY = selectedNodeData.newSiteRotY;
sitePosY = selectedNodeData.newSitePosY;
level = selectedNodeData.newLevel;
- activeHudId = selectedNodeData.newActiveHudId;
+ activeHud = selectedNodeData.newActiveHud;
}
break;
@@ -58,14 +55,9 @@ const handleMainSceneEvent = (gameContext: any) => {
// in this case we have to check the type of the blue orb
// and dispatch an action depending on that, so we have to precalculate the
// new active blue orb here.
- activeNodeId = getNodeId(level, nodeMatrixIndices);
+ activeNode = getNode(level, nodeMatrixIndices, currentSite);
- const siteData = currentSite === "a" ? site_a : site_b;
-
- const nodeData = (siteData as SiteType)[gameContext.activeLevel][
- activeNodeId
- ];
- const nodeType = nodeData.type;
+ const nodeType = activeNode.type;
const eventAnimation = Math.random() < 0.4 ? "rip_node" : "throw_node";
@@ -79,7 +71,7 @@ const handleMainSceneEvent = (gameContext: any) => {
scene = "media";
break;
case 6:
- if (nodeData.node_name.substr(0, 3) === "TaK") {
+ if (activeNode.node_name.substr(0, 3) === "TaK") {
event = `${eventAnimation}_tak`;
scene = "tak";
} else {
@@ -112,8 +104,8 @@ const handleMainSceneEvent = (gameContext: any) => {
siteRotY: siteRotY,
level: level.toString().padStart(2, "0"),
scene: scene,
- activeNodeId: activeNodeId,
- activeHudId: activeHudId,
+ node: activeNode,
+ hud: activeHud,
};
} else if (subscene === "level_selection") {
switch (keyPress) {
@@ -142,14 +134,13 @@ const handleMainSceneEvent = (gameContext: any) => {
case "X":
return {
event: "level_selection_back",
- activeNodeId: getNodeId(level, nodeMatrixIndices),
- activeHudId: getNodeHudId(nodeMatrixIndices),
- level: level.toString().padStart(2, "0"),
+ node: getNode(level, nodeMatrixIndices, currentSite),
+ hud: getNodeHud(nodeMatrixIndices),
};
case "CIRCLE":
const selectedNodeData = nodeSelector({
action: "select_level",
- activeId: activeNodeId,
+ activeId: activeNode,
nodeMatrixIndices: nodeMatrixIndices,
level: selectedLevel,
siteRotY: siteRotY,
@@ -165,8 +156,8 @@ const handleMainSceneEvent = (gameContext: any) => {
return {
event: event,
level: selectedLevel.toString().padStart(2, "0"),
- activeNodeId: selectedNodeData.newActiveNodeId,
- activeHudId: selectedNodeData.newActiveHudId,
+ activeNodeId: selectedNodeData.node,
+ activeHud: selectedNodeData.newActiveHud,
nodeMatrixIndices: selectedNodeData.newNodeMatrixIndices,
sitePosY: -selectedNodeData.newSitePosY,
};
@@ -191,9 +182,9 @@ const handleMainSceneEvent = (gameContext: any) => {
event: `pause_${activePauseComponent}_select`,
currentSitePosY: sitePosY,
currentSiteRotY: siteRotY,
- currentNodeId: activeNodeId,
+ currentNodeId: activeNode,
currentNodeMatrixIndices: nodeMatrixIndices,
- currentHudId: getNodeHudId(nodeMatrixIndices),
+ currentHud: getNodeHud(nodeMatrixIndices),
currentLevel: level.toString().padStart(2, "0"),
site: currentSite === "a" ? "b" : "a",
};
diff --git a/src/core/nodeSelector.ts b/src/core/nodeSelector.ts
index 2e9b847..1696753 100644
--- a/src/core/nodeSelector.ts
+++ b/src/core/nodeSelector.ts
@@ -1,9 +1,13 @@
import node_matrices from "../resources/node_matrices.json";
import site_a from "../resources/site_a.json";
import site_b from "../resources/site_b.json";
-import { SiteType } from "../components/MainScene/SyncedComponents/Site";
+import {
+ NodeDataType,
+ SiteType,
+} from "../components/MainScene/SyncedComponents/Site";
import unlocked_nodes from "../resources/initial_progress.json";
import level_y_values from "../resources/level_y_values.json";
+import node_huds from "../resources/node_huds.json";
type NodeSelectorContext = {
action: string;
@@ -31,41 +35,45 @@ const hudAssocs = {
"23": "fg_hud_6",
};
-export const getNodeId = (
+export const getNode = (
level: number,
nodeMatrixIndices: {
matrixIdx: number;
rowIdx: number;
colIdx: number;
- }
+ },
+ currentSite: string
) => {
- return (
- level.toString().padStart(2, "0") +
+ const siteData = currentSite === "a" ? site_a : site_b;
+
+ const formattedLevel = level.toString().padStart(2, "0");
+ const nodePos =
node_matrices[
nodeMatrixIndices.matrixIdx.toString() as keyof typeof node_matrices
- ][nodeMatrixIndices.rowIdx][nodeMatrixIndices.colIdx]
- );
+ ][nodeMatrixIndices.rowIdx][nodeMatrixIndices.colIdx];
+
+ const id = formattedLevel + nodePos;
+
+ return (siteData as SiteType)[formattedLevel][id];
};
-export const getNodeHudId = (nodeMatrixIndices: {
+export const getNodeHud = (nodeMatrixIndices: {
matrixIdx: number;
rowIdx: number;
colIdx: number;
}) =>
- hudAssocs[
- `${nodeMatrixIndices.rowIdx}${nodeMatrixIndices.colIdx}` as keyof typeof hudAssocs
+ node_huds[
+ hudAssocs[
+ `${nodeMatrixIndices.rowIdx}${nodeMatrixIndices.colIdx}` as keyof typeof hudAssocs
+ ] as keyof typeof node_huds
];
export const isNodeVisible = (
- nodeId: string,
- gameProgress: typeof unlocked_nodes,
- currentSite: string
+ node: NodeDataType,
+ gameProgress: typeof unlocked_nodes
) => {
- const siteData = currentSite === "a" ? site_a : site_b;
- const nodeLevel = nodeId.substr(0, 2);
- const nodeData = (siteData as SiteType)[nodeLevel][nodeId];
- if (nodeData) {
- const unlockedBy = nodeData.unlocked_by;
+ if (node) {
+ const unlockedBy = node.unlocked_by;
let unlocked;
if (unlockedBy === "") unlocked = true;
@@ -77,7 +85,7 @@ export const isNodeVisible = (
return (
unlocked &&
- gameProgress[nodeData.node_name as keyof typeof gameProgress].is_visible
+ gameProgress[node.node_name as keyof typeof gameProgress].is_visible
);
} else {
return false;
@@ -106,9 +114,13 @@ const findNodeAfterLevelSelection = (
newMatIndices.rowIdx = 0;
- let newNodeId = getNodeId(targetLevel, newMatIndices);
+ let newNode: NodeDataType | "UNKNOWN" = getNode(
+ targetLevel,
+ newMatIndices,
+ currentSite
+ );
- while (!isNodeVisible(newNodeId, gameProgress, currentSite)) {
+ while (!isNodeVisible(newNode, gameProgress)) {
if (triedCols.length < 4) {
triedCols.push(newMatIndices.colIdx);
const colToTry = tryCol(newMatIndices.colIdx, triedCols);
@@ -118,7 +130,7 @@ const findNodeAfterLevelSelection = (
} else {
if (newMatIndices.rowIdx === 2) {
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
- newNodeId = "UNKNOWN";
+ newNode = "UNKNOWN";
break;
} else {
newMatIndices.rowIdx++;
@@ -126,15 +138,15 @@ const findNodeAfterLevelSelection = (
newMatIndices.colIdx = 0;
}
}
- newNodeId = getNodeId(targetLevel, newMatIndices);
+ newNode = getNode(targetLevel, newMatIndices, currentSite);
}
- const newNodeHudId = getNodeHudId(newMatIndices);
+ const newNodeHud = getNodeHud(newMatIndices);
return {
newLevel: targetLevel,
- newNodeId: newNodeId,
- newNodeHudId: newNodeHudId,
+ node: newNode,
+ newNodeHud: newNodeHud,
newNodeMatrixIndices: newMatIndices,
newSitePosY:
level_y_values[
@@ -150,7 +162,7 @@ const findNodeVertical = (
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number },
currentSite: string
) => {
- let newNodeId;
+ let newNode: NodeDataType | "UNKNOWN";
let newLevel = level;
let newMatIndices = Object.assign({}, nodeMatrixIndices);
@@ -164,9 +176,9 @@ const findNodeVertical = (
newLevel = level - 1;
}
- newNodeId = getNodeId(newLevel, newMatIndices);
+ newNode = getNode(newLevel, newMatIndices, currentSite);
- while (!isNodeVisible(newNodeId, gameProgress, currentSite)) {
+ while (!isNodeVisible(newNode, gameProgress)) {
if (triedCols.length < 4) {
triedCols.push(newMatIndices.colIdx);
const colToTry = tryCol(newMatIndices.colIdx, triedCols);
@@ -176,7 +188,7 @@ const findNodeVertical = (
} else {
if (newMatIndices.rowIdx === 2) {
if (newLevel === level - 1) {
- newNodeId = "UNKNOWN";
+ newNode = "UNKNOWN";
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
break;
}
@@ -188,7 +200,7 @@ const findNodeVertical = (
triedCols = [];
}
}
- newNodeId = getNodeId(newLevel, newMatIndices);
+ newNode = getNode(newLevel, newMatIndices, currentSite);
}
} else if (direction === "up") {
newMatIndices.rowIdx--;
@@ -200,9 +212,9 @@ const findNodeVertical = (
newLevel = level + 1;
}
- newNodeId = getNodeId(newLevel, newMatIndices);
+ newNode = getNode(newLevel, newMatIndices, currentSite);
- while (!isNodeVisible(newNodeId, gameProgress, currentSite)) {
+ while (!isNodeVisible(newNode, gameProgress)) {
if (triedCols.length < 4) {
triedCols.push(newMatIndices.colIdx);
const colToTry = tryCol(newMatIndices.colIdx, triedCols);
@@ -212,7 +224,7 @@ const findNodeVertical = (
} else {
if (newMatIndices.rowIdx === 0) {
if (newLevel === level + 1) {
- newNodeId = "UNKNOWN";
+ newNode = "UNKNOWN";
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
break;
}
@@ -224,13 +236,13 @@ const findNodeVertical = (
triedCols = [];
}
}
- newNodeId = getNodeId(newLevel, newMatIndices);
+ newNode = getNode(newLevel, newMatIndices, currentSite);
}
}
return {
- newNodeId: newNodeId,
- newNodeHudId: getNodeHudId(newMatIndices),
+ node: newNode!,
+ newNodeHud: getNodeHud(newMatIndices),
newLevel: newLevel,
newNodeMatrixIndices: newMatIndices,
};
@@ -244,7 +256,7 @@ const findNodeHorizontal = (
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number },
currentSite: string
) => {
- let newNodeId;
+ let newNode: NodeDataType | "UNKNOWN";
let newMatIndices = Object.assign({}, nodeMatrixIndices);
let didMove = false;
@@ -261,9 +273,9 @@ const findNodeHorizontal = (
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1;
}
- newNodeId = getNodeId(level, newMatIndices);
+ newNode = getNode(level, newMatIndices, currentSite);
- while (!isNodeVisible(newNodeId, gameProgress, currentSite)) {
+ while (!isNodeVisible(newNode, gameProgress)) {
if (triedRows.length < 3) {
triedRows.push(newMatIndices.rowIdx);
const rowToTry = tryRow(newMatIndices.rowIdx, triedRows);
@@ -279,7 +291,7 @@ const findNodeHorizontal = (
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
newMatIndices.matrixIdx =
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1;
- newNodeId = "UNKNOWN";
+ newNode = "UNKNOWN";
break;
} else {
didMove = true;
@@ -293,7 +305,7 @@ const findNodeHorizontal = (
newMatIndices.rowIdx = 0;
}
}
- newNodeId = getNodeId(level, newMatIndices);
+ newNode = getNode(level, newMatIndices, currentSite);
}
} else if (direction === "right") {
newMatIndices.colIdx++;
@@ -307,9 +319,9 @@ const findNodeHorizontal = (
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1;
}
- newNodeId = getNodeId(level, newMatIndices);
+ newNode = getNode(level, newMatIndices, currentSite);
- while (!isNodeVisible(newNodeId, gameProgress, currentSite)) {
+ while (!isNodeVisible(newNode, gameProgress)) {
if (triedRows.length < 3) {
triedRows.push(newMatIndices.rowIdx);
const rowToTry = tryRow(newMatIndices.rowIdx, triedRows);
@@ -325,7 +337,7 @@ const findNodeHorizontal = (
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
newMatIndices.matrixIdx =
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1;
- newNodeId = "UNKNOWN";
+ newNode = "UNKNOWN";
break;
} else {
if (didMove) return;
@@ -344,16 +356,16 @@ const findNodeHorizontal = (
newMatIndices.rowIdx = 0;
}
}
- newNodeId = getNodeId(level, newMatIndices);
+ newNode = getNode(level, newMatIndices, currentSite);
}
}
- const newNodeHudId = getNodeHudId(newMatIndices);
+ const newNodeHud = getNodeHud(newMatIndices);
return {
didMove: didMove,
- newNodeId: newNodeId,
- newNodeHudId: newNodeHudId,
+ node: newNode!,
+ newNodeHud: newNodeHud,
newNodeMatrixIndices: newMatIndices,
};
};
@@ -380,8 +392,8 @@ const nodeSelector = (context: NodeSelectorContext) => {
return {
event: newNodeData.didMove ? context.action : "change_node",
- newActiveNodeId: newNodeData.newNodeId,
- newActiveHudId: newNodeData.newNodeHudId,
+ node: newNodeData.node,
+ newActiveHud: newNodeData.newNodeHud,
newNodeMatrixIndices: newNodeData.newNodeMatrixIndices,
newSiteRotY: newNodeData.didMove
? context.siteRotY + siteRotYModifier
@@ -408,9 +420,9 @@ const nodeSelector = (context: NodeSelectorContext) => {
const sitePosYModifier = move === "up" ? -1.5 : 1.5;
return {
event: didMove ? context.action : "change_node",
- newActiveNodeId: newNodeData.newNodeId,
+ node: newNodeData.node,
newNodeMatrixIndices: newNodeData.newNodeMatrixIndices,
- newActiveHudId: newNodeData.newNodeHudId,
+ newActiveHud: newNodeData.newNodeHud,
newSiteRotY: context.siteRotY,
newSitePosY: didMove
? context.sitePosY + sitePosYModifier
@@ -429,9 +441,9 @@ const nodeSelector = (context: NodeSelectorContext) => {
if (newNodeData) {
return {
- newActiveNodeId: newNodeData.newNodeId,
+ node: newNodeData.node,
newNodeMatrixIndices: newNodeData.newNodeMatrixIndices,
- newActiveHudId: newNodeData.newNodeHudId,
+ newActiveHud: newNodeData.newNodeHud,
newSiteRotY: context.siteRotY,
newLevel: newNodeData.newLevel,
newSitePosY: newNodeData.newSitePosY,
diff --git a/src/resources/site_a.json b/src/resources/site_a.json
index b1223c2..b7c024b 100644
--- a/src/resources/site_a.json
+++ b/src/resources/site_a.json
@@ -1,6 +1,7 @@
{
"00": {
"0000": {
+ "id": "0000",
"image_table_indices": {
"1": "401",
"2": "404",
@@ -28,6 +29,7 @@
}
},
"0001": {
+ "id": "0001",
"image_table_indices": {
"1": "320",
"2": "346",
@@ -55,6 +57,7 @@
}
},
"0002": {
+ "id": "0002",
"image_table_indices": {
"1": "668",
"2": "667",
@@ -82,6 +85,7 @@
}
},
"0003": {
+ "id": "0003",
"image_table_indices": {
"1": "664",
"2": "647",
@@ -109,6 +113,7 @@
}
},
"0004": {
+ "id": "0004",
"image_table_indices": {
"1": "658",
"2": "630",
@@ -136,6 +141,7 @@
}
},
"0005": {
+ "id": "0005",
"image_table_indices": {
"1": "504",
"2": "514",
@@ -163,6 +169,7 @@
}
},
"0006": {
+ "id": "0006",
"image_table_indices": {
"1": "524",
"2": "476",
@@ -190,6 +197,7 @@
}
},
"0007": {
+ "id": "0007",
"image_table_indices": {
"1": "400",
"2": "396",
@@ -217,6 +225,7 @@
}
},
"0008": {
+ "id": "0008",
"image_table_indices": {
"1": "399",
"2": "398",
@@ -244,6 +253,7 @@
}
},
"0009": {
+ "id": "0009",
"image_table_indices": {
"1": "402",
"2": "397",
@@ -273,6 +283,7 @@
},
"01": {
"0100": {
+ "id": "0100",
"image_table_indices": {
"1": "266",
"2": "665",
@@ -300,6 +311,7 @@
}
},
"0101": {
+ "id": "0101",
"image_table_indices": {
"1": "666",
"2": "592",
@@ -327,6 +339,7 @@
}
},
"0104": {
+ "id": "0104",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -354,6 +367,7 @@
}
},
"0109": {
+ "id": "0109",
"image_table_indices": {
"1": "462",
"2": "678",
@@ -381,6 +395,7 @@
}
},
"0110": {
+ "id": "0110",
"image_table_indices": {
"1": "463",
"2": "204",
@@ -408,6 +423,7 @@
}
},
"0112": {
+ "id": "0112",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -435,6 +451,7 @@
}
},
"0114": {
+ "id": "0114",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -462,6 +479,7 @@
}
},
"0116": {
+ "id": "0116",
"image_table_indices": {
"1": "680",
"2": "692",
@@ -489,6 +507,7 @@
}
},
"0118": {
+ "id": "0118",
"image_table_indices": {
"1": "467",
"2": "454",
@@ -516,6 +535,7 @@
}
},
"0119": {
+ "id": "0119",
"image_table_indices": {
"1": "468",
"2": "38",
@@ -543,6 +563,7 @@
}
},
"0120": {
+ "id": "0120",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -570,6 +591,7 @@
}
},
"0121": {
+ "id": "0121",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -597,6 +619,7 @@
}
},
"0123": {
+ "id": "0123",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -626,6 +649,7 @@
},
"02": {
"0201": {
+ "id": "0201",
"image_table_indices": {
"1": "693",
"2": "628",
@@ -653,6 +677,7 @@
}
},
"0202": {
+ "id": "0202",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -680,6 +705,7 @@
}
},
"0203": {
+ "id": "0203",
"image_table_indices": {
"1": "469",
"2": "211",
@@ -707,6 +733,7 @@
}
},
"0204": {
+ "id": "0204",
"image_table_indices": {
"1": "488",
"2": "475",
@@ -734,6 +761,7 @@
}
},
"0205": {
+ "id": "0205",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -761,6 +789,7 @@
}
},
"0206": {
+ "id": "0206",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -788,6 +817,7 @@
}
},
"0207": {
+ "id": "0207",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -815,6 +845,7 @@
}
},
"0208": {
+ "id": "0208",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -842,6 +873,7 @@
}
},
"0209": {
+ "id": "0209",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -869,6 +901,7 @@
}
},
"0210": {
+ "id": "0210",
"image_table_indices": {
"1": "188",
"2": "174",
@@ -896,6 +929,7 @@
}
},
"0211": {
+ "id": "0211",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -923,6 +957,7 @@
}
},
"0212": {
+ "id": "0212",
"image_table_indices": {
"1": "496",
"2": "41",
@@ -950,6 +985,7 @@
}
},
"0213": {
+ "id": "0213",
"image_table_indices": {
"1": "594",
"2": "245",
@@ -977,6 +1013,7 @@
}
},
"0215": {
+ "id": "0215",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1004,6 +1041,7 @@
}
},
"0217": {
+ "id": "0217",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1031,6 +1069,7 @@
}
},
"0218": {
+ "id": "0218",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1058,6 +1097,7 @@
}
},
"0219": {
+ "id": "0219",
"image_table_indices": {
"1": "163",
"2": "171",
@@ -1085,6 +1125,7 @@
}
},
"0221": {
+ "id": "0221",
"image_table_indices": {
"1": "14",
"2": "-1",
@@ -1112,6 +1153,7 @@
}
},
"0222": {
+ "id": "0222",
"image_table_indices": {
"1": "507",
"2": "58",
@@ -1139,6 +1181,7 @@
}
},
"0223": {
+ "id": "0223",
"image_table_indices": {
"1": "521",
"2": "277",
@@ -1168,6 +1211,7 @@
},
"03": {
"0300": {
+ "id": "0300",
"image_table_indices": {
"1": "68",
"2": "280",
@@ -1195,6 +1239,7 @@
}
},
"0301": {
+ "id": "0301",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1222,6 +1267,7 @@
}
},
"0303": {
+ "id": "0303",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1249,6 +1295,7 @@
}
},
"0304": {
+ "id": "0304",
"image_table_indices": {
"1": "173",
"2": "177",
@@ -1276,6 +1323,7 @@
}
},
"0306": {
+ "id": "0306",
"image_table_indices": {
"1": "15",
"2": "-1",
@@ -1303,6 +1351,7 @@
}
},
"0307": {
+ "id": "0307",
"image_table_indices": {
"1": "279",
"2": "67",
@@ -1330,6 +1379,7 @@
}
},
"0308": {
+ "id": "0308",
"image_table_indices": {
"1": "548",
"2": "70",
@@ -1357,6 +1407,7 @@
}
},
"0310": {
+ "id": "0310",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1384,6 +1435,7 @@
}
},
"0312": {
+ "id": "0312",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1411,6 +1463,7 @@
}
},
"0313": {
+ "id": "0313",
"image_table_indices": {
"1": "702",
"2": "661",
@@ -1438,6 +1491,7 @@
}
},
"0314": {
+ "id": "0314",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1465,6 +1519,7 @@
}
},
"0315": {
+ "id": "0315",
"image_table_indices": {
"1": "69",
"2": "547",
@@ -1492,6 +1547,7 @@
}
},
"0316": {
+ "id": "0316",
"image_table_indices": {
"1": "549",
"2": "335",
@@ -1519,6 +1575,7 @@
}
},
"0317": {
+ "id": "0317",
"image_table_indices": {
"1": "337",
"2": "550",
@@ -1546,6 +1603,7 @@
}
},
"0318": {
+ "id": "0318",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1573,6 +1631,7 @@
}
},
"0319": {
+ "id": "0319",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1600,6 +1659,7 @@
}
},
"0321": {
+ "id": "0321",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1627,6 +1687,7 @@
}
},
"0322": {
+ "id": "0322",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1656,6 +1717,7 @@
},
"04": {
"0400": {
+ "id": "0400",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1683,6 +1745,7 @@
}
},
"0401": {
+ "id": "0401",
"image_table_indices": {
"1": "350",
"2": "74",
@@ -1710,6 +1773,7 @@
}
},
"0402": {
+ "id": "0402",
"image_table_indices": {
"1": "76",
"2": "351",
@@ -1737,6 +1801,7 @@
}
},
"0403": {
+ "id": "0403",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1764,6 +1829,7 @@
}
},
"0404": {
+ "id": "0404",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1791,6 +1857,7 @@
}
},
"0405": {
+ "id": "0405",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1818,6 +1885,7 @@
}
},
"0406": {
+ "id": "0406",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1845,6 +1913,7 @@
}
},
"0407": {
+ "id": "0407",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -1872,6 +1941,7 @@
}
},
"0408": {
+ "id": "0408",
"image_table_indices": {
"1": "265",
"2": "54",
@@ -1899,6 +1969,7 @@
}
},
"0409": {
+ "id": "0409",
"image_table_indices": {
"1": "43",
"2": "44",
@@ -1926,6 +1997,7 @@
}
},
"0410": {
+ "id": "0410",
"image_table_indices": {
"1": "79",
"2": "556",
@@ -1953,6 +2025,7 @@
}
},
"0411": {
+ "id": "0411",
"image_table_indices": {
"1": "16",
"2": "-1",
@@ -1980,6 +2053,7 @@
}
},
"0412": {
+ "id": "0412",
"image_table_indices": {
"1": "558",
"2": "353",
@@ -2007,6 +2081,7 @@
}
},
"0413": {
+ "id": "0413",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -2034,6 +2109,7 @@
}
},
"0414": {
+ "id": "0414",
"image_table_indices": {
"1": "31",
"2": "584",
@@ -2061,6 +2137,7 @@
}
},
"0415": {
+ "id": "0415",
"image_table_indices": {
"1": "577",
"2": "583",
@@ -2088,6 +2165,7 @@
}
},
"0416": {
+ "id": "0416",
"image_table_indices": {
"1": "546",
"2": "529",
@@ -2115,6 +2193,7 @@
}
},
"0417": {
+ "id": "0417",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -2142,6 +2221,7 @@
}
},
"0418": {
+ "id": "0418",
"image_table_indices": {
"1": "28",
"2": "53",
@@ -2169,6 +2249,7 @@
}
},
"0419": {
+ "id": "0419",
"image_table_indices": {
"1": "105",
"2": "249",
@@ -2196,6 +2277,7 @@
}
},
"0420": {
+ "id": "0420",
"image_table_indices": {
"1": "354",
"2": "559",
@@ -2223,6 +2305,7 @@
}
},
"0421": {
+ "id": "0421",
"image_table_indices": {
"1": "355",
"2": "83",
@@ -2250,6 +2333,7 @@
}
},
"0422": {
+ "id": "0422",
"image_table_indices": {
"1": "93",
"2": "356",
@@ -2277,6 +2361,7 @@
}
},
"0423": {
+ "id": "0423",
"image_table_indices": {
"1": "495",
"2": "490",
@@ -2306,6 +2391,7 @@
},
"05": {
"0500": {
+ "id": "0500",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -2333,6 +2419,7 @@
}
},
"0501": {
+ "id": "0501",
"image_table_indices": {
"1": "443",
"2": "445",
@@ -2360,6 +2447,7 @@
}
},
"0503": {
+ "id": "0503",
"image_table_indices": {
"1": "256",
"2": "55",
@@ -2387,6 +2475,7 @@
}
},
"0504": {
+ "id": "0504",
"image_table_indices": {
"1": "322",
"2": "324",
@@ -2414,6 +2503,7 @@
}
},
"0505": {
+ "id": "0505",
"image_table_indices": {
"1": "331",
"2": "330",
@@ -2441,6 +2531,7 @@
}
},
"0506": {
+ "id": "0506",
"image_table_indices": {
"1": "94",
"2": "564",
@@ -2468,6 +2559,7 @@
}
},
"0507": {
+ "id": "0507",
"image_table_indices": {
"1": "565",
"2": "95",
@@ -2495,6 +2587,7 @@
}
},
"0508": {
+ "id": "0508",
"image_table_indices": {
"1": "360",
"2": "569",
@@ -2522,6 +2615,7 @@
}
},
"0509": {
+ "id": "0509",
"image_table_indices": {
"1": "361",
"2": "114",
@@ -2549,6 +2643,7 @@
}
},
"0510": {
+ "id": "0510",
"image_table_indices": {
"1": "442",
"2": "439",
@@ -2576,6 +2671,7 @@
}
},
"0511": {
+ "id": "0511",
"image_table_indices": {
"1": "464",
"2": "461",
@@ -2603,6 +2699,7 @@
}
},
"0512": {
+ "id": "0512",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -2630,6 +2727,7 @@
}
},
"0513": {
+ "id": "0513",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -2657,6 +2755,7 @@
}
},
"0514": {
+ "id": "0514",
"image_table_indices": {
"1": "670",
"2": "347",
@@ -2684,6 +2783,7 @@
}
},
"0515": {
+ "id": "0515",
"image_table_indices": {
"1": "566",
"2": "359",
@@ -2711,6 +2811,7 @@
}
},
"0516": {
+ "id": "0516",
"image_table_indices": {
"1": "380",
"2": "390",
@@ -2738,6 +2839,7 @@
}
},
"0517": {
+ "id": "0517",
"image_table_indices": {
"1": "115",
"2": "362",
@@ -2765,6 +2867,7 @@
}
},
"0518": {
+ "id": "0518",
"image_table_indices": {
"1": "116",
"2": "572",
@@ -2792,6 +2895,7 @@
}
},
"0520": {
+ "id": "0520",
"image_table_indices": {
"1": "408",
"2": "409",
@@ -2819,6 +2923,7 @@
}
},
"0521": {
+ "id": "0521",
"image_table_indices": {
"1": "412",
"2": "545",
@@ -2846,6 +2951,7 @@
}
},
"0522": {
+ "id": "0522",
"image_table_indices": {
"1": "608",
"2": "586",
@@ -2873,6 +2979,7 @@
}
},
"0523": {
+ "id": "0523",
"image_table_indices": {
"1": "267",
"2": "348",
@@ -2902,6 +3009,7 @@
},
"06": {
"0600": {
+ "id": "0600",
"image_table_indices": {
"1": "455",
"2": "421",
@@ -2929,6 +3037,7 @@
}
},
"0601": {
+ "id": "0601",
"image_table_indices": {
"1": "393",
"2": "427",
@@ -2956,6 +3065,7 @@
}
},
"0602": {
+ "id": "0602",
"image_table_indices": {
"1": "579",
"2": "118",
@@ -2983,6 +3093,7 @@
}
},
"0603": {
+ "id": "0603",
"image_table_indices": {
"1": "580",
"2": "365",
@@ -3010,6 +3121,7 @@
}
},
"0604": {
+ "id": "0604",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3037,6 +3149,7 @@
}
},
"0606": {
+ "id": "0606",
"image_table_indices": {
"1": "392",
"2": "395",
@@ -3064,6 +3177,7 @@
}
},
"0607": {
+ "id": "0607",
"image_table_indices": {
"1": "349",
"2": "257",
@@ -3091,6 +3205,7 @@
}
},
"0608": {
+ "id": "0608",
"image_table_indices": {
"1": "0",
"2": "-1",
@@ -3118,6 +3233,7 @@
}
},
"0609": {
+ "id": "0609",
"image_table_indices": {
"1": "428",
"2": "465",
@@ -3145,6 +3261,7 @@
}
},
"0610": {
+ "id": "0610",
"image_table_indices": {
"1": "502",
"2": "429",
@@ -3172,6 +3289,7 @@
}
},
"0611": {
+ "id": "0611",
"image_table_indices": {
"1": "371",
"2": "491",
@@ -3199,6 +3317,7 @@
}
},
"0612": {
+ "id": "0612",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3226,6 +3345,7 @@
}
},
"0613": {
+ "id": "0613",
"image_table_indices": {
"1": "1",
"2": "-1",
@@ -3253,6 +3373,7 @@
}
},
"0614": {
+ "id": "0614",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3280,6 +3401,7 @@
}
},
"0615": {
+ "id": "0615",
"image_table_indices": {
"1": "29",
"2": "253",
@@ -3307,6 +3429,7 @@
}
},
"0616": {
+ "id": "0616",
"image_table_indices": {
"1": "258",
"2": "179",
@@ -3334,6 +3457,7 @@
}
},
"0617": {
+ "id": "0617",
"image_table_indices": {
"1": "180",
"2": "259",
@@ -3361,6 +3485,7 @@
}
},
"0618": {
+ "id": "0618",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3388,6 +3513,7 @@
}
},
"0619": {
+ "id": "0619",
"image_table_indices": {
"1": "516",
"2": "372",
@@ -3415,6 +3541,7 @@
}
},
"0620": {
+ "id": "0620",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3442,6 +3569,7 @@
}
},
"0621": {
+ "id": "0621",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3469,6 +3597,7 @@
}
},
"0622": {
+ "id": "0622",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3496,6 +3625,7 @@
}
},
"0623": {
+ "id": "0623",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3525,6 +3655,7 @@
},
"07": {
"0700": {
+ "id": "0700",
"image_table_indices": {
"1": "238",
"2": "220",
@@ -3552,6 +3683,7 @@
}
},
"0701": {
+ "id": "0701",
"image_table_indices": {
"1": "181",
"2": "49",
@@ -3579,6 +3711,7 @@
}
},
"0702": {
+ "id": "0702",
"image_table_indices": {
"1": "50",
"2": "182",
@@ -3606,6 +3739,7 @@
}
},
"0704": {
+ "id": "0704",
"image_table_indices": {
"1": "517",
"2": "411",
@@ -3633,6 +3767,7 @@
}
},
"0705": {
+ "id": "0705",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3660,6 +3795,7 @@
}
},
"0706": {
+ "id": "0706",
"image_table_indices": {
"1": "17",
"2": "-1",
@@ -3687,6 +3823,7 @@
}
},
"0708": {
+ "id": "0708",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3714,6 +3851,7 @@
}
},
"0709": {
+ "id": "0709",
"image_table_indices": {
"1": "2",
"2": "-1",
@@ -3741,6 +3879,7 @@
}
},
"0710": {
+ "id": "0710",
"image_table_indices": {
"1": "191",
"2": "193",
@@ -3768,6 +3907,7 @@
}
},
"0712": {
+ "id": "0712",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3795,6 +3935,7 @@
}
},
"0713": {
+ "id": "0713",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3822,6 +3963,7 @@
}
},
"0714": {
+ "id": "0714",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3849,6 +3991,7 @@
}
},
"0716": {
+ "id": "0716",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -3876,6 +4019,7 @@
}
},
"0718": {
+ "id": "0718",
"image_table_indices": {
"1": "240",
"2": "150",
@@ -3903,6 +4047,7 @@
}
},
"0719": {
+ "id": "0719",
"image_table_indices": {
"1": "133",
"2": "117",
@@ -3930,6 +4075,7 @@
}
},
"0720": {
+ "id": "0720",
"image_table_indices": {
"1": "52",
"2": "262",
@@ -3957,6 +4103,7 @@
}
},
"0722": {
+ "id": "0722",
"image_table_indices": {
"1": "413",
"2": "519",
@@ -3984,6 +4131,7 @@
}
},
"0723": {
+ "id": "0723",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4013,6 +4161,7 @@
},
"08": {
"0800": {
+ "id": "0800",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4040,6 +4189,7 @@
}
},
"0801": {
+ "id": "0801",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4067,6 +4217,7 @@
}
},
"0802": {
+ "id": "0802",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4094,6 +4245,7 @@
}
},
"0803": {
+ "id": "0803",
"image_table_indices": {
"1": "99",
"2": "420",
@@ -4121,6 +4273,7 @@
}
},
"0804": {
+ "id": "0804",
"image_table_indices": {
"1": "36",
"2": "703",
@@ -4148,6 +4301,7 @@
}
},
"0805": {
+ "id": "0805",
"image_table_indices": {
"1": "154",
"2": "187",
@@ -4175,6 +4329,7 @@
}
},
"0806": {
+ "id": "0806",
"image_table_indices": {
"1": "3",
"2": "-1",
@@ -4202,6 +4357,7 @@
}
},
"0809": {
+ "id": "0809",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4229,6 +4385,7 @@
}
},
"0810": {
+ "id": "0810",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4256,6 +4413,7 @@
}
},
"0812": {
+ "id": "0812",
"image_table_indices": {
"1": "593",
"2": "578",
@@ -4283,6 +4441,7 @@
}
},
"0813": {
+ "id": "0813",
"image_table_indices": {
"1": "4",
"2": "-1",
@@ -4310,6 +4469,7 @@
}
},
"0814": {
+ "id": "0814",
"image_table_indices": {
"1": "5",
"2": "-1",
@@ -4337,6 +4497,7 @@
}
},
"0815": {
+ "id": "0815",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4364,6 +4525,7 @@
}
},
"0816": {
+ "id": "0816",
"image_table_indices": {
"1": "263",
"2": "63",
@@ -4391,6 +4553,7 @@
}
},
"0817": {
+ "id": "0817",
"image_table_indices": {
"1": "264",
"2": "185",
@@ -4418,6 +4581,7 @@
}
},
"0818": {
+ "id": "0818",
"image_table_indices": {
"1": "414",
"2": "377",
@@ -4445,6 +4609,7 @@
}
},
"0819": {
+ "id": "0819",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4472,6 +4637,7 @@
}
},
"0820": {
+ "id": "0820",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4499,6 +4665,7 @@
}
},
"0821": {
+ "id": "0821",
"image_table_indices": {
"1": "6",
"2": "-1",
@@ -4526,6 +4693,7 @@
}
},
"0822": {
+ "id": "0822",
"image_table_indices": {
"1": "7",
"2": "-1",
@@ -4553,6 +4721,7 @@
}
},
"0823": {
+ "id": "0823",
"image_table_indices": {
"1": "8",
"2": "-1",
@@ -4582,6 +4751,7 @@
},
"09": {
"0900": {
+ "id": "0900",
"image_table_indices": {
"1": "674",
"2": "673",
@@ -4609,6 +4779,7 @@
}
},
"0901": {
+ "id": "0901",
"image_table_indices": {
"1": "186",
"2": "268",
@@ -4636,6 +4807,7 @@
}
},
"0902": {
+ "id": "0902",
"image_table_indices": {
"1": "190",
"2": "85",
@@ -4663,6 +4835,7 @@
}
},
"0904": {
+ "id": "0904",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4690,6 +4863,7 @@
}
},
"0905": {
+ "id": "0905",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4717,6 +4891,7 @@
}
},
"0906": {
+ "id": "0906",
"image_table_indices": {
"1": "687",
"2": "686",
@@ -4744,6 +4919,7 @@
}
},
"0907": {
+ "id": "0907",
"image_table_indices": {
"1": "691",
"2": "701",
@@ -4771,6 +4947,7 @@
}
},
"0908": {
+ "id": "0908",
"image_table_indices": {
"1": "155",
"2": "518",
@@ -4798,6 +4975,7 @@
}
},
"0909": {
+ "id": "0909",
"image_table_indices": {
"1": "688",
"2": "769",
@@ -4825,6 +5003,7 @@
}
},
"0911": {
+ "id": "0911",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4852,6 +5031,7 @@
}
},
"0912": {
+ "id": "0912",
"image_table_indices": {
"1": "366",
"2": "121",
@@ -4879,6 +5059,7 @@
}
},
"0913": {
+ "id": "0913",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4906,6 +5087,7 @@
}
},
"0914": {
+ "id": "0914",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -4933,6 +5115,7 @@
}
},
"0917": {
+ "id": "0917",
"image_table_indices": {
"1": "21",
"2": "425",
@@ -4960,6 +5143,7 @@
}
},
"0918": {
+ "id": "0918",
"image_table_indices": {
"1": "22",
"2": "27",
@@ -4987,6 +5171,7 @@
}
},
"0919": {
+ "id": "0919",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5014,6 +5199,7 @@
}
},
"0920": {
+ "id": "0920",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5041,6 +5227,7 @@
}
},
"0921": {
+ "id": "0921",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5068,6 +5255,7 @@
}
},
"0922": {
+ "id": "0922",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5095,6 +5283,7 @@
}
},
"0923": {
+ "id": "0923",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5124,6 +5313,7 @@
},
"10": {
"1000": {
+ "id": "1000",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5151,6 +5341,7 @@
}
},
"1002": {
+ "id": "1002",
"image_table_indices": {
"1": "9",
"2": "-1",
@@ -5178,6 +5369,7 @@
}
},
"1003": {
+ "id": "1003",
"image_table_indices": {
"1": "20",
"2": "448",
@@ -5205,6 +5397,7 @@
}
},
"1004": {
+ "id": "1004",
"image_table_indices": {
"1": "87",
"2": "194",
@@ -5232,6 +5425,7 @@
}
},
"1005": {
+ "id": "1005",
"image_table_indices": {
"1": "88",
"2": "291",
@@ -5259,6 +5453,7 @@
}
},
"1006": {
+ "id": "1006",
"image_table_indices": {
"1": "378",
"2": "415",
@@ -5286,6 +5481,7 @@
}
},
"1007": {
+ "id": "1007",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5313,6 +5509,7 @@
}
},
"1008": {
+ "id": "1008",
"image_table_indices": {
"1": "18",
"2": "-1",
@@ -5340,6 +5537,7 @@
}
},
"1009": {
+ "id": "1009",
"image_table_indices": {
"1": "123",
"2": "42",
@@ -5367,6 +5565,7 @@
}
},
"1011": {
+ "id": "1011",
"image_table_indices": {
"1": "449",
"2": "164",
@@ -5394,6 +5593,7 @@
}
},
"1012": {
+ "id": "1012",
"image_table_indices": {
"1": "451",
"2": "25",
@@ -5421,6 +5621,7 @@
}
},
"1013": {
+ "id": "1013",
"image_table_indices": {
"1": "342",
"2": "453",
@@ -5448,6 +5649,7 @@
}
},
"1014": {
+ "id": "1014",
"image_table_indices": {
"1": "45",
"2": "-1",
@@ -5475,6 +5677,7 @@
}
},
"1015": {
+ "id": "1015",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5502,6 +5705,7 @@
}
},
"1016": {
+ "id": "1016",
"image_table_indices": {
"1": "323",
"2": "92",
@@ -5529,6 +5733,7 @@
}
},
"1017": {
+ "id": "1017",
"image_table_indices": {
"1": "326",
"2": "198",
@@ -5556,6 +5761,7 @@
}
},
"1018": {
+ "id": "1018",
"image_table_indices": {
"1": "595",
"2": "124",
@@ -5583,6 +5789,7 @@
}
},
"1019": {
+ "id": "1019",
"image_table_indices": {
"1": "600",
"2": "368",
@@ -5610,6 +5817,7 @@
}
},
"1020": {
+ "id": "1020",
"image_table_indices": {
"1": "379",
"2": "523",
@@ -5637,6 +5845,7 @@
}
},
"1021": {
+ "id": "1021",
"image_table_indices": {
"1": "167",
"2": "-1",
@@ -5664,6 +5873,7 @@
}
},
"1022": {
+ "id": "1022",
"image_table_indices": {
"1": "170",
"2": "456",
@@ -5693,6 +5903,7 @@
},
"11": {
"1100": {
+ "id": "1100",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5720,6 +5931,7 @@
}
},
"1101": {
+ "id": "1101",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5747,6 +5959,7 @@
}
},
"1102": {
+ "id": "1102",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5774,6 +5987,7 @@
}
},
"1103": {
+ "id": "1103",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5801,6 +6015,7 @@
}
},
"1104": {
+ "id": "1104",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5828,6 +6043,7 @@
}
},
"1105": {
+ "id": "1105",
"image_table_indices": {
"1": "457",
"2": "189",
@@ -5855,6 +6071,7 @@
}
},
"1106": {
+ "id": "1106",
"image_table_indices": {
"1": "458",
"2": "51",
@@ -5882,6 +6099,7 @@
}
},
"1107": {
+ "id": "1107",
"image_table_indices": {
"1": "56",
"2": "33",
@@ -5909,6 +6127,7 @@
}
},
"1109": {
+ "id": "1109",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5936,6 +6155,7 @@
}
},
"1110": {
+ "id": "1110",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5963,6 +6183,7 @@
}
},
"1111": {
+ "id": "1111",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -5990,6 +6211,7 @@
}
},
"1112": {
+ "id": "1112",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6017,6 +6239,7 @@
}
},
"1113": {
+ "id": "1113",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6044,6 +6267,7 @@
}
},
"1114": {
+ "id": "1114",
"image_table_indices": {
"1": "59",
"2": "241",
@@ -6071,6 +6295,7 @@
}
},
"1115": {
+ "id": "1115",
"image_table_indices": {
"1": "242",
"2": "60",
@@ -6098,6 +6323,7 @@
}
},
"1116": {
+ "id": "1116",
"image_table_indices": {
"1": "470",
"2": "255",
@@ -6125,6 +6351,7 @@
}
},
"1117": {
+ "id": "1117",
"image_table_indices": {
"1": "471",
"2": "65",
@@ -6152,6 +6379,7 @@
}
},
"1118": {
+ "id": "1118",
"image_table_indices": {
"1": "73",
"2": "472",
@@ -6179,6 +6407,7 @@
}
},
"1120": {
+ "id": "1120",
"image_table_indices": {
"1": "199",
"2": "327",
@@ -6206,6 +6435,7 @@
}
},
"1121": {
+ "id": "1121",
"image_table_indices": {
"1": "200",
"2": "106",
@@ -6233,6 +6463,7 @@
}
},
"1122": {
+ "id": "1122",
"image_table_indices": {
"1": "532",
"2": "382",
@@ -6260,6 +6491,7 @@
}
},
"1123": {
+ "id": "1123",
"image_table_indices": {
"1": "243",
"2": "460",
@@ -6289,6 +6521,7 @@
},
"12": {
"1201": {
+ "id": "1201",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6316,6 +6549,7 @@
}
},
"1202": {
+ "id": "1202",
"image_table_indices": {
"1": "77",
"2": "313",
@@ -6343,6 +6577,7 @@
}
},
"1203": {
+ "id": "1203",
"image_table_indices": {
"1": "314",
"2": "78",
@@ -6370,6 +6605,7 @@
}
},
"1204": {
+ "id": "1204",
"image_table_indices": {
"1": "315",
"2": "477",
@@ -6397,6 +6633,7 @@
}
},
"1206": {
+ "id": "1206",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6424,6 +6661,7 @@
}
},
"1207": {
+ "id": "1207",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6451,6 +6689,7 @@
}
},
"1208": {
+ "id": "1208",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6478,6 +6717,7 @@
}
},
"1209": {
+ "id": "1209",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6505,6 +6745,7 @@
}
},
"1211": {
+ "id": "1211",
"image_table_indices": {
"1": "478",
"2": "316",
@@ -6532,6 +6773,7 @@
}
},
"1212": {
+ "id": "1212",
"image_table_indices": {
"1": "624",
"2": "90",
@@ -6559,6 +6801,7 @@
}
},
"1213": {
+ "id": "1213",
"image_table_indices": {
"1": "91",
"2": "278",
@@ -6586,6 +6829,7 @@
}
},
"1214": {
+ "id": "1214",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6613,6 +6857,7 @@
}
},
"1215": {
+ "id": "1215",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6640,6 +6885,7 @@
}
},
"1216": {
+ "id": "1216",
"image_table_indices": {
"1": "107",
"2": "201",
@@ -6667,6 +6913,7 @@
}
},
"1217": {
+ "id": "1217",
"image_table_indices": {
"1": "108",
"2": "333",
@@ -6694,6 +6941,7 @@
}
},
"1218": {
+ "id": "1218",
"image_table_indices": {
"1": "535",
"2": "432",
@@ -6721,6 +6969,7 @@
}
},
"1219": {
+ "id": "1219",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6748,6 +6997,7 @@
}
},
"1220": {
+ "id": "1220",
"image_table_indices": {
"1": "96",
"2": "319",
@@ -6775,6 +7025,7 @@
}
},
"1221": {
+ "id": "1221",
"image_table_indices": {
"1": "345",
"2": "97",
@@ -6802,6 +7053,7 @@
}
},
"1223": {
+ "id": "1223",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6831,6 +7083,7 @@
},
"13": {
"1300": {
+ "id": "1300",
"image_table_indices": {
"1": "113",
"2": "485",
@@ -6858,6 +7111,7 @@
}
},
"1302": {
+ "id": "1302",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6885,6 +7139,7 @@
}
},
"1303": {
+ "id": "1303",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -6912,6 +7167,7 @@
}
},
"1305": {
+ "id": "1305",
"image_table_indices": {
"1": "10",
"2": "-1",
@@ -6939,6 +7195,7 @@
}
},
"1306": {
+ "id": "1306",
"image_table_indices": {
"1": "483",
"2": "436",
@@ -6966,6 +7223,7 @@
}
},
"1307": {
+ "id": "1307",
"image_table_indices": {
"1": "484",
"2": "101",
@@ -6993,6 +7251,7 @@
}
},
"1308": {
+ "id": "1308",
"image_table_indices": {
"1": "784",
"2": "493",
@@ -7020,6 +7279,7 @@
}
},
"1309": {
+ "id": "1309",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7047,6 +7307,7 @@
}
},
"1310": {
+ "id": "1310",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7074,6 +7335,7 @@
}
},
"1312": {
+ "id": "1312",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7101,6 +7363,7 @@
}
},
"1313": {
+ "id": "1313",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7128,6 +7391,7 @@
}
},
"1314": {
+ "id": "1314",
"image_table_indices": {
"1": "120",
"2": "288",
@@ -7155,6 +7419,7 @@
}
},
"1315": {
+ "id": "1315",
"image_table_indices": {
"1": "626",
"2": "127",
@@ -7182,6 +7447,7 @@
}
},
"1317": {
+ "id": "1317",
"image_table_indices": {
"1": "494",
"2": "420",
@@ -7209,6 +7475,7 @@
}
},
"1318": {
+ "id": "1318",
"image_table_indices": {
"1": "232",
"2": "130",
@@ -7236,6 +7503,7 @@
}
},
"1319": {
+ "id": "1319",
"image_table_indices": {
"1": "131",
"2": "497",
@@ -7263,6 +7531,7 @@
}
},
"1320": {
+ "id": "1320",
"image_table_indices": {
"1": "132",
"2": "675",
@@ -7290,6 +7559,7 @@
}
},
"1321": {
+ "id": "1321",
"image_table_indices": {
"1": "334",
"2": "109",
@@ -7317,6 +7587,7 @@
}
},
"1322": {
+ "id": "1322",
"image_table_indices": {
"1": "336",
"2": "244",
@@ -7344,6 +7615,7 @@
}
},
"1323": {
+ "id": "1323",
"image_table_indices": {
"1": "433",
"2": "537",
@@ -7373,6 +7645,7 @@
},
"14": {
"1400": {
+ "id": "1400",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7400,6 +7673,7 @@
}
},
"1402": {
+ "id": "1402",
"image_table_indices": {
"1": "676",
"2": "134",
@@ -7427,6 +7701,7 @@
}
},
"1403": {
+ "id": "1403",
"image_table_indices": {
"1": "681",
"2": "503",
@@ -7454,6 +7729,7 @@
}
},
"1406": {
+ "id": "1406",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7481,6 +7757,7 @@
}
},
"1408": {
+ "id": "1408",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7508,6 +7785,7 @@
}
},
"1409": {
+ "id": "1409",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7535,6 +7813,7 @@
}
},
"1410": {
+ "id": "1410",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7562,6 +7841,7 @@
}
},
"1411": {
+ "id": "1411",
"image_table_indices": {
"1": "11",
"2": "-1",
@@ -7589,6 +7869,7 @@
}
},
"1412": {
+ "id": "1412",
"image_table_indices": {
"1": "505",
"2": "136",
@@ -7616,6 +7897,7 @@
}
},
"1414": {
+ "id": "1414",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7643,6 +7925,7 @@
}
},
"1415": {
+ "id": "1415",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7670,6 +7953,7 @@
}
},
"1416": {
+ "id": "1416",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7697,6 +7981,7 @@
}
},
"1417": {
+ "id": "1417",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7724,6 +8009,7 @@
}
},
"1418": {
+ "id": "1418",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7751,6 +8037,7 @@
}
},
"1419": {
+ "id": "1419",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7778,6 +8065,7 @@
}
},
"1420": {
+ "id": "1420",
"image_table_indices": {
"1": "137",
"2": "506",
@@ -7805,6 +8093,7 @@
}
},
"1421": {
+ "id": "1421",
"image_table_indices": {
"1": "138",
"2": "685",
@@ -7832,6 +8121,7 @@
}
},
"1422": {
+ "id": "1422",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7861,6 +8151,7 @@
},
"15": {
"1500": {
+ "id": "1500",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7888,6 +8179,7 @@
}
},
"1502": {
+ "id": "1502",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7915,6 +8207,7 @@
}
},
"1503": {
+ "id": "1503",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -7942,6 +8235,7 @@
}
},
"1505": {
+ "id": "1505",
"image_table_indices": {
"1": "690",
"2": "139",
@@ -7969,6 +8263,7 @@
}
},
"1506": {
+ "id": "1506",
"image_table_indices": {
"1": "695",
"2": "510",
@@ -7996,6 +8291,7 @@
}
},
"1507": {
+ "id": "1507",
"image_table_indices": {
"1": "343",
"2": "697",
@@ -8023,6 +8319,7 @@
}
},
"1508": {
+ "id": "1508",
"image_table_indices": {
"1": "147",
"2": "700",
@@ -8050,6 +8347,7 @@
}
},
"1509": {
+ "id": "1509",
"image_table_indices": {
"1": "705",
"2": "148",
@@ -8077,6 +8375,7 @@
}
},
"1510": {
+ "id": "1510",
"image_table_indices": {
"1": "246",
"2": "338",
@@ -8104,6 +8403,7 @@
}
},
"1511": {
+ "id": "1511",
"image_table_indices": {
"1": "434",
"2": "385",
@@ -8131,6 +8431,7 @@
}
},
"1512": {
+ "id": "1512",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8158,6 +8459,7 @@
}
},
"1513": {
+ "id": "1513",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8185,6 +8487,7 @@
}
},
"1514": {
+ "id": "1514",
"image_table_indices": {
"1": "511",
"2": "143",
@@ -8212,6 +8515,7 @@
}
},
"1515": {
+ "id": "1515",
"image_table_indices": {
"1": "146",
"2": "512",
@@ -8239,6 +8543,7 @@
}
},
"1516": {
+ "id": "1516",
"image_table_indices": {
"1": "525",
"2": "707",
@@ -8266,6 +8571,7 @@
}
},
"1517": {
+ "id": "1517",
"image_table_indices": {
"1": "149",
"2": "526",
@@ -8293,6 +8599,7 @@
}
},
"1518": {
+ "id": "1518",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8320,6 +8627,7 @@
}
},
"1520": {
+ "id": "1520",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8347,6 +8655,7 @@
}
},
"1521": {
+ "id": "1521",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8374,6 +8683,7 @@
}
},
"1523": {
+ "id": "1523",
"image_table_indices": {
"1": "12",
"2": "-1",
@@ -8403,6 +8713,7 @@
},
"16": {
"1600": {
+ "id": "1600",
"image_table_indices": {
"1": "151",
"2": "709",
@@ -8430,6 +8741,7 @@
}
},
"1601": {
+ "id": "1601",
"image_table_indices": {
"1": "710",
"2": "152",
@@ -8457,6 +8769,7 @@
}
},
"1602": {
+ "id": "1602",
"image_table_indices": {
"1": "711",
"2": "534",
@@ -8484,6 +8797,7 @@
}
},
"1603": {
+ "id": "1603",
"image_table_indices": {
"1": "538",
"2": "712",
@@ -8511,6 +8825,7 @@
}
},
"1604": {
+ "id": "1604",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8538,6 +8853,7 @@
}
},
"1605": {
+ "id": "1605",
"image_table_indices": {
"1": "247",
"2": "112",
@@ -8565,6 +8881,7 @@
}
},
"1606": {
+ "id": "1606",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8592,6 +8909,7 @@
}
},
"1607": {
+ "id": "1607",
"image_table_indices": {
"1": "386",
"2": "435",
@@ -8619,6 +8937,7 @@
}
},
"1608": {
+ "id": "1608",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8646,6 +8965,7 @@
}
},
"1609": {
+ "id": "1609",
"image_table_indices": {
"1": "422",
"2": "157",
@@ -8673,6 +8993,7 @@
}
},
"1610": {
+ "id": "1610",
"image_table_indices": {
"1": "158",
"2": "541",
@@ -8700,6 +9021,7 @@
}
},
"1611": {
+ "id": "1611",
"image_table_indices": {
"1": "159",
"2": "715",
@@ -8727,6 +9049,7 @@
}
},
"1612": {
+ "id": "1612",
"image_table_indices": {
"1": "716",
"2": "160",
@@ -8754,6 +9077,7 @@
}
},
"1614": {
+ "id": "1614",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8781,6 +9105,7 @@
}
},
"1615": {
+ "id": "1615",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8808,6 +9133,7 @@
}
},
"1618": {
+ "id": "1618",
"image_table_indices": {
"1": "13",
"2": "-1",
@@ -8835,6 +9161,7 @@
}
},
"1619": {
+ "id": "1619",
"image_table_indices": {
"1": "552",
"2": "717",
@@ -8862,6 +9189,7 @@
}
},
"1620": {
+ "id": "1620",
"image_table_indices": {
"1": "554",
"2": "162",
@@ -8889,6 +9217,7 @@
}
},
"1621": {
+ "id": "1621",
"image_table_indices": {
"1": "168",
"2": "560",
@@ -8916,6 +9245,7 @@
}
},
"1622": {
+ "id": "1622",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8945,6 +9275,7 @@
},
"17": {
"1700": {
+ "id": "1700",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8972,6 +9303,7 @@
}
},
"1701": {
+ "id": "1701",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -8999,6 +9331,7 @@
}
},
"1703": {
+ "id": "1703",
"image_table_indices": {
"1": "423",
"2": "720",
@@ -9026,6 +9359,7 @@
}
},
"1704": {
+ "id": "1704",
"image_table_indices": {
"1": "721",
"2": "169",
@@ -9053,6 +9387,7 @@
}
},
"1705": {
+ "id": "1705",
"image_table_indices": {
"1": "722",
"2": "574",
@@ -9080,6 +9415,7 @@
}
},
"1707": {
+ "id": "1707",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9107,6 +9443,7 @@
}
},
"1709": {
+ "id": "1709",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9134,6 +9471,7 @@
}
},
"1710": {
+ "id": "1710",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9161,6 +9499,7 @@
}
},
"1711": {
+ "id": "1711",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9188,6 +9527,7 @@
}
},
"1712": {
+ "id": "1712",
"image_table_indices": {
"1": "575",
"2": "723",
@@ -9215,6 +9555,7 @@
}
},
"1713": {
+ "id": "1713",
"image_table_indices": {
"1": "576",
"2": "207",
@@ -9242,6 +9583,7 @@
}
},
"1714": {
+ "id": "1714",
"image_table_indices": {
"1": "208",
"2": "581",
@@ -9269,6 +9611,7 @@
}
},
"1716": {
+ "id": "1716",
"image_table_indices": {
"1": "590",
"2": "729",
@@ -9296,6 +9639,7 @@
}
},
"1717": {
+ "id": "1717",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9323,6 +9667,7 @@
}
},
"1719": {
+ "id": "1719",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9350,6 +9695,7 @@
}
},
"1720": {
+ "id": "1720",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9377,6 +9723,7 @@
}
},
"1721": {
+ "id": "1721",
"image_table_indices": {
"1": "424",
"2": "726",
@@ -9404,6 +9751,7 @@
}
},
"1722": {
+ "id": "1722",
"image_table_indices": {
"1": "727",
"2": "209",
@@ -9431,6 +9779,7 @@
}
},
"1723": {
+ "id": "1723",
"image_table_indices": {
"1": "728",
"2": "589",
@@ -9460,6 +9809,7 @@
},
"18": {
"1800": {
+ "id": "1800",
"image_table_indices": {
"1": "215",
"2": "732",
@@ -9487,6 +9837,7 @@
}
},
"1801": {
+ "id": "1801",
"image_table_indices": {
"1": "302",
"2": "216",
@@ -9514,6 +9865,7 @@
}
},
"1804": {
+ "id": "1804",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9541,6 +9893,7 @@
}
},
"1806": {
+ "id": "1806",
"image_table_indices": {
"1": "591",
"2": "213",
@@ -9568,6 +9921,7 @@
}
},
"1807": {
+ "id": "1807",
"image_table_indices": {
"1": "214",
"2": "-1",
@@ -9595,6 +9949,7 @@
}
},
"1808": {
+ "id": "1808",
"image_table_indices": {
"1": "601",
"2": "734",
@@ -9622,6 +9977,7 @@
}
},
"1809": {
+ "id": "1809",
"image_table_indices": {
"1": "602",
"2": "219",
@@ -9649,6 +10005,7 @@
}
},
"1810": {
+ "id": "1810",
"image_table_indices": {
"1": "221",
"2": "603",
@@ -9676,6 +10033,7 @@
}
},
"1811": {
+ "id": "1811",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9703,6 +10061,7 @@
}
},
"1812": {
+ "id": "1812",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9730,6 +10089,7 @@
}
},
"1813": {
+ "id": "1813",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9757,6 +10117,7 @@
}
},
"1815": {
+ "id": "1815",
"image_table_indices": {
"1": "733",
"2": "599",
@@ -9784,6 +10145,7 @@
}
},
"1816": {
+ "id": "1816",
"image_table_indices": {
"1": "222",
"2": "737",
@@ -9811,6 +10173,7 @@
}
},
"1817": {
+ "id": "1817",
"image_table_indices": {
"1": "738",
"2": "223",
@@ -9838,6 +10201,7 @@
}
},
"1818": {
+ "id": "1818",
"image_table_indices": {
"1": "739",
"2": "609",
@@ -9865,6 +10229,7 @@
}
},
"1819": {
+ "id": "1819",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9892,6 +10257,7 @@
}
},
"1820": {
+ "id": "1820",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9919,6 +10285,7 @@
}
},
"1821": {
+ "id": "1821",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9946,6 +10313,7 @@
}
},
"1822": {
+ "id": "1822",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -9973,6 +10341,7 @@
}
},
"1823": {
+ "id": "1823",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10002,6 +10371,7 @@
},
"19": {
"1901": {
+ "id": "1901",
"image_table_indices": {
"1": "610",
"2": "740",
@@ -10029,6 +10399,7 @@
}
},
"1902": {
+ "id": "1902",
"image_table_indices": {
"1": "611",
"2": "226",
@@ -10056,6 +10427,7 @@
}
},
"1903": {
+ "id": "1903",
"image_table_indices": {
"1": "227",
"2": "612",
@@ -10083,6 +10455,7 @@
}
},
"1904": {
+ "id": "1904",
"image_table_indices": {
"1": "228",
"2": "743",
@@ -10110,6 +10483,7 @@
}
},
"1905": {
+ "id": "1905",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10137,6 +10511,7 @@
}
},
"1906": {
+ "id": "1906",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10164,6 +10539,7 @@
}
},
"1907": {
+ "id": "1907",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10191,6 +10567,7 @@
}
},
"1908": {
+ "id": "1908",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10218,6 +10595,7 @@
}
},
"1909": {
+ "id": "1909",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10245,6 +10623,7 @@
}
},
"1910": {
+ "id": "1910",
"image_table_indices": {
"1": "731",
"2": "229",
@@ -10272,6 +10651,7 @@
}
},
"1911": {
+ "id": "1911",
"image_table_indices": {
"1": "745",
"2": "616",
@@ -10299,6 +10679,7 @@
}
},
"1912": {
+ "id": "1912",
"image_table_indices": {
"1": "617",
"2": "746",
@@ -10326,6 +10707,7 @@
}
},
"1913": {
+ "id": "1913",
"image_table_indices": {
"1": "619",
"2": "234",
@@ -10353,6 +10735,7 @@
}
},
"1914": {
+ "id": "1914",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10380,6 +10763,7 @@
}
},
"1915": {
+ "id": "1915",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10407,6 +10791,7 @@
}
},
"1917": {
+ "id": "1917",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10434,6 +10819,7 @@
}
},
"1918": {
+ "id": "1918",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10461,6 +10847,7 @@
}
},
"1919": {
+ "id": "1919",
"image_table_indices": {
"1": "270",
"2": "620",
@@ -10488,6 +10875,7 @@
}
},
"1920": {
+ "id": "1920",
"image_table_indices": {
"1": "271",
"2": "749",
@@ -10515,6 +10903,7 @@
}
},
"1921": {
+ "id": "1921",
"image_table_indices": {
"1": "750",
"2": "273",
@@ -10542,6 +10931,7 @@
}
},
"1922": {
+ "id": "1922",
"image_table_indices": {
"1": "751",
"2": "623",
@@ -10571,6 +10961,7 @@
},
"20": {
"2000": {
+ "id": "2000",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10598,6 +10989,7 @@
}
},
"2001": {
+ "id": "2001",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10625,6 +11017,7 @@
}
},
"2002": {
+ "id": "2002",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10652,6 +11045,7 @@
}
},
"2004": {
+ "id": "2004",
"image_table_indices": {
"1": "479",
"2": "752",
@@ -10679,6 +11073,7 @@
}
},
"2005": {
+ "id": "2005",
"image_table_indices": {
"1": "625",
"2": "276",
@@ -10706,6 +11101,7 @@
}
},
"2006": {
+ "id": "2006",
"image_table_indices": {
"1": "480",
"2": "627",
@@ -10733,6 +11129,7 @@
}
},
"2007": {
+ "id": "2007",
"image_table_indices": {
"1": "283",
"2": "755",
@@ -10760,6 +11157,7 @@
}
},
"2008": {
+ "id": "2008",
"image_table_indices": {
"1": "636",
"2": "287",
@@ -10787,6 +11185,7 @@
}
},
"2009": {
+ "id": "2009",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10814,6 +11213,7 @@
}
},
"2010": {
+ "id": "2010",
"image_table_indices": {
"1": "122",
"2": "248",
@@ -10841,6 +11241,7 @@
}
},
"2011": {
+ "id": "2011",
"image_table_indices": {
"1": "387",
"2": "567",
@@ -10868,6 +11269,7 @@
}
},
"2012": {
+ "id": "2012",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -10895,6 +11297,7 @@
}
},
"2013": {
+ "id": "2013",
"image_table_indices": {
"1": "756",
"2": "284",
@@ -10922,6 +11325,7 @@
}
},
"2014": {
+ "id": "2014",
"image_table_indices": {
"1": "757",
"2": "634",
@@ -10949,6 +11353,7 @@
}
},
"2015": {
+ "id": "2015",
"image_table_indices": {
"1": "635",
"2": "758",
@@ -10976,6 +11381,7 @@
}
},
"2016": {
+ "id": "2016",
"image_table_indices": {
"1": "762",
"2": "290",
@@ -11003,6 +11409,7 @@
}
},
"2017": {
+ "id": "2017",
"image_table_indices": {
"1": "763",
"2": "640",
@@ -11030,6 +11437,7 @@
}
},
"2019": {
+ "id": "2019",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11057,6 +11465,7 @@
}
},
"2020": {
+ "id": "2020",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11084,6 +11493,7 @@
}
},
"2021": {
+ "id": "2021",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11111,6 +11521,7 @@
}
},
"2022": {
+ "id": "2022",
"image_table_indices": {
"1": "628",
"2": "637",
@@ -11138,6 +11549,7 @@
}
},
"2023": {
+ "id": "2023",
"image_table_indices": {
"1": "289",
"2": "761",
@@ -11167,6 +11579,7 @@
},
"21": {
"2100": {
+ "id": "2100",
"image_table_indices": {
"1": "642",
"2": "294",
@@ -11194,6 +11607,7 @@
}
},
"2101": {
+ "id": "2101",
"image_table_indices": {
"1": "295",
"2": "643",
@@ -11221,6 +11635,7 @@
}
},
"2102": {
+ "id": "2102",
"image_table_indices": {
"1": "296",
"2": "767",
@@ -11248,6 +11663,7 @@
}
},
"2104": {
+ "id": "2104",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11275,6 +11691,7 @@
}
},
"2105": {
+ "id": "2105",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11302,6 +11719,7 @@
}
},
"2106": {
+ "id": "2106",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11329,6 +11747,7 @@
}
},
"2107": {
+ "id": "2107",
"image_table_indices": {
"1": "641",
"2": "764",
@@ -11356,6 +11775,7 @@
}
},
"2108": {
+ "id": "2108",
"image_table_indices": {
"1": "768",
"2": "297",
@@ -11383,6 +11803,7 @@
}
},
"2109": {
+ "id": "2109",
"image_table_indices": {
"1": "629",
"2": "646",
@@ -11410,6 +11831,7 @@
}
},
"2110": {
+ "id": "2110",
"image_table_indices": {
"1": "649",
"2": "771",
@@ -11437,6 +11859,7 @@
}
},
"2112": {
+ "id": "2112",
"image_table_indices": {
"1": "140",
"2": "341",
@@ -11464,6 +11887,7 @@
}
},
"2113": {
+ "id": "2113",
"image_table_indices": {
"1": "568",
"2": "388",
@@ -11491,6 +11915,7 @@
}
},
"2115": {
+ "id": "2115",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11518,6 +11943,7 @@
}
},
"2117": {
+ "id": "2117",
"image_table_indices": {
"1": "663",
"2": "300",
@@ -11545,6 +11971,7 @@
}
},
"2118": {
+ "id": "2118",
"image_table_indices": {
"1": "301",
"2": "650",
@@ -11572,6 +11999,7 @@
}
},
"2119": {
+ "id": "2119",
"image_table_indices": {
"1": "231",
"2": "774",
@@ -11599,6 +12027,7 @@
}
},
"2120": {
+ "id": "2120",
"image_table_indices": {
"1": "775",
"2": "303",
@@ -11626,6 +12055,7 @@
}
},
"2121": {
+ "id": "2121",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11655,6 +12085,7 @@
},
"22": {
"2200": {
+ "id": "2200",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11682,6 +12113,7 @@
}
},
"2201": {
+ "id": "2201",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11709,6 +12141,7 @@
}
},
"2202": {
+ "id": "2202",
"image_table_indices": {
"1": "776",
"2": "654",
@@ -11736,6 +12169,7 @@
}
},
"2203": {
+ "id": "2203",
"image_table_indices": {
"1": "656",
"2": "777",
@@ -11763,6 +12197,7 @@
}
},
"2204": {
+ "id": "2204",
"image_table_indices": {
"1": "657",
"2": "306",
@@ -11790,6 +12225,7 @@
}
},
"2205": {
+ "id": "2205",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11817,6 +12253,7 @@
}
},
"2207": {
+ "id": "2207",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11844,6 +12281,7 @@
}
},
"2208": {
+ "id": "2208",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11871,6 +12309,7 @@
}
},
"2209": {
+ "id": "2209",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11898,6 +12337,7 @@
}
},
"2210": {
+ "id": "2210",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -11925,6 +12365,7 @@
}
},
"2211": {
+ "id": "2211",
"image_table_indices": {
"1": "307",
"2": "659",
@@ -11952,6 +12393,7 @@
}
},
"2212": {
+ "id": "2212",
"image_table_indices": {
"1": "308",
"2": "780",
@@ -11979,6 +12421,7 @@
}
},
"2214": {
+ "id": "2214",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -12006,6 +12449,7 @@
}
},
"2215": {
+ "id": "2215",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -12033,6 +12477,7 @@
}
},
"2216": {
+ "id": "2216",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -12060,6 +12505,7 @@
}
},
"2217": {
+ "id": "2217",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -12087,6 +12533,7 @@
}
},
"2218": {
+ "id": "2218",
"image_table_indices": {
"1": "369",
"2": "605",
@@ -12114,6 +12561,7 @@
}
},
"2219": {
+ "id": "2219",
"image_table_indices": {
"1": "-1",
"2": "-1",
@@ -12141,6 +12589,7 @@
}
},
"2220": {
+ "id": "2220",
"image_table_indices": {
"1": "781",
"2": "309",
@@ -12168,6 +12617,7 @@
}
},
"2221": {
+ "id": "2221",
"image_table_indices": {
"1": "782",
"2": "662",
@@ -12195,6 +12645,7 @@
}
},
"2222": {
+ "id": "2222",
"image_table_indices": {
"1": "35",
"2": "145",
@@ -12222,6 +12673,7 @@
}
},
"2223": {
+ "id": "2223",
"image_table_indices": {
"1": "585",
"2": "441",
diff --git a/src/scenes/MediaScene.tsx b/src/scenes/MediaScene.tsx
index 35553ed..cc2a45d 100644
--- a/src/scenes/MediaScene.tsx
+++ b/src/scenes/MediaScene.tsx
@@ -1,12 +1,5 @@
import React, { useCallback, useEffect } from "react";
-import {
- useIdleStore,
- useLevelStore,
- useMediaStore,
- useNodeStore,
- useSceneStore,
- useSiteStore,
-} from "../store";
+import { useMainSceneStore, useMediaStore } from "../store";
import LeftSide from "../components/MediaScene/Selectables/LeftSide";
import RightSide from "../components/MediaScene/Selectables/RightSide";
import AudioVisualizer from "../components/MediaScene/AudioVisualizer/AudioVisualizer";
@@ -15,29 +8,20 @@ import NodeNameContainer from "../components/MediaScene/NodeNameContainer";
import Lof from "../components/MediaScene/Lof";
import Images from "../components/MediaScene/Images";
import MediumLetter from "../components/TextRenderer/MediumLetter";
-import site_a from "../resources/site_a.json";
-import { SiteType } from "../components/MainScene/SyncedComponents/Site";
import MediaYellowTextAnimator from "../components/TextRenderer/MediaYellowTextAnimator";
-import site_b from "../resources/site_b.json";
import MediaSceneEventManager from "../core/StateManagers/MediaSceneEventManager";
const MediaScene = () => {
- const currentScene = useSceneStore((state) => state.currentScene);
const mediaComponentMatrixIndices = useMediaStore(
(state) => state.componentMatrixIndices
);
- const idleMedia = useIdleStore((state) => state.media);
- const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
- const activeLevel = useLevelStore((state) => state.activeLevel);
-
- const currentSite = useSiteStore((state) => state.currentSite);
-
- const siteData = currentSite === "a" ? site_a : site_b;
-
- const activeNodeData = (siteData as SiteType)[activeLevel][activeNodeId];
- const activeNodeName = activeNodeData.node_name;
- const activeNodeMedia = activeNodeData.media_file;
+ const activeNodeName = useMainSceneStore((state) =>
+ state.activeNode.node_name.split("")
+ );
+ const activeNodeMedia = useMainSceneStore(
+ (state) => state.activeNode.media_file
+ );
const activeMediaComponent = useMediaStore(
useCallback(
@@ -70,7 +54,7 @@ const MediaScene = () => {
- {activeNodeName.split("").map((letter, idx) => (
+ {activeNodeName.map((letter: string, idx: number) => (
))}
diff --git a/src/store.ts b/src/store.ts
index 02f804d..4cf45a0 100644
--- a/src/store.ts
+++ b/src/store.ts
@@ -5,6 +5,7 @@ import site_a from "./resources/site_a.json";
import site_b from "./resources/site_b.json";
import authorize_user_letters from "./resources/authorize_user_letters.json";
import game_progress from "./resources/initial_progress.json";
+import { HUDType } from "./components/MainScene/SyncedComponents/HUD";
type EndState = {
mediaPlayedCount: number;
@@ -86,15 +87,6 @@ type LainState = {
setLainMoveState: (to: string) => void;
};
-type StarfieldState = {
- introStarfieldVisible: boolean;
- mainStarfieldVisible: boolean;
- mainStarfieldBoostVal: number;
- setIntroStarfieldVisible: (to: boolean) => void;
- setMainStarfieldVisible: (to: boolean) => void;
- setMainStarfieldBoostVal: (to: number) => void;
-};
-
type SiteState = {
currentSite: "a" | "b";
transformState: {
@@ -241,44 +233,6 @@ export const useMediaBigTextStore = create(
)
);
-export const useHudStore = create((set) => ({
- id: "fg_hud_1",
- active: 1,
- setId: (to) => set(() => ({ id: to })),
- toggleActive: () => set((state) => ({ active: Number(!state.active) })),
-}));
-
-export const useNodeStore = create(
- combine(
- {
- activeNodeState: {
- id: "0422",
- posX: 0,
- posZ: 0,
- rotZ: 0,
- posY: 0,
- interactedWith: false,
- exploding: false,
- shrinking: false,
- visible: true,
- },
- nodeMatrixIndices: { matrixIdx: 7, rowIdx: 0, colIdx: 0 },
- gameProgress: game_progress,
- } as NodeState,
- (set) => ({
- setActiveNodeState: (to: number | boolean | string, at: string) =>
- set((state) => ({
- activeNodeState: { ...state.activeNodeState, [at]: to },
- })),
- setNodeMatrixIndices: (to: {
- matrixIdx: number;
- rowIdx: number;
- colIdx: number;
- }) => set(() => ({ nodeMatrixIndices: to })),
- })
- )
-);
-
export const useIdleStore = create((set) => ({
media: "INS01.STR",
// this may be undefined depending on whether or not the media is audio or not
@@ -287,20 +241,6 @@ export const useIdleStore = create((set) => ({
setImages: (to) => set(() => ({ images: to })),
}));
-export const useLainStore = create((set) => ({
- lainMoveState: "standing",
- setLainMoveState: (to) => set(() => ({ lainMoveState: to })),
-}));
-
-export const useStarfieldStore = create((set) => ({
- introStarfieldVisible: false,
- mainStarfieldVisible: true,
- mainStarfieldBoostVal: 0.2,
- setIntroStarfieldVisible: (to) => set(() => ({ introStarfieldVisible: to })),
- setMainStarfieldVisible: (to) => set(() => ({ mainStarfieldVisible: to })),
- setMainStarfieldBoostVal: (to) => set(() => ({ mainStarfieldBoostVal: to })),
-}));
-
export const useSiteStore = create(
combine(
{
@@ -468,11 +408,56 @@ export const useMainSceneStore = create(
bigTextXOffset: 0,
// hud
- hudId: "fg_hud_1",
+ hud: {
+ mirrored: 0,
+ long: {
+ position: [-0.45, 0.15, -8.6],
+ initial_position: [-1.45, 0.15, -8.6],
+ },
+ boring: {
+ position: [0.48, 0.174, -8.6],
+ initial_position: [1.48, 0.174, -8.6],
+ },
+ big: {
+ position: [0.36, 0.13, -8.6],
+ initial_position: [1.36, 0.13, -8.6],
+ },
+ big_text: [-0.35, 0.23, -8.7],
+ medium_text: {
+ position: [0.18, 0.16, -8.7],
+ initial_position: [1.18, 0.16, -8.7],
+ },
+ },
hudActive: 1,
// nodes
- activeNodeId: "0422",
+ activeNode: {
+ image_table_indices: {
+ "1": "93",
+ "2": "356",
+ "3": "562",
+ },
+ media_file: "LAIN08.XA[26]",
+ node_name: "Tda028",
+ protocol_lines: {
+ "1": "TOUKO's_DIARY",
+ "2": "authorized_il",
+ "3": "decoded file:t",
+ "4": "ftp/tl.S_server",
+ },
+ required_final_video_viewcount: 0,
+ site: "A",
+ title: "TOUKO's DIARY",
+ triggers_final_video: 0,
+ type: 2,
+ unlocked_by: "",
+ upgrade_requirement: 0,
+ words: {
+ "1": "eye",
+ "2": "quiet",
+ "3": "hallucination",
+ },
+ },
activeNodeMatrixIndices: { matrixIdx: 7, rowIdx: 0, colIdx: 0 },
activeNodePos: [0, 0, 0],
activeNodeRot: [0, 0, 0],
@@ -486,11 +471,6 @@ export const useMainSceneStore = create(
// lain
lainMoveState: "standing",
- // starfield
- mainStarfieldVisible: true,
- introStarfieldVisible: false,
- mainStarBoostVal: 0.2,
-
// site
activeSite: "a",
siteRot: [0, 0, 0],
@@ -535,20 +515,20 @@ export const useMainSceneStore = create(
setBigTextXOffset: (to: number) => set(() => ({ bigTextXOffset: to })),
// hud setters
- setHudId: (to: string) => set(() => ({ hudId: to })),
+ setHud: (to: HUDType) => set(() => ({ hud: to })),
toggleHudActive: () =>
set((state) => ({ hudActive: Number(!state.hudActive) })),
// node setters
- setActiveNodeId: (to: string) => set(() => ({ activeNodeId: to })),
- setActiveNodeMatrixIndices: (to: {
+ setNode: (to: string) => set(() => ({ activeNode: to })),
+ setNodeMatrixIndices: (to: {
matrixIdx: number;
rowIdx: number;
colIdx: number;
}) => set(() => ({ activeNodeMatrixIndices: to })),
- setActiveNodePos: (to: number[]) => set(() => ({ activeNodePos: to })),
- setActiveNodeRot: (to: number[]) => set(() => ({ activeNodeRot: to })),
- setActiveNodeState: (
+ setNodePos: (to: number[]) => set(() => ({ activeNodePos: to })),
+ setNodeRot: (to: number[]) => set(() => ({ activeNodeRot: to })),
+ setNodeState: (
to: boolean,
at: "interactedWith" | "visible" | "exploding" | "shrinking"
) =>
@@ -559,14 +539,6 @@ export const useMainSceneStore = create(
// lain setters
setLainMoveState: (to: string) => set(() => ({ lainMoveState: to })),
- // starfield setters
- setMainStarfieldVisible: (to: boolean) =>
- set(() => ({ mainStarfieldVisible: to })),
- setMainStarBoostVal: (to: number) =>
- set(() => ({ mainStarBoostVal: to })),
- setIntroStarfieldVisible: (to: boolean) =>
- set(() => ({ introStarfieldVisible: to })),
-
// site setters
setActiveSite: (to: "a" | "b") => set(() => ({ activeSite: to })),
setSiteRot: (to: number[]) => set(() => ({ siteRot: to })),