diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-05-19 07:09:00 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-05-19 07:09:00 +0100 |
| commit | 822cb31184875def0b2cc0d5d66e0f65bacff226 (patch) | |
| tree | 9058b539fb88b51a950a3e96603d08b46ee74618 | |
| parent | bfa58d7b780e0cd6f75421fe1153d73fc6f8057b (diff) | |
| -rw-r--r-- | .gitignore | 23 | ||||
| -rw-r--r-- | Wood.tsx | 4 | ||||
| -rw-r--r-- | free-fall.tiled-project | 14 | ||||
| -rw-r--r-- | free-fall.tiled-session | 13 | ||||
| -rw-r--r-- | game.scm | 88 | ||||
| -rw-r--r-- | level0.tmx | 51 | ||||
| -rw-r--r-- | wood_tileset.png | bin | 0 -> 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": [ + ] +} @@ -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 Binary files differnew file mode 100644 index 0000000..952dcb4 --- /dev/null +++ b/wood_tileset.png |
