Frets On Fire X’s documentation!¶

FoFiX is a highly customizable rhythm game supporting many modes of guitar, bass, drum, and vocal gameplay for up to four players. It is the continuation of a long succession of modifications to the original Frets on Fire by Unreal Voodoo.
Quickstart¶
Quickstart¶
Features¶
Frets On Fire¶
- The original game Frets On Fire provides:
- rhythm game similar to Guitar Hero & Rock Band (with guitar, bass, drums)
- open source game
- multi-OS game
- multi language game
- native MIDI instrument input / controller support
- customizable songs (free song formats, MIDI, OGG)
- key settings
- Jurgen bot (computer player, skilled at guitar, bass and drums)
- support uploading scores
- support for solos (guitar, bass and drums)
You can play with your keyboard, or other controllers.
FoFiX¶
- FoFix provides some other features, in addition of FoF ones:
- customizable graphics (themes, necks)
- multiplayer support
- starpower / overdrive (Rock Band term) (x2 multiplier)
- bass groove (x4, x5, x6 multipliers with a bass)
- killswitch (whammy)
- customizable Hammer-on / Pull-off (called ho/po)
- support for seperate song, guitar, bass and drum audio tracks
Installation¶
From sources¶
Get the latest release or sources
- install dependencies:
compile native modules:
python setup.py build_ext --inplace --force
Windows¶
Only 32 bit Python is supported
- Install the following dependencies:
- pyWin32
- win32 dependency pack (to unzip into the
win32
directory)
Unix¶
- Install the following dependencies:
- a C++ compiler
Python
2.7OpenGL
ffmpeg
pkg-config
- python’s developpment headers
- and:
GLU
,GLib
,SDL
,SDL_mixer
,libogg
,libvorbisfile
,libtheora
,libsoundtouch
,libswscale
(part offfmpeg
) development headers.
Quickstart¶
Prepare songs¶
- Songs folder:
data/songs/
. - Tutorials folder:
data/tutorials/
.
- Some tutorials are already included:
- Drum Rolls Practice, by Bluedude426
- Drum Test Song, by Heka
- FoF tutorial, by Jurgen bot
- Some songs are already included:
- Bang Bang, Mystery Man, by Mary Jo feat. Tommi Inkila
- Defy The Machine, by Tommi Inkila
- This Week I’ve Been Mostly Playing Guitar, by Tommi Inkila
To find other songs, go to the wiki forum or frets them.
Prepare themes¶
Themes folder: data/themes
.
- Some themes are already included:
- MegaLight (default)
- MegaLight GH3
- MegaLight V4
- Uberlight
To find other themes, go to the forum or create them.
Start the game¶
To start the game, run the following commmand:
python FoFiX.py
- This will create a fofix folder with some configurations and logs:
- in Windows:
%AppData%\fofix
- in GNU/Linux:
~/.fofix
- in Mac OS X:
~/Library/Preferences
.
- in Windows:
Then, you can choose a mode and fret!
How to play¶
Goal¶
The goal is to get points by hitting notes.
Press and hold the appropriate frets when notes appear and tap the pick button when the notes hit the row of keys at the bottom of the screen. Hold the frets down for long notes.
Keys¶
Thoses keys are default keys for a keyboard (the same as FretsOnFire) and can be changed.
In the game¶
- F1 - F5: rets one to five
- F6 - F10: solo frets one to five
- Enter / Shift right: pick
- Page down: star power
- Page up: whammy
- Alt + Enter: switch to fullscreen (this will restart the game on Windows).
User guide¶
User guide¶
Songs¶
Songs folder: data/songs/.
Song files¶
- A song is a folder which contains multiple files:
- song.ini (config)
- song.ogg
- script.txt (lyrics)
- notes.mid
- acoustic.ogg
- bass.ogg
- crowd.ogg
- drums.ogg
- guitar.ogg
- piano.ogg
- rhythm.ogg
- vocals.ogg
- preview.ogg
- video.ogg (background video)
- label.png
Create a song¶
INI file¶
The file song.ini
is the configuration file for the song. Here is its
contents.
- Header section:
[song]
- Format:
key = value
Key | Value type | FoFiX | Description |
---|---|---|---|
album |
str | ✓ | Album name |
artist |
str | ✓ | Artist who made the song |
background |
str | (Performous) Filename of image to display in the background during gameplay | |
cassettecolor |
hexcolors | ✓ | Color of the cassette tape |
count |
int | ✓ | How many times played |
cover |
str | (Performous) Filename of cover image | |
delay |
int | ✓ | Delays the notes, negative values works as well (in milliseconds) |
diff_band |
Value | ✓ | Set the difficulty for band |
diff_bass |
Value | ✓ | Set the difficulty for bass |
diff_drums |
Value | ✓ | Set the difficulty for drums |
diff_guitar |
Value | ✓ | Set the difficulty for guitar |
frets |
str | ✓ | Name of the maker / converter of the song |
genre |
str | ✓ | Genre of music |
hopofreq |
Value | ✓ | HOPO Frequency setting, requires the user setting “Song HOPO Freq” be set to “Auto” |
icon |
Value | ✓ | Sets icon to use for song title |
loading_phrase |
str | ✓ | Text that is displayed when song is loading |
name |
str | ✓ | Song title |
preview_start_time |
int | (Performous) Preview start time (in milliseconds) | |
scores |
str | ✓ | Generated: encoded highscores |
scores_ext |
str | ✓ | Generated: encoded score info |
tags |
Value | ✓ | Indicates a cover version so that “As Made famous by [artist]” is displayed |
tutorial |
boolean | ✓ | Hide the song in quickplay if it is the tutorial song |
unlock_id |
Tier | ✓ | Career mode: indicates the tier it belongs to |
unlock_require |
Tier | ✓ | Career mode: indicates the tier needed to be finished for the song to be unlocked |
unlock_text |
str | ✓ | Career mode: text that is displayed when the song is locked |
version |
int | ✓ | Version of the song |
video |
str | ✓ | Video filename relative to song folder |
video_end_time |
int | ✓ | Video end time (in milliseconds) |
video_start_time |
int | ✓ | Video start time (in milliseconds) |
year |
int | ✓ | Year in which the song has been published / made |
- Value types:
- boolean: 0 or 1
- hexcolors: hexadecimal number
- int: a number
- str: text
- Tier: the song id
- Value:
icon
values: rb1, rb2, rbdlc, rbtpk, gh1, gh2, gh2dlc, gh3, gh3dlc, gh80s, gha, ghm, ph1, ph2, ph3, ph4, phmtag
value: coverdiff_XXX
values: 0 - 6hopofreq
values: 0 - 5- 0: “Least”
- 1: “Less”
- 2: “Normal”
- 3: “More”
- 4: “Even more”
- 5: “Most”
Compatibility¶
- Thanks to open source formats, FoFiX songs are compatible with many softwares like:
Make your own careers¶
FoFiX supports the career mode: unlock songs only if you success in previous ones!
Songs¶
- For each song you want to put in your career pack, in
song.ini
: - Add the key
unlock_id
- Put the id of the pack for its value (ex:
unlock_id = gh3_1
for the tier 1 of the GH3 pack) - For encore songs of one tier, add the
enc
suffix to the id value (ex:gh3_1enc
) - To order songs, add a number for your song to the id value (ex:
gh3_1.1
) - Add the key
unlock_require
with the id of the song you need to do as a value. If the song does not need to be unlocked, let the value empty - Add the key
unlock_text
to display a text when the song is still locked.
- Add the key
Example:
[song]
...
unlock_id = gh3_2
unlock_required = gh3_1
unlock_text = Finish the 2nd tier of the GH3 pack!
Regroup song folders you want in your career pack in a folder (folder name ex: gh3
).
INI file¶
Make a titles.ini
file in your career pack folder. Here is an example of its content:
- section
[titles]
: - key:
sections
- value: each tear section names, spaced by a space
- example:
sections = tier1 tier2 bonus
- key:
- section
- sections
[tearX]
(one for each section defined before): - key:
name
- value: the displayed name for the tier
- example:
name = 1. My first tear
- key:
unlock_id
- value: the id of the tier (the same you put in
song.ini
) - example:
unlock_id = gh3_1
- key:
- sections
Example:
[titles]
sections = tier1 tier2
[tear1]
name = 1. First tear
unlock_id = gh3_1
[tear2]
name = 2. Second tear
unlock_id = gh3_2
Themes¶
Installation¶
- Extract the new theme
- move the theme’s folder into
data/themes/
.
Settings¶
- Name of the settings file: theme.ini
- Header section: [theme]
- Format: key = value
- Value types:
- int
- float
- hexcolor: hexadecimal number that starts with the # sign and has six digits (colors)
- boolean: True or False
- str
- comma-separated: comma-separated value list
- Fonts values:
- bigFont
- font
- loadingFont
- pauseFont
- scoreFont
- shadowFont
- songFont
- songListFont
- streakFont
- streakFont2
Game setup¶
Key | Value type | Default value | Description |
---|---|---|---|
control_activate_x |
float | 0.645 | X position of the list of available controls |
control_activate_y |
float | 0.18 | Y position of the list of available controls |
control_activate_scale |
float | 0.0018 | Size of the available control text |
control_activate_select_x |
float | 0.5 | X position of the select image on the list of available controls |
control_activate_part_x |
float | 0.41 | X position of the part images shown on the list of available controls |
control_activate_part_size |
float | 22.0 | Width (in rendered pixels) of the part images on the list of available controls |
control_activate_space |
float | 0.045 | Space between each available control |
control_activate_font |
str | font | The available controller font |
control_description_x |
float | 0.5 | X position of the information text |
control_description_y |
float | 0.13 | Y position of the information text |
control_description_scale |
float | 0.002 | Size of the information text |
control_description_font |
str | font | The information text font |
control_check_x |
float | 0.16 | X position of the first confirmed control |
control_check_y |
float | 0.26 | Y position of the first confirmed control |
control_check_text_y |
float | 0.61 | Y position of names of confirmed controls |
control_check_part_mult |
float | 2.8 | Number of times larger than control_activate_part_size confirmed parts should be |
control_check_space |
float | 0.23 | Amount of space between each confirmed controller |
control_check_scale |
float | 0.0018 | Size of names of confirmed controls |
control_check_font |
str | font | Font of names of confirmed controls |
Key | Value type | Default value | Description |
---|---|---|---|
lobby_mode |
int | 0 | Lobby mode |
lobby_font_color |
hexcolor | #FFFFFF | Color of player names |
lobby_select_color |
hexcolor | #FFBF00 | Color of the name of the selected player (if not using a select image |
lobby_disable_color |
hexcolor | #666666 | Color of already-selected player names |
lobby_info_color |
hexcolor | #FFFFFF | Color of the information text about the currently-selected player |
lobby_select_x |
float | 0.9 | X position of the player list |
lobby_select_y |
float | 0.32 | Y position of the player list |
lobby_select_scale |
float | 0.0018 | Size of the player list font |
lobby_select_font |
str | loadingFont | Font of the player list |
lobby_select_space |
float | 0.04 | Space between names in the player list |
lobby_select_length |
int | 5 | Number of items to show at a time in the player list |
lobby_preview_x |
float | 0.3 | X position of the selected player’s preview info |
lobby_preview_y |
float | 0.0 | Y offset of the selected player’s preview info |
lobby_preview_spacing |
float | 0.04 | Space between lines in the selected player’s preview info |
lobby_avatar_x |
float | 0.7 | (Lobby mode 1) X position of the selected player’s avatar |
lobby_avatar_y |
float | 0.75 | (Lobby mode 1) Y position of the selected player’s avatar |
lobby_avatar_scale |
float | 1.0 | (Lobby mode 1) Size of the selected player’s avatar |
lobby_select_image_x |
float | 0.8 | X position of the image behind the selected item, if available |
lobby_select_image_y |
float | 0.355 | Y position of the image behind the selected item, if available |
lobby_title_x |
float | 0.5 | X position of the “Choose Your Character” text / image |
lobby_title_y |
float | 0.24 | Y position of the “Choose Your Character” text / image |
lobby_title_character_x |
float | 0.26 | X position of the “Player #” text |
lobby_title_character_y |
float | 0.24 | Y position of the “Player #” text |
lobby_title_scale |
float | 0.0024 | Size of the title font |
lobby_title_color |
hexcolor | #FFFFFF | Color of the “Choose Your Character” text, if not using an image |
lobby_player_color |
hexcolor | #FFFFFF | Color of the “Player #” text |
lobby_title_font |
str | font | Font of the title text |
lobby_mode
values:- 0: locked avatar
- 1: floating avatar
Key | Value type | Default value | Description |
---|---|---|---|
character_create_font_color |
hexcolor | #FFFFFF | Color of the menu options |
character_create_select_color |
hexcolor | #FFBF00 | Color of the currently-selected menu item |
character_create_help_color |
hexcolor | #FFFFFF | Color of the menu option help information |
character_create_help_y |
float | .73 | Y position of the menu option help information |
character_create_x |
float | 0.25 | X position of menu option names |
character_create_option_x |
float | 0.75 | X position of selectable option values |
character_create_y |
float | 0.15 | Y position of the first menu item |
character_create_scale |
float | .0018 | Size of the text |
character_create_space |
float | .045 | Space between menu items |
avatar_select_text_x |
float | .44 | X position of the “Choose Your Avatar” text |
avatar_select_text_y |
float | .16 | Y position of the “Choose Your Avatar” text |
avatar_select_text_scale |
float | .0027 | Size of the “Choose Your Avatar” text |
avatar_select_font |
str | font | Font used for the “Choose Your Avatar” text |
avatar_select_wheel_y |
float | 0.0 | Y offset of the avatar choice wheel |
avatar_select_avatar_x |
float | .667 | X position of the currently-selected avatar |
avatar_select_avatar_y |
float | .5 | Y position of the currently-selected avatar |
Song selection list / CD list¶
Key | Value type | Default value | Description |
---|---|---|---|
artist_selected_color |
hexcolor | #4080FF | Selected artist color |
artist_text_color |
hexcolor | #4080FF | Artist text color |
career_title_color |
hexcolor | #000000 | Career title color |
library_selected_color |
hexcolor | #FFBF00 | Selected library color |
library_text_color |
hexcolor | #FFFFFF | Library text color |
setlistguidebuttonsposx |
float | .408 | Setlist guide buttons image ‘X’ position |
setlistguidebuttonsposy |
float | .0322 | Setlist guide buttons image ‘Y’ position |
setlistguidebuttonsscalex |
float | .29 | Setlist guide buttons image scaling of ‘X’ size |
setlistguidebuttonsscaley |
float | .308 | Setlist guide buttons image scaling of ‘Y’ size |
setlistpreviewbuttonposx |
float | .5 | Preview buttons X position |
setlistpreviewbuttonposy |
float | .5 | Preview buttons Y position |
setlistpreviewbuttonscalex |
float | .5 | Preview buttons scaling of ‘X’ size |
setlistpreviewbuttonscaley |
float | .5 | Preview buttons scaling of ‘Y’ size |
song_cd_x |
int | 0 | X position of the CD |
song_cdscore_x |
float | .6 | X position of the CD score |
song_list_display |
int | 1 | Sets the songlist view |
song_list_x |
float | .15 | X position of the list |
song_listcd_cd_x |
float | ‘CD’ X position in listcd songlist view | |
song_listcd_cd_y |
float | ‘CD’ Y position in listcd songlist view | |
song_listcd_list_x |
float | ‘LIST’ X position in listcd songlist view | |
song_listcd_score_x |
float | ‘SCORE’ X position in listcd songlist view | |
song_listcd_score_y |
float | ‘SCORE’ Y position in listcd songlist view | |
song_listscore_x |
float | .8 | X position of the list score |
song_name_selected_color |
hexcolor | #FFBF00 | Selected song name color |
song_name_text_color |
hexcolor | #FFFFFF | Text song name color |
song_rb2_artist_color |
hexcolor | Color of the Rock Band 2 artist name | |
song_rb2_diff_color |
hexcolor | Color of the Rock Band 2 Difficulty level name | |
song_rb2_name_color |
hexcolor | Color of the Rock Band name | |
song_rb2_name_selected_color |
hexcolor | Color of the Rock Band 2 selected name | |
songback |
boolean | True | Scroll the song selection background image. If your image isn’t long enough, use SongChooseBack.png just in case, this image is static |
songlist_score_color |
hexcolor | #FFFFFF | Color of the song list score |
songlistcd_score_color |
hexcolor | Scores color for both CD and List / CD mode |
- Positions should be between 0 and 1
song_cd_x
values: between 0 and 5song_list_display
values:- 0: CD / Cassettes
- 1: list
- 2: list / CD
- 3: RB2
- 4: Auto (should not be used)
Difficulty, intruments, practice select screen¶
Key | Value type | Default value | Description |
---|---|---|---|
song_select_submenu_x |
float | 0 | X position of the submenu text |
song_select_submenu_y |
float | 0 | Y position of the submenu text |
song_select_submenu_offset_lines |
int | 2 | Add offset lines: has no effect if song_select_submenu_x and song_select_submenu_y aren’t used |
song_select_submenu_offset_spaces |
int | 2 | Add offset lines: has no effect if song_select_submenu_x and song_select_submenu_y aren’t used |
Loading phrase screen¶
Key | Value type | Default value | Description |
---|---|---|---|
loading_font_scale |
float | 0.0015 | Loading phrase font scale |
loading_line_spacinge |
float | 1.0 | Amount of line spacing. Default is 1 if not used |
loading_phrase |
str | How good are You? | Put an underscore between each phrase for multiple phrases |
loading_right_margin |
float | 1.0 | X offset from right side of the screen |
loading_text_color |
hexcolor | #FFFFFF | Loading phrase color |
loading_X |
float | .5 | X position of phrase |
loading_Y |
float | .595 | Y position of phrase |
shadowoffsetx |
float | .0022 | X offset to the loading screen font’s shadow |
shadowoffsety |
float | .0005 | Y offset to the loading screen font’s shadow |
In game¶
Key | Value type | Default value | Description |
---|---|---|---|
display_all_grey_stars |
boolean | True | True: all 5 stars shown at all times. False:Ooly shows the grey star your currently working on |
ingame_stats_color |
hexcolor | #000000 | Color for the In Game stats |
song_info_display_scale |
float | 0.0020 | Size of the song info shown at gameplay countdown |
song_info_display_X |
float | 0.05 | X position of song info display during countdown |
song_info_display_Y |
float | 0.05 | Y position of song info display during countdown |
star_fillup_center_x |
int | 139 | X position of the center of the Star Fillup |
star_fillup_center_y |
int | 151 | Y position of the center of the Star Fillup |
star_fillup_in_radius |
int | 121 | Inner radius |
star_fillup_out_radius |
int | 138 | Outer radius |
star_fillup_color |
hexcolor | #FFF25E | Color of the star fill up |
Key | Value type | Default value | Description |
---|---|---|---|
fret0_color |
hexcolor | #22FF22 | Color for the 1st fret tail |
fret1_color |
hexcolor | #FF2222 | Color for the 2nd fret tail |
fret2_color |
hexcolor | #FFFF22 | Color for the 3rd fret tail |
fret3_color |
hexcolor | #3333FF | Color for the 4th fret tail |
fret4_color |
hexcolor | #FF9933 | Color for the 5th fret tail |
fretS_color |
hexcolor | #4CB2E5 | Color for all tails and notes when StarPower is active |
fretK_color |
hexcolor | #000000 | Color for the killswitch tail FX (#000000: FX is disabled) |
hopo_color |
hexcolor | #EEEEEE | Color for HO/PO |
hopo_indicator_active_color |
hexcolor | #0000FF | Active color of HO/PO indicator |
hopo_indicator_inactive_color |
hexcolor | #FF0000 | Inactive color of HO/PO indicator |
hopo_indicator_x |
float | .950 | X position of HOPO indicator |
hopo_indicator_y |
float | .950 | Y position of HOPO indicator |
jurgen_text_pos |
comma-separated float | 1,1,0.0004 | Jurgen text position : scale, X position, Y position |
mesh_color |
hexcolor | #000000 | Color of the mesh |
neck_width |
int | 3 | Width of the fret board |
neck_length |
int | 9 | Length of the fret board to be |
obar_hscale |
float | 0.7 | Overdrive bar width scale |
obar_3dfill |
boolean | False | Use perspective for overdrive_fill.png |
opencolor |
hexcolor | #FF8000 | Color of the Bass drum note for 3d notes |
pov_target_x |
float | 0.0 | Point of view X target |
pov_target_y |
float | 0.0 | Point of view Y target |
pov_target_z |
float | 3.7 | Point of view Z target |
pov_origin_x |
float | 0.0 | Point of view X origin |
pov_origin_y |
float | 2.9 | Point of view Y origin |
pov_origin_z |
float | -2.9 | Point of view Z origin |
rbmenu |
boolean | True | Turns on replicating the buttons scrolling up from the bottom at the game intro for Rock Band theme’s |
rockmeter_score_color |
hexcolor | #93c351 | Color for the rockmeter score |
Rotating 3d Starnotes |
str | on | On / off |
spot_color |
hexcolor | #EEEEEE | Color of the spot |
threeDspin |
boolean | False | Turns 3d Starnote spinning off |
twoDkeys |
boolean | False | Use 2d / 3d keys |
twoDnote |
boolean | False | Use 2d / 3d notes |
noterotdegrees |
int | 2 | Degree to use for rotating the notes (textured 3d notes only) |
noterot1 |
int | -2 | Number of applied rotation degree to the 1st note (textured 3d notes only) |
noterot2 |
int | -1 | Number of applied rotation degree to the 2nd note (textured 3d notes only) |
noterot3 |
int | 0 | Number of applied rotation degree to the 3rd note (textured 3d notes only) |
noterot4 |
int | 1 | Number of applied rotation degree to the 4th note (textured 3d notes only) |
noterot5 |
int | 2 | Number of applied rotation degree to the 5th note (textured 3d notes only) |
Not implemented yet
Key | Value type | Default value | Description |
---|---|---|---|
vocal_meter_size |
float | 45.000 | |
vocal_meter_x |
float | .25 | |
vocal_meter_y |
float | .8 | |
vocal_mult_x |
float | .28 | |
vocal_mult_y |
float | .8 | |
vocal_power_x |
float | .5 | |
vocal_power_y |
float | .5 | |
vocal_fillup_center_x |
int | 139 | |
vocal_fillup_center_y |
int | 151 | |
vocal_fillup_in_radius |
int | 25 | |
vocal_fillup_out_radius |
int | 139 | |
vocal_fillup_color |
hexcolor | #DFDFDE | |
vocal_fillup_factor |
float | 300.000 | |
vocal_circular_fillup |
boolean | True | |
vocal_lane_size |
float | .002 | |
vocal_glow_size |
float | .012 | |
vocal_glow_fade |
float | .6 | |
vocal_lane_color |
hexcolor | #99FF80 | |
vocal_shadow_color |
hexcolor | #CCFFBF | |
vocal_glow_color |
hexcolor | #33FF00 | |
vocal_lane_color_star |
hexcolor | #FFFF80 | |
vocal_shadow_color_star |
hexcolor | #FFFFBF | |
vocal_glow_color_star |
hexcolor | #FFFF00 |
Game result screen¶
Key | Value type | Default value | Description |
---|---|---|---|
crowd_loop_delay |
integer | 550 | User setting for sounds/crowdcheers.ogg |
result_cheats_color |
hexcolor | #FFFFFF | Color of results cheats |
result_cheats_info |
comma-separated float | .5, .3, .002 | X, Y positions and size of results cheats info |
result_cheats_numbers |
comma-separated float | .5, .35, .0015 | X, Y positions and size of results cheats numbers |
result_cheats_percent |
comma-separated float | .45, .4, .0015 | X, Y positions and size of the results cheats percent |
result_cheats_score |
comma-separated float | .75, .4, .0015 | X, Y positions and size of the results cheats score |
result_menu_x |
float | .210 | X position of the ‘final text’ on the results screen |
result_menu_y |
float | .210 | Y position of the ‘final text’ on the results screen |
result_score |
comma-separated float | .5, .11, 0.0025 | X, Y positions of the results score |
result_song |
comma-separated float | .05, .045, .002, #FFFFFF | X, Y positions of the song name |
result_song_text |
str | %s Finished! | %s is for the song name |
result_star |
comma-separated float | .5, .4, 0.15, 1.1 | X, Y positions, scaling of the stars and space between stars |
result_stats_accuracy |
comma-separated float | .5, .61, 0.002, #FFFFFF | X, Y positions of the accuracy % value |
result_stats_accuracy_text |
str | Accuracy: %.1f%% | Accuracy in % |
result_stats_diff |
comma-separated float | .5, .55, 0.002, #FFFFFF | X, Y positions of the difficulty stats |
result_stats_diff_text |
str | Difficulty: %s | Difficulty text |
result_stats_notes |
comma-separated float | .5, .52, 0.002, #FFFFFF | X, Y positions of the notes hit value |
result_stats_notes_text |
str | %s Notes Hit | Number of hits |
result_stats_part |
comma-separated float | .5, .64, 0.002, #FFFFFF | X, Y positions of the results part |
result_stats_part_text |
str | Part: %s | Part of the song |
result_stats_streak |
comma-separated float | .5, .58, 0.002, #FFFFFF | X, Y positions of the streak value |
result_stats_streak_text |
str | Longest Streak: %s | Number of longest streak |
Shaders¶
Definition¶
- A shader is a small program, which affects every vertex and pixel of object. A shader is splitted in 2 parts:
- vertex shader: this one can transform any surface, for example, it can make neck wavy
- pixel (fragment) shader: it can change color of every pixel on the screen
How to create a shader¶
- Folder:
data/shaders/
- Files:
myshader.vert
: vertex shader, C-like codemyshader.frag
: fragment shader, C-like code
Controllers¶
Do you own a Guitar Hero or Rock Band controller for the PS2, PS3, Wii or Xbox 360?
Are you wondering how to get it to work? Then you’re at the right place!
Microsoft Windows¶
PS2¶
Works with any PS2 to USB adapter.
Only the whammy bar could not work: the guitar has no “analog” button.
Wii¶
- Rock Band Wii instruments: work out of the box
- Guitar Hero 3 / World Tour instruments: communicate with the Wiimote
- use a compatible Bluetooth receiver
- install GlovePIE
- connect your Wiimote to your computer via GlovePIE
- connect your Wiimote to your instrument.
GNU / Linux¶
PS2¶
Works with any PS2 to USB adapter.
Wii¶
- Guitar Hero 3 instruments: use CWiid as an interface
- Guitar Hero World Tour: see fixes with CWidd.
Mac OS X¶
Xbox 360¶
Follow the OS X driver guide.
Misc¶
Misc¶
Contributing to FoFiX¶
As an open source project, FoFiX welcomes contributions of many forms.
Bug reporting¶
Please use the issue tracker on GitHub.
Be sure to include all relevant information (traceback, version, reproducing steps, …).
Patches submission¶
Patches are welcome either as pull requests on GitHub. Please avoid duplicated patches, and make small PR.
To avoid duplicated work:
- if there is no issue about your bug, create one
- tell people that you’re working on a patch.
Here are some guidelines:
fork the repo
create a topic branch based on
master
:git checkout -b my-topic-branch master
hack
push your branch:
git push origin my-topic-branch
submit a pull request to
master
.
Then, your pull request (PR) will be reviewed. This could take several days, which is also good for maturity.
After your pull request is merged, do not forget to:
- remove your topic branch
- update your
master
branch with upstream version - celebrate :).
Git Commit Guidelines¶
In order to make commit messages readable, they should follow some rules, based on community standards:
- separate subject from body with a blank line
- limit the subject line to 50 characters
- capitalize the subject line
- do not end the subject line with a period
- use the imperative mood in the subject line
- wrap the body at 72 characters
- use the body to explain what and why vs. how.
This will look like this:
Capitalized, short (50 chars or less) summary
More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body. The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the
two together.
Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug." This convention matches up with commit messages generated
by commands like git merge and git revert.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, preceded by a
single space, with blank lines in between, but conventions vary here
- Use a hanging indent
Fix #1234
Ref #2345
You can test your commit with gitlint before pushing your code.
For more information about those community standards, take a look at:
- Tim Pope’s A Note About Git Commit Messages
- Chris Beams’s summary: How to Write a Git Commit Message
- Pro Git book: Contributing to a Project
- Wikipedia: Atomic commit
- Thoughtbot’s 5 Useful Tips For A Better Commit Message.
Get in touch¶
You can also drop by the #fofix channel on oftc.net (web interface).
Translations¶
Structure¶
Here is the structure of translation directories:
data
│
├── po
│ ├── messages.pot
│ ├── <lang>.po
│ ├── <lang>.po
│ └── …
│
└── translations
├── <lang>.mo
├── <lang>.mo
└── …
data/po/messages.pot
: template for PO filesdata/po/<lang>.po
: PO file which contains strings with their translationsdata/translations/<lang>.mo
: generated MO file from its associated PO file
Manage the POT file¶
To create a new POT file:
find . -type f -name "*.py" | xgettext --sort-output -o data/po/messages.pot -kN_ -k_ -f -
To update an existing POT file:
find . -type f -name "*.py" | xgettext -j --sort-output -o data/po/messages.pot -kN_ -k_ -f -
Add a language¶
To add a language you would like, you have several options.
Open an issue to request it: https://github.com/fofix/fofix/issues/new.
Ask for a new language on Transifex.
Make a pull request with the new PO file:
msginit --input=data/po/messages.pot --locale=<code> --output=data/po/<lang>.po
Translate¶
To translate some strings, you should use our Transifex project. Please, feel free to join us :).
Note
Since there are a lot of strings to translate, it is easier using a web editor than using a local one like Poedit.
Note
Transifex is not the best choice for translations because it’s not open source anymore, but:
- the community is still big
- the interface looks nice.
Other open source web editors could be used later, if Transifex is not great enough for us:
Frequently Asked Questions¶
Star scoring¶
Based on accuracy: 95%+ is 5 stars, no matter if you have a 1x avg multiplier.
Release notes¶
4.0.0 (unreleased)¶
Stages:
- alpha1: 2010-11-27
- alpha2: 2011-09-30
Notes:
- Will break compatibility with FoFiX v3
- Themes:
- added possibility to customize hitflames (location, rotation, whether or not black is auto removed from the images)
- added possibility to customize the POV
- added possibility to customize the fps display location
- added possibility to customize the pause menu text style
- added support for a neck which shows when the multiplier reaches “4x”
- added support for solo sidebars
- added theme settings for control over how the color of tails and flames behave with sp/od
- implemented a separate hitflames animation image for when starpower/overdrive is active
- made all notes be able to be animated
- made almost all images optional (see the Uberlight theme)
- moved tons of images to folders
- removed
editor.png
from themes as its no longer of any use - renamed
backgrounds
folder tostages
- render the main menu to plain text by default if
main_text.png
is not detected - rockmeter: added a new layer grouping system
- rockmeter: added a new layer: circle layer (very handy for star fillup)
- rockmeter: added new effects: scale, fade, animate
- rockmeter: fixed some sliding effect issues
- rockmeter: improved speed
- MLv4: new theme
- ML GH3: recreated the rockmeter with
rockmeter.ini
- Uberlight: cleaned up to be the absolute minimum allowed by the engin.
- Game:
- cleaned up the code to simplify it
- made the solo neck scroll in to the very end of the neck instead of stopping at the frets
- simplified hitflames: any supported hitflame image can now be rendered at the same time
- Other:
- changed default frame limit to 60 FPS
- fixed a rotation bug in image rendering
- fixed menu text, optionsPanel, and BRE/Solo frame scaling issues
- implemented song specific loading screen images
- shared more code between the guitar and drums
- added
CMGL
as a faster OpenGL binding - added the
pypitch
module - rename the option uploadurl_w67_starpower to uploadurl in
fofix.ini
3.121 (2009-12-06)¶
Python version: > 2.6
- Increased performance
- A more precise and helpful error logging system
- Planning to cut support for Python 2.4 soon
3.120 (2009-09-22)¶
Stages:
- beta1: 2009-04-19
- beta2: 2009-06-28
- rc1: 2009-08-27
Over 170 issues were resolved by this latest version!
- Customizable AI difficulty
- Changed the hit window setting: in the “Mods, Cheats, and AI” section of the Settings menu, check your “Note Hit Window”. Most players will want “Normal”
- Simplified 3D rendering
- Added 3 and 4-player modes
- Added detailed options menu text
- Added “Vocals” difficulty
- Added Jurgen vocals
- Added player profiles
- Added controller profiles
- Added support for GH:WT xbox360 guitar solo frets
- Added more themeable settings
- Fixed Neck rendering
- Fixed RB Co-Op saving
- Fixed high scores
- Fixed translations
- Fixed setlist sorting
- Fixed issues related to Animated Hitflames
- Fixed issues related to Big Rock Endings
- Fixed issues related to Cache
- Fixed issues related to Drums
- Fixed issues related to Pratice Mode
- Fixed issues related to Rendering
- Fixed issues appearing when pausing then unpausing the game
- Fixed Scoring issues: note hits, note streaks and accuracy
- Fixed various game crash or freeze (BRE, neck selection, overdrive, etc.)
- Fixed face-off battle note streaks
- Fixed MacOS X paths for configuration files and logs
- Added experimental shaders support: requires a videocard implementing OpenGL >= 2.0 and pyopengl 3.x
- PyOpenGL 2.0.1.x does not support shaders. Shaders support was introduced in 2.0.2.x. Thus, to get shaders under GNU/Linux, you’ll have to use the python2.5 build
3.100 (2009-02-21)¶
Stages:
- beta1: 2009-01-12
- beta2: 2009-01-18
- beta3: 2009-01-25
- beta4: 2009-02-07
- rc1: 2009-02-08
Notes:
- Guitar picks will now repeat for menu and songlist scrolling
- Lyrics will no longer show during the song countdown
- No more double-and-triple song loading cycles
- Very basic Big Rock Ending support
- Drum Fills
- MIDI instrument input support
- Whammy pitch-bending support
- Basic 3D note.dae texturing support
- Songlist metadeta caching
- New tutorial song : a drum roll practice tutorial created by venom426.
3.030 (2008-11-19)¶
Stages:
- beta2: 2008-11-14
- beta1: 2008-11-07
Notes:
- Fixed issue 165
- The View thread timing: should result in major smoothness and stability improvements as well as mostly fixing[?] the double-loading screen issue)
- Removed the pyAmanith dependency
- Lighter the full package
3.025 (2008-10-30)¶
3.021 (2008-10-25)¶
Songlist Optimization
3.020 (2008-10-24)¶
- Fixed game freeze / hang caused by “Accuracy Words Pos” = “Center”
- Used rubjonny’s FoF icon instead of the old style icon
- Fixed issue: where the song time countdown, once it reaches zero, starts counting back from 60 while the music track finishes (if it finishes after the midi, as a lot of songs do)
- Fixed issue: strumming a HOPO before pulling off to another doesn’t work correctly
- Added evilynux’s Timer.py patch that greatly reduces CPU usage in menus and in game
- Added basic score uploading feedback - the game will now tell you if the upload succeeded or failed
- Added logic to display resulting rank for your uploaded top score in the world chart: http://i36.tinypic.com/2cxzqyv.jpg
- Fixed HOPO markings on notes extremely close together, examples are found all over the Hell Freezes Over version of Hotel California
- Replaced all GuitarScene realtime string concatenation (slow) with % formatting (fast) – only during gameplay (initialization concatenation is still present)
- Rewrote both Guitar and Drum starpower marking logic to occur only at initialization, not every time through the renderNotes() functions
- Rewrote starpower marking logic to only mark the actual last note as the starpower “final” instead of the entire last chord (this fixes the double drum starpower rewards)
- Prevented HOPO debug text from being rendered for drum players - Added optional support for theme-based failsound.ogg from worldrave’s GH3 back and failed sounds - Added optional support for random choice between theme-based back1.ogg and back2.ogg instead of just out.ogg
- Wrote logic to stagger-mix crowd cheering sound files in a loop to create an endless cheering effect for the GameResults screen (a la GH2) if crowdcheers.ogg exists in the current theme - New setting under “Audio Options” -> “Results Cheer Loop” (default On) - will mix and endless loop of cheers during game results scoring - New setting under “Audio Options” -> “Cheer Loop Delay” (default 550) - this is the adjustable delay between mixing of a fresh crowd cheer into the loop (careful!)
- Ensured that if crowdcheers.ogg is not found, that starpower.ogg is not mixed twice whenever activating starpower
- Added slashy666’s updated pause.png and editor.png to Rock Band 1 theme
- Added logic to catch a crash/hang when the game attempts to improperly delete a texture
3.017 (2008-10-17)¶
Fail Detection Fix
- Rewrote fail detection logic in GuitarScene.run() function to not be hardcoded for 2 players, to be compatible with future expansion
3.016 (2008-10-16)¶
Stages:
- alpha: 2008-10-16
Notes: Logging & Debugging Enhancements
- Enhanced “error” logfile entries to produce a helpful trace output like that created when running from sources and using an immediate / debug window (no code shown, just classes / functions / line numbers)
- fretsonfire.log file will now be created in the game folder you are running from (will appear in the same place fretsonfire.ini is created)
- Recompiled library.zip and FretsOnFire.exe from sources
- Updated GameEngine.versionstring to the correct value
3.015 (2008-10-15)¶
- Fixed pause layering during song countdown
- Ensured the accuracy indicator from the last note hit is not still displayed after a restart
- Ensured that just letting an entire guitar solo go by without attempting to hit any notes does not result in a 100% perfect solo
- Moved spinning star rotation angle calculation / update from Guitar render() function to run() function
- Added logic to catch when a drum chord (which counts individual notes for streak) skips a “note streak” threshold (like, from 99 to 101) and display the appropriate streak notification
- Added logic to flash the overdrive strings just before You Rock for Rock Band based themes
Licenses¶
Source code¶
License: GPLv2 or (at your option) any later version, see the COPYING
file and notice in source code.
Fonts¶
License: (c) Red Hat, Inc
- Files:
data/*.ttf
data/themes/UberLight/*.ttf
data/themes/MegaLight*/*.ttf
LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTY LIBERATION FONT SOFTWARE
This agreement governs the use of the Software and any updates to the Software, regardless of the delivery mechanism. Subject to the following terms, Red Hat, Inc. (“Red Hat”) grants to the user (“Client”) a license to this work pursuant to the GNU General Public License v.2 with the exceptions set forth below and such other terms as are set forth in this End User License Agreement.
1. The Software and License Exception. LIBERATION font software (the “Software”) consists of TrueType-OpenType formatted font software for rendering LIBERATION typefaces in sans-serif, serif, and monospaced character styles. You are licensed to use, modify, copy, and distribute the Software pursuant to the GNU General Public License v.2 with the following exceptions:
(a) As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
(b) As a further exception, any distribution of the object code of the Software in a physical product must provide you the right to access and modify the source code for the Software and to reinstall that modified version of the Software in object code form on the same physical product on which you received it.
2. Intellectual Property Rights. The Software and each of its components, including the source code, documentation, appearance, structure and organization are owned by Red Hat and others and are protected under copyright and other laws. Title to the Software and any component, or to any copy, modification, or merged portion shall remain with the aforementioned, subject to the applicable license. The “LIBERATION” trademark is a trademark of Red Hat, Inc. in the U.S. and other countries. This agreement does not permit Client to distribute modified versions of the Software using Red Hat’s trademarks. If Client makes a redistribution of a modified version of the Software, then Client must modify the files names to remove any reference to the Red Hat trademarks and must not use the Red Hat trademarks in any way to reference or promote the modified Software.
3. Limited Warranty. To the maximum extent permitted under applicable law, the Software is provided and licensed “as is” without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat does not warrant that the functions contained in the Software will meet Client’s requirements or that the operation of the Software will be entirely error free or appear precisely as described in the accompanying documentation.
4. Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Red Hat or any Red Hat authorized dealer will not be liable to Client for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Software, even if Red Hat or such dealer has been advised of the possibility of such damages.
5. General. If any provision of this agreement is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of North Carolina and of the United States, without regard to any conflict of laws provisions, except that the United Nations Convention on the International Sale of Goods shall not apply.
Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc.