Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Antilag del tito Orochii

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Antilag del tito Orochii

Mensaje por orochii el 2018-02-21, 00:06

Antilag del tito Orochii

Autor: no lo imaginas
Versión: 0.71.accwf 2018.02.20.17.53 RC42, para RGSS1 (probado en RGSS102J.dll)


Introducción

Alguien dijo "blablabla antilag", busqué en el foro si había puesto esto ya y aparentemente no. Así que ahí va. De hecho recuerdo haber posteado al menos una parte de este script pero whatever.
Tengo dos versiones, una es compatible con el tal SDK, otra funciona tal cual. Funcionan distinto, pero bueh.

¿Qué hacen? Lo mismo. Quitar lag, haciendo que ciertos eventos no se actualicen si están fuera del área visible. Eso sí, los eventos en proceso paralelo y automáticos se siguen actualizando. También puedes poner en un comentario "ALWAYS_UPDATE" (sin las comillas) para forzar al evento a actualizarse aún si se encuentra fuera del área visible.

BTW, es posible que no quite lag y más bien ponga because I'm the worst at getting rid of lag :^D!

Versión independiente

Esta no necesita SDK ni ninguna tontería, pero es un poco más salvaje (?) y podría explotar más xD.
Código:

class Sprite
  alias ozantilag_update update unless $@
  def update
    return if in_range
    ozantilag_update
  end
  
  def in_range
    sx = self.src_rect.width; cx = self.x - self.ox
    sy = self.src_rect.height; cy = self.y - self.oy
    return false if (cx < (-16 - sx ))||(cx > 656)
    return false if (cy < (-16 - sy ))||(cy > 496)
    return true
  end
end

class Game_Character
  alias ozantilag_update update unless $@
  def is_in_range
    if (@tile_id != nil) && (@tile_id >= 384)
      sx = sy = 32
    else
      sx= RPG::Cache.character(@character_name,@character_hue).width / 4
      sy= RPG::Cache.character(@character_name,@character_hue).height / 4
    end
    cx= self.screen_x - (sx/2)
    cy= self.screen_y - (sy)
    return false if (cx < (-16 - sx ))||(cx > 656)
    return false if (cy < (-16 - sy ))||(cy > 496)
    return true
  end
  
  def in_range
    return true if override_range?
    return (@trigger==3) || (@trigger==4) || is_in_range
  end
  
  def update
    return unless in_range
    ozantilag_update
  end
  def override_range?
    false
  end
end

class Game_Event < Game_Character
  def override_range?
    if @ovrrd_rng==nil
      return if @page==nil
      c = @page.list[0].code
      p = @page.list[0].parameters[0]
      @ovrrd_rng = (c==108)&&(p=="ALWAYS_UPDATE")
    end
    @ovrrd_rng
  end
end

Versión SDK

Este usa algunos nombres de métodos que por defecto no existen en los scripts default del RMXP. Necesita una pequeña reescritura del Game_Map#update y el Spriteset_Map#update para que usen estos métodos. Es un poco más hecho a la vieja usanza, así que debería tener menos probabilidades de explotar (??).
Código:

class Sprite
  def in_range
    sx= self.src_rect.width; cx= self.x - self.ox
    sy= self.src_rect.height; cy= self.y - self.oy
    return false if (cx < (-16 - sx )) || (cx > 656)
    return false if (cy < (-16 - sy )) || (cy > 496)
    return true
  end
end

class Game_Character
  def is_in_range
    if (@tile_id != nil) && (@tile_id >= 384)
      sx = sy = 32
    else
      sx= RPG::Cache.character(@character_name,@character_hue).width / 4
      sy= RPG::Cache.character(@character_name,@character_hue).height / 4
    end
    cx = self.screen_x - (sx / 2)
    cy = self.screen_y - (sy)
    return false if (cx < (-16 - sx)) || (cx > 656)
    return false if (cy < (-16 - sy)) || (cy > 496)
    return true
  end
  
  def in_range
    return true if override_range?
    return (@trigger==3) || (@trigger==4) || is_in_range
  end
  
  def override_range?
    false
  end
end

class Game_Event < Game_Character
  def override_range?
    if @ovrrd_rng==nil
      return if @page==nil
      c = @page.list[0].code
      p = @page.list[0].parameters[0]
      @ovrrd_rng = (c==108)&&(p=="ALWAYS_UPDATE")
    end
    @ovrrd_rng
  end
end

class Spriteset_Map
  def update_character_sprites
    @character_sprites.each{|sprite|
      next if sprite.disposed?
      sprite.update if (sprite.visible) && (sprite.in_range)
    }
  end
end
class Game_Map
  def update_events
    @events.values.each{|event|
      event.update if event.in_range
    }
  end
end

Licencia

Dominio público.

Salut!
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Antilag del tito Orochii

Mensaje por plergoth el 2018-04-02, 22:44

Buenas, llevo un tiempo usando este script y he descubierto un extraño bug (bueno, en realidad lo descubrí hace un tiempo hasta que he averiguado que era provocado por este script).

El bug aparece cuando se usa algunas animaciones de mapa, con patada, furia y cruz sagrada siempre sucede, el sprite del personaje se queda blanco con patada, rojo con furia y amarillo con cruz sagrada, el color permanece durante un rato y al mover unos segundos el efecto desaparece.

En combate también sucede pero solo donde está colocado el battler en la posición s4 (el de más a la derecha), pero este efecto permanece durante todo el combate, además el efecto se suma con otras habilidades, quedando en tonos azules, verde o incluso trasparente.

No tengo ni idea de scripts así que no sé solucionarlo, si al resto de la gente no le pasa entonces es que hay una incompatibilidad que no sé cual es.

Un saludo.
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.