Compare commits

...
Author SHA1 Message Date
Vladislav Khorev 23fef6f349 Set up basic deterministic lockstep 2026-11-05 23:02:53 +06:00
Vladislav Khorev 28c6e83eda Working on the server 2026-11-05 20:12:30 +06:00
Vladislav Khorev 075750442f Implemented the real server 2026-10-30 16:37:30 +06:00
Vladislav Khorev 931236bec0 fixed anim bug 2026-10-30 15:09:13 +06:00
Vladislav Khorev 297bd7377f Separating state out of the location 2026-10-30 14:56:24 +06:00
Vladislav Khorev 5e9a663812 More work on states, added bot 2026-10-29 22:37:30 +06:00
Vladislav Khorev 66e93d46f4 Major refactoring - internal server state machine implemented 2026-10-29 00:09:16 +06:00
Vladislav Khorev 71c654e5b6 Merge branch 'tutorial-refactor' of gitea.fishrungames.com:salmon-engine-projects/shadow-over-bishkek001 into tutorial-refactor 2026-10-27 20:25:15 +06:00
Vladislav Khorev 570f051281 Fixing bugs 2026-10-27 20:24:33 +06:00
Vladislav Khorev 0240721d46 Working on path visualization 2026-10-27 20:04:18 +06:00
Vladislav Khorev e350ec26ac Working on tutorial 2026-10-25 02:04:22 +06:00
Vladislav Khorev 96e748715b Added korean location 2026-10-25 01:29:38 +06:00
Vladislav Khorev d5ef126264 working on refactoring 2026-10-24 22:37:20 +06:00
Vladislav Khorev 9b71ee447a Working on loading 2026-10-23 23:49:54 +06:00
Vladislav Khorev d38a75ea72 working on campaign 2026-10-23 22:47:55 +06:00
Vladislav Khorev 9fa120d4ad Working on tutorial refactoring 2026-10-23 22:03:55 +06:00
Vladislav Khorev ea8f64c940 Restore back old navigation system 2026-10-22 23:02:25 +06:00
244 changed files with 31444 additions and 12546 deletions

No files matched your search

+502
View File
@@ -0,0 +1,502 @@
# Game State Architecture
## Purpose
The game separates authoritative gameplay state from rendering and runtime
resources. The same snapshot-and-command boundary supports the in-process
single-player server and a WebSocket deterministic-lockstep client/server.
## Architecture Overview
The architecture has six layers:
1. `GameState` is the aggregate root for persistent, authoritative state.
2. `InternalGameServer` owns `GameState`, advances the local simulation, handles commands, and produces immutable snapshots.
3. `ClientLocationState` owns per-client `LocationLocalState` records, including camera orientation. Graphical hosts own this state; it is never replicated.
4. Runtime objects hold rendering resources. `Character` and `Location` read immutable server snapshots by stable ID, while `InteractiveObject` still uses a transitional non-owning binding to server-owned state. `Location` also translates local input, scripts, and collision results into semantic server commands.
5. Client-facing systems such as `MenuManager` read immutable snapshots and submit typed commands through `IGameServer`.
6. Protocol-v2 WebSocket hosts assign preconfigured player slots and exchange
one initial state followed by ordered 100 ms tick bundles.
```text
Input / UI
| typed GameCommand
v
IGameServer
|
v
InternalGameServer ---- owns ----> GameState
| |
| update | stable state objects
v v
Location / Character / InteractiveObject runtime
|
v
Renderer
IGameServer ---- immutable GameSnapshot ----> UI and other clients
```
## Authoritative State Model
### `GameState`
`GameState` is the top-level state object. It contains:
- Campaign ID and current location ID.
- Day, night, dawn, and darklands flags.
- A map of campaign-level players keyed by stable player ID.
- A map of typed `LocationGameState` records keyed by location ID.
- Inventory, money, player-health HUD values, quests, tutorial progress, chat data, taxi state, and script-global values.
Live `Location` pointers and rendering objects are no longer stored in `GameState`.
Embedded state models such as `Inventory` and `QuestJournal` contain only value
data and deterministic operations; they do not retain runtime callbacks.
### Campaign-level players
Player `CharacterState` objects are stored in `GameState::players`. The current single-player game uses the ID `"player"`.
The player state is no longer owned by a `Character` or duplicated as a separately authoritative state for each loaded location. This permits additional player IDs to be introduced later without changing the aggregate ownership model.
Every player, including the one controlled by the current client, remains in this
same authoritative collection. `IGameServer::localPlayerId()` identifies which
entry is local to a particular client connection; it is not a separate state
object.
`LocationGameState` does not retain a player pointer or back-reference to `GameState`.
Its update boundary receives `GameState::players` by reference, allowing character
lookup and simulation to treat every campaign player by stable ID.
### `LocationGameState`
Each location record owns:
- One `LocationNetworkState`.
- NPC `CharacterState` objects keyed by configured ID.
- `InteractiveObjectState` objects keyed by configured ID.
- Trigger-zone enabled/inside flags.
- Teleport-zone active flags.
- Serialized dialogue runtime state.
- Serialized Lua runtime globals.
World-mode flags (`darklands`, `night`, and `dawn`) exist only at the aggregate
`GameState` level. Location rendering and scripts read those values from the
top-level snapshot rather than maintaining per-location mirrors.
State objects use `shared_ptr` internally to keep addresses stable for the
remaining local runtime bindings. These pointers never appear in public snapshots.
### Stable identity
- Locations use campaign configuration IDs.
- Players use keys from `GameState::players`.
- NPCs use required location-local configuration IDs.
- Interactive objects use required location-local configuration IDs.
- Trigger and teleport zones use their configured IDs.
Missing, empty, duplicate, and reserved IDs are content errors. Runtime references,
Lua APIs, snapshots, and persistence all use these IDs rather than configuration
array positions.
## Server Interface
`IGameServer` is the public state boundary. It exposes:
- `snapshot()` for an immutable, revisioned `GameSnapshot`.
- `submit()` for typed `GameCommand` values.
- `update()` for advancing a local fixed tick or polling a remote implementation.
- `save()` and `load()` for server-side persistence.
No public method returns a mutable state pointer or reference.
### Snapshots
`GameSnapshot` and its nested snapshot types are value-only read models. They contain no renderer objects, runtime `Location` pointers, mutable references, or active callbacks.
Snapshots include:
- Campaign and world-mode state.
- All players.
- Locations, NPCs, interactive objects, triggers, and teleports.
- Inventory item IDs.
- Quest views.
- Tutorial, chat, taxi, money, and health data.
- Script-global values.
Snapshots have a monotonically increasing revision. `InternalGameServer` caches the current immutable snapshot and rebuilds it only after the authoritative state changes.
### Commands
`GameCommand` is a C++17 `std::variant` of semantic command types. Current commands cover:
- World mode and current location.
- Player health and money.
- Tutorial progression and flags.
- Chat history and unread state.
- Taxi state.
- Inventory additions and removals.
- Quest status, objective completion/visibility, and active-objective changes.
- Script globals.
- Character transforms, attack targets, navigation destinations, stopping,
facing, replanning, health, damage, death reset, attack combos, and animation
metadata.
- Interactive-object activation.
- Trigger-zone state.
- Quest-definition reloads.
The remote implementation currently serializes only
`SetCharacterDestinationCommand` as player intent. The server derives the
character and location from the assigned connection slot; arbitrary state
mutation commands are not accepted from the network.
### Presentation events
`IGameServer::drainEvents()` returns value-only events produced by successful
authoritative mutations. Inventory add/remove and quest unlock/complete/fail/
objective-complete events contain stable IDs only. `Game` drains these events and
performs local tutorial, toast, and audio presentation through `MenuManager`.
Loading and persistence restoration clear pending events and remain silent.
## Internal Server
`InternalGameServer` is the current `IGameServer` implementation. It:
- Exclusively owns the aggregate `GameState`.
- Executes typed commands against authoritative state.
- Advances the active location simulation in exact 100 ms ticks.
- Builds and caches immutable snapshots.
- Delegates save/load serialization to the aggregate state model.
`LocalGameServerHost` is the graphical client's integration adapter. It owns loaded
runtime `Location` objects, forwards simulation events to them, and synchronizes
dialogue, Lua, trigger, and teleport auxiliary state. `Game` uses the explicit
`IGameServerHost` lifecycle interface and is no longer a friend of
`InternalGameServer`. The standalone server does not compile this adapter.
Location loading has two phases. `LocationContentLoader` parses renderer-free
`LocationDefinition` data, and `LocationGameState::setup()` creates/reconciles
authoritative NPC, interactive-object, navigation, taxi, trigger, teleport, and
animation state. The graphical `Location::setup()` runs afterward and only builds
presentation objects from that definition and the prepared state. Lua and dialogue
runtime behavior remains client-side.
### Animation and combat
Logical animation frame clocks live in `CharacterState`. The renderer-free content
loader reads animation frame metadata before authoritative entities are created.
Runtime `Character` construction only loads models for presentation and does not
submit metadata mutations back to the server.
`CharacterState::update()` returns value-only events containing arrival Lua function
names, attack impacts, navigation requests, and death-animation completion.
`LocationGameState` applies queued damage after every character has advanced.
Navigation replans are consumed by `InternalGameServer` as deterministic
simulation consequences rather than being resubmitted by presentation code.
Runtime `Character` objects only pose loaded models and produce audio, particles,
and presentation callbacks.
### Character state operations
Gameplay operations mutate the authoritative `CharacterState`, not the runtime
`Character`:
- `setTarget()` normalizes the destination, avoids redundant requests, stores the
optional Lua arrival function name, and asks the authoritative `LocationNetworkState` to
call `planPathExceptMyself()`.
- `forceReplan()` recalculates the current requested destination using the same
location navigation state.
- `stopInPlace()` clears navigation and any pending arrival function.
- `stopAndRotateToTarget()`, `resetPlayerAfterDeath()`, `setHp()`, and
`tryAttackCombo()` update their respective state directly.
`InternalGameServer::submit()` resolves the character and location, then invokes
these operations for the corresponding semantic command. The runtime `Location`
provides convenience methods for submitting those commands from input, scripts,
collision handling, and presentation-event processing.
## Runtime and Visual Object Bindings
Runtime visual objects do not own their authoritative state objects.
- `Location` keeps its `IGameServer` reference, stable location ID, and a shared
`LocationLocalState` supplied by the graphical host. It resolves its immutable
`LocationNetworkState` view from `IGameServer::snapshot()`, while rendering and
camera input access the local state directly.
- `Character` keeps only its `IGameServer` reference plus stable entity and location IDs. It resolves the player-first character view from `IGameServer::snapshot()`.
- `InteractiveObject` keeps a private non-owning reference to its `InteractiveObjectState`; its configured object name is its stable ID.
`Character::stateSnapshot()` and `Location::stateSnapshot()` return aliasing
`shared_ptr` views. Each pointer addresses a state copy inside a `GameSnapshot`,
while shared ownership keeps that whole immutable snapshot alive. Update, input,
editor, and draw operations capture one such pointer and use it consistently
throughout the operation. A missing or unloaded entity produces an empty pointer
and presentation or input work is skipped.
The authoritative state objects are owned by `GameState` or `LocationGameState`.
The internal server advances them before publishing a new snapshot revision.
Runtime input, scripts, and collision handling submit semantic commands that invoke
authoritative character and location operations. Location commands cover pending
interaction targets, navigation switching and area changes, editor obstacles, and
taxi reset. Camera orientation is deliberately not a server command. No
whole-location commit command is exposed.
Navigation target selection, replanning, stopping, facing, death reset, health
assignment, and attack-combo clock changes are implemented by `CharacterState`.
`Character` no longer exposes gameplay mutation helpers or a generic state mutation
callback. Character construction is presentation-only; frame ranges are already
present in `CharacterState` after content setup. It focuses on model posing,
rendering, audio, particles, and runtime callbacks.
Death-animation and health-change callbacks remain runtime-only on `Character`.
Arrival behavior is represented solely by the serialized Lua function name in
`CharacterState`; `Location` resolves and invokes that name through `ScriptEngine`
when it consumes the arrival event.
`Location` owns presentation-only runtime characters for all non-local entries in
`GameSnapshot::players`. It reconciles them by stable ID as snapshots change,
reuses the local-player assets and animation set, and includes them in all render,
shadow, lighting, animation, damage, and name-tag passes. The local entry is
excluded using `IGameServer::localPlayerId()` because its visual is already owned
by `Game`.
`GameObjectLoader` now:
1. Receives immutable object/NPC definitions parsed by `LocationContentLoader`.
2. Resolves already-prepared authoritative entities by stable ID.
3. Constructs meshes, textures, VBOs, `InteractiveObject`, and `Character`
presentation wrappers without creating or overwriting authoritative state.
Configuration remains the source of visual assets, animation paths, meshes, textures, and fixed tuning data.
## State Update Flow
Render frames and simulation ticks are separate:
1. SDL input and UI presentation use the real elapsed render-frame time.
2. A local host accumulates `steady_clock` elapsed time and runs zero or more
exact 100 ms simulation ticks. A remote host polls transport every frame but
advances only from contiguous server tick messages.
3. Commands assigned to tick `N` are applied in server sequence order before
simulation tick `N`.
4. The server freezes location character observations and updates every player,
NPC, taxi, and interactive object with exactly 100 ms. An empty player
collection remains valid.
5. Attack impacts are queued and applied only after all characters advance.
Navigation recovery is applied inside the deterministic state path.
6. The server invalidates its cached snapshot and advances its revision.
7. Runtime locations consume the completed tick's value-only events and perform
rendering, audio, particles, and supported presentation callbacks.
8. Rendering can occur between ticks and never changes authoritative tick time.
Commands that update bound character or object state do not reload the whole location. This avoids replaying dialogue-node effects or Lua callbacks.
## Campaign and Location Lifecycle
Only one location is normally loaded as a runtime object.
### Campaign loading
When a campaign starts:
- Existing campaign state and runtime locations are cleared.
- Quest definitions are loaded.
- The graphical single-player host requests a campaign-level `"player"` state and
creates its visual wrapper.
- A standalone host may deliberately create no players; locations continue to tick.
- The battle-zone test bot is an explicit host option rather than an unconditional
campaign side effect.
### Location loading
When a location is loaded:
- `LocationContentLoader` parses a renderer-free `LocationDefinition`.
- `LocationGameState::setup()` creates or reconciles navigation, taxi, NPC,
interactive-object, trigger, teleport, and animation state.
- Saved mutable fields are overlaid on configuration defaults by stable ID.
- `Location::setup()` builds static and entity visuals from the prepared definition
without mutating authoritative state.
- The shared campaign player is attached.
- Runtime visuals are created for other player IDs currently present in the
snapshot and are subsequently spawned or removed as snapshots change.
- Dialogue, Lua, trigger/teleport visuals, and presentation callbacks are initialized.
- The runtime `Location` is owned and registered by `LocalGameServerHost`;
`InternalGameServer` remains headless.
### Location unloading
When leaving a location:
- Auxiliary runtime state is captured.
- The visual/runtime `Location` is destroyed.
- Its typed `LocationGameState` remains in `GameState`.
The player state remains campaign-level and survives location changes.
## Save and Load Schema
Authoritative persistence uses one strict, versioned schema. `schemaVersion` is
required and unsupported versions are rejected rather than migrated. A
single-player save is a separate versioned envelope containing `networkState`
(the authoritative `GameState` JSON) and `localState` (the client-local location
map). Lockstep sends that authoritative document only in `initial_state`; later
messages contain numbered command bundles.
- Campaign players are stored once in an ID-keyed `players` object.
- Locations are keyed by location ID.
- Each location stores NPC and interactive-object state in ID-keyed objects.
- Pending interaction targets and character references use stable IDs.
- Immutable content such as meshes, initial taxi configuration, and object
definitions is reconstructed from campaign configuration.
- Configuration is loaded first and mutable saved state is overlaid in place.
Snapshot-backed runtime objects then resolve the resulting state by stable ID.
Old user save slots are intentionally unsupported. Bundled start-state snapshots
must be regenerated with `Game::saveInitialState()` whenever the schema changes.
## UI, Scripts, Dialogue, and Quests
### UI
`MenuManager` no longer holds `GameState&` or a mutable `Inventory*`.
It now:
- Reads inventory, quests, tutorial state, chat, money, health, location, and world mode from `GameSnapshot`.
- Submits typed commands for mutations.
- Continues to own presentation-only UI trees, screen state, textures, and callbacks.
### Scripts
Lua remains an in-process single-player runtime. Character, inventory, quest, and
campaign-global bindings submit semantic commands through `Location`; the server
invokes operations on centrally owned state. Snapshot queries provide global
values, inventory counts, item presence, and synchronous quest validation for the
existing Lua API. NPC,
interactive-object, trigger-zone, and teleport-zone bindings address entities by
configured ID. Other object and global-state bindings remain trusted local
integrations.
Each location script registers initialization, enter, and exit callbacks.
Initialization runs only when the location has no retained state; loading the Lua
file again for rendering does not repeat state-resetting setup. Enter and exit
callbacks continue to run for every location transition.
The scalar Lua runtime state for each location is stored under `LocationGameState::scriptGlobals`. Multiplayer location scripts are expected to be empty, so remote script execution is intentionally outside the current scope.
### Dialogue and cutscenes
Dialogue runtime state is captured in each `LocationGameState`. Dialogue global
flags use snapshot getter and command setter callbacks rather than retaining a
mutable map pointer. Dialogue and cutscene rendering remain local presentation
systems.
Dialogues and cutscenes are outside the planned multiplayer gameplay mode, but their existing single-player save and callback behavior is retained.
### Quests, inventory, and tutorial
These callback-free state systems remain part of `GameState` for single-player
compatibility. UI access, mutations, and presentation notifications cross the
server interface. They can remain empty or disabled in multiplayer mode as planned.
## Multiplayer Lockstep
Protocol v2 uses server-sequenced deterministic lockstep:
- The server assigns a connection to a preconfigured campaign player slot.
- Connection receives one authoritative state at a completed tick plus its
assigned player ID, tick duration, input delay, and compatibility fingerprint.
- Destination input is normalized and scheduled two ticks in the future.
- The server broadcasts every numbered tick, including empty ticks. Clients
buffer out-of-order messages and advance only contiguous tick IDs.
- All replicas apply the same globally sequenced commands before one exact
100 ms update.
- Post-tick canonical hashes exclude persistence timestamps and local
presentation state. A mismatch is diagnosed but not automatically repaired.
No wall-clock timestamp participates in simulation. `steady_clock` paces the
server and local render accumulator only, so different machine clocks do not
affect command placement or state. The current missing-packet policy is to stall;
there is no prediction or rollback.
Current boundaries remain:
- only `SetCharacterDestinationCommand` crosses the network;
- player characters must already exist in the initial state and campaign slot
list; dynamic spawning and reconnect history are not implemented;
- authentication and automatic checkpoint resynchronization are absent;
- multiplayer Lua/dialogue shared behavior is unsupported;
- deterministic compatibility targets identical executable and content builds.
Floating-point simulation is not guaranteed bit-identical across platforms.
## Platform Build Integration
The new state and server files are registered in:
- `proj-windows/CMakeLists.txt`
- `proj-linux/CMakeLists.txt`
- `proj-web/CMakeLists.txt`
- `proj-android/app/jni/src/CMakeLists.txt`
The refactor uses portable C++17 and introduces no Windows-only gameplay code.
The standalone target lives under `server/`. It links the authoritative state,
campaign, content-definition, and portable resource sources only; SDL, OpenGL,
audio, Lua, dialogue presentation, and rendering sources are absent. It can prepare
a selected campaign/location with zero players. The Windows server adds
Boost.Beast transport and runs a fixed 100 ms lockstep loop; other platforms
continue to compile the portable state core without that transport.
The Windows Debug target was verified with:
```powershell
cmake --build proj-windows/build --config Debug --target ShadowOverBishkekDemo -- /m
```
## Important Constraints
- Runtime C++ callbacks are not part of `CharacterState` or public snapshots;
serializable Lua arrival function names are state data.
- `InteractiveObjectState` animation callbacks are also removed from public snapshots.
- Character target and attacker references use stable IDs (`"player"` or a unique
location-local NPC ID).
- Some top-level values remain mirrors for compatibility, notably player health used by the HUD and scripts.
- Dialogue and Lua are synchronized as auxiliary location state rather than fully networked subsystems.
- `IGameServerLifecycle` is the graphics-free campaign/location administration
boundary. `LocalGameServerHost` adds client-only runtime construction and
auxiliary-state synchronization without making `Game` a server friend.
- Empty player maps are valid. Player-specific interactions remain inactive until
a player entity is added.
- Pathfinding priority queues use cell index as a stable secondary key.
- Gameplay randomness must be seeded and serialized; the `random_device` battle
bot is disabled for multiplayer sessions.
- A lockstep compatibility fingerprint must match before the client accepts the
initial state.
## Main Files
- `src/GameState.h` / `src/GameState.cpp` — aggregate state and top-level persistence.
- `src/LocationState.h` / `src/LocationState.cpp` — separate local camera and authoritative network location records, plus single-player persistence composition.
- `src/LocationGameState.h` / `src/LocationGameState.cpp` — authoritative typed location state, simulation, and ID-keyed persistence.
- `src/content/LocationDefinition.h` / `.cpp` — renderer-free content definitions,
parsing, and animation metadata loading.
- `src/game_server/IGameServer.h` — public snapshot and command contract.
- `src/game_server/IGameServerLifecycle.h` — graphics-free campaign/location lifecycle.
- `src/game_server/InternalGameServer.h` / `.cpp` — in-process authoritative implementation.
- `src/game_server/LocalGameServerHost.h` / `.cpp` — graphical-client runtime adapter.
- `src/game_server/NetworkProtocol.h` / `.cpp` — protocol-v2 messages,
lockstep timeline, validation, and canonical hashes.
- `src/game_server/WebsocketGameServer.h` / `.cpp` and
`WebsocketGameClient.h` / `.cpp` — slot assignment, input scheduling, tick
broadcasting, buffering, and replica advancement.
- `src/Game.h` / `src/Game.cpp` — application host, campaign lifecycle, and runtime wiring.
- `src/Location.h` / `src/Location.cpp` — loaded location runtime, command routing,
interactions, collisions, scripts, and presentation-event consumption.
- `src/Character.h` / `src/Character.cpp` — passive character presentation resolving
immutable `CharacterState` snapshots by stable ID.
- `src/CharacterState.h` / `src/CharacterState.cpp` — deterministic character
simulation, navigation operations, combat state, and logical animation clock.
- `src/items/InteractiveObject.h` / `.cpp` — visual object runtime bound to central object state.
- `src/items/GameObjectLoader.h` / `.cpp` — presentation builders for prepared definitions.
- `src/MenuManager.h` / `src/MenuManager.cpp` — snapshot-driven UI and command submission.
+176
View File
@@ -0,0 +1,176 @@
# WebSocket Deterministic Lockstep Networking
## Scope
The Windows WebSocket transport uses Boost.Asio and Boost.Beast to run a
server-sequenced deterministic lockstep simulation. A client receives one
authoritative state at a completed tick boundary. After that, the server sends
only numbered tick messages containing ordered player commands (or an empty
command list).
The current command surface is intentionally limited to
`SetCharacterDestinationCommand`.
## Runtime Architecture
### Server
`WebsocketGameServer` wraps the headless `InternalGameServer`.
- The simulation tick is fixed at 100 ms.
- Each accepted connection is assigned the first free character ID from the
campaign's `networkPlayerSlots`; the connection is rejected when all slots
are occupied.
- The initial message contains the state, completed snapshot tick, assigned
player ID, tick duration, two-tick input delay, and compatibility fingerprint.
- Destination inputs cross from the Asio thread through a queue. The simulation
thread validates client sequence numbers, replaces client identity with the
assigned slot, and schedules commands two ticks in the future.
- Every tick is broadcast, including ticks with no commands. No periodic state
snapshots are sent.
### Client
`WebsocketGameClient` implements `IGameServer`.
- It connects asynchronously to `ws://127.0.0.1:8080/`.
- Received messages are queued by the network thread and applied on the game
thread from `update()`.
- It maintains an internal `InternalGameServer` replica so existing snapshot
consumers and transitional runtime-state bindings continue to work.
- Camera orientation lives in host-owned `LocationLocalState`, so incoming
authoritative snapshots cannot overwrite camera movement.
- `submit()` serializes destination intent only. Other command variants remain
local no-ops for a remote connection.
- Tick bundles are buffered by ID. The replica advances only while the next
contiguous tick is available, applying its commands before one exact 100 ms
simulation step.
- Completed simulation events are passed to the runtime `Location` for
presentation, and ordinary server events are drainable through `IGameServer`.
- Client-side save and load calls are ignored because persistence remains
server-side.
`RemoteGameServerHost` prepares local presentation resources and runtime
locations against the replica and presents completed-tick events. It never
advances simulation from a render-frame delta.
## Campaign Routing
The graphical game uses stable router objects for `IGameServer` and
`IGameServerHost`, allowing existing UI and runtime references to remain valid.
When `NETWORK` is defined:
- `battle_zone_multiplayer` uses `WebsocketGameClient` and `RemoteGameServerHost`.
- `main`, `battle_zone`, and every other campaign use `InternalGameServer` and
`LocalGameServerHost`.
The WebSocket client is created only when `battle_zone_multiplayer` is selected
and is destroyed when that campaign is unloaded. The single-player and
multiplayer Battle Zone entries share location content and the start-state path,
so the state can be regenerated through the single-player entry. At startup, the
standalone server loads the authoritative half of that shared save and rewrites
its campaign ID to `battle_zone_multiplayer`; each remote client restores only
the local presentation half. The multiplayer campaign currently declares the
pre-existing `player` and `player2` state entries as connection
slots; the random test-bot controller is disabled.
The campaign's `networkCompatibility` token is the fingerprint; release builds
must bump it whenever deterministic content changes.
If DNS resolution, TCP connection, the WebSocket handshake, or the active socket
fails, the client unloads the remote campaign and returns to the campaign
selection screen.
## JSON Protocol v2
Every message uses a versioned JSON envelope:
```json
{
"protocolVersion": 2,
"type": "tick",
"payload": {
"tickId": 81,
"commands": [],
"stateHash": "0123456789abcdef"
}
}
```
Message types are:
- `initial_state` (server to client): one state snapshot and lockstep metadata;
- `destination_input` (client to server): monotonic client sequence and a
centimetre-normalized finite target;
- `tick` (server to client): tick ID, globally sequenced commands, and
post-tick diagnostic state hash;
- `error` (server to client): invalid input, incompatibility, or full server.
Protocol v1 is not compatible. Malformed payloads, non-finite or out-of-range
coordinates, duplicate client sequences, and unsupported commands cannot enter
the authoritative command stream.
WebSocket ordering is not used as simulation time. Integer tick IDs are the
only authoritative clock. The server uses `steady_clock` only to pace its loop,
and clients may have different wall clocks without affecting the result. A
client stalls on a missing tick instead of predicting or rolling back.
Single-player persistence remains a separate envelope combining authoritative
and client-local state. `savedAt`, camera state, and presentation objects are
excluded from the diagnostic deterministic hash.
## Build Configuration
Networking is enabled only for Windows:
- `proj-windows/CMakeLists.txt` defines `NETWORK`, compiles the WebSocket client
and remote host, and links `ws2_32` and `mswsock`.
- `server/CMakeLists.txt` defines `NETWORK` for the Windows `GameServer`, compiles
the WebSocket server, and links the Windows socket libraries.
- Linux, Android, and Web builds do not define `NETWORK` and do not compile the
network transport.
The previous Web-build `NETWORK` definition was removed.
## Running
Build the server:
```powershell
cmake -S server -B server/build
cmake --build server/build --config Debug --target GameServer
```
Run it from the repository root:
```powershell
.\server\build\Debug\GameServer.exe --campaign battle_zone_multiplayer --location uni_exterior
```
The listener defaults to `0.0.0.0:8080`. It can be changed with:
```text
--address IP
--port N
```
Launch the Windows game and select `battle_zone_multiplayer`. The client connects to
`127.0.0.1:8080`. Selecting another campaign continues to use the local server.
## Verification
CTest covers protocol-v2 round trips and validation, input-delay ordering,
fixed-tick replica behavior, campaign slot metadata, initial connection and
slot assignment, destination submission, and contiguous tick consumption.
## Current Limitations
- Only preconfigured player slots can connect; dynamic join/spawn commands are
not implemented.
- There is no authentication or reconnect/replay history.
- A hash mismatch is logged but does not yet trigger checkpoint resynchronization.
- The endpoint is hardcoded in the graphical client.
- Multiplayer Lua and dialogue behavior remains unsupported.
- Determinism is supported for identical executable/content builds. The
floating-point simulation is not guaranteed bit-identical across platforms
or compilers.
+12
View File
@@ -60,6 +60,8 @@ add_library(main SHARED
../../../../src/Localization.h
../../../../src/render/Renderer.cpp
../../../../src/render/Renderer.h
../../../../src/render/PathVisualization.cpp
../../../../src/render/PathVisualization.h
../../../../src/render/ShaderManager.cpp
../../../../src/render/ShaderManager.h
../../../../src/render/TextureManager.cpp
@@ -94,6 +96,8 @@ add_library(main SHARED
../../../../src/Location.cpp
../../../../src/LocationState.h
../../../../src/LocationState.cpp
../../../../src/LocationGameState.h
../../../../src/LocationGameState.cpp
../../../../src/LocationEditor.h
../../../../src/LocationEditor.cpp
../../../../src/NpcCar.h
@@ -102,6 +106,11 @@ add_library(main SHARED
../../../../src/GameConstants.cpp
../../../../src/GameState.h
../../../../src/GameState.cpp
../../../../src/content/LocationDefinition.cpp
../../../../src/game_server/IGameServer.h
../../../../src/game_server/InternalGameServer.h
../../../../src/game_server/InternalGameServer.cpp
../../../../src/game_server/LocalGameServerHost.cpp
../../../../src/ScriptEngine.h
../../../../src/ScriptEngine.cpp
../../../../src/navigation/PathFinder.h
@@ -110,10 +119,13 @@ add_library(main SHARED
../../../../src/items/GameObjectLoader.cpp
../../../../src/items/Item.h
../../../../src/items/Item.cpp
../../../../src/items/Inventory.cpp
../../../../src/items/ItemRegistry.h
../../../../src/items/ItemRegistry.cpp
../../../../src/Campaign.cpp
../../../../src/items/InteractiveObject.h
../../../../src/items/InteractiveObject.cpp
../../../../src/items/InteractiveObjectState.cpp
../../../../src/items/InteractiveObjectState.h
../../../../src/dialogue/DialogueTypes.h
../../../../src/dialogue/DialogueDatabase.h
+16
View File
@@ -85,6 +85,8 @@ add_executable(ShadowOverBishkekDemo
../src/Localization.h
../src/render/Renderer.cpp
../src/render/Renderer.h
../src/render/PathVisualization.cpp
../src/render/PathVisualization.h
../src/render/ShaderManager.cpp
../src/render/ShaderManager.h
../src/render/TextureManager.cpp
@@ -119,6 +121,8 @@ add_executable(ShadowOverBishkekDemo
../src/Location.cpp
../src/LocationState.h
../src/LocationState.cpp
../src/LocationGameState.h
../src/LocationGameState.cpp
../src/LocationEditor.h
../src/LocationEditor.cpp
../src/NpcCar.h
@@ -127,6 +131,15 @@ add_executable(ShadowOverBishkekDemo
../src/GameConstants.cpp
../src/GameState.h
../src/GameState.cpp
../src/content/LocationDefinition.h
../src/content/LocationDefinition.cpp
../src/game_server/IGameServer.h
../src/game_server/IGameServerLifecycle.h
../src/game_server/IGameServerHost.h
../src/game_server/InternalGameServer.h
../src/game_server/InternalGameServer.cpp
../src/game_server/LocalGameServerHost.h
../src/game_server/LocalGameServerHost.cpp
../src/ScriptEngine.h
../src/ScriptEngine.cpp
../src/navigation/PathFinder.h
@@ -135,11 +148,14 @@ add_executable(ShadowOverBishkekDemo
../src/items/GameObjectLoader.cpp
../src/items/Item.h
../src/items/Item.cpp
../src/items/Inventory.cpp
../src/items/ItemRegistry.h
../src/items/ItemRegistry.cpp
../src/Campaign.cpp
../src/items/InteractiveObject.h
../src/items/InteractiveObject.cpp
../src/items/InteractiveObjectState.h
../src/items/InteractiveObjectState.cpp
../src/dialogue/DialogueTypes.h
../src/dialogue/DialogueDatabase.h
../src/dialogue/DialogueDatabase.cpp
+12 -1
View File
@@ -79,6 +79,8 @@ set(SOURCES
../src/Localization.h
../src/render/Renderer.cpp
../src/render/Renderer.h
../src/render/PathVisualization.cpp
../src/render/PathVisualization.h
../src/render/ShaderManager.cpp
../src/render/ShaderManager.h
../src/render/TextureManager.cpp
@@ -113,6 +115,8 @@ set(SOURCES
../src/Location.cpp
../src/LocationState.h
../src/LocationState.cpp
../src/LocationGameState.h
../src/LocationGameState.cpp
../src/LocationEditor.h
../src/LocationEditor.cpp
../src/NpcCar.h
@@ -121,6 +125,11 @@ set(SOURCES
../src/GameConstants.cpp
../src/GameState.h
../src/GameState.cpp
../src/content/LocationDefinition.cpp
../src/game_server/IGameServer.h
../src/game_server/InternalGameServer.h
../src/game_server/InternalGameServer.cpp
../src/game_server/LocalGameServerHost.cpp
../src/ScriptEngine.h
../src/ScriptEngine.cpp
../src/navigation/PathFinder.h
@@ -129,10 +138,13 @@ set(SOURCES
../src/items/GameObjectLoader.cpp
../src/items/Item.h
../src/items/Item.cpp
../src/items/Inventory.cpp
../src/items/ItemRegistry.h
../src/items/ItemRegistry.cpp
../src/Campaign.cpp
../src/items/InteractiveObject.h
../src/items/InteractiveObject.cpp
../src/items/InteractiveObjectState.cpp
../src/items/InteractiveObjectState.h
../src/dialogue/DialogueTypes.h
../src/dialogue/DialogueDatabase.h
@@ -190,7 +202,6 @@ set(EMSCRIPTEN_FLAGS
#"-pthread"
#"-sUSE_PTHREADS=1"
"-fexceptions"
"-DNETWORK"
)
target_compile_options(ShadowOverBishkekDemo PRIVATE ${EMSCRIPTEN_FLAGS} "-O2")
+30 -1
View File
@@ -27,6 +27,8 @@ add_executable(ShadowOverBishkekDemo WIN32
../src/Localization.h
../src/render/Renderer.cpp
../src/render/Renderer.h
../src/render/PathVisualization.cpp
../src/render/PathVisualization.h
../src/render/ShaderManager.cpp
../src/render/ShaderManager.h
../src/render/TextureManager.cpp
@@ -61,6 +63,8 @@ add_executable(ShadowOverBishkekDemo WIN32
../src/Location.cpp
../src/LocationState.h
../src/LocationState.cpp
../src/LocationGameState.h
../src/LocationGameState.cpp
../src/LocationEditor.h
../src/LocationEditor.cpp
../src/NpcCar.h
@@ -69,6 +73,17 @@ add_executable(ShadowOverBishkekDemo WIN32
../src/GameConstants.cpp
../src/GameState.h
../src/GameState.cpp
../src/content/LocationDefinition.h
../src/content/LocationDefinition.cpp
../src/game_server/IGameServer.h
../src/game_server/IGameServerLifecycle.h
../src/game_server/IGameServerHost.h
../src/game_server/GameServerRouter.h
../src/game_server/GameServerHostRouter.h
../src/game_server/InternalGameServer.h
../src/game_server/InternalGameServer.cpp
../src/game_server/LocalGameServerHost.h
../src/game_server/LocalGameServerHost.cpp
../src/ScriptEngine.h
../src/ScriptEngine.cpp
../src/navigation/PathFinder.h
@@ -77,11 +92,14 @@ add_executable(ShadowOverBishkekDemo WIN32
../src/items/GameObjectLoader.cpp
../src/items/Item.h
../src/items/Item.cpp
../src/items/Inventory.cpp
../src/items/ItemRegistry.h
../src/items/ItemRegistry.cpp
../src/Campaign.cpp
../src/items/InteractiveObject.h
../src/items/InteractiveObject.cpp
../src/items/InteractiveObjectState.h
../src/items/InteractiveObjectState.cpp
../src/dialogue/DialogueTypes.h
../src/dialogue/DialogueDatabase.h
../src/dialogue/DialogueDatabase.cpp
@@ -122,7 +140,9 @@ set_target_properties(ShadowOverBishkekDemo PROPERTIES
# Определения препроцессора
target_compile_definitions(ShadowOverBishkekDemo PRIVATE
WIN32_LEAN_AND_MEAN
_WIN32_WINNT=0x0A00
PNG_ENABLED
NETWORK
)
# Линкуем с SDL2main, если он вообще установлен
@@ -144,7 +164,16 @@ target_link_libraries(ShadowOverBishkekDemo PRIVATE
# Линкуем OpenGL (Windows)
if(WIN32)
target_link_libraries(ShadowOverBishkekDemo PRIVATE opengl32)
target_sources(ShadowOverBishkekDemo PRIVATE
../src/game_server/NetworkProtocol.h
../src/game_server/NetworkProtocol.cpp
../src/game_server/WebsocketGameClient.h
../src/game_server/WebsocketGameClient.cpp
../src/game_server/RemoteGameServerHost.h
../src/game_server/RemoteGameServerHost.cpp
)
target_link_libraries(
ShadowOverBishkekDemo PRIVATE opengl32 ws2_32 mswsock)
endif()
# ===========================================
+47
View File
@@ -0,0 +1,47 @@
{
"campaigns": [
{
"id": "main",
"title": { "ru": "Основная игра", "en": "Main Game" },
"locations": [
"resources/config/locations/location_dorm.json",
"resources/config/locations/uni_exterior.json",
"resources/config/locations/uni_interior.json"
],
"startLocation": "location_dorm",
"startMusic": "music/obshaga.ogg",
"startState": "resources/config/start_state.json",
"quests": "resources/config/quests.json",
"tutorial": true,
"loadingScreen": "resources/w/ui/screen_loading.json"
},
{
"id": "battle_zone",
"title": { "ru": "Зона боя (одиночная)", "en": "Battle Zone (Single Player)" },
"locations": [
"resources/config/locations/battle_zone_uni_exterior.json"
],
"startLocation": "uni_exterior",
"startMusic": "music/bishkek univer day.ogg",
"startState": "resources/config/start_state_battle_zone.json",
"quests": "resources/config/quests_battle_zone.json",
"tutorial": false,
"loadingScreen": "resources/w/ui/screen_loading.json"
},
{
"id": "battle_zone_multiplayer",
"title": { "ru": "Зона боя (сетевая)", "en": "Battle Zone (Multiplayer)" },
"locations": [
"resources/config/locations/battle_zone_uni_exterior.json"
],
"startLocation": "uni_exterior",
"startMusic": "music/bishkek univer day.ogg",
"startState": "resources/config/start_state_battle_zone.json",
"quests": "resources/config/quests_battle_zone.json",
"tutorial": false,
"networkPlayerSlots": ["player", "player2"],
"networkCompatibility": "battle-zone-lockstep-v2",
"loadingScreen": "resources/w/ui/screen_loading.json"
}
]
}
@@ -1,6 +1,7 @@
{
"objects": [
{
"id": "WashingMachine002",
"name": "WashingMachine002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -27,6 +28,7 @@
"activateFunction": "on_washing_machine1_click"
},
{
"id": "Dryer002",
"name": "Dryer002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -53,6 +55,7 @@
"activateFunction": "on_dryer1_click"
},
{
"id": "Toilet001",
"name": "Toilet001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -79,6 +82,7 @@
"activateFunction": "on_toilet_click"
},
{
"id": "Sink002",
"name": "Sink002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -105,6 +109,7 @@
"activateFunction": "on_sink1_click"
},
{
"id": "Sink003",
"name": "Sink003",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -131,6 +136,7 @@
"activateFunction": "on_sink1_click"
},
{
"id": "Sink004",
"name": "Sink004",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -157,6 +163,7 @@
"activateFunction": "on_sink1_click"
},
{
"id": "Sink005",
"name": "Sink005",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -183,6 +190,7 @@
"activateFunction": "on_sink1_click"
},
{
"id": "Shower001",
"name": "Shower001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -209,6 +217,7 @@
"activateFunction": "on_shower_click"
},
{
"id": "Freezer001",
"name": "Freezer001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -235,6 +244,7 @@
"activateFunction": "on_freezer_click"
},
{
"id": "Boombox001",
"name": "Boombox001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -261,6 +271,7 @@
"activateFunction": "on_boombox_click"
},
{
"id": "WashingMachine001",
"name": "WashingMachine001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -287,6 +298,7 @@
"activateFunction": "on_washing_machine1_click"
},
{
"id": "Shelf001",
"name": "Shelf001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -313,6 +325,7 @@
"activateFunction": "on_shelf_click"
},
{
"id": "Stove001",
"name": "Stove001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -339,6 +352,7 @@
"activateFunction": "on_stove1_click"
},
{
"id": "Dryer001",
"name": "Dryer001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -365,6 +379,7 @@
"activateFunction": "on_dryer1_click"
},
{
"id": "Sink001",
"name": "Sink001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -391,6 +406,7 @@
"activateFunction": "on_sink1_click"
},
{
"id": "Door_Room_1_1_0_Leaf_001",
"name": "Door_Room_1_1_0_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_1_1_0_Leaf_001.txt.bin",
@@ -398,7 +414,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 10.0,
"approachRadius": 0.89,
"boundsMaxX": 0.01552116870880127,
@@ -415,6 +431,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Room_1_-1_0_Leaf_001",
"name": "Door_Room_1_-1_0_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_1_-1_0_Leaf_001.txt.bin",
@@ -422,7 +439,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 10.0,
"approachRadius": 0.8,
"boundsMaxX": 0.10440409183502197,
@@ -439,6 +456,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Room_-1_1_0_Leaf_001",
"name": "Door_Room_-1_1_0_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_-1_1_0_Leaf_001.txt.bin",
@@ -446,7 +464,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -10.0,
"approachRadius": 0.8,
"boundsMaxX": 0.05766594409942627,
@@ -463,6 +481,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Room_-1_-1_0_Leaf_001",
"name": "Door_Room_-1_-1_0_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_-1_-1_0_Leaf_001.txt.bin",
@@ -470,7 +489,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -10.0,
"approachRadius": 0.8,
"boundsMaxX": 0.10906755924224854,
@@ -487,6 +506,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Room_1_1_1_Leaf_001",
"name": "Door_Room_1_1_1_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_1_1_1_Leaf_001.txt.bin",
@@ -494,7 +514,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 15.7,
"approachRadius": 0.8,
"boundsMaxX": 0.046350955963134766,
@@ -511,6 +531,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Room_1_-1_1_Leaf_001",
"name": "Door_Room_1_-1_1_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_1_-1_1_Leaf_001.txt.bin",
@@ -518,7 +539,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 15.7,
"approachRadius": 0.800000011920929,
"boundsMaxX": 0.12420153617858887,
@@ -535,6 +556,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Utility_1_1_2_Leaf_001",
"name": "Door_Utility_1_1_2_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Utility_1_1_2_Leaf_001.txt.bin",
@@ -542,7 +564,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 19.95,
"approachRadius": 0.8,
"boundsMaxX": -0.050987482070922852,
@@ -559,6 +581,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Utility_1_-1_2_Leaf_001",
"name": "Door_Utility_1_-1_2_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Utility_1_-1_2_Leaf_001.txt.bin",
@@ -566,7 +589,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": 19.95,
"approachRadius": 0.8,
"boundsMaxX": 0.073349356651306152,
@@ -583,6 +606,7 @@
"activateFunction": "on_locked_door_click"
},
{
"id": "Door_Utility_-1_1_2_Leaf_001",
"name": "Door_Utility_-1_1_2_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Utility_-1_1_2_Leaf_001.txt.bin",
@@ -590,7 +614,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -19.95,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -599,6 +623,7 @@
"interactionRadius": 0.0
},
{
"id": "Door_Utility_-1_-1_2_Leaf_001",
"name": "Door_Utility_-1_-1_2_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Utility_-1_-1_2_Leaf_001.txt.bin",
@@ -606,7 +631,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -19.95,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -615,13 +640,14 @@
"interactionRadius": 0.0
},
{
"id": "Phone001",
"name": "Phone001",
"texturePath": "resources/w/dorm2/phone001_tex001.png",
"meshPath": "resources/w/dorm2/phone001_001.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 6.6644,
"positionX": 6.6644004991889,
"positionY": 0.9,
"positionZ": -12.5262,
"approachRadius": 0.6,
@@ -640,6 +666,7 @@
"activateFunction": "on_phone_pickup"
},
{
"id": "Journal001",
"name": "Journal001",
"texturePath": "resources/w/dorm2/Book_Cover_tex002.png",
"meshPath": "resources/w/dorm2/journal002_002.txt.bin",
@@ -647,7 +674,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 5.84296,
"positionY": 0.9,
"positionY": 0.9284919999539852,
"positionZ": -12.4661,
"approachRadius": 0.6,
"boundsMaxX": 0.17081403732299805,
@@ -665,6 +692,7 @@
"activateFunction": "on_journal_pickup"
},
{
"id": "Bed001",
"name": "Bed001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -691,21 +719,23 @@
"activateFunction": "on_bed_sleep"
},
{
"id": "Music001",
"name": "Music001",
"texturePath": "resources/w/exterior/texAtlas002.png",
"meshPath": "resources/w/dorm2/D_Music_004.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 5.10067,
"positionY": 0.91385,
"positionZ": -11.9566,
"positionX": 5.1006695008111,
"positionY": 1.0181855017900467,
"positionZ": -11.958324999397993,
"approachRadius": 0.6,
"scale": 1.0,
"interactionRadius": 0.3,
"activateFunction": ""
},
{
"id": "Door_Bath_-1_1_1_Leaf_002",
"name": "Door_Bath_-1_1_1_Leaf_002",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Bath_-1_1_1_Leaf_002.txt.bin",
@@ -713,7 +743,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 2.825,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -14.3,
"pivotX": -0.6,
"pivotY": 0.0,
@@ -733,6 +763,7 @@
"activateFunction": "on_player_bathroom_click"
},
{
"id": "Door_Bath_-1_-1_1_Leaf_002",
"name": "Door_Bath_-1_-1_1_Leaf_002",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Bath_-1_-1_1_Leaf_002.txt.bin",
@@ -740,7 +771,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -2.825,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -14.3,
"approachRadius": 0.8,
"boundsMaxX": 0.55439233779907227,
@@ -757,6 +788,7 @@
"activateFunction": "on_alik_bathroom_click"
},
{
"id": "Door_Room_-1_1_1_Leaf_001",
"name": "Door_Room_-1_1_1_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_-1_1_1_Leaf_001.txt.bin",
@@ -764,7 +796,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -15.7,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -784,6 +816,7 @@
"activateFunction": "on_player_door_click"
},
{
"id": "Door_Room_-1_-1_1_Leaf_001",
"name": "Door_Room_-1_-1_1_Leaf_001",
"texturePath": "resources/w/dorm2/interior_door_tex003.png",
"meshPath": "resources/w/dorm2/Door_Room_-1_-1_1_Leaf_001.txt.bin",
@@ -791,7 +824,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -1.1,
"positionY": 0.0,
"positionY": 0.9695000052452087,
"positionZ": -15.7,
"approachRadius": 0.8,
"boundsMaxX": 0.13942182064056396,
@@ -811,6 +844,7 @@
"activateFunction": "on_alik_door_click"
},
{
"id": "Room_Cover_Bath_W_N_2_001",
"name": "Room_Cover_Bath_W_N_2_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_Bath_W_N_2_002.txt.bin",
@@ -818,13 +852,14 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionX": 2.8249999284744263,
"positionY": 2.8500000476837157,
"positionZ": -12.849999904632568,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_LivingRoom_W_N_2_001",
"name": "Room_Cover_LivingRoom_W_N_2_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_LivingRoom_W_N_2_002.txt.bin",
@@ -832,13 +867,14 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionX": 4.949999928474426,
"positionY": 2.8500000476837157,
"positionZ": -14.25,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_LivingRoom_W_S_2_001",
"name": "Room_Cover_LivingRoom_W_S_2_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_LivingRoom_W_S_2_002.txt.bin",
@@ -846,13 +882,14 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionX": -4.949999928474426,
"positionY": 2.8500000476837157,
"positionZ": -14.25,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_Main_Hall_And_Corridors_002",
"name": "Room_Cover_Main_Hall_And_Corridors_002",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_Main_Hall_And_Corridors_002.txt.bin",
@@ -861,12 +898,13 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionY": 2.8500000476837157,
"positionZ": 0.0,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_Others_001",
"name": "Room_Cover_Others_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_All_002.txt.bin",
@@ -875,12 +913,13 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionY": 2.8500000476837157,
"positionZ": 4.250000476837158,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_Utility_W_N_3_001",
"name": "Room_Cover_Utility_W_N_3_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_Utility_W_N_3_002.txt.bin",
@@ -888,13 +927,14 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionX": 4.949999928474426,
"positionY": 2.8500000476837157,
"positionZ": -19.950000762939453,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Room_Cover_Utility_W_S_3_001",
"name": "Room_Cover_Utility_W_S_3_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Room_Cover_Utility_W_S_3_002.txt.bin",
@@ -902,13 +942,14 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -0.1,
"positionZ": 0.0,
"positionX": -4.949999928474426,
"positionY": 2.8500000476837157,
"positionZ": -19.950000762939453,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "Roof",
"name": "Roof",
"texturePath": "resources/black.png",
"meshPath": "resources/w/dorm2/Shadow_Roof001_002.txt.bin",
@@ -919,7 +960,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.1,
"positionY": 3.2050000190734864,
"positionZ": 0.0,
"scale": 1.0,
"interactionRadius": 0.0
@@ -1,15 +1,16 @@
{
"objects": [
{
"id": "Container001",
"name": "Container001",
"texturePath": "resources/w/exterior/derbis001_tex001.png",
"meshPath": "resources/w/exterior/Derbis_001.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -26.8049,
"positionY": 0.0,
"positionZ": 9.11524,
"positionX": -27.003390023612976,
"positionY": 0.32889999728649855,
"positionZ": 8.820399544944763,
"approachRadius": 1.5,
"boundsMaxX": 2.9518299102783203,
"boundsMaxY": 0.5,
@@ -25,15 +26,16 @@
"activateFunction": "on_container_clicked"
},
{
"id": "car001",
"name": "car001",
"texturePath": "resources/e/car4096blue_v002.png",
"meshPath": "resources/e/car004.txt.bin",
"rotationX": 0.0,
"rotationY": 90.0,
"rotationZ": 0.0,
"positionX": -10.5,
"positionY": 0.55,
"positionZ": -14.4195,
"positionX": -10.503284412622452,
"positionY": 0.9012498408555984,
"positionZ": -14.861633367061614,
"approachRadius": 0.5,
"boundsMaxX": 0.8858480453491211,
"boundsMaxY": 0.7,
@@ -49,6 +51,7 @@
"scale": 0.7
},
{
"id": "car001wheels",
"name": "car001wheels",
"texturePath": "resources/w/exterior/Wheel_base003.png",
"meshPath": "resources/w/exterior/wheels002.txt.bin",
@@ -56,8 +59,8 @@
"rotationY": 90.0,
"rotationZ": 0.0,
"positionX": -10.5,
"positionY": 0.0,
"positionZ": -14.4195,
"positionY": 0.3359999924898147,
"positionZ": -14.839499933242797,
"approachRadius": 0.5,
"boundsMaxX": 0,
"boundsMaxY": 0.0,
@@ -1,6 +1,7 @@
{
"objects": [
{
"id": "Bookshelf002",
"name": "Bookshelf002",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -27,6 +28,7 @@
"castShadow": false
},
{
"id": "Bookshelf003",
"name": "Bookshelf003",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -53,6 +55,7 @@
"castShadow": false
},
{
"id": "Bookshelf004",
"name": "Bookshelf004",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -79,6 +82,7 @@
"castShadow": false
},
{
"id": "Bookshelf005",
"name": "Bookshelf005",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -105,15 +109,16 @@
"castShadow": false
},
{
"id": "Cake001",
"name": "Cake001",
"texturePath": "resources/w/exterior/texAtlas002.png",
"meshPath": "resources/w/interior/D_Cake_005.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0,
"positionY": -5.0,
"positionZ": 0,
"positionX": -5.365539073944092,
"positionY": 0.9888315200805664,
"positionZ": 2.468366503715515,
"approachRadius": 0.6,
"boundsMaxX": 0.19605731964111328,
"boundsMaxY": 0.4,
@@ -131,6 +136,7 @@
"castShadow": false
},
{
"id": "Computer001",
"name": "Computer001",
"texturePath": "resources/w/interior/computer_texture002.png",
"textureDarkandsPath": "resources/w/interior/computer_texture002_dark.png",
@@ -138,9 +144,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 5.0916,
"positionY": 1.1534,
"positionZ": 0.751629,
"positionX": 5.01753252658844,
"positionY": 1.353411484324932,
"positionZ": 0.6829135021486282,
"approachRadius": 1.2,
"boundsMaxX": 0.6253643035888672,
"boundsMaxY": 0.5,
@@ -155,15 +161,16 @@
"activateFunction": "on_computer_clicked"
},
{
"id": "Knife001",
"name": "Knife001",
"texturePath": "resources/w/gg/Props.png",
"meshPath": "resources/w/interior/Knife_lay001_004.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": -4.8327,
"positionX": -4.959765496635623,
"positionY": 0.93551,
"positionZ": 2.2418,
"positionZ": 2.369899506953731,
"approachRadius": 1.4,
"boundsMaxX": 0.30867958068847656,
"boundsMaxY": 0.4,
@@ -177,6 +184,7 @@
"castShadowNight" : false
},
{
"id": "Book001",
"name": "Book001",
"texturePath": "resources/w/interior/Book_Cover_tex003.png",
"meshPath": "resources/w/interior/book002_002.txt.bin",
@@ -184,7 +192,7 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 1.84795,
"positionY": 0.6595,
"positionY": 0.6809705001562834,
"positionZ": 2.90552,
"approachRadius": 0.6,
"boundsMaxX": 0.2350165843963623,
@@ -202,6 +210,7 @@
"castShadowNight" : false
},
{
"id": "Bookshelf001",
"name": "Bookshelf001",
"texturePath": "resources/transparent.png",
"meshPath": "resources/w/Cube_001.txt.bin",
@@ -228,6 +237,7 @@
"castShadow": false
},
{
"id": "ReportCard001",
"name": "ReportCard001",
"texturePath": "resources/w/exterior/texAtlas002.png",
"meshPath": "resources/w/interior/D_report_cardGG_005.txt.bin",
@@ -252,6 +262,7 @@
"activateFunction": "on_report_card_pickup"
},
{
"id": "Note001",
"name": "Note001",
"texturePath": "resources/w/interior/note001_tex003.png",
"meshPath": "resources/w/interior/note001_002.txt.bin",
@@ -276,15 +287,16 @@
"activateFunction": "on_note_pickup"
},
{
"id": "car001",
"name": "car001",
"texturePath": "resources/e/car4096blue_v002.png",
"meshPath": "resources/e/car004.txt.bin",
"rotationX": 0.0,
"rotationY": 90.0,
"rotationZ": 0.0,
"positionX": -10.5,
"positionY": -5.0,
"positionZ": -14.4195,
"positionX": -10.503284412622452,
"positionY": -4.648750159144401,
"positionZ": -14.861633367061614,
"approachRadius": 0.6,
"boundsMaxX": 0.0,
"boundsMaxY": 0.0,
@@ -299,6 +311,7 @@
"scale": 0.7
},
{
"id": "car001wheels",
"name": "car001wheels",
"texturePath": "resources/w/exterior/Wheel_base003.png",
"meshPath": "resources/w/exterior/wheels002.txt.bin",
@@ -306,8 +319,8 @@
"rotationY": 90.0,
"rotationZ": 0.0,
"positionX": -10.5,
"positionY": -5.0,
"positionZ": -14.4195,
"positionY": -4.664000007510185,
"positionZ": -14.839499933242797,
"approachRadius": 0.6,
"boundsMaxX": 0.0,
"boundsMaxY": 0.0,
@@ -322,6 +335,7 @@
"scale": 0.7
},
{
"id": "Room_N_2_Leaf001",
"name": "Room_N_2_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputRoom_N_2_Leaf001.txt.bin",
@@ -330,7 +344,7 @@
"rotationZ": 0.0,
"positionX": 1.5,
"positionY": 0.975,
"positionZ": 6.965,
"positionZ": 6.400000002384186,
"approachRadius": 0.8,
"boundsMaxX": 0.06785714626312256,
"boundsMaxY": 1.0,
@@ -349,6 +363,7 @@
"activateFunction": "on_library_door_click"
},
{
"id": "Room_N_1_Leaf001",
"name": "Room_N_1_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputRoom_N_1_Leaf001.txt.bin",
@@ -357,7 +372,7 @@
"rotationZ": 0.0,
"positionX": 1.5,
"positionY": 0.975,
"positionZ": -1.035,
"positionZ": -1.5999999976158141,
"approachRadius": 0.8,
"boundsMaxX": 0.10772454738616943,
"boundsMaxY": 1.0,
@@ -376,6 +391,7 @@
"activateFunction": "on_n2_door_click"
},
{
"id": "Room_S_1_Leaf001",
"name": "Room_S_1_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputRoom_S_1_Leaf001.txt.bin",
@@ -384,7 +400,7 @@
"rotationZ": 0.0,
"positionX": -1.5,
"positionY": 0.975,
"positionZ": -1.035,
"positionZ": -1.5999999976158141,
"approachRadius": 0.8,
"boundsMaxX": 0.12115073204040527,
"boundsMaxY": 1.0,
@@ -403,6 +419,7 @@
"activateFunction": "on_s2_door_click"
},
{
"id": "Room_S_2_Leaf001",
"name": "Room_S_2_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputRoom_S_2_Leaf001.txt.bin",
@@ -411,7 +428,7 @@
"rotationZ": 0.0,
"positionX": -1.5,
"positionY": 0.975,
"positionZ": 6.965,
"positionZ": 6.400000002384186,
"approachRadius": 0.8,
"boundsMaxX": 0.09747374057769775,
"boundsMaxY": 1.0,
@@ -430,15 +447,16 @@
"activateFunction": "on_teachers_door_click"
},
{
"id": "Hall_Leaf001",
"name": "Hall_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputHall_Leaf001.txt.bin",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.565,
"positionX": 0.0,
"positionY": 0.975,
"positionZ": 8,
"positionZ": 8.000001000240445,
"approachRadius": 0.9,
"boundsMaxX": 0.6243956089019775,
"boundsMaxY": 1.0,
@@ -457,6 +475,7 @@
"activateFunction": "on_hall_door_click"
},
{
"id": "Room_S_0_Leaf001",
"name": "Room_S_0_Leaf001",
"texturePath": "resources/w/interior/uni_interior_door_tex001.png",
"meshPath": "resources/w/interior/outputRoom_S_0_Leaf001.txt.bin",
@@ -465,7 +484,7 @@
"rotationZ": 0.0,
"positionX": -1.5,
"positionY": 0.975,
"positionZ": -9.035,
"positionZ": -9.599999020778657,
"approachRadius": 0.8,
"boundsMaxX": 0.10914039611816406,
"boundsMaxY": 1.0,
@@ -484,6 +503,7 @@
"activateFunction": "on_s1_door_click"
},
{
"id": "Room_Cover_Corridor_001",
"name": "Room_Cover_Corridor_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_Corridor_003.txt.bin",
@@ -491,9 +511,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": 2.2500000596046448,
"positionY": 2.4499998092651367,
"positionZ": -3.999999761581421,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -501,6 +521,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_Main_Hall_001",
"name": "Room_Cover_Main_Hall_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_Main_Hall_003.txt.bin",
@@ -509,8 +530,8 @@
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionY": 2.4499998092651367,
"positionZ": 12.0,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -518,6 +539,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_South_1_001",
"name": "Room_Cover_South_1_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_South_1_003.txt.bin",
@@ -525,9 +547,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": -3.7500000596046448,
"positionY": 2.4499998092651367,
"positionZ": -12.0,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -535,6 +557,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_North_2_001",
"name": "Room_Cover_North_2_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_North_2_003.txt.bin",
@@ -542,9 +565,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": 3.7500000596046448,
"positionY": 2.4499998092651367,
"positionZ": -4.000000048428774,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -552,6 +575,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_South_2_001",
"name": "Room_Cover_South_2_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_South_2_003.txt.bin",
@@ -559,9 +583,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": -3.7500000596046448,
"positionY": 2.4499998092651367,
"positionZ": -4.000000048428774,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -569,6 +593,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_North_3_001",
"name": "Room_Cover_North_3_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_North_3_003.txt.bin",
@@ -576,9 +601,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": 3.7500000596046448,
"positionY": 2.4499998092651367,
"positionZ": 4.000000048428774,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -586,6 +611,7 @@
"interactionRadius": 0.0
},
{
"id": "Room_Cover_South_3_001",
"name": "Room_Cover_South_3_001",
"texturePath": "resources/black.png",
"meshPath": "resources/w/interior/Room_Cover_South_3_003.txt.bin",
@@ -593,9 +619,9 @@
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": -5.0,
"positionZ": 0.0,
"positionX": -3.7500000596046448,
"positionY": 2.4499998092651367,
"positionZ": 4.000000048428774,
"scale": 1.0,
"pivotX": 0.0,
"pivotY": 0.0,
@@ -0,0 +1,12 @@
{
"id": "uni_exterior",
"gameObjects": "resources/w/shelter/game_objects.json",
"interactiveObjects": "resources/w/shelter/interactive_objects.json",
"npcs": "resources/config/npcs_battle_zone.json",
"dialogues": "resources/dialogue/battle_zone_dialogues.json",
"navigation": [
"resources/navigation/dorm0_large.json"
],
"script": "resources/start_battle_zone.lua",
"playerPosition": [-6, 0, 12.8]
}
@@ -0,0 +1,32 @@
{
"id": "location_dorm",
"gameObjects": "resources/config/gameobjects_dorm_new_x.json",
"interactiveObjects": "resources/config/interactive_objects_dorm_x.json",
"npcs": "resources/config/npcs_dorm.json",
"dialogues": "resources/dialogue/dorm_dialogues004.json",
"navigation": [
"resources/navigation/dorm3_bca.txt",
"resources/navigation/dorm3_ca.txt",
"resources/navigation/dorm3_ba.txt",
"resources/navigation/dorm3_a.txt",
"resources/navigation/dorm3_b.txt",
"resources/navigation/dorm3_all_open.txt"
],
"script": "resources/start_dorm.lua",
"teleports": "resources/config/teleports_dorm.json",
"triggerZones": "resources/config/trigger_zones_dorm.json",
"lights": "resources/config/lights_dorm.json",
"playerPosition": [6.76345, 0, -14.6022],
"taxi": {
"triggerPosition": [-19.0, 0, 0],
"waypoints": [
[-20.85, 0, 30.0],
[-19.35, 0, 24.0],
[-19.35, 0, 14.0]
],
"initialPosition": [-20.85, 0, 64],
"initialRotation": 0,
"waypointReachRadius": 5
},
"lockInteractiveObjectsDuringTutorial": true
}
@@ -0,0 +1,27 @@
{
"id": "uni_exterior",
"gameObjects": "resources/config/gameobjects_uni_exterior_x.json",
"interactiveObjects": "resources/config/interactive_objects_uni_exterior_x.json",
"npcs": "resources/config/npcs_uni_exterior.json",
"dialogues": "resources/dialogue/uni_exterior_dialogues003.json",
"navigation": [
"resources/navigation/uni_exterior3_trees_car.txt",
"resources/navigation/uni_exterior3_trees.txt"
],
"script": "resources/start_uni_exterior.lua",
"teleports": "resources/config/teleports_uni_exterior.json",
"triggerZones": "resources/config/trigger_zones_uni_exterior.json",
"lights": "resources/config/lights_uni_exterior.json",
"playerPosition": [5, 0, -18.4],
"taxi": {
"triggerPosition": [-17.6, 0.05, -45],
"waypoints": [
[-17.6, 0.05, -90.0],
[-17.6, 0.05, -75.0],
[-17.6, 0.05, -55.0]
],
"initialPosition": [-17.6, 0.05, -100],
"initialRotation": 180,
"waypointReachRadius": 5
}
}
@@ -0,0 +1,31 @@
{
"id": "uni_interior",
"gameObjects": "resources/config/gameobjects_uni_interior_x.json",
"interactiveObjects": "resources/config/interactive_objects_uni_interior_x.json",
"npcs": "resources/config/npcs_uni_interior.json",
"dialogues": "resources/dialogue/uni_interior_dialogues_010.json",
"navigation": [
"resources/navigation/uni_interior4_unlocked_n2.txt",
"resources/navigation/uni_interior3_n2_hall.txt",
"resources/navigation/uni_interior4_n2_lr_hall.txt",
"resources/navigation/uni_interior4_n2_lr_tr_hall.txt",
"resources/navigation/uni_interior3_n2_lr_tr_hall_aiperi.txt",
"resources/navigation/uni_interior3_darklands_all_open.txt",
"resources/navigation/uni_interior4_unlocked_hall.txt",
"resources/navigation/uni_interior4_unlocked_n3.txt",
"resources/navigation/uni_interior4_unlocked_s1.txt",
"resources/navigation/uni_interior4_unlocked_s2.txt",
"resources/navigation/uni_interior4_unlocked_s3.txt",
"resources/navigation/uni_interior4_unlocked_s3_s1.txt",
"resources/navigation/uni_interior4_unlocked_s3_hall.txt",
"resources/navigation/uni_interior4_unlocked_s3_n3.txt",
"resources/navigation/uni_interior4_unlocked_s3_n2.txt",
"resources/navigation/uni_interior4_unlocked_s3_s2.txt",
"resources/navigation/uni_interior4_locked.txt"
],
"script": "resources/start_uni_interior.lua",
"teleports": "resources/config/teleports_uni_interior.json",
"triggerZones": "resources/config/trigger_zones_uni_interior.json",
"lights": "resources/config/lights_uni_interior.json",
"playerPosition": [0.942694, 0, -9.63104]
}
+4
View File
@@ -0,0 +1,4 @@
{
"npcs": [
]
}
+1 -1
View File
@@ -145,7 +145,7 @@
"canAttack": true
},
{
"id": "npc_02_woman",
"id": "npc_altynai",
"name": "Алтынай",
"animationIdlePath": "resources/w/girl/girl_idle001_small.anim",
"animationWalkPath": "resources/w/girl/girl_walk010_small.anim",
+4
View File
@@ -0,0 +1,4 @@
{
"quests": [
]
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,252 @@
{
"localState": {
"locations": {
"uni_exterior": {
"cameraAzimuth": -2.3499999046325684,
"cameraInclination": 1.103600025177002
}
}
},
"networkState": {
"campaignId": "battle_zone",
"chatHistory": [
[],
[],
[]
],
"chatPreviewMsg": [
"",
"",
""
],
"chatUnread": [
true,
true,
true
],
"currentLocationId": "",
"globalFloats": {
"player_hp": 200.0
},
"globalInts": {},
"inventory": {
"items": []
},
"isDarklands": false,
"isDawn": false,
"isNight": false,
"locations": {
"uni_exterior": {
"dialogue": {
"active": false
},
"interactiveObjects": {
"intBin_Cans": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 0.6000000238418579,
"positionY": 0.45736101269721985,
"positionZ": 3.8499999046325684,
"rotationY": 0.0,
"scale": 1.0
},
"intBin_Plastic": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 1.399999976158142,
"positionY": 0.45736101269721985,
"positionZ": 3.8499999046325684,
"rotationY": 0.0,
"scale": 1.0
},
"intBin_Waste_A": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 2.200000047683716,
"positionY": 0.45736101269721985,
"positionZ": 3.8499999046325684,
"rotationY": 0.0,
"scale": 1.0
},
"intBin_Waste_B": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 3.0,
"positionY": 0.45736101269721985,
"positionZ": 3.8499999046325684,
"rotationY": 0.0,
"scale": 1.0
},
"intRoof": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 0.0,
"positionY": 3.200000047683716,
"positionZ": 0.0,
"rotationY": 0.0,
"scale": 1.0
},
"intVending.00": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": -1.0,
"positionY": 0.9150000214576721,
"positionZ": -3.9000000953674316,
"rotationY": 0.0,
"scale": 1.0
},
"intVending.01": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 0.0,
"positionY": 0.9150000214576721,
"positionZ": -3.9000000953674316,
"rotationY": 0.0,
"scale": 1.0
},
"intVending.02": {
"alpha": 1.0,
"isActive": true,
"isAnimating": false,
"positionX": 1.0,
"positionY": 0.9150000214576721,
"positionZ": -3.9000000953674316,
"rotationY": 0.0,
"scale": 1.0
}
},
"npcs": {},
"scriptGlobals": {},
"state": {
"activeNavigationIndex": 0,
"targetInteractNpcId": "",
"targetInteractiveObjectId": "",
"targetTeleportZoneId": "",
"taxi": {
"arrivedCallbackCalled": false,
"car": {
"currentWaypoint": 0,
"mode": 1,
"position": [
-100.0,
-100.0,
-100.0
],
"rotation": 0.0,
"steeringAngle": 0.0,
"velocity": 0.0,
"waypoints": [],
"wheelAngle": 0.0
}
}
},
"teleportZones": {},
"triggerZones": {}
}
},
"money": 5500,
"playerHp": 200.0,
"playerMaxHp": 200.0,
"players": {
"player2": {
"animationFrame": 0.0,
"attackTargetId": "",
"attack_cooldown": 0.0,
"battle_state": 0,
"currentState": 0,
"currentWaypointIndex": 0,
"enabled": true,
"faceTargetId": "",
"facingAngle": 0.0,
"homeDriftCheckTimer": 5.0,
"homePosition": [
0.0,
0.0,
0.0
],
"hp": 200.0,
"pathWaypoints": [],
"position": [
0.0,
0.0,
0.0
],
"requestedWalkTarget": [
0.0,
0.0,
0.0
],
"showWeapon": true,
"targetFacingAngle": 0.0,
"visibleRange": 6.0,
"walkTarget": [
0.0,
0.0,
0.0
]
},
"player": {
"animationFrame": 0.0,
"attackTargetId": "",
"attack_cooldown": 0.0,
"battle_state": 0,
"currentState": 0,
"currentWaypointIndex": 0,
"enabled": true,
"faceTargetId": "",
"facingAngle": 0.0,
"homeDriftCheckTimer": 5.0,
"homePosition": [
0.0,
0.0,
0.0
],
"hp": 200.0,
"pathWaypoints": [
[
-6.025001525878906,
0.0,
12.775001525878906
]
],
"position": [
-6.0,
0.0,
12.800000190734863
],
"requestedWalkTarget": [
-6.0,
0.0,
12.800000190734863
],
"showWeapon": true,
"targetFacingAngle": 0.0,
"visibleRange": 6.0,
"walkTarget": [
-6.025001525878906,
0.0,
12.775001525878906
]
}
},
"questJournal": {
"quests": []
},
"savedAt": "2026-11-05 17:43",
"schemaVersion": 2,
"taxiIsCalled": false,
"tutorialJournalScreenOpened": false,
"tutorialNeedOpenTaxiScreen": false,
"tutorialPhoneChatScreenOpened": false,
"tutorialStep": 0,
"tutorialTaxiHintDone": false
},
"persistenceVersion": 1
}
@@ -0,0 +1,4 @@
{
"dialogues": [
]
}
+12 -2
View File
@@ -1,5 +1,11 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying float fogDistance;
@@ -9,8 +15,12 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
#ifdef INSTANCED
worldPos = mat4(iModel0, iModel1, iModel2, iModel3) * worldPos;
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
}
+12 -2
View File
@@ -1,5 +1,11 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying float fogDistance;
@@ -9,8 +15,12 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
#ifdef INSTANCED
worldPos = mat4(iModel0, iModel1, iModel2, iModel3) * worldPos;
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
}
+16 -3
View File
@@ -2,6 +2,12 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
@@ -15,10 +21,17 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * eyePos;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragNormal = mat3(ModelViewMatrix) * normal;
}
+16 -3
View File
@@ -1,6 +1,12 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
@@ -14,10 +20,17 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * eyePos;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragNormal = mat3(ModelViewMatrix) * normal;
}
+17 -4
View File
@@ -2,6 +2,12 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying float fogDistance;
@@ -15,11 +21,18 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragWorldXZ = vPosition.xz;
fragNormal = mat3(ModelViewMatrix) * normal;
fragWorldXZ = worldPos.xz;
}
+17 -4
View File
@@ -2,6 +2,12 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
@@ -17,12 +23,19 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragNormal = mat3(ModelViewMatrix) * normal;
fragPosLightSpace = uLightFromCamera * eyePos;
fragWorldXZ = vPosition.xz;
fragWorldXZ = worldPos.xz;
}
+17 -4
View File
@@ -2,6 +2,12 @@ precision highp float;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
@@ -17,12 +23,19 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragNormal = mat3(ModelViewMatrix) * normal;
fragPosLightSpace = uLightFromCamera * eyePos;
fragWorldXZ = vPosition.xz;
fragWorldXZ = worldPos.xz;
}
+17 -4
View File
@@ -1,6 +1,12 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
varying vec2 texCoord;
varying float fogDistance;
@@ -14,11 +20,18 @@ uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
vec3 normal = vNormal;
#ifdef INSTANCED
mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3);
worldPos = instanceModel * worldPos;
normal = normalize(mat3(instanceModel) * normal);
#endif
vec4 eyePos = ModelViewMatrix * worldPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0);
gl_Position = ProjectionModelViewMatrix * worldPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragWorldXZ = vPosition.xz;
fragNormal = mat3(ModelViewMatrix) * normal;
fragWorldXZ = worldPos.xz;
}
@@ -0,0 +1,8 @@
attribute vec3 vPosition;
uniform mat4 ProjectionModelViewMatrix;
void main()
{
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
}
@@ -0,0 +1,6 @@
uniform vec4 uColor;
void main()
{
gl_FragColor = uColor;
}
@@ -0,0 +1,8 @@
precision mediump float;
uniform vec4 uColor;
void main()
{
gl_FragColor = uColor;
}
+11 -1
View File
@@ -1,9 +1,19 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
#ifdef INSTANCED
attribute vec4 iModel0;
attribute vec4 iModel1;
attribute vec4 iModel2;
attribute vec4 iModel3;
#endif
uniform mat4 ProjectionModelViewMatrix;
void main()
{
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
vec4 worldPos = vec4(vPosition, 1.0);
#ifdef INSTANCED
worldPos = mat4(iModel0, iModel1, iModel2, iModel3) * worldPos;
#endif
gl_Position = ProjectionModelViewMatrix * worldPos;
}
+19
View File
@@ -0,0 +1,19 @@
-- ============================================
-- BATTLE ZONE (campaign "battle_zone")
-- uni_exterior level with static objects and navigation only.
-- ============================================
function callback_init_location()
end
function callback_enter_location()
end
function callback_exit_location()
end
game_api.set_location_callbacks(
callback_init_location,
callback_enter_location,
callback_exit_location
)
+26 -27
View File
@@ -2,18 +2,8 @@
-- NPC PATROL WAYPOINTS
-- ============================================
bathroom_door_opened = false
player_door_opened = false
alik_door_opened = false
game_api.start_dialogue("dialog_start001")
phone_picked_up = false
journal_picked_up = false
function on_npc_interact(npc_index)
if npc_index == 0 then
function on_npc_interact(npc_id)
if npc_id == "npc_alik" then
--[[
local player_alik_aware = game_api.getIntValue("alik_aware")
local player_container_aware = game_api.getIntValue("player_container_aware")
@@ -25,7 +15,7 @@ function on_npc_interact(npc_index)
else
game_api.start_dialogue("dialog_alik001")
end]]
game_api.player_stop_and_rotate_to_npc(0)
game_api.player_stop_and_rotate_to_npc("npc_alik")
game_api.start_dialogue("dialog_alik002")
end
end
@@ -119,8 +109,8 @@ end
function callback_deactivate_cover_alik_room()
game_api.deactivate_interactive_object("Room_Cover_LivingRoom_W_S_2_001")
game_api.set_npc_enabled(0, true)
game_api.npc_rotate_to(0, 90)
game_api.set_npc_enabled("npc_alik", true)
game_api.npc_rotate_to("npc_alik", 90)
end
function callback_deactivate_cover_bathroom()
@@ -161,7 +151,7 @@ function closeAlikDoor()
game_api.activate_interactive_object("Room_Cover_LivingRoom_W_S_2_001")
game_api.set_object_alpha("Room_Cover_LivingRoom_W_S_2_001", 1)
game_api.set_object_rotation("Door_Room_-1_-1_1_Leaf_001", 0)
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled("npc_alik", false)
if (bathroom_door_opened) then
game_api.switch_navigation(3) -- closed only alik (a)
else
@@ -330,11 +320,27 @@ function on_toilet_click()
game_api.player_stop()
end
function callback_init_location()
bathroom_door_opened = false
player_door_opened = false
alik_door_opened = false
phone_picked_up = false
journal_picked_up = false
game_api.start_dialogue("dialog_start001")
game_api.deactivate_interactive_object("Room_Cover_LivingRoom_W_N_2_001")
game_api.rotate_object("Door_Utility_-1_1_2_Leaf_001", 90, 0.01, nil)
game_api.rotate_object("Door_Utility_-1_-1_2_Leaf_001", -90, 0.01, nil)
game_api.set_npc_enabled("npc_alik", false)
game_api.switch_navigation(0)
print("----callback_init_location----")
end
function callback_enter_location()
print("Enter location dorm")
local hp = game_api.getFloatValue("player_hp")
game_api.set_player_hp(hp)
game_api.set_teleport_active(0, false)
game_api.set_teleport_active("tp_dorm_to_loc2", false)
if (game_api.is_night()) then
closeAlikDoor()
end
@@ -347,25 +353,18 @@ function callback_exit_location()
end
game_api.set_location_callbacks(
callback_init_location,
callback_enter_location,
callback_exit_location
)
function callback_call_taxi()
game_api.set_teleport_active(0, true)
game_api.set_trigger_zone_enabled(0, false)
game_api.set_teleport_active("tp_dorm_to_loc2", true)
game_api.set_trigger_zone_enabled("taxi_zone001", false)
end
game_api.deactivate_interactive_object("Room_Cover_LivingRoom_W_N_2_001")
game_api.rotate_object("Door_Utility_-1_1_2_Leaf_001", 90, 0.01, nil)
game_api.rotate_object("Door_Utility_-1_-1_2_Leaf_001", -90, 0.01, nil)
game_api.set_call_taxi_callback(
callback_call_taxi
)
game_api.set_npc_enabled(0, false)
game_api.switch_navigation(0)
print("Lua script loaded successfully--!")
+8 -19
View File
@@ -1,16 +1,5 @@
print("Lua script loaded successfully!")
function callback_enter_location()
end
function callback_exit_location()
end
game_api.set_location_callbacks(
callback_enter_location,
callback_exit_location
)
function darklands_exit001_enter_callback()
if game_api.is_darklands() then
print("Lua script start_darklands_transition")
@@ -77,11 +66,14 @@ game_api.set_enter_night_callback(
)
function callback_init_location()
end
function callback_enter_location()
print("Enter location uni exterior")
local hp = game_api.getFloatValue("player_hp")
game_api.set_player_hp(hp)
game_api.set_teleport_active(0, false)
game_api.set_teleport_active("tp_loc2_to_dorm", false)
if (game_api.is_night()) then
game_api.deactivate_interactive_object("car001")
game_api.deactivate_interactive_object("car001wheels")
@@ -100,6 +92,7 @@ function callback_exit_location()
end
game_api.set_location_callbacks(
callback_init_location,
callback_enter_location,
callback_exit_location
)
@@ -108,10 +101,6 @@ game_api.set_trigger_zone_callbacks("darklands_exit001",
darklands_exit001_enter_callback,
nil
)
game_api.set_trigger_zone_callbacks("darklands_exit002",
darklands_exit001_enter_callback,
nil
)
game_api.set_trigger_zone_callbacks("darklands_exit003",
darklands_exit001_enter_callback,
nil
@@ -129,12 +118,12 @@ game_api.set_trigger_zone_callbacks("darklands_exit005",
function taxi_zone001_enter_callback()
game_api.start_dialogue("dialog_taxi001")
game_api.set_trigger_zone_enabled(0, false)
game_api.set_trigger_zone_enabled("taxi_zone001", false)
end
function callback_call_taxi()
game_api.set_teleport_active(0, true)
game_api.set_trigger_zone_enabled(0, false)
game_api.set_teleport_active("tp_loc2_to_dorm", true)
game_api.set_trigger_zone_enabled("taxi_zone001", false)
end
game_api.set_call_taxi_callback(
+129 -136
View File
@@ -1,14 +1,6 @@
CONST_MSG_EMPTY = "(пусто)"
CONST_MSG_WHERE = "Бекзат, ты где? Я жду..."
hall_door_opened = false
teacher_door_opened = false
player_hold_book = false
teacher_arrived_to_library = false
teacher_told_about_book = false
--[[
0 - day0
1 - darklands
@@ -17,14 +9,6 @@ teacher_told_about_book = false
4 - day
]]
was_state_when_player_left = 0
was_day_when_player_left = 0
morning_can_open_door_index = 0
morning_did_open_door_index = 0
ghost_gone = false
function dialog_aiperi_give_key()
local player_hold_key = game_api.getIntValue("player_hold_key")
@@ -65,7 +49,7 @@ function knife_dialog_zone001_enter_callback()
if (player_hold_knife == 0) then
local lection_is_over = game_api.getIntValue("lection_is_over")
if lection_is_over == 1 then
game_api.npc_stop_and_rotate_to_player(1)
game_api.npc_stop_and_rotate_to_player("npc_02_woman")
if (player_hold_key == 1) then
game_api.start_dialogue("knife_dialog002")
else
@@ -79,7 +63,7 @@ function knife_dialog_zone001_enter_callback()
if (aiperi_talked_after_knife == 0) then
game_api.start_dialogue("knife_dialog_second001")
end
game_api.set_trigger_zone_enabled(1, false)
game_api.set_trigger_zone_enabled("knife_dialog_zone001", false)
end
end
end
@@ -110,11 +94,11 @@ game_api.set_trigger_zone_callbacks("knife_dialog_zone001",
function on_knife_pickup()
game_api.pickup_item("knife")
game_api.deactivate_interactive_object("Knife001")
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.setIntValue("player_hold_knife", 1)
game_api.set_trigger_zone_enabled(2, true)
game_api.npc_walk_to(0, -4.57412, 0, 6.78495, on_teacher_arrived2)
game_api.set_trigger_zone_enabled("teacher_dialog_zone001", true)
game_api.npc_walk_to("npc_teacher01", -4.57412, 0, 6.78495, on_teacher_arrived2)
game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_take")
game_api.player_stop()
end
@@ -133,14 +117,14 @@ function on_book_pickup()
player_hold_book = true
game_api.quest_set_objective_completed("study_project", "study_project_book")
game_api.start_dialogue("book_dialog003")
--game_api.set_trigger_zone_enabled(3, true)
--game_api.set_trigger_zone_enabled("book_dialog_zone001", true)
end
else
game_api.remove_item("book")
game_api.activate_interactive_object("Book001")
player_hold_book = false
game_api.start_dialogue("book_dialog004")
--game_api.set_trigger_zone_enabled(3, false)
--game_api.set_trigger_zone_enabled("book_dialog_zone001", false)
end
else
print("on_book_pickup step2")
@@ -218,14 +202,14 @@ function on_cake_clicked()
game_api.player_stop()
end
function on_npc_interact(npc_index)
function on_npc_interact(npc_id)
local player_ghost_aware = game_api.getIntValue("ghost_aware")
local player_hold_key = game_api.getIntValue("player_hold_key")
local day = game_api.getIntValue("day")
print("[Lua] NPC interaction! Index: " .. tostring(npc_index))
if npc_index == 1 then
game_api.player_stop_and_rotate_to_npc(1)
print("[Lua] NPC interaction! ID: " .. tostring(npc_id))
if npc_id == "npc_02_woman" then
game_api.player_stop_and_rotate_to_npc("npc_02_woman")
if (game_api.is_dawn()) or (day > 0) then
game_api.start_dialogue("dialog_aiperi_morning001")
else
@@ -236,8 +220,8 @@ function on_npc_interact(npc_index)
end
end
end
if npc_index == 0 then
game_api.player_stop_and_rotate_to_npc(0)
if npc_id == "npc_teacher01" then
game_api.player_stop_and_rotate_to_npc("npc_teacher01")
if (day == 0) then
if (teacher_arrived_to_library) then
if (teacher_told_about_book) then
@@ -264,8 +248,8 @@ function on_npc_interact(npc_index)
end
end
end
if npc_index == 2 then
game_api.player_stop_and_rotate_to_npc(2)
if npc_id == "npc_04_ghost" then
game_api.player_stop_and_rotate_to_npc("npc_04_ghost")
local report_card_signed = game_api.getIntValue("report_card_signed")
if (report_card_signed == 1) then
game_api.start_dialogue("dialog_with_ghost003")
@@ -273,18 +257,18 @@ function on_npc_interact(npc_index)
game_api.start_dialogue("dialog_with_ghost001")
end
end
if npc_index == 6 then
game_api.player_stop_and_rotate_to_npc(6)
if npc_id == "npc_altynai" then
game_api.player_stop_and_rotate_to_npc("npc_altynai")
game_api.start_dialogue("dialog_female_student002")
end
end
function on_quest_over()
ghost_gone = true
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.quest_set_objective_completed("ghost_release", "ghost_release_show")
game_api.start_cutscene("game_complete_cutscene001")
@@ -297,7 +281,7 @@ end
function teacher_zone001_enter_callback()
game_api.start_dialogue("teacher_dialog002")
game_api.set_trigger_zone_enabled(2, false)
game_api.set_trigger_zone_enabled("teacher_dialog_zone001", false)
teacher_told_about_book = true
game_api.player_stop()
end
@@ -474,9 +458,9 @@ function on_hall_door_click()
game_api.switch_navigation(1)
game_api.rotate_object("Hall_Leaf001", 90, 0.5, nil)
game_api.fade_object("Room_Cover_Main_Hall_001", 0, 0.5, callback_deactivate_cover_main_hall)
game_api.set_npc_enabled(0, true)
game_api.set_npc_enabled(6, true)
game_api.npc_rotate_to(6, 180)
game_api.set_npc_enabled("npc_teacher01", true)
game_api.set_npc_enabled("npc_altynai", true)
game_api.npc_rotate_to("npc_altynai", 180)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
game_api.player_stop()
end
@@ -558,22 +542,22 @@ function on_n2_door_click()
end
function on_teacher_arrived()
game_api.npc_rotate_to(0, 180)
game_api.npc_rotate_to("npc_teacher01", 180)
teacher_arrived_to_library = true
end
function on_student_arrived()
game_api.npc_rotate_to(6, 270)
game_api.npc_rotate_to("npc_altynai", 270)
end
function on_teacher_arrived2()
game_api.npc_rotate_to(0, 0)
game_api.npc_rotate_to("npc_teacher01", 0)
end
function book_dialog_zone001_enter_callback()
if (game_api.is_darklands()) then
game_api.start_dialogue("ghost_dialog002")
game_api.set_trigger_zone_enabled(3, false)
game_api.set_trigger_zone_enabled("book_dialog_zone001", false)
game_api.advance_darklands_hud()
else
if (player_hold_book) and (game_api.is_night() == false) then
@@ -621,9 +605,9 @@ function on_sleep_cutscene()
print("Cutscene 2 done!")
game_api.set_night()
--game_api.set_trigger_zone_enabled(1, false)
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(6, false)
--game_api.set_trigger_zone_enabled("knife_dialog_zone001", false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_altynai", false)
game_api.switch_navigation(16)
game_api.set_object_rotation("Room_N_2_Leaf001", 0)
game_api.set_object_rotation("Hall_Leaf001", 0)
@@ -649,14 +633,14 @@ function on_teacher_arrived_intermediate()
game_api.rotate_object("Room_N_2_Leaf001", -90, 0.5, nil)
game_api.fade_object("Room_Cover_North_3_001", 0, 0.5, callback_deactivate_cover_n3)
game_api.switch_navigation(2)
game_api.npc_walk_to(0, 4.94194, 0, 6.64111, on_teacher_arrived)
game_api.npc_walk_to("npc_teacher01", 4.94194, 0, 6.64111, on_teacher_arrived)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
end
function on_lection_cutscene_fadein_callback()
print("Lection cutscene in progress!")
-- -0.0234149 0 10.1139
game_api.npc_set_position(0, 0.0, 0.0, 10.1139)
game_api.npc_set_position("npc_teacher01", 0.0, 0.0, 10.1139)
--4.91002 0 10.375
--game_api.player_set_position(-2.41002, 0, 10.375)
@@ -670,10 +654,10 @@ function callback_on_lection_cutscene_over()
print("Cutscene done!")
game_api.setIntValue("lection_is_over", 1)
game_api.set_npc_enabled(1, true)
game_api.npc_rotate_to(1, 180)
game_api.npc_walk_to(0, 0.758123, 0, 6.50063, on_teacher_arrived_intermediate)
game_api.npc_walk_to(6, 5.28998, 0, -5.525, on_student_arrived)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_rotate_to("npc_02_woman", 180)
game_api.npc_walk_to("npc_teacher01", 0.758123, 0, 6.50063, on_teacher_arrived_intermediate)
game_api.npc_walk_to("npc_altynai", 5.28998, 0, -5.525, on_student_arrived)
local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware")
@@ -715,38 +699,36 @@ function on_bookshelf_teacher_clicked()
on_report_card_pickup()
end
first_time_darklands = true
function callback_enter_darklands()
if (first_time_darklands) then
game_api.start_dialogue("ghost_dialog001")
first_time_darklands = false
end
game_api.set_trigger_zone_enabled(1, false)
game_api.set_trigger_zone_enabled("knife_dialog_zone001", false)
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled(6, false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.set_npc_enabled("npc_altynai", false)
if (ghost_gone) then
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
else
game_api.set_npc_enabled(2, true)
game_api.set_npc_enabled(3, true)
game_api.set_npc_enabled(4, true)
game_api.set_npc_enabled(5, true)
game_api.set_npc_enabled("npc_04_ghost", true)
game_api.set_npc_enabled("ghost_01x", true)
game_api.set_npc_enabled("ghost_02x", true)
game_api.set_npc_enabled("ghost_03x", true)
game_api.npc_set_hp(3, 35)
game_api.npc_set_hp(4, 35)
game_api.npc_set_hp(5, 35)
game_api.npc_set_hp("ghost_01x", 35)
game_api.npc_set_hp("ghost_02x", 35)
game_api.npc_set_hp("ghost_03x", 35)
game_api.npc_set_position(3, 0, 0, -6.4)
game_api.npc_set_position(4, -5.0, 0, 12)
game_api.npc_set_position(5, 5.0, 0, 12)
game_api.npc_set_position("ghost_01x", 0, 0, -6.4)
game_api.npc_set_position("ghost_02x", -5.0, 0, 12)
game_api.npc_set_position("ghost_03x", 5.0, 0, 12)
end
game_api.switch_navigation(5)
@@ -755,13 +737,13 @@ end
function callback_exit_darklands()
game_api.start_cutscene("darklands_exit001")
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled(6, false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.set_npc_enabled("npc_altynai", false)
morning_did_open_door_index = 0
setDay1MorningSetup()
@@ -873,13 +855,13 @@ function setDay0setup()
game_api.deactivate_interactive_object("Note001")
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled(6, false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.set_npc_enabled("npc_altynai", false)
game_api.activate_interactive_object("car001")
game_api.activate_interactive_object("car001wheels")
@@ -903,7 +885,6 @@ function setDay1setup()
game_api.activate_interactive_object("Room_Cover_South_2_001")
game_api.deactivate_interactive_object("Room_Cover_South_3_001")
game_api.set_object_rotation("Room_N_0_Leaf001", 0)
game_api.set_object_rotation("Room_N_1_Leaf001", -90)
game_api.set_object_rotation("Room_N_2_Leaf001", -90)
game_api.set_object_rotation("Room_S_0_Leaf001", 0)
@@ -911,15 +892,15 @@ function setDay1setup()
game_api.set_object_rotation("Room_S_2_Leaf001", 90)
game_api.set_object_rotation("Hall_Leaf001", 90)
game_api.set_npc_enabled(0, true)
game_api.set_npc_enabled(1, true)
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled(6, true)
game_api.set_npc_enabled("npc_teacher01", true)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.set_npc_enabled("npc_altynai", true)
game_api.npc_set_position(1, 0.98998, 0, -7.525)
game_api.npc_set_position("npc_02_woman", 0.98998, 0, -7.525)
game_api.deactivate_interactive_object("Cake001")
@@ -939,7 +920,6 @@ function setDay1MorningSetup()
game_api.deactivate_interactive_object("Room_Cover_Corridor_001")
game_api.activate_interactive_object("Room_Cover_Main_Hall_001")
game_api.set_object_rotation("Room_N_0_Leaf001", 0)
game_api.set_object_rotation("Room_N_1_Leaf001", 0)
game_api.set_object_rotation("Room_N_2_Leaf001", 0)
game_api.set_object_rotation("Room_S_0_Leaf001", 0)
@@ -964,15 +944,15 @@ function setDay1MorningSetup()
-- TODO: Make check for teacher_door_opened false or true
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled(6, false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.set_npc_enabled("npc_altynai", false)
game_api.npc_set_position(1, 0.98998, 0, -7.525)
game_api.npc_set_position("npc_02_woman", 0.98998, 0, -7.525)
if morning_did_open_door_index == 1 then
game_api.deactivate_interactive_object("Room_Cover_South_1_001")
@@ -1043,7 +1023,6 @@ function setDay1NightSetup()
game_api.deactivate_interactive_object("Room_Cover_Corridor_001")
game_api.activate_interactive_object("Room_Cover_Main_Hall_001")
game_api.set_object_rotation("Room_N_0_Leaf001", 0)
game_api.set_object_rotation("Room_N_1_Leaf001", 0)
game_api.set_object_rotation("Room_N_2_Leaf001", 0)
game_api.set_object_rotation("Room_S_0_Leaf001", 0)
@@ -1059,13 +1038,13 @@ function setDay1NightSetup()
game_api.set_object_alpha("Room_Cover_Corridor_001", 1)
game_api.set_object_alpha("Room_Cover_Main_Hall_001", 1)
game_api.set_npc_enabled(0, false)
game_api.set_npc_enabled(1, false)
game_api.set_npc_enabled(2, false)
game_api.set_npc_enabled(3, false)
game_api.set_npc_enabled(4, false)
game_api.set_npc_enabled(5, false)
game_api.set_npc_enabled(6, false)
game_api.set_npc_enabled("npc_teacher01", false)
game_api.set_npc_enabled("npc_02_woman", false)
game_api.set_npc_enabled("npc_04_ghost", false)
game_api.set_npc_enabled("ghost_01x", false)
game_api.set_npc_enabled("ghost_02x", false)
game_api.set_npc_enabled("ghost_03x", false)
game_api.set_npc_enabled("npc_altynai", false)
game_api.deactivate_interactive_object("car001")
game_api.deactivate_interactive_object("car001wheels")
@@ -1222,8 +1201,8 @@ game_api.set_chat_callbacks(
)
function callback_aiperi_dialog_morning()
game_api.player_stop_and_rotate_to_npc(1)
game_api.npc_stop_and_rotate_to_player(1)
game_api.player_stop_and_rotate_to_npc("npc_02_woman")
game_api.npc_stop_and_rotate_to_player("npc_02_woman")
game_api.start_dialogue("dialog_aiperi_morning001")
end
@@ -1246,9 +1225,9 @@ function on_aiperi_opens_door()
end
--Aiperi incoming
game_api.npc_set_position(1, 0, 0, 6.5)
game_api.set_npc_enabled(1, true)
game_api.npc_walk_to(1, 0.0, 0, 9.1, callback_aiperi_dialog_morning)
game_api.npc_set_position("npc_02_woman", 0, 0, 6.5)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_walk_to("npc_02_woman", 0.0, 0, 9.1, callback_aiperi_dialog_morning)
game_api.player_walk_to(0.0, 0.0, 10.0, nil)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
@@ -1268,9 +1247,9 @@ function on_aiperi_opens_door()
end
--Aiperi incoming
game_api.npc_set_position(1, 0.0, 0, 6.43818)
game_api.set_npc_enabled(1, true)
game_api.npc_walk_to(1, 2.34349, 0, 6.31229, callback_aiperi_dialog_morning)
game_api.npc_set_position("npc_02_woman", 0.0, 0, 6.43818)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_walk_to("npc_02_woman", 2.34349, 0, 6.31229, callback_aiperi_dialog_morning)
game_api.player_walk_to(3.52174, 0, 6.28993, nil)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
@@ -1290,9 +1269,9 @@ function on_aiperi_opens_door()
end
--Aiperi incoming
game_api.npc_set_position(1, 0, 0, -1.7911)
game_api.set_npc_enabled(1, true)
game_api.npc_walk_to(1, 2.11898, 0, -1.7074, callback_aiperi_dialog_morning)
game_api.npc_set_position("npc_02_woman", 0, 0, -1.7911)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_walk_to("npc_02_woman", 2.11898, 0, -1.7074, callback_aiperi_dialog_morning)
game_api.player_walk_to(3.36055, 0, -2.0345, nil)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
@@ -1312,9 +1291,9 @@ function on_aiperi_opens_door()
game_api.switch_navigation(9)
end
--Aiperi incoming
game_api.npc_set_position(1, 0, 0, -1.7911)
game_api.set_npc_enabled(1, true)
game_api.npc_walk_to(1, -2.454, 0, -1.61871, callback_aiperi_dialog_morning)
game_api.npc_set_position("npc_02_woman", 0, 0, -1.7911)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_walk_to("npc_02_woman", -2.454, 0, -1.61871, callback_aiperi_dialog_morning)
game_api.player_walk_to(-3.63363, 0, -1.50727, nil)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
@@ -1334,9 +1313,9 @@ function on_aiperi_opens_door()
end
--Aiperi incoming
game_api.npc_set_position(1, 0, 0, -9.77948)
game_api.set_npc_enabled(1, true)
game_api.npc_walk_to(1, -2.53977, 0, -9.77852, callback_aiperi_dialog_morning)
game_api.npc_set_position("npc_02_woman", 0, 0, -9.77948)
game_api.set_npc_enabled("npc_02_woman", true)
game_api.npc_walk_to("npc_02_woman", -2.53977, 0, -9.77852, callback_aiperi_dialog_morning)
game_api.player_walk_to(-3.64494, 0, -9.66711, nil)
game_api.play_sound("audio/702171__foxfire__door-opening.ogg")
@@ -1345,7 +1324,24 @@ function on_aiperi_opens_door()
end
function on_aiperi_morning_dialog_finished()
game_api.npc_walk_to(1, 0.98998, 0, -7.525, nil)
game_api.npc_walk_to("npc_02_woman", 0.98998, 0, -7.525, nil)
end
function callback_init_location()
hall_door_opened = false
teacher_door_opened = false
player_hold_book = false
teacher_arrived_to_library = false
teacher_told_about_book = false
was_state_when_player_left = 0
was_day_when_player_left = 0
morning_can_open_door_index = 0
morning_did_open_door_index = 0
ghost_gone = false
first_time_darklands = true
setDay0setup()
game_api.switch_navigation(0)
end
function callback_enter_location()
@@ -1437,6 +1433,7 @@ function callback_exit_location()
end
game_api.set_location_callbacks(
callback_init_location,
callback_enter_location,
callback_exit_location
)
@@ -1467,9 +1464,5 @@ end
game_api.set_cutscene_callback("game_complete_cutscene001", callback_game_complete_cutscene)
setDay0setup()
game_api.switch_navigation(0)
--debugAllOpen()
print("Lua script loaded successfully!---!")
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,116 @@
{
"objects": [
{
"id": "intBin_Cans",
"name": "intBin_Cans",
"texturePath": "resources/w/shelter/models/intBin_Cans_atlas.png",
"meshPath": "resources/w/shelter/models/intBin_Cans.txt.bin",
"rotationX": 0.0,
"rotationY": -180.0,
"rotationZ": 0.0,
"positionX": 0.6,
"positionY": 0.45736101269721985,
"positionZ": 3.85,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intBin_Plastic",
"name": "intBin_Plastic",
"texturePath": "resources/w/shelter/models/intBin_Plastic_atlas.png",
"meshPath": "resources/w/shelter/models/intBin_Plastic.txt.bin",
"rotationX": 0.0,
"rotationY": -180.0,
"rotationZ": 0.0,
"positionX": 1.4,
"positionY": 0.45736101269721985,
"positionZ": 3.85,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intBin_Waste_A",
"name": "intBin_Waste_A",
"texturePath": "resources/w/shelter/models/intBin_Waste_A_atlas.png",
"meshPath": "resources/w/shelter/models/intBin_Waste_A.txt.bin",
"rotationX": 0.0,
"rotationY": -180.0,
"rotationZ": 0.0,
"positionX": 2.2,
"positionY": 0.45736101269721985,
"positionZ": 3.85,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intBin_Waste_B",
"name": "intBin_Waste_B",
"texturePath": "resources/w/shelter/models/intBin_Waste_B_atlas.png",
"meshPath": "resources/w/shelter/models/intBin_Waste_B.txt.bin",
"rotationX": 0.0,
"rotationY": -180.0,
"rotationZ": 0.0,
"positionX": 3.0,
"positionY": 0.45736101269721985,
"positionZ": 3.85,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intRoof",
"name": "intRoof",
"texturePath": "resources/w/shelter/models/intRoof_atlas.png",
"meshPath": "resources/w/shelter/models/intRoof.txt",
"rotationX": 0.0,
"rotationY": 0.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 3.2,
"positionZ": 0.0,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intVending.00",
"name": "intVending.00",
"texturePath": "resources/w/shelter/models/vending_atlas.png",
"meshPath": "resources/w/shelter/models/intVending.txt",
"rotationX": 0.0,
"rotationY": -90.0,
"rotationZ": 0.0,
"positionX": -1.0,
"positionY": 0.915,
"positionZ": -3.9,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intVending.01",
"name": "intVending.01",
"texturePath": "resources/w/shelter/models/vending_atlas.png",
"meshPath": "resources/w/shelter/models/intVending.txt",
"rotationX": 0.0,
"rotationY": -90.0,
"rotationZ": 0.0,
"positionX": 0.0,
"positionY": 0.915,
"positionZ": -3.9,
"scale": 1.0,
"interactionRadius": 0.0
},
{
"id": "intVending.02",
"name": "intVending.02",
"texturePath": "resources/w/shelter/models/vending_atlas.png",
"meshPath": "resources/w/shelter/models/intVending.txt",
"rotationX": 0.0,
"rotationY": -90.0,
"rotationZ": 0.0,
"positionX": 1.0,
"positionY": 0.915,
"positionZ": -3.9,
"scale": 1.0,
"interactionRadius": 0.0
}
]
}
+33
View File
@@ -0,0 +1,33 @@
===Vertices (Split by UV/Normal): 20
V 0: Pos(0.8, -0.225, 0.42) Norm(0.0, 0.0, 1.0) UV(-0.5, 1.777778)
V 1: Pos(-0.8, 0.225, 0.42) Norm(0.0, 0.0, 1.0) UV(0.5, -1.777778)
V 2: Pos(-0.8, -0.225, 0.42) Norm(0.0, 0.0, 1.0) UV(-0.5, -1.777778)
V 3: Pos(0.8, -0.225, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, 1.777778)
V 4: Pos(-0.8, -0.225, 0.42) Norm(0.0, -1.0, 0.0) UV(0.933333, -1.777778)
V 5: Pos(-0.8, -0.225, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, -1.777778)
V 6: Pos(0.8, 0.225, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, 0.5)
V 7: Pos(0.8, -0.225, 0.42) Norm(1.0, 0.0, 0.0) UV(0.933333, -0.5)
V 8: Pos(0.8, -0.225, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, -0.5)
V 9: Pos(-0.8, 0.225, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, -1.777778)
V 10: Pos(0.8, 0.225, 0.42) Norm(0.0, 1.0, 0.0) UV(0.933333, 1.777778)
V 11: Pos(0.8, 0.225, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, 1.777778)
V 12: Pos(-0.8, -0.225, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, -0.5)
V 13: Pos(-0.8, 0.225, 0.42) Norm(-1.0, 0.0, 0.0) UV(0.933333, 0.5)
V 14: Pos(-0.8, 0.225, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 0.5)
V 15: Pos(0.8, 0.225, 0.42) Norm(0.0, 0.0, 1.0) UV(0.5, 1.777778)
V 16: Pos(0.8, -0.225, 0.42) Norm(0.0, -1.0, 0.0) UV(0.933333, 1.777778)
V 17: Pos(0.8, 0.225, 0.42) Norm(1.0, 0.0, 0.0) UV(0.933333, 0.5)
V 18: Pos(-0.8, 0.225, 0.42) Norm(0.0, 1.0, 0.0) UV(0.933333, -1.777778)
V 19: Pos(-0.8, -0.225, 0.42) Norm(-1.0, 0.0, 0.0) UV(0.933333, -0.5)
===Triangles (Indices): 10
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 0 15 1
Tri: 3 16 4
Tri: 6 17 7
Tri: 9 18 10
Tri: 12 19 13
+33
View File
@@ -0,0 +1,33 @@
===Vertices (Split by UV/Normal): 20
V 0: Pos(0.9, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.642857, -0.464286)
V 1: Pos(-0.9, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.642857, 0.464286)
V 2: Pos(-0.9, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.642857, -0.464286)
V 3: Pos(0.9, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(0.642857, 0.0)
V 4: Pos(-0.9, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(-0.642857, 0.303571)
V 5: Pos(-0.9, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(-0.642857, 0.0)
V 6: Pos(0.9, 0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 7: Pos(0.9, -0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
V 8: Pos(0.9, -0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 9: Pos(-0.9, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(-0.642857, 0.0)
V 10: Pos(0.9, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(0.642857, 0.303571)
V 11: Pos(0.9, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(0.642857, 0.0)
V 12: Pos(-0.9, -0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 13: Pos(-0.9, 0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 14: Pos(-0.9, 0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 15: Pos(0.9, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.642857, 0.464286)
V 16: Pos(0.9, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(0.642857, 0.303571)
V 17: Pos(0.9, 0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 18: Pos(-0.9, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(-0.642857, 0.303571)
V 19: Pos(-0.9, -0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
===Triangles (Indices): 10
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 0 15 1
Tri: 3 16 4
Tri: 6 17 7
Tri: 9 18 10
Tri: 12 19 13
+33
View File
@@ -0,0 +1,33 @@
===Vertices (Split by UV/Normal): 20
V 0: Pos(1.0, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.714286, -0.464286)
V 1: Pos(-1.0, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.714286, 0.464286)
V 2: Pos(-1.0, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.714286, -0.464286)
V 3: Pos(1.0, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(0.714286, 0.0)
V 4: Pos(-1.0, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(-0.714286, 0.303571)
V 5: Pos(-1.0, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(-0.714286, 0.0)
V 6: Pos(1.0, 0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 7: Pos(1.0, -0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
V 8: Pos(1.0, -0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 9: Pos(-1.0, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(-0.714286, 0.0)
V 10: Pos(1.0, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(0.714286, 0.303571)
V 11: Pos(1.0, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(0.714286, 0.0)
V 12: Pos(-1.0, -0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 13: Pos(-1.0, 0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 14: Pos(-1.0, 0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 15: Pos(1.0, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.714286, 0.464286)
V 16: Pos(1.0, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(0.714286, 0.303571)
V 17: Pos(1.0, 0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 18: Pos(-1.0, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(-0.714286, 0.303571)
V 19: Pos(-1.0, -0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
===Triangles (Indices): 10
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 0 15 1
Tri: 3 16 4
Tri: 6 17 7
Tri: 9 18 10
Tri: 12 19 13
+33
View File
@@ -0,0 +1,33 @@
===Vertices (Split by UV/Normal): 20
V 0: Pos(1.1, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.785714, -0.464286)
V 1: Pos(-1.1, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.785714, 0.464286)
V 2: Pos(-1.1, -0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(-0.785714, -0.464286)
V 3: Pos(1.1, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(0.785714, 0.0)
V 4: Pos(-1.1, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(-0.785714, 0.303571)
V 5: Pos(-1.1, -0.65, 0.0) Norm(0.0, -1.0, 0.0) UV(-0.785714, 0.0)
V 6: Pos(1.1, 0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 7: Pos(1.1, -0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
V 8: Pos(1.1, -0.65, 0.0) Norm(1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 9: Pos(-1.1, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(-0.785714, 0.0)
V 10: Pos(1.1, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(0.785714, 0.303571)
V 11: Pos(1.1, 0.65, 0.0) Norm(0.0, 1.0, 0.0) UV(0.785714, 0.0)
V 12: Pos(-1.1, -0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.0)
V 13: Pos(-1.1, 0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 14: Pos(-1.1, 0.65, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.464286, 0.0)
V 15: Pos(1.1, 0.65, 0.425) Norm(0.0, 0.0, 1.0) UV(0.785714, 0.464286)
V 16: Pos(1.1, -0.65, 0.425) Norm(0.0, -1.0, 0.0) UV(0.785714, 0.303571)
V 17: Pos(1.1, 0.65, 0.425) Norm(1.0, 0.0, 0.0) UV(0.464286, 0.303571)
V 18: Pos(-1.1, 0.65, 0.425) Norm(0.0, 1.0, 0.0) UV(-0.785714, 0.303571)
V 19: Pos(-1.1, -0.65, 0.425) Norm(-1.0, 0.0, 0.0) UV(-0.464286, 0.303571)
===Triangles (Indices): 10
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 0 15 1
Tri: 3 16 4
Tri: 6 17 7
Tri: 9 18 10
Tri: 12 19 13
@@ -0,0 +1,59 @@
===Vertices (Split by UV/Normal): 38
V 0: Pos(-0.273827, 0.117924, -0.041259) Norm(0.406167, 0.85222, 0.329773) UV(0.983398, 0.003906)
V 1: Pos(0.089112, -0.373135, 0.780749) Norm(0.406167, 0.85222, 0.329773) UV(0.746094, 0.541016)
V 2: Pos(0.232577, -0.129362, -0.025925) Norm(0.406167, 0.85222, 0.329773) UV(0.746094, 0.003906)
V 3: Pos(0.271487, 0.12939, -0.023922) Norm(0.427718, -0.876634, -0.220388) UV(0.365234, 0.003906)
V 4: Pos(-0.215197, -0.301759, 0.746518) Norm(0.427718, -0.876634, -0.220388) UV(0.001953, 0.753906)
V 5: Pos(-0.269386, -0.129645, -0.043262) Norm(0.427718, -0.876634, -0.220388) UV(0.001953, 0.003906)
V 6: Pos(0.084147, 0.273081, -0.044571) Norm(0.919987, -0.278934, -0.275353) UV(0.365234, 0.003906)
V 7: Pos(0.13565, -0.341112, 0.749688) Norm(0.919987, -0.278934, -0.275353) UV(0.001953, 0.753906)
V 8: Pos(-0.084866, -0.306037, -0.022613) Norm(0.919987, -0.278934, -0.275353) UV(0.001953, 0.003906)
V 9: Pos(-0.076432, 0.270303, -0.021445) Norm(-0.963595, -0.190035, -0.188071) UV(0.001953, 0.003906)
V 10: Pos(-0.093031, -0.334699, 0.674922) Norm(-0.963595, -0.190035, -0.188071) UV(0.365234, 0.753906)
V 11: Pos(-0.205527, 0.21168, 0.699217) Norm(-0.963595, -0.190035, -0.188071) UV(0.001953, 0.753906)
V 12: Pos(-0.215428, 0.242878, -0.003775) Norm(0.745883, 0.638147, 0.19086) UV(0.742188, 0.003906)
V 13: Pos(0.12593, -0.392042, 0.785073) Norm(0.745883, 0.638147, 0.19086) UV(0.369141, 0.753906)
V 14: Pos(0.19619, -0.220397, -0.063409) Norm(0.745883, 0.638147, 0.19086) UV(0.369141, 0.003906)
V 15: Pos(0.247094, 0.014366, -0.049208) Norm(-0.006139, -0.963923, -0.26611) UV(0.742188, 0.003906)
V 16: Pos(-0.245197, -0.183174, 0.677691) Norm(-0.006139, -0.963923, -0.26611) UV(0.369141, 0.753906)
V 17: Pos(-0.2877, 0.00915, -0.017976) Norm(-0.006139, -0.963923, -0.26611) UV(0.369141, 0.003906)
V 18: Pos(0.300358, 0.14707, -0.004204) Norm(-0.533914, 0.789405, 0.302945) UV(0.001953, 0.003906)
V 19: Pos(-0.16047, -0.453601, 0.748836) Norm(-0.533914, 0.789405, 0.302945) UV(0.365234, 0.753906)
V 20: Pos(0.376465, -0.113002, 0.807612) Norm(-0.533914, 0.789405, 0.302945) UV(0.001953, 0.753906)
V 21: Pos(-0.047381, -0.201038, -0.038127) Norm(-0.962285, 0.163946, -0.217092) UV(0.365234, 0.003906)
V 22: Pos(-0.111266, 0.35189, 0.662616) Norm(-0.962285, 0.163946, -0.217092) UV(0.001953, 0.753906)
V 23: Pos(0.042398, 0.337932, -0.029057) Norm(-0.962285, 0.163946, -0.217092) UV(0.001953, 0.003906)
V 24: Pos(-0.116464, 0.256365, -0.006503) Norm(0.878422, 0.424762, -0.218978) UV(0.365234, 0.003906)
V 25: Pos(0.283017, -0.251336, 0.611186) Norm(0.878422, 0.424762, -0.218978) UV(0.001953, 0.753906)
V 26: Pos(0.117711, -0.255846, -0.060681) Norm(0.878422, 0.424762, -0.218978) UV(0.001953, 0.003906)
V 27: Pos(-0.273827, 0.117924, -0.041259) Norm(0.406167, 0.852219, 0.329773) UV(0.983398, 0.003906)
V 28: Pos(-0.417292, -0.12585, 0.765415) Norm(0.406167, 0.852219, 0.329773) UV(0.983398, 0.541016)
V 29: Pos(0.089112, -0.373135, 0.780749) Norm(0.406167, 0.852219, 0.329773) UV(0.746094, 0.541016)
V 30: Pos(0.325676, -0.042723, 0.765857) Norm(0.427718, -0.876634, -0.220388) UV(0.365234, 0.753906)
V 31: Pos(0.304663, 0.238007, 0.72773) Norm(0.919987, -0.278934, -0.275353) UV(0.365234, 0.753906)
V 32: Pos(0.036063, -0.276076, -0.045739) Norm(-0.963595, -0.190035, -0.188071) UV(0.365234, 0.003906)
V 33: Pos(-0.285689, 0.071232, 0.844708) Norm(0.745883, 0.638147, 0.19086) UV(0.742188, 0.753906)
V 34: Pos(0.289597, -0.177957, 0.646459) Norm(-0.006139, -0.963923, -0.26611) UV(0.742188, 0.753906)
V 35: Pos(-0.236577, -0.19353, -0.06298) Norm(-0.533914, 0.789405, 0.302945) UV(0.365234, 0.003906)
V 36: Pos(-0.201045, -0.18708, 0.653547) Norm(-0.962285, 0.163946, -0.217092) UV(0.365234, 0.753906)
V 37: Pos(0.048842, 0.260875, 0.665364) Norm(0.878422, 0.424762, -0.218978) UV(0.365234, 0.753906)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 3 30 4
Tri: 6 31 7
Tri: 9 32 10
Tri: 12 33 13
Tri: 15 34 16
Tri: 18 35 19
Tri: 21 36 22
Tri: 24 37 25
Binary file not shown.
@@ -0,0 +1,57 @@
===Vertices (Split by UV/Normal): 36
V 0: Pos(0.133265, -0.192101, -0.0013) Norm(-0.694625, -0.662526, 0.280277) UV(0.730469, 0.000977)
V 1: Pos(-0.13907, 0.307041, 0.503644) Norm(-0.694625, -0.662526, 0.280277) UV(0.003906, 0.188477)
V 2: Pos(-0.21585, 0.153872, -0.04871) Norm(-0.694625, -0.662526, 0.280277) UV(0.003906, 0.000977)
V 3: Pos(-0.256127, -0.073006, -0.006069) Norm(0.151786, -0.9719, 0.17992) UV(0.003906, 0.569336)
V 4: Pos(0.293837, 0.115855, 0.55016) Norm(0.151786, -0.9719, 0.17992) UV(0.738281, 0.75293)
V 5: Pos(-0.229425, 0.041146, 0.588033) Norm(0.151786, -0.9719, 0.17992) UV(0.003906, 0.75293)
V 6: Pos(-0.191629, -0.167851, -0.025647) Norm(-0.592413, 0.793335, -0.140234) UV(0.738281, 0.569336)
V 7: Pos(0.159993, 0.18866, 0.5058) Norm(-0.592413, 0.793335, -0.140234) UV(0.003906, 0.75293)
V 8: Pos(0.206042, 0.129332, -0.024363) Norm(-0.592413, 0.793335, -0.140234) UV(0.003906, 0.569336)
V 9: Pos(-0.106539, -0.239584, -0.004719) Norm(0.94814, -0.274932, 0.159511) UV(0.003906, 0.19043)
V 10: Pos(-0.031599, 0.325037, 0.523012) Norm(0.94814, -0.274932, 0.159511) UV(0.75, 0.37793)
V 11: Pos(-0.181998, -0.170094, 0.563585) Norm(0.94814, -0.274932, 0.159511) UV(0.003906, 0.37793)
V 12: Pos(-0.094517, 0.149949, -0.027188) Norm(0.80139, 0.583703, -0.13063) UV(0.738281, 0.569336)
V 13: Pos(0.181239, -0.116976, 0.471807) Norm(0.80139, 0.583703, -0.13063) UV(0.003906, 0.75293)
V 14: Pos(0.131929, -0.159971, -0.022823) Norm(0.80139, 0.583703, -0.13063) UV(0.003906, 0.569336)
V 15: Pos(-0.191437, 0.116118, -0.017885) Norm(0.498884, 0.83417, -0.235109) UV(0.599609, 0.379883)
V 16: Pos(0.270816, 0.004641, 0.567461) Norm(0.498884, 0.83417, -0.235109) UV(0.003906, 0.567383)
V 17: Pos(0.178465, -0.109119, -0.032125) Norm(0.498884, 0.83417, -0.235109) UV(0.003906, 0.379883)
V 18: Pos(-0.14981, -0.064021, -0.021972) Norm(-0.38218, 0.846186, 0.371359) UV(0.599609, 0.379883)
V 19: Pos(0.204279, -0.105789, 0.437609) Norm(-0.38218, 0.846186, 0.371359) UV(0.003906, 0.567383)
V 20: Pos(0.117476, 0.059362, -0.028038) Norm(-0.38218, 0.846186, 0.371359) UV(0.003906, 0.379883)
V 21: Pos(0.124339, 0.267927, -0.041489) Norm(0.816073, -0.486746, -0.311615) UV(0.75, 0.19043)
V 22: Pos(0.056945, -0.26634, 0.616546) Norm(0.816073, -0.486746, -0.311615) UV(0.003906, 0.37793)
V 23: Pos(-0.140919, -0.197908, -0.008521) Norm(0.816073, -0.486746, -0.311615) UV(0.003906, 0.19043)
V 24: Pos(-0.061648, 0.23025, -0.028801) Norm(-0.921451, -0.369546, -0.119851) UV(0.003906, 0.19043)
V 25: Pos(0.052085, -0.250515, 0.579165) Norm(-0.921451, -0.369546, -0.119851) UV(0.75, 0.37793)
V 26: Pos(-0.132376, 0.211893, 0.571573) Norm(-0.921451, -0.369546, -0.119851) UV(0.003906, 0.37793)
V 27: Pos(0.210045, -0.038932, 0.551054) Norm(-0.694625, -0.662526, 0.280277) UV(0.730469, 0.188477)
V 28: Pos(0.267135, 0.001703, -0.043941) Norm(0.151786, -0.9719, 0.17992) UV(0.738281, 0.569336)
V 29: Pos(-0.237678, -0.108523, 0.504516) Norm(-0.592413, 0.793335, -0.140234) UV(0.738281, 0.75293)
V 30: Pos(0.04386, 0.255547, -0.045292) Norm(0.94814, -0.274932, 0.159511) UV(0.75, 0.19043)
V 31: Pos(-0.045207, 0.192944, 0.467443) Norm(0.80139, 0.583703, -0.13063) UV(0.738281, 0.75293)
V 32: Pos(-0.099086, 0.229879, 0.581701) Norm(0.498884, 0.83417, -0.235109) UV(0.599609, 0.567383)
V 33: Pos(-0.063007, -0.229171, 0.443675) Norm(-0.38218, 0.846186, 0.371359) UV(0.599609, 0.567383)
V 34: Pos(0.322203, 0.199495, 0.583579) Norm(0.816073, -0.486746, -0.311615) UV(0.75, 0.37793)
V 35: Pos(0.122812, -0.232158, -0.021209) Norm(-0.921451, -0.369546, -0.119851) UV(0.75, 0.19043)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 0 27 1
Tri: 3 28 4
Tri: 6 29 7
Tri: 9 30 10
Tri: 12 31 13
Tri: 15 32 16
Tri: 18 33 19
Tri: 21 34 22
Tri: 24 35 25
Binary file not shown.
@@ -0,0 +1,61 @@
===Vertices (Split by UV/Normal): 40
V 0: Pos(-0.292955, -0.338813, -0.04835) Norm(-0.732031, 0.638136, -0.238565) UV(0.738281, 0.379883)
V 1: Pos(0.085147, 0.491646, 1.012847) Norm(-0.732031, 0.638136, -0.238565) UV(0.003906, 0.563477)
V 2: Pos(0.283903, 0.324209, -0.044909) Norm(-0.732031, 0.638136, -0.238565) UV(0.003906, 0.379883)
V 3: Pos(0.035732, 0.235767, -0.061544) Norm(0.960162, -0.012499, -0.279163) UV(0.599609, 0.000977)
V 4: Pos(0.292007, -0.301712, 0.843961) Norm(0.960162, -0.012499, -0.279163) UV(0.003906, 0.188477)
V 5: Pos(0.036819, -0.347008, -0.031715) Norm(0.960162, -0.012499, -0.279163) UV(0.003906, 0.000977)
V 6: Pos(-0.212795, 0.188657, -0.055539) Norm(-0.684476, -0.690867, -0.232799) UV(0.003906, 0.19043)
V 7: Pos(-0.083911, -0.319072, 1.072278) Norm(-0.684476, -0.690867, -0.232799) UV(0.419922, 0.37793)
V 8: Pos(-0.430032, 0.029853, 1.054459) Norm(-0.684476, -0.690867, -0.232799) UV(0.003906, 0.37793)
V 9: Pos(-0.339503, -0.008897, -0.065504) Norm(0.234614, 0.933666, -0.270599) UV(0.599609, 0.000977)
V 10: Pos(0.269234, 0.115374, 0.89106) Norm(0.234614, 0.933666, -0.270599) UV(0.003906, 0.188477)
V 11: Pos(0.264795, -0.149806, -0.027755) Norm(0.234614, 0.933666, -0.270599) UV(0.003906, 0.000977)
V 12: Pos(-0.135238, -0.099286, -0.057379) Norm(-0.623123, 0.769021, -0.142562) UV(0.419922, 0.19043)
V 13: Pos(0.092676, 0.269747, 0.937106) Norm(-0.623123, 0.769021, -0.142562) UV(0.003906, 0.37793)
V 14: Pos(0.217268, 0.190328, -0.03588) Norm(-0.623123, 0.769021, -0.142562) UV(0.003906, 0.19043)
V 15: Pos(0.211654, 0.474267, -0.022922) Norm(0.926513, -0.352338, -0.132025) UV(0.738281, 0.379883)
V 16: Pos(-0.037064, -0.578193, 1.040368) Norm(0.926513, -0.352338, -0.132025) UV(0.003906, 0.563477)
V 17: Pos(-0.156653, -0.476473, -0.070336) Norm(0.926513, -0.352338, -0.132025) UV(0.003906, 0.379883)
V 18: Pos(-0.122412, 0.493975, -0.016249) Norm(0.983724, 0.100766, 0.148774) UV(0.738281, 0.379883)
V 19: Pos(-0.184249, -0.529219, 1.085646) Norm(0.983724, 0.100766, 0.148774) UV(0.003906, 0.563477)
V 20: Pos(-0.01812, -0.434469, -0.07701) Norm(0.983724, 0.100766, 0.148774) UV(0.003906, 0.379883)
V 21: Pos(0.320231, -0.225643, -0.012691) Norm(-0.475633, -0.833093, -0.282364) UV(0.599609, 0.000977)
V 22: Pos(-0.541321, -0.082362, 1.015826) Norm(-0.475633, -0.833093, -0.282364) UV(0.003906, 0.188477)
V 23: Pos(-0.281624, 0.140977, -0.080568) Norm(-0.475633, -0.833093, -0.282364) UV(0.003906, 0.000977)
V 24: Pos(-0.409436, -0.029761, -0.026775) Norm(-0.198202, 0.972619, -0.121364) UV(0.478516, 0.56543)
V 25: Pos(0.430501, 0.263898, 0.954906) Norm(-0.198202, 0.972619, -0.121364) UV(0.003906, 0.699707)
V 26: Pos(0.40697, 0.131653, -0.066483) Norm(-0.198202, 0.972619, -0.121364) UV(0.003906, 0.56543)
V 27: Pos(-0.491711, -0.171377, 1.009405) Norm(-0.732031, 0.638136, -0.238565) UV(0.738281, 0.563477)
V 28: Pos(0.290921, 0.281063, 0.814133) Norm(0.960162, -0.012499, -0.279163) UV(0.599609, 0.188477)
V 29: Pos(-0.212795, 0.188657, -0.055539) Norm(-0.684477, -0.690867, -0.232799) UV(0.003906, 0.19043)
V 30: Pos(0.133326, -0.160268, -0.03772) Norm(-0.684477, -0.690867, -0.232799) UV(0.419922, 0.19043)
V 31: Pos(-0.083911, -0.319072, 1.072278) Norm(-0.684477, -0.690867, -0.232799) UV(0.419922, 0.37793)
V 32: Pos(-0.335064, 0.256283, 0.853312) Norm(0.234614, 0.933666, -0.270599) UV(0.599609, 0.188477)
V 33: Pos(-0.25983, -0.019868, 0.915607) Norm(-0.623123, 0.769021, -0.142562) UV(0.419922, 0.37793)
V 34: Pos(0.331244, 0.372548, 1.087782) Norm(0.926513, -0.352338, -0.132025) UV(0.738281, 0.563477)
V 35: Pos(-0.288542, 0.399225, 1.146407) Norm(0.983724, 0.100766, 0.148774) UV(0.738281, 0.563477)
V 36: Pos(0.060535, -0.448982, 1.083703) Norm(-0.475633, -0.833093, -0.282364) UV(0.599609, 0.188477)
V 37: Pos(-0.409436, -0.029761, -0.026775) Norm(-0.198202, 0.972618, -0.121364) UV(0.478516, 0.56543)
V 38: Pos(-0.385905, 0.102484, 0.994614) Norm(-0.198202, 0.972618, -0.121364) UV(0.478516, 0.699707)
V 39: Pos(0.430501, 0.263898, 0.954906) Norm(-0.198202, 0.972618, -0.121364) UV(0.003906, 0.699707)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 0 27 1
Tri: 3 28 4
Tri: 29 30 31
Tri: 9 32 10
Tri: 12 33 13
Tri: 15 34 16
Tri: 18 35 19
Tri: 21 36 22
Tri: 37 38 39
Binary file not shown.
@@ -0,0 +1,57 @@
===Vertices (Split by UV/Normal): 36
V 0: Pos(-0.187384, 0.224667, -0.016321) Norm(-0.728664, -0.642917, 0.236023) UV(0.003906, 0.000977)
V 1: Pos(0.25306, -0.085312, 0.499073) Norm(-0.728664, -0.642917, 0.236023) UV(0.730469, 0.188477)
V 2: Pos(-0.081565, 0.298769, 0.512219) Norm(-0.728664, -0.642917, 0.236023) UV(0.003906, 0.188477)
V 3: Pos(-0.217149, 0.025089, -0.007047) Norm(0.139576, 0.927931, -0.345633) UV(0.478516, 0.56543)
V 4: Pos(0.371139, 0.134414, 0.524029) Norm(0.139576, 0.927931, -0.345633) UV(0.003906, 0.699707)
V 5: Pos(0.302301, -0.06485, -0.038741) Norm(0.139576, 0.927931, -0.345633) UV(0.003906, 0.56543)
V 6: Pos(-0.145425, -0.088444, -0.016731) Norm(0.551714, -0.775446, 0.307074) UV(0.003906, 0.379883)
V 7: Pos(0.103839, 0.257524, 0.409087) Norm(0.551714, -0.775446, 0.307074) UV(0.738281, 0.563477)
V 8: Pos(-0.214871, 0.03565, 0.421413) Norm(0.551714, -0.775446, 0.307074) UV(0.003906, 0.563477)
V 9: Pos(0.011233, 0.155862, -0.01215) Norm(0.905965, -0.244038, -0.345938) UV(0.478516, 0.56543)
V 10: Pos(0.065129, -0.245427, 0.412083) Norm(0.905965, -0.244038, -0.345938) UV(0.003906, 0.699707)
V 11: Pos(-0.08527, -0.171931, -0.033638) Norm(0.905965, -0.244038, -0.345938) UV(0.003906, 0.56543)
V 12: Pos(0.174263, -0.191998, -0.04718) Norm(-0.689648, -0.678694, 0.252508) UV(0.75, 0.19043)
V 13: Pos(-0.049463, 0.24368, 0.512803) Norm(-0.689648, -0.678694, 0.252508) UV(0.003906, 0.37793)
V 14: Pos(-0.18047, 0.186531, 0.001392) Norm(-0.689648, -0.678694, 0.252508) UV(0.003906, 0.19043)
V 15: Pos(0.258449, -0.054672, -0.024131) Norm(-0.149538, -0.952501, -0.265292) UV(0.738281, 0.379883)
V 16: Pos(-0.275248, -0.130355, 0.548434) Norm(-0.149538, -0.952501, -0.265292) UV(0.003906, 0.563477)
V 17: Pos(-0.25381, 0.025062, -0.021657) Norm(-0.149538, -0.952501, -0.265292) UV(0.003906, 0.379883)
V 18: Pos(-0.17845, -0.048121, -0.01971) Norm(-0.22137, 0.913185, -0.342183) UV(0.75, 0.19043)
V 19: Pos(0.195669, 0.209498, 0.425768) Norm(-0.22137, 0.913185, -0.342183) UV(0.003906, 0.37793)
V 20: Pos(0.226831, 0.047739, -0.026077) Norm(-0.22137, 0.913185, -0.342183) UV(0.003906, 0.19043)
V 21: Pos(-0.077075, -0.18721, -0.02324) Norm(0.862163, -0.455545, -0.221707) UV(0.003906, 0.56543)
V 22: Pos(0.205583, 0.079241, 0.528464) Norm(0.862163, -0.455545, -0.221707) UV(0.478516, 0.699707)
V 23: Pos(0.033186, -0.246699, 0.527772) Norm(0.862163, -0.455545, -0.221707) UV(0.003906, 0.699707)
V 24: Pos(0.063748, -0.306486, -0.032498) Norm(-0.965932, -0.093567, 0.241288) UV(0.730469, 0.000977)
V 25: Pos(0.159653, 0.256417, 0.569718) Norm(-0.965932, -0.093567, 0.241288) UV(0.003906, 0.188477)
V 26: Pos(0.013368, 0.263139, -0.01329) Norm(-0.965932, -0.093567, 0.241288) UV(0.003906, 0.000977)
V 27: Pos(0.147241, -0.159413, -0.029467) Norm(-0.728664, -0.642917, 0.236023) UV(0.730469, 0.000977)
V 28: Pos(-0.148312, 0.224354, 0.555723) Norm(0.139576, 0.927931, -0.345633) UV(0.478516, 0.699707)
V 29: Pos(0.173285, 0.13343, -0.029057) Norm(0.551714, -0.775446, 0.307074) UV(0.738281, 0.379883)
V 30: Pos(0.161631, 0.082366, 0.433571) Norm(0.905965, -0.244038, -0.345938) UV(0.478516, 0.699707)
V 31: Pos(0.305271, -0.13485, 0.464232) Norm(-0.689648, -0.678694, 0.252508) UV(0.75, 0.37793)
V 32: Pos(0.237011, -0.210089, 0.54596) Norm(-0.149538, -0.952501, -0.265292) UV(0.738281, 0.563477)
V 33: Pos(-0.209612, 0.113637, 0.432135) Norm(-0.22137, 0.913185, -0.342183) UV(0.75, 0.37793)
V 34: Pos(0.095321, 0.13873, -0.022548) Norm(0.862163, -0.455545, -0.221707) UV(0.478516, 0.56543)
V 35: Pos(0.210033, -0.313208, 0.55051) Norm(-0.965932, -0.093567, 0.241288) UV(0.730469, 0.188477)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 0 27 1
Tri: 3 28 4
Tri: 6 29 7
Tri: 9 30 10
Tri: 12 31 13
Tri: 15 32 16
Tri: 18 33 19
Tri: 21 34 22
Tri: 24 35 25
Binary file not shown.
@@ -0,0 +1,59 @@
===Vertices (Split by UV/Normal): 38
V 0: Pos(-0.194076, 0.123011, -0.046649) Norm(0.669016, 0.727036, -0.154393) UV(0.209961, 0.003906)
V 1: Pos(0.15808, -0.018483, 0.813016) Norm(0.669016, 0.727036, -0.154393) UV(0.001953, 0.753906)
V 2: Pos(0.093677, -0.138541, -0.031409) Norm(0.669016, 0.727036, -0.154393) UV(0.001953, 0.003906)
V 3: Pos(-0.18968, -0.022063, -0.047687) Norm(-0.33455, 0.899291, -0.281696) UV(0.209961, 0.003906)
V 4: Pos(0.051268, 0.378755, 0.945735) Norm(-0.33455, 0.899291, -0.281696) UV(0.001953, 0.753906)
V 5: Pos(0.193123, 0.12577, -0.030371) Norm(-0.33455, 0.899291, -0.281696) UV(0.001953, 0.003906)
V 6: Pos(-0.370549, -0.360478, -0.041809) Norm(-0.647232, 0.707403, -0.284027) UV(0.586914, 0.003906)
V 7: Pos(0.091065, 0.453011, 0.932369) Norm(-0.647232, 0.707403, -0.284027) UV(0.213867, 0.753906)
V 8: Pos(0.289575, 0.245729, -0.036249) Norm(-0.647232, 0.707403, -0.284027) UV(0.213867, 0.003906)
V 9: Pos(0.05025, -0.29813, -0.063938) Norm(-0.953061, -0.229138, 0.197917) UV(0.888672, 0.003906)
V 10: Pos(0.090846, 0.26625, 0.78496) Norm(-0.953061, -0.229138, 0.197917) UV(0.59082, 0.753906)
V 11: Pos(-0.08197, 0.294849, -0.01412) Norm(-0.953061, -0.229138, 0.197917) UV(0.59082, 0.003906)
V 12: Pos(0.143008, -0.209035, -0.035602) Norm(-0.662004, -0.726789, -0.18311) UV(0.209961, 0.003906)
V 13: Pos(-0.365585, -0.000767, 0.976489) Norm(-0.662004, -0.726789, -0.18311) UV(0.001953, 0.753906)
V 14: Pos(-0.22714, 0.129845, -0.042456) Norm(-0.662004, -0.726789, -0.18311) UV(0.001953, 0.003906)
V 15: Pos(0.221702, -0.039002, -0.0578) Norm(-0.316479, -0.910379, 0.266555) UV(0.209961, 0.003906)
V 16: Pos(-0.00618, 0.344801, 0.982457) Norm(-0.316479, -0.910379, 0.266555) UV(0.001953, 0.753906)
V 17: Pos(-0.185325, 0.113486, -0.020258) Norm(-0.316479, -0.910379, 0.266555) UV(0.001953, 0.003906)
V 18: Pos(-0.2121, -0.159534, -0.060435) Norm(-0.637761, 0.730999, 0.242695) UV(0.209961, 0.003906)
V 19: Pos(0.203941, -0.106425, 0.872885) Norm(-0.637761, 0.730999, 0.242695) UV(0.001953, 0.753906)
V 20: Pos(0.126795, 0.121921, -0.017623) Norm(-0.637761, 0.730999, 0.242695) UV(0.001953, 0.003906)
V 21: Pos(0.133756, 0.088742, -0.053448) Norm(0.875994, -0.456881, 0.154581) UV(0.209961, 0.003906)
V 22: Pos(-0.093702, -0.07497, 0.751663) Norm(0.875994, -0.456881, 0.154581) UV(0.001953, 0.753906)
V 23: Pos(-0.018984, -0.194356, -0.02461) Norm(0.875994, -0.456881, 0.154581) UV(0.001953, 0.003906)
V 24: Pos(0.077842, -0.199044, -0.042973) Norm(-0.927352, -0.296153, -0.228719) UV(0.888672, 0.003906)
V 25: Pos(-0.287629, 0.234914, 0.876944) Norm(-0.927352, -0.296153, -0.228719) UV(0.59082, 0.753906)
V 26: Pos(-0.087795, 0.313526, -0.035085) Norm(-0.927352, -0.296153, -0.228719) UV(0.59082, 0.003906)
V 27: Pos(-0.129673, 0.243069, 0.797776) Norm(0.669016, 0.727036, -0.154393) UV(0.209961, 0.753906)
V 28: Pos(-0.331536, 0.230922, 0.928418) Norm(-0.33455, 0.899291, -0.281696) UV(0.209961, 0.753906)
V 29: Pos(-0.569059, -0.153196, 0.926809) Norm(-0.647232, 0.707403, -0.284027) UV(0.586914, 0.753906)
V 30: Pos(0.05025, -0.29813, -0.063938) Norm(-0.953061, -0.229138, 0.197916) UV(0.888672, 0.003906)
V 31: Pos(0.223066, -0.326728, 0.735142) Norm(-0.953061, -0.229138, 0.197916) UV(0.888672, 0.753906)
V 32: Pos(0.090846, 0.26625, 0.78496) Norm(-0.953061, -0.229138, 0.197916) UV(0.59082, 0.753906)
V 33: Pos(0.004562, -0.339647, 0.983343) Norm(-0.662004, -0.726789, -0.18311) UV(0.209961, 0.753906)
V 34: Pos(0.400846, 0.192312, 0.944916) Norm(-0.316479, -0.910379, 0.266555) UV(0.209961, 0.753906)
V 35: Pos(-0.134953, -0.38788, 0.830073) Norm(-0.637761, 0.730999, 0.242695) UV(0.209961, 0.753906)
V 36: Pos(0.059039, 0.208128, 0.722826) Norm(0.875994, -0.456881, 0.154581) UV(0.209961, 0.753906)
V 37: Pos(-0.121992, -0.277657, 0.869055) Norm(-0.927352, -0.296153, -0.228719) UV(0.888672, 0.753906)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 0 27 1
Tri: 3 28 4
Tri: 6 29 7
Tri: 30 31 32
Tri: 12 33 13
Tri: 15 34 16
Tri: 18 35 19
Tri: 21 36 22
Tri: 24 37 25
Binary file not shown.
@@ -0,0 +1,59 @@
===Vertices (Split by UV/Normal): 38
V 0: Pos(-0.287772, 0.212075, -0.06502) Norm(-0.422692, -0.845709, -0.325741) UV(0.003906, 0.000977)
V 1: Pos(0.202895, -0.365009, 0.796538) Norm(-0.422692, -0.845709, -0.325741) UV(0.75, 0.188477)
V 2: Pos(-0.476607, -0.000881, 0.732911) Norm(-0.422692, -0.845709, -0.325741) UV(0.003906, 0.188477)
V 3: Pos(-0.260455, -0.017642, -0.050798) Norm(-0.258856, 0.927135, 0.270952) UV(0.599609, 0.19043)
V 4: Pos(0.278523, -0.07725, 0.668084) Norm(-0.258856, 0.927135, 0.270952) UV(0.003906, 0.37793)
V 5: Pos(0.272212, 0.120796, -0.015614) Norm(-0.258856, 0.927135, 0.270952) UV(0.003906, 0.19043)
V 6: Pos(0.160515, 0.270502, -0.013662) Norm(0.788054, -0.581485, -0.202104) UV(0.738281, 0.379883)
V 7: Pos(-0.15246, -0.424885, 0.766704) Norm(0.788054, -0.581485, -0.202104) UV(0.003906, 0.563477)
V 8: Pos(-0.260105, -0.285956, -0.052749) Norm(0.788054, -0.581485, -0.202104) UV(0.003906, 0.379883)
V 9: Pos(0.031654, -0.383817, -0.010768) Norm(-0.934758, -0.052196, -0.351431) UV(0.738281, 0.379883)
V 10: Pos(-0.308207, 0.450217, 0.769342) Norm(-0.934758, -0.052196, -0.351431) UV(0.003906, 0.563477)
V 11: Pos(0.003938, 0.414687, -0.055644) Norm(-0.934758, -0.052196, -0.351431) UV(0.003906, 0.379883)
V 12: Pos(0.133462, -0.218948, -0.042286) Norm(-0.721926, -0.644237, 0.252551) UV(0.599609, 0.19043)
V 13: Pos(-0.096995, 0.358122, 0.771001) Norm(-0.721926, -0.644237, 0.252551) UV(0.003906, 0.37793)
V 14: Pos(-0.268696, 0.238826, -0.024125) Norm(-0.721926, -0.644237, 0.252551) UV(0.003906, 0.19043)
V 15: Pos(-0.292382, 0.000112, -0.017284) Norm(0.072486, 0.972431, 0.22164) UV(0.75, 0.000977)
V 16: Pos(0.319726, -0.217756, 0.738407) Norm(0.072486, 0.972431, 0.22164) UV(0.003906, 0.188477)
V 17: Pos(0.287782, -0.035877, -0.049128) Norm(0.072486, 0.972431, 0.22164) UV(0.003906, 0.000977)
V 18: Pos(-0.171318, -0.131958, -0.025979) Norm(-0.632722, 0.678948, 0.372414) UV(0.599609, 0.19043)
V 19: Pos(0.425246, -0.000126, 0.747226) Norm(-0.632722, 0.678948, 0.372414) UV(0.003906, 0.37793)
V 20: Pos(0.190416, 0.213075, -0.040433) Norm(-0.632722, 0.678948, 0.372414) UV(0.003906, 0.19043)
V 21: Pos(-0.059444, -0.362402, -0.03028) Norm(-0.914595, 0.15541, -0.373315) UV(0.75, 0.000977)
V 22: Pos(-0.237298, 0.350833, 0.702366) Norm(-0.914595, 0.15541, -0.373315) UV(0.003906, 0.188477)
V 23: Pos(0.054416, 0.293616, -0.036131) Norm(-0.914595, 0.15541, -0.373315) UV(0.003906, 0.000977)
V 24: Pos(0.123917, -0.249907, -0.029496) Norm(-0.85265, -0.486589, -0.190314) UV(0.478516, 0.56543)
V 25: Pos(-0.287666, 0.198497, 0.668024) Norm(-0.85265, -0.486589, -0.190314) UV(0.003906, 0.699707)
V 26: Pos(-0.16437, 0.258162, -0.036916) Norm(-0.85265, -0.486589, -0.190314) UV(0.003906, 0.56543)
V 27: Pos(-0.287772, 0.212075, -0.06502) Norm(-0.422692, -0.84571, -0.325741) UV(0.003906, 0.000977)
V 28: Pos(0.39173, -0.152052, -0.001392) Norm(-0.422692, -0.84571, -0.325741) UV(0.75, 0.000977)
V 29: Pos(0.202895, -0.365009, 0.796538) Norm(-0.422692, -0.84571, -0.325741) UV(0.75, 0.188477)
V 30: Pos(-0.254143, -0.215688, 0.6329) Norm(-0.258856, 0.927135, 0.270952) UV(0.599609, 0.37793)
V 31: Pos(0.26816, 0.131573, 0.805791) Norm(0.788054, -0.581485, -0.202104) UV(0.738281, 0.563477)
V 32: Pos(-0.280492, -0.348287, 0.814218) Norm(-0.934758, -0.052196, -0.351431) UV(0.738281, 0.563477)
V 33: Pos(0.305163, -0.099652, 0.75284) Norm(-0.721926, -0.644237, 0.252551) UV(0.599609, 0.37793)
V 34: Pos(-0.260438, -0.181767, 0.770251) Norm(0.072486, 0.972431, 0.22164) UV(0.75, 0.188477)
V 35: Pos(0.063513, -0.345159, 0.76168) Norm(-0.632722, 0.678948, 0.372414) UV(0.599609, 0.37793)
V 36: Pos(-0.351158, -0.305186, 0.708216) Norm(-0.914595, 0.15541, -0.373315) UV(0.75, 0.188477)
V 37: Pos(0.000622, -0.309572, 0.675444) Norm(-0.85265, -0.486589, -0.190314) UV(0.478516, 0.699707)
===Triangles (Indices): 18
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 3 30 4
Tri: 6 31 7
Tri: 9 32 10
Tri: 12 33 13
Tri: 15 34 16
Tri: 18 35 19
Tri: 21 36 22
Tri: 24 37 25
Binary file not shown.
Binary file not shown.
+81
View File
@@ -0,0 +1,81 @@
===Vertices (Split by UV/Normal): 52
V 0: Pos(-4.5, -4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.5, 0.98)
V 1: Pos(-4.68, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(4.5, 0.52)
V 2: Pos(-4.68, -4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.5, 0.52)
V 3: Pos(-4.5, -4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.02)
V 4: Pos(-4.68, -4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.48)
V 5: Pos(-4.68, -4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.02)
V 6: Pos(-4.5, 4.5, -0.02) Norm(1.0, 0.0, 0.0) UV(4.5, 0.02)
V 7: Pos(-4.5, -4.5, 0.2) Norm(1.0, 0.0, 0.0) UV(-4.5, 0.48)
V 8: Pos(-4.5, -4.5, -0.02) Norm(1.0, 0.0, 0.0) UV(-4.5, 0.02)
V 9: Pos(-4.68, -4.5, -0.02) Norm(-1.0, 0.0, 0.0) UV(-4.5, 0.02)
V 10: Pos(-4.68, 4.5, 0.2) Norm(-1.0, 0.0, 0.0) UV(4.5, 0.48)
V 11: Pos(-4.68, 4.5, -0.02) Norm(-1.0, 0.0, 0.0) UV(4.5, 0.02)
V 12: Pos(4.68, -4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.5, 0.98)
V 13: Pos(4.5, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(4.5, 0.52)
V 14: Pos(4.5, -4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.5, 0.52)
V 15: Pos(4.68, -4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.02)
V 16: Pos(4.5, -4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.48)
V 17: Pos(4.5, -4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.02)
V 18: Pos(4.68, 4.5, -0.02) Norm(1.0, 0.0, 0.0) UV(4.5, 0.02)
V 19: Pos(4.68, -4.5, 0.2) Norm(1.0, 0.0, 0.0) UV(-4.5, 0.48)
V 20: Pos(4.68, -4.5, -0.02) Norm(1.0, 0.0, 0.0) UV(-4.5, 0.02)
V 21: Pos(4.5, -4.5, -0.02) Norm(-1.0, 0.0, 0.0) UV(-4.5, 0.02)
V 22: Pos(4.5, 4.5, 0.2) Norm(-1.0, 0.0, 0.0) UV(4.5, 0.48)
V 23: Pos(4.5, 4.5, -0.02) Norm(-1.0, 0.0, 0.0) UV(4.5, 0.02)
V 24: Pos(4.68, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(4.68, 0.52)
V 25: Pos(-4.68, 4.68, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.68, 0.98)
V 26: Pos(-4.68, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(-4.68, 0.52)
V 27: Pos(4.68, 4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(4.68, 0.02)
V 28: Pos(-4.68, 4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(-4.68, 0.48)
V 29: Pos(-4.68, 4.5, -0.02) Norm(0.0, -1.0, 0.0) UV(-4.68, 0.02)
V 30: Pos(4.68, 4.68, -0.02) Norm(1.0, 0.0, 0.0) UV(4.68, 0.02)
V 31: Pos(4.68, 4.5, 0.2) Norm(1.0, 0.0, 0.0) UV(4.68, 0.48)
V 32: Pos(4.68, 4.5, -0.02) Norm(1.0, 0.0, 0.0) UV(4.68, 0.02)
V 33: Pos(-4.68, 4.68, -0.02) Norm(0.0, 1.0, 0.0) UV(-4.68, 0.02)
V 34: Pos(4.68, 4.68, 0.2) Norm(0.0, 1.0, 0.0) UV(4.68, 0.48)
V 35: Pos(4.68, 4.68, -0.02) Norm(0.0, 1.0, 0.0) UV(4.68, 0.02)
V 36: Pos(-4.68, 4.5, -0.02) Norm(-1.0, 0.0, 0.0) UV(-4.68, 0.02)
V 37: Pos(-4.68, 4.68, 0.2) Norm(-1.0, 0.0, 0.0) UV(-4.68, 0.48)
V 38: Pos(-4.68, 4.68, -0.02) Norm(-1.0, 0.0, 0.0) UV(-4.68, 0.02)
V 39: Pos(-4.5, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(4.5, 0.98)
V 40: Pos(-4.5, -4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.48)
V 41: Pos(-4.5, 4.5, 0.2) Norm(1.0, 0.0, 0.0) UV(4.5, 0.48)
V 42: Pos(-4.68, -4.5, 0.2) Norm(-1.0, 0.0, 0.0) UV(-4.5, 0.48)
V 43: Pos(4.68, 4.5, 0.2) Norm(0.0, 0.0, 1.0) UV(4.5, 0.98)
V 44: Pos(4.68, -4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(-4.5, 0.48)
V 45: Pos(4.68, 4.5, 0.2) Norm(1.0, 0.0, 0.0) UV(4.5, 0.48)
V 46: Pos(4.5, -4.5, 0.2) Norm(-1.0, 0.0, 0.0) UV(-4.5, 0.48)
V 47: Pos(4.68, 4.68, 0.2) Norm(0.0, 0.0, 1.0) UV(4.68, 0.98)
V 48: Pos(4.68, 4.5, 0.2) Norm(0.0, -1.0, 0.0) UV(4.68, 0.48)
V 49: Pos(4.68, 4.68, 0.2) Norm(1.0, 0.0, 0.0) UV(4.68, 0.48)
V 50: Pos(-4.68, 4.68, 0.2) Norm(0.0, 1.0, 0.0) UV(-4.68, 0.48)
V 51: Pos(-4.68, 4.5, 0.2) Norm(-1.0, 0.0, 0.0) UV(-4.68, 0.48)
===Triangles (Indices): 26
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 33 34 35
Tri: 36 37 38
Tri: 0 39 1
Tri: 3 40 4
Tri: 6 41 7
Tri: 9 42 10
Tri: 12 43 13
Tri: 15 44 16
Tri: 18 45 19
Tri: 21 46 22
Tri: 24 47 25
Tri: 27 48 28
Tri: 30 49 31
Tri: 33 50 34
Tri: 36 51 37
Binary file not shown.
Binary file not shown.
+231
View File
@@ -0,0 +1,231 @@
===Vertices (Split by UV/Normal): 148
V 0: Pos(-1.45, -1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(-0.90625, -1.09375)
V 1: Pos(-1.75, -1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(-1.09375, -0.90625)
V 2: Pos(-1.75, -1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(-1.09375, -1.09375)
V 3: Pos(-1.45, -1.75, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, -0.90625)
V 4: Pos(-1.75, -1.75, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, -1.09375)
V 5: Pos(-1.75, -1.75, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, -1.09375)
V 6: Pos(-1.45, -1.45, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, -0.90625)
V 7: Pos(-1.45, -1.75, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, -1.09375)
V 8: Pos(-1.45, -1.75, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, -1.09375)
V 9: Pos(-1.75, -1.45, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, -1.09375)
V 10: Pos(-1.45, -1.45, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, -0.90625)
V 11: Pos(-1.45, -1.45, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, -0.90625)
V 12: Pos(-1.75, -1.75, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, -1.09375)
V 13: Pos(-1.75, -1.45, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, -0.90625)
V 14: Pos(-1.75, -1.45, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, -0.90625)
V 15: Pos(-1.45, 1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(-0.90625, 0.90625)
V 16: Pos(-1.75, 1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(-1.09375, 1.09375)
V 17: Pos(-1.75, 1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(-1.09375, 0.90625)
V 18: Pos(-1.45, 1.45, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, -0.90625)
V 19: Pos(-1.75, 1.45, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, -1.09375)
V 20: Pos(-1.75, 1.45, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, -1.09375)
V 21: Pos(-1.45, 1.75, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, 1.09375)
V 22: Pos(-1.45, 1.45, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, 0.90625)
V 23: Pos(-1.45, 1.45, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, 0.90625)
V 24: Pos(-1.75, 1.75, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, -1.09375)
V 25: Pos(-1.45, 1.75, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, -0.90625)
V 26: Pos(-1.45, 1.75, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, -0.90625)
V 27: Pos(-1.75, 1.45, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 0.90625)
V 28: Pos(-1.75, 1.75, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, 1.09375)
V 29: Pos(-1.75, 1.75, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 1.09375)
V 30: Pos(1.75, -1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(1.09375, -1.09375)
V 31: Pos(1.45, -1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(0.90625, -0.90625)
V 32: Pos(1.45, -1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(0.90625, -1.09375)
V 33: Pos(1.75, -1.75, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, 1.09375)
V 34: Pos(1.45, -1.75, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, 0.90625)
V 35: Pos(1.45, -1.75, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, 0.90625)
V 36: Pos(1.75, -1.45, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, -0.90625)
V 37: Pos(1.75, -1.75, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, -1.09375)
V 38: Pos(1.75, -1.75, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, -1.09375)
V 39: Pos(1.45, -1.45, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, 0.90625)
V 40: Pos(1.75, -1.45, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, 1.09375)
V 41: Pos(1.75, -1.45, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, 1.09375)
V 42: Pos(1.45, -1.75, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, -1.09375)
V 43: Pos(1.45, -1.45, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, -0.90625)
V 44: Pos(1.45, -1.45, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, -0.90625)
V 45: Pos(1.75, 1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(1.09375, 0.90625)
V 46: Pos(1.45, 1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(0.90625, 1.09375)
V 47: Pos(1.45, 1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(0.90625, 0.90625)
V 48: Pos(1.75, 1.45, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, 1.09375)
V 49: Pos(1.45, 1.45, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, 0.90625)
V 50: Pos(1.45, 1.45, 0.0) Norm(0.0, -1.0, 0.0) UV(0.0, 0.90625)
V 51: Pos(1.75, 1.75, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, 1.09375)
V 52: Pos(1.75, 1.45, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, 0.90625)
V 53: Pos(1.75, 1.45, 0.0) Norm(1.0, 0.0, 0.0) UV(0.0, 0.90625)
V 54: Pos(1.45, 1.75, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, 0.90625)
V 55: Pos(1.75, 1.75, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, 1.09375)
V 56: Pos(1.75, 1.75, 0.0) Norm(0.0, 1.0, 0.0) UV(0.0, 1.09375)
V 57: Pos(1.45, 1.45, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 0.90625)
V 58: Pos(1.45, 1.75, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, 1.09375)
V 59: Pos(1.45, 1.75, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 1.09375)
V 60: Pos(1.8, 1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(1.125, 0.875)
V 61: Pos(-1.8, 1.8, 2.6) Norm(0.0, 0.0, 1.0) UV(-1.125, 1.125)
V 62: Pos(-1.8, 1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(-1.125, 0.875)
V 63: Pos(1.8, 1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(1.125, 1.375)
V 64: Pos(-1.8, 1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.625)
V 65: Pos(-1.8, 1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.375)
V 66: Pos(1.8, 1.8, 2.2) Norm(1.0, 0.0, 0.0) UV(1.125, 1.375)
V 67: Pos(1.8, 1.4, 2.6) Norm(1.0, 0.0, 0.0) UV(0.875, 1.625)
V 68: Pos(1.8, 1.4, 2.2) Norm(1.0, 0.0, 0.0) UV(0.875, 1.375)
V 69: Pos(-1.8, 1.8, 2.2) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.375)
V 70: Pos(1.8, 1.8, 2.6) Norm(0.0, 1.0, 0.0) UV(1.125, 1.625)
V 71: Pos(1.8, 1.8, 2.2) Norm(0.0, 1.0, 0.0) UV(1.125, 1.375)
V 72: Pos(-1.8, 1.4, 2.2) Norm(-1.0, 0.0, 0.0) UV(0.875, 1.375)
V 73: Pos(-1.8, 1.8, 2.6) Norm(-1.0, 0.0, 0.0) UV(1.125, 1.625)
V 74: Pos(-1.8, 1.8, 2.2) Norm(-1.0, 0.0, 0.0) UV(1.125, 1.375)
V 75: Pos(1.8, -1.8, 2.6) Norm(0.0, 0.0, 1.0) UV(1.125, -1.125)
V 76: Pos(-1.8, -1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(-1.125, -0.875)
V 77: Pos(-1.8, -1.8, 2.6) Norm(0.0, 0.0, 1.0) UV(-1.125, -1.125)
V 78: Pos(1.8, -1.8, 2.2) Norm(0.0, -1.0, 0.0) UV(1.125, 1.375)
V 79: Pos(-1.8, -1.8, 2.6) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.625)
V 80: Pos(-1.8, -1.8, 2.2) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.375)
V 81: Pos(1.8, -1.4, 2.2) Norm(1.0, 0.0, 0.0) UV(-0.875, 1.375)
V 82: Pos(1.8, -1.8, 2.6) Norm(1.0, 0.0, 0.0) UV(-1.125, 1.625)
V 83: Pos(1.8, -1.8, 2.2) Norm(1.0, 0.0, 0.0) UV(-1.125, 1.375)
V 84: Pos(-1.8, -1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.375)
V 85: Pos(1.8, -1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(1.125, 1.625)
V 86: Pos(1.8, -1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(1.125, 1.375)
V 87: Pos(-1.8, -1.8, 2.2) Norm(-1.0, 0.0, 0.0) UV(-1.125, 1.375)
V 88: Pos(-1.8, -1.4, 2.6) Norm(-1.0, 0.0, 0.0) UV(-0.875, 1.625)
V 89: Pos(-1.8, -1.4, 2.2) Norm(-1.0, 0.0, 0.0) UV(-0.875, 1.375)
V 90: Pos(-1.4, -1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(-0.875, -0.875)
V 91: Pos(-1.4, -1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(-0.875, 1.375)
V 92: Pos(-1.8, -1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.625)
V 93: Pos(-1.8, -1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(-1.125, 1.375)
V 94: Pos(-1.4, 1.4, 2.2) Norm(1.0, 0.0, 0.0) UV(0.875, 1.375)
V 95: Pos(-1.4, -1.4, 2.6) Norm(1.0, 0.0, 0.0) UV(-0.875, 1.625)
V 96: Pos(-1.4, -1.4, 2.2) Norm(1.0, 0.0, 0.0) UV(-0.875, 1.375)
V 97: Pos(-1.8, 1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.375)
V 98: Pos(-1.4, 1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(-0.875, 1.625)
V 99: Pos(-1.4, 1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(-0.875, 1.375)
V 100: Pos(-1.8, 1.4, 2.6) Norm(-1.0, 0.0, 0.0) UV(0.875, 1.625)
V 101: Pos(1.8, -1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(1.125, -0.875)
V 102: Pos(1.4, 1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(0.875, 0.875)
V 103: Pos(1.4, -1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(0.875, -0.875)
V 104: Pos(1.8, -1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(1.125, 1.375)
V 105: Pos(1.4, -1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(0.875, 1.625)
V 106: Pos(1.4, -1.4, 2.2) Norm(0.0, -1.0, 0.0) UV(0.875, 1.375)
V 107: Pos(1.8, -1.4, 2.6) Norm(1.0, 0.0, 0.0) UV(-0.875, 1.625)
V 108: Pos(1.4, 1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(0.875, 1.375)
V 109: Pos(1.8, 1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(1.125, 1.625)
V 110: Pos(1.8, 1.4, 2.2) Norm(0.0, 1.0, 0.0) UV(1.125, 1.375)
V 111: Pos(1.4, -1.4, 2.2) Norm(-1.0, 0.0, 0.0) UV(-0.875, 1.375)
V 112: Pos(1.4, 1.4, 2.6) Norm(-1.0, 0.0, 0.0) UV(0.875, 1.625)
V 113: Pos(1.4, 1.4, 2.2) Norm(-1.0, 0.0, 0.0) UV(0.875, 1.375)
V 114: Pos(-1.45, -1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(-0.90625, -0.90625)
V 115: Pos(-1.45, -1.75, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, -0.90625)
V 116: Pos(-1.45, -1.45, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, -0.90625)
V 117: Pos(-1.75, -1.45, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, -1.09375)
V 118: Pos(-1.75, -1.75, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, -1.09375)
V 119: Pos(-1.45, 1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(-0.90625, 1.09375)
V 120: Pos(-1.45, 1.45, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, -0.90625)
V 121: Pos(-1.45, 1.75, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, 1.09375)
V 122: Pos(-1.75, 1.75, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, -1.09375)
V 123: Pos(-1.75, 1.45, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, 0.90625)
V 124: Pos(1.75, -1.45, 2.55) Norm(0.0, 0.0, 1.0) UV(1.09375, -0.90625)
V 125: Pos(1.75, -1.75, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, 1.09375)
V 126: Pos(1.75, -1.45, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, -0.90625)
V 127: Pos(1.45, -1.45, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, 0.90625)
V 128: Pos(1.45, -1.75, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, -1.09375)
V 129: Pos(1.75, 1.75, 2.55) Norm(0.0, 0.0, 1.0) UV(1.09375, 1.09375)
V 130: Pos(1.75, 1.45, 2.55) Norm(0.0, -1.0, 0.0) UV(1.59375, 1.09375)
V 131: Pos(1.75, 1.75, 2.55) Norm(1.0, 0.0, 0.0) UV(1.59375, 1.09375)
V 132: Pos(1.45, 1.75, 2.55) Norm(0.0, 1.0, 0.0) UV(1.59375, 0.90625)
V 133: Pos(1.45, 1.45, 2.55) Norm(-1.0, 0.0, 0.0) UV(1.59375, 0.90625)
V 134: Pos(1.8, 1.8, 2.6) Norm(0.0, 0.0, 1.0) UV(1.125, 1.125)
V 135: Pos(1.8, 1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(1.125, 1.625)
V 136: Pos(1.8, 1.8, 2.6) Norm(1.0, 0.0, 0.0) UV(1.125, 1.625)
V 137: Pos(-1.8, 1.8, 2.6) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.625)
V 138: Pos(1.8, -1.8, 2.6) Norm(0.0, -1.0, 0.0) UV(1.125, 1.625)
V 139: Pos(-1.8, -1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.625)
V 140: Pos(-1.8, -1.8, 2.6) Norm(-1.0, 0.0, 0.0) UV(-1.125, 1.625)
V 141: Pos(-1.4, 1.4, 2.6) Norm(0.0, 0.0, 1.0) UV(-0.875, 0.875)
V 142: Pos(-1.4, -1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(-0.875, 1.625)
V 143: Pos(-1.4, 1.4, 2.6) Norm(1.0, 0.0, 0.0) UV(0.875, 1.625)
V 144: Pos(-1.8, 1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(-1.125, 1.625)
V 145: Pos(1.8, -1.4, 2.6) Norm(0.0, -1.0, 0.0) UV(1.125, 1.625)
V 146: Pos(1.4, 1.4, 2.6) Norm(0.0, 1.0, 0.0) UV(0.875, 1.625)
V 147: Pos(1.4, -1.4, 2.6) Norm(-1.0, 0.0, 0.0) UV(-0.875, 1.625)
===Triangles (Indices): 80
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 33 34 35
Tri: 36 37 38
Tri: 39 40 41
Tri: 42 43 44
Tri: 45 46 47
Tri: 48 49 50
Tri: 51 52 53
Tri: 54 55 56
Tri: 57 58 59
Tri: 60 61 62
Tri: 63 64 65
Tri: 66 67 68
Tri: 69 70 71
Tri: 72 73 74
Tri: 75 76 77
Tri: 78 79 80
Tri: 81 82 83
Tri: 84 85 86
Tri: 87 88 89
Tri: 90 62 76
Tri: 91 92 93
Tri: 94 95 96
Tri: 97 98 99
Tri: 89 100 72
Tri: 101 102 103
Tri: 104 105 106
Tri: 68 107 81
Tri: 108 109 110
Tri: 111 112 113
Tri: 0 114 1
Tri: 3 115 4
Tri: 6 116 7
Tri: 9 117 10
Tri: 12 118 13
Tri: 15 119 16
Tri: 18 120 19
Tri: 21 121 22
Tri: 24 122 25
Tri: 27 123 28
Tri: 30 124 31
Tri: 33 125 34
Tri: 36 126 37
Tri: 39 127 40
Tri: 42 128 43
Tri: 45 129 46
Tri: 48 130 49
Tri: 51 131 52
Tri: 54 132 55
Tri: 57 133 58
Tri: 60 134 61
Tri: 63 135 64
Tri: 66 136 67
Tri: 69 137 70
Tri: 72 100 73
Tri: 75 101 76
Tri: 78 138 79
Tri: 81 107 82
Tri: 84 139 85
Tri: 87 140 88
Tri: 90 141 62
Tri: 91 142 92
Tri: 94 143 95
Tri: 97 144 98
Tri: 89 88 100
Tri: 101 60 102
Tri: 104 145 105
Tri: 68 67 107
Tri: 108 146 109
Tri: 111 147 112
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
===Vertices (Split by UV/Normal): 4
V 0: Pos(4.5, -4.68, -0.01) Norm(0.0, 0.0, 1.0) UV(5.625, -5.85)
V 1: Pos(-4.5, 4.5, -0.01) Norm(0.0, 0.0, 1.0) UV(-5.625, 5.625)
V 2: Pos(-4.5, -4.68, -0.01) Norm(0.0, 0.0, 1.0) UV(-5.625, -5.85)
V 3: Pos(4.5, 4.5, -0.01) Norm(0.0, 0.0, 1.0) UV(5.625, 5.625)
===Triangles (Indices): 2
Tri: 0 1 2
Tri: 0 3 1
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
===Vertices (Split by UV/Normal): 4
V 0: Pos(30.0, -7.68, -0.01) Norm(0.0, 0.0, 1.0) UV(60.0, -15.36)
V 1: Pos(-30.0, -4.68, -0.01) Norm(0.0, 0.0, 1.0) UV(-60.0, -9.36)
V 2: Pos(-30.0, -7.68, -0.01) Norm(0.0, 0.0, 1.0) UV(-60.0, -15.36)
V 3: Pos(30.0, -4.68, -0.01) Norm(0.0, 0.0, 1.0) UV(60.0, -9.36)
===Triangles (Indices): 2
Tri: 0 1 2
Tri: 0 3 1
@@ -0,0 +1,9 @@
===Vertices (Split by UV/Normal): 4
V 0: Pos(3.15, -5.08, 0.0) Norm(0.0, 0.0, 1.0) UV(1.0, 0.0)
V 1: Pos(-0.15, -7.28, 0.0) Norm(0.0, 0.0, 1.0) UV(0.0, 1.0)
V 2: Pos(3.15, -7.28, 0.0) Norm(0.0, 0.0, 1.0) UV(0.0, 0.0)
V 3: Pos(-0.15, -5.08, 0.0) Norm(0.0, 0.0, 1.0) UV(1.0, 1.0)
===Triangles (Indices): 2
Tri: 0 1 2
Tri: 0 3 1
+303
View File
@@ -0,0 +1,303 @@
===Vertices (Split by UV/Normal): 192
V 0: Pos(0.021213, 0.021213, 0.0) Norm(0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 1: Pos(0.03, 0.0, 1.75) Norm(0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 2: Pos(0.03, 0.0, 0.0) Norm(0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 3: Pos(0.0, 0.03, 0.0) Norm(0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 4: Pos(0.021213, 0.021213, 1.75) Norm(0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 5: Pos(0.021213, 0.021213, 0.0) Norm(0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 6: Pos(-0.021213, 0.021213, 0.0) Norm(-0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 7: Pos(0.0, 0.03, 1.75) Norm(-0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 8: Pos(0.0, 0.03, 0.0) Norm(-0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 9: Pos(-0.03, 0.0, 0.0) Norm(-0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 10: Pos(-0.021213, 0.021213, 1.75) Norm(-0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 11: Pos(-0.021213, 0.021213, 0.0) Norm(-0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 12: Pos(-0.021213, -0.021213, 0.0) Norm(-0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 13: Pos(-0.03, 0.0, 1.75) Norm(-0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 14: Pos(-0.03, 0.0, 0.0) Norm(-0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 15: Pos(0.0, -0.03, 0.0) Norm(-0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 16: Pos(-0.021213, -0.021213, 1.75) Norm(-0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 17: Pos(-0.021213, -0.021213, 0.0) Norm(-0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 18: Pos(0.021213, -0.021213, 0.0) Norm(0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 19: Pos(0.0, -0.03, 1.75) Norm(0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 20: Pos(0.0, -0.03, 0.0) Norm(0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 21: Pos(0.03, 0.0, 0.0) Norm(0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 22: Pos(0.021213, -0.021213, 1.75) Norm(0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 23: Pos(0.021213, -0.021213, 0.0) Norm(0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 24: Pos(0.133939, -0.05, 2.123358) Norm(0.0, -1.0, 0.0) UV(0.515636, 0.714526)
V 25: Pos(-0.323358, -0.05, 1.933939) Norm(0.0, -1.0, 0.0) UV(0.035474, 0.515636)
V 26: Pos(-0.133939, -0.05, 1.476642) Norm(0.0, -1.0, 0.0) UV(0.234364, 0.035474)
V 27: Pos(0.323358, -0.03, 1.933939) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 28: Pos(0.35, -0.05, 1.8) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 29: Pos(0.35, -0.03, 1.8) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 30: Pos(0.247487, -0.03, 2.047487) Norm(0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 31: Pos(0.323358, -0.05, 1.933939) Norm(0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 32: Pos(0.323358, -0.03, 1.933939) Norm(0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 33: Pos(0.133939, -0.03, 2.123358) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 34: Pos(0.247487, -0.05, 2.047487) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 35: Pos(0.247487, -0.03, 2.047487) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 36: Pos(0.0, -0.03, 2.15) Norm(0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 37: Pos(0.133939, -0.05, 2.123358) Norm(0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 38: Pos(0.133939, -0.03, 2.123358) Norm(0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 39: Pos(-0.133939, -0.03, 2.123358) Norm(-0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 40: Pos(0.0, -0.05, 2.15) Norm(-0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 41: Pos(0.0, -0.03, 2.15) Norm(-0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 42: Pos(-0.247487, -0.03, 2.047487) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 43: Pos(-0.133939, -0.05, 2.123358) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 44: Pos(-0.133939, -0.03, 2.123358) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 45: Pos(-0.323358, -0.03, 1.933939) Norm(-0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 46: Pos(-0.247487, -0.05, 2.047487) Norm(-0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 47: Pos(-0.247487, -0.03, 2.047487) Norm(-0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 48: Pos(-0.35, -0.03, 1.8) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 49: Pos(-0.323358, -0.05, 1.933939) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 50: Pos(-0.323358, -0.03, 1.933939) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 51: Pos(-0.323358, -0.03, 1.666061) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 52: Pos(-0.35, -0.05, 1.8) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 53: Pos(-0.35, -0.03, 1.8) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 54: Pos(-0.247487, -0.03, 1.552513) Norm(-0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 55: Pos(-0.323358, -0.05, 1.666061) Norm(-0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 56: Pos(-0.323358, -0.03, 1.666061) Norm(-0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 57: Pos(-0.133939, -0.03, 1.476642) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 58: Pos(-0.247487, -0.05, 1.552513) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 59: Pos(-0.247487, -0.03, 1.552513) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 60: Pos(0.0, -0.03, 1.45) Norm(-0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 61: Pos(-0.133939, -0.05, 1.476642) Norm(-0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 62: Pos(-0.133939, -0.03, 1.476642) Norm(-0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 63: Pos(0.133939, -0.03, 1.476642) Norm(0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 64: Pos(0.0, -0.05, 1.45) Norm(0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 65: Pos(0.0, -0.03, 1.45) Norm(0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 66: Pos(0.247487, -0.03, 1.552513) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 67: Pos(0.133939, -0.05, 1.476642) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 68: Pos(0.133939, -0.03, 1.476642) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 69: Pos(0.323358, -0.03, 1.666061) Norm(0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 70: Pos(0.247487, -0.05, 1.552513) Norm(0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 71: Pos(0.247487, -0.03, 1.552513) Norm(0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 72: Pos(0.35, -0.03, 1.8) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 73: Pos(0.323358, -0.05, 1.666061) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 74: Pos(0.323358, -0.03, 1.666061) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 75: Pos(0.35, 0.05, 1.8) Norm(0.0, 1.0, 0.0) UV(0.0075, 0.375)
V 76: Pos(0.0, 0.05, 1.45) Norm(0.0, 1.0, 0.0) UV(0.375, 0.0075)
V 77: Pos(-0.35, 0.05, 1.8) Norm(0.0, 1.0, 0.0) UV(0.7425, 0.375)
V 78: Pos(0.323358, 0.03, 1.933939) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 79: Pos(0.35, 0.05, 1.8) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 80: Pos(0.35, 0.03, 1.8) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 81: Pos(0.247487, 0.03, 2.047487) Norm(-0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 82: Pos(0.323358, 0.05, 1.933939) Norm(-0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 83: Pos(0.323358, 0.03, 1.933939) Norm(-0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 84: Pos(0.133939, 0.03, 2.123358) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 85: Pos(0.247487, 0.05, 2.047487) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 86: Pos(0.247487, 0.03, 2.047487) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 87: Pos(0.0, 0.03, 2.15) Norm(-0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 88: Pos(0.133939, 0.05, 2.123358) Norm(-0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 89: Pos(0.133939, 0.03, 2.123358) Norm(-0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 90: Pos(-0.133939, 0.03, 2.123358) Norm(0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 91: Pos(0.0, 0.05, 2.15) Norm(0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 92: Pos(0.0, 0.03, 2.15) Norm(0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 93: Pos(-0.247487, 0.03, 2.047487) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 94: Pos(-0.133939, 0.05, 2.123358) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 95: Pos(-0.133939, 0.03, 2.123358) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 96: Pos(-0.323358, 0.03, 1.933939) Norm(0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 97: Pos(-0.247487, 0.05, 2.047487) Norm(0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 98: Pos(-0.247487, 0.03, 2.047487) Norm(0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 99: Pos(-0.35, 0.03, 1.8) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 100: Pos(-0.323358, 0.05, 1.933939) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 101: Pos(-0.323358, 0.03, 1.933939) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 102: Pos(-0.323358, 0.03, 1.666061) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 103: Pos(-0.35, 0.05, 1.8) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 104: Pos(-0.35, 0.03, 1.8) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 105: Pos(-0.247487, 0.03, 1.552513) Norm(0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 106: Pos(-0.323358, 0.05, 1.666061) Norm(0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 107: Pos(-0.323358, 0.03, 1.666061) Norm(0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 108: Pos(-0.133939, 0.03, 1.476642) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 109: Pos(-0.247487, 0.05, 1.552513) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 110: Pos(-0.247487, 0.03, 1.552513) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 111: Pos(0.0, 0.03, 1.45) Norm(0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 112: Pos(-0.133939, 0.05, 1.476642) Norm(0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 113: Pos(-0.133939, 0.03, 1.476642) Norm(0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 114: Pos(0.133939, 0.03, 1.476642) Norm(-0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 115: Pos(0.0, 0.05, 1.45) Norm(-0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 116: Pos(0.0, 0.03, 1.45) Norm(-0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 117: Pos(0.247487, 0.03, 1.552513) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 118: Pos(0.133939, 0.05, 1.476642) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 119: Pos(0.133939, 0.03, 1.476642) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 120: Pos(0.323358, 0.03, 1.666061) Norm(-0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 121: Pos(0.247487, 0.05, 1.552513) Norm(-0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 122: Pos(0.247487, 0.03, 1.552513) Norm(-0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 123: Pos(0.35, 0.03, 1.8) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 124: Pos(0.323358, 0.05, 1.666061) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 125: Pos(0.323358, 0.03, 1.666061) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 126: Pos(0.021213, 0.021213, 1.75) Norm(0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 127: Pos(0.0, 0.03, 1.75) Norm(0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 128: Pos(-0.021213, 0.021213, 1.75) Norm(-0.382683, 0.92388, 0.0) UV(0.761719, 0.011719)
V 129: Pos(-0.03, 0.0, 1.75) Norm(-0.92388, 0.382683, 0.0) UV(0.761719, 0.011719)
V 130: Pos(-0.021213, -0.021213, 1.75) Norm(-0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 131: Pos(0.0, -0.03, 1.75) Norm(-0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 132: Pos(0.021213, -0.021213, 1.75) Norm(0.382683, -0.92388, 0.0) UV(0.761719, 0.011719)
V 133: Pos(0.03, 0.0, 1.75) Norm(0.92388, -0.382683, 0.0) UV(0.761719, 0.011719)
V 134: Pos(0.323358, -0.05, 1.666061) Norm(0.0, -1.0, 0.0) UV(0.714526, 0.234364)
V 135: Pos(0.35, -0.05, 1.8) Norm(0.0, -1.0, 0.0) UV(0.7425, 0.375)
V 136: Pos(0.323358, -0.05, 1.933939) Norm(0.0, -1.0, 0.0) UV(0.714526, 0.515636)
V 137: Pos(0.247487, -0.05, 2.047487) Norm(0.0, -1.0, 0.0) UV(0.634862, 0.634862)
V 138: Pos(0.0, -0.05, 2.15) Norm(0.0, -1.0, 0.0) UV(0.375, 0.7425)
V 139: Pos(-0.133939, -0.05, 2.123358) Norm(0.0, -1.0, 0.0) UV(0.234364, 0.714526)
V 140: Pos(-0.247487, -0.05, 2.047487) Norm(0.0, -1.0, 0.0) UV(0.115138, 0.634862)
V 141: Pos(-0.35, -0.05, 1.8) Norm(0.0, -1.0, 0.0) UV(0.0075, 0.375)
V 142: Pos(-0.323358, -0.05, 1.666061) Norm(0.0, -1.0, 0.0) UV(0.035474, 0.234364)
V 143: Pos(-0.247487, -0.05, 1.552513) Norm(0.0, -1.0, 0.0) UV(0.115138, 0.115138)
V 144: Pos(0.0, -0.05, 1.45) Norm(0.0, -1.0, 0.0) UV(0.375, 0.0075)
V 145: Pos(0.133939, -0.05, 1.476642) Norm(0.0, -1.0, 0.0) UV(0.515636, 0.035474)
V 146: Pos(0.247487, -0.05, 1.552513) Norm(0.0, -1.0, 0.0) UV(0.634862, 0.115138)
V 147: Pos(0.323358, -0.05, 1.933939) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 148: Pos(0.247487, -0.05, 2.047487) Norm(0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 149: Pos(0.133939, -0.05, 2.123358) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 150: Pos(0.0, -0.05, 2.15) Norm(0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 151: Pos(-0.133939, -0.05, 2.123358) Norm(-0.195091, 0.0, 0.980785) UV(0.761719, 0.011719)
V 152: Pos(-0.247487, -0.05, 2.047487) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 153: Pos(-0.323358, -0.05, 1.933939) Norm(-0.831469, 0.0, 0.555571) UV(0.761719, 0.011719)
V 154: Pos(-0.35, -0.05, 1.8) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 155: Pos(-0.323358, -0.05, 1.666061) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 156: Pos(-0.247487, -0.05, 1.552513) Norm(-0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 157: Pos(-0.133939, -0.05, 1.476642) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 158: Pos(0.0, -0.05, 1.45) Norm(-0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 159: Pos(0.133939, -0.05, 1.476642) Norm(0.19509, 0.0, -0.980785) UV(0.761719, 0.011719)
V 160: Pos(0.247487, -0.05, 1.552513) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 161: Pos(0.323358, -0.05, 1.666061) Norm(0.83147, 0.0, -0.55557) UV(0.761719, 0.011719)
V 162: Pos(0.35, -0.05, 1.8) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 163: Pos(0.323358, 0.05, 1.666061) Norm(0.0, 1.0, 0.0) UV(0.035474, 0.234364)
V 164: Pos(0.247487, 0.05, 1.552513) Norm(0.0, 1.0, 0.0) UV(0.115138, 0.115138)
V 165: Pos(0.133939, 0.05, 1.476642) Norm(0.0, 1.0, 0.0) UV(0.234364, 0.035474)
V 166: Pos(-0.133939, 0.05, 1.476642) Norm(0.0, 1.0, 0.0) UV(0.515636, 0.035474)
V 167: Pos(-0.247487, 0.05, 1.552513) Norm(0.0, 1.0, 0.0) UV(0.634862, 0.115138)
V 168: Pos(-0.323358, 0.05, 1.666061) Norm(0.0, 1.0, 0.0) UV(0.714526, 0.234364)
V 169: Pos(-0.323358, 0.05, 1.933939) Norm(0.0, 1.0, 0.0) UV(0.714526, 0.515636)
V 170: Pos(-0.247487, 0.05, 2.047487) Norm(0.0, 1.0, 0.0) UV(0.634862, 0.634862)
V 171: Pos(-0.133939, 0.05, 2.123358) Norm(0.0, 1.0, 0.0) UV(0.515636, 0.714526)
V 172: Pos(0.0, 0.05, 2.15) Norm(0.0, 1.0, 0.0) UV(0.375, 0.7425)
V 173: Pos(0.133939, 0.05, 2.123358) Norm(0.0, 1.0, 0.0) UV(0.234364, 0.714526)
V 174: Pos(0.247487, 0.05, 2.047487) Norm(0.0, 1.0, 0.0) UV(0.115138, 0.634862)
V 175: Pos(0.323358, 0.05, 1.933939) Norm(0.0, 1.0, 0.0) UV(0.035474, 0.515636)
V 176: Pos(0.323358, 0.05, 1.933939) Norm(-0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 177: Pos(0.247487, 0.05, 2.047487) Norm(-0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 178: Pos(0.133939, 0.05, 2.123358) Norm(-0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 179: Pos(0.0, 0.05, 2.15) Norm(-0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 180: Pos(-0.133939, 0.05, 2.123358) Norm(0.195091, 0.0, -0.980785) UV(0.761719, 0.011719)
V 181: Pos(-0.247487, 0.05, 2.047487) Norm(0.555571, 0.0, -0.831469) UV(0.761719, 0.011719)
V 182: Pos(-0.323358, 0.05, 1.933939) Norm(0.831469, 0.0, -0.555571) UV(0.761719, 0.011719)
V 183: Pos(-0.35, 0.05, 1.8) Norm(0.980785, 0.0, -0.19509) UV(0.761719, 0.011719)
V 184: Pos(-0.323358, 0.05, 1.666061) Norm(0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
V 185: Pos(-0.247487, 0.05, 1.552513) Norm(0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 186: Pos(-0.133939, 0.05, 1.476642) Norm(0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 187: Pos(0.0, 0.05, 1.45) Norm(0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 188: Pos(0.133939, 0.05, 1.476642) Norm(-0.19509, 0.0, 0.980785) UV(0.761719, 0.011719)
V 189: Pos(0.247487, 0.05, 1.552513) Norm(-0.555571, 0.0, 0.831469) UV(0.761719, 0.011719)
V 190: Pos(0.323358, 0.05, 1.666061) Norm(-0.83147, 0.0, 0.55557) UV(0.761719, 0.011719)
V 191: Pos(0.35, 0.05, 1.8) Norm(-0.980785, 0.0, 0.19509) UV(0.761719, 0.011719)
===Triangles (Indices): 108
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 33 34 35
Tri: 36 37 38
Tri: 39 40 41
Tri: 42 43 44
Tri: 45 46 47
Tri: 48 49 50
Tri: 51 52 53
Tri: 54 55 56
Tri: 57 58 59
Tri: 60 61 62
Tri: 63 64 65
Tri: 66 67 68
Tri: 69 70 71
Tri: 72 73 74
Tri: 75 76 77
Tri: 78 79 80
Tri: 81 82 83
Tri: 84 85 86
Tri: 87 88 89
Tri: 90 91 92
Tri: 93 94 95
Tri: 96 97 98
Tri: 99 100 101
Tri: 102 103 104
Tri: 105 106 107
Tri: 108 109 110
Tri: 111 112 113
Tri: 114 115 116
Tri: 117 118 119
Tri: 120 121 122
Tri: 123 124 125
Tri: 0 126 1
Tri: 3 127 4
Tri: 6 128 7
Tri: 9 129 10
Tri: 12 130 13
Tri: 15 131 16
Tri: 18 132 19
Tri: 21 133 22
Tri: 134 135 136
Tri: 136 137 134
Tri: 137 24 134
Tri: 24 138 139
Tri: 139 140 24
Tri: 140 25 24
Tri: 25 141 142
Tri: 142 143 25
Tri: 143 26 25
Tri: 26 144 134
Tri: 144 145 134
Tri: 145 146 134
Tri: 134 24 26
Tri: 27 147 28
Tri: 30 148 31
Tri: 33 149 34
Tri: 36 150 37
Tri: 39 151 40
Tri: 42 152 43
Tri: 45 153 46
Tri: 48 154 49
Tri: 51 155 52
Tri: 54 156 55
Tri: 57 157 58
Tri: 60 158 61
Tri: 63 159 64
Tri: 66 160 67
Tri: 69 161 70
Tri: 72 162 73
Tri: 75 163 164
Tri: 164 165 76
Tri: 76 166 167
Tri: 167 168 77
Tri: 77 169 170
Tri: 170 171 77
Tri: 171 172 77
Tri: 172 173 174
Tri: 174 175 75
Tri: 75 164 76
Tri: 76 167 77
Tri: 172 174 77
Tri: 174 75 77
Tri: 78 176 79
Tri: 81 177 82
Tri: 84 178 85
Tri: 87 179 88
Tri: 90 180 91
Tri: 93 181 94
Tri: 96 182 97
Tri: 99 183 100
Tri: 102 184 103
Tri: 105 185 106
Tri: 108 186 109
Tri: 111 187 112
Tri: 114 188 115
Tri: 117 189 118
Tri: 120 190 121
Tri: 123 191 124
Binary file not shown.
+69
View File
@@ -0,0 +1,69 @@
===Vertices (Split by UV/Normal): 44
V 0: Pos(0.0175, 0.006, 1.25) Norm(0.0, 0.0, 1.0) UV(0.769531, 0.011719)
V 1: Pos(-0.0175, 0.02525, 1.25) Norm(0.0, 0.0, 1.0) UV(0.769531, 0.011719)
V 2: Pos(-0.0175, 0.006, 1.25) Norm(0.0, 0.0, 1.0) UV(0.769531, 0.011719)
V 3: Pos(0.0175, 0.006, -0.1) Norm(0.0, -1.0, 0.0) UV(0.769531, 0.011719)
V 4: Pos(-0.0175, 0.006, 1.25) Norm(0.0, -1.0, 0.0) UV(0.769531, 0.011719)
V 5: Pos(-0.0175, 0.006, -0.1) Norm(0.0, -1.0, 0.0) UV(0.769531, 0.011719)
V 6: Pos(0.0175, 0.02525, -0.1) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 7: Pos(0.0175, 0.006, 1.25) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 8: Pos(0.0175, 0.006, -0.1) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 9: Pos(-0.0175, 0.02525, -0.1) Norm(0.0, 1.0, 0.0) UV(0.769531, 0.011719)
V 10: Pos(0.0175, 0.02525, 1.25) Norm(0.0, 1.0, 0.0) UV(0.769531, 0.011719)
V 11: Pos(0.0175, 0.02525, -0.1) Norm(0.0, 1.0, 0.0) UV(0.769531, 0.011719)
V 12: Pos(-0.0175, 0.006, -0.1) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 13: Pos(-0.0175, 0.02525, 1.25) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 14: Pos(-0.0175, 0.02525, -0.1) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 15: Pos(0.33, -0.006, 0.8) Norm(0.0, -1.0, 0.0) UV(0.753906, 0.003906)
V 16: Pos(-0.33, -0.006, 1.24) Norm(0.0, -1.0, 0.0) UV(0.003906, 0.509766)
V 17: Pos(-0.33, -0.006, 0.8) Norm(0.0, -1.0, 0.0) UV(0.003906, 0.003906)
V 18: Pos(0.33, 0.006, 1.24) Norm(0.0, 1.0, 0.0) UV(0.792969, 0.011719)
V 19: Pos(-0.33, 0.006, 0.8) Norm(0.0, 1.0, 0.0) UV(0.792969, 0.011719)
V 20: Pos(-0.33, 0.006, 1.24) Norm(0.0, 1.0, 0.0) UV(0.792969, 0.011719)
V 21: Pos(-0.33, 0.006, 0.8) Norm(0.0, 0.0, -1.0) UV(0.792969, 0.011719)
V 22: Pos(0.33, -0.006, 0.8) Norm(0.0, 0.0, -1.0) UV(0.792969, 0.011719)
V 23: Pos(-0.33, -0.006, 0.8) Norm(0.0, 0.0, -1.0) UV(0.792969, 0.011719)
V 24: Pos(0.33, 0.006, 0.8) Norm(1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 25: Pos(0.33, -0.006, 1.24) Norm(1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 26: Pos(0.33, -0.006, 0.8) Norm(1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 27: Pos(0.33, 0.006, 1.24) Norm(0.0, 0.0, 1.0) UV(0.792969, 0.011719)
V 28: Pos(-0.33, -0.006, 1.24) Norm(0.0, 0.0, 1.0) UV(0.792969, 0.011719)
V 29: Pos(0.33, -0.006, 1.24) Norm(0.0, 0.0, 1.0) UV(0.792969, 0.011719)
V 30: Pos(-0.33, 0.006, 1.24) Norm(-1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 31: Pos(-0.33, -0.006, 0.8) Norm(-1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 32: Pos(-0.33, -0.006, 1.24) Norm(-1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 33: Pos(0.0175, 0.02525, 1.25) Norm(0.0, 0.0, 1.0) UV(0.769531, 0.011719)
V 34: Pos(0.0175, 0.006, 1.25) Norm(0.0, -1.0, 0.0) UV(0.769531, 0.011719)
V 35: Pos(0.0175, 0.02525, 1.25) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 36: Pos(-0.0175, 0.02525, 1.25) Norm(0.0, 1.0, 0.0) UV(0.769531, 0.011719)
V 37: Pos(-0.0175, 0.006, 1.25) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.011719)
V 38: Pos(0.33, -0.006, 1.24) Norm(0.0, -1.0, 0.0) UV(0.753906, 0.509766)
V 39: Pos(0.33, 0.006, 0.8) Norm(0.0, 1.0, 0.0) UV(0.792969, 0.011719)
V 40: Pos(0.33, 0.006, 0.8) Norm(0.0, 0.0, -1.0) UV(0.792969, 0.011719)
V 41: Pos(0.33, 0.006, 1.24) Norm(1.0, 0.0, 0.0) UV(0.792969, 0.011719)
V 42: Pos(-0.33, 0.006, 1.24) Norm(0.0, 0.0, 1.0) UV(0.792969, 0.011719)
V 43: Pos(-0.33, 0.006, 0.8) Norm(-1.0, 0.0, 0.0) UV(0.792969, 0.011719)
===Triangles (Indices): 22
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 0 33 1
Tri: 3 34 4
Tri: 6 35 7
Tri: 9 36 10
Tri: 12 37 13
Tri: 15 38 16
Tri: 18 39 19
Tri: 21 40 22
Tri: 24 41 25
Tri: 27 42 28
Tri: 30 43 31
+111
View File
@@ -0,0 +1,111 @@
===Vertices (Split by UV/Normal): 72
V 0: Pos(0.62, -0.036384, -0.050012) Norm(0.0, -0.927184, 0.374607) UV(0.753906, 0.007812)
V 1: Pos(-0.62, 0.143427, 0.395036) Norm(0.0, -0.927184, 0.374607) UV(0.003906, 0.507812)
V 2: Pos(-0.62, -0.036384, -0.050012) Norm(0.0, -0.927184, 0.374607) UV(0.003906, 0.007812)
V 3: Pos(0.62, 0.143427, 0.395036) Norm(0.0, 0.374607, 0.927184) UV(0.769531, 0.023438)
V 4: Pos(-0.62, 0.171243, 0.383798) Norm(0.0, 0.374607, 0.927184) UV(0.769531, 0.023438)
V 5: Pos(-0.62, 0.143427, 0.395036) Norm(0.0, 0.374607, 0.927184) UV(0.769531, 0.023438)
V 6: Pos(0.62, -0.008569, -0.06125) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 7: Pos(0.62, 0.143427, 0.395036) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 8: Pos(0.62, -0.036384, -0.050012) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 9: Pos(-0.62, -0.008569, -0.06125) Norm(0.0, 0.927184, -0.374607) UV(0.769531, 0.023438)
V 10: Pos(0.62, 0.171243, 0.383798) Norm(0.0, 0.927184, -0.374607) UV(0.769531, 0.023438)
V 11: Pos(0.62, -0.008569, -0.06125) Norm(0.0, 0.927184, -0.374607) UV(0.769531, 0.023438)
V 12: Pos(-0.62, -0.036384, -0.050012) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 13: Pos(-0.62, 0.171243, 0.383798) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 14: Pos(-0.62, -0.008569, -0.06125) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 15: Pos(-0.62, -0.008569, -0.06125) Norm(0.0, -0.374606, -0.927184) UV(0.769531, 0.023438)
V 16: Pos(0.62, -0.036384, -0.050012) Norm(0.0, -0.374606, -0.927184) UV(0.769531, 0.023438)
V 17: Pos(-0.62, -0.036384, -0.050012) Norm(0.0, -0.374606, -0.927184) UV(0.769531, 0.023438)
V 18: Pos(-0.3867, 0.411154, -0.045784) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 19: Pos(-0.4317, 0.111154, 0.258977) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 20: Pos(-0.4317, 0.411154, -0.045784) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 21: Pos(-0.3867, 0.411154, -0.045784) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 22: Pos(-0.3867, 0.143223, 0.290545) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 23: Pos(-0.3867, 0.111154, 0.258977) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 24: Pos(-0.4317, 0.443223, -0.014216) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 25: Pos(-0.3867, 0.143223, 0.290545) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 26: Pos(-0.3867, 0.443223, -0.014216) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 27: Pos(-0.4317, 0.443223, -0.014216) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 28: Pos(-0.4317, 0.111154, 0.258977) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 29: Pos(-0.4317, 0.143223, 0.290545) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 30: Pos(-0.3867, 0.111154, 0.258977) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 31: Pos(-0.4317, 0.143223, 0.290545) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 32: Pos(-0.4317, 0.111154, 0.258977) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 33: Pos(-0.3867, 0.443223, -0.014216) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 34: Pos(-0.4317, 0.411154, -0.045784) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 35: Pos(-0.4317, 0.443223, -0.014216) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 36: Pos(0.4317, 0.411154, -0.045784) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 37: Pos(0.3867, 0.111154, 0.258977) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 38: Pos(0.3867, 0.411154, -0.045784) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 39: Pos(0.4317, 0.411154, -0.045784) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 40: Pos(0.4317, 0.143223, 0.290545) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 41: Pos(0.4317, 0.111154, 0.258977) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 42: Pos(0.3867, 0.443223, -0.014216) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 43: Pos(0.4317, 0.143223, 0.290545) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 44: Pos(0.4317, 0.443223, -0.014216) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 45: Pos(0.3867, 0.443223, -0.014216) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 46: Pos(0.3867, 0.111154, 0.258977) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 47: Pos(0.3867, 0.143223, 0.290545) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 48: Pos(0.4317, 0.111154, 0.258977) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 49: Pos(0.3867, 0.143223, 0.290545) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 50: Pos(0.3867, 0.111154, 0.258977) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 51: Pos(0.4317, 0.443223, -0.014216) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 52: Pos(0.3867, 0.411154, -0.045784) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 53: Pos(0.3867, 0.443223, -0.014216) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 54: Pos(0.62, 0.143427, 0.395036) Norm(0.0, -0.927184, 0.374607) UV(0.753906, 0.507812)
V 55: Pos(0.62, 0.171243, 0.383798) Norm(0.0, 0.374607, 0.927184) UV(0.769531, 0.023438)
V 56: Pos(0.62, 0.171243, 0.383798) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 57: Pos(-0.62, 0.171243, 0.383798) Norm(0.0, 0.927184, -0.374607) UV(0.769531, 0.023438)
V 58: Pos(-0.62, 0.143427, 0.395036) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 59: Pos(0.62, -0.008569, -0.06125) Norm(0.0, -0.374606, -0.927184) UV(0.769531, 0.023438)
V 60: Pos(-0.3867, 0.111154, 0.258977) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 61: Pos(-0.3867, 0.443223, -0.014216) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 62: Pos(-0.4317, 0.143223, 0.290545) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 63: Pos(-0.4317, 0.411154, -0.045784) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 64: Pos(-0.3867, 0.143223, 0.290545) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 65: Pos(-0.3867, 0.411154, -0.045784) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
V 66: Pos(0.4317, 0.111154, 0.258977) Norm(0.0, -0.712652, -0.701518) UV(0.769531, 0.023438)
V 67: Pos(0.4317, 0.443223, -0.014216) Norm(1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 68: Pos(0.3867, 0.143223, 0.290545) Norm(0.0, 0.712652, 0.701518) UV(0.769531, 0.023438)
V 69: Pos(0.3867, 0.411154, -0.045784) Norm(-1.0, 0.0, 0.0) UV(0.769531, 0.023438)
V 70: Pos(0.4317, 0.143223, 0.290545) Norm(0.0, -0.701518, 0.712652) UV(0.769531, 0.023438)
V 71: Pos(0.4317, 0.411154, -0.045784) Norm(0.0, 0.701518, -0.712652) UV(0.769531, 0.023438)
===Triangles (Indices): 36
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 33 34 35
Tri: 36 37 38
Tri: 39 40 41
Tri: 42 43 44
Tri: 45 46 47
Tri: 48 49 50
Tri: 51 52 53
Tri: 0 54 1
Tri: 3 55 4
Tri: 6 56 7
Tri: 9 57 10
Tri: 12 58 13
Tri: 15 59 16
Tri: 18 60 19
Tri: 21 61 22
Tri: 24 62 25
Tri: 27 63 28
Tri: 30 64 31
Tri: 33 65 34
Tri: 36 66 37
Tri: 39 67 40
Tri: 42 68 43
Tri: 45 69 46
Tri: 48 70 49
Tri: 51 71 52
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+67
View File
@@ -0,0 +1,67 @@
===Vertices (Split by UV/Normal): 44
V 0: Pos(2.3, -2.3, 2.6) Norm(0.0, -0.948683, -0.316228) UV(0.854614, 0.905029)
V 1: Pos(-2.4, -2.4, 2.9) Norm(0.0, -0.948683, -0.316228) UV(0.125977, 0.951538)
V 2: Pos(-2.3, -2.3, 2.6) Norm(0.0, -0.948683, -0.316228) UV(0.141479, 0.905029)
V 3: Pos(2.4, -2.4, 2.9) Norm(0.0, -1.0, 0.0) UV(0.994141, 0.6014)
V 4: Pos(-2.4, -2.4, 2.96) Norm(0.0, -1.0, 0.0) UV(0.001953, 0.613802)
V 5: Pos(-2.4, -2.4, 2.9) Norm(0.0, -1.0, 0.0) UV(0.001953, 0.6014)
V 6: Pos(-2.4, -2.4, 2.96) Norm(0.0, -0.33035, 0.943858) UV(0.001953, 0.001953)
V 7: Pos(2.4, -2.4, 2.96) Norm(0.0, -0.33035, 0.943858) UV(0.994141, 0.001953)
V 8: Pos(0.0, 0.0, 3.8) Norm(0.0, -0.33035, 0.943858) UV(0.498047, 0.527555)
V 9: Pos(2.3, 2.3, 2.6) Norm(0.948683, 0.0, -0.316228) UV(0.854614, 0.905029)
V 10: Pos(2.4, -2.4, 2.9) Norm(0.948683, 0.0, -0.316228) UV(0.125977, 0.951538)
V 11: Pos(2.3, -2.3, 2.6) Norm(0.948683, 0.0, -0.316228) UV(0.141479, 0.905029)
V 12: Pos(2.4, 2.4, 2.9) Norm(1.0, 0.0, 0.0) UV(0.994141, 0.6014)
V 13: Pos(2.4, -2.4, 2.96) Norm(1.0, 0.0, 0.0) UV(0.001953, 0.613802)
V 14: Pos(2.4, -2.4, 2.9) Norm(1.0, 0.0, 0.0) UV(0.001953, 0.6014)
V 15: Pos(2.4, -2.4, 2.96) Norm(0.33035, 0.0, 0.943858) UV(0.001953, 0.001953)
V 16: Pos(2.4, 2.4, 2.96) Norm(0.33035, 0.0, 0.943858) UV(0.994141, 0.001953)
V 17: Pos(0.0, 0.0, 3.8) Norm(0.33035, 0.0, 0.943858) UV(0.498047, 0.527555)
V 18: Pos(-2.3, 2.3, 2.6) Norm(0.0, 0.948683, -0.316228) UV(0.141479, 0.905029)
V 19: Pos(2.4, 2.4, 2.9) Norm(0.0, 0.948683, -0.316228) UV(0.870117, 0.951538)
V 20: Pos(2.3, 2.3, 2.6) Norm(0.0, 0.948683, -0.316228) UV(0.854614, 0.905029)
V 21: Pos(-2.4, 2.4, 2.9) Norm(0.0, 1.0, 0.0) UV(0.001953, 0.6014)
V 22: Pos(2.4, 2.4, 2.96) Norm(0.0, 1.0, 0.0) UV(0.994141, 0.613802)
V 23: Pos(2.4, 2.4, 2.9) Norm(0.0, 1.0, 0.0) UV(0.994141, 0.6014)
V 24: Pos(2.4, 2.4, 2.96) Norm(0.0, 0.33035, 0.943858) UV(0.994141, 0.001953)
V 25: Pos(-2.4, 2.4, 2.96) Norm(0.0, 0.33035, 0.943858) UV(0.001953, 0.001953)
V 26: Pos(0.0, 0.0, 3.8) Norm(0.0, 0.33035, 0.943858) UV(0.498047, 0.527555)
V 27: Pos(-2.3, -2.3, 2.6) Norm(-0.948683, 0.0, -0.316228) UV(0.141479, 0.905029)
V 28: Pos(-2.4, 2.4, 2.9) Norm(-0.948683, 0.0, -0.316228) UV(0.870117, 0.951538)
V 29: Pos(-2.3, 2.3, 2.6) Norm(-0.948683, 0.0, -0.316228) UV(0.854614, 0.905029)
V 30: Pos(-2.4, -2.4, 2.9) Norm(-1.0, 0.0, 0.0) UV(0.001953, 0.6014)
V 31: Pos(-2.4, 2.4, 2.96) Norm(-1.0, 0.0, 0.0) UV(0.994141, 0.613802)
V 32: Pos(-2.4, 2.4, 2.9) Norm(-1.0, 0.0, 0.0) UV(0.994141, 0.6014)
V 33: Pos(-2.4, 2.4, 2.96) Norm(-0.33035, 0.0, 0.943858) UV(0.994141, 0.001953)
V 34: Pos(-2.4, -2.4, 2.96) Norm(-0.33035, 0.0, 0.943858) UV(0.001953, 0.001953)
V 35: Pos(0.0, 0.0, 3.8) Norm(-0.33035, 0.0, 0.943858) UV(0.498047, 0.527555)
V 36: Pos(2.4, -2.4, 2.9) Norm(0.0, -0.948683, -0.316228) UV(0.870117, 0.951538)
V 37: Pos(2.4, -2.4, 2.96) Norm(0.0, -1.0, 0.0) UV(0.994141, 0.613802)
V 38: Pos(2.4, 2.4, 2.9) Norm(0.948683, 0.0, -0.316228) UV(0.870117, 0.951538)
V 39: Pos(2.4, 2.4, 2.96) Norm(1.0, 0.0, 0.0) UV(0.994141, 0.613802)
V 40: Pos(-2.4, 2.4, 2.9) Norm(0.0, 0.948683, -0.316228) UV(0.125977, 0.951538)
V 41: Pos(-2.4, 2.4, 2.96) Norm(0.0, 1.0, 0.0) UV(0.001953, 0.613802)
V 42: Pos(-2.4, -2.4, 2.9) Norm(-0.948683, 0.0, -0.316228) UV(0.125977, 0.951538)
V 43: Pos(-2.4, -2.4, 2.96) Norm(-1.0, 0.0, 0.0) UV(0.001953, 0.613802)
===Triangles (Indices): 20
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 18 19 20
Tri: 21 22 23
Tri: 24 25 26
Tri: 27 28 29
Tri: 30 31 32
Tri: 33 34 35
Tri: 0 36 1
Tri: 3 37 4
Tri: 9 38 10
Tri: 12 39 13
Tri: 18 40 19
Tri: 21 41 22
Tri: 27 42 28
Tri: 30 43 31
Binary file not shown.
+39
View File
@@ -0,0 +1,39 @@
===Vertices (Split by UV/Normal): 24
V 0: Pos(-0.45, -0.4, 1.83) Norm(-1.0, 0.0, 0.0) UV(0.238116, 1.0)
V 1: Pos(-0.45, 0.4, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.0, 0.29878)
V 2: Pos(-0.45, -0.4, 0.0) Norm(-1.0, 0.0, 0.0) UV(0.238116, 0.29878)
V 3: Pos(-0.45, 0.4, 1.83) Norm(0.0, 1.0, 0.0) UV(1.0, 1.0)
V 4: Pos(0.45, 0.4, 0.0) Norm(0.0, 1.0, 0.0) UV(0.738116, 0.29878)
V 5: Pos(-0.45, 0.4, 0.0) Norm(0.0, 1.0, 0.0) UV(1.0, 0.29878)
V 6: Pos(0.45, 0.4, 1.83) Norm(1.0, 0.0, 0.0) UV(0.738116, 1.0)
V 7: Pos(0.45, -0.4, 0.0) Norm(1.0, 0.0, 0.0) UV(0.5, 0.29878)
V 8: Pos(0.45, 0.4, 0.0) Norm(1.0, 0.0, 0.0) UV(0.738116, 0.29878)
V 9: Pos(0.45, -0.4, 1.83) Norm(0.0, -1.0, 0.0) UV(0.5, 1.0)
V 10: Pos(-0.45, -0.4, 0.0) Norm(0.0, -1.0, 0.0) UV(0.238116, 0.29878)
V 11: Pos(0.45, -0.4, 0.0) Norm(0.0, -1.0, 0.0) UV(0.5, 0.29878)
V 12: Pos(0.45, 0.4, 0.0) Norm(0.0, 0.0, -1.0) UV(0.523768, 0.0)
V 13: Pos(-0.45, -0.4, 0.0) Norm(0.0, 0.0, -1.0) UV(0.261884, 0.298781)
V 14: Pos(-0.45, 0.4, 0.0) Norm(0.0, 0.0, -1.0) UV(0.261884, 0.0)
V 15: Pos(-0.45, 0.4, 1.83) Norm(0.0, 0.0, 1.0) UV(0.0, 0.298781)
V 16: Pos(0.45, -0.4, 1.83) Norm(0.0, 0.0, 1.0) UV(0.261884, 0.0)
V 17: Pos(0.45, 0.4, 1.83) Norm(0.0, 0.0, 1.0) UV(0.261884, 0.298781)
V 18: Pos(-0.45, 0.4, 1.83) Norm(-1.0, 0.0, 0.0) UV(0.0, 1.0)
V 19: Pos(0.45, 0.4, 1.83) Norm(0.0, 1.0, 0.0) UV(0.738116, 1.0)
V 20: Pos(0.45, -0.4, 1.83) Norm(1.0, 0.0, 0.0) UV(0.5, 1.0)
V 21: Pos(-0.45, -0.4, 1.83) Norm(0.0, -1.0, 0.0) UV(0.238116, 1.0)
V 22: Pos(0.45, -0.4, 0.0) Norm(0.0, 0.0, -1.0) UV(0.523768, 0.298781)
V 23: Pos(-0.45, -0.4, 1.83) Norm(0.0, 0.0, 1.0) UV(0.0, 0.0)
===Triangles (Indices): 12
Tri: 0 1 2
Tri: 3 4 5
Tri: 6 7 8
Tri: 9 10 11
Tri: 12 13 14
Tri: 15 16 17
Tri: 0 18 1
Tri: 3 19 4
Tri: 6 20 7
Tri: 9 21 10
Tri: 12 22 13
Tri: 15 23 16
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -83,26 +83,27 @@
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
{
"type": "StaticImage",
"name": "hint6aarrow",
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"horizontal_gravity": "right",
"vertical_gravity": "bottom",
"width": 118,
"height": 118,
"x": 80,
"y": 60,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png"
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6a",
"width": 606,
"height": 234,
"x" : 110,
"y" : 80,
"x": 110,
"y": 80,
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Hint6a.png",
"pulse": {
"minScale": 0.92,
@@ -111,24 +112,26 @@
},
"fadeIn": {
"durationMs": 1000
}
},
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6barrow",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"width": 118,
"height": 118,
"x": 80,
"y": 200,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png"
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6b",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"width": 630.4,
"height": 249.6,
"x": 80,
@@ -141,19 +144,20 @@
},
"fadeIn": {
"durationMs": 1000
}
},
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint7arrow",
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"horizontal_gravity": "right",
"vertical_gravity": "bottom",
"width": 118,
"height": 118,
"x": 80,
"y": 60,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible":false,
"visible": false,
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
@@ -163,16 +167,16 @@
"durationMs": 1000
}
},
{
{
"type": "StaticImage",
"name": "hint7",
"width": 606,
"height": 201,
"x" : 110,
"y" : 80,
"visible":false,
"x": 110,
"y": 80,
"visible": false,
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Hint_m004.png",
"pulse": {
"minScale": 0.92,
@@ -182,7 +186,123 @@
"fadeIn": {
"durationMs": 1000
}
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint2.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint3",
"width": 692,
"height": 312,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint3.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint4",
"width": 705,
"height": 234,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint4.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint5",
"width": 606,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint5.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
}
]
}
}
}
@@ -83,26 +83,27 @@
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
{
"type": "StaticImage",
"name": "hint6aarrow",
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"horizontal_gravity": "right",
"vertical_gravity": "bottom",
"width": 118,
"height": 118,
"x": 80,
"y": 60,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png"
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6a",
"width": 606,
"height": 234,
"x" : 110,
"y" : 80,
"x": 110,
"y": 80,
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Hint6a.png",
"pulse": {
"minScale": 0.92,
@@ -111,24 +112,26 @@
},
"fadeIn": {
"durationMs": 1000
}
},
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6barrow",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"width": 118,
"height": 118,
"x": 80,
"y": 200,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png"
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint6b",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"width": 630.4,
"height": 249.6,
"x": 80,
@@ -141,19 +144,20 @@
},
"fadeIn": {
"durationMs": 1000
}
},
"visible": false
},
{
{
"type": "StaticImage",
"name": "hint7arrow",
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"horizontal_gravity": "right",
"vertical_gravity": "bottom",
"width": 118,
"height": 118,
"x": 80,
"y": 60,
"texture": "resources/w/ui/img/hint_arrow_right_bottom.png",
"visible":false,
"visible": false,
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
@@ -163,16 +167,16 @@
"durationMs": 1000
}
},
{
{
"type": "StaticImage",
"name": "hint7",
"width": 606,
"height": 201,
"x" : 110,
"y" : 80,
"visible":false,
"x": 110,
"y": 80,
"visible": false,
"horizontal_gravity": "right",
"vertical_gravity" : "bottom",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Hint_m004.png",
"pulse": {
"minScale": 0.92,
@@ -182,7 +186,123 @@
"fadeIn": {
"durationMs": 1000
}
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint2android.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint3",
"width": 692,
"height": 312,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint3.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint4",
"width": 705,
"height": 234,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint4android.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint5",
"width": 606,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint5.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
},
"visible": false
}
]
}
]
}
}
}
-37
View File
@@ -1,37 +0,0 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
}
]
}
}
-65
View File
@@ -1,65 +0,0 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint2.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
-65
View File
@@ -1,65 +0,0 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint2android.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
-65
View File
@@ -1,65 +0,0 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint3",
"width": 692,
"height": 312,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint3.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
Loaded 100 of 244 files, more files were not shown because too many files have changed in this diff. Show more