DONT JUDGE ME
parent
838de303e4
commit
fbf2657995
|
@ -5,7 +5,7 @@ var action_name: String
|
||||||
var damages: int
|
var damages: int
|
||||||
var rune = null
|
var rune = null
|
||||||
|
|
||||||
func _init(rune, action_name, damages):
|
func _init(rune, action_name, damages=0):
|
||||||
self.rune = rune
|
self.rune = rune
|
||||||
self.action_name = action_name
|
self.action_name = action_name
|
||||||
self.damages = damages
|
self.damages = damages
|
||||||
|
@ -15,3 +15,4 @@ func _ready():
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,24 @@ func _init(actor_name: String):
|
||||||
self.give_rune('def')
|
self.give_rune('def')
|
||||||
self.give_rune('ini')
|
self.give_rune('ini')
|
||||||
|
|
||||||
|
func execute_action():
|
||||||
|
var target_rune = null
|
||||||
|
|
||||||
|
for rune in self.runes:
|
||||||
|
if rune.state.ap > 0 and (target_rune == null or rune.state.ap > target_rune.state.ap):
|
||||||
|
target_rune = rune
|
||||||
|
|
||||||
|
if target_rune:
|
||||||
|
target_rune.state.ap -= 1
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
|
|
||||||
func hurt(damages):
|
func hurt(damages):
|
||||||
var target_rune = null
|
var target_rune = null
|
||||||
|
|
||||||
for rune in self.runes:
|
for rune in self.runes:
|
||||||
if rune.state.hp > 0 and (target_rune == null or rune.state.hp < target_rune.state.hp):
|
if rune.state.hp > 0 and (target_rune == null or rune.state.hp > target_rune.state.hp):
|
||||||
target_rune = rune
|
target_rune = rune
|
||||||
|
|
||||||
if target_rune:
|
if target_rune:
|
||||||
|
@ -60,7 +73,7 @@ func get_ap() -> int:
|
||||||
for rune in self.runes:
|
for rune in self.runes:
|
||||||
if rune.has_slot():
|
if rune.has_slot():
|
||||||
res = max(res, rune.state.ap)
|
res = max(res, rune.state.ap)
|
||||||
return res
|
return max(1, res)
|
||||||
|
|
||||||
func get_atk() -> int:
|
func get_atk() -> int:
|
||||||
var res = 0
|
var res = 0
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
extends Node
|
||||||
|
class_name Effect
|
||||||
|
|
||||||
|
class Base:
|
||||||
|
var rune = null
|
||||||
|
|
||||||
|
func _init(_rune):
|
||||||
|
self.rune = _rune
|
||||||
|
|
||||||
|
func exec():
|
||||||
|
pass
|
||||||
|
|
||||||
|
class IncrAp:
|
||||||
|
extends Base
|
||||||
|
|
||||||
|
func _init(_rune):
|
||||||
|
super(_rune)
|
||||||
|
|
||||||
|
func exec():
|
||||||
|
self.rune.state.ap += 1
|
|
@ -7,12 +7,16 @@ var slot: int
|
||||||
const NO_SLOT = -1
|
const NO_SLOT = -1
|
||||||
var actions: Array = []
|
var actions: Array = []
|
||||||
var actor: Actor
|
var actor: Actor
|
||||||
|
var pre_fx = null
|
||||||
|
var post_fx = null
|
||||||
|
# TODO appli consume AP
|
||||||
func _init(actor, rune_name, state: State):
|
func _init(actor, rune_name, state: State):
|
||||||
self.actor = actor
|
self.actor = actor
|
||||||
self.rune_name = rune_name
|
self.rune_name = rune_name
|
||||||
self.state = state
|
self.state = state
|
||||||
self.slot = NO_SLOT
|
self.slot = NO_SLOT
|
||||||
|
self.pre_fx = Effect.Base.new(self)
|
||||||
|
self.post_fx = Effect.Base.new(self)
|
||||||
|
|
||||||
func set_slot(slot: int):
|
func set_slot(slot: int):
|
||||||
self.slot = slot
|
self.slot = slot
|
||||||
|
@ -28,3 +32,4 @@ func has_action(action):
|
||||||
if a == action:
|
if a == action:
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,9 @@ func _init():
|
||||||
hp.add_action(Action.new(hp, 'Frappe I', 4))
|
hp.add_action(Action.new(hp, 'Frappe I', 4))
|
||||||
hp.add_action(Action.new(hp, 'Frappe II', 40))
|
hp.add_action(Action.new(hp, 'Frappe II', 40))
|
||||||
hp.add_action(Action.new(hp, 'Frappe III', 75))
|
hp.add_action(Action.new(hp, 'Frappe III', 75))
|
||||||
add_rune('ap', State.new(0, 1, 0, 0, 0))
|
|
||||||
|
var ap = add_rune('ap', State.new(0, 1, 0, 0, 0))
|
||||||
|
ap.pre_fx = Effect.IncrAp.new(ap)
|
||||||
add_rune('atk', State.new(0, 0, 2, 0, 0))
|
add_rune('atk', State.new(0, 0, 2, 0, 0))
|
||||||
add_rune('def', State.new(0, 0, 0, 1, 0))
|
add_rune('def', State.new(0, 0, 0, 1, 0))
|
||||||
add_rune('ini', State.new(0, 0, 0, 0, 1))
|
add_rune('ini', State.new(0, 0, 0, 0, 1))
|
||||||
|
|
|
@ -2,8 +2,11 @@ extends Node
|
||||||
|
|
||||||
var actor: Actor
|
var actor: Actor
|
||||||
var rune_slots
|
var rune_slots
|
||||||
|
var timer = 0.0
|
||||||
|
var time = 2.0
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
|
if self.timer >= self.time:
|
||||||
if Gturn.current_turn == Gturn.TURN.AI:
|
if Gturn.current_turn == Gturn.TURN.AI:
|
||||||
if Gturn.current_phase == Gturn.PHASE.RUNES:
|
if Gturn.current_phase == Gturn.PHASE.RUNES:
|
||||||
self.place_runes()
|
self.place_runes()
|
||||||
|
@ -11,6 +14,9 @@ func _process(delta):
|
||||||
elif Gturn.current_phase == Gturn.PHASE.ACTIONS:
|
elif Gturn.current_phase == Gturn.PHASE.ACTIONS:
|
||||||
self.select_actions()
|
self.select_actions()
|
||||||
Gturn.next_phase()
|
Gturn.next_phase()
|
||||||
|
self.timer = 0.0
|
||||||
|
self.time = randf_range(2.0, 3.0)
|
||||||
|
self.timer += delta
|
||||||
|
|
||||||
|
|
||||||
func can_place_rune_in_slot(slot):
|
func can_place_rune_in_slot(slot):
|
||||||
|
|
|
@ -25,7 +25,6 @@ func _ready():
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func next_phase():
|
func next_phase():
|
||||||
if self.current_phase == PHASE.RUNES and self.current_turn == TURN.PLAYER:
|
if self.current_phase == PHASE.RUNES and self.current_turn == TURN.PLAYER:
|
||||||
self.current_turn = TURN.AI
|
self.current_turn = TURN.AI
|
||||||
|
@ -35,9 +34,13 @@ func next_phase():
|
||||||
elif self.current_phase == PHASE.ACTIONS and self.current_turn == TURN.PLAYER:
|
elif self.current_phase == PHASE.ACTIONS and self.current_turn == TURN.PLAYER:
|
||||||
self.current_turn = TURN.AI
|
self.current_turn = TURN.AI
|
||||||
elif self.current_phase == PHASE.ACTIONS and self.current_turn == TURN.AI:
|
elif self.current_phase == PHASE.ACTIONS and self.current_turn == TURN.AI:
|
||||||
|
self.turn_end()
|
||||||
|
|
||||||
self.current_turn = TURN.PLAYER
|
self.current_turn = TURN.PLAYER
|
||||||
self.current_phase = PHASE.RUNES
|
self.current_phase = PHASE.RUNES
|
||||||
|
|
||||||
self.resolve()
|
self.resolve()
|
||||||
|
self.turn_start()
|
||||||
|
|
||||||
func add_action(action):
|
func add_action(action):
|
||||||
self.current_actions.push_back(action)
|
self.current_actions.push_back(action)
|
||||||
|
@ -61,3 +64,10 @@ func resolve():
|
||||||
elif Gactor.current_enemy.is_dead():
|
elif Gactor.current_enemy.is_dead():
|
||||||
print('PLAYER WON')
|
print('PLAYER WON')
|
||||||
|
|
||||||
|
func turn_start():
|
||||||
|
for rune in Gactor.player.runes:
|
||||||
|
if rune.pre_fx != null:
|
||||||
|
rune.pre_fx.exec()
|
||||||
|
|
||||||
|
func turn_end():
|
||||||
|
pass
|
||||||
|
|
|
@ -112,21 +112,23 @@ func point_to_rune(point):
|
||||||
return self.actor.get_rune_by_slot(slot)
|
return self.actor.get_rune_by_slot(slot)
|
||||||
|
|
||||||
func _draw():
|
func _draw():
|
||||||
draw_circle(self.center, self.rad, Color.DARK_RED)
|
#draw_circle(self.center, self.rad, Color.DARK_RED)
|
||||||
|
var width = 2
|
||||||
|
|
||||||
for point in self.points:
|
for point in self.points:
|
||||||
var slot_color = Color.DARK_RED
|
var slot_color = Color(0, 0, 0, 0)
|
||||||
var slot = self.point_to_slot(point)
|
var slot = self.point_to_slot(point)
|
||||||
if self.actor.get_rune_by_slot(slot) != null:
|
if self.actor.get_rune_by_slot(slot) != null:
|
||||||
slot_color = Color.BLACK
|
slot_color = Color.BLACK
|
||||||
elif self.get_current_point() == point \
|
elif self.get_current_point() == point \
|
||||||
and self.actor == Gactor.player:
|
and self.actor == Gactor.player:
|
||||||
slot_color = Color.RED
|
slot_color = Color.RED
|
||||||
|
width = 4
|
||||||
|
|
||||||
draw_circle(point, slot_rad, slot_color)
|
draw_circle(point, slot_rad, slot_color)
|
||||||
|
|
||||||
var color = Color.RED
|
var color = Color.RED
|
||||||
var width = 1
|
|
||||||
draw_line(self.A, self.C, color, width)
|
draw_line(self.A, self.C, color, width)
|
||||||
draw_line(self.A, self.D, color, width)
|
draw_line(self.A, self.D, color, width)
|
||||||
draw_line(self.B, self.E, color, width)
|
draw_line(self.B, self.E, color, width)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
Binary file not shown.
|
@ -0,0 +1,43 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
var pentagram: Pentagram
|
||||||
|
var runes: Array
|
||||||
|
var drag = false
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
self.pentagram = Pentagram.new()
|
||||||
|
add_child(self.pentagram)
|
||||||
|
|
||||||
|
for idx in self.pentagram.indexes:
|
||||||
|
var x = randf_range(0, 512)
|
||||||
|
var y = randf_range(0, 512)
|
||||||
|
add_rune(Vector2(x, y), Color.DARK_RED, idx)
|
||||||
|
|
||||||
|
func add_rune(pos, color, idx):
|
||||||
|
var rune = Rune.new(color, idx)
|
||||||
|
add_child(rune)
|
||||||
|
self.runes.push_back(rune)
|
||||||
|
rune.global_position = pos
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
var mouse = get_global_mouse_position()
|
||||||
|
|
||||||
|
for r in self.runes:
|
||||||
|
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and not self.drag:
|
||||||
|
if mouse.distance_squared_to(r.global_position) <= r.radius * r.radius:
|
||||||
|
r.drag = true
|
||||||
|
r.matches = false
|
||||||
|
r.queue_redraw()
|
||||||
|
self.drag = true
|
||||||
|
else:
|
||||||
|
r.drag = false
|
||||||
|
self.drag = false
|
||||||
|
|
||||||
|
if not r.drag:
|
||||||
|
r.global_position = self.pentagram.snap(r.global_position, 96)
|
||||||
|
if self.pentagram.snaped:
|
||||||
|
r.matches = self.pentagram.snap_addr == r.idx
|
||||||
|
r.queue_redraw()
|
||||||
|
|
||||||
|
else:
|
||||||
|
r.global_position = mouse
|
|
@ -0,0 +1,6 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://do7m3jpru3vjx"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Game/game.gd" id="1_ktaw1"]
|
||||||
|
|
||||||
|
[node name="Game" type="Node2D"]
|
||||||
|
script = ExtResource("1_ktaw1")
|
|
@ -0,0 +1,65 @@
|
||||||
|
extends Node2D
|
||||||
|
class_name Pentagram
|
||||||
|
|
||||||
|
var A: Vector2
|
||||||
|
var B: Vector2
|
||||||
|
var C: Vector2
|
||||||
|
var D: Vector2
|
||||||
|
var E: Vector2
|
||||||
|
var center: Vector2
|
||||||
|
var radius: int
|
||||||
|
var points: Array
|
||||||
|
var indexes: Array
|
||||||
|
var snaped = false
|
||||||
|
var snap_addr = 0
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
self.refresh()
|
||||||
|
get_viewport().size_changed.connect(self.refresh)
|
||||||
|
self.indexes = [
|
||||||
|
0, 1, 2, 3, 4
|
||||||
|
]
|
||||||
|
|
||||||
|
func refresh():
|
||||||
|
var view = get_viewport()
|
||||||
|
self.radius = 256
|
||||||
|
self.center = view.size/2
|
||||||
|
var x = -PI/5
|
||||||
|
var y = -PI/16
|
||||||
|
self.A = self.center + self.get_point(-PI/2 - x) * self.radius
|
||||||
|
self.B = self.center + self.get_point(0 - y) * self.radius
|
||||||
|
self.C = self.center + self.get_point(PI/2) * self.radius
|
||||||
|
self.D = self.center + self.get_point(PI + y) * self.radius
|
||||||
|
self.E = self.center + self.get_point(-PI/2 + x) * self.radius
|
||||||
|
self.points = [self.A, self.B, self.C, self.D, self.E]
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
# draw_circle(self.center, self.radius, Color.BLACK)
|
||||||
|
var w = 8
|
||||||
|
draw_line(self.A, self.C, Color.DARK_RED, w)
|
||||||
|
draw_line(self.C, self.E, Color.DARK_RED, w)
|
||||||
|
draw_line(self.E, self.B, Color.DARK_RED, w)
|
||||||
|
draw_line(self.B, self.D, Color.DARK_RED, w)
|
||||||
|
draw_line(self.D, self.A, Color.DARK_RED, w)
|
||||||
|
|
||||||
|
func get_point(angle):
|
||||||
|
return Vector2(cos(angle), sin(angle))
|
||||||
|
|
||||||
|
func nearest(rune):
|
||||||
|
var point = null
|
||||||
|
var dist = null
|
||||||
|
for pts in self.points:
|
||||||
|
var d = rune.distance_squared_to(pts)
|
||||||
|
if dist == null or dist < d:
|
||||||
|
dist = d
|
||||||
|
point = pts
|
||||||
|
return point
|
||||||
|
|
||||||
|
func snap(pos: Vector2, dist):
|
||||||
|
self.snaped = false
|
||||||
|
for pts in self.points:
|
||||||
|
if pos.distance_squared_to(pts) < dist * dist:
|
||||||
|
self.snaped = true
|
||||||
|
self.snap_addr = self.points.find(pts)
|
||||||
|
return pts
|
||||||
|
return pos
|
|
@ -0,0 +1,30 @@
|
||||||
|
extends Node2D
|
||||||
|
class_name Rune
|
||||||
|
|
||||||
|
var radius = 24
|
||||||
|
var drag = false
|
||||||
|
var color: Color
|
||||||
|
var idx: int
|
||||||
|
var matches = false
|
||||||
|
|
||||||
|
func _init(_color, _index):
|
||||||
|
self.color = _color
|
||||||
|
self.idx = _index
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
var loc = to_local(self.global_position)
|
||||||
|
draw_circle(loc, self.radius, self.color)
|
||||||
|
|
||||||
|
#draw_char(
|
||||||
|
# preload("res://Assets/NotoMono-Regular.ttf"),
|
||||||
|
# loc - Vector2(self.sz/4, -self.sz/4),
|
||||||
|
# self.letter,
|
||||||
|
# sz,
|
||||||
|
# Color.RED
|
||||||
|
#)
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
pass
|
|
@ -0,0 +1 @@
|
||||||
|
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
After Width: | Height: | Size: 950 B |
|
@ -0,0 +1,21 @@
|
||||||
|
; Engine configuration file.
|
||||||
|
; It's best edited using the editor UI and not directly,
|
||||||
|
; since the parameters that go here are not all obvious.
|
||||||
|
;
|
||||||
|
; Format:
|
||||||
|
; [section] ; section goes between []
|
||||||
|
; param=value ; assign values to parameters
|
||||||
|
|
||||||
|
config_version=5
|
||||||
|
|
||||||
|
[application]
|
||||||
|
|
||||||
|
config/name="LD 55"
|
||||||
|
run/main_scene="res://Game/game.tscn"
|
||||||
|
config/features=PackedStringArray("4.2", "GL Compatibility")
|
||||||
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[rendering]
|
||||||
|
|
||||||
|
renderer/rendering_method="gl_compatibility"
|
||||||
|
renderer/rendering_method.mobile="gl_compatibility"
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
|
@ -0,0 +1,44 @@
|
||||||
|
extends CharacterBody2D
|
||||||
|
class_name Actor
|
||||||
|
|
||||||
|
@export var auto_die = false
|
||||||
|
@export var player = false
|
||||||
|
|
||||||
|
var state = null
|
||||||
|
const SPEED = 400
|
||||||
|
var vel: Vector2 = Vector2(0, 0)
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
if self.auto_die:
|
||||||
|
self.set_state(ActorExplode.new(self))
|
||||||
|
|
||||||
|
func _physics_process(_delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
func set_state(new_state):
|
||||||
|
if self.state != null:
|
||||||
|
remove_child(self.state)
|
||||||
|
self.state = new_state
|
||||||
|
if self.state:
|
||||||
|
add_child(self.state)
|
||||||
|
|
||||||
|
func sprite() -> AnimatedSprite2D:
|
||||||
|
return $AnimatedSprite2D
|
||||||
|
|
||||||
|
func explode():
|
||||||
|
sprite().visible = false
|
||||||
|
$CPUParticles2D.restart()
|
||||||
|
|
||||||
|
func anim_walk():
|
||||||
|
sprite().animation = 'walk'
|
||||||
|
if not sprite().is_playing():
|
||||||
|
sprite().play()
|
||||||
|
|
||||||
|
func anim_idle():
|
||||||
|
sprite().animation = 'idle'
|
||||||
|
if not sprite().is_playing():
|
||||||
|
sprite().play()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_cpu_particles_2d_finished():
|
||||||
|
self.queue_free()
|
|
@ -0,0 +1,43 @@
|
||||||
|
[gd_scene load_steps=6 format=3 uid="uid://chsmfcu2ww1rf"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Actor/actor.gd" id="1_idlnt"]
|
||||||
|
[ext_resource type="Texture2D" path="res://Assets/particle.png" id="3_303hw"]
|
||||||
|
[ext_resource type="SpriteFrames" uid="uid://qasmquyomf8y" path="res://Actor/sprite_frames.tres" id="3_svw0v"]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_4na4j"]
|
||||||
|
radius = 34.1321
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id="Gradient_qb1gn"]
|
||||||
|
offsets = PackedFloat32Array(0.048433, 0.940171)
|
||||||
|
colors = PackedColorArray(0.929412, 0, 0, 1, 1, 1, 0, 1)
|
||||||
|
|
||||||
|
[node name="Actor" type="CharacterBody2D" groups=["actors"]]
|
||||||
|
script = ExtResource("1_idlnt")
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
shape = SubResource("CircleShape2D_4na4j")
|
||||||
|
|
||||||
|
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||||
|
sprite_frames = ExtResource("3_svw0v")
|
||||||
|
animation = &"walk"
|
||||||
|
frame_progress = 0.999143
|
||||||
|
|
||||||
|
[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
|
||||||
|
emitting = false
|
||||||
|
amount = 64
|
||||||
|
lifetime = 0.2
|
||||||
|
one_shot = true
|
||||||
|
speed_scale = 8.0
|
||||||
|
explosiveness = 0.39
|
||||||
|
randomness = 0.32
|
||||||
|
texture = ExtResource("3_303hw")
|
||||||
|
emission_shape = 4
|
||||||
|
emission_points = PackedVector2Array()
|
||||||
|
emission_colors = PackedColorArray()
|
||||||
|
spread = 180.0
|
||||||
|
gravity = Vector2(0, 0)
|
||||||
|
initial_velocity_min = 366.83
|
||||||
|
initial_velocity_max = 814.07
|
||||||
|
color_ramp = SubResource("Gradient_qb1gn")
|
||||||
|
|
||||||
|
[connection signal="finished" from="CPUParticles2D" to="." method="_on_cpu_particles_2d_finished"]
|
|
@ -0,0 +1,66 @@
|
||||||
|
extends ActorState
|
||||||
|
class_name ActorConvulse
|
||||||
|
|
||||||
|
var time = 0.7
|
||||||
|
var timer = 0.0
|
||||||
|
var initial_scale: Vector2
|
||||||
|
var current_scale: Vector2
|
||||||
|
|
||||||
|
func _init(_actor):
|
||||||
|
super(_actor)
|
||||||
|
self.initial_scale = actor.sprite().scale
|
||||||
|
self.current_scale = self.initial_scale
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
func _exit_tree():
|
||||||
|
self.actor.sprite().scale = self.initial_scale
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta):
|
||||||
|
self.actor.sprite().scale = Vector2(0.2, 0.2) * (sin(self.timer*delta*8000) + 1.0)/2.0 \
|
||||||
|
+ self.current_scale
|
||||||
|
self.current_scale += Vector2(1, 1) * delta * 0.1
|
||||||
|
|
||||||
|
if self.timer > self.time:
|
||||||
|
var found = false
|
||||||
|
for penta in get_tree().get_nodes_in_group('pentagrams'):
|
||||||
|
if penta.position.distance_to(self.actor.position) <= Gstate.possess_dist:
|
||||||
|
if penta.try_activate():
|
||||||
|
Gstate.won_level = true
|
||||||
|
|
||||||
|
var n_actor = null
|
||||||
|
var others: Array = []
|
||||||
|
|
||||||
|
for next_actor in get_tree().get_nodes_in_group('actors'):
|
||||||
|
if next_actor == self.actor:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if next_actor.position.distance_to(self.actor.position) <= Gstate.possess_dist:
|
||||||
|
var next_dist = next_actor.position.distance_to(self.actor.position)
|
||||||
|
others.push_back(next_actor)
|
||||||
|
if n_actor == null or n_actor.position.distance_to(self.actor.position) > next_dist:
|
||||||
|
n_actor = next_actor
|
||||||
|
|
||||||
|
if n_actor:
|
||||||
|
others.remove_at(others.find(n_actor))
|
||||||
|
for o in others:
|
||||||
|
o.set_state(ActorExplode.new(o))
|
||||||
|
n_actor.set_state(ActorPossessed.new(n_actor))
|
||||||
|
n_actor.player = true
|
||||||
|
Gstate.kill(n_actor)
|
||||||
|
found = true
|
||||||
|
|
||||||
|
|
||||||
|
if not found:
|
||||||
|
Gstate.kill(null)
|
||||||
|
|
||||||
|
self.actor.set_state(null)
|
||||||
|
self.actor.explode()
|
||||||
|
|
||||||
|
self.timer += delta
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
pass#draw_circle(to_local(self.actor.global_position), Gstate.possess_dist, Color(0.5, 0.0, 0.0, 0.1))
|
|
@ -0,0 +1,25 @@
|
||||||
|
extends ActorState
|
||||||
|
class_name ActorDie
|
||||||
|
|
||||||
|
var time = 2
|
||||||
|
var timer = 0.0
|
||||||
|
var current_scale: Vector2
|
||||||
|
|
||||||
|
func _init(_actor):
|
||||||
|
super(_actor)
|
||||||
|
self.current_scale = actor.sprite().scale
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
self.actor.sprite().scale = Vector2(0.2, 0.2) * (sin(self.timer*delta*8000) + 1.0)/2.0 \
|
||||||
|
+ self.current_scale
|
||||||
|
self.current_scale -= Vector2(1, 1) * delta * 0.3
|
||||||
|
self.current_scale.x = max(0, self.current_scale.x)
|
||||||
|
self.current_scale.y = max(0, self.current_scale.y)
|
||||||
|
if self.timer > self.time:
|
||||||
|
if self.actor.player:
|
||||||
|
get_tree().change_scene_to_file('res://GameOver/game_over.tscn')
|
||||||
|
return
|
||||||
|
self.actor.set_state(null)
|
||||||
|
self.actor.queue_free()
|
||||||
|
|
||||||
|
self.timer += delta
|
|
@ -0,0 +1,21 @@
|
||||||
|
extends ActorState
|
||||||
|
class_name ActorExplode
|
||||||
|
|
||||||
|
var time = 1
|
||||||
|
var timer = 0.0
|
||||||
|
var current_scale: Vector2
|
||||||
|
|
||||||
|
func _init(_actor):
|
||||||
|
super(_actor)
|
||||||
|
self.current_scale = actor.sprite().scale
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
self.actor.sprite().scale = Vector2(0.1, 0.1) * (sin(self.timer*delta*10000) + 1.0)/2.0 \
|
||||||
|
+ self.current_scale
|
||||||
|
self.current_scale += Vector2(1, 1) * delta * 0.2
|
||||||
|
|
||||||
|
if self.timer > self.time:
|
||||||
|
self.actor.set_state(null)
|
||||||
|
self.actor.queue_free()
|
||||||
|
|
||||||
|
self.timer += delta
|
|
@ -0,0 +1,48 @@
|
||||||
|
extends ActorState
|
||||||
|
class_name ActorPossessed
|
||||||
|
|
||||||
|
var sub_state = null
|
||||||
|
|
||||||
|
func _init(_actor):
|
||||||
|
super(_actor)
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if Input.is_action_just_pressed("actor_convulse"):
|
||||||
|
set_sub_state(ActorConvulse.new(self.actor))
|
||||||
|
if Input.is_action_just_released("actor_convulse"):
|
||||||
|
set_sub_state(null)
|
||||||
|
|
||||||
|
func _physics_process(_delta):
|
||||||
|
self.actor.modulate = Color.RED
|
||||||
|
|
||||||
|
var mydir = Vector2(0, 0)
|
||||||
|
if Input.is_action_pressed("actor_up"):
|
||||||
|
mydir.y -= 1
|
||||||
|
if Input.is_action_pressed("actor_down"):
|
||||||
|
mydir.y += 1
|
||||||
|
if Input.is_action_pressed("actor_left"):
|
||||||
|
mydir.x -= 1
|
||||||
|
if Input.is_action_pressed("actor_right"):
|
||||||
|
mydir.x += 1
|
||||||
|
|
||||||
|
if mydir.length_squared() > 0:
|
||||||
|
mydir = mydir.normalized()
|
||||||
|
self.actor.sprite().rotation = mydir.angle() - PI/2
|
||||||
|
self.actor.anim_walk()
|
||||||
|
else:
|
||||||
|
self.actor.anim_idle()
|
||||||
|
|
||||||
|
|
||||||
|
if self.actor:
|
||||||
|
self.actor.velocity = mydir * self.actor.SPEED
|
||||||
|
self.actor.move_and_slide()
|
||||||
|
|
||||||
|
func set_sub_state(new_state):
|
||||||
|
if self.sub_state:
|
||||||
|
remove_child(self.sub_state)
|
||||||
|
self.sub_state = new_state
|
||||||
|
if self.sub_state:
|
||||||
|
add_child(self.sub_state)
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends Node2D
|
||||||
|
class_name ActorState
|
||||||
|
|
||||||
|
var actor: Actor
|
||||||
|
|
||||||
|
func _init(_actor: Actor):
|
||||||
|
assert(_actor)
|
||||||
|
self.actor = _actor
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
pass
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
[gd_resource type="SpriteFrames" load_steps=17 format=3 uid="uid://qasmquyomf8y"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://byts5nsmfcfve" path="res://Assets/spritesheet.png" id="1_0a701"]
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_m3cob"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(0, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_gsqo6"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(64, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_0lvuh"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(128, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_0y6du"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(192, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_0yegb"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(256, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_wwi4l"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(320, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_vtx2x"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(384, 0, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_b476f"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(0, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_ret2m"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(64, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_s7d6w"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(128, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_ohcd4"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(192, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_drpxs"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(256, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_0bgtq"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(320, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_cq6k0"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(384, 64, 64, 64)
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id="AtlasTexture_rsbm3"]
|
||||||
|
atlas = ExtResource("1_0a701")
|
||||||
|
region = Rect2(448, 64, 64, 64)
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
animations = [{
|
||||||
|
"frames": [{
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_m3cob")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_gsqo6")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_0lvuh")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_0y6du")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_0yegb")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_wwi4l")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_vtx2x")
|
||||||
|
}],
|
||||||
|
"loop": true,
|
||||||
|
"name": &"idle",
|
||||||
|
"speed": 8.0
|
||||||
|
}, {
|
||||||
|
"frames": [{
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_b476f")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_ret2m")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_s7d6w")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_ohcd4")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_drpxs")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_0bgtq")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_cq6k0")
|
||||||
|
}, {
|
||||||
|
"duration": 1.0,
|
||||||
|
"texture": SubResource("AtlasTexture_rsbm3")
|
||||||
|
}],
|
||||||
|
"loop": true,
|
||||||
|
"name": &"walk",
|
||||||
|
"speed": 18.0
|
||||||
|
}]
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
After Width: | Height: | Size: 950 B |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,20 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta):
|
||||||
|
$CanvasLayer/Pentagram.rotation += delta * PI/4
|
||||||
|
|
||||||
|
|
||||||
|
func _on_try_again_button_pressed():
|
||||||
|
Gstate.restart()
|
||||||
|
get_tree().change_scene_to_file("res://Level/level.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_quit_button_pressed():
|
||||||
|
get_tree().quit()
|
|
@ -0,0 +1,64 @@
|
||||||
|
[gd_scene load_steps=4 format=3 uid="uid://c3brx1b41l0io"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://GameOver/game_over.gd" id="1_o6k3r"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://2ld14yig6m07" path="res://Pentagram/pentagram.tscn" id="2_ajtpg"]
|
||||||
|
|
||||||
|
[sub_resource type="CanvasTexture" id="CanvasTexture_v15nk"]
|
||||||
|
|
||||||
|
[node name="GameOver" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_o6k3r")
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="TextureRect" type="TextureRect" parent="CanvasLayer"]
|
||||||
|
modulate = Color(0, 0, 0, 1)
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
texture = SubResource("CanvasTexture_v15nk")
|
||||||
|
|
||||||
|
[node name="Pentagram" parent="CanvasLayer" instance=ExtResource("2_ajtpg")]
|
||||||
|
position = Vector2(573, 311)
|
||||||
|
scale = Vector2(3, 3)
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer"]
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -148.0
|
||||||
|
offset_top = -143.0
|
||||||
|
offset_right = 155.0
|
||||||
|
offset_bottom = 90.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
text = "GAME OVER
|
||||||
|
"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="TryAgainButton" type="Button" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "TRY AGAIN"
|
||||||
|
|
||||||
|
[node name="QuitButton" type="Button" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "QUIT
|
||||||
|
"
|
||||||
|
|
||||||
|
[connection signal="pressed" from="CanvasLayer/VBoxContainer/TryAgainButton" to="." method="_on_try_again_button_pressed"]
|
||||||
|
[connection signal="pressed" from="CanvasLayer/VBoxContainer/QuitButton" to="." method="_on_quit_button_pressed"]
|
|
@ -0,0 +1,89 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var level_time = 5
|
||||||
|
var time = 0
|
||||||
|
var possess_dist = 256
|
||||||
|
var kill_gain = 2.0
|
||||||
|
var camera: Camera2D
|
||||||
|
var current_actor_possessed: Actor = null
|
||||||
|
var game_over = false
|
||||||
|
var won_level = true
|
||||||
|
var levels = null
|
||||||
|
var current_level = 0
|
||||||
|
var is_final = false
|
||||||
|
var waiting = false
|
||||||
|
var transition = false
|
||||||
|
var musics: Array
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
self.time = self.level_time
|
||||||
|
self.camera = Camera2D.new()
|
||||||
|
add_child(self.camera)
|
||||||
|
|
||||||
|
self.musics = [
|
||||||
|
preload("res://Assets/gameplay_0.ogg"),
|
||||||
|
preload("res://Assets/gameplay_1.ogg"),
|
||||||
|
preload("res://Assets/gameplay_2.ogg")
|
||||||
|
]
|
||||||
|
|
||||||
|
self.levels = [
|
||||||
|
preload("res://Level/level_1.tscn"),
|
||||||
|
preload("res://Level/level_2.tscn"),
|
||||||
|
preload("res://Level/level_3.tscn"),
|
||||||
|
preload("res://Level/level_4.tscn"),
|
||||||
|
preload("res://Level/level_5.tscn"),
|
||||||
|
preload("res://Level/level_6.tscn"),
|
||||||
|
preload("res://Level/level_7.tscn"),
|
||||||
|
preload("res://Level/final_level.tscn")
|
||||||
|
]
|
||||||
|
|
||||||
|
func restart():
|
||||||
|
self.game_over = false
|
||||||
|
self.won_level = true
|
||||||
|
self.current_level -= 1
|
||||||
|
self.is_final = false
|
||||||
|
self.time = self.level_time
|
||||||
|
|
||||||
|
func next_level():
|
||||||
|
if self.won_level:
|
||||||
|
self.won_level = false
|
||||||
|
self.time = self.level_time
|
||||||
|
var n = self.levels[self.current_level].instantiate()
|
||||||
|
self.current_level += 1
|
||||||
|
self.is_final = self.current_level >= self.levels.size()
|
||||||
|
return n
|
||||||
|
return null
|
||||||
|
|
||||||
|
func kill(new_actor):
|
||||||
|
if new_actor:
|
||||||
|
self.time += self.kill_gain
|
||||||
|
self.current_actor_possessed = new_actor
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
if self.won_level:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.game_over:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.current_actor_possessed:
|
||||||
|
var dir = self.current_actor_possessed.position - self.camera.position
|
||||||
|
var dist = dir.length_squared()
|
||||||
|
|
||||||
|
if dir.length_squared() > 0:
|
||||||
|
dir = dir.normalized()
|
||||||
|
|
||||||
|
if dist < 8.0 * 8.0:
|
||||||
|
self.camera.position = self.current_actor_possessed.position
|
||||||
|
else:
|
||||||
|
self.camera.position += dir * delta * 640
|
||||||
|
|
||||||
|
if not self.is_final and time < 0 and not self.game_over:
|
||||||
|
self.game_over = true
|
||||||
|
if self.current_actor_possessed:
|
||||||
|
self.current_actor_possessed.set_state(ActorDie.new(self.current_actor_possessed))
|
||||||
|
else:
|
||||||
|
get_tree().change_scene_to_file('res://GameOver/game_over.tscn')
|
||||||
|
if not self.waiting:
|
||||||
|
time -= delta
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if Gstate.time > -1:
|
||||||
|
if not Gstate.waiting:
|
||||||
|
get_node('%TimeLabel').text = "TIME LEFT: " + str(1 + floor(Gstate.time))
|
||||||
|
else:
|
||||||
|
get_node('%TimeLabel').text = ""
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://bt5nt818fko78"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://HUD/hud.gd" id="1_hs006"]
|
||||||
|
|
||||||
|
[node name="HUD" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_hs006")
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="TimeLabel" type="Label" parent="VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(0.552941, 0, 0, 1)
|
||||||
|
theme_override_font_sizes/font_size = 48
|
||||||
|
text = "-"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
uppercase = true
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||||
|
layout_mode = 2
|
|
@ -0,0 +1,8 @@
|
||||||
|
extends Label
|
||||||
|
class_name Hint
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
self.position += Vector2(0, -32) * delta
|
|
@ -0,0 +1,14 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://v1q36um3bukv"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Hint/hint.gd" id="1_rxt3a"]
|
||||||
|
|
||||||
|
[node name="Hint" type="Label"]
|
||||||
|
modulate = Color(0.843137, 0, 1, 1)
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_font_sizes/font_size = 16
|
||||||
|
text = "+1"
|
||||||
|
script = ExtResource("1_rxt3a")
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta):
|
||||||
|
$CanvasLayer/Pentagram.rotation += delta * PI/4
|
||||||
|
|
||||||
|
|
||||||
|
func _on_button_pressed():
|
||||||
|
get_tree().change_scene_to_file("res://Menu/menu.tscn")
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,19 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func _on_restart_button_pressed():
|
||||||
|
get_tree().change_scene_to_file("res://Menu/menu.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_quit_button_pressed():
|
||||||
|
get_tree().quit()
|
|
@ -0,0 +1,43 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://bvtot1d6jceil"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Level/final_level.gd" id="1_0ivrk"]
|
||||||
|
|
||||||
|
[node name="FinalLevel" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_0ivrk")
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer"]
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 64
|
||||||
|
text = "THANKS FOR PLAYING"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="RestartButton" type="Button" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 32
|
||||||
|
text = "Back to main menu
|
||||||
|
"
|
||||||
|
|
||||||
|
[node name="QuitButton" type="Button" parent="CanvasLayer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 32
|
||||||
|
text = "Quit
|
||||||
|
"
|
||||||
|
|
||||||
|
[connection signal="pressed" from="CanvasLayer/VBoxContainer/RestartButton" to="." method="_on_restart_button_pressed"]
|
||||||
|
[connection signal="pressed" from="CanvasLayer/VBoxContainer/QuitButton" to="." method="_on_quit_button_pressed"]
|
|
@ -0,0 +1,49 @@
|
||||||
|
extends Node2D
|
||||||
|
var lvl = null
|
||||||
|
var next_level = null
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var sz = Gstate.musics.size()
|
||||||
|
$AudioStreamPlayer.stream = Gstate.musics[randi_range(0, sz-1)]
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
|
var nxt = Gstate.next_level()
|
||||||
|
if nxt:
|
||||||
|
self.next_level = nxt
|
||||||
|
go_next_level()
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
var nxt = Gstate.next_level()
|
||||||
|
if nxt:
|
||||||
|
$SFXTeleport.play()
|
||||||
|
self.next_level = nxt
|
||||||
|
Gstate.waiting = true
|
||||||
|
$NextLevelTimer.start()
|
||||||
|
|
||||||
|
func go_next_level():
|
||||||
|
for c in get_node('%Slot').get_children():
|
||||||
|
get_node('%Slot').remove_child(c)
|
||||||
|
get_node('%Slot').add_child(self.next_level)
|
||||||
|
|
||||||
|
for actor in get_tree().get_nodes_in_group('actors'):
|
||||||
|
if actor.player:
|
||||||
|
Gstate.camera.position = actor.position
|
||||||
|
Gstate.current_actor_possessed = actor
|
||||||
|
actor.set_state(ActorPossessed.new(actor))
|
||||||
|
if not Gstate.is_final:
|
||||||
|
var start = preload("res://StartLevel/start_level.tscn").instantiate()
|
||||||
|
add_child(start)
|
||||||
|
get_tree().paused = true
|
||||||
|
else:
|
||||||
|
get_tree().change_scene_to_file("res://Level/final_level.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _on_next_level_timer_timeout():
|
||||||
|
Gstate.waiting = false
|
||||||
|
go_next_level()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_change_music_timer_timeout():
|
||||||
|
var sz = Gstate.musics.size()
|
||||||
|
$AudioStreamPlayer.stream = Gstate.musics[randi_range(0, sz-1)]
|
||||||
|
$AudioStreamPlayer.play()
|
|
@ -0,0 +1,33 @@
|
||||||
|
[gd_scene load_steps=4 format=3 uid="uid://d4lvhpmnksgr4"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Level/level.gd" id="1_fv4pj"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bt5nt818fko78" path="res://HUD/hud.tscn" id="2_gu65n"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://3t0jp7rovybl" path="res://Assets/teleport.ogg" id="3_ifc6q"]
|
||||||
|
|
||||||
|
[node name="Level" type="Node2D"]
|
||||||
|
script = ExtResource("1_fv4pj")
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="HUD" parent="CanvasLayer" instance=ExtResource("2_gu65n")]
|
||||||
|
metadata/_edit_lock_ = true
|
||||||
|
|
||||||
|
[node name="Slot" type="Node2D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="NextLevelTimer" type="Timer" parent="."]
|
||||||
|
wait_time = 1.5
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
|
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
|
process_mode = 3
|
||||||
|
|
||||||
|
[node name="ChangeMusicTimer" type="Timer" parent="."]
|
||||||
|
wait_time = 10.0
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[node name="SFXTeleport" type="AudioStreamPlayer" parent="."]
|
||||||
|
stream = ExtResource("3_ifc6q")
|
||||||
|
|
||||||
|
[connection signal="timeout" from="NextLevelTimer" to="." method="_on_next_level_timer_timeout"]
|
||||||
|
[connection signal="timeout" from="ChangeMusicTimer" to="." method="_on_change_music_timer_timeout"]
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,19 @@
|
||||||
|
[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://cy6ilq1xaig2t"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cxc4aoh3p0k2m" path="res://Assets/tilemap.png" id="1_0r1gb"]
|
||||||
|
|
||||||
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_q8ja5"]
|
||||||
|
texture = ExtResource("1_0r1gb")
|
||||||
|
texture_region_size = Vector2i(32, 32)
|
||||||
|
0:0/0 = 0
|
||||||
|
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
|
0:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
|
1:0/0 = 0
|
||||||
|
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||||
|
1:0/0/physics_layer_0/angular_velocity = 0.0
|
||||||
|
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
tile_size = Vector2i(32, 32)
|
||||||
|
physics_layer_0/collision_layer = 1
|
||||||
|
sources/1 = SubResource("TileSetAtlasSource_q8ja5")
|
|
@ -0,0 +1,37 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(delta):
|
||||||
|
$CanvasLayer/Pentagram.rotation += PI * delta
|
||||||
|
|
||||||
|
func _on_play_button_pressed():
|
||||||
|
get_tree().change_scene_to_file("res://Level/level.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_quit_button_pressed():
|
||||||
|
get_tree().quit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_how_to_play_button_pressed():
|
||||||
|
get_tree().change_scene_to_file("res://HowToPlay/how_to_play.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _on_music_timer_timeout():
|
||||||
|
$RythmTimer.start()
|
||||||
|
|
||||||
|
func _on_rythm_timer_timeout():
|
||||||
|
var r = randf()
|
||||||
|
var g = randf()
|
||||||
|
var b = randf()
|
||||||
|
$CanvasLayer/TextureRect.modulate = Color(r, g, b)
|
||||||
|
$CanvasLayer/Pentagram.visible = not $CanvasLayer/Pentagram.visible
|
||||||
|
$CanvasLayer/Pentagram.scale.x = randf() * 2
|
||||||
|
$CanvasLayer/Pentagram.scale.y = $CanvasLayer/Pentagram.scale.x
|
||||||
|
$CanvasLayer/Pentagram.position.x = randf() * get_viewport().size.x
|
||||||
|
$CanvasLayer/Pentagram.position.y = randf() * get_viewport().size.y
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,53 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
@export var initial = false
|
||||||
|
|
||||||
|
var activated = false
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
func _process(_delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
var center = $Marker2D.position
|
||||||
|
var rad = 96
|
||||||
|
var x = -PI/5
|
||||||
|
var y = -PI/12
|
||||||
|
|
||||||
|
var A = center + get_point(-PI/2 - x) * rad
|
||||||
|
var B = center + get_point(0 - y) * rad
|
||||||
|
var C = center + get_point(PI/2) * rad
|
||||||
|
var D = center + get_point(PI + y) * rad
|
||||||
|
var E = center + get_point(-PI/2 + x) * rad
|
||||||
|
|
||||||
|
var color = Color.DARK_RED
|
||||||
|
var thick = 4
|
||||||
|
|
||||||
|
if self.activated:
|
||||||
|
color = Color.RED
|
||||||
|
thick = 16
|
||||||
|
|
||||||
|
if self.initial:
|
||||||
|
color = Color.BLUE_VIOLET
|
||||||
|
thick = 4
|
||||||
|
|
||||||
|
draw_line(A, C, color, thick)
|
||||||
|
draw_line(C, E, color, thick)
|
||||||
|
draw_line(E, B, color, thick)
|
||||||
|
draw_line(B, D, color, thick)
|
||||||
|
draw_line(D, A, color, thick)
|
||||||
|
|
||||||
|
func get_point(angle):
|
||||||
|
return Vector2(cos(angle), sin(angle))
|
||||||
|
|
||||||
|
func try_activate():
|
||||||
|
if self.initial:
|
||||||
|
return false
|
||||||
|
self.activated = true
|
||||||
|
self.queue_redraw()
|
||||||
|
return true
|
|
@ -0,0 +1,9 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://2ld14yig6m07"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Pentagram/pentagram.gd" id="1_dee2e"]
|
||||||
|
|
||||||
|
[node name="Pentagram" type="Node2D" groups=["pentagrams"]]
|
||||||
|
script = ExtResource("1_dee2e")
|
||||||
|
|
||||||
|
[node name="Marker2D" type="Marker2D" parent="."]
|
||||||
|
gizmo_extents = 64.0
|
|
@ -0,0 +1,13 @@
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
Gstate.transition = true
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
get_node('%Label').text = "LEVEL " + str(Gstate.current_level)
|
||||||
|
|
||||||
|
func _on_timer_timeout():
|
||||||
|
Gstate.transition = false
|
||||||
|
get_tree().paused = false
|
||||||
|
self.queue_free()
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://ciq551pjg36re"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://StartLevel/start_level.gd" id="1_x4hfv"]
|
||||||
|
|
||||||
|
[sub_resource type="CanvasTexture" id="CanvasTexture_k4jbs"]
|
||||||
|
|
||||||
|
[node name="StartLevel" type="Control"]
|
||||||
|
process_mode = 2
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_x4hfv")
|
||||||
|
|
||||||
|
[node name="Timer" type="Timer" parent="."]
|
||||||
|
wait_time = 1.5
|
||||||
|
one_shot = true
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="TextureRect" type="TextureRect" parent="CanvasLayer"]
|
||||||
|
modulate = Color(0, 0, 0, 1)
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
texture = SubResource("CanvasTexture_k4jbs")
|
||||||
|
|
||||||
|
[node name="Panel" type="Panel" parent="CanvasLayer"]
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = -2.0
|
||||||
|
offset_top = -4.0
|
||||||
|
offset_right = -2.0
|
||||||
|
offset_bottom = -4.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="CanvasLayer/Panel"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 8
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_top = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
anchor_bottom = 0.5
|
||||||
|
offset_left = -20.0
|
||||||
|
offset_top = -11.5
|
||||||
|
offset_right = 20.0
|
||||||
|
offset_bottom = 11.5
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_font_sizes/font_size = 64
|
||||||
|
text = "3"
|
||||||
|
uppercase = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
|
|
@ -0,0 +1,104 @@
|
||||||
|
[preset.0]
|
||||||
|
|
||||||
|
name="macOS"
|
||||||
|
platform="macOS"
|
||||||
|
runnable=true
|
||||||
|
dedicated_server=false
|
||||||
|
custom_features=""
|
||||||
|
export_filter="all_resources"
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter=""
|
||||||
|
export_path="../../Export/ldbog55.zip"
|
||||||
|
encryption_include_filters=""
|
||||||
|
encryption_exclude_filters=""
|
||||||
|
encrypt_pck=false
|
||||||
|
encrypt_directory=false
|
||||||
|
|
||||||
|
[preset.0.options]
|
||||||
|
|
||||||
|
export/distribution_type=1
|
||||||
|
binary_format/architecture="universal"
|
||||||
|
custom_template/debug=""
|
||||||
|
custom_template/release=""
|
||||||
|
debug/export_console_wrapper=1
|
||||||
|
application/icon=""
|
||||||
|
application/icon_interpolation=4
|
||||||
|
application/bundle_identifier="com.shellbox.bog"
|
||||||
|
application/signature="azeezaazeeza"
|
||||||
|
application/app_category="Games"
|
||||||
|
application/short_version=""
|
||||||
|
application/version=""
|
||||||
|
application/copyright=""
|
||||||
|
application/copyright_localized={}
|
||||||
|
application/min_macos_version="10.12"
|
||||||
|
application/export_angle=0
|
||||||
|
display/high_res=true
|
||||||
|
xcode/platform_build="14C18"
|
||||||
|
xcode/sdk_version="13.1"
|
||||||
|
xcode/sdk_build="22C55"
|
||||||
|
xcode/sdk_name="macosx13.1"
|
||||||
|
xcode/xcode_version="1420"
|
||||||
|
xcode/xcode_build="14C18"
|
||||||
|
codesign/codesign=1
|
||||||
|
codesign/installer_identity=""
|
||||||
|
codesign/apple_team_id=""
|
||||||
|
codesign/identity=""
|
||||||
|
codesign/entitlements/custom_file=""
|
||||||
|
codesign/entitlements/allow_jit_code_execution=false
|
||||||
|
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||||
|
codesign/entitlements/allow_dyld_environment_variables=false
|
||||||
|
codesign/entitlements/disable_library_validation=false
|
||||||
|
codesign/entitlements/audio_input=false
|
||||||
|
codesign/entitlements/camera=false
|
||||||
|
codesign/entitlements/location=false
|
||||||
|
codesign/entitlements/address_book=false
|
||||||
|
codesign/entitlements/calendars=false
|
||||||
|
codesign/entitlements/photos_library=false
|
||||||
|
codesign/entitlements/apple_events=false
|
||||||
|
codesign/entitlements/debugging=false
|
||||||
|
codesign/entitlements/app_sandbox/enabled=false
|
||||||
|
codesign/entitlements/app_sandbox/network_server=false
|
||||||
|
codesign/entitlements/app_sandbox/network_client=false
|
||||||
|
codesign/entitlements/app_sandbox/device_usb=false
|
||||||
|
codesign/entitlements/app_sandbox/device_bluetooth=false
|
||||||
|
codesign/entitlements/app_sandbox/files_downloads=0
|
||||||
|
codesign/entitlements/app_sandbox/files_pictures=0
|
||||||
|
codesign/entitlements/app_sandbox/files_music=0
|
||||||
|
codesign/entitlements/app_sandbox/files_movies=0
|
||||||
|
codesign/entitlements/app_sandbox/files_user_selected=0
|
||||||
|
codesign/entitlements/app_sandbox/helper_executables=[]
|
||||||
|
codesign/custom_options=PackedStringArray()
|
||||||
|
notarization/notarization=0
|
||||||
|
privacy/microphone_usage_description=""
|
||||||
|
privacy/microphone_usage_description_localized={}
|
||||||
|
privacy/camera_usage_description=""
|
||||||
|
privacy/camera_usage_description_localized={}
|
||||||
|
privacy/location_usage_description=""
|
||||||
|
privacy/location_usage_description_localized={}
|
||||||
|
privacy/address_book_usage_description=""
|
||||||
|
privacy/address_book_usage_description_localized={}
|
||||||
|
privacy/calendar_usage_description=""
|
||||||
|
privacy/calendar_usage_description_localized={}
|
||||||
|
privacy/photos_library_usage_description=""
|
||||||
|
privacy/photos_library_usage_description_localized={}
|
||||||
|
privacy/desktop_folder_usage_description=""
|
||||||
|
privacy/desktop_folder_usage_description_localized={}
|
||||||
|
privacy/documents_folder_usage_description=""
|
||||||
|
privacy/documents_folder_usage_description_localized={}
|
||||||
|
privacy/downloads_folder_usage_description=""
|
||||||
|
privacy/downloads_folder_usage_description_localized={}
|
||||||
|
privacy/network_volumes_usage_description=""
|
||||||
|
privacy/network_volumes_usage_description_localized={}
|
||||||
|
privacy/removable_volumes_usage_description=""
|
||||||
|
privacy/removable_volumes_usage_description_localized={}
|
||||||
|
ssh_remote_deploy/enabled=false
|
||||||
|
ssh_remote_deploy/host="user@host_ip"
|
||||||
|
ssh_remote_deploy/port="22"
|
||||||
|
ssh_remote_deploy/extra_args_ssh=""
|
||||||
|
ssh_remote_deploy/extra_args_scp=""
|
||||||
|
ssh_remote_deploy/run_script="#!/usr/bin/env bash
|
||||||
|
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||||
|
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
|
||||||
|
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||||
|
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
|
||||||
|
rm -rf \"{temp_dir}\""
|
|
@ -0,0 +1 @@
|
||||||
|
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
After Width: | Height: | Size: 950 B |
|
@ -0,0 +1,60 @@
|
||||||
|
; Engine configuration file.
|
||||||
|
; It's best edited using the editor UI and not directly,
|
||||||
|
; since the parameters that go here are not all obvious.
|
||||||
|
;
|
||||||
|
; Format:
|
||||||
|
; [section] ; section goes between []
|
||||||
|
; param=value ; assign values to parameters
|
||||||
|
|
||||||
|
config_version=5
|
||||||
|
|
||||||
|
[application]
|
||||||
|
|
||||||
|
config/name="Ludum 55"
|
||||||
|
run/main_scene="res://Menu/menu.tscn"
|
||||||
|
config/features=PackedStringArray("4.2", "GL Compatibility")
|
||||||
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
Gstate="*res://Global/gstate.gd"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
window/stretch/mode="canvas_items"
|
||||||
|
|
||||||
|
[input]
|
||||||
|
|
||||||
|
actor_up={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":122,"echo":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":119,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actor_down={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actor_left={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":113,"echo":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":97,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actor_right={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actor_convulse={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[rendering]
|
||||||
|
|
||||||
|
renderer/rendering_method="gl_compatibility"
|
||||||
|
renderer/rendering_method.mobile="gl_compatibility"
|
||||||
|
environment/defaults/default_clear_color=Color(0, 0, 0, 1)
|
Loading…
Reference in New Issue