diff --git a/graphics/backgrounds/fire.png b/graphics/backgrounds/fire.png new file mode 100644 index 0000000..e3e70ce Binary files /dev/null and b/graphics/backgrounds/fire.png differ diff --git a/graphics/backgrounds/fire.png.import b/graphics/backgrounds/fire.png.import new file mode 100644 index 0000000..216239a --- /dev/null +++ b/graphics/backgrounds/fire.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/fire.png-1a6113db082c73e88b91aa92d46ef1c6.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/backgrounds/fire.png" +dest_files=[ "res://.import/fire.png-1a6113db082c73e88b91aa92d46ef1c6.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 +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/objects/enemy/death_particles_big.gd b/objects/enemy/death_particles_big.gd new file mode 100644 index 0000000..f9e15c7 --- /dev/null +++ b/objects/enemy/death_particles_big.gd @@ -0,0 +1,20 @@ +extends CPUParticles2D + + +const BloodSpray := preload("res://objects/environment/blood/blood_spray_big.tscn") + + +export var spray_ammount: int = 1 +export var spray_velocity: float = 120 +export var autoplay: bool = false + + +func _ready() -> void: + if autoplay: + emitting = true + yield(get_tree(), "idle_frame") + for i in spray_ammount: + var spray = BloodSpray.instance() + spray.global_position = global_position + spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * (TAU / 45)) + get_parent().add_child(spray) diff --git a/objects/enemy/death_particles_big.tscn b/objects/enemy/death_particles_big.tscn new file mode 100644 index 0000000..035dc72 --- /dev/null +++ b/objects/enemy/death_particles_big.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://graphics/particles/blood.png" type="Texture" id=1] +[ext_resource path="res://objects/enemy/death_particles_big.gd" type="Script" id=2] + +[sub_resource type="Curve" id=43] +_data = [ Vector2( 0, 1 ), 0.0, -0.113537, 0, 0, Vector2( 1, 0 ), -3.35032, 0.0, 0, 0 ] + +[node name="DeathSplatter" type="CPUParticles2D"] +emitting = false +amount = 32 +lifetime = 0.3 +one_shot = true +explosiveness = 0.9 +local_coords = false +texture = ExtResource( 1 ) +emission_shape = 2 +emission_rect_extents = Vector2( 4, 4 ) +direction = Vector2( 0, -1 ) +spread = 180.0 +gravity = Vector2( 0, 50 ) +initial_velocity = 60.0 +initial_velocity_random = 0.9 +damping = 2.0 +angle = 720.0 +angle_random = 1.0 +scale_amount = 0.5 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 43 ) +script = ExtResource( 2 ) diff --git a/objects/environment/blood/blood_spray_big.gd b/objects/environment/blood/blood_spray_big.gd new file mode 100644 index 0000000..382c9d9 --- /dev/null +++ b/objects/environment/blood/blood_spray_big.gd @@ -0,0 +1,42 @@ +extends Area2D + + +const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn") +const PlayerStain := preload("res://objects/player/player_stain.tscn") + + +export var color: Color +export var stains_player: bool = true + + +var velocity := Vector2.ZERO + + +onready var sprite: Sprite = $Sprite + + +func _ready() -> void: + sprite.self_modulate = color + + +func _physics_process(delta: float) -> void: + velocity.y += 98.0 * delta + position += velocity * delta + sprite.global_rotation = velocity.angle() + + +func _on_body_entered(body: Node) -> void: + if body.is_in_group("can_stain"): + var stain = BloodStain.instance() + stain.modulate = color + stain.global_position = global_position + StainLayer.add_stain(stain) + queue_free() + elif body is TileMap: + queue_free() + elif stains_player and body.is_in_group("player"): + var stain = PlayerStain.instance() + stain.color = color + body.get_node("Graphics/Sprite").add_child(stain) + stain.global_position = global_position + queue_free() diff --git a/objects/environment/blood/blood_spray_big.tscn b/objects/environment/blood/blood_spray_big.tscn new file mode 100644 index 0000000..26d0e21 --- /dev/null +++ b/objects/environment/blood/blood_spray_big.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://graphics/particles/famira_blood.png" type="Texture" id=1] +[ext_resource path="res://objects/environment/blood/blood_spray_big.gd" type="Script" id=2] + +[sub_resource type="CircleShape2D" id=1] +radius = 0.5 + +[node name="BloodSpray" type="Area2D"] +collision_mask = 129 +script = ExtResource( 2 ) +color = Color( 0.701961, 0.745098, 0.4, 1 ) + +[node name="Sprite" type="Sprite" parent="."] +scale = Vector2( 0.75, 0.5 ) +texture = ExtResource( 1 ) +offset = Vector2( 2, 0 ) +flip_h = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/objects/environment/test_fire/test_fire.tscn b/objects/environment/test_fire/test_fire.tscn new file mode 100644 index 0000000..ae6b1b0 --- /dev/null +++ b/objects/environment/test_fire/test_fire.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://graphics/backgrounds/fire.png" type="Texture" id=1] +[ext_resource path="res://shaders/fire.gdshader" type="Shader" id=2] + +[sub_resource type="ShaderMaterial" id=1] +shader = ExtResource( 2 ) + +[node name="Node2D" type="Node2D"] + +[node name="ColorRect" type="ColorRect" parent="."] +margin_right = 256.0 +margin_bottom = 192.0 +color = Color( 0, 0, 0, 1 ) + +[node name="Fire" type="Sprite" parent="."] +material = SubResource( 1 ) +position = Vector2( 144, 96 ) +scale = Vector2( 2.02667, 1 ) +texture = ExtResource( 1 ) diff --git a/shaders/fire.gdshader b/shaders/fire.gdshader new file mode 100644 index 0000000..35c2f5f --- /dev/null +++ b/shaders/fire.gdshader @@ -0,0 +1,5 @@ +shader_type canvas_item; + +void fragment() { + COLOR = texture(TEXTURE, vec2(UV.x + sin(TIME / 2.5 + UV.y*6.0)/30.0,UV.y)); +} \ No newline at end of file