I have created an accurate, versatile (although incomplete) engine for creating Guitar Hero or Rock Band style games in scratch and, with a little modification, other rhythm games.
Engine Info
It is based on two systems. The first is the List-Storage system, where the project will store notes in lists, one for each colour, which is then read through in sequence by a script, which then broadcasts to other scripts the instruction to create a note if one is stored in that list at the current position.
The second is the Note-Cycling system, which, at present, is set up to handle 5 notes of each colour at a time. This runs by taking the broadcast from the List-Storage system and then sequentially broadcasting to the required note (From a pool of avalible sprites) to move into position and begin its actions.
Current limitations are the lack of star power (or equivalent) and the lack of hold notes. In addition, the 5 note limit per colour may limit you but is easily corrected with a bit of extending the scripts and duplicating sprites. The only way I can think of doing it would be to increase the complexity of inputs on lists.
For those who are interested in modding it in:
0: No note/continue hold
1: Standard note and end hold for that line (If applicable)
2: End current hold (If applicable) and start new hold on this line (Default behavior for all holds)
3: End hold, but do not start any other note
4-6: Star power versions of those
Contributing
So where do you come into this? You can use this engine to easily recreate songs (Or make new songs) from Guitar Hero and Rock Band. To give an overview at its most basic level, it involves putting a string of 1s and 0s into different lists. The main difficulty is the amount of variables that need to be stored.
To give an example, Schools out for summer on medium from GH3 has 920 possible locations for notes (Based on tempo and song length) in each of its 4 tracks, giving a total of 3,680 0's or 1's that need to be put in lists. Obviously most of these end up being 0's, but they all need to be put in for it to work.
The worst song for this is the infamous Through the Fire and Flames on expert from GH3. I estimate that this will require 29,040 inputs.
Useful Links
So, I am going to need help from other people if I ever want this project to have a reasonable number of songs to play. I have set up a gallery at this link: http://scratch.mit.edu/galleries/view/159359The basic engine V0.1 with no song is available here: http://scratch.mit.edu/projects/blaster395/2432628
An example song to take a look at is here: http://scratch.mit.edu/projects/blaster395/2432722
And, for help recreating songs, this site has diagrams that show the location of every note in all songs GH1-3: http://www.scorehero.com/forum/viewforum.php?f=85
Sharing songs
Any song you make, I will add to the collection Please name each completed song with the following format to allow easy browsing.
GHSE [SONGNAME] [INSTRUMENT] [DIFFICULTY] [ENGINE VERSION]
Version Roadmap (Main Branch)
V0.1: Regular notes, score, multiplier, controls, creating songs.
V0.2 (Future): Finalized UI along with dynamic tempo (Playspeed) changing
V0.3 (Future): Hold notes
V0.4 (Future): Star Power
V0.5 (Future): Misc minor features (Such as hammer-ons and pull-offs, Whammy bar)
V1 (Far Future): Full release
Modded versions of the Engine
If you wish, you can remix the engine to add a feature, change the rhythm game it emulates, or change the graphics. If you do so, I will add a link to your remixed version here.
Last edited by blaster395 (2012-03-30 16:40:17)
Offline
I am presently working on creating 'GHSE Schools Out For Summer Guitar Medium V0.1' as the first example song. V0.1 is constantly being reuploaded as I find minor bugs, so it may be best to avoid beginning a song until the first example is done.
Last edited by blaster395 (2012-03-29 19:24:00)
Offline
There appears to be an error where the game does not function in the flash player. Anyone got an idea why this is?
Offline
All bugs (Except that flash bug) with V0.1 have been fixed.
Change list:
Slight lag on full screen corrected
Combo randomly ending despite correct note pressed is now fixed.
1 in 5 green notes not appearing is fixed.
Bar indicating when to play notes has been changed to appear UNDER the notes and to have a central light grey line to indicate the 'sweet spot' for best timing.
Offline
While making the first song for GHSE, I noticed that Guitar Hero has frequent, slight tempo changes. This prevents perfect syncing of songs. I still managed to put a decent effort in though, and it sounds reasonably good.
http://scratch.mit.edu/projects/blaster395/2432722
Dynamic tempo changing will be a feature of V0.2
Offline
Just throwing an idea to reduce list length: Maybe not have empty (note-less) spaces at all and instead, specificate the duration of the note in each list item? This way, School's Out would have 441+ list items and TTFAF, uh, 3,722+ (still, much less than 29,040! That's just insane for Scratch).
Each "note" list item would look kinda like this, in my head: 1;S;0.5. Note number (1-5), type (normal, star power, and possibly even held/held+star power if we get to implement that), duration (in beats).
There would also be "event" list items, that may mark tempo changes, etc. The first item in the list must specify the song's tempo.
Just a note here, I have no idea how your project works since I'm typing this without even having checked it out.
But ideally, it should work kinda like I described. Also, pretty much anything we come up with, as complex as it may be, should work smoothly on the online Flash player in turbo mode. Not so on the program's turbo mode, though.
I've been interested for a loooong time in making in an engine like this, but never got around to it and probably won't be bothered to help too much with this, but I'll still ask: What exactly do you need help with, other than actual song charts?
(and more, long-term ideas: A simple to use "chart editor" project, and perhaps a project to convert Frets on Fire charts to .txt lists to import into Scratch.
)
Offline
The note lists do not work like that. First, each note number has a separate list (so multiple notes can be created at a time). Second, scratch cannot read the variables in the list like that (As fas as I am aware).
Other than making note charts, you can mod the game engine for various things, such as different graphics, implementing features I have not included yet (If you do a good enough job at that I will make it the next main version!) and even converting the engine to emulate different games, such as stepmania.
Offline
blaster395 wrote:
The note lists do not work like that. First, each note number has a separate list (so multiple notes can be created at a time). Second, scratch cannot read the variables in the list like that (As fas as I am aware).
Other than making note charts, you can mod the game engine for various things, such as different graphics, implementing features I have not included yet (If you do a good enough job at that I will make it the next main version!) and even converting the engine to emulate different games, such as stepmania.
In that case, then you could make each list item with 5 characters that may be "0" or "1" plus the type and duration, like so: 01010;S;0.5, making a red/blue chord (using the original GH/RB colors).
And, with the right scripting, you can make Scratch read only certain characters of a list item, like so:
if <(letter (1) of (item (count) of [notes])) = (1)> broadcast [send green note v] endAnd with the join block and a bit of logic work you could make it read a portion of the list item:
set [a v] to (9) //assuming that in the 9th character starts the note duration. We want to retrieve that value. set [note_dur v] to (item (a) of [notes v]) repeat until <(a) = (length of [notes v])> set [note_dur v] to (join (note_dur)(item (a) of [notes v]))Using 01010;S;0.5 as the note list item, this script should give 0.5 as the result.
Offline
Although you would additionally have to take into account that the majority of notes have no duration.
Offline
blaster395 wrote:
Although you would additionally have to take into account that the majority of notes have no duration.
As in, "the majority of notes aren't held notes", or "the majority of notes aren't notes at all"? The "duration" value would be actually the time the game as to wait (in beats) before proceeding to the next note. If you meant the latter, well, the very reason I'm suggesting this is to eliminate notes that aren't notes.
Offline
It gets even more complicated with situations where you have to play other notes WHILE a note is held (Or even start new holds).
Offline