RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: Light Radius
MessagePublié: 26 Juin 2010, 20:42 
Membre VIP
Membre VIP
Avatar de l’utilisateur

Inscrit le: 14 Avr 2007, 00:00
Messages: 1738
Localisation: ENS Rennes
Niveau RPG Maker: +∞
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 60/60

Créations :

Voir ses créations

J'avais fait ça il y a longtemps, et j'ai un peu remis à jour le système après une demande.

Le script crée des halos là où vous le voulez, comme vous le voulez, et les mets à jour.
Il y a deux types de halos, ceux liés aux events, et sont mis à jour en fonction de la position de l'event, et ceux statiques, qui ne sont plus mis à jour.
Pour des raisons de fluidité, si votre event de bouge pas, préférez un halo statique.
Le héros possède son propre halo.

Code: Tout sélectionner
#====================================================================
# ■  Light_Radius (v2.0)
# By Darkleo
#====================================================================
class Light_Radius
  Opacity_Var = 3 #
  Opacity_Max = 175 # 0..255
  Refresh_Time = 2 #
  Default_Graph = 'test2' # image par default (heros)
  #--------------------------------------------------------------------------
  attr_accessor :bitmap
  #--------------------------------------------------------------------------
  def initialize
    @bitmap_base = Bitmap.new($game_map.width*32, $game_map.height*32) # Lueurs fixes
    @bitmap_base.fill_rect(@bitmap_base.rect, Color.new(255, 255, 255))
    @bitmap = Bitmap.new(640, 480) # Lueurs
    rect = Rect.new($game_map.display_x, $game_map.display_y, 640, 480)
    @bitmap.fill_rect(rect, Color.new(255, 255, 255))
   
    trouer_heros
    trouer_events
  end
  #--------------------------------------------------------------------------
  def update
    return unless $game_variables[Opacity_Var] == 0 or
                Graphics.frame_count%Refresh_Time == 0
    rect = Rect.new($game_map.display_x/4, $game_map.display_y/4, 640, 480)
    @bitmap.blt 0, 0, @bitmap_base, rect
    trouer_events
    trouer_heros
  end
  #--------------------------------------------------------------------------
  def trouer_heros
    ev = $game_player
    return unless ev.lr_active
    lueur ev.screen_x + ev.lr_x, ev.screen_y + ev.lr_y, ev.lr_image, ev.lr_opacity
  end
  #--------------------------------------------------------------------------
  def trouer_events
    for ev in $game_map.events.values
      next unless ev.lr_active
      trouer_event ev
    end
  end
  #--------------------------------------------------------------------------
  def trouer_event ev
    opac = ev.lr_opacity
    lueur ev.screen_x + ev.lr_x, ev.screen_y + ev.lr_y, ev.lr_image, opac
  end
  #--------------------------------------------------------------------------
  def lueur x, y, image, opac = 250
    bitmap = RPG::Cache.picture(image)
    rect = Rect.new(x - bitmap.height/2,
      y - bitmap.width/2, bitmap.rect.height,bitmap.rect.width)
    add_lueur @bitmap, rect, bitmap, opac
  end
  #--------------------------------------------------------------------------
  def lueur_fixe x, y, opac = 250, pict = Default_Graph
    bitmap = RPG::Cache.picture(pict)
    rect = Rect.new(x + $game_map.display_x/4 - bitmap.height/2,
                    y + $game_map.display_y/4 - bitmap.width/2,
                    bitmap.rect.height,
                    bitmap.rect.width)
    add_lueur @bitmap_base, rect, bitmap, opac
    add_lueur @bitmap, rect, bitmap, opac
  end
  #--------------------------------------------------------------------------
  def add_lueur bitmap, rect, pict, opac
    bitmap.stretch_blt rect, pict, pict.rect, opac
  end
  #--------------------------------------------------------------------------
  def dispose
    @bitmap_base.dispose
    @bitmap.dispose
  end
end
#====================================================================

#====================================================================
# ■ Spriteset_Map
#====================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  alias lr_initialize initialize
  def initialize
    @light_radius = Sprite.new
    @light_radius.bitmap = $game_map.light_radius.bitmap
    @light_radius.visible = true
    @light_radius.blend_type = 2
    @light_radius.z = 99
    lr_initialize
  end
  #--------------------------------------------------------------------------
  alias lr_update update
  def update
    lr_update
    @light_radius.opacity = [$game_variables[Light_Radius::Opacity_Var],
                              Light_Radius::Opacity_Max].min
  end
  #--------------------------------------------------------------------------
  alias lr_dispose dispose
  def dispose
    @light_radius.dispose
    lr_dispose
  end
end
#====================================================================

#====================================================================
# ■ Game_Map
#====================================================================
class Game_Map
  attr_accessor :light_radius
  #--------------------------------------------------------------------------
  alias lr_setup setup
  def setup map_id
    lr_setup map_id
    @light_radius = Light_Radius.new
  end
  #--------------------------------------------------------------------------
  alias lr_update update
  def update
    lr_update
    @light_radius.update
  end
end
#====================================================================

#====================================================================
# ■ Game_Character
#====================================================================
class Game_Character
  attr_accessor :lr_active ,:lr_image ,:lr_x ,:lr_y ,:lr_opacity
  #--------------------------------------------------------------------------
  alias lr_initialize initialize
  def initialize
    lr_initialize
    @lr_active = false
    @lr_x = 0
    @lr_y = 0
    @lr_opacity = 255
  end
  #--------------------------------------------------------------------------
  def lr_set image=Light_Radius::Default_Graph, x_plus=@lr_x, y_plus=@lr_y, opacity=@lr_opacity
    @lr_active = true
    @lr_x = x_plus
    @lr_y = y_plus
    @lr_image = image
    @lr_opacity = opacity
    $game_map.light_radius.trouer_event self
  end
  #--------------------------------------------------------------------------
  def lr_dispose
    @lr_active = false
  end
end
#====================================================================


Pour l'utiliser, remplissez à votre guise les ligne en haut du script.
La variable vous permet de contrôler l'opacité du fond sombre.
Si celle-çi indique une valeur supérieure à celle indiquée par la variable Opacity_Max, elle sera ramenée à celle-là.

Après, tout se passe dans les events.
Dans "Set move route" (en français déplacer/modifier ?), ce sont des commandes script :
Code: Tout sélectionner
lr_set image_name, x_plus, y_plus, opacity
lr_dispose

La première commande crée un halo d'event, la seconde l'enlève.
Dans la première, tout les arguments sont facultatifs, les deux "plus" décalent le halo.
S'ils ne sont pas renseignés, ils gardent leur valeur précédente.

Pour savoir si un event à un halo, c'est une condition script :
Code: Tout sélectionner
$game_map.events[@event_id].lr_active

Pour le héros :
Code: Tout sélectionner
$game_player.lr_active


Enfin, pour afficher un halo fixe, c'est un "insérer script"
Code: Tout sélectionner
$game_map.light_radius.lueur_fixe(x, y, opacity, image)

Attention aux retours à la ligne, après une virgule ou une parenthèse ouvrante.
Par exemple,
Code: Tout sélectionner
$game_map.light_radius.lueur_fixe(
rand(640), rand(480))

affiche un halo fixe au hasard sur la carte.

Une image de test :
Image

Remarques de dernières minutes :
  • Si vous ne voyez rien, c'est sans doute que l'opacité du sprite de light_radius est à 0.
    Pensez à modifier la variable choisie :p
  • Le halo du héros n'est pas (plus) automatique, pensez à faire un lr_set sur le héros pour l'activer.
  • Si ça lague un peu, augmentez la valeur de Refresh_Time, les halos seront un peu moins mis à jour

Amusez vous bien :p

_________________
Image
Projets
> ORAGE (Alternative 2D library) (#=> voir sur Github)
> &Co (#=> http://darkleo.alwaysdata.net/)


Dernière édition par darkleo le 05 Juil 2010, 12:06, édité 5 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Light Radius
MessagePublié: 27 Juin 2010, 10:36 
Artisan (Nv 1)
Avatar de l’utilisateur

Inscrit le: 30 Mar 2010, 17:54
Messages: 102
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RPG Maker XP
Point(s) Fort(s): Event et Mapping
Sexe: Masculin
Points d'aide: 11/60

Créations :

- [Tileset]Faire des tilesets de plateforme avec les RTP


Voir ses créations

Mais le halo au tour du héros est automatique?

_________________
Anciennement appelé W-EVOo.
Image

Image
Si un membre vous a aidé, n'hésitez pas à le remercier.


Haut
 Profil  
 
 Sujet du message: Re: Light Radius
MessagePublié: 05 Juil 2010, 12:17 
Membre VIP
Membre VIP
Avatar de l’utilisateur

Inscrit le: 14 Avr 2007, 00:00
Messages: 1738
Localisation: ENS Rennes
Niveau RPG Maker: +∞
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 60/60

Créations :

Voir ses créations

@W-EVOo : C'est corrigé, le halo du héros est désormais géré comme celui des events.
Donc on peut le désactiver, et le gérer au cas par cas.

Si vous avez d'autres remarques, n'hésitez pas :p

EDIT :
le script a été mis à jour, il fonctionne désormais sans problème pour les grandes ou très grandes maps.
Il n'y a (sur mon ordi vétuste) pas de ralentissement pour des maps de 200*200. (sans trop d'event) alors qu'avec la version précedente, il ne supportait pas les maps de 50*50 vides.
Pour les maps immenses (400*400, 500*500) RM craque pour la gestion de grands bitmaps, mais ce sera réglé dans la prochaine version.

L'option brouillard de guerre a été enlevé pour cause d'incompatibilité.
Si vous utilisez ce script, je vous recommande chaudement de changer de version.

_________________
Image
Projets
> ORAGE (Alternative 2D library) (#=> voir sur Github)
> &Co (#=> http://darkleo.alwaysdata.net/)


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728