A client for poppy
Go to file
Pascal Abresch 42b0e04312 New network backend 2024-02-25 21:48:04 +01:00
lua New network backend 2024-02-25 21:48:04 +01:00
ressources New main menu music! Too many changes to remember 2024-02-11 22:43:28 +01:00
server New network backend 2024-02-25 21:48:04 +01:00
shared New network backend 2024-02-25 21:48:04 +01:00
sound add Poppy menu music 2024-02-10 23:13:02 +01:00
textures New main menu music! Too many changes to remember 2024-02-11 22:43:28 +01:00
.gitmodules Pull server into this repo directly 2022-07-03 20:45:22 +02:00
FixMime New main menu music! Too many changes to remember 2024-02-11 22:43:28 +01:00
Readme.md update readme 2022-07-03 19:59:52 +02:00
conf.lua Change window casing 2022-10-18 14:27:13 +02:00
main.lua Add new network encoded/decoder 2024-02-25 13:27:44 +01:00
makeCleintLoveFile.sh script to build package 2022-12-04 11:09:55 +01:00
run adjust run script 2024-02-25 13:28:01 +01:00


Poppy This is the Poppy game
A server is required to play the game, if you do not have one running then
run love . in the server/ directory for a local one for now.\

The performance is currently not so great on older computers,
I have not investigated this much yet. Safe to say it is not intended to run so badly :)

Implementation status


  • Loading textures

  • drawing on canvases

  • physics calculation for collison and movement

  • drawing physics collisions (on the physics layer) (debug)

  • Basic networking

    • Get clientID
    • Draw all players
    • sync physics state
    • Send/Receive drawn stuff
    • Send disconnect on client quit
    • Send disconnect on client error
    • Chat support
  • Retrieve initial game state (partial)

    • Get users name
    • Get users avatar
    • Get world size
  • Drawing

    • Draw with custom color
    • Re-do base textures as gray scale to color in arbitrarily
  • UI

    • UI to connect to specific server
    • Reconnect to server
    • connect to other server during a session

Not implemented (rough goals anyhow)

  • Remember visited servers (save the list)

  • Add new servers to the list by user input

  • Add new servers at runtime via DNS-SD mDNS discovery

  • Saving the map

  • Loading the map from disk (and send it to the server)

  • Loading the map from server on connect

  • confirmation before clearing canvas (that's quite destructive :D)

    • Make a way to add dialogs and stuff
  • Drawing

    • drawing preview (shows the grid directly, also gives feedback to the user for selected block)
    • Draw with colors custom stencils
    • Define stencils based on drawn stuff on the canvas
    • Allow the textures to be scaled up before placing
    • Have a preview of where textures will be placed
    • Have a way to move the grid by pixel increments
  • Advanced physics

    • Each pixel gets a physics vector associated, each hit pixel gets the vector added to a "positon" vector, which can be added as a diff to the player This can replace the gravity code directly, and allow stuff to push players around in addition to simply blocking them like the current physics does.
  • Programming layer

    • Basically: Have a set of colors/programms, each of those has a single code run Associated with it, the programms/colors can then be drawn on a dedicated canvas each area that is connected is treated as one instance of the programm. The programm instances can alter the world within their bounds, but not outside it The programm instances can send messages between to other instances that are immidiently adjecent, and react to messages accordingly. Each instance can send messages to a specifc color/programm type, but not differenciate between instances, if area RED has two GREEN instances adjacent and sends a message to GREEN it will be delivered to both GREEn instances.
    • Figure out how to render this differently for color blindness
    • Designing DSL for programming layer
    • Group connected areas for programm instance
    • Define colors for use in programming layer
    • Build a map of all instances and their allowed communication partners.
    • figure out if this is supposed to run on the server client or both (probably predicted?)
  • Networking support

    • Figure out why and how physics is tied to framerate, why does jump height differ?
    • Implement initial state sync
      • Server remembers plays last position and tells you
      • Server remembers drawn stuff and tells you
    • Add ack que, resend lost packets (but only for stuff like drawing and such, movement may drop)
    • Tell the user if the server doesn't support the networking version requested

Running the game as a development version


  1. Download the game engine from https://love2d.org/
  • Pick the installer if you want to install it, or the zip to run it directly
  1. Clone the game via git
  2. Run love2d pointed to the checkout (love.exe path\to\checkout)


  1. Install the engine
    • On 32bit: pkgman install cmd:love_x86
    • On 64bit: pkgman install cmd:love
  2. Clone the game via git
  3. Run love(_x86) path/to/checkout

Packaging the game

Create a .love archive

  1. Copy any font you want to bundle to fonts/font.ttf (This cannot be bundled as a symlink)
  2. Zip the files
    • If you bundle a font: zip -r Poppy main.lua conf.lua lua/ textures/ fonts/
    • If you don't bundle a font: zip -r Poppy main.lua conf.lua lua/ textures/

Package for windows

  1. Download the love2d distribution from http://love2d.org/ (For example https://github.com/love2d/love/releases/download/11.4/love-11.4-win64.zip)
  2. unpack the distribution
  3. add the Poppy.zip from the previous step to the love2d executable
    • copy /b love.exe+Poppy.zip Poppy.exe
  4. (add license info for poppy?)
  5. Repack the distribution archive

Package for HaikuHaiku

  1. mv Poppy.zip Poppy
  2. If you did not change the icon Run resattr -O -o Poppy ressources/Poppy.rsrc

If you changed the Icon:

  1. Export the Icon from Poppy.iom to Poppy.rdef as HVIF RDEF
  2. Change resource() to resource(1, "BEOS:ICON")
  3. Add "resource(2, "BEOS:TYPE") #'MIMS' "application/x-love-game";" to the file
  4. Run rc -o Poppy.rsrc Poppy.rdef (This will compile the ressource file)
  5. Run resattr -O -o Poppy ressources/Poppy.rsrc

Now the game can be run with "love(_x86) path/to/archive" (I have a WIP patch to make this work easily with "open path/to/archive" or double clicking in Tracker, but it is not finished yet, or merged)

TODO: how to create a .hpkg (notes: how to add .Packageinfo? add this to the repo? syntax for package command explain how to create the DeskBar entry to the archive)