Frets On Fire X’s documentation!

FoFiX logo

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 a package

Here is a list of some packages available for Unix distributions.

Packaging status
From sources
  • Get the latest release or sources

  • install dependencies:
    • OS specific dependencies:
    • Python dependencies: pip install -r requirements.txt
    • optional dependencies:
      • pyopengl-accelerate: this will make PyOpenGL go a good bit faster
      • pyaudio: this provides support for microphone input, which is required for vocal play
      • gettext: for translations
  • compile native modules:

    python setup.py build_ext --inplace --force
    
Windows

Only 32 bit Python is supported

Install the following dependencies:
Unix
Install the following dependencies:
  • a C++ compiler
  • Python 2.7
  • OpenGL
  • ffmpeg
  • pkg-config
  • python’s developpment headers
  • and: GLU, GLib, SDL, SDL_mixer, libogg, libvorbisfile, libtheora, libsoundtouch, libswscale (part of ffmpeg) 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.

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 menu
  • Arrow keys: change menu selection
  • Enter: validate
  • Escape: cancel.
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
Tools

Some tools will help you creating a song for FoFiX:

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, phm
    • tag value: cover
    • diff_XXX values: 0 - 6
    • hopofreq 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:
  1. Add the key unlock_id
  2. Put the id of the pack for its value (ex: unlock_id = gh3_1 for the tier 1 of the GH3 pack)
  3. For encore songs of one tier, add the enc suffix to the id value (ex: gh3_1enc)
  4. To order songs, add a number for your song to the id value (ex: gh3_1.1)
  5. 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
  6. Add the key unlock_text to display a text when the song is still locked.

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
  • 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

Example:

[titles]
sections = tier1 tier2

[tear1]
name = 1. First tear
unlock_id = gh3_1

[tear2]
name = 2. Second tear
unlock_id = gh3_2

Themes

Additional themes

You can find a list of additional themes for FoFiX on the forum.

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
Controller select screen
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
Player lobby
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
Player creation
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 5
  • song_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
All instruments
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
Guitars and drums
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)
Vocals

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  
Pause menu / Failed menu
Key Value type Default value Description
careerfailtext4 comma-separated float .5, .51, .76, 0 Career Failed menu: X, Y positions, scaling size, line spacing between menu items (used with careerfail.png and careerfailtext4.png images, ‘4’ in the name refers to the number of choices in the failed menu)
careerpausetext5 comma-separated float .5, .51, .76, .74 Career Pause menu: X, Y positions, scaling size, line spacing between menu items (used with careerpause.png and careerpausetext5.png images, ‘5’ in the name refers to the number of items in the pause menu)
failtext3 comma-separated float .5, .51, .76, 0 Failed menu: X, Y positions, scaling size, line spacing between menu items (used with fail.png and failtext3.png images, the ‘3’ in the name refers to the number of choices in the failed menu)
fail_bkg comma-separated float 0.5, 0.5, 1.0, 1.0 X, Y coordinates of failed menu: horizontal and vertical scaling (1.0: fit to screen)
fail_completed_color hexcolor #FFFFFF Color of the Fail / Completed text line
fail_selected_color hexcolor #FFBF00 Color of the Fail / Completed selection
fail_text_x float generated X position of the Fail menu background and text
fail_text_y float .47 Y position of the Fail menu background and text
fail_text_color hexcolor #FFFFFF Color of the Failed screen text
fail_songname_x float .5 X position of fail menu ‘Song Name’ and “% completed”
fail_songname_y float .35 Y position of fail menu ‘Song Name’ and “% completed”
pausetext5 comma-separated float .5, .51, .76, .074 Pause menu: X, Y positions, scaling size, line spacing between menu items (used with pause.png and pausetext10.png images, ‘5’ in the name refers to the number of items in the pause menu)
pause_bkg comma-separated float 0.5, 0.5, 1.0, 1.0 X, Y coordinates of pause menu: horizontal and vertical scaling (1.0: fit to screen)
pause_selected_color hexcolor #FFBF00 Color of the Pause menu’s ‘Selected’
pause_text_color hexcolor #FFFFFF Color of the Pause menu’s ‘Unselected’
pause_text_x float .3 X position of the text in the Pause menu
pause_text_y float .31 Y position of the text in the Pause menu
sub_menu_x float .38 X position of the difficult select screen & instrument select
sub_menu_y float .15 Y position of the difficult select screen & instrument select
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 code
    • myshader.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.

PS3

Works out of the box.

Uses the standard joystick driver that is part of Windows.

Xbox 360

Works out of the box.

Driver included in Windows.

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.

PS3

Works out of the box.

Uses the standard USB HID joystick driver in the Linux kernel.

Xbox 360

Should work out of the box.

If not working, install the Xbox Gamepad Driver.

Wii
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:

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:

Coding style

Since most of the code is written in Python, please, follow the PEP 8.

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 files
  • data/po/<lang>.po: PO file which contains strings with their translations
  • data/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.

  1. Open an issue to request it: https://github.com/fofix/fofix/issues/new.

  2. Ask for a new language on Transifex.

  3. 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:

  • Launchpad
  • Zanata (a project exists already, but is not used)
  • a self-hosted tool (Weblate, Pootle, …).

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 to stages
    • 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.

Indices and tables