[HN Gopher] Open Golf: A cross-platform minigolf game written in C ___________________________________________________________________ Open Golf: A cross-platform minigolf game written in C Author : 10000truths Score : 318 points Date : 2022-03-24 13:23 UTC (9 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | hackernudes wrote: | Kind of looks like neverball/neverputt (https://neverball.org/). | d0nd0ne wrote: | Here comes the nostalgia | DrBoring wrote: | Zany Golf | parasti wrote: | Neverball also has a browser version that's compiled directly | from the C code. (Shameless plug, I'm one of the developers.) | | https://neverball.github.io/ | teh_klev wrote: | This is excellent. Can I suggest a couple of improvements? | | 1. Maybe have a "par" for each hole. | | 2. Be able to better see the layout of multi-level holes, i.e. | the ones with slopes. | | Other than that this is a really nice lunchtime distraction. | taurusnoises wrote: | Loved it, and would concur that having a better sense of what | the hole looks like from above before the shot (or being able | to click to see the hole from above like a map) would be | awesome. But, I loved playing it. And, I sucked. | jll29 wrote: | Nice one - amazing what's possible in a browser today! Also, | impressive how lean the code is in terms of the small number of | libraries need. | bspammer wrote: | Seems really great, I played all the way through. Here's a couple | low-hanging QOL suggestions: | | * Use right-click for the camera control, rather than left-click | away from the ball. It's unnerving to have the camera change | while you're trying to line up a shot. | | * Show a shot counter, and assign each hole a par. | | * Slightly tune down the friction. I had the ball stop dead on | slopes a couple of times, and it stopped way earlier than I | expected on slower shots. | quaffapint wrote: | After spending my career working in higher level languages, I'm | always impressed by what people can do with languages like C. | It's not just for drivers anymore. | pjmlp wrote: | Once upon a time such kind of games used to be done in C, after | being done several years in Assembly, hardly anything to be | amazed. | queuebert wrote: | It was never just for drivers. Most of what you use in high- | level languages is just syntactical sugar for things that might | take three lines in C instead of one line in your usual | language. | samatman wrote: | Three uncorrelated lines, two of which take a buffer, length | pair which is also uncorrelated, calling something with | undefined behavior if the buffer and length aren't the | correct pairing. | | But yes. | hnlmorg wrote: | It used to be the norm to write games in C. In fact it used to | be the norm to write them in assembly, C was seen as a higher | level abstraction that sped up games development once upon a | time. | deagle50 wrote: | There's a good Diablo 1 "making of" video, the lead developer | talks about learning C while coding the game in assembly. | I'll try to find it. | foldor wrote: | Yeah, I'm pretty sure most game devs of that era were doing | something similar. It seems that once games went 3D, it was | too impractical to do assembly anymore. So basically a lot | of early PS1/N64/Saturn games were likely some pretty rough | C code if I had to guess. | meheleventyone wrote: | It's less that but that the C tooling matured to the | point where it was actually good enough to use. | Particularly in terms of good enough output. Tight loops | and often called functions were and sometimes still are | (in SIMD terms) written in assembly so they could be hand | optimized. | | More exotic hardware also relied on the vendors providing | a C compiler and the quality there could vary wildly. | bcjordan wrote: | Putters, too! | [deleted] | juliushuijnk wrote: | Nice. | | Perhaps a level generator based on some ascii art or something | would be nice. | | That way more people could add levels in merge requests. Or even | add a level loader where you can import a list of those levels. | sastraxi wrote: | I'd love to hear more about the lightmapping interpolation for | moving objects. I wonder what kinds of efficiencies the author | had to find to make it performant. | modernerd wrote: | Any recommendations to learn to build cross-platform games like | this? | | I work on frontend projects day-to-day. I'd love to build a | simple cross-platform game in C/Zig/C++ for some variety and to | learn lower-level programming. | | I've looked at Handmade Hero in the past but its specific to | Windows at the moment. | modeless wrote: | It's all about the libraries. Use Sokol and Dear Imgui and | you'll be cross platform. | jstimpfle wrote: | Handmade Hero gives good advice how to modularize to make a | game portable. For many things you want to achieve, you can | have the platform call the game instead of the other way | around. Essentially it's (asynchronous) event driven | architecture which enforces modularization. | | Think of a system as shipping data packets around, then it | should be much easier to see how to swap out the platform | parts. | ryandrake wrote: | This might be obvious, but one of the key activities is to | minimize platform-dependent code so that most of the game logic | is portable and shared across all platforms. So no Win32-isms | or Cocoa-isms or <unistd.h> littered all over your game. | | One way (out of many) to do this is have a cross-platform | interface for each non-portable thing, with separate platform- | specific implementation files that you swap in depending on | which platform build you're doing. For example, if your game | has sound, you'll probably have a platform-independent sound.h | the rest of the game calls into, and then sound_windows.c, | sound_linux.c, sound_mac.c, etc. files that contain the | platform-specific implementations of those functions. Repeat | for graphics, input, and other things that cannot be done (or | you don't want to do) in a portable way. | | Another thing is the game loop. Back in the DOS days, when you | were the only thing running on the system, you implement main() | did something like: while (game_running) { | do_everything(); } | | Modern platforms expect to be in the driver seat, and will | instead call into your code, so this turns into something like: | function windows_call_me_please() { | do_everything(); } | | Obviously this is a simplification, and there is a lot more to | it, but hopefully it answers some basic questions. | jkbf wrote: | Level 20, but wish there were more. The fun ones were trying to | skip most of the course from the tee. Throw a leaderboard on | there and no one's going to be working. | | Great work, awesome orchestration of cross platform libs. | confident_inept wrote: | I think the game not having an online component is one of its | charms. Simplicity in nature and execution is the obvious goal. | | Have you seen the leaderboards of any online game lately? They | usually get wrecked by cheaters and defeat the whole purpose. | tln wrote: | Cool project! | | Was this inspired by Golf with Your Friends? I've been playing | that a fair bit, it's pretty fun and good value. | adamrezich wrote: | looks like it doesn't (yet?) have networking support. my | fiancee plays GFW almost daily after it was on sale recently, | it's a fantastic casual to play both with friends or with | strangers online, pretty chill community | omoikane wrote: | That was lots of fun! | | I wish there is a replay mode so I can relish on my glorious | strokes of luck. | shimonabi wrote: | It's great, but the hole is too wide. | | The ball shouldn't go in easily if you hit too hard. | DrBoring wrote: | Error report: on hole 3, I was able to ramp off a bump and hit | the hole with enough velocity that the ball clipped through into | an underground area. | xyzzy_plugh wrote: | This is excellent. Sokol is so very elegant compared to | alternatives. | fredgrott wrote: | Extremely playable, nice work! | haunter wrote: | Somewhere in Japan a lawyer picks up a pencil | https://en.wikipedia.org/wiki/NES_Open_Tournament_Golf | juice_bus wrote: | Very well done! | kennydude wrote: | Very nice simple golf game. Refreshing on mobile where there's | nothing but the game :) | moron4hire wrote: | Odd. I couldn't get it to work on Edge, Chrome, or Firefox on | Android. | scoofy wrote: | Love it | clearing wrote: | Between this, Elden Ring, and my rediscovery of FFXIV, I now | firmly believe there's a global conspiracy to stop me from doing | a single minute of work. | [deleted] | torh wrote: | Hi, have you meet Wordle? :) | sodimel wrote: | Hi, have you meet Semantle? :) | jjuel wrote: | But Wordle takes what 15 minutes of your day? | acolumb wrote: | Not even for the average HN user. | ilikepi wrote: | It's not just Wordle proper, though, it's all the | variants...Nerdle, Worldle, Heardle, | Dordle/Quordle/Octordle/etc... | [deleted] | clearing wrote: | I was doing it daily for a while. For some reason the | acquisition news made me stop, or maybe it was just the | timing. Maybe it's time to get back into the zone. | UberFly wrote: | Lots of fun. Then I got to level 12... :) | padobson wrote: | I tried to analyze the running app with the Firefox dev console, | but the GitHub hosted page said there were no sources! | | Browsing the Sokol Github, it looks like it's compiling to web | assembly. I'm not very familiar with web assembly, how does one | normally debug it? | flohofwoe wrote: | With the sokol libs as platform abstraction it works quite well | to develop and debug a native build in a regular C/C++ IDE and | then only cross-compile to WASM. Most bugs are platform | agnostic and would also happen in the native build. For the | rare case that problems only happen in the WASM build, regular | printf-debugging usually works well enough, or in case of WebGL | specific problems there will be validation errors on the JS | console from the browser's WebGL implementation). | | (disclaimer: sokol author) | modeless wrote: | I haven't tried it but Chrome dev tools supports debugging C++ | compiled to WASM with DWARF debug symbols. | [deleted] | b20000 wrote: | waiting for the first post that says this should have been | written in rust | ______-_-______ wrote: | I'm waiting for the "programming language in the title = | clickbait" crowd | Narishma wrote: | They only show up when said language is rust. | dblohm7 wrote: | Why "Works best with Chrome?" It works fine for me in Firefox. | 10000truths wrote: | Just to be clear, folks, this isn't my project. I saw this in | /r/programming and it looked interesting, so I thought I'd share | with you guys. | tpmx wrote: | The main game state machine is a neat read. | | https://github.com/mgerdes/Open-Golf/blob/master/src/golf/ga... | eashish93 wrote: | Addicted to it. | mythz wrote: | Impressive to see C being able to create x-plat 3D games that run | in Browser + popular Desktop + Mobile OS's. | | Typically there's big companies with large dev teams working on | accomplishing such a feat & this project does it with with a 50 | year old language and a handful of libs | foo92691 wrote: | What's the TLDR on how to compile the C code to run in the | browser? | hoten wrote: | Emscripten. If you use something like SDL porting is trivial. | | Working on a project to port a 20 plus year old c/cpp code | base to the web. The tooling was like 98% there but I've had | to upstream a few fixes or find a workaround every now and | then. | pjmlp wrote: | Not to diminish the value of their efforts, welcome to the days | of 16 bit game programming, naturally minus the browser part. | | Plenty of retrogaming stuff to learn from. | treesknees wrote: | Cross-platform except for MacOS | | https://github.com/mgerdes/Open-Golf/issues/3 | ryandrake wrote: | They seem to have a build script for "OSX" but maybe it's just | incomplete / work-in-progress? It uses glfw, which I know for | sure still runs on Mac because I use it in my own cross- | platform graphics projects. | JKCalhoun wrote: | Web Inspector on Safari showing failure: "Worker load was | blocked by Cross-Origin-Embedder-Policy" | orangecat wrote: | Builds and runs well in Asahi Linux :) Frame rate isn't great | without GPU support, but totally playable. | whateveracct wrote: | Absolutely crazy that Asahi Linux beats MacOS on even one | silly datapoint of compatibility lol. Open source is sick. | flohofwoe wrote: | TBF, the only reason why macOS isn't currently supported | seems to be some minor build system details (e.g. the | toplevel CMakeLists.txt file has explicit support for | Windows, Linux, Android, iOS and Emscripten, but not | macOS). | [deleted] | coldcode wrote: | Works fine on MacOS on Chrome, just not Safari. | torh wrote: | Wow, this is neat. | hyperpallium2 wrote: | Request: since it's open source, put the android version on | F-Droid as well. https://f-droid.org/ ___________________________________________________________________ (page generated 2022-03-24 23:00 UTC)