From 1c78677eb3e9ed553bf5f5902202ebd96ce7d011 Mon Sep 17 00:00:00 2001 From: Larra Emily Van Loon Date: Tue, 12 May 2026 12:02:30 +0200 Subject: [PATCH] initial commit --- .editorconfig | 4 ++ .gitattributes | 2 + .gitignore | 3 ++ 3dScene.gd | 24 +++++++++ 3dScene.gd.uid | 1 + Game.tscn | 36 +++++++++++++ MultiplayerController.gd | 53 +++++++++++++++++++ MultiplayerController.gd.uid | 1 + SRCMDALG_Scout.jpg | Bin 0 -> 48513 bytes SRCMDALG_Scout.jpg.import | 40 ++++++++++++++ card_render.gd | 17 ++++++ card_render.gd.uid | 1 + card_render.tscn | 95 +++++++++++++++++++++++++++++++++ game_state.gd | 100 +++++++++++++++++++++++++++++++++++ game_state.gd.uid | 1 + icon.svg | 1 + icon.svg.import | 43 +++++++++++++++ multiplayerScene.tscn | 41 ++++++++++++++ project.godot | 25 +++++++++ 19 files changed, 488 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 3dScene.gd create mode 100644 3dScene.gd.uid create mode 100644 Game.tscn create mode 100644 MultiplayerController.gd create mode 100644 MultiplayerController.gd.uid create mode 100644 SRCMDALG_Scout.jpg create mode 100644 SRCMDALG_Scout.jpg.import create mode 100644 card_render.gd create mode 100644 card_render.gd.uid create mode 100644 card_render.tscn create mode 100644 game_state.gd create mode 100644 game_state.gd.uid create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 multiplayerScene.tscn create mode 100644 project.godot diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/3dScene.gd b/3dScene.gd new file mode 100644 index 0000000..5718129 --- /dev/null +++ b/3dScene.gd @@ -0,0 +1,24 @@ +extends Node3D + +var handCards = []; +@export var HandParent: Node3D; + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func make_card_model(card: GameState.Card): + var viewport = load("res://card_render.tscn").instantiate(); + viewport.set_card(card); + viewport.position = Vector3(-3.5 + handCards.size()*1.8, 0,0) + HandParent.add_child(viewport) + handCards.append(viewport); + + +func _on_game_state_card_drawn(card: RefCounted) -> void: + make_card_model(card) diff --git a/3dScene.gd.uid b/3dScene.gd.uid new file mode 100644 index 0000000..fda1c9e --- /dev/null +++ b/3dScene.gd.uid @@ -0,0 +1 @@ +uid://75ywelc4x5ly diff --git a/Game.tscn b/Game.tscn new file mode 100644 index 0000000..e01d8bd --- /dev/null +++ b/Game.tscn @@ -0,0 +1,36 @@ +[gd_scene format=3 uid="uid://bjnuwqt2n1qwo"] + +[ext_resource type="Script" uid="uid://jyebvspa2jud" path="res://game_state.gd" id="1_wbfu4"] +[ext_resource type="Script" uid="uid://75ywelc4x5ly" path="res://3dScene.gd" id="2_u44n3"] + +[node name="Node" type="Node" unique_id=111377658] + +[node name="GameState" type="Node" parent="." unique_id=1610400664] +script = ExtResource("1_wbfu4") + +[node name="Control" type="Control" parent="." unique_id=485009883] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="Button" type="Button" parent="Control" unique_id=7224124] +layout_mode = 0 +offset_left = 509.0 +offset_top = 535.0 +offset_right = 639.0 +offset_bottom = 603.0 +text = "test" + +[node name="Node3D" type="Node3D" parent="." unique_id=218155985 node_paths=PackedStringArray("HandParent")] +script = ExtResource("2_u44n3") +HandParent = NodePath("Hand") + +[node name="Camera3D" type="Camera3D" parent="Node3D" unique_id=1715232584] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2.1365387) + +[node name="Hand" type="Node3D" parent="Node3D" unique_id=524923868] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, -2) + +[connection signal="card_drawn" from="GameState" to="Node3D" method="_on_game_state_card_drawn"] +[connection signal="button_down" from="Control/Button" to="GameState" method="_on_button_button_down"] diff --git a/MultiplayerController.gd b/MultiplayerController.gd new file mode 100644 index 0000000..f552106 --- /dev/null +++ b/MultiplayerController.gd @@ -0,0 +1,53 @@ +extends Control + +@export var Address = "127.0.0.1"; +@export var port = 8910 + +var peer; + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + multiplayer.peer_connected.connect(PlayerConnected) + multiplayer.peer_disconnected.connect(PlayerDisconnected) + multiplayer.connected_to_server.connect(ConnectedToServer) + multiplayer.connection_failed.connect(ConnectionFailed) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +# server and client +func PlayerConnected(id): + print("Player connected " + str(id)); + +func PlayerDisconnected(id): + print("Player disconnected " + str(id)) + +# client only +func ConnectedToServer(): + print("connected to server!") + +func ConnectionFailed(): + print("connection failed"); + +func _on_host_button_down() -> void: + peer = ENetMultiplayerPeer.new() + var error = peer.create_server(port, 2) + if error != OK: + print("cannot host" + error) + return + + multiplayer.set_multiplayer_peer(peer); + print("waiting for players") + + +func _on_join_button_down() -> void: + peer = ENetMultiplayerPeer.new() + peer.create_client(Address, port); + + multiplayer.set_multiplayer_peer(peer) + + +func _on_start_button_down() -> void: + pass # Replace with function body. diff --git a/MultiplayerController.gd.uid b/MultiplayerController.gd.uid new file mode 100644 index 0000000..60b4a00 --- /dev/null +++ b/MultiplayerController.gd.uid @@ -0,0 +1 @@ +uid://ddnryq3tes123 diff --git a/SRCMDALG_Scout.jpg b/SRCMDALG_Scout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0c6b75cf9903899c48490b940e1541e79f1bd8a GIT binary patch literal 48513 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 void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func set_card(card: GameState.Card): + NameNode.text = card.name; + CostNode.text = str(card.cost); diff --git a/card_render.gd.uid b/card_render.gd.uid new file mode 100644 index 0000000..ea21ea4 --- /dev/null +++ b/card_render.gd.uid @@ -0,0 +1 @@ +uid://bpbofmi7gvj6p diff --git a/card_render.tscn b/card_render.tscn new file mode 100644 index 0000000..385940c --- /dev/null +++ b/card_render.tscn @@ -0,0 +1,95 @@ +[gd_scene format=3 uid="uid://jsrjasxkd820"] + +[ext_resource type="Script" uid="uid://bpbofmi7gvj6p" path="res://card_render.gd" id="1_3dncl"] + +[sub_resource type="Gradient" id="Gradient_sb48q"] +offsets = PackedFloat32Array(0, 0.5294118, 0.9909502) +colors = PackedColorArray(0, 0, 0, 1, 0.11858138, 0.11858138, 0.11858138, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_t88pq"] +gradient = SubResource("Gradient_sb48q") +repeat = 1 + +[sub_resource type="LabelSettings" id="LabelSettings_r0x5m"] +font_size = 17 + +[sub_resource type="ViewportTexture" id="ViewportTexture_3dncl"] +viewport_path = NodePath("CardRender") + +[sub_resource type="Animation" id="Animation_3dncl"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_eaqeq"] +resource_name = "new_animation" +length = 4.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1.98, 4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0.5235988, 0), Vector3(0, -0.5235988, 0), Vector3(0, 0.5235988, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ash2r"] +_data = { +&"RESET": SubResource("Animation_3dncl"), +&"new_animation": SubResource("Animation_eaqeq") +} + +[node name="Card" type="Node3D" unique_id=596397715 node_paths=PackedStringArray("NameNode", "CostNode")] +script = ExtResource("1_3dncl") +NameNode = NodePath("CardRender/Node2D/Name") +CostNode = NodePath("CardRender/Node2D/Cost") + +[node name="CardRender" type="SubViewport" parent="." unique_id=1189133253] +size = Vector2i(160, 190) + +[node name="Node2D" type="Node2D" parent="CardRender" unique_id=127198536] + +[node name="BG" type="Sprite2D" parent="CardRender/Node2D" unique_id=545821664] +position = Vector2(80, 96.00001) +scale = Vector2(2.5, 3) +texture = SubResource("GradientTexture2D_t88pq") + +[node name="Name" type="Label" parent="CardRender/Node2D" unique_id=537154871] +offset_left = 24.0 +offset_right = 138.0 +offset_bottom = 25.0 +text = "Test" +label_settings = SubResource("LabelSettings_r0x5m") +horizontal_alignment = 1 +clip_text = true + +[node name="Cost" type="Label" parent="CardRender/Node2D" unique_id=1196428120] +offset_left = 138.0 +offset_right = 160.0 +offset_bottom = 25.0 +text = "-1" +label_settings = SubResource("LabelSettings_r0x5m") +horizontal_alignment = 1 +clip_text = true + +[node name="Sprite3D" type="Sprite3D" parent="." unique_id=1634659694] +texture = SubResource("ViewportTexture_3dncl") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1857926089] +libraries/ = SubResource("AnimationLibrary_ash2r") +autoplay = &"RESET" diff --git a/game_state.gd b/game_state.gd new file mode 100644 index 0000000..c2d1e17 --- /dev/null +++ b/game_state.gd @@ -0,0 +1,100 @@ +extends Node +class_name GameState + +signal card_drawn(card: Card) + +enum Faction {Scavangers, Kingdom, Emporium} + +class Player: + var name: String; + var id: int; + var deck: Array; + var hand: Array; + var discard: Array; + var combat: int; + var trade: int; + +class Card: + var name: String; + var cost: int; + var primaryAbilityEffects: Array; + var allyAbility: Faction; + var allyAbilityEffects: Array; + var acquireAbilityEffects: Array; + var faction: Faction; + + +# effects +class TradeGainEffect: + static func NewTradeGainEffect(amount: int): + return {Type = "TradeGain", Amount = amount} + + static func TradeGainDisplay(): + pass + + static func ProcessTradeGainEffect(effect, state): + state.trade = effect.Amount; + +class CombatGainEffect: + static func NewCombatGainEffect(amount: int): + return {Type = "CombatGain", Amount = amount} + + static func CombatGainDisplay(): + pass + + static func ProcessCombatGainEffect(effect, state): + state.trade = effect.Amount; + +# make cards +static func make_scout(): + var card := Card.new(); + card.name = "Scout" + card.cost = 0; + card.primaryAbilityEffects = [TradeGainEffect.NewTradeGainEffect(1)]; + return card; + +static func make_viper(): + var card := Card.new(); + card.name = "Viper" + card.cost = 0; + card.primaryAbilityEffects = [CombatGainEffect.NewCombatGainEffect(1)]; + return card; + +static func make_starting_deck(): + var deck = []; + for i in range(8): + deck.append(make_scout()) + for i in range(2): + deck.append(make_viper()) + return deck; + + +var player = Player.new() +var rng = RandomNumberGenerator.new() + +func draw_card(): + var cardId = rng.randi_range(0, player.deck.size()-1) + var card = player.deck[cardId] + player.hand.append(card) + player.deck.remove_at(cardId) + card_drawn.emit(card) + + +func draw_cards(n: int): + for i in range(n): + draw_card() + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + player.name = "placeholder" + player.deck = make_starting_deck() + draw_cards(5) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + + + +func _on_button_button_down() -> void: + draw_cards(5) diff --git a/game_state.gd.uid b/game_state.gd.uid new file mode 100644 index 0000000..0cf1747 --- /dev/null +++ b/game_state.gd.uid @@ -0,0 +1 @@ +uid://jyebvspa2jud diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..fc4c7cd --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc8jfct36ppc6" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/multiplayerScene.tscn b/multiplayerScene.tscn new file mode 100644 index 0000000..1beb8aa --- /dev/null +++ b/multiplayerScene.tscn @@ -0,0 +1,41 @@ +[gd_scene format=3 uid="uid://dv0gb47bqfiqr"] + +[ext_resource type="Script" uid="uid://ddnryq3tes123" path="res://MultiplayerController.gd" id="1_ixi2m"] + +[node name="Control" type="Control" unique_id=1661870672] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_ixi2m") + +[node name="Host" type="Button" parent="." unique_id=1368042197] +layout_mode = 0 +offset_left = 84.0 +offset_top = 239.0 +offset_right = 209.0 +offset_bottom = 307.0 +text = "Host +" + +[node name="Join" type="Button" parent="." unique_id=1475030796] +layout_mode = 0 +offset_left = 243.0 +offset_top = 244.0 +offset_right = 368.0 +offset_bottom = 312.0 +text = "Join" + +[node name="Start" type="Button" parent="." unique_id=838367059] +layout_mode = 0 +offset_left = 96.0 +offset_top = 343.0 +offset_right = 355.0 +offset_bottom = 440.0 +text = "start" + +[connection signal="button_down" from="Host" to="." method="_on_host_button_down"] +[connection signal="button_down" from="Join" to="." method="_on_join_button_down"] +[connection signal="button_down" from="Start" to="." method="_on_start_button_down"] diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..8b17828 --- /dev/null +++ b/project.godot @@ -0,0 +1,25 @@ +; 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="TestCardGame" +run/main_scene="uid://dv0gb47bqfiqr" +config/features=PackedStringArray("4.6", "Mobile") +config/icon="res://icon.svg" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" +renderer/rendering_method="mobile"