CashCoPlay City

cashCoPlay is a city of humans.
Not to judge them.
But to understand, heal, and grow with them.

CashCoPlay is about becoming Human, and growing into a Leader

extends Node var growth_points: int = 0 var current_region: String = "School Zone" var current_scenario_id: int = 1 func add_growth(points: int) -> void: growth_points += points growth_points = clamp(growth_points, 0, 200) print("Growth Points:", growth_points) extends Node var bg_player: AudioStreamPlayer var sfx_player: AudioStreamPlayer func _ready() -> void: bg_player = AudioStreamPlayer.new() sfx_player = AudioStreamPlayer.new() add_child(bg_player) add_child(sfx_player) # Optional background music (put file in this path) var music_path := "res://assets/sounds/bg_music.mp3" if ResourceLoader.exists(music_path): bg_player.stream = load(music_path) bg_player.volume_db = -10 bg_player.play() func play_sfx(path: String) -> void: if path == "": return if not ResourceLoader.exists(path): print("SFX not found:", path) return sfx_player.stream = load(path) sfx_player.play() extends Node # Each scenario: # - dialogues: array of {speaker, text, sfx(optional)} # - choices: array of {text, outcome_text, points, sfx(optional)} var scenarios := { 1: { "name": "School Zone – Comparison & Mocking", "dialogues": [ {"speaker":"Friend", "text":"Hey, what did you get in math? I got 20!", "sfx":""}, {"speaker":"You", "text":"I got 15…", "sfx":""}, {"speaker":"Friend", "text":"Wow… weak again!", "sfx":"res://assets/sounds/mock.wav"}, {"speaker":"Narrator", "text":"You feel bad. What do you do now?", "sfx":""} ], "choices": [ {"text":"Get angry and fight", "outcome_text":"Uncontrolled anger → trouble at school", "points":-10, "sfx":"res://assets/sounds/anger.wav"}, {"text":"Blame yourself and shut down", "outcome_text":"Self-blame → lower confidence", "points":-5, "sfx":"res://assets/sounds/sad.wav"}, {"text":"Say congrats and study more", "outcome_text":"Growth → confidence increases", "points":+15, "sfx":"res://assets/sounds/success.wav"} ] } } extends Node2D @onready var camera: Camera2D = $Camera2D var dragging := false var drag_start := Vector2.ZERO @export var map_min_x: float = 0.0 @export var map_max_x: float = 3000.0 @export var drag_speed: float = 1.0 func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT: dragging = event.pressed drag_start = event.position elif event is InputEventScreenTouch: dragging = event.pressed drag_start = event.position if dragging and (event is InputEventMouseMotion or event is InputEventScreenDrag): var delta := event.position - drag_start camera.position.x -= delta.x * drag_speed camera.position.x = clamp(camera.position.x, map_min_x, map_max_x) drag_start = event.position extends TextureButton @export var region_name: String = "School Zone" @export var scenario_id: int = 1 func _ready() -> void: pressed.connect(_on_pressed) func _on_pressed() -> void: Global.current_region = region_name Global.current_scenario_id = scenario_id get_tree().change_scene_to_file("res://DialogueScene.tscn") extends Control @onready var speaker_label: Label = $SpeakerLabel @onready var text_label: Label = $TextLabel @onready var choices_container: VBoxContainer = $ChoicesContainer var scenario: Dictionary var dialogue_index: int = 0 func _ready() -> void: # Load scenario database var data := preload("res://DialogueData.gd").new() if not data.scenarios.has(Global.current_scenario_id): text_label.text = "Scenario not found." return scenario = data.scenarios[Global.current_scenario_id] _clear_choices() _show_next() func _input(event: InputEvent) -> void: # Click anywhere to advance dialogue (until choices appear) if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: if choices_container.get_child_count() == 0: _show_next() func _show_next() -> void: var dialogues: Array = scenario["dialogues"] if dialogue_index < dialogues.size(): var dlg: Dictionary = dialogues[dialogue_index] speaker_label.text = str(dlg.get("speaker", "")) text_label.text = str(dlg.get("text", "")) var sfx := str(dlg.get("sfx", "")) if sfx != "": AudioManager.play_sfx(sfx) dialogue_index += 1 else: _show_choices() func _show_choices() -> void: _clear_choices() for c in scenario["choices"]: var btn := Button.new() btn.text = str(c["text"]) btn.pressed.connect(_on_choice_selected.bind(c)) choices_container.add_child(btn) func _on_choice_selected(choice: Dictionary) -> void: _clear_choices() var outcome_text := str(choice.get("outcome_text", "")) var points := int(choice.get("points", 0)) var sfx := str(choice.get("sfx", "")) if sfx != "": AudioManager.play_sfx(sfx) Global.add_growth(points) speaker_label.text = "Outcome" text_label.text = outcome_text + "\n\nNow go to the Psychology Center to practice a better response." await get_tree().create_timer(1.5).timeout get_tree().change_scene_to_file("res://ConsultationCenter.tscn") func _clear_choices() -> void: for child in choices_container.get_children(): child.queue_free() extends Control @onready var label: Label = $Label func _ready() -> void: label.text = "Psychology Center\n\nCoach: Great job reflecting.\nPractice: breathe, name the feeling, choose the next best action.\n\n+20 Growth Points" AudioManager.play_sfx("res://assets/sounds/success.wav") Global.add_growth(20) var back_btn := Button.new() back_btn.text = "Back to City Map" back_btn.pressed.connect(_back_to_map) add_child(back_btn) func _back_to_map() -> void: get_tree().change_scene_to_file("res://main.tscn")
Scroll to Top