Partagez
Aller en bas
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Lun 24 Déc 2012 - 9:56
Alors, la simplicité du problème...
J'avais commencé un système, seul, pour tenter de décrypter un peu les merveilles du codage et des boutons et truc-much galipette...
Bref, j'avais commencé à faire passer le temps sur le jeu avec les changements de couleur d'écran en fonction du temps (La nuit fait sombre, le matin fait moins sombre, le jour fait pas sombre... Sombre idiotie d'ailleurs !)

Bref, voici un peu le boulot effectué pour l'évènement commun que j'ai nommé 'Temps' \o/

Spoiler:



Jusque là, vous suivez ?
Bref, avec ceci, il y a la partie évènement commun 'Debug'
(Pour les parties 'Auberge' et 'Lit', histoire que si je joue en plein jour et que, je choisis de dormir 10h, qu'il fasse pas encore plein jour quand je sors mais qu'il fasse nuit, par exemple)

Spoiler:



(PS: Pour les images, vous comprendrez que les secondes images sont les suites direct des premières, j'ai juste la flemme de faire une montage pour avoir les codes des évènements en une seule image)

Bref, avec ceci, j'ai ajouter un évènement bidon (triplé aussi, mais bon) un peu à la con pour voir si ma connerie fonctionne...

Spoiler:



Bref, voila...

MAIS POURTANT !

Malgré le pauvre nombre de frames que j'ai mis pour 'tester' le changement de teinte de l'écran (passage Jour/Nuit, Clair/Sombre) je n'ai absolument AUCUNS Changements...

Donc, si vous pouviez m'aider :3

(Edit: Rectification, c'est pas le nombres de frames qui dérangent, c'est vraiment le changement de teintes !
Car, j'ai mis un système de 'Lit' et 'D'Aubergiste' pour faire défiler le temps, à la Elder Scroll)

EDIT By Alo:

En fin de compte, j'ai étais bête...

J'avais oublier de décocher CECI !

Spoiler:


Nouveau problème...

Alors, le système fonctionne parfaitement bien !

Mais, sachant que quand on rentre dans un bâtiment, on s'attend pas forcément à se retrouver en pleine nuit sous un toit, j'ai mis un évènement bidon qui est:
'évènement commun: 'TeinteNormale'

Qui est donc relié à un évènement commun qui est 'TeinteNormale' qui contient:

'Modifier le ton de l'écran: (0,0,0,0) sur 1 frames, attendre la fin.'

Mais bon... C'est en sortant du bâtiment que cela pose problème...

Sachant qu'il faisait jour dans le bâtiment, dès que je sors, l'évènement commun 'Debug' fait en sorte de mettre la nuit par exemple...

Mais c'est pas instantané !

Il met tout son temps et ça donne l'impression qu'on contrôle le temps du jeu rien qu'avec une porte...

Des idées ? (Vous avez tout les codages précédents si vous voulez \o/, suffit d'ouvrir les spoils \o/)


Dernière édition par Alo Wanijima le Ven 4 Jan 2013 - 13:12, édité 1 fois
avatar
Pharazon
Staffieux retraité

Staffieux retraité
Nombre de messages : 1702
Age : 31
Localisation : Au Pays des Bisounours
Capacités : moyen
Distinction : Super distinction!
[Coco' ]
Date d'inscription : 14/04/2010

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Mar 25 Déc 2012 - 9:22
Est-ce que tu met bien ton changement de teinte en instantané ? en gros, avec 1 frames de transition ?
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Mar 25 Déc 2012 - 10:37
Ben, justement.

J'ai pas envie que ce soit comme ça...

Enfin, je m'explique !

QUand on passe du 'Matin' (donc, en teinte 'rouge' on va dire) pour aller vers le jour (teinte normale), j'aime quand il y a une certaine transition.

Par contre, je veux que ce soit instantané quand je sors d'un bâtiment...

Donc, j'ai tenté de mettre 1 frames sur le côté 'Debug', mais j'ai vus aucuns changements...

Et si je fais le changement en 'Temps', ça risque pas d'être TROP instantané pour les transitions entre les différentes étapes de la journée ? (J'ai pas envie d'avoir la nuit en une fraction de secondes, c'est pas très 'RPG')
avatar
Pharazon
Staffieux retraité

Staffieux retraité
Nombre de messages : 1702
Age : 31
Localisation : Au Pays des Bisounours
Capacités : moyen
Distinction : Super distinction!
[Coco' ]
Date d'inscription : 14/04/2010

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Mar 25 Déc 2012 - 10:51
Je pense qu'il te faudrait un autre event, qui te sert lorsque tu rentre ou sort d'un batiment ou autre, et qui justement t'évite d'avoir besoin des autres event.
tu active un interrupteur "matin" quand c'est le matin, un "jour" quand il est midi, etc...
Et ensuite, tu te fait un event commun qui s'active avec un autre interrupteur ("sortie de batiment" par exemple)

ce qui donnerai ça à peu près :

---Event commun---(process parallèle)---(interrupteur "sortie de batiment")

Condition : si interrupteur "matin"
---> modifier teinte écran : rouge

Condition : si interrupteur "jour"
---> modifier teinte écran : classique

Condition : si interrupteur "soir"
---> modifier teinte écran : bleu

etc...



j'espère que c'est compréhensible et que ça te conviendras.
dis moi si ça marche et si ça te va Wink
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Mar 25 Déc 2012 - 10:56
Je vois ce que tu veux dire, je vais tenté de le reproduire.

Et je ferais un screen du résultat sur le codage.

Thank You

EDIT: Problème...

C'est pas un peu comme ma partie 'Debug' ? Parce que je reproduis exactement la même chose en fait...

Et j'ai mis les teintes du 'Debug' sur 1 frames... Sans changements...
avatar
Nozvez
Philosophe
Philosophe
Nombre de messages : 354
Capacités : bon
Distinction : aucune
Date d'inscription : 16/03/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Ven 4 Jan 2013 - 0:26
Ayant fait le même système et ayant eu le même problème, je te propose la solution que j'ai trouvé et qui est pas si con. Lorsqu'il fait nuit, la teinte est sombre dans les bâtiments. Mais c'est pas bien grave puisque chez nous aussi quand il fait nuit il fait sombre dans nos maisons. J'ai mis des torches (ou autres lumières) dans les bâtiments et ils font de la lumière lorsqu'il fait nuit (et ils sont éteints en journée). Ca permet en plus de jouer sur le temps, genre tu peux avoir un bâtiment plongé dans le noir la nuit, etc.

Voilà un screen exemple :

Spoiler:
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Ven 4 Jan 2013 - 13:12
Ah oui pas bête '-'

Héh bien thank you very much, ça rajoute du boulot mais ça peut être beaucoup plus réaliste ainsi.

avatar
Nozvez
Philosophe
Philosophe
Nombre de messages : 354
Capacités : bon
Distinction : aucune
Date d'inscription : 16/03/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 1:27
Pas tant de boulot que ça. J'utilise des interrupteurs qui s'activent et se désactivent suivant s'il fait jour ou nuit et quand je fais des intérieurs y'a juste à rajouter des lumières qui s'activent si l'interrupteur nuit est activé. Ca prend que quelques secondes par lumière.

Enfin faut faire un script lumières aussi. A moins que tu en aies déjà un je te conseille celui-là, il est très bien et donne de jolis effets :

Spoiler:
Code:
#-------------------------------------------------------------------------------
# * [ACE] Khas Awesome Light Effects
#-------------------------------------------------------------------------------
# * By Khas Arcthunder - arcthunder.site40.net
# * Version: 1.0 EN
# * Released on: 17/01/2012
#
#-------------------------------------------------------------------------------
# * Terms of Use
#-------------------------------------------------------------------------------
# When using any Khas script, you agree with the following terms:
# 1. You must give credit to Khas;
# 2. All Khas scripts are licensed under a Creative Commons license;
# 3. All Khas scripts are for non-commercial projects. If you need some script
#    for your commercial project (I accept requests for this type of project),
#    send an email to nilokruch@live.com with your request;
# 4. All Khas scripts are for personal use, you can use or edit for your own
#    project, but you are not allowed to post any modified version;
# 5. You can’t give credit to yourself for posting any Khas script;
# 6. If you want to share a Khas script, don’t post the direct download link,
#    please redirect the user to arcthunder.site40.net
#
#-------------------------------------------------------------------------------
# * Features
#-------------------------------------------------------------------------------
# - Realistic Light
# - Light does not pass over walls, blocks and roofs
# - Static Light Sources
# - Dynamic Light Sources (like a player's lantern)
# - Multiple effects
# - Easy to use (comments)
#
#-------------------------------------------------------------------------------
# * WARNING - Performance
#-------------------------------------------------------------------------------
# This script may be too heavy to old processors! The Awesome Light Effects was
# tested on a Core 2 Duo E4500 and on a Core i5, without any lag. However,
# there's other factors that may influence the script performance:
#
# 1. Map size
# This script searches surfaces on the map, in order to cut the light pictures.
# In a huge map, the number of surfaces may increase a lot, affecting the
# DYNAMIC LIGHT SOURCE only. Map size does not influence the static sources.
#
# 2. Number of effects
# This script draws the effects on the screen, but before drawing, it checks
# if the effect is out of screen (in this case, the script will skip the
# light drawing). Too much effects may cause lag, but this is just a prevision.
#
# 3. Effect's picture size
# The picture size of the DYNAMIC LIGHT SOURCE influences directly on your
# game's performace. The bigger is the picture, the slower it will be to
# draw it dynamically. The recommended maximum size is 200x200 pixels
#
#-------------------------------------------------------------------------------
# * WARNING - Light pictures
#-------------------------------------------------------------------------------
# In order to run this script correctly, the light pictures MUST obey the
# following conditions:
# 1. The picture's size MUST be multiple of 2. Example: 150x150
# 2. The picture's width MUST be equal to it's height. Example: 156x156
# 3. The picture's colors MUST be inverted! This is necessary because
#    the script inverts the colors to draw the effect. The black color
#    will be transparent!
#
#-------------------------------------------------------------------------------
# * Instructions - 1. Setup your effects!
#-------------------------------------------------------------------------------
# In order to setup your static effects, go to the setup part and define your
# effects inside the Effects hash. Do as the following mode:
#
# X => [picture,opacity,variation,cut],  <= Remember to put a comma here!
#
# Where:
# picture => Picture's name, inside the Graphics/Lights folder;
# opacity => Effect's opacity;
# variation => Effect's opacity variation;
# cut => Put true to cut the effect or false to don't;
# X => The effect's ID, it will be used on events.
#
# Check the default effects to understand how they work.
#
#-------------------------------------------------------------------------------
# * Instructions - 2. Use your effects!
#-------------------------------------------------------------------------------
# In order to use a effect, put the following comment on a event:
#
# [light x]
#
# Where x must be the Effect's ID.
#
#-------------------------------------------------------------------------------
# * Instructions - 3. Use an awesome lantern!
#-------------------------------------------------------------------------------
# The dynamic light source (lantern) is initialized invisible by default.
# You may call the following commands:
#
# l = $game_map.lantern
# Gets the lantern into a variable

# l.set_graphic(i)
# Sets the lantern's graphic to i, where i must be the picture's file name on
# Graphics/Lights folder.
#
# l.set_multiple_graphics(h)
# Sets the lantern's graphics to h, where h must be a hash with the following
# structure:
#
# h = {2=>"ld",4=>"ll",6=>"lr",8=>"lu"}
#
# Where:
# "ld" is the name of the picture when the lantern's owner is looking down;
# "ll" is the name of the picture when the lantern's owner is looking left;
# "lr" is the name of the picture when the lantern's owner is looking right;
# "lu" is the name of the picture when the lantern's owner is looking up.
#
# l.change_owner(char)
# Sets the lantern's owner to char. Char must be ONE of the following commands:
# $game_player          <= The player itself;
# self_event            <= The event where the command was called;
# $game_map.events[x]    <= The event ID x.
#
# l.set_opacity(o,p)
# Sets the lantern's opacity, where:
# o is the opacity itself;
# p is the opacity variation.
#
# l.show
# After setting the lantern with the commands above, you may set it to visible
# using this command.
#
# l.hide
# Use this command to set the lantern as invisible.
#
#-------------------------------------------------------------------------------
# * Instructions - 4. Use the effect's surface!
#-------------------------------------------------------------------------------
# The Awesome Light Effects draws the effects on a surface. In order to make
# the effects visible, the effect's surface MUST be visible. The Effect's
# Surface is initialized with it's opacity set to zero. You can call the
# following commands:
#
# s = $game_map.effect_surface
# Gets the Effect's Surface into a variable
#
# s.set_color(r,g,b)
# Changes the Effect's Surface color instantly, where:
# r => red level;
# g => green level;
# b => blue level;
#
# s.set_alpha(a)
# Changes the Effect's Surface opacity instantly to a.
#
# s.change_color(time,r,g,b)
# Changes the Effect's Surface color ONLY in a certain time, where:
# time => The change's time (frames);
# r => red level;
# g => green level;
# b => blue level;
#
# s.change_color(time,r,g,b,a)
# Changes the Effect's Surface color and it's opacity in a certain time, where:
# time => The change's time (frames);
# r => red level;
# g => green level;
# b => blue level;
# a => opacity
#
# s.change_alpha(time,a)
# Changes the Effect's Surface opacity in a certain time, where:
# time => The change's time (frames);
# a => opacity
#
#-------------------------------------------------------------------------------
# * Instructions - 5. Use the effect's surface with Tone command!
#-------------------------------------------------------------------------------
# You can access the Effect's Surface with the "Screen Tone" command. In order
# to turn this feature on, set the "Surface_UE" constant to true.
#
# If you decided to use this feature, please note some details:
# 1. The colors values must be between 0 and 255;
# 2. The time is in frames;
# 3. The "gray" value will be sent as the opacity value
#
#-------------------------------------------------------------------------------
# * Instructions - 6. Setup your Tileset Tags!
#-------------------------------------------------------------------------------
# In order to cut the effect's picture correctly, there's 3 types of behavior
# for a tile: wall, block and roof. Walls will make shadows as real walls,
# blocks as blocks and roofs as roofs. So, the tileset tags MUST be configured.
# Check the demo to understand how this system works. If the tilesets aren't
# configured correctly, the script won't cut the effects correctly.
#
#-------------------------------------------------------------------------------
# * Setup Part
#-------------------------------------------------------------------------------
module Light_Core
  Effects = { #  <= DON'T change this!
#-------------------------------------------------------------------------------
# PUT YOUR EFFECTS HERE!
#-------------------------------------------------------------------------------
  0 => ["light",255,0,true],
  1 => ["torch",200,20,true],
  2 => ["torch_m",180,30,true],
  3 => ["light_s",255,0,true],
 
#-------------------------------------------------------------------------------
# End of effecs configuration
#-------------------------------------------------------------------------------
  } #  <= DON'T change this!
 
  # Z coordinate of the Effect's Surface
  Surface_Z = 180
 
  # Enable Effect's Surface control by "Screen Tone" command?
  Surface_UE = true
 
  # Roof behavior tag
  Roof_Tag = 5
  # Wall behavior tag
  Wall_Tag = 6
  # Block behavior tag
  Block_Tag = 7
 
  # Don't change this!
  ACC = Math.tan(Math::PI/26)
end
#-------------------------------------------------------------------------------
# Script
#-------------------------------------------------------------------------------
module Cache
  def self.light(filename)
    load_bitmap("Graphics/Lights/", filename)
  end
end
module Light_Bitcore
  include Light_Core
  def self.initialize
    @@buffer = {}
    Effects.values.each { |effect| Light_Bitcore.push(effect[0])}
  end
  def self::[](key)
    return @@buffer[key]
  end
  def self.push(key)
    return if @@buffer.keys.include?(key)
    @@buffer[key] = Cache.light(key)
  end
end
Light_Bitcore.initialize
class Light_SSource
  attr_reader :real_x
  attr_reader :real_y
  attr_reader :range
  attr_accessor :bitmap
  attr_reader :w
  attr_reader :h
  attr_reader :hs
  def initialize(char,bitmap,opacity,plus,hs)
    sync(char)
    @key = bitmap
    @bitmap = Light_Bitcore[@key].clone
    @range = @bitmap.width/2
    @w = @bitmap.width
    @h = @bitmap.height
    @mr = @range - 16
    @opacity = opacity
    @plus = plus
    @hs = hs
    render if @hs
  end
  def render
    tx = x
    ty = y
    tsx = x + @range
    tsy = y + @range
    dr = @range*2
    for s in $game_map.surfaces
      next if !s.visible?(tsx,tsy) || !s.within?(tx,tx+dr,ty,ty+dr)
      s.render_shadow(tx,ty,tsx,tsy,@range,@bitmap)
    end
  end
  def restore
    return unless @bitmap.nil?
    @bitmap = Light_Bitcore[@key].clone
    render if @hs
  end
  def opacity
    @plus == 0 ? @opacity : (@opacity + rand(@plus))
  end
  def sx
    return $game_map.adjust_x(@real_x)*32-@mr
  end
  def sy
    return $game_map.adjust_y(@real_y)*32-@mr
  end
  def sync(char)
    @real_x = char.real_x
    @real_y = char.real_y
  end
  def x
    return (@real_x*32 - @mr).to_f
  end
  def y
    return (@real_y*32 - @mr).to_f
  end
  def dispose
    return if @bitmap.nil?
    @bitmap.dispose
    @bitmap = nil
  end
end
class Light_DSource < Light_SSource
  attr_reader :bitmap
  attr_reader :visible
  def initialize
    @key = nil
    @bitmap = nil
    @opacity = 255
    @plus = 0
    @char = $game_player
    @visible = false
  end
  def set_opacity(o,p)
    @opacity = o
    @plus = p
  end
  def set_graphic(sb)
    dispose
    @key = {2=>sb,4=>sb,6=>sb,8=>sb}
    Light_Bitcore.push(sb)
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
    @range = @bitmap[2].width/2
    @w = @bitmap[2].width
    @h = @bitmap[2].height
    @mr = @range - 16
  end
  def set_multiple_graphics(ba)
    dispose
    @key = ba
    @key.values.each {|key| Light_Bitcore.push(key)}
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
    @range = @bitmap[2].width/2
    @w = @bitmap[2].width
    @h = @bitmap[2].height
    @mr = @range - 16
  end
  def get_graphic
    return @bitmap[@char.direction].clone
  end
  def show
    return if @bitmap.nil?
    @visible = true
  end
  def hide
    @visible = false
  end
  def restore
    return if @key.nil?
    @key.values.each {|key| Light_Bitcore.push(key)}
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
  end
  def dispose
    return if @bitmap.nil?
    @bitmap.values.each { |b| b.dispose }
    @bitmap = nil
  end
  def change_owner(char)
    @char = char
  end
  def render
  end
  def sx
    return $game_map.adjust_x(@char.real_x)*32-@mr
  end
  def sy
    return $game_map.adjust_y(@char.real_y)*32-@mr
  end
  def x
    return (@char.real_x*32 - @mr).to_f
  end
  def y
    return (@char.real_y*32 - @mr).to_f
  end
end
class Light_Surface
  def initialize
    @ta = @a = 0
    @tr = @r = 255
    @tg = @g = 255
    @tb = @b = 255
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def refresh
    return if @timer == 0
    @a += @va
    @r += @vr
    @g += @vg
    @b += @vb
    $game_map.light_surface.opacity = @a
    @timer -= 1
  end
  def change_color(time,r,g,b,a=nil)
    r = 0 if r < 0; r = 255 if r > 255
    g = 0 if g < 0; g = 255 if g > 255
    b = 0 if b < 0; b = 255 if b > 255
    unless a.nil?
      a = 0 if a < 0; a = 255 if a > 255
    end
    @timer = time
    @tr = 255-r
    @tg = 255-g
    @tb = 255-b
    @va = (a.nil? ? 0 : (a-@a).to_f/@timer)
    @vr = (@tr - @r).to_f/@timer
    @vg = (@tg - @g).to_f/@timer
    @vb = (@tb - @b).to_f/@timer
  end
  def change_alpha(time,a)
    a = 0 if a < 0; a = 255 if a > 255
    @timer = time
    @ta = a
    @vr = @vg = @vb = 0.0
    @va = (a-@a).to_f/@timer
  end
  def set_color(r,g,b)
    r = 0 if r < 0; r = 255 if r > 255
    g = 0 if g < 0; g = 255 if g > 255
    b = 0 if b < 0; b = 255 if b > 255
    @tr = @r = 255-r
    @tg = @g = 255-g
    @tb = @b = 255-b
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def set_alpha(a)
    a = 0 if a < 0; a = 255 if a > 255
    @ta = @a = a
    $game_map.light_surface.opacity = @a
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def alpha
    return @a
  end
  def color
    return Color.new(@r,@g,@b)
  end
end
class Game_Map
  include Light_Core
  attr_accessor :light_surface
  attr_accessor :light_sources
  attr_accessor :surfaces
  attr_accessor :effect_surface
  attr_accessor :lantern
  alias kbl_setup_events setup_events
  alias kbl_initialize initialize
  alias kbl_update update
  def initialize
    kbl_initialize
    @effect_surface = Light_Surface.new
    @lantern = Light_DSource.new
  end
  def update(arg)
    @effect_surface.refresh if arg
    kbl_update(arg)
  end
  def first_tag(x,y)
    tag = tileset.flags[tile_id(x,y,0)] >> 12
    return tag > 0 ? tag : 0
  end
  def setup_events
    @light_sources.nil? ? @light_sources = [] : @light_sources.clear
    setup_surfaces
    merge_surfaces
    kbl_setup_events
  end
  def setup_surfaces
    @surfaces = []
    for x in 0..(width-1)
      for y in 0..(height-1)
        tag = first_tag(x,y)
        if tag == Wall_Tag
          i = tile_id(x,y,0)
          if i & 0x02 == 0x02
            @surfaces << Block_SD.new(x*32,y*32,x*32+32,y*32)
          end
          if i & 0x04 == 0x04
            @surfaces << Block_WR.new(x*32+31,y*32,x*32+31,y*32+32)
            @surfaces << Block_IL.new(x*32+32,y*32,x*32+32,y*32+32)
          end
          if i & 0x01 == 0x01
            @surfaces << Block_IR.new(x*32-1,y*32,x*32-1,y*32+32)
            @surfaces << Block_WL.new(x*32,y*32,x*32,y*32+32)
          end
        elsif tag == Roof_Tag
          i = tile_id(x,y,0)
          @surfaces << Block_SU.new(x*32,y*32,x*32+32,y*32) if i & 0x02 == 0x02
          @surfaces << Block_SR.new(x*32+31,y*32,x*32+31,y*32+32) if i & 0x04 == 0x04
          @surfaces << Block_SL.new(x*32,y*32,x*32,y*32+32) if i & 0x01 == 0x01
        elsif tag == Block_Tag
          f = tileset.flags[tile_id(x,y,0)]
          @surfaces << Block_SL.new(x*32,y*32,x*32,y*32+32) if f & 0x02 == 0x02
          @surfaces << Block_SR.new(x*32+31,y*32,x*32+31,y*32+32) if f & 0x04 == 0x04
          @surfaces << Block_SU.new(x*32,y*32,x*32+32,y*32) if f & 0x08 == 0x08
        end
      end
    end
  end
  def merge_surfaces
    new_surfaces = []
    hs = []; vs = []
    ws = []; is = []
    for surface in @surfaces
      if surface.type & 0x05 == 0
        hs << surface
      else
        if surface.type & 0x010 == 0
          vs << surface
        else
          if surface.type & 0x08 == 0
            ws << surface
          else
            is << surface
          end
        end
      end
    end
    for surface in hs
      surface.ready ? next : surface.ready = true
      for s in hs
        next if s.ready || s.y1 != surface.y1 || surface.type != s.type
        if s.x2 == surface.x1
          surface.x1 = s.x1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.x1 == surface.x2
          surface.x2 = s.x2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    hs.each { |s| @surfaces.delete(s) if s.trash}
    for surface in vs
      surface.ready ? next : surface.ready
      for s in vs
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    vs.each { |s| @surfaces.delete(s) if s.trash}
    for surface in ws
      surface.ready ? next : surface.ready
      for s in ws
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    ws.each { |s| @surfaces.delete(s) if s.trash}
    for surface in is
      surface.ready ? next : surface.ready
      for s in is
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    is.each { |s| @surfaces.delete(s) if s.trash}
  end
end
class Game_Event < Game_Character
  alias kbl_initialize initialize
  alias kbl_setup_page setup_page
  def initialize(m,e)
    @light = nil
    kbl_initialize(m,e)
  end
  def setup_page(np)
    kbl_setup_page(np)
    setup_light(np.nil?)
  end
  def setup_light(dispose)
    unless @light.nil?
      $game_map.light_sources.delete(self)
      @light.dispose
      @light = nil
    end
    unless dispose && @list.nil?
      for command in @list
        if command.code == 108 && command.parameters[0].include?("[light")
          command.parameters[0].scan(/\[light ([0.0-9.9]+)\]/)
          effect = Light_Core::Effects[$1.to_i]
          @light = Light_SSource.new(self,effect[0],effect[1],effect[2],effect[3])
          $game_map.light_sources << self
          return
        end
      end
    end
  end
  def draw_light
    sx = @light.sx
    sy = @light.sy
    w = @light.w
    h = @light.h
    return if sx > 544 && sy > 416 && sx + w < 0 && sy + h < 0
    $game_map.light_surface.bitmap.blt(sx,sy,@light.bitmap,Rect.new(0,0,w,h),@light.opacity)
  end
  def dispose_light
    @light.dispose
  end
  def restore_light
    @light.restore
  end
end
if Light_Core::Surface_UE
  class Game_Interpreter
    def command_223
      $game_map.effect_surface.change_color(@params[1],@params[0].red,@params[0].green,@params[0].blue,@params[0].gray)
      wait(@params[1]) if @params[2]
    end
  end
end
class Game_Interpreter
  def self_event
    return $game_map.events[@event_id]
  end
end
class Block_Surface
  include Light_Core
  attr_accessor :x1
  attr_accessor :y1
  attr_accessor :x2
  attr_accessor :y2
  attr_accessor :ready
  attr_accessor :trash
  def initialize(x1,y1,x2,y2)
    @x1 = x1
    @y1 = y1
    @x2 = x2
    @y2 = y2
    @ready = false
    @trash = false
  end
  def within?(min_x,max_x,min_y,max_y)
    return @x2 > min_x && @x1 < max_x && @y2 > min_y && @y1 < max_y
  end
end
class Block_SL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x01
  end
  def visible?(sx,sy)
    return sx < @x1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in @x1..(sx+range)
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_SR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x04
  end
  def visible?(sx,sy)
    return sx > @x1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_IL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x019
  end
  def visible?(sx,sy)
    return sx < @x1 && sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = @y1 - @m1*@x1
    @m2 = (@y2-sy)/(@x2-sx)
    @m2 = 0 if @m2 > 0
    @n2 = @y2 - @m2*@x2
    for x in @x1..(sx+range)
      init = shadow_iy(x).floor
      bitmap.clear_rect(x-phx,init-3-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_IR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x01c
  end
  def visible?(sx,sy)
    return sx > @x1 && sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = @y1 - @m1*@x1
    @m2 = (@y2-sy)/(@x2-sx)
    @m2 = 0 if @m2 < 0
    @n2 = @y2 - @m2*@x2
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x).floor
      bitmap.clear_rect(x-phx,init-3-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_WL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x011
  end
  def visible?(sx,sy)
    return sx < @x1 && sy < @y2
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in @x1..(sx+range)
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+2)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_WR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x014
  end
  def visible?(sx,sy)
    return sx > @x1 && sy < @y2
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+2)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_SU < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x02
  end
  def visible?(sx,sy)
    return sy < @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    if @x1 == sx
      @m1 = nil
    else
      @m1 = (@y1-sy)/(@x1-sx)
      @m1 += ACC if @m1 < -ACC
      @n1 = @y1 - @m1*@x1
    end
    if @x2 == sx
      @m2 = nil
    else
      @m2 = (@y2-sy)/(@x2-sx)
      @n2 = sy - @m2*sx
    end
    for y in @y1..(sy+range)
      init = shadow_ix(y)
      bitmap.clear_rect(init-phx,y-phy,shadow_fx(y)-init+1,1)
    end
  end
  def shadow_ix(y)
    return @m1.nil? ? @x1 : (y-@n1)/@m1
  end
  def shadow_fx(y)
    return @m2.nil? ? @x2 : (y-@n2)/@m2
  end
end
class Block_SD < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x08
  end
  def visible?(sx,sy)
    return sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    if @x1 == sx
      @m1 = nil
    else
      @m1 = (@y1-sy)/(@x1-sx)
      @m1 -= ACC if @m1 > ACC
      @n1 = sy - @m1*sx
    end
    if x2 == sx
      @m2 = nil
    else
      @m2 = (@y2-sy)/(@x2-sx)
      @n2 = sy - @m2*sx
    end
    for y in (sy-range).to_i..@y1
      init = shadow_ix(y)
      bitmap.clear_rect(init-phx,y-phy,shadow_fx(y)-init+1,1)
    end
  end
  def shadow_ix(y)
    return @m1.nil? ? @x1 : (y-@n1)/@m1
  end
  def shadow_fx(y)
    return @m2.nil? ? @x2 : (y-@n2)/@m2
  end
end
class Spriteset_Map
  include Light_Core
  alias kbl_initialize initialize
  alias kbl_update update
  alias kbl_dispose dispose
  def initialize
    setup_lights
    kbl_initialize
  end
  def update
    kbl_update
    update_lights
  end
  def dispose
    kbl_dispose
    dispose_lights
  end
  def dispose_lights
    $game_map.lantern.dispose
    $game_map.light_sources.each { |source| source.dispose_light }
    $game_map.light_surface.bitmap.dispose
    $game_map.light_surface.dispose
    $game_map.light_surface = nil
  end
  def update_lights
    $game_map.light_surface.bitmap.clear
    $game_map.light_surface.bitmap.fill_rect(0,0,544,416,$game_map.effect_surface.color)
    $game_map.light_sources.each { |source| source.draw_light }
    return unless $game_map.lantern.visible
    @btr = $game_map.lantern.get_graphic
    x = $game_map.lantern.x
    y = $game_map.lantern.y
    r = $game_map.lantern.range
    sx = x + r
    sy = y + r
    dr = r*2
    $game_map.surfaces.each { |s| s.render_shadow(x,y,sx,sy,r,@btr) if s.visible?(sx,sy) && s.within?(x,x+dr,y,y+dr) }
    $game_map.light_surface.bitmap.blt($game_map.lantern.sx,$game_map.lantern.sy,@btr,Rect.new(0,0,dr,dr),$game_map.lantern.opacity)
  end
  def setup_lights
    @btr = nil
    $game_map.lantern.restore
    $game_map.light_sources.each { |source| source.restore_light }
    $game_map.light_surface = Sprite.new
    $game_map.light_surface.bitmap = Bitmap.new(544,416)
    $game_map.light_surface.bitmap.fill_rect(0,0,544,416,$game_map.effect_surface.color)
    $game_map.light_surface.blend_type = 2
    $game_map.light_surface.opacity = $game_map.effect_surface.alpha
    $game_map.light_surface.z = Surface_Z
  end
end
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 3:35
Il faut forcément un scrypt où je peux faire des manips directement dans des évènements pour faire changer l'allumage en fonction des heures de mon évènement commun 'Temps' déjà présent ?

Wait, je viens de me rendre compte que j'ai mal lu...

Bon, je suis pas fan de scrypt par contre... Je vais tenter de comprendre où le mettre.

Thank you very much.

(Et , perso, j'arrives même pas à faire des loupiotes qui s'allument à telles où telles heures, je suis tout d'un coup bien paumé...)
avatar
Balbereith
Staffieux retraité

Staffieux retraité
Nombre de messages : 4130
Age : 25
Localisation : dans l'ombre...
Capacités : assez bon
Avertissements : Avertissements infinis |-)
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires ) [Coco' Smile]
Date d'inscription : 13/05/2009

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 6:13
Si j'étais toi, je distinguerais les deux trucs que tu veux faire ^^ Prog plus en modulaire, se sera plus simple ^^ car là tu mélange tout et au final c'est le bordel ^^ ce qui génère des erreurs et cela ne facilite pas la correction...

Ce que je te conseille c'est de faire un horloge à part en gros, l'évent ne se préoccupe que de faire tourné les variables...
et dans un deuxième évent commun tu t'occupe de tes teintes ^^
deux avantages :
primo simplicité car tout est séparé est donc lisible
et ensuite tu peux couper la gestion de tes teintes sans couper ton horloge (ce qui est bien pratique lorsque tu es en intérieurs Wink)
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 6:57
... J'ai absolument rien compris, mais merci.
avatar
Balbereith
Staffieux retraité

Staffieux retraité
Nombre de messages : 4130
Age : 25
Localisation : dans l'ombre...
Capacités : assez bon
Avertissements : Avertissements infinis |-)
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires ) [Coco' Smile]
Date d'inscription : 13/05/2009

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 7:39
En gros, ce que je te propose, c'est de séparer ton horloge et la gestion de tes teintes.
C'est-à-dire, tu sépare la gestion de tes variables heures, minutes, seconde et les condition qui gère la diminution des ton de l'écran...
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Sam 5 Jan 2013 - 12:42
En claire, enlever les teintes déjà présentes dans l'évènement commun 'Temps' et n'utilisait que les teintes du Debug ?
avatar
Balbereith
Staffieux retraité

Staffieux retraité
Nombre de messages : 4130
Age : 25
Localisation : dans l'ombre...
Capacités : assez bon
Avertissements : Avertissements infinis |-)
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires ) [Coco' Smile]
Date d'inscription : 13/05/2009

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Dim 6 Jan 2013 - 3:43
Oui tu vire les teintes dans ton event Temps, et cela deviendra ton horloge, elle ne s'occupe que de la gestion de l'heure et ensuite dans un autre évent commun, tu incruste ton débug pour les teintes, de simple conditions avec des changement de teintes.
avatar
Alo Wanijima
Apprenti Mineur
Apprenti Mineur
Nombre de messages : 19
Age : 24
Localisation : Nancy
Capacités : débutant
Distinction : aucune
Date d'inscription : 23/12/2012

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

le Mar 8 Jan 2013 - 12:38
Ouki ouki, désolé de la réponse tardive, je vais tenter cela dès maintenant ! J'éditerais pour faire savoir le résultat.

Thank you !

Edit: Bon, ce que j'ai fais...

J'ai supprimé toutes les teintes de l'évent' comm' 'Temps', il ne reste plus que le système d'horloger, et j'ai mis toutes les teintes du debug sur 120 frames...

Le problème cependant, c'est qu'au lieu de changer de teintes par rapport aux heures, il change de teintes à chaque fois qu'une fois est finit de se mettre en place au bout de 120 frames.

J'y ai réfléchis, et je pensais modifier quelque peu les conditions déjà présentes dans le système du 'Debug', je sais pas encore comment je vais m'y prendre, alors si tu peux me trouver une petite feinte histoire que cela fonctionne de ton côté, je dirais pas non pour que tu me l'expliques.
Contenu sponsorisé

Re: Le Temps (Version Nuit/Jour/Heures/Minutes/Secondes IG)[VX Ace][Résolu]

Revenir en haut
Permission de ce forum:
Vous pouvez répondre aux sujets dans ce forum