Spider bomb in FSM

This commit is contained in:
Maddo 2025-03-08 11:33:26 +01:00
commit 4913eba12e
20 changed files with 300 additions and 48 deletions

View file

@ -1,11 +1,13 @@
[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://dwxn7f1ue0m4s"] [gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://dwxn7f1ue0m4s"]
[ext_resource type="PackedScene" uid="uid://64ax2lj77sr1" path="res://Scenes/Weapons/Bullets/spider_bomb_bullet.tscn" id="1_8gj5r"] [ext_resource type="PackedScene" uid="uid://64ax2lj77sr1" path="res://Scenes/Weapons/Bullets/spider_bomb_bullet.tscn" id="1_8gj5r"]
[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="1_f2i0g"] [ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="1_f2i0g"]
[ext_resource type="PackedScene" uid="uid://1lowv5ce2poq" path="res://Scenes/Weapons/Bullets/Autoclearing_Explosion_Bullet.tscn" id="2_f3yha"]
[resource] [resource]
script = ExtResource("1_f2i0g") script = ExtResource("1_f2i0g")
BulletScene = ExtResource("1_8gj5r") BulletScene = ExtResource("1_8gj5r")
DestructionParticlesScene = ExtResource("2_f3yha")
BulletSpeed = 40.0 BulletSpeed = 40.0
Direction = Vector2(1, 0) Direction = Vector2(1, 0)
BulletDamage = 0.0 BulletDamage = 0.0

View file

@ -1,25 +1,12 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=4 format=3 uid="uid://m7obu15t73df"] [gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://m7obu15t73df"]
[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="1_m8p4s"] [ext_resource type="Resource" uid="uid://dwxn7f1ue0m4s" path="res://Resources/Bullets/Spider_Bomb_Bullet.tres" id="1_m8p4s"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="1_wdsus"] [ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="1_wdsus"]
[sub_resource type="Resource" id="Resource_hoooo"]
script = ExtResource("1_m8p4s")
BulletSpeed = 100.0
Direction = Vector2(1, 0)
BulletDamage = 1.0
LifeTime = 10.0
DestroyOnCollision = true
Owner = 0
DamageType = 0
Controllable = false
TimeModifiers = null
metadata/_custom_type_script = "uid://dslyrfcej3g2n"
[resource] [resource]
script = ExtResource("1_wdsus") script = ExtResource("1_wdsus")
Name = "Spider Bomb" Name = "Spider Bomb"
BulletData = SubResource("Resource_hoooo") BulletData = ExtResource("1_m8p4s")
RateOfFire = 0.4 RateOfFire = 0.4
BulletCapacity = 20 BulletCapacity = 20
ReloadTime = 1.0 ReloadTime = 1.0
@ -28,7 +15,7 @@ InfiniteAmmo = true
BulletsPerShot = 1 BulletsPerShot = 1
SpreadAngle = 0.0 SpreadAngle = 0.0
RandomSpread = 0.0 RandomSpread = 0.0
ItemKey = "" ItemKey = "SPIDER_BOMB"
AmmoKey = "" AmmoKey = ""
_rotationOffset = 0.0 _rotationOffset = 0.0
metadata/_custom_type_script = "uid://b6fmrnipv88bk" metadata/_custom_type_script = "uid://b6fmrnipv88bk"

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=42 format=3 uid="uid://c4pr2707hbeph"] [gd_scene load_steps=43 format=3 uid="uid://c4pr2707hbeph"]
[ext_resource type="Script" uid="uid://d2ubk5gucny6s" path="res://Scripts/Components/FSM/PlayerFSMProxy.cs" id="1_g3wua"] [ext_resource type="Script" uid="uid://d2ubk5gucny6s" path="res://Scripts/Components/FSM/PlayerFSMProxy.cs" id="1_g3wua"]
[ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"] [ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"]
@ -28,6 +28,7 @@
[ext_resource type="PackedScene" uid="uid://chkpk7erlqajg" path="res://Scenes/Selector.tscn" id="23_5tmtw"] [ext_resource type="PackedScene" uid="uid://chkpk7erlqajg" path="res://Scenes/Selector.tscn" id="23_5tmtw"]
[ext_resource type="AudioStream" uid="uid://myr6n2c1u503" path="res://SFX/581602__samsterbirdies__beep-error.mp3" id="24_5tmtw"] [ext_resource type="AudioStream" uid="uid://myr6n2c1u503" path="res://SFX/581602__samsterbirdies__beep-error.mp3" id="24_5tmtw"]
[ext_resource type="Script" uid="uid://cem7a1agaqtrt" path="res://Scenes/InteractionController.cs" id="27_vwjki"] [ext_resource type="Script" uid="uid://cem7a1agaqtrt" path="res://Scenes/InteractionController.cs" id="27_vwjki"]
[ext_resource type="Script" uid="uid://d0bebi2vn171l" path="res://Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs" id="29_m323t"]
[sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"] [sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"]
radius = 5.0 radius = 5.0
@ -137,7 +138,7 @@ _inputProvider = NodePath("../../InputProvider")
_damageReceiver = NodePath("../../DamageReceiver") _damageReceiver = NodePath("../../DamageReceiver")
_activationProvider = NodePath("../../InteractionProvider") _activationProvider = NodePath("../../InteractionProvider")
_interactionController = NodePath("../../InteractionController") _interactionController = NodePath("../../InteractionController")
_moduleNodes = [NodePath("../../InteractionController")] _moduleNodes = [NodePath("../../InteractionController"), NodePath("../../ItemUser")]
[node name="Cutscene" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider")] [node name="Cutscene" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider")]
script = ExtResource("4_22ff8") script = ExtResource("4_22ff8")
@ -264,6 +265,9 @@ Shield = NodePath("../DamageReceiver/ShieldProvider")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"] [node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"]
shape = SubResource("CircleShape2D_g3wua") shape = SubResource("CircleShape2D_g3wua")
[node name="ItemUser" type="Node2D" parent="."]
script = ExtResource("29_m323t")
[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] [connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
[connection signal="area_entered" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_entered"] [connection signal="area_entered" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_entered"]
[connection signal="area_exited" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_exited"] [connection signal="area_exited" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_exited"]

View file

@ -37,6 +37,16 @@ public partial class InteractionController : PlayerArea2DModule
{ {
} }
public override void EnterState(PlayerState state)
{
}
public override void ExitState(PlayerState state)
{
}
public override void Init(IStateMachine<PlayerState, CharacterBody2D> machine) public override void Init(IStateMachine<PlayerState, CharacterBody2D> machine)
{ {
base.Init(machine); base.Init(machine);

View file

@ -1,9 +1,8 @@
[gd_scene load_steps=8 format=3 uid="uid://cvctgw8eo2f7e"] [gd_scene load_steps=7 format=3 uid="uid://cvctgw8eo2f7e"]
[ext_resource type="Script" uid="uid://b3h7b30kerf60" path="res://Scripts/Interactables/ItemPickup.cs" id="1_bdsed"] [ext_resource type="Script" uid="uid://b3h7b30kerf60" path="res://Scripts/Interactables/ItemPickup.cs" id="1_bdsed"]
[ext_resource type="Resource" uid="uid://dhbltvgsa3g88" path="res://Resources/Items/Spider_Bomb_Pickup.tres" id="2_bdsed"] [ext_resource type="Resource" uid="uid://dhbltvgsa3g88" path="res://Resources/Items/Spider_Bomb_Pickup.tres" id="2_bdsed"]
[ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="2_fyf8h"] [ext_resource type="Texture2D" uid="uid://r2h77ktff10m" path="res://Sprites/Bullets/Snowball.png" id="3_bdsed"]
[ext_resource type="Texture2D" uid="uid://huo14jdekj6n" path="res://Sprites/Bullets/spiderbomb.png" id="3_bdsed"]
[sub_resource type="CircleShape2D" id="CircleShape2D_6vv2s"] [sub_resource type="CircleShape2D" id="CircleShape2D_6vv2s"]
@ -26,7 +25,7 @@ animations = [{
collision_layer = 4 collision_layer = 4
collision_mask = 2 collision_mask = 2
script = ExtResource("1_bdsed") script = ExtResource("1_bdsed")
LootTable = Array[ExtResource("2_fyf8h")]([ExtResource("2_bdsed")]) LootTable = [ExtResource("2_bdsed")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_6vv2s") shape = SubResource("CircleShape2D_6vv2s")

View file

@ -1,34 +1,57 @@
[gd_scene load_steps=8 format=3 uid="uid://64ax2lj77sr1"] [gd_scene load_steps=12 format=3 uid="uid://64ax2lj77sr1"]
[ext_resource type="Script" uid="uid://dsa4b75hdig8p" path="res://Scripts/Bullet.cs" id="1_nrcj1"] [ext_resource type="Script" uid="uid://dsa4b75hdig8p" path="res://Scripts/Bullet.cs" id="1_nrcj1"]
[ext_resource type="Texture2D" uid="uid://huo14jdekj6n" path="res://Sprites/Bullets/spiderbomb.png" id="2_nrcj1"] [ext_resource type="Texture2D" uid="uid://r2h77ktff10m" path="res://Sprites/Bullets/Snowball.png" id="2_lhjit"]
[ext_resource type="Texture2D" uid="uid://cf2855sd3hqty" path="res://Sprites/Actors/Aiming_Reticule_Small.png" id="3_lhjit"]
[sub_resource type="CircleShape2D" id="CircleShape2D_jxptd"] [sub_resource type="CircleShape2D" id="CircleShape2D_jxptd"]
radius = 2.23607 radius = 2.23607
[sub_resource type="AtlasTexture" id="AtlasTexture_lhjit"] [sub_resource type="AtlasTexture" id="AtlasTexture_ibnjy"]
atlas = ExtResource("2_nrcj1") atlas = ExtResource("2_lhjit")
region = Rect2(0, 0, 16, 16) region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_ibnjy"] [sub_resource type="AtlasTexture" id="AtlasTexture_w1jch"]
atlas = ExtResource("2_nrcj1") atlas = ExtResource("2_lhjit")
region = Rect2(16, 0, 16, 16) region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_w1jch"] [sub_resource type="AtlasTexture" id="AtlasTexture_o2e4e"]
atlas = ExtResource("2_nrcj1") atlas = ExtResource("2_lhjit")
region = Rect2(32, 0, 16, 16) region = Rect2(32, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_co0jb"] [sub_resource type="AtlasTexture" id="AtlasTexture_ea6l6"]
atlas = ExtResource("2_lhjit")
region = Rect2(48, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_f4bqv"]
animations = [{ animations = [{
"frames": [{ "frames": [{
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_lhjit")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ibnjy") "texture": SubResource("AtlasTexture_ibnjy")
}, { }, {
"duration": 1.0, "duration": 1.0,
"texture": SubResource("AtlasTexture_w1jch") "texture": SubResource("AtlasTexture_w1jch")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_o2e4e")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ea6l6")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="AtlasTexture" id="AtlasTexture_co0jb"]
atlas = ExtResource("3_lhjit")
region = Rect2(0, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_o2e4e"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_co0jb")
}], }],
"loop": true, "loop": true,
"name": &"default", "name": &"default",
@ -48,10 +71,14 @@ shape = SubResource("CircleShape2D_jxptd")
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] [node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
sprite_frames = SubResource("SpriteFrames_co0jb") sprite_frames = SubResource("SpriteFrames_f4bqv")
autoplay = "default" autoplay = "default"
frame = 1 frame = 3
frame_progress = 0.375255 frame_progress = 0.54531
[node name="AnimatedSprite2D2" type="AnimatedSprite2D" parent="."]
position = Vector2(18.545, 0)
sprite_frames = SubResource("SpriteFrames_o2e4e")
[connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="area_entered" from="." to="." method="_on_area_entered"]
[connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="body_entered" from="." to="." method="_on_body_entered"]

View file

@ -0,0 +1,6 @@
namespace Cirno.Scripts.Components.Actors;
public class RotationCrosshairModule
{
}

View file

@ -27,11 +27,9 @@ public abstract partial class BaseState<TKey, TType> : Node2D, IState<TKey, TTyp
foreach (var node in _moduleNodes) foreach (var node in _moduleNodes)
{ {
if (node is IModule<TKey, TType> module) if (node is not IModule<TKey, TType> module) continue;
{ _modules.Add(module);
_modules.Add(module); module.Init(_stateMachine);
module.Init(_stateMachine);
}
} }
} }
@ -40,9 +38,21 @@ public abstract partial class BaseState<TKey, TType> : Node2D, IState<TKey, TTyp
_stateMachine.SetState(newState); _stateMachine.SetState(newState);
} }
public abstract void EnterState(); public virtual void EnterState()
{
foreach (var module in _modules)
{
module.EnterState(StateId);
}
}
public abstract void ExitState(); public virtual void ExitState()
{
foreach (var module in _modules)
{
module.ExitState(StateId);
}
}
public virtual void ProcessState(double delta) public virtual void ProcessState(double delta)
{ {

View file

@ -6,6 +6,8 @@ public interface IModule<TKey, TType>
where TKey : notnull where TKey : notnull
where TType : Node where TType : Node
{ {
public void EnterState(TKey state);
public void ExitState(TKey state);
public void Init(IStateMachine<TKey, TType> machine); public void Init(IStateMachine<TKey, TType> machine);
public void Process(double delta); public void Process(double delta);
public void PhysicsProcess(double delta); public void PhysicsProcess(double delta);

View file

@ -6,6 +6,8 @@ public abstract partial class ModuleBase<TKey, TType> : Node2D, IModule<TKey, TT
where TKey : notnull where TKey : notnull
where TType : Node where TType : Node
{ {
public abstract void EnterState(TKey state);
public abstract void ExitState(TKey state);
public abstract void Init(IStateMachine<TKey, TType> machine); public abstract void Init(IStateMachine<TKey, TType> machine);
public abstract void Process(double delta); public abstract void Process(double delta);
public abstract void PhysicsProcess(double delta); public abstract void PhysicsProcess(double delta);

View file

@ -79,6 +79,7 @@ public partial class Active : PlayerStateBase
public override void EnterState() public override void EnterState()
{ {
base.EnterState();
// enable sprite // enable sprite
// enable crosshair // enable crosshair
_crosshairProvider.Show(); _crosshairProvider.Show();
@ -90,6 +91,7 @@ public partial class Active : PlayerStateBase
public override void ExitState() public override void ExitState()
{ {
base.ExitState();
_animationProvider.SetAnimation(Vector2.Zero); _animationProvider.SetAnimation(Vector2.Zero);
_crosshairProvider.Hide(); _crosshairProvider.Hide();
_hitboxSpriteProvider.Hide(); _hitboxSpriteProvider.Hide();

View file

@ -0,0 +1,110 @@
using System;
using Cirno.Scripts.Resources;
using Godot;
namespace Cirno.Scripts.Components.FSM.Player;
public partial class PlayerFSMItemUseModule : ModuleBase<PlayerState, CharacterBody2D>
{
public bool Enabled { get; set; } = false;
public override void EnterState(PlayerState state)
{
GD.Print("EnterState");
Enabled = true;
}
public override void ExitState(PlayerState state)
{
GD.Print("exitState");
Enabled = false;
}
private IStateMachine<PlayerState, CharacterBody2D> _machine;
public override void Init(IStateMachine<PlayerState, CharacterBody2D> machine)
{
InventoryManager.Instance.ItemUsed += this.UseItem;
_machine = machine;
}
private void UseItem(LootItem item, int totalcount)
{
if (!Enabled) return;
GD.Print("Used spiderbomb in player");
switch (item.Item)
{
case ItemTypes.KeycardRed:
break;
case ItemTypes.KeycardBlue:
break;
case ItemTypes.KeycardGreen:
break;
case ItemTypes.Ammo:
break;
case ItemTypes.Medkit:
break;
case ItemTypes.FrogBomb:
SpawnSpiderBomb(item);
break;
case ItemTypes.Bomb:
break;
case ItemTypes.Mine:
break;
case ItemTypes.Battery:
break;
case ItemTypes.Weapon:
break;
case ItemTypes.Power:
break;
case ItemTypes.Points:
break;
case ItemTypes.Credits:
break;
case ItemTypes.KeyItem:
break;
}
}
private void SpawnSpiderBomb(LootItem item)
{
//var bullet = item.WeaponData.BulletData.BulletScene.Instantiate<Bullet>();
//bullet.Initialize(item.WeaponData.BulletData.MakeBullet(this.GlobalPosition, 1,0, 0), GameManager.Instance);
//InventoryManager.Instance.RemoveItem(item.ItemKey, 1);
// emit projectile
var bullet = this.CreateChildOf<Bullet>(GameManager.Instance.BulletsContainer, item.WeaponData.BulletData.BulletScene, this.GlobalPosition);
var bulletData = item.WeaponData.MakeBullet(this.GlobalPosition);
bullet.Initialize(bulletData, GameManager.Instance);
//bullet.SetDirection(_facingDirection);
bullet.Speed = item.WeaponData.BulletData.BulletSpeed;
_machine.SetState(PlayerState.Controlling);
//RequestMovementDisable(true);
// set camera
GameManager.Instance.CameraTargetObject(bullet);
// set event destroy
bullet.OnDestroy += () =>
{
GameManager.Instance.CameraTargetPlayer();
_machine.SetState(PlayerState.Active);
//RequestMovementDisable(false);
};
}
public override void Process(double delta)
{
}
public override void PhysicsProcess(double delta)
{
}
}

View file

@ -0,0 +1 @@
uid://d0bebi2vn171l

View file

@ -7,8 +7,11 @@ public abstract partial class PlayerArea2DModule : Area2D, IModule<PlayerState,
public IStateMachine<PlayerState, CharacterBody2D> StateMachine { get; private set; } public IStateMachine<PlayerState, CharacterBody2D> StateMachine { get; private set; }
public CharacterBody2D CharacterBody => StateMachine.MainObject; public CharacterBody2D CharacterBody => StateMachine.MainObject;
public abstract void EnterState(PlayerState state);
public abstract void ExitState(PlayerState state);
public virtual void Init(IStateMachine<PlayerState, CharacterBody2D> machine) public virtual void Init(IStateMachine<PlayerState, CharacterBody2D> machine)
{ {
StateMachine = machine; StateMachine = machine;

View file

@ -4,6 +4,16 @@ namespace Cirno.Scripts.Components.FSM;
public partial class TestModule : ModuleBase<PlayerState, CharacterBody2D> public partial class TestModule : ModuleBase<PlayerState, CharacterBody2D>
{ {
public override void EnterState(PlayerState state)
{
}
public override void ExitState(PlayerState state)
{
}
public override void Init(IStateMachine<PlayerState, CharacterBody2D> machine) public override void Init(IStateMachine<PlayerState, CharacterBody2D> machine)
{ {
GD.Print($"Module Init {Name}"); GD.Print($"Module Init {Name}");

BIN
Sprites/Actors/Aiming_Reticule_Small.aseprite (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Sprites/Actors/Aiming_Reticule_Small.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cf2855sd3hqty"
path="res://.godot/imported/Aiming_Reticule_Small.png-3a64498ab624b147ab0d0983d029730f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Sprites/Actors/Aiming_Reticule_Small.png"
dest_files=["res://.godot/imported/Aiming_Reticule_Small.png-3a64498ab624b147ab0d0983d029730f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
Sprites/Bullets/Snowball.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://r2h77ktff10m"
path="res://.godot/imported/Snowball.png-ecfb9a89abe8b58c77ee9696264e45cf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Sprites/Bullets/Snowball.png"
dest_files=["res://.godot/imported/Snowball.png-ecfb9a89abe8b58c77ee9696264e45cf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1