110 lines
2.3 KiB
GDScript
110 lines
2.3 KiB
GDScript
extends NPC
|
|
|
|
var rng = RandomNumberGenerator.new()
|
|
var moveSpeed = 140
|
|
var moveSpeedCond = 140
|
|
|
|
var maxx = 100
|
|
var minx = -100
|
|
|
|
var waitTimer = 0
|
|
var lime_mode = false
|
|
var walking = false
|
|
|
|
var waited = false
|
|
|
|
var GameState = null
|
|
|
|
func _ready():
|
|
minx = position.x
|
|
maxx = position.x + 100
|
|
|
|
characterName = "Beesly"
|
|
pronouns = "any"
|
|
GameState = get_node("/root/GameVariables")
|
|
dialogueResource = load("res://NPCs/Beesly/beesly.dialogue")
|
|
|
|
if SaveManager.get_save_value("BeeslyLimeMode"):
|
|
lime_mode = true
|
|
$Sprite.play("LimeMode")
|
|
if not SaveManager.get_save_value("LimeEnabled", true):
|
|
LimeOff()
|
|
|
|
func _process(delta):
|
|
waitTimer -= delta
|
|
if waitTimer <= 0:
|
|
if !waited:
|
|
waited = true
|
|
wait_between_actions()
|
|
else:
|
|
pick_next_action(delta)
|
|
|
|
if walking and not lime_mode:
|
|
var movementVector = Vector2(moveSpeed*delta,0)
|
|
var collisions = move_and_collide(movementVector)
|
|
if collisions != null:
|
|
walking = false
|
|
stand_up()
|
|
if moveSpeed < 0:
|
|
$Sprite.flip_h = true
|
|
elif moveSpeed > 0:
|
|
$Sprite.flip_h = false
|
|
|
|
func wait_between_actions():
|
|
waitTimer = rng.randf_range(0.5, 3)
|
|
|
|
func pick_next_action(delta):
|
|
if lime_mode: return
|
|
else:
|
|
var randomDir
|
|
if position.x <= minx:
|
|
randomDir = 1
|
|
elif position.x >= maxx:
|
|
randomDir = -1
|
|
else:
|
|
randomDir = -1 if rng.randi_range(0, 1) == 0 else 1
|
|
moveSpeed = moveSpeedCond * randomDir
|
|
|
|
var nextActionResult = rng.randi_range(0, 4)
|
|
if nextActionResult <= 2:
|
|
walking = true
|
|
walk()
|
|
elif nextActionResult <= 3:
|
|
walking = false
|
|
stand_up()
|
|
elif nextActionResult <= 4:
|
|
wait_between_actions()
|
|
|
|
waited = false
|
|
|
|
func morph():
|
|
SaveManager.set_save_value("BeeslyLimeMode", true)
|
|
$Sprite.stop()
|
|
$Sprite.play("LimeMorph")
|
|
$MorphParticle.emitting = true
|
|
await $Sprite.animation_finished
|
|
lime_mode = true
|
|
$MorphParticle.emitting = false
|
|
$Sprite.play("LimeMode")
|
|
|
|
LevelManager.get_skill("appreciating").experience_event("Beesley's Lime Move", "watched", 31)
|
|
|
|
func stand_up():
|
|
if lime_mode: $Sprite.play("LimeMode")
|
|
else: $Sprite.play("Stand")
|
|
waitTimer = 4
|
|
|
|
func walk():
|
|
$Sprite.play("Walk")
|
|
waitTimer = 1
|
|
|
|
func LimeOff():
|
|
SaveManager.set_save_value("BeeslyLimeMode", false)
|
|
$Sprite.stop()
|
|
$Sprite.play("BeeMorph")
|
|
$MorphParticle.emitting = true
|
|
await $Sprite.animation_finished
|
|
lime_mode = false
|
|
$MorphParticle.emitting = false
|
|
$Sprite.play("Stand")
|