## [WIP]BeatFever Mania ~ osu! Engine reimplementation

Show off your games, demos and other (playable) creations.
Sulunia
Party member
Posts: 201
Joined: Tue Mar 22, 2016 1:10 pm
Location: SRS, Brazil

### [WIP]BeatFever Mania ~ osu! Engine reimplementation

BeatFever Mania is an open-source reimplementation of the "osu! game engine". The idea is to be able to develop your own gamemodes based off on osu's beatmaps, and also be able to bring satisfactory rhythm game experience to other platforms (the ones love2d can currently run in).

BeatFever's current splash screen.

FAQ

Q: What's this? What's osu?

A: osu! (http://osu.ppy.sh/) is a rhythm game based on "Elite Beat Agents" released for the Nintendo DS. Currently it features 4 gamemodes, online scoreboards and has versions for android and iOs.
There is currently another open-source implementation of this game called "opsu!" released on github (https://itdelatrisu.github.io/opsu/).
Seriously, give osu! a go, it has solid mechanics and is very lightweight, impressive if we consider a single person developed most of it single handedly.
--

Q: If another open-source reimplementation of this game exists, why make another?

A: Well, first, because we felt like it. Secondly, because opsu! is written in Java, and covers only Android and PC platforms. Third, we want to make this an expandable game in the future, with users being able to easily develop their own gamemodes and include them in our implementation without having to worry about file parsing or music management.
I also dislike java. No offense guys.
--

Q: Will it have a included game mode?

A: Yes, we intend on implementing the Catch the Beat! gamemode from osu! as a "main" gamemode. Again, in the future, users will be able to create their own gamemodes aswell.
--

Q: What works?
A: Nothing. Currently it parses general information and sections of a given .osu file. Gameplay is mostly implemented, just enough to kill a few minutes at work (provided you have a decent computer at hand). But there is still things to implement here and there, such as spinner parsing.
Segfault also mentioned he will soon enough start working on adding storyboard support.

To play, use arrow keys and hold shift to run.
--

Q: Toaster support?

A: NO!
But we've been thinking of adding support for the SteelSeries Gamesense engine. (http://techblog.steelseries.com/2015/06 ... sense.html).
Overkill? YES! But it would look cool i guess.

--

General stuff
I'm developing this game along with a friend (https://github.com/danielpontello/). He's drawing and creating the graphical assets while i put everything together in love2d. We've been developing this sporadically for about 2 weeks only.
We could always use some help or suggestions! We're hosting the game files and stuff on github: https://github.com/Sulunia/beatfever
Feel free to mess around.

The main game song is called "Identity Part 4" by ShK. We don't own the rights, currently we're using this song as a placeholder to post it here, until i have the time to make a theme song myself.(!)
The version on github does not include this song (and potentially breaks since it's hardcoded to load this specific song file), so we don't get in copyright troubles.

To run this game, you'll need to download osu beatmaps.. A quicksearch on google should be able to return some links from where you'll be able to grab some!

After downloading a beatmap you want to play, run the game, go to the selection screen by pressing "Play" and then just drag and drop any .osz file on the game window to install it.

On the selection screen, double click a song to play it.

To enable ingame graphical debugging helpers, press Shift+F8 ingame and type "debuggingEnabled = true".

Any questions or rants, just post a reply below. Feedback is welcome!

- Particles EVERYWHERE
- Slider pellet amount now varies accordingly to slider length
- autoPlay is no longer indecisive about it's life
- Fixed delay introduced by timer easing
- Songs that have start delays are now working properly

To enable autoPlay, press Shift+F8 and type "autoPlay = true" before choosing a song!

Known bugs:
-Installing too many songs will make the selection screen run veeery slowly.
-Removing a song from the install folder does not update the song selection list
-Some notes are too far from each other, thus, impossible to catch. I will implement the "note boost" mechanic to ammend this soon enough.
- Sliders may rarely overlap. VERY rarely. Please PM me if it happens in a specific song.

-- Raspberry Pi
- No way to quit game yet! Should fix soon enough
- Menu runs pretty slow right now, but ingame works quite well considering the limited hardware.

--I'll make a new branch on github for the mobile version, which will feature overhauled control scheme.

I like the fact the autoplay sometimes doesn't know if it will catch a fruit or not.
Attachments
beatfever v893.love
The sad end of the charming autoplay frenzy
Last edited by Sulunia on Tue Nov 22, 2016 1:13 am, edited 18 times in total.
Don't check my github! It contains thousands of lines of spaghetti code in many different languages cool software!
https://github.com/Sulunia

pgimeno
Party member
Posts: 1629
Joined: Sun Oct 18, 2015 2:58 pm

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

Very nice looking and nice effects.

I downloaded this: http://www.osubeatmaps.com/en/download/406467/ and unzipped it into a *folder* inside Songs/ (NOT unzipped directly into Songs/ which is an important detail that needs emphasizing, since I did that mistake at first). Have you experimented with [wiki]love.filesystem.mount[/wiki]? I'm not sure if it will work as it says it applies to the save file directory.

The difficulty selection screen was a bit counter-intuitive. I didn't get that I was supposed to click twice on the option.

It would be nice if there was a countdown or something when starting a game. It catches you kind of by surprise .

Sulunia
Party member
Posts: 201
Joined: Tue Mar 22, 2016 1:10 pm
Location: SRS, Brazil

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

pgimeno wrote:Very nice looking and nice effects.

I downloaded this: http://www.osubeatmaps.com/en/download/406467/ and unzipped it into a *folder* inside Songs/ (NOT unzipped directly into Songs/ which is an important detail that needs emphasizing, since I did that mistake at first). Have you experimented with [wiki]love.filesystem.mount[/wiki]? I'm not sure if it will work as it says it applies to the save file directory.

The difficulty selection screen was a bit counter-intuitive. I didn't get that I was supposed to click twice on the option.

It would be nice if there was a countdown or something when starting a game. It catches you kind of by surprise .
Yep. The "start delay" is something that not all beatmaps have. The ones that have it actually tell so in the ".osu" beatmap file, but i still don't parse that. It's no big deal, the functions that parse stuff are actually pretty similar if you take a look.

As for the selection screen itself, yes, that really needs some work. The code is currently quite messy even for me, much more that the splash screen/ingame, but it's far from finished, since there will be score displays and stuff.

The reason why i haven't used filesystem.mount is because i'm not sure i can add stuff to the zipped file, i intend on initially saving the highscores on a file along with the beatmap file. If there is a way to do this, please let me know.

I actually added the screen ratio calculation, so now notes actually fall on the X axis they're supposed to be. No collision yet, probably the next thing i'll add as soon as i figure how to calculate the speed the notes should fall according to the screen resolution.

Also, no options screen yet. Not that there is much to set right now, but it's on the list.

Once i have something up and running, i'll begin a small cleanup of the code, by removing duplicate code and refactoring certain bits (such as the THUNDER MEGAZORD getCurrentSize function that can calculate position, box boundaries and scale of a given object AND draw it if told so)
Don't check my github! It contains thousands of lines of spaghetti code in many different languages cool software!
https://github.com/Sulunia

Davidobot
Party member
Posts: 1146
Joined: Sat Mar 31, 2012 5:18 am
Location: Game-Dev. Land
Contact:

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

Sulunia wrote: The reason why i haven't used filesystem.mount is because i'm not sure i can add stuff to the zipped file, i intend on initially saving the highscores on a file along with the beatmap file. If there is a way to do this, please let me know.
There is no way of saving to a zip file, but you can easily read from it. I would recommend saving the highscore along-side the zip file, not in it.
Sulunia wrote: I actually added the screen ratio calculation, so now notes actually fall on the X axis they're supposed to be. No collision yet, probably the next thing i'll add as soon as i figure how to calculate the speed the notes should fall according to the screen resolution.
This should be pretty easy:

Code: Select all

speed = (newScreenHeight / oldScreenHeight) * speedAtOldScreenHeight

If you got the speed right already, you can set your present resolution as oldScreenHeight and the current speed as speedAtOldScreenHeight and get the new speed.
My library:
LovelyMoon

Check out my current project:
Raycaster

Oh hey, I have a website now!

Sulunia
Party member
Posts: 201
Joined: Tue Mar 22, 2016 1:10 pm
Location: SRS, Brazil

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

Davidobot wrote:There is no way of saving to a zip file, but you can easily read from it. I would recommend saving the highscore along-side the zip file, not in it.
That's a possibility.
I'll actually fiddle around with this and see what i can get.
Although, i'm almost positive that this will actually introduce a delay, and i will also have to do a few changes to the beatmap detection routine, but as mentioned, song installation will be simplified.
Davidobot wrote:This should be pretty easy:

Code: Select all

speed = (newScreenHeight / oldScreenHeight) * speedAtOldScreenHeight

If you got the speed right already, you can set your present resolution as oldScreenHeight and the current speed as speedAtOldScreenHeight and get the new speed.
Speed will be fixed at first while i code the collisions, effects and such. Then i'll start worrying about the speed variations, since it changes according to difficulty values in the osu file.
Still, that code there will help me a lot, since i'll be able to keep the speed constant after screen resolution changes. I'll look into incorporating that to my current code. Thanks!
What difficulty parameter affects notes (in osu case, fruits) falling speed and how is a mistery *sigh*.

@edit

I just remembered a weird thing. Updating note positions in the gameUpdate loop for some odd reasons gives me flashing notes/insane stuttering, whilst if i do that in the gameDraw loop such thing does not happen. What could it possibly be?
Don't check my github! It contains thousands of lines of spaghetti code in many different languages cool software!
https://github.com/Sulunia

Nixola
Inner party member
Posts: 1940
Joined: Tue Dec 06, 2011 7:11 pm
Location: Italy

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

About the weird thing: try to get a very simple .love file that shows the issue. If you can, it'll be easy for us to help you; if you can't, you'll probably find the issue yourself
lf = love.filesystem
ls = love.sound
la = love.audio
lp = love.physics
li = love.image
lg = love.graphics

Sulunia
Party member
Posts: 201
Joined: Tue Mar 22, 2016 1:10 pm
Location: SRS, Brazil

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

Nixola wrote:About the weird thing: try to get a very simple .love file that shows the issue. If you can, it'll be easy for us to help you; if you can't, you'll probably find the issue yourself
The ingame code ("game.lua") is not messy, and it's present on the ".love" at the very first post. But i get your point, debugging is not easy when there is a lot of other code around.

Getting a simple .love file will be a lot of trouble, but i might do it as soon as i have a few hours available. Been a bit busy today with classes you see.
Don't check my github! It contains thousands of lines of spaghetti code in many different languages cool software!
https://github.com/Sulunia

Davidobot
Party member
Posts: 1146
Joined: Sat Mar 31, 2012 5:18 am
Location: Game-Dev. Land
Contact:

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

I would recommend using dt to solve the stutter problem. Also, maybe round your values to whole numbers before drawing, using math.int(coord).
My library:
LovelyMoon

Check out my current project:
Raycaster

Oh hey, I have a website now!

NightKawata
Party member
Posts: 290
Joined: Tue Jan 01, 2013 9:18 pm
Location: Cyberspace, Room 6502
Contact:

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

Davidobot wrote:I would recommend using dt to solve the stutter problem. Also, maybe round your values to whole numbers before drawing, using math.int(coord).
math.int is a Lua 5.3 function, I believe? I don't see any points to Lua 5.3 in the topic, so I don't think he'd be able to do that? Unless you're referring to an external library or the sort.
"I view Python for game usage about the same as going fishing with a stick of dynamite. It will do the job but it's big, noisy, you'll probably get soaking wet and you've still got to get the damn fish out of the water." -taylor

Nixola
Inner party member
Posts: 1940
Joined: Tue Dec 06, 2011 7:11 pm
Location: Italy

### Re: [WIP]BeatFever Mania ~ osu! Engine reimplementation

math.floor will do I guess
lf = love.filesystem
ls = love.sound
la = love.audio
lp = love.physics