init new repos
8
.gitattributes
vendored
Normal 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
@@ -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
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"components": [
|
||||||
|
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||||
|
]
|
||||||
|
}
|
||||||
8
Assets/Code.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6dc2cacd9d5393346b0edde0d2267ef2
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
111
Assets/Code/App.cs
Normal 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
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3db5aef391bb2874c8afac0550553818
|
||||||
131
Assets/Code/CameraController.cs
Normal 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()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/CameraController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c7a97f909cd8e0d4899d3988adde47a0
|
||||||
106
Assets/Code/CharacterController.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/CharacterController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 62142119356b539449e0c93c84a50d92
|
||||||
161
Assets/Code/ControlsController.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/ControlsController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ed07e269a7d0d1242bc94ddac6f34186
|
||||||
43
Assets/Code/GameState.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/GameState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7417d9fa7200ff242a416ac128c9abeb
|
||||||
84
Assets/Code/ResourceManager.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/ResourceManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5ee0eb2f342e82e40a72aa889274cb53
|
||||||
29
Assets/Code/SceneLoader.cs
Normal 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>
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/SceneLoader.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a652356dbc9c6bc4ba82116ecd6c13c3
|
||||||
148
Assets/Code/ScriptLoader.cs
Normal 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
|
||||||
|
}
|
||||||
2
Assets/Code/ScriptLoader.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 672baa445921734488f3285eb2525055
|
||||||
807
Assets/Code/ScriptVM.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/ScriptVM.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 86f75a68871eb8b4ab7a2df4c08a2841
|
||||||
227
Assets/Code/TextManager.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/TextManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 66658750d4cfa7a4f8a25f35ed8ec08b
|
||||||
146
Assets/Code/TextUtils.cs
Normal 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}";
|
||||||
|
}
|
||||||
2
Assets/Code/TextUtils.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f58cbe5b6f0d96c4686182ef95fd4b44
|
||||||
243
Assets/Code/UIManager.cs
Normal 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;
|
||||||
|
}
|
||||||
2
Assets/Code/UIManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 33033c46e8e99f845bfd7afb98f8a71c
|
||||||
24
Assets/Code/VideoPlayer.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Code/VideoPlayer.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 93e0fc90cdd3b3a4f99ad2eb93de5f64
|
||||||
8
Assets/Fonts.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 219b32e29ed00354aad260f75926ef19
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Fonts/Source.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2526186d4267cff45b03beb2a5e968c0
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Fonts/TMP.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e9aacb1a9732bae4a80a3288d9cab377
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Models.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f48555438aa9667429171005b77c3f8c
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Models/Chars.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5b464426fe4ef8948a52f98e62e293fe
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Models/Chars/Risa.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 25aac9c9eb897404088229bfc4a75357
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_00.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
117
Assets/Models/Chars/Risa/texture_00.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_01.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
117
Assets/Models/Chars/Risa/texture_01.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_02.png
Normal file
|
After Width: | Height: | Size: 152 B |
117
Assets/Models/Chars/Risa/texture_02.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_03.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
117
Assets/Models/Chars/Risa/texture_03.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_04.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
117
Assets/Models/Chars/Risa/texture_04.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_05.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
117
Assets/Models/Chars/Risa/texture_05.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_06.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
117
Assets/Models/Chars/Risa/texture_06.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_07.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
117
Assets/Models/Chars/Risa/texture_07.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_08.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
117
Assets/Models/Chars/Risa/texture_08.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_09.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
117
Assets/Models/Chars/Risa/texture_09.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_10.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
117
Assets/Models/Chars/Risa/texture_10.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_11.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
117
Assets/Models/Chars/Risa/texture_11.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/texture_12.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
117
Assets/Models/Chars/Risa/texture_12.png.meta
Normal 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:
|
||||||
BIN
Assets/Models/Chars/Risa/tiaki.fbx
Normal file
110
Assets/Models/Chars/Risa/tiaki.fbx.meta
Normal 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
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 53bcbff827661704abd9005678599377
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Prefabs/UI.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 897e0ddf7b1f3e24e922de5408520ff2
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
1236
Assets/Prefabs/UI/MessageWindow.prefab
Normal file
7
Assets/Prefabs/UI/MessageWindow.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e57650a46dd5368409d1337a68cc6153
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Resources.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 70ee986bccd926945b99f4438d36200a
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Resources/scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fce989f26a348a040ba5d574221849da
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Scenes.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c747bff554eba5b4dbee45c6c7fb54a3
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
641
Assets/Scenes/MainApp.unity
Normal 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}
|
||||||
7
Assets/Scenes/MainApp.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9fc0d4010bbf28b4594072e72b8655ab
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/StreamingAssets.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4cadfe5540b490945af6c8b705d326ce
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/StreamingAssets/Events.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ddc971b1d6187b64c8c395851162971e
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/181.TRNSL
Normal file
7
Assets/StreamingAssets/Events/181.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 52ef54153b6d0b04a94c261ea48035a2
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/182.TRNSL
Normal file
7
Assets/StreamingAssets/Events/182.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 77fbf63e2e1c6c84b976ebdd3f8c03bd
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/183.TRNSL
Normal file
7
Assets/StreamingAssets/Events/183.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1825a1102e70ac04fa9d9c34ae50e247
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/184.TRNSL
Normal file
7
Assets/StreamingAssets/Events/184.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fb0f7816c1d67564083499463a66d9d4
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/185.TRNSL
Normal file
7
Assets/StreamingAssets/Events/185.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f58a0aacbd0511f4093fe458ccde19a2
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/186.TRNSL
Normal file
7
Assets/StreamingAssets/Events/186.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8f989cad34b23c443b67e48e7ca85143
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/187.TRNSL
Normal file
7
Assets/StreamingAssets/Events/187.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e8c68dbc53ace9d4ebaf0d9edaf12b4d
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/188.TRNSL
Normal file
7
Assets/StreamingAssets/Events/188.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 652ae68536c75ee43b416bbe4ab9e3f4
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/189.TRNSL
Normal file
7
Assets/StreamingAssets/Events/189.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9eb0eb7fc6d2def41845f4cf24d1d6f7
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/190.TRNSL
Normal file
7
Assets/StreamingAssets/Events/190.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7baa847ff0755e44ca0e3f220068ffcb
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/191.TRNSL
Normal file
7
Assets/StreamingAssets/Events/191.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5faaef2acc9bd434eb484cc638efd929
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/StreamingAssets/Events/192.TRNSL
Normal file
7
Assets/StreamingAssets/Events/192.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3f4684a9b6618804eab083809b210c93
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||