init new repos

This commit is contained in:
sShemet
2025-10-19 19:04:50 +05:00
commit 3d8e1e80cd
868 changed files with 103076 additions and 0 deletions

8
.gitattributes vendored Normal file
View File

@@ -0,0 +1,8 @@
# Auto detect text files
* text=auto
# Unity scene and prefab files should be treated as binary
*.unity binary
*.prefab binary
*.asset binary
*.mat binary

99
.gitignore vendored Normal file
View File

@@ -0,0 +1,99 @@
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
.utmp/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
*.log
# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
*.blend1
*.blend1.meta
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Recordings can get excessive in size
/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Jetbrains Rider personal-layer settings
*.DotSettings.user
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Mono auto generated files
mono_crash.*
# Builds
*.apk
*.aab
*.unitypackage
*.unitypackage.meta
*.app
# Crashlytics generated file
crashlytics-build.properties
# TestRunner generated files
InitTestScene*.unity*
# Addressables default ignores, before user customizations
/ServerData
/[Aa]ssets/StreamingAssets/aa*
/[Aa]ssets/AddressableAssetsData/link.xml*
/[Aa]ssets/Addressables_Temp*
# By default, Addressables content builds will generate addressables_content_state.bin
# files in platform-specific subfolders, for example:
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
/[Aa]ssets/AddressableAssetsData/*/*.bin*
# Visual Scripting auto-generated files
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*

6
.vsconfig Normal file
View File

@@ -0,0 +1,6 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}

8
Assets/Code.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6dc2cacd9d5393346b0edde0d2267ef2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

111
Assets/Code/App.cs Normal file
View File

@@ -0,0 +1,111 @@
using System.IO;
using UnityEngine;
public class App : MonoBehaviour
{
public static ScriptVM VM { get; private set; }
public static ScriptLoader Loader { get; private set; }
public static GameState GameState { get; private set; }
public static CameraController CameraController { get; private set; }
public static UIManager UI { get; private set; }
public static TextManager TextManager { get; private set; }
public static VideoPlayer VideoPlayer { get; private set; }
public static SceneLoader SceneLoader { get; private set; }
public static ResourceManager ResourceManager { get; private set; }
public const float Ps1FPS = 60f;
[SerializeField] private string startScript;
void Awake()
{
DontDestroyOnLoad(gameObject);
InitializeManagers();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> F1
}
private void InitializeManagers()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameState = new GameObject("GameState").AddComponent<GameState>();
GameState.IsPlayerControlLocked = true;
DontDestroyOnLoad(GameState.gameObject);
ControlsController controlsController = new GameObject("ControlsController").AddComponent<ControlsController>(); //TODO: Set On Scene
DontDestroyOnLoad(controlsController.gameObject);
ResourceManager = new GameObject("ResourceManager").AddComponent<ResourceManager>();
DontDestroyOnLoad(ResourceManager.gameObject);
CameraController = FindFirstObjectByType<CameraController>();
DontDestroyOnLoad(CameraController.gameObject);
UI = FindFirstObjectByType<UIManager>();
if (UI == null)
{
Debug.LogError("UIManager not found on scene! Please add UIManager component to a GameObject.");
return;
}
UI.Initialize(); // <20><><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!
DontDestroyOnLoad(UI.gameObject);
TextManager = new GameObject("TextManager").AddComponent<TextManager>();
DontDestroyOnLoad(TextManager.gameObject);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Loader = new ScriptLoader();
SceneLoader = gameObject.AddComponent<SceneLoader>();
VM = gameObject.AddComponent<ScriptVM>();
}
public void LoadScriptFromFile(string filePath)
{
string fullPath = Path.Combine(Application.streamingAssetsPath, filePath);
if (File.Exists(fullPath))
{
byte[] scriptData = File.ReadAllBytes(fullPath);
Script script = Loader.Load(scriptData);
VM.LoadAndRunScript(script);
Debug.Log($"Script loaded from: {fullPath}");
}
else
{
Debug.LogError($"File not found: {fullPath}");
}
}
void Update()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> F1
if (Input.GetKeyDown(KeyCode.F1))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
LoadScriptFromFile("Events/" + startScript + ".TRNSL");
}
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Input.GetKeyDown(KeyCode.F2))
{
if (VM.IsRunning)
{
Debug.Log("Script is running");
}
else
{
Debug.Log("No script running");
}
}
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Input.GetKeyDown(KeyCode.F3))
{
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> VM
Debug.Log("Stop script requested");
}
}
}

2
Assets/Code/App.cs.meta Normal file
View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3db5aef391bb2874c8afac0550553818

View File

@@ -0,0 +1,131 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[Header("Camera Settings")]
public float cameraHeight = 600f; // Высота камеры над целью
public float cameraDistance = 700f; // Расстояние от камеры до цели
public float rotationSpeed = 5f; // Скорость плавного поворота
public Vector3 cameraTargetPoint; // Точка, на которую смотрит камера
public uint sourceX;
public uint sourceY;
public uint sourceZ;
public int currentCameraRotation = 0; // Текущий угол вращения (0-7)
private bool isCameraRotating = false;
private Quaternion targetCameraRotation;
public void SetCamTargetXY(uint rotate, uint xx, uint yy, uint zz)
{
sourceX = xx;
sourceY = yy;
sourceZ = zz;
float targetX = (int)xx;
float targetY = (int)yy;
float targetZ = (int)zz;
// Устанавливаем целевую точку
cameraTargetPoint = new Vector3(targetX, targetY, targetZ);
// Преобразуем вращение (0-7 в 0-315 градусов с шагом 45)
float targetAngle = ResourceManager.ConvertGameRotation(rotate);
// Обновляем текущее вращение
currentCameraRotation = (int)rotate;
// Немедленно устанавливаем позицию и вращение камеры
UpdateCameraPositionImmediate(targetAngle);
//Debug.Log($"Camera target: {cameraTargetPoint}, Rotation: {targetAngle}° (index: {rotate})");
}
// Немедленное обновление позиции камеры
private void UpdateCameraPositionImmediate(float angle)
{
// Преобразуем угол в радианы
float radAngle = angle * Mathf.Deg2Rad;
// Вычисляем смещение камеры от целевой точки
Vector3 cameraOffset = new Vector3(
Mathf.Sin(radAngle) * cameraDistance,
cameraHeight, // Фиксированная высота над целью
Mathf.Cos(radAngle) * cameraDistance
);
// Устанавливаем позицию камеры
transform.position = cameraTargetPoint + cameraOffset;
// Камера всегда смотрит на целевую точку
transform.LookAt(cameraTargetPoint);
}
// Метод для плавного поворота камеры на заданный угол (если понадобится)
public void RotateCameraSmoothly(int targetRotationIndex)
{
if (isCameraRotating) return;
targetRotationIndex = targetRotationIndex % 8;
if (targetRotationIndex == currentCameraRotation) return;
StartCoroutine(SmoothRotationCoroutine(targetRotationIndex));
}
// Корутина для плавного вращения
private IEnumerator SmoothRotationCoroutine(int targetRotationIndex)
{
isCameraRotating = true;
float startAngle = currentCameraRotation * 45f;
float targetAngle = targetRotationIndex * 45f;
float progress = 0f;
// Корректируем для кратчайшего пути вращения
float angleDifference = Mathf.DeltaAngle(startAngle, targetAngle);
if (Mathf.Abs(angleDifference) > 180f)
{
targetAngle = startAngle + (angleDifference > 0 ? angleDifference - 360f : angleDifference + 360f);
}
Vector3 startPosition = transform.position;
while (progress < 1f)
{
progress += Time.deltaTime * rotationSpeed;
float currentAngle = Mathf.Lerp(startAngle, targetAngle, progress);
// Обновляем позицию камеры
float radAngle = currentAngle * Mathf.Deg2Rad;
Vector3 cameraOffset = new Vector3(
Mathf.Sin(radAngle) * cameraDistance,
cameraHeight,
Mathf.Cos(radAngle) * cameraDistance
);
transform.position = cameraTargetPoint + cameraOffset;
transform.LookAt(cameraTargetPoint);
yield return null;
}
// Финализируем позицию
currentCameraRotation = targetRotationIndex;
UpdateCameraPositionImmediate(targetRotationIndex * 45f);
isCameraRotating = false;
}
// Update is called once per frame
void Update()
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c7a97f909cd8e0d4899d3988adde47a0

View File

@@ -0,0 +1,106 @@
using UnityEngine;
using System.Collections;
public class CharacterController : MonoBehaviour
{
public int CharacterId { get; set; }
public bool IsMoving { get; private set; }
public bool IsAnimationComplete { get; private set; }
[SerializeField]
public int blockSubroutine { get; set; }
private float _moveSpeed = 200f;
private Vector3 _originalPosition;
void Start()
{
_originalPosition = transform.position;
}
public void MoveToGameCoordinates(uint gameX, uint gameZ, uint endAction, uint speed)
{
IsMoving = true;
IsAnimationComplete = false;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float x = ResourceManager.ConvertGameCoordinate(gameX);
float z = ResourceManager.ConvertGameCoordinate(gameZ);
float y = transform.position.y;
Vector3 targetPosition = new Vector3(x, y, z);
float speedMultiplier = speed == 1 ? 2f : 1f;
StartCoroutine(MoveCoroutine(targetPosition, speedMultiplier, endAction));
}
private IEnumerator MoveCoroutine(Vector3 targetPosition, float speedMultiplier, uint endAction)
{
float currentSpeed = _moveSpeed * speedMultiplier;
float journeyLength = Vector3.Distance(transform.position, targetPosition);
float startTime = Time.time;
Vector3 startPosition = transform.position;
while (Vector3.Distance(transform.position, targetPosition) > 0.1f)
{
float distCovered = (Time.time - startTime) * currentSpeed;
float fractionOfJourney = distCovered / journeyLength;
transform.position = Vector3.Lerp(startPosition, targetPosition, fractionOfJourney);
yield return null;
}
transform.position = targetPosition;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ApplyEndAction(endAction);
IsMoving = false;
IsAnimationComplete = true;
}
private void ApplyEndAction(uint endAction)
{
switch (endAction)
{
case 1: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 90<39>
transform.rotation = Quaternion.Euler(0, 90f, 0);
break;
case 2: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 180<38>
transform.rotation = Quaternion.Euler(0, 180f, 0);
break;
case 3: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 270<37>
transform.rotation = Quaternion.Euler(0, 270f, 0);
break;
}
}
public void PlayAnimation(int animationId, int repeatCount)
{
IsAnimationComplete = false;
StartCoroutine(AnimationCoroutine(animationId, repeatCount));
}
private IEnumerator AnimationCoroutine(int animationId, int repeatCount)
{
Vector3 startPosition = transform.position;
for (int i = 0; i < Mathf.Max(1, repeatCount); i++)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
transform.position = startPosition + Vector3.up * 50f;
yield return new WaitForSeconds(0.1f);
transform.position += Vector3.down * 50f;
yield return new WaitForSeconds(0.1f);
}
IsAnimationComplete = true;
}
public void StopAllActions()
{
StopAllCoroutines();
IsMoving = false;
IsAnimationComplete = true;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 62142119356b539449e0c93c84a50d92

View File

@@ -0,0 +1,161 @@
using UnityEngine;
using System.Collections.Generic;
public class ControlsController : MonoBehaviour
{
public static ControlsController Instance { get; private set; }
private GameObject _controlledObject; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id=1)
private CharacterController _characterController;
[Header("Movement Settings")]
public float moveSpeed = 300f;
public float rotationSpeed = 90f;
[Header("Camera Settings")]
public float cameraRotationAngle = 45f;
public float cameraChangeSpeed = 5f;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void SetControlledObject(GameObject obj)
{
_controlledObject = obj;
_characterController = obj?.GetComponent<CharacterController>();
cameraRotationAngle = App.CameraController.currentCameraRotation;
if (_controlledObject != null)
{
Debug.Log($"Controlled object set: {_controlledObject.name}");
UpdateCameraPosition();
}
}
private void Update()
{
if (_controlledObject == null || App.GameState.IsPlayerControlLocked)
return;
HandleMovement();
HandleCameraRotation();
HandleInteraction();
}
private void HandleMovement()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
if (horizontal != 0 || vertical != 0)
{
Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Vector3 cameraForward = App.CameraController.transform.forward;
cameraForward.y = 0;
cameraForward.Normalize();
Vector3 cameraRight = App.CameraController.transform.right;
cameraRight.y = 0;
cameraRight.Normalize();
Vector3 moveDirection = (cameraForward * vertical + cameraRight * horizontal).normalized;
_controlledObject.transform.position += moveDirection * moveSpeed * Time.deltaTime;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (moveDirection != Vector3.zero)
{
Quaternion targetRotation = Quaternion.LookRotation(moveDirection);
_controlledObject.transform.rotation = Quaternion.Slerp(
_controlledObject.transform.rotation,
targetRotation,
rotationSpeed * Time.deltaTime
);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateCameraPosition();
}
}
private void HandleCameraRotation()
{
if (Input.GetKeyDown(KeyCode.Q))
{
RotateCamera(-1);
}
else if (Input.GetKeyDown(KeyCode.E))
{
RotateCamera(1);
}
}
private void RotateCamera(float angle)
{
int newRotation = App.CameraController.currentCameraRotation + (int)angle;
cameraRotationAngle = newRotation;
//int newRotation = (currentRotation + (int)(angle / 45f)) % 8;
//if (newRotation < 0) newRotation += 8;
App.CameraController.RotateCameraSmoothly(newRotation);
}
private void HandleInteraction()
{
if (Input.GetButtonDown("Submit"))
{
CheckNearbyInteractions();
}
}
private void CheckNearbyInteractions()
{
Collider[] hitColliders = Physics.OverlapSphere(_controlledObject.transform.position, 100f);
foreach (var hitCollider in hitColliders)
{
CharacterController otherController = hitCollider.GetComponent<CharacterController>();
if (otherController != null && otherController != _characterController)
{
if (otherController.blockSubroutine != 0)
{
StartSubroutine((ushort)otherController.blockSubroutine);
break;
}
}
}
}
public void UpdateCameraPosition()
{
if (_controlledObject != null)
{
Vector3 position = _controlledObject.transform.position;
App.CameraController.SetCamTargetXY(
(uint)App.CameraController.currentCameraRotation,
(uint)position.x,
(uint)position.y,
(uint)position.z
);
}
}
private void StartSubroutine(ushort subId)
{
if (App.VM != null)
{
App.VM.StartSubroutine(subId);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ed07e269a7d0d1242bc94ddac6f34186

43
Assets/Code/GameState.cs Normal file
View File

@@ -0,0 +1,43 @@
using System.Collections.Generic;
using UnityEngine;
public class GameState : MonoBehaviour
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public string PlayerName { get; set; }
public int Health { get; set; }
public int Magic { get; set; }
public int Level { get; set; }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public bool IsPlayerControlLocked { get; set; }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private Dictionary<int, int> _storyVariables = new Dictionary<int, int>();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public List<int> Skills { get; set; } = new List<int>();
public Dictionary<int, int> Inventory { get; set; } = new Dictionary<int, int>();
public void SetGlobalVariable(int address, int value)
{
_storyVariables[address] = value;
Debug.Log($"Set global variable 0x{address:X8} = {value}");
}
public int GetGlobalVariable(int address)
{
return _storyVariables.TryGetValue(address, out int value) ? value : 0;
}
public void Reset()
{
_storyVariables.Clear();
Skills.Clear();
Inventory.Clear();
Health = 100;
Magic = 50;
Level = 1;
IsPlayerControlLocked = true;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7417d9fa7200ff242a416ac128c9abeb

View File

@@ -0,0 +1,84 @@
using UnityEngine;
public class ResourceManager : MonoBehaviour
{
public GameObject LoadModel(int id)
{
GameObject characterContainer = new GameObject($"CharLoaded_{id:X4}");
GameObject mesh = GameObject.CreatePrimitive(PrimitiveType.Cube);
mesh.transform.SetParent(characterContainer.transform);
BoxCollider boxCollider = mesh.GetComponent<BoxCollider>();
if (boxCollider != null)
{
GameObject.Destroy(boxCollider);
}
float height = id == 1 ? 150f : 60f;
mesh.transform.localScale = new Vector3(30f, height, 30f);
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mesh.transform.localPosition = new Vector3(0, height / 2f, 0);
// 6. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
CapsuleCollider capsuleCollider = characterContainer.AddComponent<CapsuleCollider>();
capsuleCollider.height = height;
capsuleCollider.radius = 50f;
capsuleCollider.center = new Vector3(0, height / 2f, 0); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
characterContainer.AddComponent<CharacterController>();
return characterContainer;
}
public static int ConvertGameCoordinate(uint gameCoord)
{
int value30bit = (int)(gameCoord & 0x3FFFFFFF);
if ((gameCoord & 0x40000000) != 0)
{
return value30bit - 0x40000000;
}
else
{
return value30bit;
}
}
public static float ConvertGameRotation(uint gameRot)
{
return gameRot * 45f - 180f;
}
public GameObject CharLoad(int modelId)
{
GameObject obj = LoadModel(modelId);
obj.name = $"ModelTemplate_{modelId:X4}";
obj.SetActive(false);
return obj;
}
public GameObject CharInit(GameObject obj, int id, uint gameX, uint gameY, uint gameZ, uint gameRot)
{
GameObject characterInstance = Instantiate(obj);
var ctrl = characterInstance.GetComponent<CharacterController>();
ctrl.CharacterId = id;
characterInstance.name = $"{id:X4}"; //rename for normal script ID
float x = ConvertGameCoordinate(gameX);
float y = ConvertGameCoordinate(gameY);
float z = ConvertGameCoordinate(gameZ);
float rotation = ConvertGameRotation(gameRot);
characterInstance.transform.position = new Vector3(x, y, z);
characterInstance.transform.rotation = Quaternion.Euler(0, rotation, 0);
characterInstance.SetActive(true);
if (id == 1 && ControlsController.Instance != null)
{
ControlsController.Instance.SetControlledObject(characterInstance);
}
return characterInstance;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5ee0eb2f342e82e40a72aa889274cb53

View File

@@ -0,0 +1,29 @@
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
public void LoadDungeon(int dungeonId)
{
Debug.Log($"Loading dungeon: {dungeonId}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
}
public void LoadCity(int districtId, int y, int x) //+ Exit
{
Debug.Log($"Loading city: {districtId}. ({x}, {y})");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
public void LoadBattle(int battleId) //+ floor...
{
Debug.Log($"Loading battle: {battleId}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
}
public void LoadEvent(int EventId, int hz)
{
Debug.Log($"Loading event: {EventId} ({EventId + 181}). Hz - {hz}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a652356dbc9c6bc4ba82116ecd6c13c3

148
Assets/Code/ScriptLoader.cs Normal file
View File

@@ -0,0 +1,148 @@
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class ScriptLoader
{
public Script Load(byte[] binaryData)
{
Script script = new Script();
using (BinaryReader reader = new BinaryReader(new MemoryStream(binaryData)))
{
uint subTableOffset = reader.ReadUInt32();
uint unk2 = reader.ReadUInt32();
uint subCount = reader.ReadUInt32();
uint cmdListOffset = reader.ReadUInt32();
uint paramsListOffset = reader.ReadUInt32();
uint textArrayOffset = reader.ReadUInt32();
uint endOfFileOffset = (uint)binaryData.Length; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
script.SubroutineTable = ParseSubTable(reader, subCount, subTableOffset);
reader.BaseStream.Position = cmdListOffset;
List<ScriptCommand> commandsWithoutParams = ParseCmdListWithoutParams(reader, paramsListOffset);
script.Commands = new List<ScriptCommand>(commandsWithoutParams.Count);
for (int i = 0; i < commandsWithoutParams.Count; i++)
{
ScriptCommand cmd = commandsWithoutParams[i];
uint currentParamsOffset = cmd.ParamsOffset;
uint nextParamsOffset;
if (i < commandsWithoutParams.Count - 1)
{
nextParamsOffset = commandsWithoutParams[i + 1].ParamsOffset;
}
else
{
nextParamsOffset = textArrayOffset;
}
int paramsLengthInBytes = (int)(nextParamsOffset - currentParamsOffset);
cmd.Params = ReadParamValues(reader, currentParamsOffset, paramsLengthInBytes);
script.Commands.Add(cmd);
}
script.TextData = ReadBytes(reader, textArrayOffset, endOfFileOffset);
}
return script;
}
private List<ScriptCommand> ParseCmdListWithoutParams(BinaryReader reader, uint paramsListOffset)
{
var commands = new List<ScriptCommand>();
while (reader.BaseStream.Position < paramsListOffset)
{
ScriptCommand cmd = new ScriptCommand
{
OpCode = reader.ReadUInt32() & 0xFFFF, //Cleaning to 16-bit command (May be some trash or what ???),
ParamsOffset = reader.ReadUInt32()
};
commands.Add(cmd);
}
return commands;
}
private int[] ReadParamValues(BinaryReader reader, uint startOffset, int lengthInBytes)
{
if (lengthInBytes <= 0) return new int[0];
if (lengthInBytes % 4 != 0)
{
Debug.LogWarning($"Parameter block length ({lengthInBytes}) is not a multiple of 4. Truncating.");
lengthInBytes = (lengthInBytes / 4) * 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
}
int paramCount = lengthInBytes / 4;
int[] parameters = new int[paramCount];
reader.BaseStream.Position = startOffset;
for (int i = 0; i < paramCount; i++)
{
parameters[i] = reader.ReadInt32();
}
return parameters;
}
private byte[] ReadBytes(BinaryReader reader, uint startAddr, uint endAddr)
{
if (startAddr >= endAddr)
return new byte[0];
int length = (int)(endAddr - startAddr);
reader.BaseStream.Position = startAddr;
return reader.ReadBytes(length);
}
private Dictionary<ushort, Subroutine> ParseSubTable(BinaryReader reader, uint subCount, long baseOffset)
{
var table = new Dictionary<ushort, Subroutine>();
for (ushort id = 0; id < subCount; id++)
{
long entryOffset = baseOffset + (id * 72); // 72 bytes on each subroutine header
reader.BaseStream.Position = entryOffset;
Subroutine sub = new Subroutine();
sub.Id = id;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (null-terminated string)
List<byte> nameBytes = new List<byte>();
byte b;
while ((b = reader.ReadByte()) != 0)
{
nameBytes.Add(b);
}
sub.Name = System.Text.Encoding.UTF8.GetString(nameBytes.ToArray());
reader.BaseStream.Position = entryOffset + 64; //address always +64 byte offset from structure start
sub.Address = reader.ReadUInt32();
table.Add(id, sub);
}
return table;
}
}
public class Script
{
public Dictionary<ushort, Subroutine> SubroutineTable { get; set; }
public List<ScriptCommand> Commands { get; set; }
public byte[] TextData { get; set; } // textBlob
}
public class Subroutine
{
public ushort Id { get; set; }
public string Name { get; set; }
public uint Address { get; set; } // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Commands
}
public class ScriptCommand
{
public uint OpCode { get; set; }
public ushort executedStatus { get; set; } //For original engine compability (0 - not executed, 3 - parsed, may be other statuses - need to reverse)
public uint ParamsOffset { get; set; }
public int[] Params { get; set; } // command params array
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 672baa445921734488f3285eb2525055

807
Assets/Code/ScriptVM.cs Normal file
View File

@@ -0,0 +1,807 @@
using NUnit.Framework.Internal;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ScriptVM : MonoBehaviour
{
private Script _currentScript;
private ExecutionContext _mainContext;
private Dictionary<int, ExecutionContext> _activeSubroutines = new Dictionary<int, ExecutionContext>();
private Dictionary<int, GameObject> _modelTempRegistry = new Dictionary<int, GameObject>();
private Dictionary<int, GameObject> _objectRegistry = new Dictionary<int, GameObject>();
private int selectionVariable;
// Jump Table <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private Dictionary<uint, Action<ExecutionContext, ScriptCommand>> _opCodeHandlers;
public bool IsRunning => _mainContext != null && !_mainContext.IsFinished;
//SCRIPT LOGGING
void OnGUI()
{
GUILayout.BeginArea(new Rect(10, 10, 400, 600));
if (_mainContext != null)
{
GUILayout.Label($"MAIN: PC={_mainContext.ProgramCounter:X4} CMD=0x{GetCurrentCommand(_mainContext)?.OpCode:X4}");
GUILayout.Label($"Status: {(IsRunning ? "Running" : "Stopped")}");
GUILayout.Label($"Paused: {(_mainContext.IsPaused ? "+" : "-")} RemSec: -{_mainContext.PauseTimeRemaining}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var currentCmd = GetCurrentCommand(_mainContext);
if (currentCmd != null)
{
GUILayout.Label($"Params: {string.Join(", ", currentCmd.Params)}");
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GUILayout.Label($"Subroutines: {_activeSubroutines.Count}");
foreach (var kvp in _activeSubroutines)
{
var context = kvp.Value;
GUILayout.Label($"SUB[{kvp.Key:X2}] {context.ContextName}: PC={context.ProgramCounter:X4} CMD=0x{GetCurrentCommand(context)?.OpCode:X4}");
GUILayout.Label($" Paused: {(context.IsPaused ? "+" : "-")} RemSec: -{context.PauseTimeRemaining}");
}
GUILayout.EndArea();
}
void Awake()
{
InitializeJumpTable();
}
void Update()
{
if (_mainContext == null) return;
if (_mainContext.IsPaused && _mainContext.PauseTimeRemaining > 0)
{
_mainContext.PauseTimeRemaining -= Time.deltaTime;
if (_mainContext.PauseTimeRemaining <= 0)
{
_mainContext.PauseTimeRemaining = 0;
_mainContext.IsPaused = false;
_mainContext.ProgramCounter++;
MarkCurrentCommandCompleted(_mainContext); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!_mainContext.IsWaiting && !_mainContext.IsPaused)
{
ExecuteStep(_mainContext);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (var context in _activeSubroutines.Values)
{
if (context.IsPaused && context.PauseTimeRemaining > 0)
{
context.PauseTimeRemaining -= Time.deltaTime;
if (context.PauseTimeRemaining <= 0)
{
context.PauseTimeRemaining = 0;
context.IsPaused = false;
context.ProgramCounter++;
MarkCurrentCommandCompleted(context);
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (var context in _activeSubroutines.Values)
{
if (!context.IsWaiting && !context.IsPaused)
{
ExecuteStep(context);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_activeSubroutines = _activeSubroutines.Where(kvp => !kvp.Value.IsFinished).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}
public void LoadAndRunScript(Script script)
{
_currentScript = script;
_mainContext = new ExecutionContext(0, "MAIN", null);
_activeSubroutines.Clear();
_objectRegistry.Clear();
Debug.Log($"Script loaded with {script.Commands.Count} commands");
}
public void StartSubroutine(ushort subId)
{
if (_currentScript != null && _currentScript.SubroutineTable.TryGetValue(subId, out Subroutine sub))
{
var newContext = new ExecutionContext(sub.Address, sub.Name, new ScriptCommand {OpCode = 999});
_activeSubroutines[subId] = newContext;
Debug.Log($"Started independent subroutine {subId} at address {sub.Address:X4}");
}
else
{
Debug.LogWarning($"Cannot start subroutine {subId}: script not loaded or subroutine not found");
}
}
private bool IsCommandCompleted(uint commandId)
{
if (commandId < _currentScript.Commands.Count)
{
return _currentScript.Commands[(int)commandId].executedStatus == 3;
}
return false;
}
// WaitTo - stops thread and check command status at address
private void Handle_WaitTo(ExecutionContext ctx, ScriptCommand cmd)
{
uint targetCommandId = (uint)GetParam(cmd, 0);
if (IsCommandCompleted(targetCommandId))
{
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
}
private void ExecuteStep(ExecutionContext context)
{
if (context.ProgramCounter >= _currentScript.Commands.Count)
{
context.IsFinished = true;
if (context == _mainContext) Debug.Log("Main script finished");
return;
}
ScriptCommand cmd = _currentScript.Commands[(int)context.ProgramCounter];
cmd.executedStatus = 0; //cleaning status for command restart and proper wait
if (_opCodeHandlers.TryGetValue(cmd.OpCode, out var handler))
{
try
{
handler(context, cmd);
}
catch (Exception ex)
{
Debug.LogError($"Error executing command 0x{cmd.OpCode:X8}: {ex.Message}");
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.executedStatus = 3;
context.ProgramCounter++;
}
}
else
{
Debug.LogWarning($"Unknown OpCode: 0x{cmd.OpCode:X8} at PC={context.ProgramCounter:X4}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd.executedStatus = 3;
context.ProgramCounter++;
}
}
private void InitializeJumpTable()
{
_opCodeHandlers = new Dictionary<uint, Action<ExecutionContext, ScriptCommand>>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000007, Handle_JumpTo },
{ 0x00000001, Handle_If1Go },
{ 0x00000002, Handle_If0Go },
{ 0x00000004, Handle_IfNotEqualGo },
{ 0x0000000D, Handle_GoSub },
{ 0x0000000E, Handle_Return },
{ 0x00000012, Handle_WaitTo },
{ 0x0000001A, Handle_GetInput },
{ 0x0000002C, Handle_SetCamXY }, // Set Camera
//Characters commands
{ 0x00000030, Handle_CharLoad }, // CharLoad
{ 0x00000031, Handle_CharInit }, // CharInit
{ 0x000000D0, Handle_CharInit }, // Another CharInit???
{ 0x00000034, Handle_CharMoveTo }, // CanWait
{ 0x00000037, Handle_CharAnimate }, // CanWait
{ 0x00000038, Handle_CharAnimate2 }, // CanWait
{ 0x00000041, Handle_PlayerInit }, // Create player char at camera set
{ 0x000000D2, Handle_CharGlowShow }, // CharInitWithGlow
{ 0x0000003E, Handle_WaitCharAnimEnd }, // Wait by char id
{ 0x00000046, Handle_CharSetSubroutine }, // Set blockcharacter subroutine
//Pause
{ 0x0000005C, Handle_PausInit }, // PausInit
{ 0x0000005D, Handle_PauseFr }, // PauseFr_
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000008, Handle_SetTemp },
{ 0x00000009, Handle_CopyVar },
{ 0x00000060, Handle_GetVar },
{ 0x0000005E, Handle_VarTrue },
{ 0x0000005F, Handle_VarFlse },
{ 0x00000073, Handle_VarDec },
{ 0x00000074, Handle_VarSet },
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000043, Handle_CtrlLock },
{ 0x00000044, Handle_CtrUnlck },
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000051, Handle_DungLoad },
{ 0x00000052, Handle_EventLoad },
{ 0x00000053, Handle_CityLoad },
{ 0x000000ED, Handle_BattleLoad },
// <20><><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000059, Handle_VideoPly },
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000092, Handle_ScrnFade },
// <20><><EFBFBD><EFBFBD><EFBFBD>
{ 0x00000024, Handle_WindOpen },
{ 0x00000013, Handle_TextShow },
{ 0x00000025, Handle_WindClose }
};
}
// ========== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==========
private void Handle_JumpTo(ExecutionContext ctx, ScriptCommand cmd)
{
uint jumpAddress = (uint)GetParam(cmd, 0);
ctx.ProgramCounter = jumpAddress;
cmd.executedStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_If1Go(ExecutionContext ctx, ScriptCommand cmd)
{
int varAddress = GetParam(cmd, 0);
uint jumpAddress = (uint)GetParam(cmd, 1);
if (GetLocalVariable(ctx, varAddress) == 1)
ctx.ProgramCounter = jumpAddress;
else
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_If0Go(ExecutionContext ctx, ScriptCommand cmd)
{
int varAddress = GetParam(cmd, 0);
uint jumpAddress = (uint)GetParam(cmd, 1);
if (GetLocalVariable(ctx, varAddress) == 0)
ctx.ProgramCounter = jumpAddress;
else
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_IfNotEqualGo(ExecutionContext ctx, ScriptCommand cmd)
{
int varAddress = GetParam(cmd, 0);
int compareValue = GetParam(cmd, 1);
uint jumpAddress = (uint)GetParam(cmd, 2);
if (GetLocalVariable(ctx, varAddress) != compareValue)
ctx.ProgramCounter = jumpAddress;
else
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_GoSub(ExecutionContext ctx, ScriptCommand cmd)
{
ushort subId = (ushort)GetParam(cmd, 0);
if (_currentScript.SubroutineTable.TryGetValue(subId, out Subroutine sub))
{
var newContext = new ExecutionContext(sub.Address, sub.Name, cmd);
_activeSubroutines[subId] = newContext;
}
ctx.ProgramCounter++;
}
private void Handle_Return(ExecutionContext ctx, ScriptCommand cmd)
{
if (ctx.ExecutedByCmd != null) //main thread has ExecutedByCmd = null
{
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ctx.ExecutedByCmd.executedStatus = 3;
ctx.IsFinished = true;
}
}
private void Handle_GetInput(ExecutionContext ctx, ScriptCommand cmd)
{
int varAddress = GetParam(cmd, 0);
SetLocalVariable(ctx, varAddress, selectionVariable);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>:
private void Handle_PausInit(ExecutionContext ctx, ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ctx.PauseTimeRemaining = 0;
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_PauseFr(ExecutionContext ctx, ScriptCommand cmd)
{
int framesToPause = GetParam(cmd, 0);
ctx.PauseTimeRemaining = ctx.PauseTimeRemaining = framesToPause * (1f / App.Ps1FPS); //Ps1 FPS Compability
ctx.IsPaused = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_SetTemp(ExecutionContext ctx, ScriptCommand cmd)
{
int varAddress = GetParam(cmd, 0);
int value = GetParam(cmd, 1);
SetLocalVariable(ctx, varAddress, value);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CopyVar(ExecutionContext ctx, ScriptCommand cmd)
{
int srcAddress = GetParam(cmd, 0);
int dstAddress = GetParam(cmd, 1);
int value = GetLocalVariable(ctx, srcAddress);
SetLocalVariable(ctx, dstAddress, value);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_GetVar(ExecutionContext ctx, ScriptCommand cmd)
{
int localVarAddress = GetParam(cmd, 0);
int globalVarAddress = GetParam(cmd, 1);
int value = App.GameState.GetGlobalVariable(globalVarAddress);
SetLocalVariable(ctx, localVarAddress, value);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_VarTrue(ExecutionContext ctx, ScriptCommand cmd)
{
int globalVarAddress = GetParam(cmd, 0);
App.GameState.SetGlobalVariable(globalVarAddress, 1);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_VarFlse(ExecutionContext ctx, ScriptCommand cmd)
{
int globalVarAddress = GetParam(cmd, 0);
App.GameState.SetGlobalVariable(globalVarAddress, 0);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_VarSet(ExecutionContext ctx, ScriptCommand cmd)
{
int globalVarAddress = GetParam(cmd, 0);
int value = GetParam(cmd, 1);
App.GameState.SetGlobalVariable(globalVarAddress, value);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_VarDec(ExecutionContext ctx, ScriptCommand cmd)
{
int globalVarAddress = GetParam(cmd, 0);
int currentValue = App.GameState.GetGlobalVariable(globalVarAddress);
App.GameState.SetGlobalVariable(globalVarAddress, currentValue - 1);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CtrlLock(ExecutionContext ctx, ScriptCommand cmd)
{
Debug.Log("Controls Locked");
App.GameState.IsPlayerControlLocked = true;
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CtrUnlck(ExecutionContext ctx, ScriptCommand cmd)
{
Debug.Log("Controls Unlocked");
App.GameState.IsPlayerControlLocked = false;
if (_objectRegistry.TryGetValue(1, out GameObject playerObj))
{
ControlsController.Instance?.SetControlledObject(playerObj);
}
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_SetCamXY(ExecutionContext ctx, ScriptCommand cmd)
{
uint rot = (uint)GetParam(cmd, 0);
uint x = (uint)GetParam(cmd, 1);
uint y = (uint)GetParam(cmd, 2);
uint z = (uint)GetParam(cmd, 3);
App.CameraController.SetCamTargetXY(rot, x, y, z);
Debug.Log($"Camera position set {x}.{y}.{z}. Rot - {rot}");
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_TextShow(ExecutionContext ctx, ScriptCommand cmd)
{
int textOffset = GetParam(cmd, 0);
var textTokens = TextUtils.ParseText(_currentScript.TextData, textOffset);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
App.TextManager.ShowText(textTokens, cmd);
ctx.ProgramCounter++;
}
private void Handle_WindOpen(ExecutionContext ctx, ScriptCommand cmd)
{
App.UI.ShowMessageWindow();
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_WindClose(ExecutionContext ctx, ScriptCommand cmd)
{
App.UI.HideMessageWindow(ctx);
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
//CHARACTERS SECTION
private void Handle_CharLoad(ExecutionContext ctx, ScriptCommand cmd)
{
//Old PS1 method for loading sprite sheet in VRAM
//Now we simply creating disabled char model on scene
int modelId = GetParam(cmd, 0);
if (!_modelTempRegistry.ContainsKey(modelId))
{
GameObject model = App.ResourceManager.CharLoad(modelId);
_modelTempRegistry[modelId] = model;
}
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CharInit(ExecutionContext ctx, ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: id, model_id, x, y, z, turn, dummy
int objectId = GetParam(cmd, 0);
int modelId = GetParam(cmd, 1);
uint posX = (uint)GetParam(cmd, 2);
uint posY = (uint)GetParam(cmd, 3);
uint posZ = (uint)GetParam(cmd, 4);
uint rotation = (uint)GetParam(cmd, 5);
int dummy = GetParam(cmd, 6); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!_modelTempRegistry.TryGetValue(modelId, out GameObject templateModel))
{
Debug.LogWarning($"Model {modelId} not loaded, creating...");
templateModel = App.ResourceManager.CharLoad(modelId);
_modelTempRegistry[modelId] = templateModel;
}
if (_objectRegistry.TryGetValue(objectId, out GameObject existingModel))
{
Destroy(existingModel);
_objectRegistry.Remove(objectId);
}
GameObject characterInstance = App.ResourceManager.CharInit(templateModel, objectId, posX, posY, posZ, rotation);
_objectRegistry[objectId] = characterInstance;
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
// Activate player object at camera spot position and link controls
private void Handle_PlayerInit(ExecutionContext ctx, ScriptCommand cmd)
{
int rotation = GetParam(cmd, 0);
if (!_modelTempRegistry.TryGetValue(1, out GameObject templateModel))
{
Debug.LogWarning($"Player Model not loaded, creating...");
templateModel = App.ResourceManager.CharLoad(1);
_modelTempRegistry[1] = templateModel;
}
if (_objectRegistry.TryGetValue(1, out GameObject existingModel))
{
Destroy(existingModel);
_objectRegistry.Remove(1);
}
CameraController sceneCamera = App.CameraController;
GameObject character = App.ResourceManager.CharInit(templateModel, 1, sceneCamera.sourceX, sceneCamera.sourceY, sceneCamera.sourceZ, (uint)rotation);
_objectRegistry[1] = character;
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CharGlowShow(ExecutionContext ctx, ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: id, x, y, z, glow, dummy
int charId = GetParam(cmd, 0);
uint posX = (uint)GetParam(cmd, 1);
uint posY = (uint)GetParam(cmd, 2);
uint posZ = (uint)GetParam(cmd, 3);
uint glow = (uint)GetParam(cmd, 4);
int dummy = GetParam(cmd, 5);
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj))
{
App.ResourceManager.CharInit(characterObj, charId, posX, posY, posZ, glow); //TODO: Async GLOW
}
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CharMoveTo(ExecutionContext ctx, ScriptCommand cmd)
{
int charId = GetParam(cmd, 0);
uint destX = (uint)GetParam(cmd, 1);
uint destZ = (uint)GetParam(cmd, 2);
uint endAction = (uint)GetParam(cmd, 3);
uint speed = (uint)GetParam(cmd, 4);
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
{
var controller = character.GetComponent<CharacterController>();
if (controller != null)
{
//async move
controller.MoveToGameCoordinates(destX, destZ, endAction, speed);
}
}
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CharAnimate(ExecutionContext ctx, ScriptCommand cmd)
{
int charId = GetParam(cmd, 0);
uint animationId = (uint)GetParam(cmd, 1);
uint repeatNum = (uint)GetParam(cmd, 2);
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
{
var controller = character.GetComponent<CharacterController>();
if (controller != null)
{
controller.PlayAnimation((int)animationId, (int)Mathf.Max(1, repeatNum));
}
}
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
private void Handle_CharAnimate2(ExecutionContext ctx, ScriptCommand cmd)
{
Handle_CharAnimate(ctx, cmd);
}
private void Handle_WaitCharAnimEnd(ExecutionContext ctx, ScriptCommand cmd)
{
int charId = GetParam(cmd, 0);
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
{
var controller = character.GetComponent<CharacterController>();
if (controller != null && !controller.IsMoving)
{
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
}
else
{
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
}
private void Handle_CharSetSubroutine(ExecutionContext ctx, ScriptCommand cmd)
{
int charId = GetParam(cmd, 0);
int subId = GetParam(cmd, 1);
_objectRegistry.TryGetValue(charId, out GameObject characterObj);
characterObj.GetComponent<CharacterController>().blockSubroutine = subId;
Debug.Log($"Sub {subId} set to char {charId}");
ctx.ProgramCounter++;
cmd.executedStatus = 3;
}
// SCENERY LOADERS
private void Handle_CityLoad(ExecutionContext ctx, ScriptCommand cmd)
{
int districtId = GetParam(cmd, 0);
int y = GetParam(cmd, 1);
int x = GetParam(cmd, 2);
App.SceneLoader.LoadCity(districtId, y, x);
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_BattleLoad(ExecutionContext ctx, ScriptCommand cmd)
{
int battleId = GetParam(cmd, 0);
App.SceneLoader.LoadBattle(battleId);
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_DungLoad(ExecutionContext ctx, ScriptCommand cmd)
{
int dungeonId = GetParam(cmd, 0);
App.SceneLoader.LoadDungeon(dungeonId);
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_EventLoad(ExecutionContext ctx, ScriptCommand cmd)
{
int hzId = GetParam(cmd, 0);
int eventId = GetParam(cmd, 1);
App.SceneLoader.LoadEvent(eventId, hzId);
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private void Handle_VideoPly(ExecutionContext ctx, ScriptCommand cmd)
{
int videoId = GetParam(cmd, 0);
App.VideoPlayer.PlayVideo(videoId, cmd);
PauseContext(cmd);
}
private void Handle_ScrnFade(ExecutionContext ctx, ScriptCommand cmd)
{
int fadeType = GetParam(cmd, 0);
int duration = GetParam(cmd, 1);
//App.UI.ScreenFade(fadeType, duration, () => {
// ctx.ProgramCounter++;
//});
ctx.ProgramCounter++;
}
public void PauseContext(ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (_mainContext != null && GetCurrentCommand(_mainContext) == cmd)
{
_mainContext.IsPaused = true;
return;
}
foreach (var context in _activeSubroutines.Values)
{
if (GetCurrentCommand(context) == cmd)
{
context.IsPaused = true;
return;
}
}
}
public void ResumeContext(ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
if (_mainContext != null && GetCurrentCommand(_mainContext) == cmd)
{
_mainContext.IsPaused = false;
_mainContext.ProgramCounter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
foreach (var context in _activeSubroutines.Values)
{
if (GetCurrentCommand(context) == cmd)
{
context.IsPaused = false;
context.ProgramCounter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return;
}
}
}
// ========== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==========
private ScriptCommand GetCurrentCommand(ExecutionContext ctx)
{
if (ctx.ProgramCounter < _currentScript.Commands.Count)
return _currentScript.Commands[(int)ctx.ProgramCounter];
return null;
}
private int GetParam(ScriptCommand cmd, int index)
{
return index < cmd.Params.Length ? cmd.Params[index] : 0;
}
private int GetLocalVariable(ExecutionContext ctx, int address)
{
return ctx.LocalVariables.TryGetValue(address, out int value) ? value : 0;
}
private void SetLocalVariable(ExecutionContext ctx, int address, int value)
{
ctx.LocalVariables[address] = value;
}
public void SetSelectionVariable(int value) //external after selection variable set
{
selectionVariable = value;
}
public void MarkCommandCompleted(ScriptCommand cmd)
{
cmd.executedStatus = 3;
ResumeContext(cmd);
}
private void MarkCurrentCommandCompleted(ExecutionContext ctx)
{
if (ctx.ProgramCounter > 0 && ctx.ProgramCounter - 1 < _currentScript.Commands.Count)
{
ScriptCommand cmd = _currentScript.Commands[(int)(ctx.ProgramCounter - 1)];
cmd.executedStatus = 3;
}
}
}
public class ExecutionContext
{
public ScriptCommand ExecutedByCmd { get; set; }
public string ContextName { get; set; }
public uint ProgramCounter { get; set; }
public Dictionary<int, int> LocalVariables { get; set; }
public bool IsWaiting { get; set; }
public bool IsPaused { get; set; }
public bool IsFinished { get; set; }
public float PauseTimeRemaining { get; set; }
public ExecutionContext(uint startAddress, string name, ScriptCommand cmd)
{
ContextName = name;
ExecutedByCmd = cmd;
ProgramCounter = startAddress;
LocalVariables = new Dictionary<int, int>();
PauseTimeRemaining = 0;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 86f75a68871eb8b4ab7a2df4c08a2841

227
Assets/Code/TextManager.cs Normal file
View File

@@ -0,0 +1,227 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using TMPro;
public class TextManager : MonoBehaviour
{
public static TextManager Instance { get; private set; }
[Header("Text Settings")]
public float defaultTypeSpeed = 0.01f;
public Color defaultTextColor = Color.white;
private Coroutine currentTextCoroutine;
private StringBuilder currentTextBuilder;
private Vector2 currentTextPosition;
private bool isTyping = false;
private ScriptCommand currentCommand;
void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
}
public void ShowText(List<TextToken> tokens, ScriptCommand cmd)
{
currentCommand = cmd;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (currentTextCoroutine != null)
{
StopCoroutine(currentTextCoroutine);
}
currentTextCoroutine = StartCoroutine(ProcessTokensCoroutine(tokens));
}
private IEnumerator ProcessTokensCoroutine(List<TextToken> tokens)
{
isTyping = true;
currentTextBuilder = new StringBuilder();
App.UI.ClearText();
for (int a = 0; a < tokens.Count - 1; a++)
{
TextToken token = tokens[a];
switch(token.Key)
{
case "text":
yield return StartCoroutine(TypeText(token.Value));
break;
case "cmd":
yield return StartCoroutine(ProcessCommand(token.Value));
break;
case "color":
SetTextColor(token.Value);
break;
case "pause":
yield return new WaitForSeconds(float.Parse(token.Value) / 60);
break;
case "user_selection":
byte varCount = byte.Parse(token.Value); //preparing selection strings
List<string> selectionList = new List<string>();
for (byte x = 1; x <= varCount * 2; x += 2) //string and \n
{
selectionList.Add(tokens[a+x].Value);
}
a += varCount * 2; //jump over selection strings (text + \n)
App.UI.ShowSelection(selectionList);
break;
}
}
isTyping = false;
}
private IEnumerator TypeText(string text)
{
foreach (char c in text)
{
currentTextBuilder.Append(c);
App.UI.SetText(currentTextBuilder.ToString());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
if (App.UI.shadowText != null)
{
App.UI.shadowText.text = currentTextBuilder.ToString();
}
yield return new WaitForSeconds(defaultTypeSpeed);
}
}
private IEnumerator ProcessCommand(string command)
{
switch (command)
{
case "newline":
currentTextBuilder.Append("\n");
App.UI.AppendText("\n");
break;
case "tab":
currentTextBuilder.Append(" ");
App.UI.AppendText(" ");
break;
case "wait_input":
App.UI.ShowCursor(true);
yield return WaitForInput();
App.UI.ShowCursor(false);
break;
case "wait_selection":
yield return WaitForSelectionInput();
App.VM.SetSelectionVariable(App.UI.userSelectionVariant); //TODO:
App.UI.WipeSelection();
break;
case "wipe":
currentTextBuilder.Clear();
App.UI.ClearText();
break;
case "end":
yield break;
}
}
private IEnumerator WaitForInput()
{
bool inputReceived = false;
while (!inputReceived)
{
if (Input.GetButtonDown("Submit"))
{
inputReceived = true;
}
yield return null;
}
if (currentCommand != null)
{
App.VM.MarkCommandCompleted(currentCommand);
}
}
private IEnumerator WaitForSelectionInput()
{
bool acceptReceived = false;
while (!acceptReceived)
{
if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.UpArrow))
{
//recieve input for
}
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Return))
{
acceptReceived = true;
}
yield return null;
}
if (currentCommand != null)
{
App.VM.MarkCommandCompleted(currentCommand);
}
}
private void SetTextColor(string colorCode)
{
int colorIndex;
if (int.TryParse(colorCode, out colorIndex))
{
string colorTag = $"</color><color={GetColorByIndex(colorIndex)}>";
currentTextBuilder.Append(colorTag);
App.UI.AppendText(colorTag);
}
}
private string GetColorByIndex(int index)
{
switch (index)
{
case 1: return "white";
case 3: return "gray";
case 5: return "#D327F5"; //pink!
case 7: return "#27F5D3"; //blue
case 9: return "#27F56C"; //green
case 11: return "yellow";
case 13: return "#F56C27"; //orange
default: return "white";
}
}
public void SkipTyping()
{
if (isTyping && currentTextCoroutine != null)
{
StopCoroutine(currentTextCoroutine);
isTyping = false;
}
}
public bool IsTyping()
{
return isTyping;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 66658750d4cfa7a4f8a25f35ed8ec08b

146
Assets/Code/TextUtils.cs Normal file
View File

@@ -0,0 +1,146 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
public static class TextUtils
{
public static List<TextToken> ParseText(byte[] textData, int startOffset)
{
List<TextToken> tokens = new List<TextToken>();
int offset = startOffset;
while (offset < textData.Length && textData[offset] != 0)
{
ushort code = ReadUInt16(textData, ref offset);
if ((code & 0x1000) != 0) // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ParseCommand(code, textData, ref offset, tokens);
if (tokens.Last().Value == "end") return tokens; //If end of window
}
else if ((code & 0x2000) != 0) // My russian text
{
offset += 2;
ParseText(code, textData, ref offset, tokens);
}
else
{
// Japanese and other char
offset += 2;
string chr = (code <= 255 && code >= 32) ? "" + (char)code : $"[{code:X4}]";
tokens.Add(new TextToken { Key = "text", Value = chr });
}
}
return tokens;
}
private static void ParseCommand(ushort code, byte[] data, ref int offset, List<TextToken> tokens)
{
ushort commandType = (ushort)(code & 0x00FF);
TextToken token = new TextToken();
offset += 2;
switch (commandType)
{
case 0x1D: // color
token.Key = "color";
token.Value = ReadUInt16(data, ref offset).ToString();
break;
case 0x12: // name
token.Key = "text";
token.Value = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; //TODO: take from global vars
break;
case 0x13: // surname
token.Key = "text";
token.Value = "<22><><EFBFBD><EFBFBD>"; //TODO: take from global vars
break;
case 0x20: // tab
token.Key = "cmd";
token.Value = "tab";
break;
case 0x02: // wipe text & reset coords
token.Key = "cmd";
token.Value = "wipe";
break;
case 0x03: // end
token.Key = "cmd";
token.Value = "end";
break;
case 0x05: // pause
token.Key = "pause";
token.Value = ReadUInt16(data, ref offset).ToString();
break;
case 0x06: // wait input
token.Key = "cmd";
token.Value = "wait_input";
break;
case 0x08: // wait input
token.Key = "user_selection";
token.Value = ReadUInt16(data, ref offset).ToString();
break;
case 0x09: // wait input
token.Key = "cmd";
token.Value = "wait_selection";
break;
case 0x01: // newline
token.Key = "cmd";
token.Value = "newline";
break;
default:
token.Key = "unknown";
token.Value = commandType.ToString("X4");
break;
}
offset += (((code & 0x0F00) >> 8) - 1) * 2; //Original offset after command
tokens.Add(token);
}
private static void ParseText(ushort code, byte[] data, ref int offset, List<TextToken> tokens)
{
int length = code & 0x00FF;
TextToken token = new TextToken
{
Key = "text",
Value = Encoding.GetEncoding(1251).GetString(data, offset, length).Replace("~", "...")
};
offset += length;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2 <20><><EFBFBD><EFBFBD><EFBFBD>
offset += length & 1;
tokens.Add(token);
}
private static ushort ReadUInt16(byte[] data, ref int offset)
{
ushort value = (ushort)(data[offset] | (data[offset + 1] << 8));
return value;
}
}
public class TextToken
{
public string Key { get; set; }
public string Value { get; set; }
public override string ToString() => $"{Key}: {Value}";
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f58cbe5b6f0d96c4686182ef95fd4b44

243
Assets/Code/UIManager.cs Normal file
View File

@@ -0,0 +1,243 @@
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class UIManager : MonoBehaviour
{
[Header("UI Prefabs")]
public GameObject messageWindowPrefab;
[Header("Message Window Settings")]
public float slideDuration = 0.3f;
public AnimationCurve slideCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
public float cursorAnimationSpeed = 1f;
public float cursorAnimationHeight = 10f;
private RectTransform messageWindow;
public TMP_Text messageText;
public TMP_Text shadowText;
private RectTransform cursor;
private RectTransform cursor2;
private Vector2 cursorOriginalPosition;
private bool isMessageWindowVisible = false;
private bool isWaitingForInput = false;
private Coroutine cursorAnimationCoroutine;
private Coroutine slideCoroutine;
public int userSelectionVariant;
private ExecutionContext currentContext;
private bool isInitialized = false;
public void Initialize()
{
if (isInitialized) return;
CreateMessageWindow();
isInitialized = true;
}
private void CreateMessageWindow()
{
if (messageWindowPrefab == null)
{
Debug.LogError("MessageWindow prefab is not assigned!");
return;
}
GameObject messageWindowGO = Instantiate(messageWindowPrefab, transform);
messageWindow = messageWindowGO.GetComponent<RectTransform>();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
messageText = messageWindowGO.transform.Find("TextContainer/MessageText")?.GetComponent<TMP_Text>();
shadowText = messageWindowGO.transform.Find("TextContainer/ShadowText")?.GetComponent<TMP_Text>();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Transform cursorTransform = messageWindowGO.transform.Find("Cursor");
Transform cursor2Transform = messageWindowGO.transform.Find("Cursor2");
if (cursorTransform != null)
{
cursor = cursorTransform.GetComponent<RectTransform>();
cursorOriginalPosition = cursor.anchoredPosition;
cursor.gameObject.SetActive(false);
cursor2 = cursor2Transform.GetComponent<RectTransform>();
cursor2.gameObject.SetActive(false);
}
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
HideMessageWindowImmediate();
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MessageWindow
public void ShowMessageWindow()
{
if (messageWindow != null && !isMessageWindowVisible)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
messageWindow.gameObject.SetActive(true);
if (slideCoroutine != null)
StopCoroutine(slideCoroutine);
slideCoroutine = StartCoroutine(SlideWindow(true));
}
}
public void HideMessageWindow(ExecutionContext ctx)
{
if (messageWindow != null && isMessageWindowVisible)
{
currentContext = ctx;
ctx.IsPaused = true;
if (slideCoroutine != null)
StopCoroutine(slideCoroutine);
slideCoroutine = StartCoroutine(SlideWindow(false));
} else
{
ctx.IsPaused = false;
}
}
private IEnumerator SlideWindow(bool show)
{
float elapsed = 0f;
float startOffset = show ? -messageWindow.rect.height : 0f;
float targetOffset = show ? 0f : -messageWindow.rect.height;
while (elapsed < slideDuration)
{
elapsed += Time.deltaTime;
float t = slideCurve.Evaluate(elapsed / slideDuration);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> offsetMin/offsetMax
float currentOffset = Mathf.Lerp(startOffset, targetOffset, t);
messageWindow.offsetMin = new Vector2(0f, currentOffset);
messageWindow.offsetMax = new Vector2(0f, currentOffset);
yield return null;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float finalOffset = show ? 0f : -messageWindow.rect.height;
messageWindow.offsetMin = new Vector2(0f, finalOffset);
messageWindow.offsetMax = new Vector2(0f, finalOffset);
isMessageWindowVisible = show;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!show)
{
messageWindow.gameObject.SetActive(false);
if (currentContext != null)
{
currentContext.IsPaused = false;
currentContext = null;
}
}
}
public void HideMessageWindowImmediate()
{
if (messageWindow != null)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
messageWindow.offsetMin = new Vector2(0f, messageWindow.rect.height);
messageWindow.offsetMax = new Vector2(0f, messageWindow.rect.height);
isMessageWindowVisible = false;
messageWindow.gameObject.SetActive(false);
if (currentContext != null)
{
currentContext.IsPaused = false;
currentContext = null;
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void SetText(string text)
{
if (messageText != null) messageText.text = text;
if (shadowText != null) shadowText.text = text;
}
public void AppendText(string text)
{
if (messageText != null) messageText.text += text;
if (shadowText != null) shadowText.text += text;
}
public void ClearText()
{
if (messageText != null) messageText.text = "";
if (shadowText != null) shadowText.text = "";
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public void ShowCursor(bool show)
{
if (cursor != null)
{
cursor.gameObject.SetActive(show);
cursor2.gameObject.SetActive(show);
isWaitingForInput = show;
if (show && cursorAnimationCoroutine == null)
{
cursorAnimationCoroutine = StartCoroutine(AnimateCursor());
}
else if (!show && cursorAnimationCoroutine != null)
{
StopCoroutine(cursorAnimationCoroutine);
cursorAnimationCoroutine = null;
cursor.anchoredPosition = cursorOriginalPosition;
cursor2.anchoredPosition = cursorOriginalPosition;
}
}
}
private IEnumerator AnimateCursor()
{
while (isWaitingForInput)
{
float yOffset = Mathf.Sin(Time.time * cursorAnimationSpeed) * cursorAnimationHeight;
float yOffset2 = Mathf.Sin((Time.time - 0.1f) * cursorAnimationSpeed) * cursorAnimationHeight;
cursor.anchoredPosition = cursorOriginalPosition + new Vector2(0, yOffset);
cursor2.anchoredPosition = cursorOriginalPosition + new Vector2(0, yOffset2);
yield return null;
}
}
// user dialog selection
public void ShowSelection(List<string> variants)
{
switch (variants.Count)
{
case 2:
case 3:
case 4:
case 5:
case 6:
break;
}
}
public void WipeSelection()
{
}
public bool IsMessageWindowVisible => isMessageWindowVisible;
public bool IsWaitingForInput => isWaitingForInput;
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 33033c46e8e99f845bfd7afb98f8a71c

View File

@@ -0,0 +1,24 @@
using System.Collections;
using UnityEngine;
public class VideoPlayer : MonoBehaviour
{
public void PlayVideo(int videoId, ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Debug.Log($"Playing video: {videoId}");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> async <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StartCoroutine(PlayVideoCoroutine(cmd));
}
private IEnumerator PlayVideoCoroutine(ScriptCommand cmd)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
yield return new WaitForSeconds(2f);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
App.VM.MarkCommandCompleted(cmd);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 93e0fc90cdd3b3a4f99ad2eb93de5f64

8
Assets/Fonts.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 219b32e29ed00354aad260f75926ef19
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Fonts/Source.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2526186d4267cff45b03beb2a5e968c0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Fonts/TMP.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e9aacb1a9732bae4a80a3288d9cab377
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Models.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f48555438aa9667429171005b77c3f8c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Models/Chars.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5b464426fe4ef8948a52f98e62e293fe
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 25aac9c9eb897404088229bfc4a75357
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: ea316cff1e0b78845b461f6f822faa8e
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 9e17ae641e703114089194c527471417
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: a83af60c03b62584886086a9c242dcf3
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: a77ed73612b57aa4085fd7790401d293
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 1f93296091a6d6a4a980fe1c47118c93
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 457029b5c9270a7459dc9fc26025442d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 9623d482ed9429140ab07535d94494ff
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 7dec4280d6fe1d649884cfbe79c99c2d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 4b8437dc1b88d02418ff8aa499c3793e
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 1259b25df6c79324c93704df67dc33c4
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 01363176e318849419653ad97ef2aceb
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 261908b624fa8b54ba2a5461734bbb37
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 7bf0b6a078077f14cb00da06dd9fd0c1
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,110 @@
fileFormatVersion: 2
guid: 7b746ee1a35dcf8428400c6c7d48957c
ModelImporter:
serializedVersion: 24200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Prefabs.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 53bcbff827661704abd9005678599377
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Prefabs/UI.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 897e0ddf7b1f3e24e922de5408520ff2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e57650a46dd5368409d1337a68cc6153
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Resources.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 70ee986bccd926945b99f4438d36200a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fce989f26a348a040ba5d574221849da
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Scenes.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c747bff554eba5b4dbee45c6c7fb54a3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

641
Assets/Scenes/MainApp.unity Normal file
View File

@@ -0,0 +1,641 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 705507994}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &234746648
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 234746650}
- component: {fileID: 234746649}
m_Layer: 0
m_Name: App
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &234746649
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 234746648}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3db5aef391bb2874c8afac0550553818, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::App
startScript: 475
--- !u!4 &234746650
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 234746648}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 705507995}
- component: {fileID: 705507994}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &705507994
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_Enabled: 1
serializedVersion: 11
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &705507995
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &963194225
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 963194228}
- component: {fileID: 963194227}
- component: {fileID: 963194226}
- component: {fileID: 963194229}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &963194226
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
--- !u!20 &963194227
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 2000
field of view: 70
orthographic: 0
orthographic size: 20
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &963194228
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
serializedVersion: 2
m_LocalRotation: {x: -0.1648186, y: 0.5728301, z: -0.118824564, w: -0.7940915}
m_LocalPosition: {x: 71.3, y: 10, z: -3.85}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 40.1, y: 320.22, z: 0}
--- !u!114 &963194229
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c7a97f909cd8e0d4899d3988adde47a0, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::CameraController
cameraHeight: 1000
cameraDistance: 1000
rotationSpeed: 5
cameraTargetPoint: {x: 0, y: 0, z: 0}
sourceX: 0
sourceY: 0
sourceZ: 0
currentCameraRotation: 0
--- !u!1 &1706248201
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1706248206}
- component: {fileID: 1706248205}
- component: {fileID: 1706248204}
- component: {fileID: 1706248203}
- component: {fileID: 1706248202}
m_Layer: 5
m_Name: UIManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1706248202
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1706248201}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 33033c46e8e99f845bfd7afb98f8a71c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::UIManager
messageWindowPrefab: {fileID: 2822395652576896841, guid: e57650a46dd5368409d1337a68cc6153, type: 3}
slideDuration: 0.3
slideCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
- serializedVersion: 3
time: 1
value: 1
inSlope: 2
outSlope: 2
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
cursorAnimationSpeed: 5
cursorAnimationHeight: 10
messageText: {fileID: 0}
shadowText: {fileID: 0}
userSelectionVariant: 0
--- !u!114 &1706248203
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1706248201}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &1706248204
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1706248201}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &1706248205
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1706248201}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &1706248206
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1706248201}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &2086735764
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2086735768}
- component: {fileID: 2086735767}
- component: {fileID: 2086735766}
- component: {fileID: 2086735765}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &2086735765
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086735764}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &2086735766
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086735764}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &2086735767
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086735764}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2086735768
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086735764}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 234746650}
- {fileID: 1706248206}
- {fileID: 963194228}
- {fileID: 705507995}
- {fileID: 2086735768}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4cadfe5540b490945af6c8b705d326ce
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ddc971b1d6187b64c8c395851162971e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 52ef54153b6d0b04a94c261ea48035a2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 77fbf63e2e1c6c84b976ebdd3f8c03bd
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1825a1102e70ac04fa9d9c34ae50e247
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fb0f7816c1d67564083499463a66d9d4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f58a0aacbd0511f4093fe458ccde19a2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8f989cad34b23c443b67e48e7ca85143
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e8c68dbc53ace9d4ebaf0d9edaf12b4d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 652ae68536c75ee43b416bbe4ab9e3f4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9eb0eb7fc6d2def41845f4cf24d1d6f7
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7baa847ff0755e44ca0e3f220068ffcb
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5faaef2acc9bd434eb484cc638efd929
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3f4684a9b6618804eab083809b210c93
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More