proto3 initial commit
This commit is contained in:
Binary file not shown.
@@ -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" ]
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 596 KiB |
@@ -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
|
||||
@@ -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
|
||||
@@ -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 )
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
@@ -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
|
||||
@@ -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)
|
||||
@@ -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 )]
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
@@ -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 )]
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -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()
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.7 MiB |
@@ -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
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 611 KiB |
@@ -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