Ejemplo n.º 1
0
def main():
    """Main thread"""

    try:
        opts, args = getopt.getopt(sys.argv[1:], "vdc:p:D:P:m:N:", [
            "verbose", "debug", "config=", "play=", "diff=", "part=", "mode=",
            "nbrplayers="
        ])
    except getopt.GetoptError:
        print usage
        sys.exit(1)

    playing = None
    configFile = None
    debug = False
    difficulty = 0
    part = 0
    mode = 0
    nbrplayers = 1
    for opt, arg in opts:
        if opt in ["--verbose", "-v"]:
            Log.quiet = False
        if opt in ["--debug", "-d"]:
            debug = True
        if opt in ["--config", "-c"]:
            configFile = arg
        if opt in ["--play", "-p"]:
            playing = arg
        if opt in ["--diff", "-D"]:
            difficulty = arg
        if opt in ["--part", "-P"]:
            part = arg
        #evilynux - Multiplayer and mode selection support
        if opt in ["--mode", "-m"]:
            mode = int(arg)
        if opt in ["--nbrplayers", "-N"]:
            nbrplayers = int(arg)

    while True:
        if configFile != None:
            if configFile.lower() == "reset":
                fileName = os.path.join(Resource.getWritableResourcePath(),
                                        Version.appName() + ".ini")
                os.remove(fileName)
                config = Config.load(Version.appName() + ".ini",
                                     setAsDefault=True)
            else:
                config = Config.load(configFile, setAsDefault=True)
        else:
            config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        engine = GameEngine(config)
        engine.cmdPlay = 0

        if playing != None:
            Config.set("game", "selected_library", "songs")
            Config.set("game", "selected_song", playing)
            engine.cmdPlay = 1
            engine.cmdDiff = int(difficulty)
            engine.cmdPart = int(part)
            #evilynux - Multiplayer and mode selection support
            Config.set("game", "players", nbrplayers)
            Config.set("player0", "mode_1p", mode)
            Config.set("player1", "mode_2p", mode)

        if debug == True:
            engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
            engine.debugLayer.debugOut(engine)
            engine.quit()
            break

        encoding = Config.get("game", "encoding")
        if encoding != None:
            reload(sys)
            sys.setdefaultencoding(encoding)
        engine.setStartupLayer(MainMenu(engine))

        try:
            import psyco
            psyco.profile()
        except:
            Log.warn("Unable to enable psyco.")

        try:
            while engine.run():
                pass
        except KeyboardInterrupt:
            pass
        if engine.restartRequested:
            Log.notice("Restarting.")
            engine.audio.close()
            try:
                # Determine whether were running from an exe or not
                if hasattr(sys, "frozen"):
                    if os.name == "nt":
                        os.execl("FretsOnFire.exe", "FretsOnFire.exe",
                                 *sys.argv[1:])
                    elif sys.frozen == "macosx_app":
                        import string
                        import subprocess
                        appname = string.join(
                            string.split(sys.executable, '/')[:-1], '/')
                        appname = appname + "/Frets on Fire"
                        subprocess.Popen( ` appname `, shell=True)
                    else:
                        os.execl("./FretsOnFire", "./FretsOnFire",
                                 *sys.argv[1:])
                else:
                    if os.name == "nt":
                        bin = "c:/python24/python"
                    else:
                        bin = "/usr/bin/python2.4"
                    os.execl(bin, bin, "FretsOnFire.py", *sys.argv[1:])
            except:
                Log.warn("Restart failed.")
                raise
            break
        else:
            break
    engine.quit()
Ejemplo n.º 2
0
def main():
  playing = None
  configFile = None
  fullscreen = None
  resolution = None
  theme = None
  #debug = False
  difficulty = None
  part = None
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--fullscreen", "-f"]:
      fullscreen = arg
    if opt in ["--resolution", "-r"]:
      resolution = arg
    if opt in ["--theme", "-t"]:
      theme = arg
    if opt in ["--song", "-s"]:
      playing = arg
    if opt in ["--part", "-p"]:
      part = arg
    if opt in ["--diff", "-d", "-l"]:
      difficulty = arg      
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-n"]:
      nbrplayers = int(arg)

  # Load the configuration file.
  if configFile is not None:
    if configFile.lower() == "reset":
      fileName = os.path.join(Resource.getWritableResourcePath(), Version.PROGRAM_UNIXSTYLE_NAME + ".ini")
      os.remove(fileName)
      config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
    else:
      config = Config.load(configFile, setAsDefault = True)
  else:
    config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)

  #Lysdestic - Allow support for manipulating fullscreen via CLI
  if fullscreen is not None:
    Config.set("video", "fullscreen", fullscreen)

  #Lysdestic - Change resolution from CLI
  if resolution is not None:
    Config.set("video", "resolution", resolution)

  #Lysdestic - Alter theme from CLI
  if theme is not None:
    Config.set("coffee", "themename", theme)

  engine = GameEngine(config)
  engine.cmdPlay = 0

  # Check for a valid invocation of one-shot mode.
  if playing is not None:
    Log.debug('Validating song directory for one-shot mode.')
    library = Config.get("game","base_library")
    basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
    if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
      Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
      engine.startupMessages.append(_("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode.") % playing)
      playing = None

  # Set up one-shot mode if the invocation is valid for it.
  if playing is not None:
    Log.debug('Entering one-shot mode.')
    Config.set("game", "selected_library", "songs")
    Config.set("game", "selected_song", playing)
    engine.cmdPlay = 1
    if difficulty is not None:
      engine.cmdDiff = int(difficulty)
    if part is not None:
      engine.cmdPart = int(part)
    #evilynux - Multiplayer and mode selection support
    
    if nbrplayers == 1:
      engine.cmdMode = nbrplayers, mode, 0
    
    else:
      engine.cmdMode = nbrplayers, 0, mode

  encoding = Config.get("game", "encoding")
  if encoding is not None:
    #stump: XXX: Everything I have seen indicates that this is a
    # horrible, horrible hack.  Is there another way?  Do we even need this?
    reload(sys)
    sys.setdefaultencoding(encoding)

  # Play the intro video if it is present, we have the capability, and
  # we are not in one-shot mode.
  videoLayer = False
  if videoAvailable and not engine.cmdPlay:
    # TODO: Parameters to add to theme.ini:
    #  - intro_video_file
    #  - intro_video_start_time
    #  - intro_video_end_time
    themename = Config.get("coffee", "themename")
    vidSource = os.path.join(Version.dataPath(), 'themes', themename, \

                             'menu', 'intro.mp4')
    if os.path.isfile(vidSource):
      winWidth, winHeight = engine.view.geometry[2:4]
      songVideoStartTime = 0
      songVideoEndTime = None
      vidPlayer = VideoPlayer(-1, vidSource, (winWidth, winHeight),
                              startTime = songVideoStartTime,
                              endTime = songVideoEndTime)
      if vidPlayer.validFile:
        engine.view.pushLayer(vidPlayer)
        videoLayer = True
        try:
          engine.ticksAtStart = pygame.time.get_ticks()
          while not vidPlayer.finished:
            engine.run()
          engine.view.popLayer(vidPlayer)
          engine.view.pushLayer(MainMenu(engine))
        except KeyboardInterrupt:
          engine.view.popLayer(vidPlayer)
          engine.view.pushLayer(MainMenu(engine))
  if not videoLayer:
    engine.setStartupLayer(MainMenu(engine))

  #stump: make psyco optional
  if Config.get("performance", "use_psyco"):
    try:
      import psyco
      psyco.profile()
    except:
      Log.error("Unable to enable psyco as requested: ")

  # Run the main game loop.
  try:
    engine.ticksAtStart = pygame.time.get_ticks()
    while engine.run():
      pass
  except KeyboardInterrupt:
    Log.notice("Left mainloop due to KeyboardInterrupt.")
    # don't reraise

  # Restart the program if the engine is asking that we do so.
  if engine.restartRequested:
    Log.notice("Restarting.")
    engine.audio.close()
    try:
      # Extra arguments to insert between the executable we call and our
      # command line arguments.
      args = []
      # Figure out what executable to call.
      if hasattr(sys, "frozen"):
        if os.name == "nt":
          # When py2exe'd, sys.executable is the name of the EXE.
          exe = os.path.abspath(unicode(sys.executable, sys.getfilesystemencoding()))
        elif sys.frozen == "macosx_app":
          # When py2app'd, sys.executable is a Python interpreter copied
          # into the same dir where we live.
          exe = os.path.join(os.path.dirname(sys.executable), 'FoFiX')  # FIXME: don't hard-code "FoFiX" here
        else:
          raise RuntimeError, "Don't know how to restart when sys.frozen is %s" % repr(sys.frozen)
      else:
        # When running from source, sys.executable is the Python interpreter
        # being used to run the program.
        exe = sys.executable
        # Pass the optimization level on iif python version >= 2.6.0 as
        # sys.flags has been introduced in 2.6.0.
        if sys.version_info[:3] >= (2,6,0) and sys.flags.optimize > 0:
          args.append('-%s' % ('O' * sys.flags.optimize))
        args.append(sys.argv[0])
      os.execv(exe, [sys.executable] + args + sys.argv[1:])
    except:
      Log.error("Restart failed: ")
      raise

  # evilynux - MainMenu class already calls this - useless?
  engine.quit()
Ejemplo n.º 3
0
def main():
  """Main thread"""

  try:
    opts, args = getopt.getopt(sys.argv[1:], "vdc:p:D:P:m:N:", ["verbose", "debug", "config=", "play=", "diff=", "part=", "mode=", "nbrplayers="])
  except getopt.GetoptError:
    print usage
    sys.exit(1)
    
  playing = None
  configFile = None
  debug = False
  difficulty = 0
  part = 0
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--debug", "-d"]:
      debug = True
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--play", "-p"]:
      playing = arg
    if opt in ["--diff", "-D"]:
      difficulty = arg      
    if opt in ["--part", "-P"]:
      part = arg
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-N"]:
      nbrplayers = int(arg)
      
  while True:
    if configFile != None:
      if configFile.lower() == "reset":
        fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
        os.remove(fileName)
        config = Config.load(Version.appName() + ".ini", setAsDefault = True)
      else:
        config = Config.load(configFile, setAsDefault = True)
    else:
      config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    engine = GameEngine(config)
    engine.cmdPlay = 0
    
    if playing != None:
      Config.set("game", "selected_library", "songs")
      Config.set("game", "selected_song", playing)
      engine.cmdPlay = 1
      engine.cmdDiff = int(difficulty)
      engine.cmdPart = int(part)
      #evilynux - Multiplayer and mode selection support
      Config.set("game", "players", nbrplayers)
      Config.set("player0","mode_1p", mode)
      Config.set("player1","mode_2p", mode)

    if debug == True:
      engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
      engine.debugLayer.debugOut(engine)
      engine.quit()
      break
      
    encoding = Config.get("game", "encoding")
    if encoding != None:
      reload(sys)
      sys.setdefaultencoding(encoding)
    engine.setStartupLayer(MainMenu(engine))

    try:
      import psyco
      psyco.profile()
    except:
      Log.warn("Unable to enable psyco.")

    try:
      while engine.run():
        pass
    except KeyboardInterrupt:
        pass
    if engine.restartRequested:
      Log.notice("Restarting.")
      engine.audio.close()
      try:
        # Determine whether were running from an exe or not
        if hasattr(sys, "frozen"):
          if os.name == "nt":
            os.execl("FretsOnFire.exe", "FretsOnFire.exe", *sys.argv[1:])
          elif sys.frozen == "macosx_app":
            import string
            import subprocess
            appname = string.join(string.split(sys.executable, '/')[:-1], '/')
            appname = appname+"/Frets on Fire"
            subprocess.Popen(`appname`, shell=True)
          else:
            os.execl("./FretsOnFire", "./FretsOnFire", *sys.argv[1:])
        else:
          if os.name == "nt":
            bin = "c:/python24/python"
          else:
            bin = "/usr/bin/python2.4"
          os.execl(bin, bin, "FretsOnFire.py", *sys.argv[1:])
      except:
        Log.warn("Restart failed.")
        raise
      break
    else:
      break
  engine.quit()
Ejemplo n.º 4
0
            mode = int(arg)
        if opt in ["--nbrplayers", "-N"]:
            nbrplayers = int(arg)

    while True:
        if configFile != None:
            if configFile.lower() == "reset":
                fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
                os.remove(fileName)
                config = Config.load(Version.appName() + ".ini", setAsDefault=True)
            else:
                config = Config.load(configFile, setAsDefault=True)
        else:
            config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        engine = GameEngine(config)
        engine.cmdPlay = 0

        if playing != None:
            Config.set("game", "selected_library", "songs")
            Config.set("game", "selected_song", playing)
            engine.cmdPlay = 1
            engine.cmdDiff = int(difficulty)
            engine.cmdPart = int(part)
            # evilynux - Multiplayer and mode selection support
            Config.set("game", "players", nbrplayers)
            Config.set("player0", "mode_1p", mode)
            Config.set("player1", "mode_2p", mode)

        if debug == True:
            engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
            engine.debugLayer.debugOut(engine)
Ejemplo n.º 5
0
def main():
    """Main thread"""

    try:
        opts, args = getopt.getopt(sys.argv[1:], "vdc:f:r:t:s:l:p:m:n:", [
            "verbose", "debug", "config=", "fullscreen=", "resolution=",
            "theme=", "song=", "diff=", "part=", "mode=", "nbrplayers="
        ])
    except getopt.GetoptError:
        print usage
        sys.exit(1)

    playing = None
    configFile = None
    fullscreen = None
    resolution = None
    theme = None
    debug = False
    difficulty = None
    part = None
    mode = 0
    nbrplayers = 1
    for opt, arg in opts:
        if opt in ["--verbose", "-v"]:
            Log.quiet = False
        if opt in ["--debug", "-d"]:
            debug = True
        if opt in ["--config", "-c"]:
            configFile = arg
        if opt in ["--fullscreen", "-f"]:
            fullscreen = arg
        if opt in ["--resolution", "-r"]:
            resolution = arg
        if opt in ["--theme", "-t"]:
            theme = arg
        if opt in ["--song", "-s"]:
            playing = arg
        if opt in ["--diff", "-l"]:
            difficulty = arg
        if opt in ["--part", "-p"]:
            part = arg
        #evilynux - Multiplayer and mode selection support
        if opt in ["--mode", "-m"]:
            mode = int(arg)
        if opt in ["--nbrplayers", "-n"]:
            nbrplayers = int(arg)

    while 1:
        if configFile != None:
            if configFile.lower() == "reset":
                fileName = os.path.join(Resource.getWritableResourcePath(),
                                        Version.appName() + ".ini")
                os.remove(fileName)
                config = Config.load(Version.appName() + ".ini",
                                     setAsDefault=True)
            else:
                config = Config.load(configFile, setAsDefault=True)
        else:
            config = Config.load(Version.appName() + ".ini", setAsDefault=True)

        #Lysdestic - Allow support for manipulating fullscreen via CLI
        if fullscreen != None:
            Config.set("video", "fullscreen", fullscreen)

        #Lysdestic - Change resolution from CLI
        if resolution != None:
            Config.set("video", "resolution", resolution)

        #Lysdestic - Alter theme from CLI
        if theme != None:
            Config.set("coffee", "themename", theme)

        if playing != None:
            library = Config.get("game", "base_library")
            basefolder = os.path.join(Version.dataPath(), library, "songs",
                                      playing)
            if not (os.path.exists(os.path.join(basefolder, "song.ini")) and
                    (os.path.exists(os.path.join(basefolder, "notes.mid"))
                     or os.path.exists(
                         os.path.join(basefolder, "notes-unedited.mid"))) and
                    (os.path.exists(os.path.join(basefolder, "song.ogg")) or
                     os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
                Log.warn(
                    "Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode."
                    % playing)
                playing = None

        engine = GameEngine(config)
        engine.cmdPlay = 0

        if playing != None:
            Config.set("game", "selected_library", "songs")
            Config.set("game", "selected_song", playing)
            engine.cmdPlay = 1
            if difficulty is not None:
                engine.cmdDiff = int(difficulty)
            if part is not None:
                engine.cmdPart = int(part)
            #evilynux - Multiplayer and mode selection support
            Config.set("game", "players", nbrplayers)
            if nbrplayers == 1:
                Config.set("game", "game_mode", mode)
            else:
                Config.set("game", "game_mode", 0)
                Config.set("game", "multiplayer_mode", mode)

        if debug == True:
            engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
            engine.debugLayer.debugOut(engine)
            engine.quit()
            break

        encoding = Config.get("game", "encoding")
        if encoding != None:
            reload(sys)
            sys.setdefaultencoding(encoding)
        engine.setStartupLayer(MainMenu(engine))

        #stump: make psyco optional
        if Config.get("performance", "use_psyco"):
            try:
                import psyco
                psyco.profile()
            except:
                Log.warn("Unable to enable psyco.")

        try:
            engine.ticksAtStart = pygame.time.get_ticks()
            while engine.run():
                pass
        except KeyboardInterrupt:
            pass
        if engine.restartRequested:
            Log.notice("Restarting.")
            engine.audio.close()
            try:
                # Determine whether were running from an exe or not
                if hasattr(sys, "frozen"):
                    if os.name == "nt":
                        os.execl("FoFiX.exe", "FoFiX.exe", *sys.argv[1:])
                    elif sys.frozen == "macosx_app":
                        import string
                        import subprocess
                        appname = string.join(
                            string.split(sys.executable, '/')[:-1], '/')
                        appname = appname + "/FoFiX"
                        subprocess.Popen( ` appname `, shell=True)
                    else:
                        os.execl("./FoFiX", "./FoFiX", *sys.argv[1:])
                else:
                    # stump: sys.executable points to the active python interpreter
                    os.execl(sys.executable, sys.executable, "FoFiX.py",
                             *sys.argv[1:])
            except:
                Log.warn("Restart failed.")
                raise
            break
        else:
            break
    # evilynux - MainMenu class already calls this - useless?
    engine.quit()
Ejemplo n.º 6
0
def main():
  """Main thread"""

  try:
    opts, args = getopt.getopt(sys.argv[1:], "vdc:f:r:t:s:l:p:m:n:", ["verbose", "debug", "config=", "fullscreen=", "resolution=", "theme=", "song=", "diff=", "part=", "mode=", "nbrplayers="])
  except getopt.GetoptError:
    print usage
    sys.exit(1)
    
  playing = None
  configFile = None
  fullscreen = None
  resolution = None
  theme = None
  debug = False
  difficulty = None
  part = None
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--debug", "-d"]:
      debug = True
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--fullscreen", "-f"]:
      fullscreen = arg
    if opt in ["--resolution", "-r"]:
      resolution = arg
    if opt in ["--theme", "-t"]:
      theme = arg
    if opt in ["--song", "-s"]:
      playing = arg
    if opt in ["--diff", "-l"]:
      difficulty = arg      
    if opt in ["--part", "-p"]:
      part = arg
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-n"]:
      nbrplayers = int(arg)
      
  while 1:
    if configFile != None:
      if configFile.lower() == "reset":
        fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
        os.remove(fileName)
        config = Config.load(Version.appName() + ".ini", setAsDefault = True)
      else:
        config = Config.load(configFile, setAsDefault = True)
    else:
      config = Config.load(Version.appName() + ".ini", setAsDefault = True)

    #Lysdestic - Allow support for manipulating fullscreen via CLI
    if fullscreen != None:
      Config.set("video", "fullscreen", fullscreen)

    #Lysdestic - Change resolution from CLI
    if resolution != None:
      Config.set("video", "resolution", resolution)

    #Lysdestic - Alter theme from CLI
    if theme != None:
      Config.set("coffee", "themename", theme)
    
    if playing != None:
      library = Config.get("game","base_library")
      basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
      if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
        Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
        playing = None

    engine = GameEngine(config)
    engine.cmdPlay = 0
    
    if playing != None:
      Config.set("game", "selected_library", "songs")
      Config.set("game", "selected_song", playing)
      engine.cmdPlay = 1
      if difficulty is not None:
        engine.cmdDiff = int(difficulty)
      if part is not None:
        engine.cmdPart = int(part)
      #evilynux - Multiplayer and mode selection support
      Config.set("game", "players", nbrplayers)
      if nbrplayers == 1:
        Config.set("game", "game_mode", mode)
      else:
        Config.set("game", "game_mode", 0)
        Config.set("game", "multiplayer_mode", mode)

    if debug == True:
      engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
      engine.debugLayer.debugOut(engine)
      engine.quit()
      break
      
    encoding = Config.get("game", "encoding")
    if encoding != None:
      reload(sys)
      sys.setdefaultencoding(encoding)
    engine.setStartupLayer(MainMenu(engine))

    #stump: make psyco optional
    if Config.get("performance", "use_psyco"):
      try:
        import psyco
        psyco.profile()
      except:
        Log.warn("Unable to enable psyco.")

    try:
      engine.ticksAtStart = pygame.time.get_ticks()
      while engine.run():
        pass
    except KeyboardInterrupt:
        pass
    if engine.restartRequested:
      Log.notice("Restarting.")
      engine.audio.close()
      try:
        # Determine whether were running from an exe or not
        if hasattr(sys, "frozen"):
          if os.name == "nt":
            os.execl("FoFiX.exe", "FoFiX.exe", *sys.argv[1:])
          elif sys.frozen == "macosx_app":
            import string
            import subprocess
            appname = string.join(string.split(sys.executable, '/')[:-1], '/')
            appname = appname+"/FoFiX"
            subprocess.Popen(`appname`, shell=True)
          else:
            os.execl("./FoFiX", "./FoFiX", *sys.argv[1:])
        else:
          # stump: sys.executable points to the active python interpreter
          os.execl(sys.executable, sys.executable, "FoFiX.py", *sys.argv[1:])
      except:
        Log.warn("Restart failed.")
        raise
      break
    else:
      break
  # evilynux - MainMenu class already calls this - useless?
  engine.quit()
Ejemplo n.º 7
0
def main():
  playing = None
  configFile = None
  fullscreen = None
  resolution = None
  x = None
  y = None
  theme = None
  debug = False
  difficulty = None
  part = None
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--debug", "-d"]:
      debug = True
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--fullscreen", "-f"]:
      fullscreen = arg
    if opt in ["--resolution", "-r"]:
      resolution = arg
    if opt in ["--geometry", "-g"]:
      r = re.match('([0-9]+x\d+)\+?(\d+)?\+?(\d+)?',arg)
      print "geometry tested ",arg
      (resolution,x,y) = r.groups()
      print "found ",resolution," x ",x," y ",y
    if opt in ["--theme", "-t"]:
      theme = arg
    if opt in ["--song", "-s"]:
      playing = arg
    if opt in ["--diff", "-l"]:
      difficulty = arg
    if opt in ["--part", "-p"]:
      part = arg
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-n"]:
      nbrplayers = int(arg)

  # Load the configuration file.
  if configFile is not None:
    if configFile.lower() == "reset":
      fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
      os.remove(fileName)
      config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    else:
      config = Config.load(configFile, setAsDefault = True)
  else:
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)

  #Lysdestic - Allow support for manipulating fullscreen via CLI
  if fullscreen is not None:
    Config.set("video", "fullscreen", fullscreen)

  #Lysdestic - Change resolution from CLI
  if resolution is not None:
    Config.set("video", "resolution", resolution)
  if x is not None:
    Config.set("video", "x", x)
    Config.set("video","fullscreen",False)
  if y is not None:
    Config.set("video", "y", y)
    Config.set("video","fullscreen",False)

  #Lysdestic - Alter theme from CLI
  if theme is not None:
    Config.set("coffee", "themename", theme)

  engine = GameEngine(config)
  engine.cmdPlay = 0

  # Check for a valid invocation of one-shot mode.
  if playing is not None:
    Log.debug('Validating song directory for one-shot mode.')
    library = Config.get("game","base_library")
    basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
    if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
      Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
      engine.startupMessages.append(_("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode.") % playing)
      playing = None

  # Set up one-shot mode if the invocation is valid for it.
  if playing is not None:
    Log.debug('Entering one-shot mode.')
    Config.set("game", "selected_library", "songs")
    Config.set("game", "selected_song", playing)
    engine.cmdPlay = 1
    if difficulty is not None:
      engine.cmdDiff = int(difficulty)
    if part is not None:
      engine.cmdPart = int(part)
    #evilynux - Multiplayer and mode selection support
    Config.set("game", "players", nbrplayers)
    if nbrplayers == 1:
      Config.set("game", "game_mode", mode)
    else:
      Config.set("game", "game_mode", 0)
      Config.set("game", "multiplayer_mode", mode)

  if debug:
    engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
    engine.debugLayer.debugOut(engine)
    engine.quit()
    return

  encoding = Config.get("game", "encoding")
  if encoding is not None:
    #stump: XXX: Everything I have seen indicates that this is a
    # horrible, horrible hack.  Is there another way?  Do we even need this?
    reload(sys)
    sys.setdefaultencoding(encoding)

  engine.setStartupLayer(MainMenu(engine))

  #stump: make psyco optional
  if Config.get("performance", "use_psyco"):
    try:
      import psyco
      psyco.profile()
    except:
      Log.error("Unable to enable psyco as requested: ")

  # Run the main game loop.
  try:
    engine.ticksAtStart = pygame.time.get_ticks()
    while engine.run():
      pass
  except KeyboardInterrupt:
    Log.notice("Left mainloop due to KeyboardInterrupt.")
    # don't reraise

  # Restart the program if the engine is asking that we do so.
  if engine.restartRequested:
    Log.notice("Restarting.")
    engine.audio.close()
    try:
      # Extra arguments to insert between the executable we call and our
      # command line arguments.
      args = []
      # Figure out what executable to call.
      if hasattr(sys, "frozen"):
        if os.name == "nt":
          # When py2exe'd, sys.executable is the name of the EXE.
          exe = os.path.abspath(unicode(sys.executable, sys.getfilesystemencoding()))
        elif sys.frozen == "macosx_app":
          # When py2app'd, sys.executable is a Python interpreter copied
          # into the same dir where we live.
          exe = os.path.join(os.path.dirname(sys.executable), 'FoFiX')  # FIXME: don't hard-code "FoFiX" here
        else:
          raise RuntimeError, "Don't know how to restart when sys.frozen is %s" % repr(sys.frozen)
      else:
        # When running from source, sys.executable is the Python interpreter
        # being used to run the program.
        exe = sys.executable
        # Pass the optimization level on.
        if sys.flags.optimize > 0:
          args.append('-%s' % ('O' * sys.flags.optimize))
        args.append(__file__)
      os.execv(exe, [sys.executable] + args + sys.argv[1:])
    except:
      Log.error("Restart failed: ")
      raise

  # evilynux - MainMenu class already calls this - useless?
  engine.quit()
Ejemplo n.º 8
0
                             setAsDefault=True)

    #Lysdestic - Allow support for manipulating fullscreen via CLI
    if fullscreen is not None:
        Config.set("video", "fullscreen", fullscreen)

    #Lysdestic - Change resolution from CLI
    if resolution is not None:
        Config.set("video", "resolution", resolution)

    #Lysdestic - Alter theme from CLI
    if theme is not None:
        Config.set("coffee", "themename", theme)

    engine = GameEngine(config)
    engine.cmdPlay = 0

    # Check for a valid invocation of one-shot mode.
    if playing is not None:
        Log.debug('Validating song directory for one-shot mode.')
        library = Config.get("setlist", "base_library")
        basefolder = os.path.join(Version.dataPath(), library, "songs",
                                  playing)
        if not (os.path.exists(os.path.join(basefolder, "song.ini")) and
                (os.path.exists(os.path.join(basefolder, "notes.mid"))
                 or os.path.exists(
                     os.path.join(basefolder, "notes-unedited.mid"))) and
                (os.path.exists(os.path.join(basefolder, "song.ogg"))
                 or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
            Log.warn(
                "Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode."
Ejemplo n.º 9
0
def main():
    playing = None
    configFile = None
    fullscreen = None
    resolution = None
    theme = None
    debug = False
    difficulty = None
    part = None
    mode = 0
    nbrplayers = 1
    for opt, arg in opts:
        if opt in ["--verbose", "-v"]:
            Log.quiet = False
        if opt in ["--config", "-c"]:
            configFile = arg
        if opt in ["--fullscreen", "-f"]:
            fullscreen = arg
        if opt in ["--resolution", "-r"]:
            resolution = arg
        if opt in ["--theme", "-t"]:
            theme = arg
        if opt in ["--song", "-s"]:
            playing = arg
        if opt in ["--part", "-p"]:
            part = arg
        if opt in ["--diff", "-d", "-l"]:
            difficulty = arg
        #evilynux - Multiplayer and mode selection support
        if opt in ["--mode", "-m"]:
            mode = int(arg)
        if opt in ["--nbrplayers", "-n"]:
            nbrplayers = int(arg)

    # Load the configuration file.
    if configFile is not None:
        if configFile.lower() == "reset":
            fileName = os.path.join(Resource.getWritableResourcePath(),
                                    Version.PROGRAM_UNIXSTYLE_NAME + ".ini")
            os.remove(fileName)
            config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                                 setAsDefault=True)
        else:
            config = Config.load(configFile, setAsDefault=True)
    else:
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                             setAsDefault=True)

    #Lysdestic - Allow support for manipulating fullscreen via CLI
    if fullscreen is not None:
        Config.set("video", "fullscreen", fullscreen)

    #Lysdestic - Change resolution from CLI
    if resolution is not None:
        Config.set("video", "resolution", resolution)

    #Lysdestic - Alter theme from CLI
    if theme is not None:
        Config.set("coffee", "themename", theme)

    engine = GameEngine(config)
    engine.cmdPlay = 0

    # Check for a valid invocation of one-shot mode.
    if playing is not None:
        Log.debug('Validating song directory for one-shot mode.')
        library = Config.get("game", "base_library")
        basefolder = os.path.join(Version.dataPath(), library, "songs",
                                  playing)
        if not (os.path.exists(os.path.join(basefolder, "song.ini")) and
                (os.path.exists(os.path.join(basefolder, "notes.mid"))
                 or os.path.exists(
                     os.path.join(basefolder, "notes-unedited.mid"))) and
                (os.path.exists(os.path.join(basefolder, "song.ogg"))
                 or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
            Log.warn(
                "Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode."
                % playing)
            engine.startupMessages.append(
                _("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode."
                  ) % playing)
            playing = None

    # Set up one-shot mode if the invocation is valid for it.
    if playing is not None:
        Log.debug('Entering one-shot mode.')
        Config.set("game", "selected_library", "songs")
        Config.set("game", "selected_song", playing)
        engine.cmdPlay = 1
        if difficulty is not None:
            engine.cmdDiff = int(difficulty)
        if part is not None:
            engine.cmdPart = int(part)
        #evilynux - Multiplayer and mode selection support
        Config.set("game", "players", nbrplayers)
        if nbrplayers == 1:
            Config.set("game", "game_mode", mode)
        else:
            Config.set("game", "game_mode", 0)
            Config.set("game", "multiplayer_mode", mode)

    encoding = Config.get("game", "encoding")
    if encoding is not None:
        #stump: XXX: Everything I have seen indicates that this is a
        # horrible, horrible hack.  Is there another way?  Do we even need this?
        reload(sys)
        sys.setdefaultencoding(encoding)

    # Play the intro video if it is present, we have the capability, and
    # we are not in one-shot mode.
    videoLayer = False
    if videoAvailable and not engine.cmdPlay:
        # TODO: Parameters to add to theme.ini:
        #  - intro_video_file
        #  - intro_video_start_time
        #  - intro_video_end_time
        themename = Config.get("coffee", "themename")
        vidSource = os.path.join(Version.dataPath(), 'themes', themename, \
                                 'menu', 'intro.avi')
        if os.path.isfile(vidSource):
            winWidth, winHeight = engine.view.geometry[2:4]
            songVideoStartTime = 0
            songVideoEndTime = None
            vidPlayer = VideoPlayer(-1,
                                    vidSource, (winWidth, winHeight),
                                    startTime=songVideoStartTime,
                                    endTime=songVideoEndTime)
            if vidPlayer.validFile:
                engine.view.pushLayer(vidPlayer)
                videoLayer = True
                try:
                    engine.ticksAtStart = pygame.time.get_ticks()
                    while not vidPlayer.finished:
                        engine.run()
                    engine.view.popLayer(vidPlayer)
                    engine.view.pushLayer(MainMenu(engine))
                except KeyboardInterrupt:
                    engine.view.popLayer(vidPlayer)
                    engine.view.pushLayer(MainMenu(engine))
    if not videoLayer:
        engine.setStartupLayer(MainMenu(engine))

    #stump: make psyco optional
    if Config.get("performance", "use_psyco"):
        try:
            import psyco
            psyco.profile()
        except:
            Log.error("Unable to enable psyco as requested: ")

    # Run the main game loop.
    try:
        engine.ticksAtStart = pygame.time.get_ticks()
        while engine.run():
            pass
    except KeyboardInterrupt:
        Log.notice("Left mainloop due to KeyboardInterrupt.")
        # don't reraise

    # Restart the program if the engine is asking that we do so.
    if engine.restartRequested:
        Log.notice("Restarting.")
        engine.audio.close()
        try:
            # Extra arguments to insert between the executable we call and our
            # command line arguments.
            args = []
            # Figure out what executable to call.
            if hasattr(sys, "frozen"):
                if os.name == "nt":
                    # When py2exe'd, sys.executable is the name of the EXE.
                    exe = os.path.abspath(
                        unicode(sys.executable, sys.getfilesystemencoding()))
                elif sys.frozen == "macosx_app":
                    # When py2app'd, sys.executable is a Python interpreter copied
                    # into the same dir where we live.
                    exe = os.path.join(
                        os.path.dirname(sys.executable),
                        'FoFiX')  # FIXME: don't hard-code "FoFiX" here
                else:
                    raise RuntimeError, "Don't know how to restart when sys.frozen is %s" % repr(
                        sys.frozen)
            else:
                # When running from source, sys.executable is the Python interpreter
                # being used to run the program.
                exe = sys.executable
                # Pass the optimization level on iif python version >= 2.6.0 as
                # sys.flags has been introduced in 2.6.0.
                if sys.version_info[:3] >= (2, 6,
                                            0) and sys.flags.optimize > 0:
                    args.append('-%s' % ('O' * sys.flags.optimize))
                args.append(__file__)
            os.execv(exe, [sys.executable] + args + sys.argv[1:])
        except:
            Log.error("Restart failed: ")
            raise

    # evilynux - MainMenu class already calls this - useless?
    engine.quit()