aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2026-05-19 07:09:00 +0100
committerGene Pasquet <dev@etenil.net>2026-05-19 07:09:00 +0100
commit822cb31184875def0b2cc0d5d66e0f65bacff226 (patch)
tree9058b539fb88b51a950a3e96603d08b46ee74618
parentbfa58d7b780e0cd6f75421fe1153d73fc6f8057b (diff)
First attempt!?HEADmaster
-rw-r--r--.gitignore23
-rw-r--r--Wood.tsx4
-rw-r--r--free-fall.tiled-project14
-rw-r--r--free-fall.tiled-session13
-rw-r--r--game.scm88
-rw-r--r--level0.tmx51
-rw-r--r--wood_tileset.pngbin0 -> 293552 bytes
7 files changed, 192 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c18589d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+# -*- mode: gitignore; -*-
+*~
+\#*\#
+.\#*
+
+# Org-mode
+.org-id-locations
+*_archive
+
+# flymake-mode
+*_flymake.*
+
+# projectiles files
+.projectile
+
+# directory configuration
+.dir-locals.el
+
+# undo-tree
+*.~undo-tree~
+
+# Game artifacts
+/game
diff --git a/Wood.tsx b/Wood.tsx
new file mode 100644
index 0000000..3bd62a4
--- /dev/null
+++ b/Wood.tsx
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tileset version="1.10" tiledversion="1.12.1" name="Wood" tilewidth="32" tileheight="32" tilecount="256" columns="16">
+ <image source="wood_tileset.png" width="512" height="512"/>
+</tileset>
diff --git a/free-fall.tiled-project b/free-fall.tiled-project
new file mode 100644
index 0000000..d0eb592
--- /dev/null
+++ b/free-fall.tiled-project
@@ -0,0 +1,14 @@
+{
+ "automappingRulesFile": "",
+ "commands": [
+ ],
+ "compatibilityVersion": 1100,
+ "extensionsPath": "extensions",
+ "folders": [
+ "."
+ ],
+ "properties": [
+ ],
+ "propertyTypes": [
+ ]
+}
diff --git a/free-fall.tiled-session b/free-fall.tiled-session
new file mode 100644
index 0000000..b7cbe0b
--- /dev/null
+++ b/free-fall.tiled-session
@@ -0,0 +1,13 @@
+{
+ "activeFile": "",
+ "expandedProjectPaths": [
+ ],
+ "file.lastUsedOpenFilter": "All Files (*)",
+ "fileStates": {
+ },
+ "openFiles": [
+ ],
+ "project": "free-fall.tiled-project",
+ "recentFiles": [
+ ]
+}
diff --git a/game.scm b/game.scm
index 54ee68c..b125852 100644
--- a/game.scm
+++ b/game.scm
@@ -1,2 +1,88 @@
-(import (downstroke engine))
+(import scheme
+ (chicken base)
+ (chicken process-context)
+ (srfi 197)
+ (only (list-utils alist) plist->alist)
+ (prefix sdl2 "sdl2:")
+ (prefix sdl2-ttf "ttf:")
+ (prefix sdl2-image "img:")
+ (downstroke engine)
+ (downstroke world)
+ (downstroke input)
+ (downstroke physics)
+ (downstroke assets)
+ (downstroke entity)
+ (downstroke sound)
+ (downstroke tween)
+ (downstroke scene-loader))
+
+(define +debug?+ (and (member "--debug" (command-line-arguments)) #t))
+;; Momentum, number of pixels/s a movement accelerates after pressing/release
+(define +horizontal-momentum+ 0.01)
+(define +wind-force+ 0.1)
+(define +max-leaf-speed+ 3)
+
+(set! *gravity* 0.1)
+
+(define (make-leaf)
+ (plist->alist (list #:type 'leaf
+ #:x 100 #:y 200
+ #:width 32 #:height 32
+ #:ax 0 #:ay 0
+ #:vx 0 #:vy 0
+ #:gravity? #t #:on-ground? #f
+ #:tile-id 41 #:tags '(leaf)
+ ;; #:tween (make-tween '((#:x . 100) (#:y . 200))
+ ;; props: '((#:x . 120))
+ ;; duration: 500
+ ;; ease: 'linear
+ ;; repeat: -1
+ ;; yoyo?: #t)
+ )))
+
+(define (clamp value maximum . args)
+ (let ((minimum (if (null? args) (- maximum) (car args))))
+ (max (min value maximum) minimum)))
+
+(define (leaf-ax vx input)
+ (cond ((input-held? input 'left) (- +wind-force+))
+ ((input-held? input 'right) +wind-force+)
+ ((> vx 0.1) (- +horizontal-momentum+))
+ ((< vx -0.1) +horizontal-momentum+)
+ (else 0)))
+
+(define (update-leaf leaf input dt)
+ (let ((ax (leaf-ax (entity-ref leaf #:vx) input)))
+ (chain leaf
+ (entity-set _ #:vx (clamp
+ (+ (entity-ref leaf #:vx) (* ax dt))
+ +max-leaf-speed+))
+ ;; Clamp gravity
+ (entity-set _ #:vy (clamp (entity-ref leaf #:vy) +max-leaf-speed+)))))
+
+(define (scene-get-leaf scene)
+ ;; leaf is being added as the first entity in the scene, so we can cheat here.
+ (car (scene-entities scene)))
+
+(define *game*
+ (make-game
+ title: "Free Fall" width: 320 height: 240
+ debug?: +debug?+
+ scale: 2
+
+ preload: (lambda (game) game)
+
+ create: (lambda (game)
+ (game-scene-set! game (chain (game-load-scene! game "level0.tmx")
+ (scene-add-entity _ (make-leaf))
+ (update-scene _ camera-target: 'leaf)
+ (update-scene _ background: '(173 216 230 255)))))
+
+ update: (lambda (game dt)
+ (let* ((input (game-input game))
+ (scene (game-scene game))
+ (leaf (update-leaf (scene-get-leaf scene) input dt)))
+ (game-scene-set! game (update-scene scene entities: (list leaf)))))))
+
+;; (game-run! *game*)
diff --git a/level0.tmx b/level0.tmx
new file mode 100644
index 0000000..8681013
--- /dev/null
+++ b/level0.tmx
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="right-down" width="10" height="40" tilewidth="32" tileheight="32" infinite="0" nextlayerid="3" nextobjectid="2">
+ <tileset firstgid="1" source="Wood.tsx"/>
+ <layer id="1" name="Tile Layer 1" width="10" height="40">
+ <data encoding="csv">
+0,0,0,205,206,207,208,0,0,0,
+0,0,205,206,222,223,207,208,0,0,
+0,0,222,222,222,223,223,223,0,0,
+0,0,237,238,183,183,239,240,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+183,183,183,183,183,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,183,183,183,183,183,183,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+183,183,183,183,183,183,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,183,183,183,183,183,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+183,183,183,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,
+0,0,0,31,31,31,31,0,0,0,
+31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31
+</data>
+ </layer>
+ <objectgroup id="2" name="Object Layer 1">
+ <object id="1" name="leaf" type="Leaf" gid="41" x="67.1428" y="189.119" width="32" height="32"/>
+ </objectgroup>
+</map>
diff --git a/wood_tileset.png b/wood_tileset.png
new file mode 100644
index 0000000..952dcb4
--- /dev/null
+++ b/wood_tileset.png
Binary files differ