@jonikorpi@mastodon.gamedev.place
@jonikorpi@mastodon.gamedev.place avatar

jonikorpi

@jonikorpi@mastodon.gamedev.place

Making multiplayer games for the web platform.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

anchorite, to gamedev
@anchorite@mastodon.gamedev.place avatar

Here's a little vertical slice of how combat should feel in Exoloper. About a minute of raw gameplay in its current state.

Warning, it's loud.

#gamedev

A minute of footage where the player’s Exo goes around blasting Commonwealth tanks in an arid industrial environment.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@anchorite Battlezone (1998) vibes! Neat.

lisyarus, to random
@lisyarus@mastodon.gamedev.place avatar

Bringing the harvesting tool UI in line with the building tool, using these cute hex lines. I think this might be a nice enough general style for tools/selections/tasks/etc

video/mp4

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@lisyarus Nice spin on the RTS drag-selection rectangle! Never seen it done like this before, but I like it.

jonikorpi, to random
@jonikorpi@mastodon.gamedev.place avatar

Did a thing where this account can be discovered on here as @jonikorpi. Doesn’t seem very useful, because it’s a redirect that only applies to discovery, and doesn’t change the actual handle of the account. But if anyone else wants to do it, here’s a guide: https://guide.toot.as/guide/use-your-own-domain/

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

And here’s an issue to track for actually changing your handle to use a custom domain, without having to host your own instance: https://github.com/mastodon/mastodon/issues/2668

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@hamatti Yeah, was surprised my redirect-handle didn’t get highlighted in my original post!

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

A slight additional improvement: added a simple redirect so that https://jonikorpi.com/@jonikorpi redirects to this Mastodon instance.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@hamatti Hmm… @jonikorpi started suddenly working now too… I think? Mysterious are the ways of redirects.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

Heh, works in the browser, but not in Ivory. Oh well. Good enough.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@matias Nice! Let’s see if mine works now @jonikorpi

Edit: goddamnit

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@matias Ohh, I think I see what’s happened here: the Cloudflare Pages portion of the guide I linked is a bit wrong, because it’s for a self-hosted use case. Thank you!

One more test… @jonikorpi
Edit: success!

jonikorpi, (edited ) to random
@jonikorpi@mastodon.gamedev.place avatar

3 weeks ago we had chilly +4C weather.

Today we had +28C with 50% humidity indoors. In Finland. In May.

This is normally August weather. It’s gonna continue for the whole week, too. Fucked.

jonikorpi, to random
@jonikorpi@mastodon.gamedev.place avatar

I think I’m slightly falling into the functional programming well after reading this, and a bunch of discussions referencing an old John Carmack talk. https://betterprogramming.pub/functional-game-engine-architecture-in-scala-2a68ccc76d2a?gi=c57f94df56b0

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

Basically, I’ve never found a way to manage game state that doesn’t hurt my brain. So much to figure out about how different entities relate to each other, what order things in execute in, when things execute…. As a not very programmer-y programmer I just can’t keep it all straight.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

This functional-ish approach, though, just seems to click. In very abbreviated form:

let currentGameState;  
let eventsForNextGameState;

while (eventsForNextGameState) {  
 [currentGameState, eventsForNextGameState] = getNextGameState(  
 currentGameState,  
 eventsForNextGameState,  
 );  
}  
jonikorpi, (edited )
@jonikorpi@mastodon.gamedev.place avatar

getNextGameState goes through the various entities currentGameState contains, and passes to them both currentGameState and any relevant events, like “you lost health”. Using those they return a new version of themselves, and maybe a bunch of new events, like “I punched <other entity>”.

On the next step/frame those new events will be passed on, and will again produce a new state and maybe even more events, which will again be passed on in the next step… and so on.

jonikorpi, (edited )
@jonikorpi@mastodon.gamedev.place avatar

Some events will fail due to conflicts, like when two entities try to to pick up the same coin. But it’s easy to reason about: just pick one and fail the other. Tell them with events, which will arrive in the next step.

Nice and simple. Friendly to both parallel execution and multiplayer. Maybe.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

I know functional programming is supposed to be all about purity, avoiding side effects, always creating new data instead of mutating the old… but I don’t really care about that much. The simple sequence of events here is the thing for me, the structure.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@playmedusa I’m sure it depends on who you ask, but I ended up finding all this while googling for “functional programming game state”, and all the reddit threads, blog posts and talks I went through talk about functional programming too, so…. :D

Some additional links:
http://michaelshaw.io/game_talk/game.html
https://www.youtube.com/watch?v=1PhArSujR_A

thudfactor, to webdev

See, there are still awesome sites on the Internet. Here you can test-drive roughly 100 monospaced programming fonts. https://www.programmingfonts.org/

I don't have time to look through all of them, so let me know what your favorites are.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@thudfactor definitely Intel One Mono: designed to be accessible for people with poor vision, so it feels great for everyone

runevision, to random
@runevision@mastodon.gamedev.place avatar

I've quietly made my LayerProcGen framework public:
https://github.com/runevision/LayerProcGen

It's a framework (C#) that can be used to implement layer-based procedural generation that's infinite, deterministic and contextual.

Nobody else have tried/tested it yet - if you're up for taking it for a spin, let me know how it looks; what's clear or confusing, if you think there's low hanging fruit improvements I could make, etc.

Video of a mountainous terrain and visualizations of the kind of layer based generated data that's used to generate it.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@runevision Finally ended up going through this proper, and realised I’ve taken basically the exact same approach! I just think of it as “cone-based” instead of “layer-based”, so I didn’t recognise it at first. :D Very happy to see someone write about this, and with such care!

jonikorpi, (edited )
@jonikorpi@mastodon.gamedev.place avatar

@runevision It was for world generation. Each layer “zoomed out”, forming a kind of pyramid or cone if you rendered and spaced them out a little: just like many of your illustrations!

Managed to revive a bad old prototype. The “levels” on the right are the layers. Each hex depends on a group of closest hexes from the next layer. https://old-gamedev-experiments.pages.dev/worldgenerator/

jonikorpi, to random
@jonikorpi@mastodon.gamedev.place avatar

Spent all day hunting for the cause of a mysterious bug. Found and fixed like 8 other bugs I didn’t even know were there, but it didn’t help. Now realised the mysterious bug isn’t actually a bug, but working precisely as past me wanted it to work.
Classic. -_-

jukio, to random
@jukio@mastodon.gamedev.place avatar

Dungeon Synth... That forbidden fruit of a genre I've longed to taste...

Now here it finally is: Wonders of kuj-Gozoddi, an exercise in storytelling through austere moods and old school midi. 🧙🧝⚔️

bandcamp: https://jukiokallio.bandcamp.com/album/wonders-of-kuj-gozoddi

spotify: https://open.spotify.com/album/1W3dud7w0WagNID5gJI8Pw?si=4V6gRllkRFmkkwHbdNjtCA

apple music: https://music.apple.com/us/album/wonders-of-kuj-gozoddi/1743318243

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@jukio This is rad as hell ❤️

tuomas_h, to homeassistant
@tuomas_h@mastodon.social avatar

Been tracking down a mysterious behaviour of a couple of Ikea Trådfri bulbs in our #HomeAssistant setup: at seemingly random times, unprompted by any automation or other obvious trigger, they turn on at very dim brightness. Logbook simply shows “turned on” without any additional context as to what did it.

Now I’m at the point where I’m trying to create an automation that captures this event and turns the light off, which I’m fine with if it works, but would still love to know why it happens.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@tuomas_h Dunno if this helps, but for us automations set in the Ikea Home Smart (1) app seem to turn them on at min brightness and slowly ramp up. So could be a ghost automation somewhere in there?

fox, to random
@fox@front-end.social avatar

what do y’all use for taking notes on mac + ios? i’ve been through notes, simplenote, ai writer, obsidian, notion and none worked out for me. either too complex or too simple.

i love markdown, but i don't want to write in any specific syntax — it slows down jotting down stuff. also, lots of apps are janky.

jonikorpi,
@jonikorpi@mastodon.gamedev.place avatar

@fox Tried everything too and ended up with Notion. Not happy with it, but I think the problem isn’t actually the app.

Good notetaking, at least for me, requires both writing and drawing. Unsolvable for now, since the ability to draw properly while writing is locked behind an expensive iPad setup, and the apps for it aren’t very smooth either. 🤷 (Or well, I guess Muse is alright.)

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • khanakhh
  • kavyap
  • thenastyranch
  • everett
  • tacticalgear
  • rosin
  • Durango
  • DreamBathrooms
  • mdbf
  • magazineikmin
  • InstantRegret
  • Youngstown
  • slotface
  • megavids
  • ethstaker
  • ngwrru68w68
  • cisconetworking
  • modclub
  • tester
  • osvaldo12
  • cubers
  • GTA5RPClips
  • normalnudes
  • Leos
  • provamag3
  • anitta
  • lostlight
  • All magazines