├── .gitignore ├── 2d ├── topdown │ ├── project │ │ ├── .gitignore │ │ ├── icon.png │ │ ├── assets │ │ │ ├── AH_Tileset.png │ │ │ ├── AH_SpriteSheet_People1.png │ │ │ ├── AH_Tileset.png.import │ │ │ ├── AH_SpriteSheet_People1.png.import │ │ │ ├── entities │ │ │ │ └── player │ │ │ │ │ └── charlie │ │ │ │ │ └── charlie.tscn │ │ │ └── world-tileset.tres │ │ ├── .import │ │ │ ├── duran.png-0f0fa7c52c0a3339e14ea0f020c32b78.md5 │ │ │ ├── duran.png-efc09dedcb8c7422e216a3103c2ee8ad.md5 │ │ │ ├── icon.png-487276ed1e3a0c39cad0279d744ee560.md5 │ │ │ ├── AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.md5 │ │ │ ├── AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.md5 │ │ │ ├── AH_SpriteSheet_People1.png-8eff709a54eacd3d2c5af3df553240c4.md5 │ │ │ ├── icon.png-487276ed1e3a0c39cad0279d744ee560.stex │ │ │ ├── duran.png-0f0fa7c52c0a3339e14ea0f020c32b78.stex │ │ │ ├── duran.png-efc09dedcb8c7422e216a3103c2ee8ad.stex │ │ │ ├── AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.stex │ │ │ ├── AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.stex │ │ │ └── AH_SpriteSheet_People1.png-8eff709a54eacd3d2c5af3df553240c4.stex │ │ ├── default_env.tres │ │ ├── hud.gd │ │ ├── demo2dtopdown.gdextension │ │ ├── icon.png.import │ │ ├── project.godot │ │ └── Main.tscn │ ├── .gitignore │ ├── README.md │ ├── go.mod │ ├── main.go │ ├── Makefile │ ├── go.sum │ └── pkg │ │ └── demo │ │ └── object_player_character.go └── dodge_the_creeps │ ├── project │ ├── screenshots │ │ ├── .gdignore │ │ └── dodge.png │ ├── .gitignore │ ├── icon.webp │ ├── art │ │ ├── gameover.wav │ │ ├── enemyWalking_1.png │ │ ├── enemyWalking_2.png │ │ ├── playerGrey_up1.png │ │ ├── playerGrey_up2.png │ │ ├── enemyFlyingAlt_1.png │ │ ├── enemyFlyingAlt_2.png │ │ ├── enemySwimming_1.png │ │ ├── enemySwimming_2.png │ │ ├── playerGrey_walk1.png │ │ ├── playerGrey_walk2.png │ │ ├── House In a Forest Loop.ogg │ │ ├── House In a Forest Loop.ogg.import │ │ ├── gameover.wav.import │ │ ├── enemyWalking_1.png.import │ │ ├── enemyWalking_2.png.import │ │ ├── playerGrey_up1.png.import │ │ ├── playerGrey_up2.png.import │ │ ├── enemySwimming_1.png.import │ │ ├── enemySwimming_2.png.import │ │ ├── enemyFlyingAlt_1.png.import │ │ ├── enemyFlyingAlt_2.png.import │ │ ├── playerGrey_walk1.png.import │ │ └── playerGrey_walk2.png.import │ ├── fonts │ │ ├── Xolonium-Regular.ttf │ │ ├── Xolonium-Regular.tres │ │ ├── Xolonium-Regular.ttf.import │ │ ├── LICENSE.txt │ │ └── FONTLOG.txt │ ├── Mob.gd │ ├── godotgo.gdextension │ ├── icon.webp.import │ ├── LICENSE │ ├── Player.gd │ ├── HUD.tscn │ ├── Main.gd │ ├── README.md │ ├── Mob.tscn │ ├── Player.tscn │ ├── Main.tscn │ └── project.godot │ ├── .gitignore │ ├── README.md │ ├── go.mod │ ├── main.go │ ├── Makefile │ ├── go.sum │ └── pkg │ └── demo │ └── hud.go ├── go.work ├── README.md └── go.work.sum /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | go.local.mod 3 | -------------------------------------------------------------------------------- /2d/topdown/project/.gitignore: -------------------------------------------------------------------------------- 1 | libs/*.so 2 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/screenshots/.gdignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /2d/topdown/.gitignore: -------------------------------------------------------------------------------- 1 | project/.godot/ 2 | project/lib/ 3 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/.gitignore: -------------------------------------------------------------------------------- 1 | .import 2 | logs/ 3 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/.gitignore: -------------------------------------------------------------------------------- 1 | project/.godot/ 2 | project/lib/ 3 | -------------------------------------------------------------------------------- /go.work: -------------------------------------------------------------------------------- 1 | go 1.21.4 2 | 3 | use ( 4 | ./2d/dodge_the_creeps 5 | ./2d/topdown 6 | ) 7 | -------------------------------------------------------------------------------- /2d/topdown/project/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/icon.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/icon.webp -------------------------------------------------------------------------------- /2d/topdown/project/assets/AH_Tileset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/assets/AH_Tileset.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/gameover.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/gameover.wav -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyWalking_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemyWalking_1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyWalking_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemyWalking_2.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_up1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/playerGrey_up1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_up2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/playerGrey_up2.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/screenshots/dodge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/screenshots/dodge.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyFlyingAlt_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemyFlyingAlt_1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyFlyingAlt_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemyFlyingAlt_2.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemySwimming_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemySwimming_1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemySwimming_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/enemySwimming_2.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_walk1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/playerGrey_walk1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_walk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/playerGrey_walk2.png -------------------------------------------------------------------------------- /2d/topdown/project/assets/AH_SpriteSheet_People1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/assets/AH_SpriteSheet_People1.png -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/fonts/Xolonium-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/fonts/Xolonium-Regular.ttf -------------------------------------------------------------------------------- /2d/topdown/project/.import/duran.png-0f0fa7c52c0a3339e14ea0f020c32b78.md5: -------------------------------------------------------------------------------- 1 | source_md5="7dd2277ce3f632d56fb30fb1e0d46f2d" 2 | dest_md5="57be8dd32808c0b2a33b4d6301153603" 3 | 4 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/duran.png-efc09dedcb8c7422e216a3103c2ee8ad.md5: -------------------------------------------------------------------------------- 1 | source_md5="7dd2277ce3f632d56fb30fb1e0d46f2d" 2 | dest_md5="57be8dd32808c0b2a33b4d6301153603" 3 | 4 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5: -------------------------------------------------------------------------------- 1 | source_md5="0167658bc4406f0d0fe437e0197c415a" 2 | dest_md5="64b0613b3173e1e1c96dd18b6569e62d" 3 | 4 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/House In a Forest Loop.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/dodge_the_creeps/project/art/House In a Forest Loop.ogg -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.md5: -------------------------------------------------------------------------------- 1 | source_md5="f405d3796df42ee3632a979b462e1858" 2 | dest_md5="b9857e6c10096694a042420bffafb797" 3 | 4 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.md5: -------------------------------------------------------------------------------- 1 | source_md5="271f983f96784ffa2bb38e4432d32130" 2 | dest_md5="f562623efb586edeef711c4d2b1a273a" 3 | 4 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_SpriteSheet_People1.png-8eff709a54eacd3d2c5af3df553240c4.md5: -------------------------------------------------------------------------------- 1 | source_md5="271f983f96784ffa2bb38e4432d32130" 2 | dest_md5="323dfc68e511e527825d0d617877b1df" 3 | 4 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex -------------------------------------------------------------------------------- /2d/topdown/project/.import/duran.png-0f0fa7c52c0a3339e14ea0f020c32b78.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/duran.png-0f0fa7c52c0a3339e14ea0f020c32b78.stex -------------------------------------------------------------------------------- /2d/topdown/project/.import/duran.png-efc09dedcb8c7422e216a3103c2ee8ad.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/duran.png-efc09dedcb8c7422e216a3103c2ee8ad.stex -------------------------------------------------------------------------------- /2d/topdown/project/default_env.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Environment" load_steps=2 format=2] 2 | 3 | [sub_resource type="Sky" id=1] 4 | 5 | [resource] 6 | background_mode = 2 7 | background_sky = SubResource( 1 ) 8 | -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.stex -------------------------------------------------------------------------------- /2d/dodge_the_creeps/README.md: -------------------------------------------------------------------------------- 1 | # Dodge the Creeps 2 | 3 | This is a port of from the the godot demo repository: https://github.com/godotengine/godot-demo-projects/tree/master/2d/dodge_the_creeps 4 | 5 | ## Getting Started 6 | 7 | $ make && make run -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.stex -------------------------------------------------------------------------------- /2d/topdown/project/.import/AH_SpriteSheet_People1.png-8eff709a54eacd3d2c5af3df553240c4.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/godot-go/godot-go-demo-projects/HEAD/2d/topdown/project/.import/AH_SpriteSheet_People1.png-8eff709a54eacd3d2c5af3df553240c4.stex -------------------------------------------------------------------------------- /2d/topdown/README.md: -------------------------------------------------------------------------------- 1 | # Top-Down Demo 2 | 3 | This project demonstrates the following: 4 | * A Class implemented in Go. 5 | * How to connect a Signal in GDScript to Go Class. 6 | 7 | # Credit 8 | 9 | * Tileset pulled from [Free RPG Asset Pack](https://biloumaster.itch.io/free-rpg-asset) 10 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/fonts/Xolonium-Regular.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Font" load_steps=2 format=3 uid="uid://dyjc58f6sdms0"] 2 | 3 | [ext_resource type="FontData" uid="uid://cit6gwe5px1q8" path="res://fonts/Xolonium-Regular.ttf" id="1_mnk3h"] 4 | 5 | [resource] 6 | data/0 = ExtResource( "1_mnk3h" ) 7 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Mob.gd: -------------------------------------------------------------------------------- 1 | extends RigidBody2D 2 | 3 | func _ready(): 4 | $AnimatedSprite2D.play() 5 | var mob_types = Array($AnimatedSprite2D.sprite_frames.get_animation_names()) 6 | $AnimatedSprite2D.animation = mob_types.pick_random() 7 | 8 | 9 | func _on_VisibilityNotifier2D_screen_exited(): 10 | queue_free() 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # godot-go-demo-projects 2 | 3 | This repository is a collection of godot projects that demostrates how to integerate godot-go. 4 | 5 | Each demo project is self-contained and you will need to `cd` into their respective directories to run `make && make run` 6 | 7 | ## Getting Started 8 | 9 | to run Dodge the Creeps: 10 | 11 | $ cd 2d/dodge_the_creeps 12 | $ make && make run 13 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/go.mod: -------------------------------------------------------------------------------- 1 | module godot-go-demo-projects/2d/dodgethecreep 2 | 3 | go 1.21.4 4 | 5 | require ( 6 | github.com/godot-go/godot-go v0.3.17 7 | go.uber.org/zap v1.24.0 8 | ) 9 | 10 | require ( 11 | github.com/CannibalVox/cgoalloc v1.2.1 // indirect 12 | github.com/davecgh/go-spew v1.1.1 // indirect 13 | go.uber.org/atomic v1.11.0 // indirect 14 | go.uber.org/multierr v1.11.0 // indirect 15 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect 16 | golang.org/x/text v0.12.0 // indirect 17 | ) 18 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/House In a Forest Loop.ogg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="oggvorbisstr" 4 | type="AudioStreamOggVorbis" 5 | uid="uid://q2pf4fr8d0ks" 6 | path="res://.godot/imported/House In a Forest Loop.ogg-1a6a72ae843ad792b7039931227e8d50.oggvorbisstr" 7 | 8 | [deps] 9 | 10 | source_file="res://art/House In a Forest Loop.ogg" 11 | dest_files=["res://.godot/imported/House In a Forest Loop.ogg-1a6a72ae843ad792b7039931227e8d50.oggvorbisstr"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /2d/topdown/project/hud.gd: -------------------------------------------------------------------------------- 1 | extends CanvasLayer 2 | 3 | var player: CharacterBody2D 4 | 5 | func _ready(): 6 | player = get_node("../objects/player") 7 | var err = player.connect("moved",Callable(self,"_on_player_moved")) 8 | if err != OK: 9 | print("failure to connect to moved player signal") 10 | 11 | 12 | func _on_player_moved(velocity: Vector2) -> void: 13 | var dir = player.direction 14 | var pos = player.position 15 | $"top/container/direction".text = "DIR: (%.2f, %.2f)" % [dir.x, dir.y] 16 | $"top/container/position".text = "POS: (%.2f, %.2f)" % [pos.x, pos.y] 17 | -------------------------------------------------------------------------------- /2d/topdown/go.mod: -------------------------------------------------------------------------------- 1 | module godot-go-demo-projects/2d/topdown 2 | 3 | go 1.21.4 4 | 5 | require ( 6 | github.com/godot-go/godot-go v0.3.17 7 | go.uber.org/zap v1.24.0 8 | ) 9 | 10 | require ( 11 | github.com/CannibalVox/cgoalloc v1.2.1 // indirect 12 | github.com/davecgh/go-spew v1.1.1 // indirect 13 | github.com/ianlancetaylor/cgosymbolizer v0.0.0-20230328201059-365e72989107 // indirect 14 | go.uber.org/atomic v1.11.0 // indirect 15 | go.uber.org/multierr v1.11.0 // indirect 16 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect 17 | golang.org/x/text v0.12.0 // indirect 18 | ) 19 | -------------------------------------------------------------------------------- /2d/topdown/project/demo2dtopdown.gdextension: -------------------------------------------------------------------------------- 1 | [configuration] 2 | 3 | entry_symbol = "GodotGoDemo2DTopDownInit" 4 | compatibility_minimum = 4.1 5 | 6 | [libraries] 7 | 8 | macos.debug = "res://lib/libgodotgo-2dtopdown-macos-amd64.framework" 9 | macos.release = "res://lib/libgodotgo-2dtopdown-macos-amd64.framework" 10 | windows.debug.x86_64 = "res://lib/libgodotgo-2dtopdown-windows-amd64.dll" 11 | windows.release.x86_64 = "res://lib/libgodotgo-2dtopdown-windows-amd64.dll" 12 | linux.debug.x86_64 = "res://lib/libgodotgo-2dtopdown-linux-amd64.so" 13 | linux.release.x86_64 = "res://lib/libgodotgo-2dtopdown-linux-amd64.so" 14 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/gameover.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dw26fpygeag8o" 6 | path="res://.godot/imported/gameover.wav-98c95c744b35280048c2bd093cf8a356.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://art/gameover.wav" 11 | dest_files=["res://.godot/imported/gameover.wav-98c95c744b35280048c2bd093cf8a356.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=true 20 | edit/normalize=true 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/godotgo.gdextension: -------------------------------------------------------------------------------- 1 | [configuration] 2 | 3 | entry_symbol = "GodotGoDemo2DDodgeTheCreepsInit" 4 | compatibility_minimum = 4.1 5 | 6 | [libraries] 7 | 8 | macos.debug = "res://lib/libgodotgo-2ddodgethecreeps-macos-amd64.framework" 9 | macos.release = "res://lib/libgodotgo-2ddodgethecreeps-macos-amd64.framework" 10 | windows.debug.x86_64 = "res://lib/libgodotgo-2ddodgethecreeps-windows-amd64.dll" 11 | windows.release.x86_64 = "res://lib/libgodotgo-2ddodgethecreeps-windows-amd64.dll" 12 | linux.debug.x86_64 = "res://lib/libgodotgo-2ddodgethecreeps-linux-amd64.so" 13 | linux.release.x86_64 = "res://lib/libgodotgo-2ddodgethecreeps-linux-amd64.so" 14 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/fonts/Xolonium-Regular.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://cit6gwe5px1q8" 6 | path="res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e2bb73fba.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://fonts/Xolonium-Regular.ttf" 11 | dest_files=["res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e2bb73fba.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | multichannel_signed_distance_field=false 19 | msdf_pixel_range=8 20 | msdf_size=48 21 | allow_system_fallback=true 22 | force_autohinter=false 23 | hinting=1 24 | subpixel_positioning=1 25 | oversampling=0.0 26 | Fallbacks=null 27 | fallbacks=[] 28 | Compress=null 29 | compress=true 30 | preload=[] 31 | language_support={} 32 | script_support={} 33 | opentype_features={} 34 | -------------------------------------------------------------------------------- /2d/topdown/project/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bga6iutu2aki0" 6 | path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.png" 14 | dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/icon.webp.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://brwp8bimc75uu" 6 | path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.webp" 14 | dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/topdown/project/assets/AH_Tileset.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bgeb607ckhyjf" 6 | path="res://.godot/imported/AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/AH_Tileset.png" 14 | dest_files=["res://.godot/imported/AH_Tileset.png-e0495009c57c12be6b1d11005ca55e8c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=2 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=false 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyWalking_1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bu4221t7qpa7d" 6 | path="res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc1e6471.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemyWalking_1.png" 14 | dest_files=["res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc1e6471.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyWalking_2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://booij5t7h4efb" 6 | path="res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb0436246b935.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemyWalking_2.png" 14 | dest_files=["res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb0436246b935.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_up1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4yyoafu8bi0q" 6 | path="res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314d44564.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/playerGrey_up1.png" 14 | dest_files=["res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314d44564.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_up2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bko65a0nd66st" 6 | path="res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa7552ee79.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/playerGrey_up2.png" 14 | dest_files=["res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa7552ee79.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemySwimming_1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://5lvm88ij4jqn" 6 | path="res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e98a3d80.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemySwimming_1.png" 14 | dest_files=["res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e98a3d80.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemySwimming_2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bng45cvsgufqc" 6 | path="res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340bd4a0a62.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemySwimming_2.png" 14 | dest_files=["res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340bd4a0a62.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyFlyingAlt_1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://yqglrrsx7j1f" 6 | path="res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6332e9489.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemyFlyingAlt_1.png" 14 | dest_files=["res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6332e9489.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/enemyFlyingAlt_2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bpot8awhdn6ph" 6 | path="res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3cd932c076.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/enemyFlyingAlt_2.png" 14 | dest_files=["res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3cd932c076.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_walk1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ftkxr8r4qghp" 6 | path="res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4458c2742.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/playerGrey_walk1.png" 14 | dest_files=["res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4458c2742.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/art/playerGrey_walk2.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://couyhcegeihme" 6 | path="res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c51884043.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://art/playerGrey_walk2.png" 14 | dest_files=["res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c51884043.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/topdown/project/assets/AH_SpriteSheet_People1.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://tc8kxkblr3p2" 6 | path="res://.godot/imported/AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://assets/AH_SpriteSheet_People1.png" 14 | dest_files=["res://.godot/imported/AH_SpriteSheet_People1.png-23cf2e3dcd7fc5a0327e8265d426f1f0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=2 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=false 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "C" 4 | import ( 5 | "godot-go-demo-projects/2d/dodgethecreep/pkg/demo" 6 | "unsafe" 7 | 8 | "github.com/godot-go/godot-go/pkg/core" 9 | "github.com/godot-go/godot-go/pkg/ffi" 10 | "github.com/godot-go/godot-go/pkg/log" 11 | ) 12 | 13 | //export GodotGoDemo2DDodgeTheCreepsInit 14 | func GodotGoDemo2DDodgeTheCreepsInit(p_get_proc_address unsafe.Pointer, p_library unsafe.Pointer, r_initialization unsafe.Pointer) bool { 15 | log.Debug("GodotGoDemo2DDodgeTheCreepsInit called") 16 | initObj := core.NewInitObject( 17 | (ffi.GDExtensionInterfaceGetProcAddress)(p_get_proc_address), 18 | (ffi.GDExtensionClassLibraryPtr)(p_library), 19 | (*ffi.GDExtensionInitialization)(unsafe.Pointer(r_initialization)), 20 | ) 21 | 22 | initObj.RegisterSceneInitializer(func() { 23 | demo.RegisterClassHUD() 24 | }) 25 | 26 | initObj.RegisterSceneTerminator(func() { 27 | }) 28 | 29 | return initObj.Init() 30 | } 31 | 32 | func main() { 33 | // log.Trace("this application is meant to be run as a plugin to godot") 34 | } -------------------------------------------------------------------------------- /2d/topdown/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "C" 4 | import ( 5 | "godot-go-demo-projects/2d/topdown/pkg/demo" 6 | "unsafe" 7 | 8 | "github.com/godot-go/godot-go/pkg/core" 9 | "github.com/godot-go/godot-go/pkg/ffi" 10 | "github.com/godot-go/godot-go/pkg/log" 11 | ) 12 | 13 | //export GodotGoDemo2DTopDownInit 14 | func GodotGoDemo2DTopDownInit(p_get_proc_address unsafe.Pointer, p_library unsafe.Pointer, r_initialization unsafe.Pointer) bool { 15 | log.Debug("ExampleLibraryInit called") 16 | initObj := core.NewInitObject( 17 | (ffi.GDExtensionInterfaceGetProcAddress)(p_get_proc_address), 18 | (ffi.GDExtensionClassLibraryPtr)(p_library), 19 | (*ffi.GDExtensionInitialization)(unsafe.Pointer(r_initialization)), 20 | ) 21 | 22 | initObj.RegisterSceneInitializer(func() { 23 | demo.PlayerCharacterGDExtensionInit() 24 | demo.RegisterClassPlayerCharacter() 25 | }) 26 | 27 | initObj.RegisterSceneTerminator(func() { 28 | demo.PlayerCharacterGDExtensionTerminate() 29 | }) 30 | 31 | return initObj.Init() 32 | } 33 | 34 | func main() { 35 | // log.Trace("this application is meant to be run as a plugin to godot") 36 | } -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 KidsCanCode 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /2d/topdown/project/project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="core test" 14 | run/main_scene="res://Main.tscn" 15 | config/features=PackedStringArray("4.2") 16 | config/icon="res://icon.png" 17 | 18 | [display] 19 | 20 | window/size/viewport_width=640 21 | window/size/viewport_height=480 22 | window/size/mode=2 23 | window/size/borderless=true 24 | window/stretch/mode="viewport" 25 | 26 | [gdnative] 27 | 28 | singletons=[] 29 | 30 | [physics] 31 | 32 | 2d/default_gravity=9.8 33 | 2d/default_gravity_vector=Vector2(0, 0) 34 | 35 | [rendering] 36 | 37 | textures/canvas_textures/default_texture_filter=0 38 | viewport/hdr_2d=true 39 | quality/intended_usage/framebuffer_allocation=1 40 | quality/intended_usage/framebuffer_allocation.mobile=1 41 | quality/2d/use_pixel_snap=true 42 | environment/default_environment="res://default_env.tres" 43 | quality/dynamic_fonts/use_oversampling=false 44 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Player.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | 3 | signal hit 4 | 5 | @export var speed = 400 # How fast the player will move (pixels/sec). 6 | var screen_size # Size of the game window. 7 | 8 | func _ready(): 9 | screen_size = get_viewport_rect().size 10 | hide() 11 | 12 | 13 | func _process(delta): 14 | var velocity = Vector2.ZERO # The player's movement vector. 15 | if Input.is_action_pressed(&"move_right"): 16 | velocity.x += 1 17 | if Input.is_action_pressed(&"move_left"): 18 | velocity.x -= 1 19 | if Input.is_action_pressed(&"move_down"): 20 | velocity.y += 1 21 | if Input.is_action_pressed(&"move_up"): 22 | velocity.y -= 1 23 | 24 | if velocity.length() > 0: 25 | velocity = velocity.normalized() * speed 26 | $AnimatedSprite2D.play() 27 | else: 28 | $AnimatedSprite2D.stop() 29 | 30 | position += velocity * delta 31 | position = position.clamp(Vector2.ZERO, screen_size) 32 | 33 | if velocity.x != 0: 34 | $AnimatedSprite2D.animation = &"right" 35 | $AnimatedSprite2D.flip_v = false 36 | $AnimatedSprite2D.flip_h = velocity.x < 0 37 | elif velocity.y != 0: 38 | $AnimatedSprite2D.animation = &"up" 39 | $AnimatedSprite2D.flip_v = velocity.y > 0 40 | 41 | 42 | func start(pos): 43 | position = pos 44 | show() 45 | $CollisionShape2D.disabled = false 46 | 47 | 48 | func _on_Player_body_entered(_body): 49 | hide() # Player disappears after being hit. 50 | hit.emit() 51 | # Must be deferred as we can't change physics properties on a physics callback. 52 | $CollisionShape2D.set_deferred(&"disabled", true) 53 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/HUD.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://ccqoreueuxdb7"] 2 | 3 | [sub_resource type="InputEventAction" id="InputEventAction_fopy7"] 4 | action = &"start_game" 5 | 6 | [sub_resource type="Shortcut" id="4"] 7 | events = [SubResource("InputEventAction_fopy7")] 8 | 9 | [node name="HUD" type="HUD"] 10 | 11 | [node name="ScoreLabel" type="Label" parent="."] 12 | anchors_preset = 10 13 | anchor_right = 1.0 14 | offset_bottom = 78.0 15 | grow_horizontal = 2 16 | theme_override_font_sizes/font_size = 60 17 | text = "0" 18 | horizontal_alignment = 1 19 | 20 | [node name="MessageLabel" type="Label" parent="."] 21 | anchors_preset = 14 22 | anchor_top = 0.5 23 | anchor_right = 1.0 24 | anchor_bottom = 0.5 25 | offset_top = -79.5 26 | offset_bottom = 79.5 27 | grow_horizontal = 2 28 | grow_vertical = 2 29 | theme_override_font_sizes/font_size = 60 30 | text = "Dodge the 31 | Creeps" 32 | horizontal_alignment = 1 33 | 34 | [node name="StartButton" type="Button" parent="."] 35 | anchors_preset = 7 36 | anchor_left = 0.5 37 | anchor_top = 1.0 38 | anchor_right = 0.5 39 | anchor_bottom = 1.0 40 | offset_left = -90.0 41 | offset_top = -200.0 42 | offset_right = 90.0 43 | offset_bottom = -100.0 44 | grow_horizontal = 2 45 | grow_vertical = 0 46 | theme_override_font_sizes/font_size = 60 47 | shortcut = SubResource("4") 48 | text = "Start" 49 | 50 | [node name="MessageTimer" type="Timer" parent="."] 51 | one_shot = true 52 | 53 | [connection signal="pressed" from="StartButton" to="." method="_on_StartButton_pressed"] 54 | [connection signal="timeout" from="MessageTimer" to="." method="_on_MessageTimer_timeout"] 55 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Main.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | @export var mob_scene: PackedScene 4 | var score 5 | 6 | func game_over(): 7 | $ScoreTimer.stop() 8 | $MobTimer.stop() 9 | $HUD.show_game_over() 10 | $Music.stop() 11 | $DeathSound.play() 12 | 13 | 14 | func new_game(): 15 | get_tree().call_group(&"mobs", &"queue_free") 16 | score = 0 17 | $Player.start($StartPosition.position) 18 | $StartTimer.start() 19 | $HUD.update_score(score) 20 | $HUD.show_message("Get Ready") 21 | $Music.play() 22 | 23 | 24 | func _on_MobTimer_timeout(): 25 | # Create a new instance of the Mob scene. 26 | var mob = mob_scene.instantiate() 27 | 28 | # Choose a random location on Path2D. 29 | var mob_spawn_location = get_node(^"MobPath/MobSpawnLocation") 30 | mob_spawn_location.progress = randi() 31 | 32 | # Set the mob's direction perpendicular to the path direction. 33 | var direction = mob_spawn_location.rotation + PI / 2 34 | 35 | # Set the mob's position to a random location. 36 | mob.position = mob_spawn_location.position 37 | 38 | # Add some randomness to the direction. 39 | direction += randf_range(-PI / 4, PI / 4) 40 | mob.rotation = direction 41 | 42 | # Choose the velocity for the mob. 43 | var velocity = Vector2(randf_range(150.0, 250.0), 0.0) 44 | mob.linear_velocity = velocity.rotated(direction) 45 | 46 | # Spawn the mob by adding it to the Main scene. 47 | add_child(mob) 48 | 49 | func _on_ScoreTimer_timeout(): 50 | score += 1 51 | $HUD.update_score(score) 52 | 53 | 54 | func _on_StartTimer_timeout(): 55 | $MobTimer.start() 56 | $ScoreTimer.start() 57 | 58 | 59 | func _on_hud_start_game(): 60 | pass # Replace with function body. 61 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/README.md: -------------------------------------------------------------------------------- 1 | # Dodge the Creeps 2 | 3 | This is a simple game where your character must move 4 | and avoid the enemies for as long as possible. 5 | 6 | This is a finished version of the game featured in the 7 | ["Your first 2D game"](https://docs.godotengine.org/en/latest/getting_started/first_2d_game/index.html) 8 | tutorial in the documentation. For more details, 9 | consider following the tutorial in the documentation. 10 | 11 | Language: GDScript 12 | 13 | Renderer: Vulkan Mobile 14 | 15 | Note: There is a C# version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/mono/dodge_the_creeps). 16 | 17 | Note: There is a GDNative C++ version available [here](https://github.com/godotengine/gdnative-demos/tree/master/cpp/dodge_the_creeps). 18 | 19 | Check out this demo on the asset library: https://godotengine.org/asset-library/asset/515 20 | 21 | ## Screenshots 22 | 23 | ![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif) 24 | 25 | ![Screenshot](screenshots/dodge.png) 26 | 27 | ## Copying 28 | 29 | `art/House In a Forest Loop.ogg` Copyright © 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](http://creativecommons.org/licenses/by/3.0/). Source: https://opengameart.org/content/loop-house-in-a-forest 30 | 31 | Images are from "Abstract Platformer". Created in 2016 by kenney.nl, [CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0/). Source: https://www.kenney.nl/assets/abstract-platformer 32 | 33 | Font is "Xolonium". Copyright © 2011-2016 Severin Meyer , with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in `fonts/LICENSE.txt`. 34 | -------------------------------------------------------------------------------- /2d/topdown/Makefile: -------------------------------------------------------------------------------- 1 | .DEFAULT_GOAL := build 2 | 3 | GOOS?=$(shell go env GOOS) 4 | GOARCH?=$(shell go env GOARCH) 5 | CLANG_FORMAT?=$(shell which clang-format | which clang-format-10 | which clang-format-11 | which clang-format-12) 6 | GODOT?=$(shell which godot) 7 | CWD=$(shell pwd) 8 | 9 | OUTPUT_PATH=project/lib 10 | TEST_MAIN=main.go 11 | 12 | ifeq ($(GOOS),windows) 13 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2dtopdown-windows-$(GOARCH).dll 14 | else ifeq ($(GOOS),darwin) 15 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2dtopdown-macos-$(GOARCH).framework 16 | else ifeq ($(GOOS),linux) 17 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2dtopdown-linux-$(GOARCH).so 18 | else 19 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2dtopdown-$(GOOS)-$(GOARCH).so 20 | endif 21 | 22 | .PHONY: goenv build clean run 23 | 24 | goenv: 25 | go env 26 | 27 | build: goenv 28 | CGO_ENABLED=1 \ 29 | GOOS=$(GOOS) \ 30 | GOARCH=$(GOARCH) \ 31 | CGO_CFLAGS='-Og -g3 -g -DX86=1 -fPIC' \ 32 | CGO_LDFLAGS='-Og -g3 -g' \ 33 | go build -gcflags=all="-N -l" -tags tools -buildmode=c-shared -x -trimpath -o "$(TEST_BINARY_PATH)" $(TEST_MAIN) 34 | 35 | clean: 36 | rm -f project/lib/libgodotgo-* 37 | 38 | ci_gen_project_files: 39 | CI=1 \ 40 | LOG_LEVEL=info \ 41 | GOTRACEBACK=1 \ 42 | GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \ 43 | $(GODOT) --headless --verbose --path project/ --editor --quit 44 | 45 | run: 46 | LOG_LEVEL=info \ 47 | GOTRACEBACK=1 \ 48 | GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=0 \ 49 | $(GODOT) --debug --path project/ 50 | 51 | editor: 52 | LOG_LEVEL=info \ 53 | GOTRACEBACK=1 \ 54 | GODEBUG=sbrk=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=0 \ 55 | $(GODOT) --verbose --debug --path project/ --editor 56 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/Makefile: -------------------------------------------------------------------------------- 1 | .DEFAULT_GOAL := build 2 | 3 | GOOS?=$(shell go env GOOS) 4 | GOARCH?=$(shell go env GOARCH) 5 | CLANG_FORMAT?=$(shell which clang-format | which clang-format-10 | which clang-format-11 | which clang-format-12) 6 | GODOT?=$(shell which godot) 7 | CWD=$(shell pwd) 8 | 9 | OUTPUT_PATH=project/lib 10 | TEST_MAIN=main.go 11 | 12 | ifeq ($(GOOS),windows) 13 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2ddodgethecreeps-windows-$(GOARCH).dll 14 | else ifeq ($(GOOS),darwin) 15 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2ddodgethecreeps-macos-$(GOARCH).framework 16 | else ifeq ($(GOOS),linux) 17 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2ddodgethecreeps-linux-$(GOARCH).so 18 | else 19 | TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-2ddodgethecreeps-$(GOOS)-$(GOARCH).so 20 | endif 21 | 22 | .PHONY: goenv build clean run 23 | 24 | goenv: 25 | go env 26 | 27 | build: goenv 28 | CGO_ENABLED=1 \ 29 | GOOS=$(GOOS) \ 30 | GOARCH=$(GOARCH) \ 31 | CGO_CFLAGS='-Og -g3 -g -DX86=1 -fPIC' \ 32 | CGO_LDFLAGS='-Og -g3 -g' \ 33 | go build -gcflags=all="-N -l" -tags tools -buildmode=c-shared -x -trimpath -o "$(TEST_BINARY_PATH)" $(TEST_MAIN) 34 | 35 | clean: 36 | rm -f project/lib/libgodotgo-* 37 | 38 | ci_gen_project_files: 39 | CI=1 \ 40 | LOG_LEVEL=info \ 41 | GOTRACEBACK=1 \ 42 | GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \ 43 | $(GODOT) --headless --verbose --path project/ --editor --quit 44 | 45 | run: 46 | LOG_LEVEL=info \ 47 | GOTRACEBACK=1 \ 48 | GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=0 \ 49 | $(GODOT) --path project/ 50 | 51 | editor: 52 | LOG_LEVEL=info \ 53 | GOTRACEBACK=1 \ 54 | GODEBUG=sbrk=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=0 \ 55 | $(GODOT) --verbose --debug --path project/ --editor 56 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Mob.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=10 format=3 uid="uid://rkdnhqgf2hpj"] 2 | 3 | [ext_resource type="Script" path="res://Mob.gd" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://yqglrrsx7j1f" path="res://art/enemyFlyingAlt_1.png" id="2"] 5 | [ext_resource type="Texture2D" uid="uid://bpot8awhdn6ph" path="res://art/enemyFlyingAlt_2.png" id="3"] 6 | [ext_resource type="Texture2D" uid="uid://bu4221t7qpa7d" path="res://art/enemyWalking_1.png" id="4"] 7 | [ext_resource type="Texture2D" uid="uid://booij5t7h4efb" path="res://art/enemyWalking_2.png" id="5"] 8 | [ext_resource type="Texture2D" uid="uid://5lvm88ij4jqn" path="res://art/enemySwimming_1.png" id="6"] 9 | [ext_resource type="Texture2D" uid="uid://bng45cvsgufqc" path="res://art/enemySwimming_2.png" id="7"] 10 | 11 | [sub_resource type="SpriteFrames" id="1"] 12 | animations = [{ 13 | "frames": [ExtResource( "6" ), ExtResource( "7" )], 14 | "loop": true, 15 | "name": &"swim", 16 | "speed": 4.0 17 | }, { 18 | "frames": [ExtResource( "2" ), ExtResource( "3" )], 19 | "loop": true, 20 | "name": &"fly", 21 | "speed": 3.0 22 | }, { 23 | "frames": [ExtResource( "4" ), ExtResource( "5" )], 24 | "loop": true, 25 | "name": &"walk", 26 | "speed": 4.0 27 | }] 28 | 29 | [sub_resource type="CapsuleShape2D" id="2"] 30 | radius = 37.0 31 | height = 100.0 32 | 33 | [node name="Mob" type="RigidDynamicBody2D" groups=["mobs"]] 34 | collision_mask = 0 35 | gravity_scale = 0.0 36 | script = ExtResource( "1" ) 37 | 38 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 39 | scale = Vector2(0.75, 0.75) 40 | frames = SubResource( "1" ) 41 | animation = &"walk" 42 | 43 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 44 | rotation = 1.5708 45 | shape = SubResource( "2" ) 46 | 47 | [node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] 48 | 49 | [connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] 50 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Player.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=13 format=3 uid="uid://4vwrqjegqwpj"] 2 | 3 | [ext_resource type="Script" path="res://Player.gd" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://ftkxr8r4qghp" path="res://art/playerGrey_walk1.png" id="2"] 5 | [ext_resource type="Texture2D" uid="uid://couyhcegeihme" path="res://art/playerGrey_walk2.png" id="3"] 6 | [ext_resource type="Texture2D" uid="uid://b4yyoafu8bi0q" path="res://art/playerGrey_up1.png" id="4"] 7 | [ext_resource type="Texture2D" uid="uid://bko65a0nd66st" path="res://art/playerGrey_up2.png" id="5"] 8 | 9 | [sub_resource type="SpriteFrames" id="1"] 10 | animations = [{ 11 | "frames": [ExtResource( "2" ), ExtResource( "3" )], 12 | "loop": true, 13 | "name": &"right", 14 | "speed": 5.0 15 | }, { 16 | "frames": [ExtResource( "4" ), ExtResource( "5" )], 17 | "loop": true, 18 | "name": &"up", 19 | "speed": 5.0 20 | }] 21 | 22 | [sub_resource type="CapsuleShape2D" id="2"] 23 | radius = 27.0 24 | height = 68.0 25 | 26 | [sub_resource type="Gradient" id="3"] 27 | colors = PackedColorArray(1, 1, 1, 0.501961, 1, 1, 1, 0) 28 | 29 | [sub_resource type="GradientTexture1D" id="4"] 30 | gradient = SubResource( "3" ) 31 | 32 | [sub_resource type="Curve" id="5"] 33 | _data = [Vector2(0.00501098, 0.5), 0.0, 0.0, 0, 0, Vector2(0.994989, 0.324), 0.0, 0.0, 0, 0] 34 | 35 | [sub_resource type="CurveTexture" id="6"] 36 | curve = SubResource( "5" ) 37 | 38 | [sub_resource type="ParticlesMaterial" id="7"] 39 | gravity = Vector3(0, 0, 0) 40 | scale_curve = SubResource( "6" ) 41 | color_ramp = SubResource( "4" ) 42 | 43 | [node name="Player" type="Area2D"] 44 | z_index = 10 45 | script = ExtResource( "1" ) 46 | 47 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 48 | scale = Vector2(0.5, 0.5) 49 | frames = SubResource( "1" ) 50 | animation = &"right" 51 | 52 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 53 | shape = SubResource( "2" ) 54 | 55 | [node name="Trail" type="GPUParticles2D" parent="."] 56 | z_index = -1 57 | amount = 10 58 | speed_scale = 2.0 59 | local_coords = false 60 | process_material = SubResource( "7" ) 61 | texture = ExtResource( "2" ) 62 | 63 | [connection signal="body_entered" from="." to="." method="_on_Player_body_entered"] 64 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/Main.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=8 format=3 uid="uid://cyfwty2q3rdse"] 2 | 3 | [ext_resource type="Script" path="res://Main.gd" id="1"] 4 | [ext_resource type="PackedScene" uid="uid://rkdnhqgf2hpj" path="res://Mob.tscn" id="2"] 5 | [ext_resource type="PackedScene" uid="uid://4vwrqjegqwpj" path="res://Player.tscn" id="3"] 6 | [ext_resource type="PackedScene" uid="uid://ccqoreueuxdb7" path="res://HUD.tscn" id="4"] 7 | [ext_resource type="AudioStream" uid="uid://q2pf4fr8d0ks" path="res://art/House In a Forest Loop.ogg" id="5"] 8 | [ext_resource type="AudioStream" uid="uid://dw26fpygeag8o" path="res://art/gameover.wav" id="6"] 9 | 10 | [sub_resource type="Curve2D" id="1"] 11 | _data = { 12 | "points": PackedVector2Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 480, 720, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0) 13 | } 14 | point_count = 5 15 | 16 | [node name="Main" type="Node"] 17 | script = ExtResource("1") 18 | mob_scene = ExtResource("2") 19 | 20 | [node name="ColorRect" type="ColorRect" parent="."] 21 | anchors_preset = 15 22 | anchor_right = 1.0 23 | anchor_bottom = 1.0 24 | grow_horizontal = 2 25 | grow_vertical = 2 26 | color = Color(0.219608, 0.372549, 0.380392, 1) 27 | 28 | [node name="Player" parent="." instance=ExtResource("3")] 29 | 30 | [node name="MobTimer" type="Timer" parent="."] 31 | wait_time = 0.5 32 | 33 | [node name="ScoreTimer" type="Timer" parent="."] 34 | 35 | [node name="StartTimer" type="Timer" parent="."] 36 | wait_time = 2.0 37 | one_shot = true 38 | 39 | [node name="StartPosition" type="Marker2D" parent="."] 40 | position = Vector2(240, 450) 41 | 42 | [node name="MobPath" type="Path2D" parent="."] 43 | curve = SubResource("1") 44 | 45 | [node name="MobSpawnLocation" type="PathFollow2D" parent="MobPath"] 46 | 47 | [node name="HUD" parent="." instance=ExtResource("4")] 48 | 49 | [node name="Music" type="AudioStreamPlayer" parent="."] 50 | stream = ExtResource("5") 51 | 52 | [node name="DeathSound" type="AudioStreamPlayer" parent="."] 53 | stream = ExtResource("6") 54 | 55 | [connection signal="hit" from="Player" to="." method="game_over"] 56 | [connection signal="timeout" from="MobTimer" to="." method="_on_MobTimer_timeout"] 57 | [connection signal="timeout" from="ScoreTimer" to="." method="_on_ScoreTimer_timeout"] 58 | [connection signal="timeout" from="StartTimer" to="." method="_on_StartTimer_timeout"] 59 | [connection signal="start_game" from="HUD" to="." method="new_game"] 60 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/go.sum: -------------------------------------------------------------------------------- 1 | github.com/CannibalVox/cgoalloc v1.2.1 h1:5UKpiIRk5rHEO3vNBrCgi8x36K9hUET4Piyyhje2no8= 2 | github.com/CannibalVox/cgoalloc v1.2.1/go.mod h1:/O2DJI63phdTMjYasQIv7ib3XAi29LEM6BXS+plQJic= 3 | github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= 4 | github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 5 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 6 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 7 | github.com/godot-go/godot-go v0.3.17 h1:9NcNf8oLcr7E9EdPibX+k/cSzO2p62uueDN10nIjttA= 8 | github.com/godot-go/godot-go v0.3.17/go.mod h1:kjhXXeLopiQNazv1xUFzXW3Pqw1l40yxHE0u0mFfP6k= 9 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 10 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 11 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 12 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 13 | github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= 14 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 15 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 16 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 17 | go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= 18 | go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= 19 | go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= 20 | go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 21 | go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= 22 | go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= 23 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY= 24 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= 25 | golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= 26 | golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 27 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 28 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 29 | -------------------------------------------------------------------------------- /2d/topdown/go.sum: -------------------------------------------------------------------------------- 1 | github.com/CannibalVox/cgoalloc v1.2.1 h1:5UKpiIRk5rHEO3vNBrCgi8x36K9hUET4Piyyhje2no8= 2 | github.com/CannibalVox/cgoalloc v1.2.1/go.mod h1:/O2DJI63phdTMjYasQIv7ib3XAi29LEM6BXS+plQJic= 3 | github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= 4 | github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 5 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 6 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 7 | github.com/godot-go/godot-go v0.3.10 h1:r4o04m68VVBmFYCLjBxfZtmg93DaoAny7Cb7sJoKvnc= 8 | github.com/godot-go/godot-go v0.3.10/go.mod h1:THjRpS+zHr6nYNOgIY573ncvCbvIQfssGRbevT/rvT0= 9 | github.com/godot-go/godot-go v0.3.17 h1:9NcNf8oLcr7E9EdPibX+k/cSzO2p62uueDN10nIjttA= 10 | github.com/godot-go/godot-go v0.3.17/go.mod h1:kjhXXeLopiQNazv1xUFzXW3Pqw1l40yxHE0u0mFfP6k= 11 | github.com/ianlancetaylor/cgosymbolizer v0.0.0-20230328201059-365e72989107 h1:vtb3u/oSPSI/zjdDGpeAKFDASS5ry10XpchYFIFClmM= 12 | github.com/ianlancetaylor/cgosymbolizer v0.0.0-20230328201059-365e72989107/go.mod h1:DvXTE/K/RtHehxU8/GtDs4vFtfw64jJ3PaCnFri8CRg= 13 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 14 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 15 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 16 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 17 | github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= 18 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 19 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 20 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 21 | go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= 22 | go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= 23 | go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= 24 | go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 25 | go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= 26 | go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= 27 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY= 28 | golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= 29 | golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= 30 | golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 31 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 32 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 33 | -------------------------------------------------------------------------------- /2d/topdown/project/assets/entities/player/charlie/charlie.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=12 format=3 uid="uid://cokt0ll6rpjdu"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://tc8kxkblr3p2" path="res://assets/AH_SpriteSheet_People1.png" id="2"] 4 | 5 | [sub_resource type="Animation" id="2"] 6 | tracks/0/type = "value" 7 | tracks/0/imported = false 8 | tracks/0/enabled = true 9 | tracks/0/path = NodePath(".:frame") 10 | tracks/0/interp = 1 11 | tracks/0/loop_wrap = true 12 | tracks/0/keys = { 13 | "times": PackedFloat32Array(0), 14 | "transitions": PackedFloat32Array(1), 15 | "update": 1, 16 | "values": [1] 17 | } 18 | 19 | [sub_resource type="Animation" id="3"] 20 | tracks/0/type = "value" 21 | tracks/0/imported = false 22 | tracks/0/enabled = true 23 | tracks/0/path = NodePath(".:frame") 24 | tracks/0/interp = 1 25 | tracks/0/loop_wrap = true 26 | tracks/0/keys = { 27 | "times": PackedFloat32Array(0), 28 | "transitions": PackedFloat32Array(1), 29 | "update": 0, 30 | "values": [13] 31 | } 32 | 33 | [sub_resource type="Animation" id="4"] 34 | tracks/0/type = "value" 35 | tracks/0/imported = false 36 | tracks/0/enabled = true 37 | tracks/0/path = NodePath(".:frame") 38 | tracks/0/interp = 1 39 | tracks/0/loop_wrap = true 40 | tracks/0/keys = { 41 | "times": PackedFloat32Array(0), 42 | "transitions": PackedFloat32Array(1), 43 | "update": 1, 44 | "values": [26] 45 | } 46 | 47 | [sub_resource type="Animation" id="5"] 48 | tracks/0/type = "value" 49 | tracks/0/imported = false 50 | tracks/0/enabled = true 51 | tracks/0/path = NodePath(".:frame") 52 | tracks/0/interp = 1 53 | tracks/0/loop_wrap = true 54 | tracks/0/keys = { 55 | "times": PackedFloat32Array(0), 56 | "transitions": PackedFloat32Array(1), 57 | "update": 1, 58 | "values": [37] 59 | } 60 | 61 | [sub_resource type="Animation" id="6"] 62 | step = 0.25 63 | tracks/0/type = "value" 64 | tracks/0/imported = false 65 | tracks/0/enabled = true 66 | tracks/0/path = NodePath(".:frame") 67 | tracks/0/interp = 1 68 | tracks/0/loop_wrap = true 69 | tracks/0/keys = { 70 | "times": PackedFloat32Array(0, 0.25, 0.5, 0.75), 71 | "transitions": PackedFloat32Array(1, 1, 1, 1), 72 | "update": 1, 73 | "values": [0, 1, 2, 1] 74 | } 75 | 76 | [sub_resource type="Animation" id="7"] 77 | step = 0.25 78 | tracks/0/type = "value" 79 | tracks/0/imported = false 80 | tracks/0/enabled = true 81 | tracks/0/path = NodePath(".:frame") 82 | tracks/0/interp = 0 83 | tracks/0/loop_wrap = true 84 | tracks/0/keys = { 85 | "times": PackedFloat32Array(0, 0.25, 0.5, 0.75), 86 | "transitions": PackedFloat32Array(1, 1, 1, 1), 87 | "update": 1, 88 | "values": [12, 13, 14, 13] 89 | } 90 | 91 | [sub_resource type="Animation" id="8"] 92 | step = 0.25 93 | tracks/0/type = "value" 94 | tracks/0/imported = false 95 | tracks/0/enabled = true 96 | tracks/0/path = NodePath(".:frame") 97 | tracks/0/interp = 1 98 | tracks/0/loop_wrap = true 99 | tracks/0/keys = { 100 | "times": PackedFloat32Array(0, 0.25, 0.5, 0.75), 101 | "transitions": PackedFloat32Array(1, 1, 1, 1), 102 | "update": 1, 103 | "values": [24, 25, 26, 25] 104 | } 105 | 106 | [sub_resource type="Animation" id="9"] 107 | step = 0.25 108 | tracks/0/type = "value" 109 | tracks/0/imported = false 110 | tracks/0/enabled = true 111 | tracks/0/path = NodePath(".:frame") 112 | tracks/0/interp = 1 113 | tracks/0/loop_wrap = true 114 | tracks/0/keys = { 115 | "times": PackedFloat32Array(0, 0.25, 0.5, 0.75), 116 | "transitions": PackedFloat32Array(1, 1, 1, 1), 117 | "update": 1, 118 | "values": [36, 37, 38, 37] 119 | } 120 | 121 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_kk4xy"] 122 | _data = { 123 | "idle-down": SubResource("2"), 124 | "idle-left": SubResource("3"), 125 | "idle-right": SubResource("4"), 126 | "idle-up": SubResource("5"), 127 | "walk-down": SubResource("6"), 128 | "walk-left": SubResource("7"), 129 | "walk-right": SubResource("8"), 130 | "walk-up": SubResource("9") 131 | } 132 | 133 | [sub_resource type="RectangleShape2D" id="10"] 134 | size = Vector2(14, 8) 135 | 136 | [node name="player" type="PlayerCharacter"] 137 | 138 | [node name="sprite" type="Sprite2D" parent="."] 139 | position = Vector2(0, -8) 140 | texture = ExtResource("2") 141 | hframes = 12 142 | vframes = 8 143 | frame = 1 144 | 145 | [node name="animation_player" type="AnimationPlayer" parent="sprite"] 146 | callback_mode_process = 0 147 | libraries = { 148 | "": SubResource("AnimationLibrary_kk4xy") 149 | } 150 | 151 | [node name="camera_2d" type="Camera2D" parent="."] 152 | scale = Vector2(0.5, 0.5) 153 | 154 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 155 | position = Vector2(0, -4) 156 | shape = SubResource("10") 157 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/fonts/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2011-2016 Severin Meyer , 2 | with Reserved Font Name Xolonium. 3 | 4 | This Font Software is licensed under the SIL Open Font License, 5 | Version 1.1. This license is copied below, and is also available 6 | with a FAQ at 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="Dodge the Creeps" 14 | config/description="This is a simple game where your character must move 15 | and avoid the enemies for as long as possible. 16 | 17 | This is a finished version of the game featured in the 'Your first 2D game' 18 | tutorial in the documentation. For more details, consider 19 | following the tutorial in the documentation." 20 | config/tags=PackedStringArray("2d", "demo", "official") 21 | run/main_scene="res://Main.tscn" 22 | config/features=PackedStringArray("4.2") 23 | config/icon="res://icon.webp" 24 | 25 | [debug] 26 | 27 | gdscript/warnings/redundant_await=false 28 | 29 | [display] 30 | 31 | window/size/viewport_width=480 32 | window/size/viewport_height=720 33 | window/size/window_width_override=480 34 | window/size/window_height_override=720 35 | window/stretch/mode="canvas_items" 36 | 37 | [input] 38 | 39 | move_left={ 40 | "deadzone": 0.5, 41 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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":0,"echo":false,"script":null) 42 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) 43 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) 44 | , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) 45 | ] 46 | } 47 | move_right={ 48 | "deadzone": 0.5, 49 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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":0,"echo":false,"script":null) 50 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) 51 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null) 52 | , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) 53 | ] 54 | } 55 | move_up={ 56 | "deadzone": 0.5, 57 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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":0,"echo":false,"script":null) 58 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) 59 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) 60 | , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) 61 | ] 62 | } 63 | move_down={ 64 | "deadzone": 0.5, 65 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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":0,"echo":false,"script":null) 66 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) 67 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) 68 | , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) 69 | ] 70 | } 71 | start_game={ 72 | "deadzone": 0.5, 73 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null) 74 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"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":0,"echo":false,"script":null) 75 | ] 76 | } 77 | 78 | [rendering] 79 | 80 | renderer/rendering_method="mobile" 81 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/pkg/demo/hud.go: -------------------------------------------------------------------------------- 1 | package demo 2 | 3 | import ( 4 | . "github.com/godot-go/godot-go/pkg/builtin" 5 | . "github.com/godot-go/godot-go/pkg/constant" 6 | . "github.com/godot-go/godot-go/pkg/core" 7 | . "github.com/godot-go/godot-go/pkg/ffi" 8 | . "github.com/godot-go/godot-go/pkg/gdclassimpl" 9 | "github.com/godot-go/godot-go/pkg/log" 10 | "go.uber.org/zap" 11 | ) 12 | 13 | func RegisterClassHUD() { 14 | ClassDBRegisterClass[*HUD](&HUD{}, []GDExtensionPropertyInfo{}, nil, func(t GDClass) { 15 | // virtuals 16 | ClassDBBindMethodVirtual(t, "V_OnStartButtonPressed", "_on_StartButton_pressed", nil, nil) 17 | ClassDBBindMethodVirtual(t, "V_OnMessageTimerTimeout", "_on_MessageTimer_timeout", nil, nil) 18 | 19 | // properties 20 | ClassDBBindMethod(t, "ShowMessage", "show_message", []string{"text"}, nil) 21 | ClassDBBindMethod(t, "ShowGameOver", "show_game_over", nil, nil) 22 | ClassDBBindMethod(t, "ShowGameOverAwaitMessageTimerTimeout", "show_game_over_await_message_timer_timeout", nil, nil) 23 | ClassDBBindMethod(t, "ShowGameOverAwaitSceneTreeTimerTimeout", "show_game_over_await_scene_tree_timer_timeout", nil, nil) 24 | ClassDBBindMethod(t, "UpdateScore", "update_score", []string{"score"}, nil) 25 | 26 | // signals 27 | ClassDBAddSignal(t, "start_game") 28 | }) 29 | } 30 | 31 | type HUD struct { 32 | CanvasLayerImpl 33 | } 34 | 35 | func (c *HUD) GetClassName() string { 36 | return "HUD" 37 | } 38 | 39 | func (c *HUD) GetParentClassName() string { 40 | return "CanvasLayer" 41 | } 42 | 43 | func (c *HUD) getScoreLabel() Label { 44 | gds := NewStringWithLatin1Chars("ScoreLabel") 45 | defer gds.Destroy() 46 | path := NewNodePathWithString(gds) 47 | defer path.Destroy() 48 | return ObjectCastTo(c.GetNode(path), "Label").(Label) 49 | } 50 | 51 | func (c *HUD) getMessageLabel() Label { 52 | gds := NewStringWithLatin1Chars("MessageLabel") 53 | defer gds.Destroy() 54 | path := NewNodePathWithString(gds) 55 | defer path.Destroy() 56 | return ObjectCastTo(c.GetNode(path), "Label").(Label) 57 | } 58 | 59 | func (c *HUD) getMessageTimer() Timer { 60 | gds := NewStringWithLatin1Chars("MessageTimer") 61 | defer gds.Destroy() 62 | path := NewNodePathWithString(gds) 63 | defer path.Destroy() 64 | return ObjectCastTo(c.GetNode(path), "Timer").(Timer) 65 | } 66 | 67 | func (c *HUD) getStartButton() Button { 68 | gds := NewStringWithLatin1Chars("StartButton") 69 | defer gds.Destroy() 70 | path := NewNodePathWithString(gds) 71 | defer path.Destroy() 72 | return ObjectCastTo(c.GetNode(path), "Button").(Button) 73 | } 74 | 75 | func (c *HUD) ShowMessage(text Variant) { 76 | // $MessageLabel.text = text 77 | messageLabel := c.getMessageLabel() 78 | gdsText := text.ToString() 79 | defer gdsText.Destroy() 80 | messageLabel.SetText(gdsText) 81 | 82 | // $MessageLabel.show() 83 | messageLabel.Show() 84 | 85 | // $MessageTimer.start() 86 | messageTimer := c.getMessageTimer() 87 | messageTimer.Start(-1) 88 | } 89 | 90 | func (c *HUD) ShowGameOver() { 91 | // show_message("Game Over") 92 | gameOverMessage := NewVariantGoString("Game Over") 93 | defer gameOverMessage.Destroy() 94 | c.ShowMessage(gameOverMessage) 95 | 96 | // await $MessageTimer.timeout 97 | messageTimer := c.getMessageTimer() 98 | gdsnTimeout := NewStringNameWithUtf8Chars("timeout") 99 | defer gdsnTimeout.Destroy() 100 | gdnsCallableMethodName := NewStringNameWithUtf8Chars("show_game_over_await_message_timer_timeout") 101 | defer gdnsCallableMethodName.Destroy() 102 | callable := NewCallableWithObjectStringName(c, gdnsCallableMethodName) 103 | defer callable.Destroy() 104 | err := messageTimer.Connect(gdsnTimeout, callable, OBJECT_CONNECT_FLAGS_CONNECT_ONE_SHOT) 105 | if err != OK { 106 | log.Panic("message timer connect failure", zap.Any("error", err)) 107 | } 108 | } 109 | 110 | func (c *HUD) ShowGameOverAwaitMessageTimerTimeout() { 111 | // $MessageLabel.text = "Dodge the\nCreeps" 112 | messageLabel := c.getMessageLabel() 113 | gdsText := NewStringWithUtf8Chars("Dodge the\nCreeps") 114 | defer gdsText.Destroy() 115 | messageLabel.SetText(gdsText) 116 | 117 | // $MessageLabel.show() 118 | messageLabel.Show() 119 | 120 | // await get_tree().create_timer(1).timeout 121 | tree := c.GetTree() 122 | sceneTreeTimerRef := tree.CreateTimer(1, true, false, false) 123 | gdsnTimeout := NewStringNameWithUtf8Chars("timeout") 124 | defer gdsnTimeout.Destroy() 125 | gdnsCallableMethodName := NewStringNameWithUtf8Chars("show_game_over_await_scene_tree_timer_timeout") 126 | defer gdnsCallableMethodName.Destroy() 127 | callable := NewCallableWithObjectStringName(c, gdnsCallableMethodName) 128 | defer callable.Destroy() 129 | sceneTreeTimer := sceneTreeTimerRef.TypedPtr() 130 | err := sceneTreeTimer.Connect(gdsnTimeout, callable, OBJECT_CONNECT_FLAGS_CONNECT_ONE_SHOT) 131 | if err != OK { 132 | log.Panic("message timer connect failure", zap.Any("error", err)) 133 | } 134 | } 135 | 136 | func (c *HUD) ShowGameOverAwaitSceneTreeTimerTimeout() { 137 | // $StartButton.show() 138 | startButton := c.getStartButton() 139 | startButton.Show() 140 | } 141 | 142 | func (c *HUD) UpdateScore(score Variant) { 143 | // $ScoreLabel.text = str(score) 144 | scoreLabel := c.getScoreLabel() 145 | gdsScore := score.ToString() 146 | defer gdsScore.Destroy() 147 | scoreLabel.SetText(gdsScore) 148 | } 149 | 150 | func (c *HUD) V_OnStartButtonPressed() { 151 | // $StartButton.hide() 152 | startButton := c.getStartButton() 153 | startButton.Hide() 154 | 155 | // start_game.emit() 156 | gdsnStartGame := NewStringNameWithUtf8Chars("start_game") 157 | defer gdsnStartGame.Destroy() 158 | c.EmitSignal(gdsnStartGame) 159 | } 160 | 161 | func (c *HUD) V_OnMessageTimerTimeout() { 162 | // $MessageLabel.hide() 163 | messageLabel := c.getMessageLabel() 164 | messageLabel.Hide() 165 | } 166 | -------------------------------------------------------------------------------- /2d/dodge_the_creeps/project/fonts/FONTLOG.txt: -------------------------------------------------------------------------------- 1 | Please distribute this file along with the Xolonium fonts when possible. 2 | 3 | 4 | Source 5 | 6 | Find the sourcefiles of Xolonium at 7 | 8 | 9 | 10 | Credits 11 | 12 | Xolonium is created with FontForge , 13 | Inkscape , Python , and 14 | FontTools . 15 | 16 | It originated as a custom font for the open-source 17 | game Xonotic . With many thanks to the 18 | Xonotic community for your support. 19 | 20 | 21 | Supported OpenType features 22 | 23 | case Provides case sensitive placement of punctuation, 24 | brackets, and math symbols for uppercase text. 25 | frac Replaces number/number sequences with diagonal fractions. 26 | Numbers that touch a slash should not exceed 10 digits. 27 | kern Provides kerning for Latin, Greek, and Cyrillic scripts. 28 | locl Dutch: Replaces j with a stressed version if it follows í. 29 | Sami: Replaces n-form Eng with the preferred N-form version. 30 | Romanian and Moldovan: Replaces ŞşŢţ with the preferred ȘșȚț. 31 | pnum Replaces monospaced digits with proportional versions. 32 | sinf Replaces digits with scientific inferiors below the baseline. 33 | subs Replaces digits with subscript versions on the baseline. 34 | sups Replaces digits with superscript versions. 35 | zero Replaces zero with a slashed version. 36 | 37 | 38 | Supported glyph sets 39 | 40 | Adobe Latin 3 41 | OpenType W1G 42 | ISO 8859-1 Western European 43 | ISO 8859-2 Central European 44 | ISO 8859-3 South European 45 | ISO 8859-4 North European 46 | ISO 8859-5 Cyrillic 47 | ISO 8859-7 Greek 48 | ISO 8859-9 Turkish 49 | ISO 8859-10 Nordic 50 | ISO 8859-13 Baltic Rim 51 | ISO 8859-14 Celtic 52 | ISO 8859-15 Western European 53 | ISO 8859-16 South-Eastern European 54 | 55 | 56 | Available glyphs 57 | 58 | !"#$%&'()*+,-./0123456789:;<=>? 59 | @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ 60 | `abcdefghijklmnopqrstuvwxyz{|}~ 61 | 62 |  ¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿ 63 | ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß 64 | àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 65 | ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ 66 | ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ 67 | ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş 68 | ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž 69 | ƒǺǻǼǽǾǿȘșȚțȷ 70 | 71 | ˆˇˉ˘˙˚˛˜˝ 72 | 73 | ͺ;΄΅Ά·ΈΉΊΌΎΏΐ 74 | ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ 75 | αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ 76 | 77 | ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП 78 | РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп 79 | рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ 80 | ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ 81 | ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ 82 | ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ 83 | Ԥԥ 84 | 85 | ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ 86 | 87 |      ‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄ 88 | ⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ 89 | ₤₦₩₫€₯₱₹₺₽₿ 90 | ℅ℓ№℗™Ω℮ 91 | ⅛⅜⅝⅞ 92 | ←↑→↓ 93 | ∂∆∏∑−∕∙√∞∟∫≈≠≤≥ 94 | ⌖ 95 | ■▬▮▰▲▶▼◀◆◊●◢◣◤◥ 96 | ☄★☠☢☣⚙⚛⚠⚡⛔ 97 | ❇❈❌❤❰❱❲❳ 98 | fffiflffiffl 99 | 🌌🌍🌎🌏👽💣🔥🔫 100 | 😁😃😄😆😇😈😉😊😎😐😒😕😘 101 | 😛😝😞😟😠😣😭😮😲😴😵 102 | 🚀 103 | 104 | 105 | Debugging glyphs 106 | 107 |  U+EFFD Font version 108 |  U+F000 Font hinting indicator 109 | 110 | 111 | Changelog 112 | 113 | Xolonium 4.1 2016-11-22 Severin Meyer 114 | Reverted frac OpenType feature to a more stable implementation 115 | 116 | Xolonium 4.0 2016-10-08 Severin Meyer 117 | Decreased width of most glyphs 118 | Thinner vertical stems in Xolonium-Regular 119 | Thicker horizontal stems in Xolonium-Bold 120 | Revised diagonal stems 121 | Lowered middle bars 122 | Revised diacritical bars 123 | Added glyphs: 124 | ӏẞ₿ 125 | U+2007 U+2008 U+2009 U+200A U+202F 126 | U+EFFD U+F000 127 | Revised glyphs: 128 | $&,JKQRXkwxy~¢¤ßǻ˜ζκλμξφЖУжћѴѵ∕₱₺₦₩€ℓ№≈ffffiffl 129 | ❤🌍🌎🌏😁😄😇😈😉😊😘😭😮😴🚀 130 | Removed uncommon glyphs: 131 | ʼnſʼҌҍҎҏҾҿӃӄӇӈӚӛӪӫӬӭ 132 | U+0312 U+0313 U+0326 133 | Simplified OpenType features pnum, zero, and case 134 | Removed OpenType feature dlig 135 | Revised vertical metrics 136 | Merged outlines of composite glyphs in otf version 137 | Added ttf version with custom outlines and instructions 138 | Added woff and woff2 version 139 | 140 | Xolonium 3.1 2015-06-10 Severin Meyer 141 | Added currency glyphs: 142 | ₦₩₫₱₹₺₽ 143 | Revised glyph: 144 | ₯ 145 | Relicensed public release under the SIL Open Font License 1.1 146 | 147 | Xolonium 3.0 2015-05-04 Severin Meyer 148 | Decreased width of glyphs 149 | Decreased descender height 150 | Increased height of super/subscript glyphs 151 | Revised width of dashes, underscore, and overscore 152 | Sharper bends with more circular proportions 153 | Decreased stroke thickness of mathematical glyphs 154 | Revised diacritical marks 155 | Revised diacritical bars 156 | Revised Cyrillic hooks 157 | Revised glyphs: 158 | GQRYjmuwßŊŒſƒǻfffiffiffl 159 | ΞΨΩδζιξπςστυφω 160 | ЉЄДЛУЭЯбдлэяєљђєћѢѣҨҩҼҽӃӄӘә 161 | #$&'()*,/69?@[]{}~¡£¤¥§©®¿ 162 | ‹›₤€₯ℓ№℗℮←↑→↓∂∏∑∞≈▰☄❈❰❱❲❳😝 163 | Raised vertical position of mathematical glyphs 164 | Unified advance width of numeral and monetary glyphs 165 | Unified advance width of mathematical glyphs 166 | Revised bearings 167 | Rewrote kern feature 168 | Bolder Xolonium-Bold with improved proportions 169 | Updated glyph names to conform to the AGLFN 1.7 170 | Revised hints and PS Private Dictionary 171 | Added glyphs: 172 | ӶӷԤԥ 173 | Added OpenType features: 174 | case frac liga locl pnum sinf subs sups zero 175 | 176 | Xolonium 2.4 2014-12-23 Severin Meyer 177 | Added dingbats: 178 | ⛔💣🔥 179 | Revised size and design of emoticons 180 | Revised dingbats: 181 | ⌖☄☠☣⚙⚛⚠⚡❇❈🌌🌍🌎🌏🔫 182 | Removed dingbat: 183 | 💥 184 | 185 | Xolonium 2.3 2014-08-14 Severin Meyer 186 | Bugfixed ε and έ, thanks to bowzee for the feedback 187 | 188 | Xolonium 2.2 2014-03-01 Severin Meyer 189 | Added dingbats: 190 | ⌖◆●❌💥 191 | Revised dingbats: 192 | •←↑→↓◊☄★☠☣⚙⚛⚠⚡❇❈❤🌌🌍🌎🌏👽🔫🚀 193 | Removed dingbats: 194 | ♻✪💡📡🔋🔧🔭 195 | 196 | Xolonium 2.1 2013-10-20 Severin Meyer 197 | Added dingbats: 198 | ←↑→↓❰❱❲❳■▬▮▰▲▶▼◀◢◣◤◥ 199 | ☄★☠☢☣♻⚙⚛⚠⚡✪❇❈❤ 200 | 🌌🌍🌎🌏👽💡📡🔋🔧🔫🔭🚀 201 | 😁😃😄😆😇😈😉😊😎😐😒😕 202 | 😘😛😝😞😟😠😣😭😮😲😴😵 203 | 204 | Xolonium 2.0.1 2013-07-12 Severin Meyer 205 | Reorganised and simplified files 206 | 207 | Xolonium 2.0 2012-08-11 Severin Meyer 208 | Revised bends 209 | Revised thickness of uppercase diagonal stems 210 | Revised diacritical marks 211 | Revised hints and PS Private Dictionary 212 | Revised glyphs: 213 | *1469@DPRly{}§©®¶ÐÞƒΘΞαεζνξνυЄЉЊ 214 | ЏБЗЛУЧЪЫЬЭЯбзлчъыьэяєљњџ•€∂∙√∞∫≠ 215 | Completed glyph sets: 216 | Adobe Latin 3 217 | OpenType World Glyph Set 1 (W1G) 218 | Ghostscript Standard (ghostscript-fonts-std-8.11) 219 | Added OpenType kern feature 220 | Added Xolonium-Bold 221 | 222 | Xolonium 1.2 2011-02-12 Severin Meyer 223 | Revised glyphs: 224 | D·Ðı 225 | Completed glyph sets: 226 | ISO 8859-7 (Greek) 227 | Unicode Latin Extended-A block 228 | Added glyphs: 229 | †‡•…‰⁄™∂∑−√∞≠≤≥ 230 | 231 | Xolonium 1.1 2011-01-17 Severin Meyer 232 | Revised placement of cedilla and ogonek in accented glyphs 233 | Revised glyphs: 234 | ,;DKTjkvwxy¥§Ð˛€ 235 | Completed glyph sets: 236 | ISO 8859-2 (Central European) 237 | ISO 8859-3 (South European, Esperanto) 238 | ISO 8859-4 (North European) 239 | ISO 8859-5 (Cyrillic) 240 | ISO 8859-9 (Turkish) 241 | ISO 8859-10 (Nordic) 242 | ISO 8859-13 (Baltic Rim) 243 | ISO 8859-14 (Celtic) 244 | ISO 8859-16 (South-Eastern European) 245 | Added glyphs: 246 | ȷʼ̒ ЀЍѐѝ‒–—‘’‚‛“”„‟‹› 247 | 248 | Xolonium 1.0 2011-01-04 Severin Meyer 249 | Completed glyph sets: 250 | ISO 8859-1 (Western European) 251 | ISO 8859-15 (Western European) 252 | Added glyphs: 253 | ĄĆĘŁŃŚŹŻąćęłńśźżıˆˇ˙˚˛˜ 254 | -------------------------------------------------------------------------------- /2d/topdown/pkg/demo/object_player_character.go: -------------------------------------------------------------------------------- 1 | package demo 2 | 3 | import ( 4 | . "github.com/godot-go/godot-go/pkg/builtin" 5 | . "github.com/godot-go/godot-go/pkg/core" 6 | . "github.com/godot-go/godot-go/pkg/ffi" 7 | . "github.com/godot-go/godot-go/pkg/gdclassimpl" 8 | "github.com/godot-go/godot-go/pkg/log" 9 | "go.uber.org/zap" 10 | "strings" 11 | "unsafe" 12 | ) 13 | 14 | const ( 15 | TileSize = 16 16 | ) 17 | 18 | func RegisterClassPlayerCharacter() { 19 | ClassDBRegisterClass(&PlayerCharacter{}, []GDExtensionPropertyInfo{}, nil, func(t GDClass) { 20 | // virtuals 21 | ClassDBBindMethodVirtual(t, "V_Input", "_input", []string{"event"}, nil) 22 | ClassDBBindMethodVirtual(t, "V_Ready", "_ready", nil, nil) 23 | ClassDBBindMethodVirtual(t, "V_PhysicsProcess", "_physics_process", nil, nil) 24 | ClassDBBindMethodVirtual(t, "V_Set", "_set", []string{"name", "value"}, nil) 25 | ClassDBBindMethodVirtual(t, "V_Get", "_get", []string{"name"}, nil) 26 | 27 | // properties 28 | ClassDBBindMethod(t, "GetDirection", "get_direction", nil, nil) 29 | ClassDBBindMethod(t, "SetDirection", "set_direction", []string{"id"}, nil) 30 | ClassDBAddProperty(t, GDEXTENSION_VARIANT_TYPE_VECTOR2, "entity", "set_direction", "get_direction") 31 | 32 | // signals 33 | ClassDBAddSignal(t, "moved", 34 | SignalParam{ 35 | Type: GDEXTENSION_VARIANT_TYPE_VECTOR2, 36 | Name: "direction"}, 37 | ) 38 | }) 39 | } 40 | 41 | type PlayerCharacter struct { 42 | CharacterBody2DImpl 43 | walkAnimation AnimationPlayer 44 | direction Vector2 45 | speed float32 46 | input Input 47 | } 48 | 49 | func (p *PlayerCharacter) GetClassName() string { 50 | return "PlayerCharacter" 51 | } 52 | 53 | func (p *PlayerCharacter) GetParentClassName() string { 54 | return "CharacterBody2D" 55 | } 56 | 57 | func (h *PlayerCharacter) V_Set(name string, value Variant) bool { 58 | switch name { 59 | case "direction": 60 | h.direction = value.ToVector2() 61 | vDir := NewVariantVector2(h.direction) 62 | defer vDir.Destroy() 63 | log.Info("V_Set", 64 | zap.Any("direction", Stringify(vDir)), 65 | ) 66 | return true 67 | } 68 | return false 69 | } 70 | 71 | func (h *PlayerCharacter) V_Get(name string) (Variant, bool) { 72 | switch name { 73 | case "direction": 74 | vDir := NewVariantVector2(h.direction) 75 | log.Info("V_Get", 76 | zap.Any("direction", Stringify(vDir)), 77 | ) 78 | return vDir, true 79 | } 80 | return Variant{}, false 81 | } 82 | 83 | func (h *PlayerCharacter) GetDirection() Vector2 { 84 | return h.direction 85 | } 86 | 87 | func (h *PlayerCharacter) SetDirection(v Vector2) { 88 | h.direction = v 89 | } 90 | 91 | func (h *PlayerCharacter) V_Input(refInputEvent RefInputEvent) { 92 | event := refInputEvent.TypedPtr() 93 | if event == nil { 94 | log.Warn("PlayerCharacter.V_Input: null refEvent parameter") 95 | return 96 | } 97 | 98 | // BUG: godot-go isn't properly wrapping the go struct to the underlying type. 99 | // i believe we have to call a gdextension interface cast it to the 100 | // underlying type as a workaround 101 | // 102 | // switch event.(type) { 103 | // case InputEventKey: 104 | // h.direction = input.GetVector(uiLeft, uiRight, uiUp, uiDown, -1.0) 105 | // } 106 | dir := h.input.GetVector(uiLeft, uiRight, uiUp, uiDown, -1.0) 107 | vDir := NewVariantVector2(dir) 108 | log.Info("V_Input", 109 | zap.Any("dir", Stringify(vDir)), 110 | ) 111 | h.SetDirection(dir) 112 | } 113 | 114 | func (h *PlayerCharacter) V_Ready() { 115 | h.input = GetInputSingleton() 116 | if h.input == nil { 117 | log.Panic("unable to get input singleton") 118 | } 119 | h.speed = 5.0 120 | p := NewNodePathWithString(NewStringWithLatin1Chars("sprite/animation_player")) 121 | str := p.GetConcatenatedSubnames() 122 | defer str.Destroy() 123 | log.Info("searching path...", zap.String("names", str.ToUtf8())) 124 | n := h.GetNode(p) 125 | pno := n.GetGodotObjectOwner() 126 | h.walkAnimation = NewAnimationPlayerWithGodotOwnerObject(pno) 127 | if !h.walkAnimation.HasAnimation(walkRight) { 128 | log.Panic("unable to find walk-right animation") 129 | } 130 | if !h.walkAnimation.HasAnimation(walkLeft) { 131 | log.Panic("unabel to find walk-left animation") 132 | } 133 | if !h.walkAnimation.HasAnimation(walkDown) { 134 | log.Panic("unable to find walk-down") 135 | } 136 | if !h.walkAnimation.HasAnimation(walkUp) { 137 | log.Panic("unable to find walk-up") 138 | } 139 | if !h.walkAnimation.HasAnimation(idleRight) { 140 | log.Panic("unable to find idle-right") 141 | } 142 | if !h.walkAnimation.HasAnimation(idleLeft) { 143 | log.Panic("unable to find idle-left") 144 | } 145 | if !h.walkAnimation.HasAnimation(idleDown) { 146 | log.Panic("unable to find idle-down") 147 | } 148 | if !h.walkAnimation.HasAnimation(idleUp) { 149 | log.Panic("unable to find idle-up") 150 | } 151 | } 152 | 153 | func (h *PlayerCharacter) V_PhysicsProcess(delta float64) { 154 | dir := h.direction 155 | h.updateSprite(dir) 156 | calcV := dir.Multiply_float(float32(delta) * h.speed * TileSize) 157 | h.MoveAndCollide(calcV, false, 0.785398, true) 158 | 159 | // emit signal on position change for UI to refresh 160 | vPos := NewVariantVector2(h.GetPosition()) 161 | defer vPos.Destroy() 162 | h.EmitSignal(moved, vPos) 163 | } 164 | 165 | func (h *PlayerCharacter) updateSprite(dqir Vector2) { 166 | dir := h.direction 167 | x := dir.MemberGetx() 168 | y := dir.MemberGety() 169 | 170 | a := h.walkAnimation 171 | ca := a.GetCurrentAnimation() 172 | pca := &ca 173 | 174 | if x > 0 { 175 | if !pca.Equal_StringName(walkRight) { 176 | a.Play(walkRight, -1, 1.0, false) 177 | } 178 | } else if x < 0 { 179 | if !pca.Equal_StringName(walkLeft) { 180 | a.Play(walkLeft, -1, 1.0, true) 181 | } 182 | } else if y > 0 { 183 | if !pca.Equal_StringName(walkDown) { 184 | a.Play(walkDown, -1, 1.0, false) 185 | } 186 | } else if y < 0 { 187 | if !pca.Equal_StringName(walkUp) { 188 | a.Play(walkUp, -1, 1.0, false) 189 | } 190 | } else { 191 | // switch to idle animation if the character isn't moving 192 | name := pca.ToUtf8() 193 | 194 | if name != "" { 195 | tokens := strings.Split(name, "-") 196 | 197 | if len(tokens) != 2 { 198 | log.Panic("unable to parse animation name", zap.String("name", name)) 199 | } 200 | 201 | var animationName StringName 202 | switch tokens[1] { 203 | case "up": 204 | animationName = idleUp 205 | case "down": 206 | animationName = idleDown 207 | case "left": 208 | animationName = idleLeft 209 | case "right": 210 | animationName = idleRight 211 | default: 212 | // log.WithField("name", name).Warn("unhandled animation name") 213 | } 214 | 215 | if !pca.Equal_StringName(animationName) { 216 | log.Info("switch animation", 217 | zap.String("name", animationName.ToUtf8()), 218 | ) 219 | a.Play(animationName, -1, 1.0, false) 220 | } 221 | } 222 | } 223 | } 224 | 225 | func (p *PlayerCharacter) Free() { 226 | // log.WithFields(gdnative.WithObject(p.GetGodotObjectOwner())).Trace("free PlayerCharacter") 227 | if p.input != nil{ 228 | p.input.Destroy() 229 | } 230 | 231 | p.walkAnimation = nil 232 | 233 | if p != nil { 234 | Free(unsafe.Pointer(p)) 235 | p = nil 236 | } 237 | } 238 | 239 | func NewPlayerCharacter() GDClass { 240 | return CreateGDClassInstance("PlayerCharacter") 241 | } 242 | 243 | var ( 244 | moved StringName 245 | velocity StringName 246 | velocityVariant Variant 247 | 248 | uiRight StringName 249 | uiLeft StringName 250 | uiUp StringName 251 | uiDown StringName 252 | 253 | walkRight StringName 254 | walkLeft StringName 255 | walkUp StringName 256 | walkDown StringName 257 | 258 | idleRight StringName 259 | idleLeft StringName 260 | idleUp StringName 261 | idleDown StringName 262 | ) 263 | 264 | func PlayerCharacterGDExtensionInit() { 265 | moved = NewStringNameWithLatin1Chars("moved") 266 | velocity = NewStringNameWithLatin1Chars("velocity") 267 | velocityVariant = NewVariantStringName(velocity) 268 | 269 | uiRight = NewStringNameWithLatin1Chars("ui_right") 270 | uiLeft = NewStringNameWithLatin1Chars("ui_left") 271 | uiUp = NewStringNameWithLatin1Chars("ui_up") 272 | uiDown = NewStringNameWithLatin1Chars("ui_down") 273 | 274 | walkRight = NewStringNameWithLatin1Chars("walk-right") 275 | walkLeft = NewStringNameWithLatin1Chars("walk-left") 276 | walkUp = NewStringNameWithLatin1Chars("walk-up") 277 | walkDown = NewStringNameWithLatin1Chars("walk-down") 278 | 279 | idleRight = NewStringNameWithLatin1Chars("idle-right") 280 | idleLeft = NewStringNameWithLatin1Chars("idle-left") 281 | idleUp = NewStringNameWithLatin1Chars("idle-up") 282 | idleDown = NewStringNameWithLatin1Chars("idle-down") 283 | } 284 | 285 | func PlayerCharacterGDExtensionTerminate() { 286 | moved.Destroy() 287 | velocity.Destroy() 288 | velocityVariant.Destroy() 289 | 290 | uiRight.Destroy() 291 | uiLeft.Destroy() 292 | uiUp.Destroy() 293 | uiDown.Destroy() 294 | 295 | walkRight.Destroy() 296 | walkLeft.Destroy() 297 | walkUp.Destroy() 298 | walkDown.Destroy() 299 | 300 | idleRight.Destroy() 301 | idleLeft.Destroy() 302 | idleUp.Destroy() 303 | idleDown.Destroy() 304 | } 305 | -------------------------------------------------------------------------------- /2d/topdown/project/Main.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://bllj4i4b1byd5"] 2 | 3 | [ext_resource type="TileSet" uid="uid://davdl83m1nxvn" path="res://assets/world-tileset.tres" id="1"] 4 | [ext_resource type="PackedScene" uid="uid://cokt0ll6rpjdu" path="res://assets/entities/player/charlie/charlie.tscn" id="2"] 5 | [ext_resource type="Script" path="res://hud.gd" id="3"] 6 | 7 | [node name="world" type="Node2D"] 8 | 9 | [node name="ground" type="TileMap" parent="."] 10 | tile_set = ExtResource("1") 11 | format = 2 12 | layer_0/tile_data = PackedInt32Array(-458762, 65537, 1, -458761, 65537, 1, -458760, 65537, 1, -458759, 65537, 1, -458758, 65537, 1, -458757, 65537, 1, -458756, 65537, 1, -458755, 65537, 1, -458754, 65537, 1, -458753, 65537, 1, -524288, 65537, 1, -524287, 65537, 1, -524286, 65537, 1, -524285, 65537, 1, -524284, 65537, 1, -524283, 65537, 1, -524282, 65537, 1, -524281, 65537, 1, -524280, 65537, 1, -524279, 65537, 1, -393226, 65537, 1, -393225, 65537, 1, -393224, 65537, 1, -393223, 65537, 1, -393222, 65537, 1, -393221, 65537, 1, -393220, 65537, 1, -393219, 65537, 1, -393218, 65537, 1, -393217, 65537, 1, -458752, 65537, 1, -458751, 65537, 1, -458750, 65537, 1, -458749, 65537, 1, -458748, 65537, 1, -458747, 65537, 1, -458746, 65537, 1, -458745, 65537, 1, -458744, 65537, 1, -458743, 65537, 1, -327690, 65537, 1, -327689, 65537, 1, -327688, 65537, 1, -327687, 65537, 1, -327686, 65537, 1, -327685, 65537, 1, -327684, 65537, 1, -327683, 65537, 1, -327682, 65537, 1, -327681, 65537, 1, -393216, 65537, 1, -393215, 65537, 1, -393214, 65537, 1, -393213, 65537, 1, -393212, 65537, 1, -393211, 65537, 1, -393210, 65537, 1, -393209, 65537, 1, -393208, 65537, 1, -393207, 65537, 1, -262154, 65537, 1, -262153, 65537, 1, -262152, 65537, 1, -262151, 65537, 1, -262150, 65537, 1, -262149, 65537, 1, -262148, 65537, 1, -262147, 65537, 1, -262146, 65537, 1, -262145, 65537, 1, -327680, 65537, 1, -327679, 65537, 1, -327678, 65537, 1, -327677, 65537, 1, -327676, 65537, 1, -327675, 65537, 1, -327674, 65537, 1, -327673, 65537, 1, -327672, 65537, 1, -327671, 65537, 1, -196618, 65537, 1, -196617, 65537, 1, -196616, 65537, 1, -196615, 65537, 1, -196614, 65537, 1, -196613, 65537, 1, -196612, 65537, 1, -196611, 65537, 1, -196610, 65537, 1, -196609, 65537, 1, -262144, 65537, 1, -262143, 65537, 1, -262142, 65537, 1, -262141, 65537, 1, -262140, 65537, 1, -262139, 65537, 1, -262138, 65537, 1, -262137, 65537, 1, -262136, 65537, 1, -262135, 65537, 1, -131082, 65537, 1, -131081, 65537, 1, -131080, 65537, 1, -131079, 65537, 1, -131078, 65537, 1, -131077, 65537, 1, -131076, 65537, 1, -131075, 65537, 1, -131074, 65537, 1, -131073, 65537, 1, -196608, 65537, 1, -196607, 65537, 1, -196606, 65537, 1, -196605, 65537, 1, -196604, 65537, 1, -196603, 65537, 1, -196602, 65537, 1, -196601, 65537, 1, -196600, 65537, 1, -196599, 65537, 1, -65546, 65537, 1, -65545, 65537, 1, -65544, 65537, 1, -65543, 65537, 1, -65542, 65537, 1, -65541, 65537, 1, -65540, 65537, 1, -65539, 65537, 1, -65538, 65537, 1, -65537, 65537, 1, -131072, 65537, 1, -131071, 65537, 1, -131070, 65537, 1, -131069, 65537, 1, -131068, 65537, 1, -131067, 65537, 1, -131066, 65537, 1, -131065, 65537, 1, -131064, 65537, 1, -131063, 65537, 1, -10, 65537, 1, -9, 65537, 1, -8, 65537, 1, -7, 65537, 1, -6, 65537, 1, -5, 65537, 1, -4, 65537, 1, -3, 65537, 1, -2, 65537, 1, -1, 65537, 1, -65536, 65537, 1, -65535, 65537, 1, -65534, 65537, 1, -65533, 65537, 1, -65532, 65537, 1, -65531, 65537, 1, -65530, 65537, 1, -65529, 65537, 1, -65528, 65537, 1, -65527, 65537, 1, 65526, 65537, 1, 65527, 65537, 1, 65528, 65537, 1, 65529, 65537, 1, 65530, 65537, 1, 65531, 65537, 1, 65532, 65537, 1, 65533, 65537, 1, 65534, 65537, 1, 65535, 65537, 1, 0, 65537, 1, 1, 65537, 1, 2, 65537, 1, 3, 65537, 1, 4, 65537, 1, 5, 65537, 1, 6, 65537, 1, 7, 65537, 1, 8, 65537, 1, 9, 65537, 1, 131062, 65537, 1, 131063, 65537, 1, 131064, 65537, 1, 131065, 65537, 1, 131066, 65537, 1, 131067, 65537, 1, 131068, 65537, 1, 131069, 65537, 1, 131070, 65537, 1, 131071, 65537, 1, 65536, 65537, 1, 65537, 65537, 1, 65538, 65537, 1, 65539, 65537, 1, 65540, 65537, 1, 65541, 65537, 1, 65542, 65537, 1, 65543, 65537, 1, 65544, 65537, 1, 65545, 65537, 1, 196598, 65537, 1, 196599, 65537, 1, 196600, 65537, 1, 196601, 65537, 1, 196602, 65537, 1, 196603, 65537, 1, 196604, 65537, 1, 196605, 65537, 1, 196606, 65537, 1, 196607, 65537, 1, 131072, 65537, 1, 131073, 65537, 1, 131074, 65537, 1, 131075, 65537, 1, 131076, 65537, 1, 131077, 65537, 1, 131078, 65537, 1, 131079, 65537, 1, 131080, 65537, 1, 131081, 65537, 1, 262134, 65537, 1, 262135, 65537, 1, 262136, 65537, 1, 262137, 65537, 1, 262138, 65537, 1, 262139, 65537, 1, 262140, 65537, 1, 262141, 65537, 1, 262142, 65537, 1, 262143, 65537, 1, 196608, 65537, 1, 196609, 65537, 1, 196610, 65537, 1, 196611, 65537, 1, 196612, 65537, 1, 196613, 65537, 1, 196614, 65537, 1, 196615, 65537, 1, 196616, 65537, 1, 196617, 65537, 1, 327670, 65537, 1, 327671, 65537, 1, 327672, 65537, 1, 327673, 65537, 1, 327674, 65537, 1, 327675, 65537, 1, 327676, 65537, 1, 327677, 65537, 1, 327678, 65537, 1, 327679, 65537, 1, 262144, 65537, 1, 262145, 65537, 1, 262146, 65537, 1, 262147, 65537, 1, 262148, 65537, 1, 262149, 65537, 1, 262150, 65537, 1, 262151, 65537, 1, 262152, 65537, 1, 262153, 65537, 1, 393206, 65537, 1, 393207, 65537, 1, 393208, 65537, 1, 393209, 65537, 1, 393210, 65537, 1, 393211, 65537, 1, 393212, 65537, 1, 393213, 65537, 1, 393214, 65537, 1, 393215, 65537, 1, 327680, 65537, 1, 327681, 65537, 1, 327682, 65537, 1, 327683, 65537, 1, 327684, 65537, 1, 327685, 65537, 1, 327686, 65537, 1, 327687, 65537, 1, 327688, 65537, 1, 327689, 65537, 1, 458742, 65537, 1, 458743, 65537, 1, 458744, 65537, 1, 458745, 65537, 1, 458746, 65537, 1, 458747, 65537, 1, 458748, 65537, 1, 458749, 65537, 1, 458750, 65537, 1, 458751, 65537, 1, 393216, 65537, 1, 393217, 65537, 1, 393218, 65537, 1, 393219, 65537, 1, 393220, 65537, 1, 393221, 65537, 1, 393222, 65537, 1, 393223, 65537, 1, 393224, 65537, 1, 393225, 65537, 1, 524278, 65537, 1, 524279, 65537, 1, 524280, 65537, 1, 524281, 65537, 1, 524282, 65537, 1, 524283, 65537, 1, 524284, 65537, 1, 524285, 65537, 1, 524286, 65537, 1, 524287, 65537, 1, 458752, 65537, 1, 458753, 65537, 1, 458754, 65537, 1, 458755, 65537, 1, 458756, 65537, 1, 458757, 65537, 1, 458758, 65537, 1, 458759, 65537, 1, 458760, 65537, 1, 458761, 65537, 1, 589814, 65537, 1, 589815, 65537, 1, 589816, 65537, 1, 589817, 65537, 1, 589818, 65537, 1, 589819, 65537, 1, 589820, 65537, 1, 589821, 65537, 1, 589822, 65537, 1, 589823, 65537, 1, 524288, 65537, 1, 524289, 65537, 1, 524290, 65537, 1, 524291, 65537, 1, 524292, 65537, 1, 524293, 65537, 1, 524294, 65537, 1, 524295, 65537, 1, 524296, 65537, 1, 524297, 65537, 1, 655350, 65537, 1, 655351, 65537, 1, 655352, 65537, 1, 655353, 65537, 1, 655354, 65537, 1, 655355, 65537, 1, 655356, 65537, 1, 655357, 65537, 1, 655358, 65537, 1, 655359, 65537, 1, 589824, 65537, 1, 589825, 65537, 1, 589826, 65537, 1, 589827, 65537, 1, 589828, 65537, 1, 589829, 65537, 1, 589830, 65537, 1, 589831, 65537, 1, 589832, 65537, 1, 589833, 65537, 1) 13 | 14 | [node name="terrain" type="TileMap" parent="."] 15 | tile_set = ExtResource("1") 16 | format = 2 17 | layer_0/tile_data = PackedInt32Array(-851988, 5, 0, -851986, 5, 0, -851984, 5, 0, -851982, 5, 0, -851980, 5, 0, -851978, 5, 0, -851976, 5, 0, -851974, 5, 0, -851972, 5, 0, -851970, 5, 0, -917504, 5, 0, -917502, 5, 0, -917500, 5, 0, -917498, 5, 0, -917496, 5, 0, -917494, 5, 0, -917492, 5, 0, -917490, 5, 0, -917488, 5, 0, -917486, 5, 0, -720916, 5, 0, -720914, 5, 0, -720912, 5, 0, -720910, 5, 0, -720908, 5, 0, -720906, 5, 0, -720904, 5, 0, -720902, 5, 0, -720900, 5, 0, -720898, 5, 0, -786432, 5, 0, -786430, 5, 0, -786428, 5, 0, -786426, 5, 0, -786424, 5, 0, -786422, 5, 0, -786420, 5, 0, -786418, 5, 0, -786416, 5, 0, -786414, 5, 0, -589844, 5, 0, -589842, 5, 0, -589840, 5, 0, -589838, 5, 0, -589836, 5, 0, -589834, 5, 0, -589832, 5, 0, -589830, 5, 0, -589828, 5, 0, -589826, 5, 0, -655360, 5, 0, -655358, 5, 0, -655356, 5, 0, -655354, 5, 0, -655352, 5, 0, -655350, 5, 0, -655348, 5, 0, -655346, 5, 0, -655344, 5, 0, -655342, 5, 0, -458772, 5, 0, -458770, 5, 0, -458768, 5, 0, -458766, 5, 0, -458764, 5, 0, -524278, 5, 0, -524276, 5, 0, -524274, 5, 0, -524272, 5, 0, -524270, 5, 0, -327700, 5, 0, -327698, 5, 0, -327696, 5, 0, -327694, 5, 0, -327692, 5, 0, -393206, 5, 0, -393204, 5, 0, -393202, 5, 0, -393200, 5, 0, -393198, 5, 0, -262147, 1, 0, -262146, 65537, 0, -262145, 65537, 0, -327680, 65537, 0, -327679, 65537, 0, -327678, 65537, 0, -327677, 65537, 0, -327676, 65537, 0, -327675, 131073, 0, -196628, 5, 0, -196626, 5, 0, -196624, 5, 0, -196622, 5, 0, -196620, 5, 0, -196611, 1, 1, -262139, 131073, 1, -262134, 5, 0, -262132, 5, 0, -262130, 5, 0, -262128, 5, 0, -262126, 5, 0, -131075, 1, 1, -196603, 131073, 1, -65556, 5, 0, -65554, 5, 0, -65552, 5, 0, -65550, 5, 0, -65548, 5, 0, -65539, 1, 1, -131067, 131073, 1, -131062, 5, 0, -131060, 5, 0, -131058, 5, 0, -131056, 5, 0, -131054, 5, 0, -3, 1, 1, -65531, 131073, 1, 65516, 5, 0, 65518, 5, 0, 65520, 5, 0, 65522, 5, 0, 65524, 5, 0, 65533, 1, 1, 5, 131073, 1, 10, 5, 0, 12, 5, 0, 14, 5, 0, 16, 5, 0, 18, 5, 0, 131069, 2, 0, 131070, 2, 0, 131071, 2, 0, 65536, 2, 0, 65537, 2, 0, 65538, 2, 0, 65539, 3, 0, 65540, 3, 0, 65541, 2, 0, 196588, 5, 0, 196590, 5, 0, 196592, 5, 0, 196594, 5, 0, 196596, 5, 0, 131075, 3, 0, 131076, 3, 0, 131082, 5, 0, 131084, 5, 0, 131086, 5, 0, 131088, 5, 0, 131090, 5, 0, 327660, 5, 0, 327662, 5, 0, 327664, 5, 0, 327666, 5, 0, 327668, 5, 0, 262154, 5, 0, 262156, 5, 0, 262158, 5, 0, 262160, 5, 0, 262162, 5, 0, 458732, 5, 0, 458734, 5, 0, 458736, 5, 0, 458738, 5, 0, 458740, 5, 0, 393226, 5, 0, 393228, 5, 0, 393230, 5, 0, 393232, 5, 0, 393234, 5, 0, 589804, 5, 0, 589806, 5, 0, 589808, 5, 0, 589810, 5, 0, 589812, 5, 0, 524298, 5, 0, 524300, 5, 0, 524302, 5, 0, 524304, 5, 0, 524306, 5, 0, 720876, 5, 0, 720878, 5, 0, 720880, 5, 0, 720882, 5, 0, 720884, 5, 0, 720886, 5, 0, 720888, 5, 0, 720890, 5, 0, 720892, 5, 0, 720894, 5, 0, 655360, 5, 0, 655362, 5, 0, 655364, 5, 0, 655366, 5, 0, 655368, 5, 0, 655370, 5, 0, 655372, 5, 0, 655374, 5, 0, 655376, 5, 0, 655378, 5, 0, 851948, 5, 0, 851950, 5, 0, 851952, 5, 0, 851954, 5, 0, 851956, 5, 0, 851958, 5, 0, 851960, 5, 0, 851962, 5, 0, 851964, 5, 0, 851966, 5, 0, 786432, 5, 0, 786434, 5, 0, 786436, 5, 0, 786438, 5, 0, 786440, 5, 0, 786442, 5, 0, 786444, 5, 0, 786446, 5, 0, 786448, 5, 0, 786450, 5, 0) 18 | 19 | [node name="objects" type="Node2D" parent="."] 20 | y_sort_enabled = true 21 | 22 | [node name="features" type="Node2D" parent="objects"] 23 | y_sort_enabled = true 24 | 25 | [node name="trees" type="TileMap" parent="objects/features"] 26 | y_sort_enabled = true 27 | tile_set = ExtResource("1") 28 | format = 2 29 | layer_0/tile_data = PackedInt32Array(-458762, 0, 0, -458760, 0, 0, -458758, 0, 0, -458756, 0, 0, -458754, 0, 0, -524288, 0, 0, -524286, 0, 0, -524284, 0, 0, -524282, 0, 0, -524280, 0, 0, -393227, 0, 0, -458743, 0, 0, -262155, 0, 0, -327671, 0, 0, -131083, 0, 0, -196599, 0, 0, -11, 0, 0, -65527, 0, 0, 131061, 0, 0, 65545, 0, 0, 262133, 0, 0, 196617, 0, 0, 393205, 0, 0, 327684, 0, 0, 327689, 0, 0, 524277, 0, 0, 458761, 0, 0, 655349, 0, 0, 589833, 0, 0, 720886, 0, 0, 720888, 0, 0, 720890, 0, 0, 720892, 0, 0, 720894, 0, 0, 655360, 0, 0, 655362, 0, 0, 655364, 0, 0, 655366, 0, 0, 655368, 0, 0) 30 | 31 | [node name="furniture" type="TileMap" parent="objects/features"] 32 | y_sort_enabled = true 33 | tile_set = ExtResource("1") 34 | format = 2 35 | layer_0/tile_data = PackedInt32Array(-196609, 4, 0, -262143, 4, 0, -262140, 4, 0, -131072, 4, 0, -131070, 4, 0, -131068, 4, 0) 36 | 37 | [node name="player" parent="objects" instance=ExtResource("2")] 38 | y_sort_enabled = true 39 | 40 | [node name="HUD" type="CanvasLayer" parent="."] 41 | script = ExtResource("3") 42 | 43 | [node name="top" type="Panel" parent="HUD"] 44 | offset_right = 240.0 45 | offset_bottom = 20.0 46 | 47 | [node name="container" type="HBoxContainer" parent="HUD/top"] 48 | layout_mode = 0 49 | offset_right = 240.0 50 | offset_bottom = 20.0 51 | size_flags_horizontal = 3 52 | size_flags_vertical = 3 53 | alignment = 1 54 | 55 | [node name="position" type="Label" parent="HUD/top/container"] 56 | layout_mode = 2 57 | text = "POS 58 | " 59 | max_lines_visible = 1 60 | 61 | [node name="direction" type="Label" parent="HUD/top/container"] 62 | layout_mode = 2 63 | text = "DIR 64 | " 65 | max_lines_visible = 1 66 | -------------------------------------------------------------------------------- /go.work.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 2 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 3 | github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= 4 | github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= 5 | github.com/alecthomas/participle/v2 v2.0.0/go.mod h1:rAKZdJldHu8084ojcWevWAL8KmEU+AT+Olodb+WoN2Y= 6 | github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= 7 | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 8 | github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= 9 | github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= 10 | github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= 11 | github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 12 | github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= 13 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 14 | github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= 15 | github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= 16 | github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 17 | github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= 18 | github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 19 | github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 20 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 21 | github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 22 | github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= 23 | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 24 | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 25 | github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 26 | github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= 27 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= 28 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 29 | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 30 | github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= 31 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 32 | github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 33 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 34 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 35 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 36 | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 37 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 38 | github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 39 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 40 | github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= 41 | github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= 42 | github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= 43 | github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 44 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 45 | github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= 46 | github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 47 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 48 | github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= 49 | github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 50 | github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= 51 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 52 | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 53 | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= 54 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 55 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 56 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 57 | github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= 58 | github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 59 | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 60 | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 61 | github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= 62 | github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= 63 | github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 64 | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 65 | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 66 | github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= 67 | github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= 68 | github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= 69 | github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 70 | github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= 71 | github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 72 | github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 73 | github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 74 | github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= 75 | github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 76 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 77 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 78 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 79 | github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 80 | github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= 81 | github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 82 | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= 83 | github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 84 | github.com/spf13/cobra v0.0.7/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= 85 | github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= 86 | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 87 | github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= 88 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 89 | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 90 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 91 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 92 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 93 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 94 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 95 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 96 | github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= 97 | github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= 98 | github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= 99 | github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= 100 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 101 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 102 | go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= 103 | go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= 104 | go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= 105 | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 106 | go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= 107 | go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= 108 | go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= 109 | go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= 110 | go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= 111 | go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= 112 | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 113 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 114 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 115 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 116 | golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= 117 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 118 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 119 | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 120 | golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= 121 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 122 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 123 | golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 124 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 125 | golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 126 | golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 127 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 128 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 129 | golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 130 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 131 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 132 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 133 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 134 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 135 | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 136 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 137 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 138 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 139 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 140 | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 141 | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 142 | golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 143 | golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 144 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 145 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 146 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 147 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 148 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 149 | golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 150 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 151 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 152 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 153 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 154 | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 155 | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 156 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 157 | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 158 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 159 | golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 160 | golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 161 | golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 162 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 163 | golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 164 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 165 | golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= 166 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 167 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 168 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 169 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 170 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 171 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 172 | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 173 | google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 174 | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 175 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 176 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 177 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 178 | gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= 179 | gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 180 | gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 181 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 182 | gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 183 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 184 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 185 | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 186 | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 187 | -------------------------------------------------------------------------------- /2d/topdown/project/assets/world-tileset.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="TileSet" load_steps=8 format=3 uid="uid://davdl83m1nxvn"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://bgeb607ckhyjf" path="res://assets/AH_Tileset.png" id="1"] 4 | 5 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_835nv"] 6 | texture = ExtResource("1") 7 | margins = Vector2i(16, 64) 8 | texture_region_size = Vector2i(32, 32) 9 | 0:0/next_alternative_id = 8 10 | 0:0/0 = 0 11 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 12 | 0:0/0/physics_layer_0/angular_velocity = 0.0 13 | 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 0, -16, 0) 14 | 0:0/1 = 1 15 | 0:0/1/flip_h = true 16 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 17 | 0:0/1/physics_layer_0/angular_velocity = 0.0 18 | 0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 0, 16, 0) 19 | 0:0/2 = 2 20 | 0:0/2/flip_v = true 21 | 0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 22 | 0:0/2/physics_layer_0/angular_velocity = 0.0 23 | 0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, 0, -16, 0) 24 | 0:0/3 = 3 25 | 0:0/3/flip_h = true 26 | 0:0/3/flip_v = true 27 | 0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 28 | 0:0/3/physics_layer_0/angular_velocity = 0.0 29 | 0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, 0, 16, 0) 30 | 0:0/4 = 4 31 | 0:0/4/transpose = true 32 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 33 | 0:0/4/physics_layer_0/angular_velocity = 0.0 34 | 0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 0, 16, 0, -16) 35 | 0:0/5 = 5 36 | 0:0/5/flip_h = true 37 | 0:0/5/transpose = true 38 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 39 | 0:0/5/physics_layer_0/angular_velocity = 0.0 40 | 0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, 0, 16, 0, -16) 41 | 0:0/6 = 6 42 | 0:0/6/flip_v = true 43 | 0:0/6/transpose = true 44 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 45 | 0:0/6/physics_layer_0/angular_velocity = 0.0 46 | 0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 0, -16, 0, 16) 47 | 0:0/7 = 7 48 | 0:0/7/flip_h = true 49 | 0:0/7/flip_v = true 50 | 0:0/7/transpose = true 51 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 52 | 0:0/7/physics_layer_0/angular_velocity = 0.0 53 | 0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, 0, -16, 0, 16) 54 | 55 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_778ew"] 56 | texture = ExtResource("1") 57 | margins = Vector2i(80, 0) 58 | 0:0/next_alternative_id = 8 59 | 0:0/0 = 0 60 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 61 | 0:0/0/physics_layer_0/angular_velocity = 0.0 62 | 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -4, -4, -4, -4, 8, -8, 8, -8, -8) 63 | 0:0/1 = 1 64 | 0:0/1/flip_h = true 65 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 66 | 0:0/1/physics_layer_0/angular_velocity = 0.0 67 | 0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, -4, 4, -4, 4, 8, 8, 8, 8, -8) 68 | 0:0/2 = 2 69 | 0:0/2/flip_v = true 70 | 0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 71 | 0:0/2/physics_layer_0/angular_velocity = 0.0 72 | 0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 8, 4, -4, 4, -4, -8, -8, -8, -8, 8) 73 | 0:0/3 = 3 74 | 0:0/3/flip_h = true 75 | 0:0/3/flip_v = true 76 | 0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 77 | 0:0/3/physics_layer_0/angular_velocity = 0.0 78 | 0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -8, 4, 4, 4, 4, -8, 8, -8, 8, 8) 79 | 0:0/4 = 4 80 | 0:0/4/transpose = true 81 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 82 | 0:0/4/physics_layer_0/angular_velocity = 0.0 83 | 0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -4, 8, -4, -4, 8, -4, 8, -8, -8, -8) 84 | 0:0/5 = 5 85 | 0:0/5/flip_h = true 86 | 0:0/5/transpose = true 87 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 88 | 0:0/5/physics_layer_0/angular_velocity = 0.0 89 | 0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 4, 8, 4, -4, -8, -4, -8, -8, 8, -8) 90 | 0:0/6 = 6 91 | 0:0/6/flip_v = true 92 | 0:0/6/transpose = true 93 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 94 | 0:0/6/physics_layer_0/angular_velocity = 0.0 95 | 0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, 4, 8, 4, 8, 8, -8, 8) 96 | 0:0/7 = 7 97 | 0:0/7/flip_h = true 98 | 0:0/7/flip_v = true 99 | 0:0/7/transpose = true 100 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 101 | 0:0/7/physics_layer_0/angular_velocity = 0.0 102 | 0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 4, -8, 4, 4, -8, 4, -8, 8, 8, 8) 103 | 0:1/next_alternative_id = 8 104 | 0:1/0 = 0 105 | 0:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) 106 | 0:1/0/physics_layer_0/angular_velocity = 0.0 107 | 0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -4, 8, -8, 8, -8, -8) 108 | 0:1/1 = 1 109 | 0:1/1/flip_h = true 110 | 0:1/1/physics_layer_0/linear_velocity = Vector2(0, 0) 111 | 0:1/1/physics_layer_0/angular_velocity = 0.0 112 | 0:1/1/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 4, 8, 8, 8, 8, -8) 113 | 0:1/2 = 2 114 | 0:1/2/flip_v = true 115 | 0:1/2/physics_layer_0/linear_velocity = Vector2(0, 0) 116 | 0:1/2/physics_layer_0/angular_velocity = 0.0 117 | 0:1/2/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 8, -4, -8, -8, -8, -8, 8) 118 | 0:1/3 = 3 119 | 0:1/3/flip_h = true 120 | 0:1/3/flip_v = true 121 | 0:1/3/physics_layer_0/linear_velocity = Vector2(0, 0) 122 | 0:1/3/physics_layer_0/angular_velocity = 0.0 123 | 0:1/3/physics_layer_0/polygon_0/points = PackedVector2Array(4, 8, 4, -8, 8, -8, 8, 8) 124 | 0:1/4 = 4 125 | 0:1/4/transpose = true 126 | 0:1/4/physics_layer_0/linear_velocity = Vector2(0, 0) 127 | 0:1/4/physics_layer_0/angular_velocity = 0.0 128 | 0:1/4/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 8, -8, -8, -8) 129 | 0:1/5 = 5 130 | 0:1/5/flip_h = true 131 | 0:1/5/transpose = true 132 | 0:1/5/physics_layer_0/linear_velocity = Vector2(0, 0) 133 | 0:1/5/physics_layer_0/angular_velocity = 0.0 134 | 0:1/5/physics_layer_0/polygon_0/points = PackedVector2Array(8, -4, -8, -4, -8, -8, 8, -8) 135 | 0:1/6 = 6 136 | 0:1/6/flip_v = true 137 | 0:1/6/transpose = true 138 | 0:1/6/physics_layer_0/linear_velocity = Vector2(0, 0) 139 | 0:1/6/physics_layer_0/angular_velocity = 0.0 140 | 0:1/6/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 4, 8, 4, 8, 8, -8, 8) 141 | 0:1/7 = 7 142 | 0:1/7/flip_h = true 143 | 0:1/7/flip_v = true 144 | 0:1/7/transpose = true 145 | 0:1/7/physics_layer_0/linear_velocity = Vector2(0, 0) 146 | 0:1/7/physics_layer_0/angular_velocity = 0.0 147 | 0:1/7/physics_layer_0/polygon_0/points = PackedVector2Array(8, 4, -8, 4, -8, 8, 8, 8) 148 | 1:0/next_alternative_id = 8 149 | 1:0/0 = 0 150 | 1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 151 | 1:0/0/physics_layer_0/angular_velocity = 0.0 152 | 1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -4, -8, -4, -8, -8, 8, -8) 153 | 1:0/1 = 1 154 | 1:0/1/flip_h = true 155 | 1:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 156 | 1:0/1/physics_layer_0/angular_velocity = 0.0 157 | 1:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 8, -8, -8, -8) 158 | 1:0/2 = 2 159 | 1:0/2/flip_v = true 160 | 1:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 161 | 1:0/2/physics_layer_0/angular_velocity = 0.0 162 | 1:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(8, 4, -8, 4, -8, 8, 8, 8) 163 | 1:0/3 = 3 164 | 1:0/3/flip_h = true 165 | 1:0/3/flip_v = true 166 | 1:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 167 | 1:0/3/physics_layer_0/angular_velocity = 0.0 168 | 1:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 4, 8, 4, 8, 8, -8, 8) 169 | 1:0/4 = 4 170 | 1:0/4/transpose = true 171 | 1:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 172 | 1:0/4/physics_layer_0/angular_velocity = 0.0 173 | 1:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 8, -4, -8, -8, -8, -8, 8) 174 | 1:0/5 = 5 175 | 1:0/5/flip_h = true 176 | 1:0/5/transpose = true 177 | 1:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 178 | 1:0/5/physics_layer_0/angular_velocity = 0.0 179 | 1:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(4, 8, 4, -8, 8, -8, 8, 8) 180 | 1:0/6 = 6 181 | 1:0/6/flip_v = true 182 | 1:0/6/transpose = true 183 | 1:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 184 | 1:0/6/physics_layer_0/angular_velocity = 0.0 185 | 1:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -4, 8, -8, 8, -8, -8) 186 | 1:0/7 = 7 187 | 1:0/7/flip_h = true 188 | 1:0/7/flip_v = true 189 | 1:0/7/transpose = true 190 | 1:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 191 | 1:0/7/physics_layer_0/angular_velocity = 0.0 192 | 1:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 4, 8, 8, 8, 8, -8) 193 | 1:1/next_alternative_id = 8 194 | 1:1/0 = 0 195 | 1:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) 196 | 1:1/0/physics_layer_0/angular_velocity = 0.0 197 | 1:1/1 = 1 198 | 1:1/1/flip_h = true 199 | 1:1/1/physics_layer_0/linear_velocity = Vector2(0, 0) 200 | 1:1/1/physics_layer_0/angular_velocity = 0.0 201 | 1:1/2 = 2 202 | 1:1/2/flip_v = true 203 | 1:1/2/physics_layer_0/linear_velocity = Vector2(0, 0) 204 | 1:1/2/physics_layer_0/angular_velocity = 0.0 205 | 1:1/3 = 3 206 | 1:1/3/flip_h = true 207 | 1:1/3/flip_v = true 208 | 1:1/3/physics_layer_0/linear_velocity = Vector2(0, 0) 209 | 1:1/3/physics_layer_0/angular_velocity = 0.0 210 | 1:1/4 = 4 211 | 1:1/4/transpose = true 212 | 1:1/4/physics_layer_0/linear_velocity = Vector2(0, 0) 213 | 1:1/4/physics_layer_0/angular_velocity = 0.0 214 | 1:1/5 = 5 215 | 1:1/5/flip_h = true 216 | 1:1/5/transpose = true 217 | 1:1/5/physics_layer_0/linear_velocity = Vector2(0, 0) 218 | 1:1/5/physics_layer_0/angular_velocity = 0.0 219 | 1:1/6 = 6 220 | 1:1/6/flip_v = true 221 | 1:1/6/transpose = true 222 | 1:1/6/physics_layer_0/linear_velocity = Vector2(0, 0) 223 | 1:1/6/physics_layer_0/angular_velocity = 0.0 224 | 1:1/7 = 7 225 | 1:1/7/flip_h = true 226 | 1:1/7/flip_v = true 227 | 1:1/7/transpose = true 228 | 1:1/7/physics_layer_0/linear_velocity = Vector2(0, 0) 229 | 1:1/7/physics_layer_0/angular_velocity = 0.0 230 | 2:0/next_alternative_id = 8 231 | 2:0/0 = 0 232 | 2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 233 | 2:0/0/physics_layer_0/angular_velocity = 0.0 234 | 2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, 8, 4, 8, 4, -4, -8, -4, -8, -8) 235 | 2:0/1 = 1 236 | 2:0/1/flip_h = true 237 | 2:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 238 | 2:0/1/physics_layer_0/angular_velocity = 0.0 239 | 2:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, 8, -4, 8, -4, -4, 8, -4, 8, -8) 240 | 2:0/2 = 2 241 | 2:0/2/flip_v = true 242 | 2:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 243 | 2:0/2/physics_layer_0/angular_velocity = 0.0 244 | 2:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 8, -8, 4, -8, 4, 4, -8, 4, -8, 8) 245 | 2:0/3 = 3 246 | 2:0/3/flip_h = true 247 | 2:0/3/flip_v = true 248 | 2:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 249 | 2:0/3/physics_layer_0/angular_velocity = 0.0 250 | 2:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -8, -8, -4, -8, -4, 4, 8, 4, 8, 8) 251 | 2:0/4 = 4 252 | 2:0/4/transpose = true 253 | 2:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 254 | 2:0/4/physics_layer_0/angular_velocity = 0.0 255 | 2:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, 8, 8, 8, 4, -4, 4, -4, -8, -8, -8) 256 | 2:0/5 = 5 257 | 2:0/5/flip_h = true 258 | 2:0/5/transpose = true 259 | 2:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 260 | 2:0/5/physics_layer_0/angular_velocity = 0.0 261 | 2:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, -8, 8, -8, 4, 4, 4, 4, -8, 8, -8) 262 | 2:0/6 = 6 263 | 2:0/6/flip_v = true 264 | 2:0/6/transpose = true 265 | 2:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 266 | 2:0/6/physics_layer_0/angular_velocity = 0.0 267 | 2:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, -4, -4, -4, -4, 8, -8, 8) 268 | 2:0/7 = 7 269 | 2:0/7/flip_h = true 270 | 2:0/7/flip_v = true 271 | 2:0/7/transpose = true 272 | 2:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 273 | 2:0/7/physics_layer_0/angular_velocity = 0.0 274 | 2:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, -8, -8, -8, -4, 4, -4, 4, 8, 8, 8) 275 | 2:1/next_alternative_id = 8 276 | 2:1/0 = 0 277 | 2:1/0/physics_layer_0/linear_velocity = Vector2(0, 0) 278 | 2:1/0/physics_layer_0/angular_velocity = 0.0 279 | 2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 4, 8, 4, -8, 8, -8) 280 | 2:1/1 = 1 281 | 2:1/1/flip_h = true 282 | 2:1/1/physics_layer_0/linear_velocity = Vector2(0, 0) 283 | 2:1/1/physics_layer_0/angular_velocity = 0.0 284 | 2:1/1/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -4, 8, -4, -8, -8, -8) 285 | 2:1/2 = 2 286 | 2:1/2/flip_v = true 287 | 2:1/2/physics_layer_0/linear_velocity = Vector2(0, 0) 288 | 2:1/2/physics_layer_0/angular_velocity = 0.0 289 | 2:1/2/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 4, -8, 4, 8, 8, 8) 290 | 2:1/3 = 3 291 | 2:1/3/flip_h = true 292 | 2:1/3/flip_v = true 293 | 2:1/3/physics_layer_0/linear_velocity = Vector2(0, 0) 294 | 2:1/3/physics_layer_0/angular_velocity = 0.0 295 | 2:1/3/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -4, -8, -4, 8, -8, 8) 296 | 2:1/4 = 4 297 | 2:1/4/transpose = true 298 | 2:1/4/physics_layer_0/linear_velocity = Vector2(0, 0) 299 | 2:1/4/physics_layer_0/angular_velocity = 0.0 300 | 2:1/4/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, 8, 4, -8, 4, -8, 8) 301 | 2:1/5 = 5 302 | 2:1/5/flip_h = true 303 | 2:1/5/transpose = true 304 | 2:1/5/physics_layer_0/linear_velocity = Vector2(0, 0) 305 | 2:1/5/physics_layer_0/angular_velocity = 0.0 306 | 2:1/5/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -8, 4, 8, 4, 8, 8) 307 | 2:1/6 = 6 308 | 2:1/6/flip_v = true 309 | 2:1/6/transpose = true 310 | 2:1/6/physics_layer_0/linear_velocity = Vector2(0, 0) 311 | 2:1/6/physics_layer_0/angular_velocity = 0.0 312 | 2:1/6/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, 8, -4, -8, -4, -8, -8) 313 | 2:1/7 = 7 314 | 2:1/7/flip_h = true 315 | 2:1/7/flip_v = true 316 | 2:1/7/transpose = true 317 | 2:1/7/physics_layer_0/linear_velocity = Vector2(0, 0) 318 | 2:1/7/physics_layer_0/angular_velocity = 0.0 319 | 2:1/7/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, -8, -4, 8, -4, 8, -8) 320 | 321 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gvqhv"] 322 | texture = ExtResource("1") 323 | margins = Vector2i(32, 0) 324 | texture_region_size = Vector2i(16, 32) 325 | 0:0/next_alternative_id = 8 326 | 0:0/0 = 0 327 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 328 | 0:0/0/physics_layer_0/angular_velocity = 0.0 329 | 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 16, -8, 16, -8, -16, 8, -16) 330 | 0:0/1 = 1 331 | 0:0/1/flip_h = true 332 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 333 | 0:0/1/physics_layer_0/angular_velocity = 0.0 334 | 0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 16, 8, 16, 8, -16, -8, -16) 335 | 0:0/2 = 2 336 | 0:0/2/flip_v = true 337 | 0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 338 | 0:0/2/physics_layer_0/angular_velocity = 0.0 339 | 0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(8, -16, -8, -16, -8, 16, 8, 16) 340 | 0:0/3 = 3 341 | 0:0/3/flip_h = true 342 | 0:0/3/flip_v = true 343 | 0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 344 | 0:0/3/physics_layer_0/angular_velocity = 0.0 345 | 0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -16, 8, -16, 8, 16, -8, 16) 346 | 0:0/4 = 4 347 | 0:0/4/transpose = true 348 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 349 | 0:0/4/physics_layer_0/angular_velocity = 0.0 350 | 0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(16, 8, 16, -8, -16, -8, -16, 8) 351 | 0:0/5 = 5 352 | 0:0/5/flip_h = true 353 | 0:0/5/transpose = true 354 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 355 | 0:0/5/physics_layer_0/angular_velocity = 0.0 356 | 0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, -16, -8, 16, -8, 16, 8) 357 | 0:0/6 = 6 358 | 0:0/6/flip_v = true 359 | 0:0/6/transpose = true 360 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 361 | 0:0/6/physics_layer_0/angular_velocity = 0.0 362 | 0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(16, -8, 16, 8, -16, 8, -16, -8) 363 | 0:0/7 = 7 364 | 0:0/7/flip_h = true 365 | 0:0/7/flip_v = true 366 | 0:0/7/transpose = true 367 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 368 | 0:0/7/physics_layer_0/angular_velocity = 0.0 369 | 0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -8, -16, 8, 16, 8, 16, -8) 370 | 371 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3lsmy"] 372 | texture = ExtResource("1") 373 | margins = Vector2i(16, 0) 374 | 0:0/next_alternative_id = 8 375 | 0:0/0 = 0 376 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 377 | 0:0/0/physics_layer_0/angular_velocity = 0.0 378 | 0:0/1 = 1 379 | 0:0/1/flip_h = true 380 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 381 | 0:0/1/physics_layer_0/angular_velocity = 0.0 382 | 0:0/2 = 2 383 | 0:0/2/flip_v = true 384 | 0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 385 | 0:0/2/physics_layer_0/angular_velocity = 0.0 386 | 0:0/3 = 3 387 | 0:0/3/flip_h = true 388 | 0:0/3/flip_v = true 389 | 0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 390 | 0:0/3/physics_layer_0/angular_velocity = 0.0 391 | 0:0/4 = 4 392 | 0:0/4/transpose = true 393 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 394 | 0:0/4/physics_layer_0/angular_velocity = 0.0 395 | 0:0/5 = 5 396 | 0:0/5/flip_h = true 397 | 0:0/5/transpose = true 398 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 399 | 0:0/5/physics_layer_0/angular_velocity = 0.0 400 | 0:0/6 = 6 401 | 0:0/6/flip_v = true 402 | 0:0/6/transpose = true 403 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 404 | 0:0/6/physics_layer_0/angular_velocity = 0.0 405 | 0:0/7 = 7 406 | 0:0/7/flip_h = true 407 | 0:0/7/flip_v = true 408 | 0:0/7/transpose = true 409 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 410 | 0:0/7/physics_layer_0/angular_velocity = 0.0 411 | 412 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s7838"] 413 | texture = ExtResource("1") 414 | margins = Vector2i(64, 96) 415 | texture_region_size = Vector2i(32, 32) 416 | 0:0/next_alternative_id = 8 417 | 0:0/0 = 0 418 | 0:0/0/y_sort_origin = 5 419 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 420 | 0:0/0/physics_layer_0/angular_velocity = 0.0 421 | 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 4, -16, 4, -16, -4, 16, -4) 422 | 0:0/1 = 1 423 | 0:0/1/flip_h = true 424 | 0:0/1/y_sort_origin = 5 425 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 426 | 0:0/1/physics_layer_0/angular_velocity = 0.0 427 | 0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, 16, 8, 16, -8, -16, -8) 428 | 0:0/4 = 4 429 | 0:0/4/transpose = true 430 | 0:0/4/y_sort_origin = 15 431 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 432 | 0:0/4/physics_layer_0/angular_velocity = 0.0 433 | 0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(0, 16, 4, 12, 4, -12, 0, -16, -12, -16, -16, -12, -16, 12, -12, 16) 434 | 0:0/5 = 5 435 | 0:0/5/flip_h = true 436 | 0:0/5/transpose = true 437 | 0:0/5/y_sort_origin = 15 438 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 439 | 0:0/5/physics_layer_0/angular_velocity = 0.0 440 | 0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(0, 16, -4, 12, -4, -12, 0, -16, 12, -16, 16, -12, 16, 12, 12, 16) 441 | 0:0/6 = 6 442 | 0:0/6/flip_v = true 443 | 0:0/6/transpose = true 444 | 0:0/6/y_sort_origin = 15 445 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 446 | 0:0/6/physics_layer_0/angular_velocity = 0.0 447 | 0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(0, -16, 0, 16, -12, 16, -12, -16) 448 | 0:0/7 = 7 449 | 0:0/7/flip_h = true 450 | 0:0/7/flip_v = true 451 | 0:0/7/transpose = true 452 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 453 | 0:0/7/physics_layer_0/angular_velocity = 0.0 454 | 0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(0, -16, 0, 16, 12, 16, 12, -16) 455 | 1:0/0 = 0 456 | 1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 457 | 1:0/0/physics_layer_0/angular_velocity = 0.0 458 | 459 | [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8glyf"] 460 | texture = ExtResource("1") 461 | margins = Vector2i(64, 64) 462 | texture_region_size = Vector2i(32, 32) 463 | 0:0/next_alternative_id = 8 464 | 0:0/0 = 0 465 | 0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0) 466 | 0:0/0/physics_layer_0/angular_velocity = 0.0 467 | 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16) 468 | 0:0/1 = 1 469 | 0:0/1/flip_h = true 470 | 0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0) 471 | 0:0/1/physics_layer_0/angular_velocity = 0.0 472 | 0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16) 473 | 0:0/2 = 2 474 | 0:0/2/flip_v = true 475 | 0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0) 476 | 0:0/2/physics_layer_0/angular_velocity = 0.0 477 | 0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16) 478 | 0:0/3 = 3 479 | 0:0/3/flip_h = true 480 | 0:0/3/flip_v = true 481 | 0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0) 482 | 0:0/3/physics_layer_0/angular_velocity = 0.0 483 | 0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) 484 | 0:0/4 = 4 485 | 0:0/4/transpose = true 486 | 0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0) 487 | 0:0/4/physics_layer_0/angular_velocity = 0.0 488 | 0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -16, -16, -16, 16) 489 | 0:0/5 = 5 490 | 0:0/5/flip_h = true 491 | 0:0/5/transpose = true 492 | 0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0) 493 | 0:0/5/physics_layer_0/angular_velocity = 0.0 494 | 0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 16, -16, 16, 16) 495 | 0:0/6 = 6 496 | 0:0/6/flip_v = true 497 | 0:0/6/transpose = true 498 | 0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0) 499 | 0:0/6/physics_layer_0/angular_velocity = 0.0 500 | 0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -16, 16, -16, -16) 501 | 0:0/7 = 7 502 | 0:0/7/flip_h = true 503 | 0:0/7/flip_v = true 504 | 0:0/7/transpose = true 505 | 0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0) 506 | 0:0/7/physics_layer_0/angular_velocity = 0.0 507 | 0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16) 508 | 509 | [resource] 510 | physics_layer_0/collision_layer = 1 511 | sources/0 = SubResource("TileSetAtlasSource_835nv") 512 | sources/1 = SubResource("TileSetAtlasSource_778ew") 513 | sources/2 = SubResource("TileSetAtlasSource_gvqhv") 514 | sources/3 = SubResource("TileSetAtlasSource_3lsmy") 515 | sources/4 = SubResource("TileSetAtlasSource_s7838") 516 | sources/5 = SubResource("TileSetAtlasSource_8glyf") 517 | --------------------------------------------------------------------------------