FPS (Prototype) Mac OS
Disclaimer:
Cap your FPS in a multiple of what your monitor's refresh rate is. So if it's 60, cap your framerate at 30 or 45. This should help eliminate stuttering if that is what is your ailment. The game actually plays.really. well at 30 fps surprisingly. It doesn't look choppy. 45 is even better.
- Mac OS 10.6 or later. Shift-F displays FPS, entities, coordinates and TAF info. Prototype features, and other unstable code.
- FPS tends to fluctuate; there is likely a maximum rate that your Mac can reach based on its hardware but the frame rate can drop to a drastically low level if your system resources are being dragged down. Normally, FPS fluctuation isn’t extreme.
This is a prototype developed in 10 days for the 7DFPS and PROCJAM. It shows a tiny fraction of what I hope this project can become. It was solo developed by me with the exception of the font, the audio, and those nice space backgrounds in the menu. Please feel free to give any feedback, it is very much appreciated.
Pitch:
'In the grimdark future...there is only bugs!...
...and terrible work conditions.
Get ready to become a Bugbuster! A underpaid space bug exterminator who saves the day when people need him the most. And when I say 'people' I mean huge corporations who want to retrieve lost infested spaceships in order to aquire precious ancient technology.
But that doesn`t really matter because you are the hero today! You are a Bugbuster, and you are eager to finish your shift in order to get your paycheck before some space bug kills you. You know that the last guy died horribly, but at least you got his position now! Also, your company doesn`t offer life insurance, keep that in mind.'
Bugbuster is a Roguelite FPS where you kill space bugs and try to get a living in this dystopian grimdark future where labour laws are a myth of the past.
Controls:
Move with WASD, jump with Space, kill space bugs with mouse, and pick your company guns with E. You can also pause the game with esc, but remember that you are paid by the minute so don't idle around too much!
Install instructions:
Choose your OS file, download, unzip in any folder and play the executable.
Happy hunting, Bugbusters! And prepare to work overtime!
Status | Prototype |
Platforms | Windows, macOS, Linux |
Author | Gui Santos |
Genre | Action |
Tags | 7dfps, Comedy, FPS, Low-poly, Procedural Generation, PROCJAM, Roguelike, Roguelite, Sci-fi, Story Rich |
Download
Development log
- Jam RetrospectiveDec 14, 2020
- Day 7 RetrospectiveDec 11, 2020
- Day 4 RetrospectiveDec 08, 2020
- Day 2 RetrospectiveDec 06, 2020
Log in with itch.io to leave a comment.
Yeah sorry about that, its a bug I'm trying to fix, it has to do with the mouse rotation inverting the camera sometimes, weird thing is that I fixed it in the editor but the builds still have this problem.
The game update and render loop can average 40 000 cycles and once every few seconds take up to 3X the amount. I know the timing isn't perfectly deterministic, but Casey's version prints 0.033ms/frame very consistently.
I first started with a timer that fires every 1/30 or 1/60 second, but it fluctuates a lot. I thought, maybe the timer isn't accurate, but that wouldn't explain the varying cycles in the game code which only measures the time spend from the beginning to the end of the game update and render loop.
Now that we learned how to start a different thread, I tried running the game on a different thread and as in Windows, do an 'infinite' while loop and adjust the sleep if the game runs too fast than the target ms/frame, but the results are not better, although different...
What's your experience with this? Is this harder to get right on OS X? This seems a trivial issue, so I can't see what I'd be doing wrong.
Note: I run the game at only 640-by-360, to make sure my 2008 laptop should be able to hit a consistent fps.
Is there a good reference to an implementation of a game loop without a timer on OS X?
Casey Muratori is a programmer at Molly Rocket on the game 1935 and is the host of the educational programming series Handmade Hero.
Second, regarding OS X, I would assume that it also always goes through a compositor, so flickering sounds like a strange thing to be seeing. I would suspect that something else might be wrong as well?
- Casey
There's got to be something crucial that I don't get.
What's also weird, is that the tearing happens even when the frame doesn't change. I know how to solve (or rather, minimize) this: by drawing in a separate buffer and right before returning from the gameUpdateAndRender function to the platform layer, copying the pixels from the secondary buffer to the buffer that's passed in the gameUpdateAndRender function as an argument. This buffer is then used to blit to the screen. But it doesn't solve the odd timings, and I don't think I should have to do this...
http://xyproblem.info/
http://www.catb.org/~esr/faqs/smart-questions.html
I'm more concerned about finding out why the timings are so inconsistent, though. The only possible explanation I can think of is some sort of energy savings... Or I do something wrong, which I would prefer, because then I can hopefully find out what.
Casey Muratori is a programmer at Molly Rocket on the game 1935 and is the host of the educational programming series Handmade Hero.
So, I can't really offer much in the way of advice because it's been years since I've done any from-scratch programming on Mac OS X, but I would say the first thing to verify is that you are actually using a system service which guarantees low-latency precision timing. Typically, windowing system timers aren't unless they're specifically labeled as such.
- Casey
A software engineer that enjoys living in enemy territory.
I've looked at CVDisplayLinkRef before, but that's only possible when using OpenGL afaik, and it doesn't help with the timing of the gameUpdate function, I think. It only makes sure the framebuffer flips at the vertical blanking interval, I THINK.
Anyway, thank you everyone for reading my ramblings and suggesting options to try. If I can't solve it, I guess I'll see a possible solution at the end of Handmade Hero. ;)
A software engineer that enjoys living in enemy territory.
CVDisplayLink is a timer that is tied to your screen refresh rate (typically 60Hz), but since you use time deltas in the update code, it doesn't matter if it's a 120Hz screen or a variable refresh rate screen.
Mac Fps Booster
I'm seeing that every ~10 frames, the amount of cycles spend in gameUpdateAndRender can be up to 3x during 1 frame, the mystery of this is really what puzzles me the most. Is it possible that this is caused by reference counting? I don't think so, because I thought it should be deterministic as opposed to garbage collection, but I'm not a professional. Furthermore, 3x seems really high and it would make me sad if it's possible that the 3x cycles count every once in a while is caused by reference counting.
A software engineer that enjoys living in enemy territory.
Small off topic question: Now that Swift has support for SIMD, I tried to use it, but __m128i and all the corresponding functions are not declared in my project... I thought it was something I did wrong, but then I found out that __m128i is not supported on ARM, so maybe that's why, and OS X has to wait for proper support. :(
If this is the case: is there a way to reinterpret an integer vector to a float vector without the __m128i type and its functions 'manually'?
Fps (prototype) Mac Os Download
What you meant probably is that iOS doesn't support SSE. iOS works on ARM which has NEON intrinsics.
What do you mean reinterpret and integer vector to float vector? Just a cast?
http://xyproblem.info/
http://www.catb.org/~esr/faqs/smart-questions.html
Fps (prototype) Mac Os 11
The problem is that __m128i is not defined in Swift for some reason (I think because it's not needed for ARM and that's what Apple only cares about.)
Can I just cast it instead of converting it? Or is that semantically different? I guess it wouldn't be enough, though, because there's no equivalent float4 function for every int4 function.