proto3 initial commit
This commit is contained in:
BIN
proto3/godot/scenes/characters/AnimationTreeMale.vs
Normal file
BIN
proto3/godot/scenes/characters/AnimationTreeMale.vs
Normal file
Binary file not shown.
430
proto3/godot/scenes/characters/animation_tree_root.tres
Normal file
430
proto3/godot/scenes/characters/animation_tree_root.tres
Normal file
@@ -0,0 +1,430 @@
|
||||
[gd_resource type="AnimationNodeBlendTree" load_steps=98 format=2]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=98]
|
||||
animation = "hang-grab_a-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=99]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=100]
|
||||
animation = "climb-low-obstacle"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=101]
|
||||
|
||||
[sub_resource type="AnimationNodeTransition" id=102]
|
||||
input_count = 2
|
||||
input_0/name = "free"
|
||||
input_0/auto_advance = false
|
||||
input_1/name = "grabbed"
|
||||
input_1/auto_advance = false
|
||||
|
||||
[sub_resource type="AnimationNodeBlend2" id=103]
|
||||
filter_enabled = true
|
||||
filters = [ ".:clavicle_L", ".:finger1-1_L", ".:finger1-2_L", ".:finger1-3_L", ".:finger2-1_L", ".:finger2-2_L", ".:finger2-3_L", ".:finger3-1_L", ".:finger3-2_L", ".:finger3-3_L", ".:finger4-1_L", ".:finger4-2_L", ".:finger4-3_L", ".:finger5-1_L", ".:finger5-2_L", ".:finger5-3_L", ".:grabber_L", ".:lowerarm01_L", ".:metacarpal1_L", ".:metacarpal2_L", ".:metacarpal3_L", ".:metacarpal4_L", ".:shoulder01_L", ".:spine01", ".:spine02", ".:spine03", ".:spine04", ".:spine05", ".:upperarm01_L", ".:upperarm02_L", ".:wrist_L" ]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=104]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=105]
|
||||
animation = "hang-grab_attack_a"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=106]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=107]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeSeek" id=108]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=109]
|
||||
animation = "hang-grab_b-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=110]
|
||||
animation = "hang-grab_attack_b"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=111]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=112]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=113]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeSeek" id=114]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=93]
|
||||
animation = "kneeling-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=94]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=95]
|
||||
nodes/kneel_animation/node = SubResource( 93 )
|
||||
nodes/kneel_animation/position = Vector2( 180, 120 )
|
||||
nodes/kneel_speed/node = SubResource( 94 )
|
||||
nodes/kneel_speed/position = Vector2( 500, 120 )
|
||||
nodes/output/position = Vector2( 740, 120 )
|
||||
node_connections = [ "output", 0, "kneel_speed", "kneel_speed", 0, "kneel_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=18]
|
||||
animation = "stand-to-walk"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=19]
|
||||
animation = "stand"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=20]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=21]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=22]
|
||||
nodes/Animation/node = SubResource( 19 )
|
||||
nodes/Animation/position = Vector2( 240, 100 )
|
||||
nodes/output/position = Vector2( 1000, 100 )
|
||||
nodes/speed/node = SubResource( 20 )
|
||||
nodes/speed/position = Vector2( 800, 100 )
|
||||
nodes/stand_speed/node = SubResource( 21 )
|
||||
nodes/stand_speed/position = Vector2( 520, 100 )
|
||||
node_connections = [ "speed", 0, "stand_speed", "output", 0, "speed", "stand_speed", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=23]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=24]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=25]
|
||||
animation = "walk-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=26]
|
||||
animation = "walk2-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeBlendSpace1D" id=27]
|
||||
blend_point_0/node = SubResource( 25 )
|
||||
blend_point_0/pos = 0.0
|
||||
blend_point_1/node = SubResource( 26 )
|
||||
blend_point_1/pos = 1.0
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=28]
|
||||
graph_offset = Vector2( 0, 133.5 )
|
||||
nodes/output/position = Vector2( 1000, 140 )
|
||||
nodes/speed/node = SubResource( 23 )
|
||||
nodes/speed/position = Vector2( 760, 140 )
|
||||
nodes/walk_speed/node = SubResource( 24 )
|
||||
nodes/walk_speed/position = Vector2( 480, 140 )
|
||||
nodes/walking/node = SubResource( 27 )
|
||||
nodes/walking/position = Vector2( 120, 260 )
|
||||
node_connections = [ "speed", 0, "walk_speed", "output", 0, "speed", "walk_speed", 0, "walking" ]
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=29]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=30]
|
||||
animation = "wash-floor-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=31]
|
||||
graph_offset = Vector2( 0, -251 )
|
||||
nodes/TimeScale/node = SubResource( 29 )
|
||||
nodes/TimeScale/position = Vector2( 460, 160 )
|
||||
nodes/output/position = Vector2( 700, 160 )
|
||||
nodes/wash_floor_animation/node = SubResource( 30 )
|
||||
nodes/wash_floor_animation/position = Vector2( 140, 160 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "wash_floor_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=32]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=33]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=34]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=35]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=36]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=96]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=97]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=37]
|
||||
states/kneel/node = SubResource( 95 )
|
||||
states/kneel/position = Vector2( 459, 358 )
|
||||
states/stand/node = SubResource( 22 )
|
||||
states/stand/position = Vector2( 222, 87 )
|
||||
states/stand-to-walk/node = SubResource( 18 )
|
||||
states/stand-to-walk/position = Vector2( 605, 71 )
|
||||
states/walk/node = SubResource( 28 )
|
||||
states/walk/position = Vector2( 647, 210 )
|
||||
states/wash_floor/node = SubResource( 31 )
|
||||
states/wash_floor/position = Vector2( 140, 268 )
|
||||
transitions = [ "stand", "stand-to-walk", SubResource( 32 ), "stand-to-walk", "walk", SubResource( 33 ), "walk", "stand", SubResource( 34 ), "stand", "wash_floor", SubResource( 35 ), "wash_floor", "stand", SubResource( 36 ), "stand", "kneel", SubResource( 96 ), "kneel", "stand", SubResource( 97 ) ]
|
||||
start_node = "stand"
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=115]
|
||||
animation = "bed_torture_beating_b-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=116]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=117]
|
||||
nodes/Animation/node = SubResource( 115 )
|
||||
nodes/Animation/position = Vector2( 97, 97 )
|
||||
nodes/beating_speed/node = SubResource( 116 )
|
||||
nodes/beating_speed/position = Vector2( 420, 100 )
|
||||
nodes/output/position = Vector2( 700, 120 )
|
||||
node_connections = [ "output", 0, "beating_speed", "beating_speed", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=118]
|
||||
animation = "bed_torture_beating_a-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=119]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=120]
|
||||
graph_offset = Vector2( 0, -251 )
|
||||
nodes/Animation/node = SubResource( 118 )
|
||||
nodes/Animation/position = Vector2( 80, 100 )
|
||||
nodes/beating_m_speed/node = SubResource( 119 )
|
||||
nodes/beating_m_speed/position = Vector2( 560, 100 )
|
||||
nodes/output/position = Vector2( 960, 140 )
|
||||
node_connections = [ "output", 0, "beating_m_speed", "beating_m_speed", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=121]
|
||||
animation = "lying-on-back-arms-tied-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=122]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=123]
|
||||
nodes/Animation/node = SubResource( 121 )
|
||||
nodes/Animation/position = Vector2( 60, 80 )
|
||||
nodes/TimeScale/node = SubResource( 122 )
|
||||
nodes/TimeScale/position = Vector2( 480, 80 )
|
||||
nodes/output/position = Vector2( 720, 80 )
|
||||
node_connections = [ "output", 0, "TimeScale", "TimeScale", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=124]
|
||||
animation = "bed_torture_start_b"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=125]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=126]
|
||||
nodes/Animation/node = SubResource( 124 )
|
||||
nodes/Animation/position = Vector2( 80, 80 )
|
||||
nodes/bed_start_speed/node = SubResource( 125 )
|
||||
nodes/bed_start_speed/position = Vector2( 380, 80 )
|
||||
nodes/output/position = Vector2( 620, 80 )
|
||||
node_connections = [ "output", 0, "bed_start_speed", "bed_start_speed", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=127]
|
||||
animation = "bed_torture_start_a"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=128]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=129]
|
||||
graph_offset = Vector2( 0, 15.75 )
|
||||
nodes/Animation/node = SubResource( 127 )
|
||||
nodes/Animation/position = Vector2( 69, 94 )
|
||||
nodes/bed_start_m_speed/node = SubResource( 128 )
|
||||
nodes/bed_start_m_speed/position = Vector2( 360, 80 )
|
||||
nodes/output/position = Vector2( 660, 80 )
|
||||
node_connections = [ "output", 0, "bed_start_m_speed", "bed_start_m_speed", 0, "Animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=130]
|
||||
animation = "bed_torture_forcing_b"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=131]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=132]
|
||||
graph_offset = Vector2( 0, -55 )
|
||||
nodes/forcing_animation/node = SubResource( 130 )
|
||||
nodes/forcing_animation/position = Vector2( 159, 121 )
|
||||
nodes/forcing_speed/node = SubResource( 131 )
|
||||
nodes/forcing_speed/position = Vector2( 460, 100 )
|
||||
nodes/output/position = Vector2( 740, 100 )
|
||||
node_connections = [ "output", 0, "forcing_speed", "forcing_speed", 0, "forcing_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=133]
|
||||
animation = "bed_torture_forcing_a"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=134]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=135]
|
||||
nodes/forcing_m_animation/node = SubResource( 133 )
|
||||
nodes/forcing_m_animation/position = Vector2( 102, 110 )
|
||||
nodes/forcing_m_speed/node = SubResource( 134 )
|
||||
nodes/forcing_m_speed/position = Vector2( 442, 120 )
|
||||
nodes/output/position = Vector2( 740, 120 )
|
||||
node_connections = [ "output", 0, "forcing_m_speed", "forcing_m_speed", 0, "forcing_m_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=136]
|
||||
animation = "bed_torture_forcing_s1_b-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=137]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=138]
|
||||
nodes/forcing_s1_animation/node = SubResource( 136 )
|
||||
nodes/forcing_s1_animation/position = Vector2( 160, 140 )
|
||||
nodes/forcing_s1_speed/node = SubResource( 137 )
|
||||
nodes/forcing_s1_speed/position = Vector2( 640, 160 )
|
||||
nodes/output/position = Vector2( 920, 160 )
|
||||
node_connections = [ "output", 0, "forcing_s1_speed", "forcing_s1_speed", 0, "forcing_s1_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=139]
|
||||
animation = "bed_torture_forcing_s1_a-loop"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=140]
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id=141]
|
||||
nodes/forcing_s1_animation/node = SubResource( 139 )
|
||||
nodes/forcing_s1_animation/position = Vector2( 300, 260 )
|
||||
nodes/forcing_s1_speed/node = SubResource( 140 )
|
||||
nodes/forcing_s1_speed/position = Vector2( 680, 260 )
|
||||
nodes/output/position = Vector2( 980, 280 )
|
||||
node_connections = [ "output", 0, "forcing_s1_speed", "forcing_s1_speed", 0, "forcing_s1_animation" ]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=142]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=143]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=144]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=145]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=146]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=147]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=148]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=149]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=150]
|
||||
states/beating/node = SubResource( 117 )
|
||||
states/beating/position = Vector2( 421, 244 )
|
||||
states/beating_m/node = SubResource( 120 )
|
||||
states/beating_m/position = Vector2( 225, 283 )
|
||||
states/bed_facing_up/node = SubResource( 123 )
|
||||
states/bed_facing_up/position = Vector2( 189, 53 )
|
||||
states/bed_start/node = SubResource( 126 )
|
||||
states/bed_start/position = Vector2( 299, 138 )
|
||||
states/bed_start_m/node = SubResource( 129 )
|
||||
states/bed_start_m/position = Vector2( 201, 203 )
|
||||
states/forcing/node = SubResource( 132 )
|
||||
states/forcing/position = Vector2( 429, 330 )
|
||||
states/forcing_m/node = SubResource( 135 )
|
||||
states/forcing_m/position = Vector2( 247, 390 )
|
||||
states/forcing_s1/node = SubResource( 138 )
|
||||
states/forcing_s1/position = Vector2( 533, 428 )
|
||||
states/forcing_s1_m/node = SubResource( 141 )
|
||||
states/forcing_s1_m/position = Vector2( 247, 544 )
|
||||
transitions = [ "bed_facing_up", "bed_start", SubResource( 142 ), "bed_facing_up", "bed_start_m", SubResource( 143 ), "bed_start_m", "beating_m", SubResource( 144 ), "bed_start", "beating", SubResource( 145 ), "beating_m", "forcing_m", SubResource( 146 ), "beating", "forcing", SubResource( 147 ), "forcing_m", "forcing_s1_m", SubResource( 148 ), "forcing", "forcing_s1", SubResource( 149 ) ]
|
||||
start_node = "bed_facing_up"
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=151]
|
||||
states/bed/node = SubResource( 150 )
|
||||
states/bed/position = Vector2( 251, 82 )
|
||||
start_node = "bed"
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=152]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id=153]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id=154]
|
||||
states/Motion/node = SubResource( 37 )
|
||||
states/Motion/position = Vector2( 188, 65 )
|
||||
states/SmartObject/node = SubResource( 151 )
|
||||
states/SmartObject/position = Vector2( 250, 140 )
|
||||
transitions = [ "Motion", "SmartObject", SubResource( 152 ), "SmartObject", "Motion", SubResource( 153 ) ]
|
||||
start_node = "Motion"
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=155]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=156]
|
||||
animation = "throw"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=157]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=158]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=159]
|
||||
animation = "small_turn_left"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=160]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=161]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=162]
|
||||
animation = "small_turn_right"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=163]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=164]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=165]
|
||||
animation = "unstuck1"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=166]
|
||||
|
||||
[sub_resource type="AnimationNodeOneShot" id=167]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id=168]
|
||||
animation = "unstuck2"
|
||||
|
||||
[sub_resource type="AnimationNodeTimeScale" id=169]
|
||||
|
||||
[resource]
|
||||
graph_offset = Vector2( -227.051, -544.846 )
|
||||
nodes/Animation/node = SubResource( 98 )
|
||||
nodes/Animation/position = Vector2( 120, -200 )
|
||||
nodes/climb_low_obstacle/node = SubResource( 99 )
|
||||
nodes/climb_low_obstacle/position = Vector2( 2340, -380 )
|
||||
nodes/climb_low_obstacle_animation/node = SubResource( 100 )
|
||||
nodes/climb_low_obstacle_animation/position = Vector2( 1800, 20 )
|
||||
nodes/climb_low_obstacle_speed/node = SubResource( 101 )
|
||||
nodes/climb_low_obstacle_speed/position = Vector2( 2120, -160 )
|
||||
nodes/free_grabbed/node = SubResource( 102 )
|
||||
nodes/free_grabbed/position = Vector2( 3500, -260 )
|
||||
nodes/grab/node = SubResource( 103 )
|
||||
nodes/grab/position = Vector2( 2640, -380 )
|
||||
nodes/grab_attack/node = SubResource( 104 )
|
||||
nodes/grab_attack/position = Vector2( 600, -420 )
|
||||
nodes/grab_attack_animation/node = SubResource( 105 )
|
||||
nodes/grab_attack_animation/position = Vector2( 400, -40 )
|
||||
nodes/grab_attack_speed/node = SubResource( 106 )
|
||||
nodes/grab_attack_speed/position = Vector2( 680, -40 )
|
||||
nodes/grab_scale/node = SubResource( 107 )
|
||||
nodes/grab_scale/position = Vector2( 600, -200 )
|
||||
nodes/grab_seek/node = SubResource( 108 )
|
||||
nodes/grab_seek/position = Vector2( 400, -200 )
|
||||
nodes/grabbed_animation/node = SubResource( 109 )
|
||||
nodes/grabbed_animation/position = Vector2( 2260, 160 )
|
||||
nodes/grabbed_attack_animation/node = SubResource( 110 )
|
||||
nodes/grabbed_attack_animation/position = Vector2( 2340, 340 )
|
||||
nodes/grabbed_attack_speed/node = SubResource( 111 )
|
||||
nodes/grabbed_attack_speed/position = Vector2( 2680, 340 )
|
||||
nodes/grabbed_attacked/node = SubResource( 112 )
|
||||
nodes/grabbed_attacked/position = Vector2( 3080, 0 )
|
||||
nodes/grabbed_scale/node = SubResource( 113 )
|
||||
nodes/grabbed_scale/position = Vector2( 2800, 40 )
|
||||
nodes/grabbed_seek/node = SubResource( 114 )
|
||||
nodes/grabbed_seek/position = Vector2( 2540, 40 )
|
||||
nodes/main/node = SubResource( 154 )
|
||||
nodes/main/position = Vector2( 280, -360 )
|
||||
nodes/output/position = Vector2( 3740, -260 )
|
||||
nodes/throw/node = SubResource( 155 )
|
||||
nodes/throw/position = Vector2( 3000, -280 )
|
||||
nodes/throw_animation/node = SubResource( 156 )
|
||||
nodes/throw_animation/position = Vector2( 2560, -160 )
|
||||
nodes/throw_speed/node = SubResource( 157 )
|
||||
nodes/throw_speed/position = Vector2( 2800, -160 )
|
||||
nodes/turn_left/node = SubResource( 158 )
|
||||
nodes/turn_left/position = Vector2( 1200, -400 )
|
||||
nodes/turn_left_animation/node = SubResource( 159 )
|
||||
nodes/turn_left_animation/position = Vector2( 440, 100 )
|
||||
nodes/turn_left_speed/node = SubResource( 160 )
|
||||
nodes/turn_left_speed/position = Vector2( 680, 100 )
|
||||
nodes/turn_right/node = SubResource( 161 )
|
||||
nodes/turn_right/position = Vector2( 900, -400 )
|
||||
nodes/turn_right_animation/node = SubResource( 162 )
|
||||
nodes/turn_right_animation/position = Vector2( 440, 220 )
|
||||
nodes/turn_right_speed/node = SubResource( 163 )
|
||||
nodes/turn_right_speed/position = Vector2( 680, 220 )
|
||||
nodes/unstuck1/node = SubResource( 164 )
|
||||
nodes/unstuck1/position = Vector2( 1520, -380 )
|
||||
nodes/unstuck1_animation/node = SubResource( 165 )
|
||||
nodes/unstuck1_animation/position = Vector2( 1180, 0 )
|
||||
nodes/unstuck1_speed/node = SubResource( 166 )
|
||||
nodes/unstuck1_speed/position = Vector2( 1380, -160 )
|
||||
nodes/unstuck2/node = SubResource( 167 )
|
||||
nodes/unstuck2/position = Vector2( 1920, -380 )
|
||||
nodes/unstuck2_animation/node = SubResource( 168 )
|
||||
nodes/unstuck2_animation/position = Vector2( 1460, -20 )
|
||||
nodes/unstuck2_speed/node = SubResource( 169 )
|
||||
nodes/unstuck2_speed/position = Vector2( 1700, -160 )
|
||||
node_connections = [ "output", 0, "free_grabbed", "grab_seek", 0, "Animation", "climb_low_obstacle", 0, "unstuck2", "climb_low_obstacle", 1, "climb_low_obstacle_speed", "grab_scale", 0, "grab_seek", "grabbed_seek", 0, "grabbed_animation", "unstuck1", 0, "turn_left", "unstuck1", 1, "unstuck1_speed", "turn_left_speed", 0, "turn_left_animation", "throw_speed", 0, "throw_animation", "unstuck1_speed", 0, "unstuck1_animation", "grab_attack_speed", 0, "grab_attack_animation", "unstuck2", 0, "unstuck1", "unstuck2", 1, "unstuck2_speed", "turn_right", 0, "grab_attack", "turn_right", 1, "turn_right_speed", "grab", 0, "climb_low_obstacle", "grab", 1, "grab_scale", "grabbed_scale", 0, "grabbed_seek", "turn_left", 0, "turn_right", "turn_left", 1, "turn_left_speed", "grabbed_attack_speed", 0, "grabbed_attack_animation", "climb_low_obstacle_speed", 0, "climb_low_obstacle_animation", "free_grabbed", 0, "throw", "free_grabbed", 1, "grabbed_attacked", "grabbed_attacked", 0, "grabbed_scale", "grabbed_attacked", 1, "grabbed_attack_speed", "unstuck2_speed", 0, "unstuck2_animation", "throw", 0, "grab", "throw", 1, "throw_speed", "turn_right_speed", 0, "turn_right_animation", "grab_attack", 0, "main", "grab_attack", 1, "grab_attack_speed" ]
|
||||
BIN
proto3/godot/scenes/characters/brown_eye.png
Normal file
BIN
proto3/godot/scenes/characters/brown_eye.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 596 KiB |
36
proto3/godot/scenes/characters/brown_eye.png.import
Normal file
36
proto3/godot/scenes/characters/brown_eye.png.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path.s3tc="res://.import/brown_eye.png-60d098a1f88d54238400fc846fa1ccdd.s3tc.stex"
|
||||
path.etc2="res://.import/brown_eye.png-60d098a1f88d54238400fc846fa1ccdd.etc2.stex"
|
||||
metadata={
|
||||
"imported_formats": [ "s3tc", "etc2" ],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/characters/brown_eye.png"
|
||||
dest_files=[ "res://.import/brown_eye.png-60d098a1f88d54238400fc846fa1ccdd.s3tc.stex", "res://.import/brown_eye.png-60d098a1f88d54238400fc846fa1ccdd.etc2.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=true
|
||||
flags/filter=true
|
||||
flags/mipmaps=true
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
||||
20
proto3/godot/scenes/characters/dual_test.gd
Normal file
20
proto3/godot/scenes/characters/dual_test.gd
Normal file
@@ -0,0 +1,20 @@
|
||||
extends Spatial
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
$male2.add_collision_exception_with($male)
|
||||
$male2.set_meta("smart_object", true)
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
|
||||
func _physics_process(delta):
|
||||
$male2.global_transform = $male.global_transform
|
||||
26
proto3/godot/scenes/characters/dual_test.tscn
Normal file
26
proto3/godot/scenes/characters/dual_test.tscn
Normal file
@@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/characters/male.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/characters/dual_test.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="BoxShape" id=1]
|
||||
extents = Vector3( 100, 0.5, 100 )
|
||||
|
||||
[node name="dual_test" type="Spatial"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="male" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="male2" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="."]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.25, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 0.608332, 0.793683, 0, -0.793683, 0.608332, 0, 3.00065, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="."]
|
||||
transform = Transform( 0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, -1, 0.6, 1 )
|
||||
BIN
proto3/godot/scenes/characters/eyelashes04.png
Normal file
BIN
proto3/godot/scenes/characters/eyelashes04.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
36
proto3/godot/scenes/characters/eyelashes04.png.import
Normal file
36
proto3/godot/scenes/characters/eyelashes04.png.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path.s3tc="res://.import/eyelashes04.png-d20f38ad08e742a4c5e005cc75324a62.s3tc.stex"
|
||||
path.etc2="res://.import/eyelashes04.png-d20f38ad08e742a4c5e005cc75324a62.etc2.stex"
|
||||
metadata={
|
||||
"imported_formats": [ "s3tc", "etc2" ],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/characters/eyelashes04.png"
|
||||
dest_files=[ "res://.import/eyelashes04.png-d20f38ad08e742a4c5e005cc75324a62.s3tc.stex", "res://.import/eyelashes04.png-d20f38ad08e742a4c5e005cc75324a62.etc2.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=true
|
||||
flags/filter=true
|
||||
flags/mipmaps=true
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
||||
198
proto3/godot/scenes/characters/female.gd
Normal file
198
proto3/godot/scenes/characters/female.gd
Normal file
@@ -0,0 +1,198 @@
|
||||
extends KinematicBody
|
||||
|
||||
const MOTION_INTERPOLATE_SPEED = 10
|
||||
|
||||
var orientation = Transform()
|
||||
var fixup = Transform()
|
||||
var root_motion = Transform()
|
||||
var motion = Vector2()
|
||||
var motion_target = Vector2()
|
||||
var velocity = Vector3()
|
||||
var disable_gravity = false
|
||||
const p1 = "parameters/main/playback"
|
||||
const p2 = "parameters/main/Motion/playback"
|
||||
|
||||
|
||||
func _ready():
|
||||
# var ap = $AnimationTree.get_node($AnimationTree.get_animation_player())
|
||||
orientation = global_transform
|
||||
orientation.origin = Vector3()
|
||||
add_to_group("characters")
|
||||
do_ungrab()
|
||||
|
||||
func _physics_process(delta):
|
||||
# motion = motion.linear_interpolate(motion_target, MOTION_INTERPOLATE_SPEED * delta)
|
||||
assert(has_meta("grabbed"))
|
||||
var in_smart_obj = get_meta("smart_object")
|
||||
if get_meta("grabbed"):
|
||||
orientation.basis = get_parent().global_transform.basis
|
||||
root_motion = $AnimationTree.get_root_motion_transform()
|
||||
orientation *= root_motion
|
||||
var h_velocity = orientation.origin / delta
|
||||
velocity.x = h_velocity.x
|
||||
velocity.z = h_velocity.z
|
||||
velocity.y = h_velocity.y
|
||||
if !get_meta("grabbed") && !in_smart_obj && !disable_gravity:
|
||||
velocity.y += -9.8 * delta
|
||||
velocity = move_and_slide(velocity,Vector3(0,1,0))
|
||||
orientation.origin = Vector3()
|
||||
fixup.origin = Vector3()
|
||||
orientation *= Transform().interpolate_with(fixup, delta)
|
||||
orientation = orientation.orthonormalized()
|
||||
global_transform.basis = orientation.basis
|
||||
if get_meta("grabbed"):
|
||||
global_transform.origin = get_parent().global_transform.origin
|
||||
# global_transform = get_parent().global_transform
|
||||
if attacking >= 0.0:
|
||||
attacking -= delta
|
||||
rpg.update_stats(self)
|
||||
rpg.update_needs(self)
|
||||
var skel
|
||||
func get_skeleton():
|
||||
if skel:
|
||||
return get_node(skel)
|
||||
var queue = [self]
|
||||
while queue.size() > 0:
|
||||
var item = queue.pop_front()
|
||||
if item is Skeleton:
|
||||
skel = get_path_to(item)
|
||||
return get_node(skel)
|
||||
for k in item.get_children():
|
||||
queue.push_back(k)
|
||||
func get_anim_player():
|
||||
return $female_2018/female_2018/AnimationPlayer
|
||||
var attachment_start
|
||||
var attachment_end
|
||||
var mod_p = false
|
||||
func get_front_neck_target():
|
||||
if !mod_p:
|
||||
$female_2018/female_2018/neck02BoneAttachment/front_neck_target.transform.basis = Basis()
|
||||
mod_p = true
|
||||
return $female_2018/female_2018/neck02BoneAttachment/front_neck_target
|
||||
func add_attachment(bname, xform):
|
||||
var ba: BoneAttachment = BoneAttachment.new()
|
||||
ba.bone_name = bname
|
||||
var sk = get_skeleton()
|
||||
sk.add_child(ba)
|
||||
var on1 = Spatial.new()
|
||||
ba.add_child(on1)
|
||||
var on2 = Spatial.new()
|
||||
ba.add_child(on2)
|
||||
on1.transform = Transform()
|
||||
# on1.global_transform.basis = Basis()
|
||||
on2.transform = xform
|
||||
# on2.rotate_y(PI)
|
||||
attachment_start = ba
|
||||
attachment_end = on2
|
||||
return on2
|
||||
|
||||
static func calc_offset(c2, bone2):
|
||||
var skel2 = c2.get_skeleton()
|
||||
var id2 = skel2.find_bone(bone2)
|
||||
assert(skel2 != null)
|
||||
assert(id2 >= 0)
|
||||
var offt2 = skel2.get_bone_global_pose(id2).origin
|
||||
var offset = Vector3(-offt2.x, -offt2.y, -offt2.z)
|
||||
# print("offset: ", offset)
|
||||
return offset
|
||||
|
||||
var act = {
|
||||
"stop":[
|
||||
["travel", p1, "Motion"],
|
||||
["travel", p2, "stand"],
|
||||
],
|
||||
"walk":[
|
||||
["travel", p1, "Motion"],
|
||||
["travel", p2, "walk"],
|
||||
],
|
||||
"grabbed":[
|
||||
["set", "parameters/free_grabbed/current", 1],
|
||||
["set", "parameters/grabbed_seek/seek_position", 0.0]
|
||||
],
|
||||
"ungrabbed":[
|
||||
["set", "parameters/free_grabbed/current", 0]
|
||||
],
|
||||
"grab":[
|
||||
["set", "parameters/grab/blend_amount", 1.0],
|
||||
["set", "parameters/grab_seek/seek_position", 0.0]
|
||||
],
|
||||
"grab_attack1_on":[
|
||||
["set", "parameters/grab_attack/active", true],
|
||||
],
|
||||
"grabbed_attacked1_on":[
|
||||
["set", "parameters/grabbed_attacked/active", true],
|
||||
],
|
||||
"ungrab":[
|
||||
["set", "parameters/grab/blend_amount", 0.0]
|
||||
],
|
||||
"throw_projectile":[
|
||||
["set", "parameters/throw/active", true]
|
||||
]
|
||||
}
|
||||
#func skirt_simulation(enable):
|
||||
# if enable:
|
||||
# var skel: Skeleton = get_skeleton()
|
||||
# for k in range(skel.get_bone_count()):
|
||||
# var bone = skel.get_bone_name(k)
|
||||
# if bone.begins_with("skirt"):
|
||||
# var pb: = PhysicalBone.new()
|
||||
# pb.bone_name = bone
|
||||
# pb.joint_type = pb.JOINT_TYPE_HINGE
|
||||
# pb.body_offset = skel.get_bone_global_pose(k)
|
||||
# pb.joint_offset = skel.get_bone_global_pose(k)
|
||||
# skel.add_child(pb)
|
||||
# var cs = CollisionShape.new()
|
||||
# var sshape: = BoxShape.new()
|
||||
# sshape.extents = Vector3(0.05, 0.05, 0.05)
|
||||
# cs.shape = sshape
|
||||
# pb.add_child(cs)
|
||||
# skel.physical_bones_add_collision_exception(self.get_rid())
|
||||
# skel.physical_bones_start_simulation()
|
||||
# else:
|
||||
# var skel: Skeleton = get_skeleton()
|
||||
# skel.physical_bones_stop_simulation()
|
||||
# skel.physical_bones_remove_collision_exception(self.get_rid())
|
||||
# for k in skel.get_children():
|
||||
# if k is PhysicalBone:
|
||||
# k.queue_free()
|
||||
func smart_obj(sm):
|
||||
for k in sm:
|
||||
if k[0] == "travel":
|
||||
$AnimationTree[k[1]].travel(k[2])
|
||||
if k[0] == "set":
|
||||
$AnimationTree[k[1]] = k[2]
|
||||
func do_stop():
|
||||
# if name != "player":
|
||||
# print(name, " stop")
|
||||
smart_obj(act.stop)
|
||||
func do_walk():
|
||||
# if name != "player":
|
||||
# print(name, "walk")
|
||||
smart_obj(act.walk)
|
||||
func set_walk_speed(x):
|
||||
var s = [["set", "parameters/main/Motion/walk/walk_speed/scale", x]]
|
||||
smart_obj(s)
|
||||
var grab_bone = "grabber_L"
|
||||
func do_grab():
|
||||
smart_obj(act.grab)
|
||||
var attacking = 0.0
|
||||
func do_attack():
|
||||
if attacking > 0.0:
|
||||
return
|
||||
if get_meta("grabbing"):
|
||||
smart_obj(act.grab_attack1_on)
|
||||
var s = grabbing.get_grabbed(self)
|
||||
s.do_attacked()
|
||||
rpg.melee_attack(self, s)
|
||||
attacking += 1.0
|
||||
else:
|
||||
smart_obj(act.throw_projectile)
|
||||
func do_attacked():
|
||||
if get_meta("grabbed"):
|
||||
smart_obj(act.grabbed_attacked1_on)
|
||||
func do_ungrab():
|
||||
smart_obj(act.ungrab)
|
||||
func do_grabbed():
|
||||
smart_obj(act.grabbed)
|
||||
func do_ungrabbed():
|
||||
smart_obj(act.ungrabbed)
|
||||
70
proto3/godot/scenes/characters/female.tscn
Normal file
70
proto3/godot/scenes/characters/female.tscn
Normal file
@@ -0,0 +1,70 @@
|
||||
[gd_scene load_steps=9 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/characters/female_2018.escn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/characters/female.gd" type="Script" id=2]
|
||||
[ext_resource path="res://scenes/characters/animation_tree_root.tres" type="AnimationNodeBlendTree" id=3]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.234161
|
||||
height = 1.26341
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=2]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=3]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=4]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=5]
|
||||
|
||||
[node name="female" type="KinematicBody"]
|
||||
collision_layer = 4
|
||||
collision_mask = 31
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -1.62921e-07, 1, 0, -1, -1.62921e-07, 0, 0.869824, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="col-lying" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0.8 )
|
||||
shape = SubResource( 1 )
|
||||
disabled = true
|
||||
|
||||
[node name="col-lying2" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -0.8 )
|
||||
shape = SubResource( 1 )
|
||||
disabled = true
|
||||
|
||||
[node name="AnimationTree" type="AnimationTree" parent="."]
|
||||
tree_root = ExtResource( 3 )
|
||||
anim_player = NodePath("../female_2018/female_2018/AnimationPlayer")
|
||||
active = true
|
||||
process_mode = 0
|
||||
root_motion_track = NodePath(".:root")
|
||||
parameters/free_grabbed/current = 0
|
||||
parameters/grab/blend_amount = 0.0
|
||||
parameters/grab_attack/active = false
|
||||
parameters/grab_attack_speed/scale = 1.0
|
||||
parameters/grab_scale/scale = 0.5
|
||||
parameters/grab_seek/seek_position = -1.0
|
||||
parameters/grabbed_attack_speed/scale = 1.0
|
||||
parameters/grabbed_attacked/active = false
|
||||
parameters/grabbed_scale/scale = 0.5
|
||||
parameters/grabbed_seek/seek_position = -1.0
|
||||
parameters/main/playback = SubResource( 2 )
|
||||
parameters/main/Motion/playback = SubResource( 3 )
|
||||
parameters/main/Motion/stand/speed/scale = 1.0
|
||||
parameters/main/Motion/stand/stand_speed/scale = 1.0
|
||||
parameters/main/Motion/walk/speed/scale = 1.0
|
||||
parameters/main/Motion/walk/walk_speed/scale = 1.0
|
||||
parameters/main/SmartObject/playback = SubResource( 4 )
|
||||
parameters/main/SmartObject/bed/playback = SubResource( 5 )
|
||||
parameters/main/SmartObject/bed/beating/beating_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/beating_m/beating_m_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_facing_up/TimeScale/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_start/bed_start_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_start_m/bed_start_m_speed/scale = 1.0
|
||||
parameters/throw/active = false
|
||||
parameters/throw_speed/scale = 1.0
|
||||
|
||||
[node name="female_2018" parent="." instance=ExtResource( 1 )]
|
||||
33543
proto3/godot/scenes/characters/female_2018.escn
Normal file
33543
proto3/godot/scenes/characters/female_2018.escn
Normal file
File diff suppressed because one or more lines are too long
1063
proto3/godot/scenes/characters/female_2018.escn.import
Normal file
1063
proto3/godot/scenes/characters/female_2018.escn.import
Normal file
File diff suppressed because it is too large
Load Diff
273
proto3/godot/scenes/characters/guard.escn
Normal file
273
proto3/godot/scenes/characters/guard.escn
Normal file
File diff suppressed because one or more lines are too long
1063
proto3/godot/scenes/characters/guard.escn.import
Normal file
1063
proto3/godot/scenes/characters/guard.escn.import
Normal file
File diff suppressed because it is too large
Load Diff
157
proto3/godot/scenes/characters/hair1-male.escn
Normal file
157
proto3/godot/scenes/characters/hair1-male.escn
Normal file
File diff suppressed because one or more lines are too long
1063
proto3/godot/scenes/characters/hair1-male.escn.import
Normal file
1063
proto3/godot/scenes/characters/hair1-male.escn.import
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
422
proto3/godot/scenes/characters/maid.escn
Normal file
422
proto3/godot/scenes/characters/maid.escn
Normal file
File diff suppressed because one or more lines are too long
1063
proto3/godot/scenes/characters/maid.escn.import
Normal file
1063
proto3/godot/scenes/characters/maid.escn.import
Normal file
File diff suppressed because it is too large
Load Diff
171
proto3/godot/scenes/characters/male.gd
Normal file
171
proto3/godot/scenes/characters/male.gd
Normal file
@@ -0,0 +1,171 @@
|
||||
extends KinematicBody
|
||||
|
||||
const MOTION_INTERPOLATE_SPEED = 10
|
||||
|
||||
var orientation = Transform()
|
||||
var root_motion = Transform()
|
||||
var fixup = Transform()
|
||||
var motion = Vector2()
|
||||
var motion_target = Vector2()
|
||||
var velocity = Vector3()
|
||||
var disable_gravity = false
|
||||
const p1 = "parameters/main/playback"
|
||||
const p2 = "parameters/main/Motion/playback"
|
||||
|
||||
|
||||
func _ready():
|
||||
# var _ap = $AnimationTree.get_node($AnimationTree.get_animation_player())
|
||||
orientation = global_transform
|
||||
orientation.origin = Vector3()
|
||||
add_to_group("characters")
|
||||
do_ungrab()
|
||||
|
||||
func _physics_process(delta):
|
||||
# motion = motion.linear_interpolate(motion_target, MOTION_INTERPOLATE_SPEED * delta)
|
||||
assert(has_meta("grabbed"))
|
||||
var in_smart_obj = get_meta("smart_object")
|
||||
if get_meta("grabbed"):
|
||||
orientation.basis = get_parent().global_transform.basis
|
||||
root_motion = $AnimationTree.get_root_motion_transform()
|
||||
orientation *= root_motion
|
||||
var h_velocity = orientation.origin / delta
|
||||
velocity.x = h_velocity.x
|
||||
velocity.z = h_velocity.z
|
||||
velocity.y = h_velocity.y
|
||||
if !get_meta("grabbed") && !in_smart_obj && !disable_gravity:
|
||||
velocity.y += -9.8 * delta
|
||||
velocity = move_and_slide(velocity,Vector3(0,1,0))
|
||||
orientation.origin = Vector3()
|
||||
fixup.origin = Vector3()
|
||||
orientation *= Transform().interpolate_with(fixup, delta)
|
||||
orientation = orientation.orthonormalized()
|
||||
global_transform.basis = orientation.basis
|
||||
if get_meta("grabbed"):
|
||||
global_transform.origin = get_parent().global_transform.origin
|
||||
# global_transform = get_parent().global_transform
|
||||
if attacking >= 0.0:
|
||||
attacking -= delta
|
||||
rpg.update_stats(self)
|
||||
var skel
|
||||
func get_skeleton():
|
||||
if skel:
|
||||
return get_node(skel)
|
||||
var queue = [self]
|
||||
while queue.size() > 0:
|
||||
var item = queue.pop_front()
|
||||
if item is Skeleton:
|
||||
skel = get_path_to(item)
|
||||
return get_node(skel)
|
||||
for k in item.get_children():
|
||||
queue.push_back(k)
|
||||
func get_anim_player():
|
||||
return $male_2018/male_g_2018/AnimationPlayer
|
||||
var attachment_start
|
||||
var attachment_end
|
||||
var mod_p = false
|
||||
func get_front_neck_target():
|
||||
if !mod_p:
|
||||
$male_2018/male_g_2018/neck02BoneAttachment/grab_neck_front.transform.basis = Basis()
|
||||
mod_p = true
|
||||
return $male_2018/male_g_2018/neck02BoneAttachment/grab_neck_front
|
||||
func add_attachment(bname, xform):
|
||||
var ba: BoneAttachment = BoneAttachment.new()
|
||||
ba.bone_name = bname
|
||||
var sk = get_skeleton()
|
||||
sk.add_child(ba)
|
||||
var on1 = Spatial.new()
|
||||
ba.add_child(on1)
|
||||
var on2 = Spatial.new()
|
||||
ba.add_child(on2)
|
||||
on1.transform = Transform()
|
||||
# on1.global_transform.basis = Basis()
|
||||
on2.transform = xform
|
||||
# on2.rotate_y(PI)
|
||||
attachment_start = ba
|
||||
attachment_end = on2
|
||||
return on2
|
||||
|
||||
static func calc_offset(c2, bone2):
|
||||
var skel2 = c2.get_skeleton()
|
||||
var id2 = skel2.find_bone(bone2)
|
||||
assert(skel2 != null)
|
||||
assert(id2 >= 0)
|
||||
var offt2 = skel2.get_bone_global_pose(id2).origin
|
||||
var offset = Vector3(-offt2.x, -offt2.y, -offt2.z)
|
||||
# print("offset: ", offset)
|
||||
return offset
|
||||
|
||||
var act = {
|
||||
"stop":[
|
||||
["travel", p1, "Motion"],
|
||||
["travel", p2, "stand"],
|
||||
],
|
||||
"walk":[
|
||||
["travel", p1, "Motion"],
|
||||
["travel", p2, "walk"],
|
||||
],
|
||||
"grabbed":[
|
||||
["set", "parameters/free_grabbed/current", 1],
|
||||
["set", "parameters/grabbed_seek/seek_position", 0.0]
|
||||
],
|
||||
"ungrabbed":[
|
||||
["set", "parameters/free_grabbed/current", 0]
|
||||
],
|
||||
"grab":[
|
||||
["set", "parameters/grab/blend_amount", 1.0],
|
||||
["set", "parameters/grab_seek/seek_position", 0.0]
|
||||
],
|
||||
"grab_attack1_on":[
|
||||
["set", "parameters/grab_attack/active", true],
|
||||
],
|
||||
"grabbed_attacked1_on":[
|
||||
["set", "parameters/grabbed_attacked/active", true],
|
||||
],
|
||||
"ungrab":[
|
||||
["set", "parameters/grab/blend_amount", 0.0]
|
||||
],
|
||||
"throw_projectile":[
|
||||
["set", "parameters/throw/active", true]
|
||||
]
|
||||
}
|
||||
func smart_obj(sm):
|
||||
for k in sm:
|
||||
if k[0] == "travel":
|
||||
$AnimationTree[k[1]].travel(k[2])
|
||||
if k[0] == "set":
|
||||
$AnimationTree[k[1]] = k[2]
|
||||
func do_stop():
|
||||
# if name != "player":
|
||||
# print(name, " stop")
|
||||
smart_obj(act.stop)
|
||||
func do_walk():
|
||||
# if name != "player":
|
||||
# print(name, "walk")
|
||||
smart_obj(act.walk)
|
||||
func set_walk_speed(x):
|
||||
var s = [["set", "parameters/main/Motion/walk/walk_speed/scale", x]]
|
||||
smart_obj(s)
|
||||
var grab_bone = "grabber_L"
|
||||
func do_grab():
|
||||
smart_obj(act.grab)
|
||||
var attacking = 0.0
|
||||
func do_attack():
|
||||
if attacking > 0.0:
|
||||
return
|
||||
if get_meta("grabbing"):
|
||||
smart_obj(act.grab_attack1_on)
|
||||
var s = grabbing.get_grabbed(self)
|
||||
s.do_attacked()
|
||||
rpg.melee_attack(self, s)
|
||||
attacking += 1.0
|
||||
else:
|
||||
smart_obj(act.throw_projectile)
|
||||
func do_attacked():
|
||||
if get_meta("grabbed"):
|
||||
smart_obj(act.grabbed_attacked1_on)
|
||||
func do_ungrab():
|
||||
smart_obj(act.ungrab)
|
||||
func do_grabbed():
|
||||
smart_obj(act.grabbed)
|
||||
func do_ungrabbed():
|
||||
smart_obj(act.ungrabbed)
|
||||
87
proto3/godot/scenes/characters/male.tscn
Normal file
87
proto3/godot/scenes/characters/male.tscn
Normal file
@@ -0,0 +1,87 @@
|
||||
[gd_scene load_steps=9 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/characters/male_2018.escn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/characters/male.gd" type="Script" id=2]
|
||||
[ext_resource path="res://scenes/characters/animation_tree_root.tres" type="AnimationNodeBlendTree" id=3]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.234161
|
||||
height = 1.26341
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=2]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=3]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=4]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachinePlayback" id=5]
|
||||
|
||||
[node name="male" type="KinematicBody"]
|
||||
collision_layer = 4
|
||||
collision_mask = 31
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -1.62921e-07, 1, 0, -1, -1.62921e-07, 0, 0.869824, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="col-lying" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0.8 )
|
||||
shape = SubResource( 1 )
|
||||
disabled = true
|
||||
|
||||
[node name="col-lying2" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -0.8 )
|
||||
shape = SubResource( 1 )
|
||||
disabled = true
|
||||
|
||||
[node name="AnimationTree" type="AnimationTree" parent="."]
|
||||
tree_root = ExtResource( 3 )
|
||||
anim_player = NodePath("../male_2018/male_g_2018/AnimationPlayer")
|
||||
active = true
|
||||
process_mode = 0
|
||||
root_motion_track = NodePath(".:root")
|
||||
parameters/climb_low_obstacle/active = false
|
||||
parameters/climb_low_obstacle_speed/scale = 1.0
|
||||
parameters/free_grabbed/current = 0
|
||||
parameters/grab/blend_amount = 0.0
|
||||
parameters/grab_attack/active = false
|
||||
parameters/grab_attack_speed/scale = 1.0
|
||||
parameters/grab_scale/scale = 0.5
|
||||
parameters/grab_seek/seek_position = -1.0
|
||||
parameters/grabbed_attack_speed/scale = 1.0
|
||||
parameters/grabbed_attacked/active = false
|
||||
parameters/grabbed_scale/scale = 0.5
|
||||
parameters/grabbed_seek/seek_position = -1.0
|
||||
parameters/main/playback = SubResource( 2 )
|
||||
parameters/main/Motion/playback = SubResource( 3 )
|
||||
parameters/main/Motion/kneel/kneel_speed/scale = 1.0
|
||||
parameters/main/Motion/stand/speed/scale = 1.0
|
||||
parameters/main/Motion/stand/stand_speed/scale = 1.0
|
||||
parameters/main/Motion/walk/speed/scale = 1.0
|
||||
parameters/main/Motion/walk/walk_speed/scale = 1.0
|
||||
parameters/main/Motion/walk/walking/blend_position = 0.0
|
||||
parameters/main/Motion/wash_floor/TimeScale/scale = 1.0
|
||||
parameters/main/SmartObject/playback = SubResource( 4 )
|
||||
parameters/main/SmartObject/bed/playback = SubResource( 5 )
|
||||
parameters/main/SmartObject/bed/beating/beating_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/beating_m/beating_m_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_facing_up/TimeScale/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_start/bed_start_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/bed_start_m/bed_start_m_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/forcing/forcing_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/forcing_m/forcing_m_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/forcing_s1/forcing_s1_speed/scale = 1.0
|
||||
parameters/main/SmartObject/bed/forcing_s1_m/forcing_s1_speed/scale = 1.0
|
||||
parameters/throw/active = false
|
||||
parameters/throw_speed/scale = 1.0
|
||||
parameters/turn_left/active = false
|
||||
parameters/turn_left_speed/scale = 1.0
|
||||
parameters/turn_right/active = false
|
||||
parameters/turn_right_speed/scale = 1.0
|
||||
parameters/unstuck1/active = false
|
||||
parameters/unstuck1_speed/scale = 1.0
|
||||
parameters/unstuck2/active = false
|
||||
parameters/unstuck2_speed/scale = 1.0
|
||||
|
||||
[node name="male_2018" parent="." instance=ExtResource( 1 )]
|
||||
37143
proto3/godot/scenes/characters/male_2018.escn
Normal file
37143
proto3/godot/scenes/characters/male_2018.escn
Normal file
File diff suppressed because one or more lines are too long
1063
proto3/godot/scenes/characters/male_2018.escn.import
Normal file
1063
proto3/godot/scenes/characters/male_2018.escn.import
Normal file
File diff suppressed because it is too large
Load Diff
BIN
proto3/godot/scenes/characters/male_g_2018-short02.mesh
Normal file
BIN
proto3/godot/scenes/characters/male_g_2018-short02.mesh
Normal file
Binary file not shown.
199
proto3/godot/scenes/characters/smart_object.gd
Normal file
199
proto3/godot/scenes/characters/smart_object.gd
Normal file
@@ -0,0 +1,199 @@
|
||||
extends Spatial
|
||||
class_name SmartObject
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
var first
|
||||
var second
|
||||
var script1
|
||||
var script2
|
||||
var state = -1
|
||||
var _state
|
||||
|
||||
class SmartObjectState:
|
||||
var first
|
||||
var second
|
||||
var script1
|
||||
var script2
|
||||
var active = false
|
||||
var next_cond
|
||||
var exit_cond
|
||||
var stage_name
|
||||
func init(n, p1, s1, p2, s2):
|
||||
stage_name = n
|
||||
first = p1
|
||||
second = p2
|
||||
script1 = s1
|
||||
script2 = s2
|
||||
first.set_meta("smart_object", true)
|
||||
second.set_meta("smart_object", true)
|
||||
func activate():
|
||||
second.add_collision_exception_with(first)
|
||||
second.global_transform = first.global_transform
|
||||
first.smart_obj(script1)
|
||||
second.smart_obj(script2)
|
||||
active = true
|
||||
func leave():
|
||||
active = false
|
||||
func process():
|
||||
if active:
|
||||
second.global_transform = first.global_transform
|
||||
func finalize():
|
||||
second.remove_collision_exception_with(first)
|
||||
first.do_stop()
|
||||
second.do_stop()
|
||||
first.set_meta("smart_object", false)
|
||||
second.set_meta("smart_object", false)
|
||||
|
||||
func parse(sc: String):
|
||||
var stages = {}
|
||||
var init_stage
|
||||
var cur_stage
|
||||
var cur_character
|
||||
for k in sc.split("\n"):
|
||||
var sc_line: String = k
|
||||
sc_line = sc_line.strip_edges()
|
||||
if sc_line.substr(0, 1) == "#":
|
||||
continue
|
||||
var words: = Array(sc_line.split(" "))
|
||||
if words[0] == "stage":
|
||||
cur_stage = words[1]
|
||||
if !init_stage:
|
||||
init_stage = cur_stage
|
||||
elif words[0] == "init:":
|
||||
init_stage = cur_stage
|
||||
elif words[0] == "first:":
|
||||
cur_character = "first"
|
||||
elif words[0] == "second:":
|
||||
cur_character = "second"
|
||||
elif words[0] == "next_cond":
|
||||
assert(cur_stage)
|
||||
if !stages.has(cur_stage):
|
||||
stages[cur_stage] = {}
|
||||
stages[cur_stage].next_cond = words.slice(1, words.size() - 1)
|
||||
elif words[0] == "exit_cond":
|
||||
assert(cur_stage)
|
||||
if !stages.has(cur_stage):
|
||||
stages[cur_stage] = {}
|
||||
stages[cur_stage].exit_cond = words.slice(1, words.size() - 1)
|
||||
elif words[0] == "next_stage":
|
||||
assert(cur_stage)
|
||||
if !stages.has(cur_stage):
|
||||
stages[cur_stage] = {}
|
||||
stages[cur_stage].next_stage = words[1]
|
||||
elif words[0] == "mod_stat":
|
||||
assert(cur_stage)
|
||||
assert(cur_character)
|
||||
if !stages.has(cur_stage):
|
||||
stages[cur_stage] = {}
|
||||
if !stages[cur_stage].has(cur_character):
|
||||
stages[cur_stage][cur_character] = []
|
||||
if !stages[cur_stage].has("mod_stats"):
|
||||
stages[cur_stage].mod_stats = {}
|
||||
if !stages[cur_stage].mod_stats.has(cur_character):
|
||||
stages[cur_stage].mod_stats[cur_character] = {}
|
||||
stages[cur_stage].mod_stats[cur_character][words[1]] = float(words[2])
|
||||
else:
|
||||
assert(cur_stage)
|
||||
assert(cur_character)
|
||||
if !stages.has(cur_stage):
|
||||
stages[cur_stage] = {}
|
||||
if !stages[cur_stage].has(cur_character):
|
||||
stages[cur_stage][cur_character] = []
|
||||
stages[cur_stage][cur_character].push_back(words)
|
||||
for k in stages:
|
||||
for e in stages[k]:
|
||||
if e == "mod_stats":
|
||||
continue
|
||||
if !stages[k].has("mod_stats"):
|
||||
stages[k].mod_stats = {}
|
||||
if !stages[k].mod_stats.has(e):
|
||||
stages[k].mod_stats[e] = {}
|
||||
stages.init_stage = init_stage
|
||||
print(stages)
|
||||
return stages
|
||||
|
||||
func activate(npc, m_script, s, s_script):
|
||||
main.init(npc, m_script, s, s_script)
|
||||
_state = main
|
||||
main.activate()
|
||||
var _stages
|
||||
var _exit_cond
|
||||
var npcs = {}
|
||||
func activate2(npc, s, script):
|
||||
npcs.first = npc
|
||||
npcs.second = s
|
||||
_stages = parse(script)
|
||||
for k in _stages.keys():
|
||||
if k == "init_stage":
|
||||
continue
|
||||
var st = SmartObjectState.new()
|
||||
_stages[k].obj = st
|
||||
_stages[k].obj.init(k, npc, _stages[k].first, s, _stages[k].second)
|
||||
if _stages[k].has("next_cond"):
|
||||
_stages[k].obj.next_cond = _stages[k].next_cond
|
||||
if _stages[k].has("exit_cond"):
|
||||
_stages[k].obj.exit_cond = _stages[k].exit_cond
|
||||
if k == _stages.init_stage:
|
||||
_state = st
|
||||
_state.activate()
|
||||
func cond_stat_morethan(which, stat, val):
|
||||
if npcs[which].get_meta(stat) > float(val):
|
||||
return true
|
||||
return false
|
||||
func cond_stat_lessthan(which, stat, val):
|
||||
if npcs[which].get_meta(stat) < float(val):
|
||||
return true
|
||||
return false
|
||||
|
||||
func _physics_process(delta):
|
||||
if _state:
|
||||
_state.process()
|
||||
var nextc = false
|
||||
var leave = false
|
||||
for k in _stages[_state.stage_name]:
|
||||
if k in ["mod_stats", "next_stage", "next_cond", "obj"]:
|
||||
continue
|
||||
var mod_stats = _stages[_state.stage_name].mod_stats[k]
|
||||
for l in mod_stats.keys():
|
||||
if npcs.has(k):
|
||||
var sval = npcs[k].get_meta(l)
|
||||
sval += mod_stats[l] * delta
|
||||
npcs[k].set_meta(l, sval)
|
||||
if _state.next_cond:
|
||||
var c = _state.next_cond
|
||||
if c.size() > 1:
|
||||
nextc = callv(c[0], c.slice(1, c.size() - 1))
|
||||
else:
|
||||
nextc = callv(c[0], [])
|
||||
if _state.exit_cond:
|
||||
var c = _state.exit_cond
|
||||
if c.size() > 1:
|
||||
leave = callv(c[0], c.slice(1, c.size() - 1))
|
||||
else:
|
||||
leave = callv(c[0], [])
|
||||
if nextc:
|
||||
_state.leave()
|
||||
if _stages[_state.stage_name].has("next_stage"):
|
||||
var next = _stages[_state.stage_name].next_stage
|
||||
_state = _stages[next].obj
|
||||
_state.activate()
|
||||
else:
|
||||
_state.finalize()
|
||||
_state = null
|
||||
queue_free()
|
||||
if leave:
|
||||
_state.finalize()
|
||||
_state = null
|
||||
queue_free()
|
||||
var main
|
||||
func _ready():
|
||||
main = SmartObjectState.new()
|
||||
BIN
proto3/godot/scenes/characters/teeth.png
Normal file
BIN
proto3/godot/scenes/characters/teeth.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 MiB |
36
proto3/godot/scenes/characters/teeth.png.import
Normal file
36
proto3/godot/scenes/characters/teeth.png.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path.s3tc="res://.import/teeth.png-d6f1c3b87461533d507186ee347e1628.s3tc.stex"
|
||||
path.etc2="res://.import/teeth.png-d6f1c3b87461533d507186ee347e1628.etc2.stex"
|
||||
metadata={
|
||||
"imported_formats": [ "s3tc", "etc2" ],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/characters/teeth.png"
|
||||
dest_files=[ "res://.import/teeth.png-d6f1c3b87461533d507186ee347e1628.s3tc.stex", "res://.import/teeth.png-d6f1c3b87461533d507186ee347e1628.etc2.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=true
|
||||
flags/filter=true
|
||||
flags/mipmaps=true
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
||||
BIN
proto3/godot/scenes/characters/tongue01_diffuse.png
Normal file
BIN
proto3/godot/scenes/characters/tongue01_diffuse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 611 KiB |
36
proto3/godot/scenes/characters/tongue01_diffuse.png.import
Normal file
36
proto3/godot/scenes/characters/tongue01_diffuse.png.import
Normal file
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path.s3tc="res://.import/tongue01_diffuse.png-1e5b4e69a407696ad7e313af1e409e13.s3tc.stex"
|
||||
path.etc2="res://.import/tongue01_diffuse.png-1e5b4e69a407696ad7e313af1e409e13.etc2.stex"
|
||||
metadata={
|
||||
"imported_formats": [ "s3tc", "etc2" ],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://scenes/characters/tongue01_diffuse.png"
|
||||
dest_files=[ "res://.import/tongue01_diffuse.png-1e5b4e69a407696ad7e313af1e409e13.s3tc.stex", "res://.import/tongue01_diffuse.png-1e5b4e69a407696ad7e313af1e409e13.etc2.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=true
|
||||
flags/filter=true
|
||||
flags/mipmaps=true
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=false
|
||||
svg/scale=1.0
|
||||
Reference in New Issue
Block a user