ProjectRR — нативный прототип на ассетах ProjectR

- Все 189 скелетов Spine сконвертированы в нативные Godot Skeleton2D (.tscn), без Spine в рантайме
- Меню + сцены: подземелье (карта комнат), просмотр спрайтов, нативные анимации
- Кастомизация цвета (кожа/волосы/глаза) через шейдер
- Вытащенные текстуры/UI/шрифты + нарезка спрайтов из атласа
- Датасет комнат для LoRA, офлайн-инструменты конвертации в tools/

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Leonid Pershin
2026-08-03 16:29:21 +03:00
co-authored by Claude Opus 4.8
commit 04cf5f90b0
2193 changed files with 360105 additions and 0 deletions
@@ -0,0 +1,17 @@
[
{
"Figure": ["OrcArmor"],
"State": ["Icon"],
"Spine": [
{
"Path": "%spine\orcarmor_icon",
"Animation": ["animation"],
"Loop": true,
},
],
},
]
@@ -0,0 +1,115 @@
[
{
"Figure": ["Orc", "Elf"],
"State": ["Patrol", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["walk_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Chase", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["walk_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Attack", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["attack_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Leap", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["attack_1"],
"Loop": false,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Knockback", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["knockback_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Stun", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["stun_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Wait", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["idle_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Elf"],
"State": ["Map", "Map"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["portrait_0"],
"Loop": false,
},
],
},
]
@@ -0,0 +1,113 @@
[
{
"Figure": ["Orc", "Human"],
"State": ["Patrol", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["walk_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Chase", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["walk_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Attack", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["attack_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Leap", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["attack_1"],
"Loop": false,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Knockback", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["knockback_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Stun", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["stun_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Wait", "Combination"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["idle_0"],
"Loop": true,
"IsCombat": true,
},
],
},
{
"Figure": ["Orc", "Human"],
"State": ["Map", "Map"],
"Spine": [
{
"Path": "%spine\orcarmor_combat",
"Animation": ["portrait_0"],
"Loop": false,
},
],
},
]
@@ -0,0 +1,32 @@
[
{
"Group": "OrcArmor",
"Name": "#OrcArmor",
"Text": "#OrcArmorText",
"Script": "CombinationScripts.OrcArmor",
"List": [
{
"Figure": ["Orc", "Human"],
"Size": [4, 1],
},
{
"Figure": ["Orc", "Elf"],
"Size": [4, 1],
},
],
},
]
+54
View File
@@ -0,0 +1,54 @@
{
"Id": "OrcArmor",
"Name": "#OrcArmor",
"Figure": "Orc",
"Unit": "Orc",
"Type": "Monster",
"Gender": "Male",
"Race": "Orc",
"SexTime": [45],
"BabyGrowthTime": [60],
"Health": [45],
"Defense": [4],
"Damage": [6],
"CriticalHtiChance": [20],
"CriticalHtiMultiplier": [165],
"KnockbackStability": [25],
"KnockbackDistance": [70],
"WalkingSpeed": [250],
"WalkingSpeedMultiplier": [1],
"AttackSpeedMultiplier": [1],
"Size": [2, 0.5],
"Deployment": [4, 1],
"Script": "CharacterScripts.OrcArmor",
"ScriptCombat1": "CharacterBehaviourScripts.Hold_Orc",
"ScriptCombat2": "CharacterBehaviourScripts.Forward_Orc",
"ScriptCombat3": "CharacterBehaviourScripts.Forward_Orc",
"Skill": [
{
"Hide": true,
"State": "Attack",
"HitType": "Melee",
"Range": [3],
},
{
"Name": "#SkillNameOrc",
"Text": "#SkillTextOrc",
"State": "Leap",
"HitType": "Melee",
"Range": [13],
"AreaRange": [2, 0.5],
"Multiplier": [150],
"Cooldown": [15],
},
],
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,38 @@
[gd_scene format=3]
[ext_resource type="Texture2D" path="res://characters/orc_human/spine/orcarmor_icon.png" id="1_dgbdv"]
[sub_resource type="Animation" id="Animation_muf2w"]
length = 0.001
loop_mode = 1
[sub_resource type="AnimationLibrary" id="AnimationLibrary_flobb"]
_data = {
&"animation": SubResource("Animation_muf2w")
}
[node name="Native" type="Node2D" unique_id=406597183]
[node name="SpineRoot" type="Node2D" parent="." unique_id=415606888]
position = Vector2(640, 360)
scale = Vector2(4.8403363, -4.8403363)
[node name="Skeleton2D" type="Skeleton2D" parent="SpineRoot" unique_id=970529992]
[node name="root" type="Bone2D" parent="SpineRoot/Skeleton2D" unique_id=1262256176]
rest = Transform2D(1, 0, 0, 1, 0, 0)
auto_calculate_length_and_angle = false
length = 0.0
bone_angle = 0.0
[node name="Icon" type="Polygon2D" parent="SpineRoot/Skeleton2D" unique_id=280913839]
texture = ExtResource("1_dgbdv")
skeleton = NodePath("..")
polygon = PackedVector2Array(0.9403574, 59.5, 57.6203, 39.13388, 58.5, 7.08941, 58.5, -4.72287, 3.5159426, -59.5, -2.8145773, -59.5, -58.5, -3.7065, -58.5, 3.72458, -2.6067226, 59.5)
uv = PackedVector2Array(61.440372, 2, 118.12029, 22.36612, 119, 54.41059, 119, 66.22287, 64.01593, 121.00001, 57.685413, 121.00001, 2, 65.206505, 2, 57.77542, 57.89328, 2)
polygons = [PackedInt32Array(0, 6, 7), PackedInt32Array(2, 0, 1), PackedInt32Array(0, 5, 6), PackedInt32Array(8, 0, 7), PackedInt32Array(0, 2, 5), PackedInt32Array(3, 5, 2), PackedInt32Array(4, 5, 3)]
bones = ["root", PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1)]
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1276779041]
root_node = NodePath("../SpineRoot/Skeleton2D")
libraries/ = SubResource("AnimationLibrary_flobb")
@@ -0,0 +1,315 @@
orcarmor_combat.png
size:1084,1084
filter:Linear,Linear
C_armA_0
bounds:716,689,92,157
offsets:485,502,1080,1080
C_armB
bounds:146,126,59,175
offsets:582,491,1080,1080
C_armclothA_1
bounds:568,172,67,74
offsets:486,577,1080,1080
C_armclothB_1
bounds:637,178,63,70
offsets:575,589,1080,1080
C_bodyA_0
bounds:713,533,101,154
offsets:522,392,1080,1080
C_eyeA1_a
bounds:643,47,48,19
offsets:584,551,1080,1080
C_eyeA1_b
bounds:534,688,47,18
offsets:583,551,1080,1080
C_eyeB1_a
bounds:693,46,48,19
offsets:584,551,1080,1080
C_eyeB1_b
bounds:843,10,47,18
offsets:583,551,1080,1080
C_eyeB2_a
bounds:935,95,44,16
offsets:586,551,1080,1080
C_faceA1_a
bounds:492,5,45,44
offsets:591,537,1080,1080
C_faceA1_b
bounds:443,4,47,41
offsets:590,537,1080,1080
C_faceB1_a
bounds:539,5,45,44
offsets:591,537,1080,1080
C_faceB1_b
bounds:639,4,47,41
offsets:590,537,1080,1080
C_hairA_0
bounds:643,68,48,108
offsets:563,499,1080,1080
C_hairA_1
bounds:693,67,45,109
offsets:563,499,1080,1080
C_hairA_2
bounds:935,113,33,84
offsets:566,516,1080,1080
C_hairA_3
bounds:898,98,35,93
offsets:567,511,1080,1080
C_hairB_0
bounds:1020,189,36,55
offsets:609,557,1080,1080
C_hairB_1
bounds:810,265,70,65
offsets:578,546,1080,1080
C_hairB_2
bounds:766,252,42,67
offsets:607,542,1080,1080
C_hairB_3
bounds:702,182,65,68
offsets:576,544,1080,1080
C_hairC_0
bounds:1012,82,67,49
offsets:574,561,1080,1080
C_hairC_2
bounds:376,4,65,41
offsets:577,564,1080,1080
C_hairD_0
bounds:740,71,34,109
offsets:608,496,1080,1080
C_hairD_1
bounds:817,82,39,98
offsets:607,507,1080,1080
C_hairD_2
bounds:858,88,38,96
offsets:611,509,1080,1080
C_hairD_3
bounds:776,80,39,100
offsets:611,508,1080,1080
C_hairE_0
bounds:422,321,92,90
offsets:549,538,1080,1080
C_hairE_1
bounds:713,414,98,117
offsets:543,511,1080,1080
C_hairE_2
bounds:943,455,116,120
offsets:525,508,1080,1080
C_hairE_3
bounds:2,497,196,258
offsets:444,370,1080,1080
C_hairF_0
bounds:522,321,60,95
offsets:518,531,1080,1080
C_hairG_1
bounds:326,477,96,209
offsets:483,312,1080,1080
C_headA_0
bounds:537,248,80,71
offsets:560,529,1080,1080
C_headA_1
bounds:420,248,115,71
offsets:525,529,1080,1080
C_legA1
bounds:816,487,125,80
offsets:438,374,1080,1080
C_legA2
bounds:590,60,51,110
offsets:421,374,1080,1080
C_legB1
bounds:943,365,129,88
offsets:553,365,1080,1080
C_legchainA_1
bounds:743,18,61,51
offsets:415,421,1080,1080
C_milkA_0_1
bounds:790,383,10,29
offsets:576,471,1080,1080
C_milkB_0_1
bounds:963,9,30,27
offsets:612,469,1080,1080
C_nippleA_0
bounds:584,328,31,31
offsets:568,480,1080,1080
C_nippleB_0
bounds:1057,331,25,32
offsets:618,478,1080,1080
C_pregnant_1
bounds:619,250,71,84
offsets:548,400,1080,1080
C_pregnant_2
bounds:710,321,78,91
offsets:548,397,1080,1080
C_pregnant_3
bounds:620,336,88,96
offsets:548,394,1080,1080
C_pregnant_4
bounds:522,418,96,100
offsets:548,390,1080,1080
C_pregnant_L_1
bounds:802,393,9,19
offsets:607,442,1080,1080
C_pregnant_L_2
bounds:806,16,35,62
offsets:589,400,1080,1080
C_pregnant_L_3
bounds:970,125,40,72
offsets:595,396,1080,1080
C_pregnant_L_4
bounds:888,193,40,74
offsets:600,392,1080,1080
C_pussy
bounds:917,71,50,22
offsets:537,387,1080,1080
C_titsA_0
bounds:1012,133,49,54
offsets:559,472,1080,1080
C_titsA_L_0
bounds:886,37,29,49
offsets:561,473,1080,1080
C_titsB_0
bounds:590,2,47,56
offsets:596,471,1080,1080
C_titsB_L_0
bounds:917,38,31,31
offsets:611,493,1080,1080
M_armA1
bounds:2,101,142,200
offsets:358,438,1080,1080
M_armA2
bounds:207,184,99,145
offsets:356,342,1080,1080
M_armA_L
bounds:843,30,41,50
offsets:397,570,1080,1080
M_armB1
bounds:424,495,96,191
offsets:586,435,1080,1080
M_armB2
bounds:146,2,105,122
offsets:613,355,1080,1080
M_armB3
bounds:769,182,63,68
offsets:654,348,1080,1080
M_armclothA1
bounds:308,171,110,154
offsets:345,342,1080,1080
M_armclothA2
bounds:420,171,70,73
offsets:374,344,1080,1080
M_armclothB1
bounds:946,726,118,147
offsets:607,350,1080,1080
M_armclothB2
bounds:882,269,54,61
offsets:664,355,1080,1080
M_attack_armA1
bounds:376,47,99,122
offsets:412,523,1080,1080
M_attack_armA1_L
bounds:584,361,34,55
offsets:416,581,1080,1080
M_attack_armA2
bounds:938,246,117,117
offsets:448,545,1080,1080
M_attack_armA3
bounds:621,554,90,152
offsets:478,607,1080,1080
M_attack_armB1
bounds:621,434,90,118
offsets:581,520,1080,1080
M_attack_armB2
bounds:477,51,111,118
offsets:621,556,1080,1080
M_attack_armB3
bounds:253,37,121,132
offsets:611,624,1080,1080
M_attack_armB4
bounds:692,252,72,67
offsets:584,690,1080,1080
M_attack_armclothA1
bounds:309,327,111,148
offsets:469,607,1080,1080
M_attack_armclothB1
bounds:810,729,134,144
offsets:600,618,1080,1080
M_attack_armclothB2
bounds:207,126,42,56
offsets:626,691,1080,1080
M_attack_weaponA
bounds:206,688,326,155
offsets:315,663,1080,1080
M_attack_weaponB
bounds:206,845,265,237
offsets:462,575,1080,1080
M_bodyA
bounds:534,708,180,138
offsets:463,494,1080,1080
M_bodyB
bounds:2,757,202,325
offsets:435,339,1080,1080
M_bodyclothA1
bounds:122,70,19,29
offsets:566,561,1080,1080
M_bodyclothA2
bounds:813,415,128,70
offsets:491,573,1080,1080
M_dickA
bounds:688,10,46,34
offsets:544,413,1080,1080
M_dickB
bounds:834,186,52,77
offsets:531,354,1080,1080
M_dickC
bounds:492,171,74,75
offsets:501,308,1080,1080
M_eye
bounds:315,12,55,23
offsets:557,662,1080,1080
M_headA1
bounds:930,199,88,45
offsets:526,609,1080,1080
M_headA2
bounds:253,7,60,28
offsets:551,635,1080,1080
M_headB1
bounds:2,2,118,97
offsets:500,631,1080,1080
M_headB1_L
bounds:950,38,27,31
offsets:518,688,1080,1080
M_headB2
bounds:917,20,44,16
offsets:560,643,1080,1080
M_legA1
bounds:522,520,97,166
offsets:390,139,1080,1080
M_legA2
bounds:200,500,124,186
offsets:399,251,1080,1080
M_legB1
bounds:199,331,108,164
offsets:598,141,1080,1080
M_legB2
bounds:2,303,195,192
offsets:517,247,1080,1080
M_legclothA1
bounds:424,413,96,80
offsets:383,124,1080,1080
M_legclothA2
bounds:816,569,118,158
offsets:382,146,1080,1080
M_legclothB1
bounds:813,332,123,81
offsets:586,129,1080,1080
M_legclothB2
bounds:936,577,118,147
offsets:595,146,1080,1080
M_weaponA
bounds:794,875,279,207
offsets:315,281,1080,1080
M_weaponB
bounds:473,899,319,183
offsets:574,286,1080,1080
shadow
bounds:473,848,317,49
offsets:379,116,1080,1080
Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cw7vp82ddx5hl"
path="res://.godot/imported/orcarmor_combat.png-7648ba2c6a51a4ac5f0f9e47d98694f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/orc_human/spine/orcarmor_combat.png"
dest_files=["res://.godot/imported/orcarmor_combat.png-7648ba2c6a51a4ac5f0f9e47d98694f1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
@@ -0,0 +1,5 @@
orcarmor_icon.png
size:124,124
filter:Linear,Linear
Button_unitmix_3
bounds:2,2,117,119
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://hfknqvppalhn"
path="res://.godot/imported/orcarmor_icon.png-8068b0f27db55c8cadc9bffb05bf6802.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/orc_human/spine/orcarmor_icon.png"
dest_files=["res://.godot/imported/orcarmor_icon.png-8068b0f27db55c8cadc9bffb05bf6802.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.
@@ -0,0 +1,7 @@
[
{
"Type": "Combination",
"Id": "OrcArmor",
"Cost": 16,
},
]