f0tz!baerchen’s AntiLag Script 0.71 [RMXP]
Publicado em 9 de novembro de 2015.Este script de AntiLag foi desenvolvido pelo f0tz!baerchen para o RPG Maker XP, baseado no Event AntiLag I do NearFantastica.
Ele pode ajudar o seu jogo no caso de ele ficar lagando em certas partes, seja por excesso de sprites ou eventos etc.
O Script Apresenta
- Event AntiLag: Evento (e suas sprites) que não estão na tela não são atualizados exceto se eles rodam no “Autostart“, por “Parallel Process” ou se eles tem um comentário vazio na primeira linha.
- High Priority: O jogo pode rodar em alta prioridade.
- Smooth Antilag: O Event AntiLag funciona bem apenas se os eventos estão distribuídos por todo o mapa, mas quando existem muitos eventos no mesmo lugar, começa o lag de novo. Se o script percebe que a utilização de CPU fica mais alta do que $antilag.max_cpu_utilization ele vai desacelerar o jogo e reduzir a taxa de frames o tanto que for necessário.
- As configurações podem ser alteradas no próprio jogo e podem ser encontradas no fim do script.
Código
#=============================================================================== # ** AntiLag Script #------------------------------------------------------------------------------- # f0tz!baerchen # 0.71 # 06.01.2007 #------------------------------------------------------------------------------- # Credits: # Chaosg1 (for testing ;) ) # NearFantastica (for the Event AntiLag I used and improved) #------------------------------------------------------------------------------- # Features: # - Event AntiLag: Event (and their Sprites) which are not on the screen are # not updated except they run on "Autostart" or "Parallel Process" or they # have an empty comment in the first line # - High Priority: Game can be run on high priority # - Smooth Antilag: the Event AntiLag does only work fine if the events are # distributed over the whole map, but when there are many events at the same # place it lags again. If the script notices that the CPU utilization # gets higher than $antilag.max_cpu_utilization it will slow down the game and # reduce the framerate as long as needed. #------------------------------------------------------------------------------- # Settings: # can be changed anytime during the game. They are found at the end of the # script. #=============================================================================== #=============================================================================== # Class for Antilag Settings #=============================================================================== class Antilag_Settings attr_accessor :event attr_accessor :max_cpu_utilization attr_accessor :cpu_tolerance #----------------------------------------------------------------------------- # initializes default settings #----------------------------------------------------------------------------- def initialize @event = true @high_priority = true @max_cpu_utilization = 100 @cpu_tolerance = 20 @SetPriorityClass = Win32API.new('kernel32', 'SetPriorityClass', ['p', 'i'], 'i') @GetProcessTimes = Win32API.new('kernel32', 'GetProcessTimes', ['i','p','p','p','p'], 'i') end #----------------------------------------------------------------------------- # turns high priority on/off #----------------------------------------------------------------------------- def high_priority=(value) @high_priority = value if @high_priority @SetPriorityClass.call(-1, 0x00000080) # High Priority else @SetPriorityClass.call(-1, 0x00000020) # Normal Priority end end #----------------------------------------------------------------------------- # returns the current CPU Utilization #----------------------------------------------------------------------------- def get_cpu_utilization # uses API Call to get the Kernel and User Time creation_time = '0' * 10 exit_time = '0' * 10 kernel_time = '0' * 10 user_time = '0' * 10 @GetProcessTimes.call(-1, creation_time, exit_time, kernel_time, user_time) # converts times into integer (in 100ns) kernel_time = kernel_time.unpack('l2') user_time = user_time.unpack('l2') kernel_time = kernel_time[0] + kernel_time[1] user_time = user_time[0] + user_time[1] # takes differences to calculate cpu utilization if @old_time != nil timer_difference = Time.new - @old_timer time_difference = kernel_time + user_time - @old_time result = time_difference / timer_difference / 100000 else result = $antilag.max_cpu_utilization end # saves values (to calculate the differences, s.a.) @old_timer = Time.new @old_time = kernel_time + user_time return result end end $antilag = Antilag_Settings.new #=============================================================================== # Scene_Map class #=============================================================================== class Scene_Map #----------------------------------------------------------------------------- # update method, smooth antilag has been added #----------------------------------------------------------------------------- alias f0tzis_anti_lag_scene_map_update update def update f0tzis_anti_lag_scene_map_update if Graphics.frame_count % 20 == 0 and $antilag.max_cpu_utilization <= 100 # calculates difference between max utilization and current utilization abs = $antilag.max_cpu_utilization - $antilag.get_cpu_utilization # changes Frame Rate if difference is bigger than the tolerance if abs.abs >= $antilag.max_cpu_utilization * $antilag.cpu_tolerance/100.0 Graphics.frame_rate = [[10, Graphics.frame_rate + abs / 2].max, 40].min end end end end #============================================================================== # Game_Event Class #=============================================================================== class Game_Event #----------------------------------------------------------------------------- # for AntiLag, decides, if an event is on the screen or not. #----------------------------------------------------------------------------- def in_range? # returns true if $event_antilag is false or the event is an # Autostart/Parallel Process event or it has an empty # comment in the first line if not $antilag.event or (@trigger == 3 or @trigger == 4 or (@list != nil and @list[0].code == 108 and @list[0].parameters == [''])) return true end screne_x = $game_map.display_x screne_x -= 256 screne_y = $game_map.display_y screne_y -= 256 screne_width = $game_map.display_x screne_width += 2816 screne_height = $game_map.display_y screne_height += 2176 return false if @real_x <= screne_x return false if @real_x >= screne_width return false if @real_y <= screne_y return false if @real_y >= screne_height return true end #----------------------------------------------------------------------------- # update method #----------------------------------------------------------------------------- alias f0tzis_anti_lag_game_event_update update def update return if not self.in_range? f0tzis_anti_lag_game_event_update end end #=============================================================================== # Sprite_Character Class #=============================================================================== class Sprite_Character < RPG::Sprite #----------------------------------------------------------------------------- # update method, parameters added for Loop_Map, rebuild for 8dirs #----------------------------------------------------------------------------- alias f0tzis_anti_lag_sprite_char_update update def update return if @character.is_a?(Game_Event) and not @character.in_range? f0tzis_anti_lag_sprite_char_update end end #=============================================================================== # Settings #=============================================================================== $antilag.max_cpu_utilization = 70 # the maximum CPU utilization, the script # try to stay under this value during changing # changing the frame rate. The lower this # value the higher will be the lag reduction # (and the smoothness, too), a value > 100 # will disable this feature completely $antilag.cpu_tolerance = 20 # this value tells the script how many % of # the CPU utilization change should be ignored # If you change it too a higher value you, # your Frame Rate will be more constant but # smaller lags will be ignored. $antilag.high_priority = true # set this to true if you want the game to run # on high priority $antilag.event = true # set this to true to enable normal anti-lag #=============================================================================== # Interpreter Class #=============================================================================== class Interpreter #----------------------------------------------------------------------------- # * Script #----------------------------------------------------------------------------- def command_355 # Set first line to script script = @list[@index].parameters[0] + "n" # Loop loop do # If next event command is second line of script or after if @list[@index+1].code == 655 # Add second line or after to script script += @list[@index+1].parameters[0] + "n" # If event command is not second line or after else # Abort loop break end # Advance index @index += 1 end # Evaluation result = eval(script) #--------------------------------------------------------------------------- # If return value is false # NEW: the last word of the code mustnt be false! #--------------------------------------------------------------------------- if result == false and script[script.length-6..script.length-2] != 'false' # End return false end # Continue return true end end
Mais RMXP
Informações adicionais
- Categoria: Programação XP
- Tags: Em revisão, RPG Maker XP
- Adicionado por: LichKing
- Acessos: 175
Link deste post:
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!