galo 2 年之前
父節點
當前提交
00b62a4d36

+ 1 - 1
.import/Attack3.png-1f15b1e6ab06ebdd7841e4dca298e9d1.md5

@@ -1,3 +1,3 @@
 source_md5="c1ef1185446a9f6eebbdbb0048b9b237"
-dest_md5="3ec34449d45a60073ae2ee13ae2a85ea"
+dest_md5="deca42a945bfea9a1ae9538eef2b8dfb"
 

二進制
.import/Attack3.png-1f15b1e6ab06ebdd7841e4dca298e9d1.stex


+ 1 - 1
.import/RPG_Weapons.png-97de14cb189cd105f9b6ae938870cb1c.md5

@@ -1,3 +1,3 @@
 source_md5="e44bac8df980ffd1154ec3eeb0881c99"
-dest_md5="f27435e556d3b43b7081b04c1d0f3013"
+dest_md5="3f5bad627a6fa1ff9fc64b8da51969cd"
 

二進制
.import/RPG_Weapons.png-97de14cb189cd105f9b6ae938870cb1c.stex


+ 3 - 0
.import/Untitledcxz.png-65da0d5ef82f00bd0a0d1a18cb710f50.md5

@@ -0,0 +1,3 @@
+source_md5="7a648df462c18476b0da7973bb207b88"
+dest_md5="aa1b7ae3a77ccfc7b1abe1bc4a80cac4"
+

二進制
.import/Untitledcxz.png-65da0d5ef82f00bd0a0d1a18cb710f50.stex


+ 1 - 1
.import/sword_2.png-cffff34f1b22d4d8285e05cc12a256ed.md5

@@ -1,3 +1,3 @@
 source_md5="763a5821abdd404a85c296a0a08c96be"
-dest_md5="aa6bf94324c0c6bb61b699dc1f82f518"
+dest_md5="3eeabce67aa4c42d914db8f39f1ea7cc"
 

二進制
.import/sword_2.png-cffff34f1b22d4d8285e05cc12a256ed.stex


+ 3 - 0
.import/txwkloma.bmp-91b3e8788a2a0cd238d3d16ad76cf48d.md5

@@ -0,0 +1,3 @@
+source_md5="638715b6a1efb96a91d0b41765987694"
+dest_md5="40c4d2b7ecd181d55a9d7da7387d9347"
+

二進制
.import/txwkloma.bmp-91b3e8788a2a0cd238d3d16ad76cf48d.stex


+ 3 - 0
.import/txwkloma.bmp-e9d20bed143c297e7102faf4cf8e44e6.md5

@@ -0,0 +1,3 @@
+source_md5="638715b6a1efb96a91d0b41765987694"
+dest_md5="40c4d2b7ecd181d55a9d7da7387d9347"
+

二進制
.import/txwkloma.bmp-e9d20bed143c297e7102faf4cf8e44e6.stex


+ 28 - 0
Enemy.gd

@@ -0,0 +1,28 @@
+extends KinematicBody2D
+
+var vida = 2
+var speed = 50
+
+func damage(arg):
+	print('dmg')
+	vida += arg
+	if vida == 0:queue_free()
+
+var motion = Vector2()
+var target
+onready var reaction_time = int(rand_range(60,120))
+
+func _ready():
+	var array = get_node('../../players').get_children()
+	array.shuffle()
+	target = array[0]
+	
+
+var dir_buffer = 0
+
+func _physics_process(delta):
+	if target == null: return
+	dir_buffer += 1
+	if fmod(dir_buffer,reaction_time) == 0:
+		motion = (target.global_position - global_position).normalized() * speed
+	move_and_slide(motion)

+ 13 - 0
Enemy.tscn

@@ -0,0 +1,13 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://Enemy.gd" type="Script" id=1]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+[node name="Enemy" type="KinematicBody2D"]
+collision_layer = 4
+collision_mask = 4
+script = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )

+ 1 - 1
art/Medieval_Castle_Asset_Pack/Decorations/sword_2.png.import

@@ -20,7 +20,7 @@ compress/hdr_mode=0
 compress/bptc_ldr=0
 compress/normal_map=0
 flags/repeat=0
-flags/filter=true
+flags/filter=false
 flags/mipmaps=false
 flags/anisotropic=false
 flags/srgb=2

二進制
art/Untitledcxz.png


+ 34 - 0
art/Untitledcxz.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Untitledcxz.png-65da0d5ef82f00bd0a0d1a18cb710f50.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://art/Untitledcxz.png"
+dest_files=[ "res://.import/Untitledcxz.png-65da0d5ef82f00bd0a0d1a18cb710f50.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+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=true
+svg/scale=1.0

+ 1 - 1
art/VAMPIRE SURVIVOR/ENEMIES/Attack3.png.import

@@ -20,7 +20,7 @@ compress/hdr_mode=0
 compress/bptc_ldr=0
 compress/normal_map=0
 flags/repeat=0
-flags/filter=true
+flags/filter=false
 flags/mipmaps=false
 flags/anisotropic=false
 flags/srgb=2

+ 1 - 1
art/VAMPIRE SURVIVOR/SPELLS/RPG_Weapons.png.import

@@ -20,7 +20,7 @@ compress/hdr_mode=0
 compress/bptc_ldr=0
 compress/normal_map=0
 flags/repeat=0
-flags/filter=true
+flags/filter=false
 flags/mipmaps=false
 flags/anisotropic=false
 flags/srgb=2

二進制
art/txwkloma.bmp


+ 34 - 0
art/txwkloma.bmp.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/txwkloma.bmp-91b3e8788a2a0cd238d3d16ad76cf48d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://art/txwkloma.bmp"
+dest_files=[ "res://.import/txwkloma.bmp-91b3e8788a2a0cd238d3d16ad76cf48d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+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=true
+svg/scale=1.0

+ 8 - 0
damage.gd

@@ -0,0 +1,8 @@
+extends Area2D
+func _on_Timer_timeout():
+	queue_free()
+	pass # Replace with function body.
+
+func _on_damage_player_body_entered(area):
+	area.damage(-1)
+	pass # Replace with function body.

+ 20 - 0
damage_player.tscn

@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://damage.gd" type="Script" id=1]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 70, 40 )
+
+[node name="damage_player" type="Area2D"]
+collision_layer = 0
+collision_mask = 2147483652
+script = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
+
+[node name="Timer" type="Timer" parent="."]
+wait_time = 0.1
+autostart = true
+[connection signal="body_entered" from="." to="." method="_on_damage_player_body_entered"]
+[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]

+ 32 - 0
enemie/goblin.tscn

@@ -0,0 +1,32 @@
+[gd_scene load_steps=7 format=2]
+
+[ext_resource path="res://art/Untitledcxz.png" type="Texture" id=1]
+
+[sub_resource type="AtlasTexture" id=4]
+atlas = ExtResource( 1 )
+region = Rect2( 0, 0, 150, 150 )
+
+[sub_resource type="AtlasTexture" id=5]
+atlas = ExtResource( 1 )
+region = Rect2( 150, 0, 150, 150 )
+
+[sub_resource type="AtlasTexture" id=6]
+atlas = ExtResource( 1 )
+region = Rect2( 300, 0, 150, 150 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 1 )
+region = Rect2( 450, 0, 150, 150 )
+
+[sub_resource type="SpriteFrames" id=3]
+animations = [ {
+"frames": [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ) ],
+"loop": true,
+"name": "default",
+"speed": 5.0
+} ]
+
+[node name="goblin" type="AnimatedSprite"]
+frames = SubResource( 3 )
+frame = 2
+playing = true

+ 6 - 2
main.tscn

@@ -1,10 +1,11 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=7 format=2]
 
 [ext_resource path="res://Client.gd" type="Script" id=1]
 [ext_resource path="res://Server.gd" type="Script" id=2]
 [ext_resource path="res://Database.gd" type="Script" id=3]
 [ext_resource path="res://ping.gd" type="Script" id=4]
 [ext_resource path="res://Input.gd" type="Script" id=5]
+[ext_resource path="res://spawner.gd" type="Script" id=6]
 
 [node name="Node" type="Node"]
 
@@ -14,7 +15,10 @@ database = NodePath("../Database")
 
 [node name="players" type="Node" parent="Server"]
 
-[node name="entities" type="Node" parent="Server"]
+[node name="enemies" type="Node" parent="Server"]
+script = ExtResource( 6 )
+
+[node name="dmgbox" type="Node" parent="Server"]
 
 [node name="Client" type="Node" parent="."]
 script = ExtResource( 1 )

+ 22 - 0
playerphysics.gd

@@ -7,7 +7,29 @@ var motion = Vector2()
 func _ready():
 	print('generated clinet physics of id: ' + name)
 
+var attacks = ['melee']
+
+var damage = preload('res://damage_player.tscn')
+
+var attack_buffers = {'melee':0}
+var vida = 100
+
+func damage(arg):
+	vida += arg
+
+var sidebuffer = true
+
+func melee():
+	attack_buffers.melee += 1
+	if fmod(attack_buffers.melee,45) == 0:
+		var newdmg = damage.instance()
+		newdmg.global_position = global_position + (Vector2(70,0) if sidebuffer else Vector2(-70,0))
+		get_node('../../dmgbox').add_child(newdmg)
+
 func _physics_process(delta):
+	if motion.x != 0: sidebuffer = motion.x > 0
+	for i in attacks:
+		funcref(self,i).call_func()
 	match input:
 		"ui_down":
 			motion.y = 100

+ 0 - 1
playersprite.tscn

@@ -129,6 +129,5 @@ animations = [ {
 [node name="playersprite" type="AnimatedSprite"]
 frames = SubResource( 27 )
 animation = "idle"
-frame = 3
 playing = true
 offset = Vector2( 3.72692, -21.0081 )

+ 7 - 0
project.godot

@@ -16,6 +16,7 @@ _global_script_class_icons={
 [application]
 
 config/name="vampirezombiresurvivorsouls"
+run/main_scene="res://main.tscn"
 config/icon="res://icon.png"
 
 [display]
@@ -27,6 +28,12 @@ window/size/test_height=720
 window/stretch/mode="viewport"
 window/stretch/aspect="keep"
 
+[layer_names]
+
+2d_physics/layer_1="physics"
+2d_physics/layer_2="player"
+2d_physics/layer_3="enemy"
+
 [rendering]
 
 quality/driver/driver_name="GLES2"

+ 14 - 0
spawner.gd

@@ -0,0 +1,14 @@
+extends Node
+
+var enemy = preload('res://Enemy.tscn')
+export var wave_num = 10
+
+func _ready():
+	yield(get_tree().create_timer(1.0),"timeout")
+	while true:
+		for x in wave_num:
+			var instance = enemy.instance()
+			var rot = rand_range(-PI,PI)
+			instance.global_position = Vector2(sin(rot), cos(rot)) * 640
+			add_child(instance)
+		yield(get_tree().create_timer(10.0),"timeout")

+ 141 - 0
weapons/sword1.tscn

@@ -0,0 +1,141 @@
+[gd_scene load_steps=8 format=2]
+
+[ext_resource path="res://art/txwkloma.bmp" type="Texture" id=1]
+[ext_resource path="res://art/VAMPIRE SURVIVOR/SPELLS/RPG_Weapons.png" type="Texture" id=2]
+
+[sub_resource type="Shader" id=1]
+code = "shader_type canvas_item;
+render_mode blend_mix;
+
+"
+
+[sub_resource type="ShaderMaterial" id=2]
+shader = SubResource( 1 )
+
+[sub_resource type="AtlasTexture" id=3]
+atlas = ExtResource( 2 )
+region = Rect2( 41, 31, 48, 67 )
+
+[sub_resource type="Animation" id=4]
+resource_name = "attack1"
+length = 0.5
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("RPG_Weapons:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ -47.1622, 254.261 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("txwkloma:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.05, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 70, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("txwkloma:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.05, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("RPG_Weapons:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 24.7487, -25.1023 ), Vector2( -9.54593, 19.799 ) ]
+}
+
+[sub_resource type="Animation" id=5]
+resource_name = "attack2"
+length = 0.5
+step = 0.05
+tracks/0/type = "value"
+tracks/0/path = NodePath("RPG_Weapons:rotation_degrees")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ 254.261, -47.1622 ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath("txwkloma:position")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0.05, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( 0, 0 ), Vector2( 70, 0 ) ]
+}
+tracks/2/type = "value"
+tracks/2/path = NodePath("txwkloma:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 0.05, 0.2 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
+}
+tracks/3/type = "value"
+tracks/3/path = NodePath("RPG_Weapons:position")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/keys = {
+"times": PoolRealArray( 0, 0.15 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Vector2( -9.54593, 19.799 ), Vector2( 24.7487, -25.1023 ) ]
+}
+
+[node name="weapon" type="Node2D"]
+
+[node name="RPG_Weapons" type="Sprite" parent="."]
+material = SubResource( 2 )
+position = Vector2( -9.54593, 19.799 )
+rotation = 4.43769
+texture = SubResource( 3 )
+offset = Vector2( 0.754765, -30.8505 )
+region_rect = Rect2( 47, 35, 36, 68 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/attack1 = SubResource( 4 )
+anims/attack2 = SubResource( 5 )
+
+[node name="txwkloma" type="Sprite" parent="."]
+scale = Vector2( 2, 2 )
+texture = ExtResource( 1 )