Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Ressourcez votre RPG !
Ressourcez votre RPG !
  • Partage de ressources graphiques pour Rpg maker VX, customisées ou créées par Vincentmhd. Utilisation libre (si non commerciale) quand c'est signalé, nécéssité de citer l'auteur avec un lien vers la gallerie...
  • Accueil du blog
  • Créer un blog avec CanalBlog
Publicité
Newsletter
5 septembre 2009

Time (partie 1)

Time(partie 1)


-Introduction

Oui, je tiens beaucoup à la notion du temps! Cette conversion de l'event vers le script est pour le moins difficile, elle sera en plusieurs parties gérant differentes notions. Cette première partie est le coeur du système de temps. Elle contient les fonctions de base que je surchargerai par la suite et le "grand incrémenteur", la méthode qui incrémente tout. Sur mon ordi, il tourne bien à 60 FPS avec tout les autres scripts que j'ai posté récemment. Cependant, je ne connais pas encore l'impact de tout le système de temps avec les ajouts encore inachevés. Pour limiter l'impact de l'incrementation du temps, elle se fait dans un thread secondaire: $time_runner.



-Description

Ce script est le coeur de temps, mais n'a pas beaucoup de manifestation en soi. Ce sont les ajouts qui viendront qui lui donner corps. Pour le moment, il incrémente seulement les variables de base: minutes, heures, jours, semaines, mois, années.
Les mois (donc les années) et les semaines sont customisables.
Il peut afficher l'heure, si vous avez un accessoire particulier. Son rythme d'incrémentation maximal est de une heure par seconde, la vitesse courante d'une minute par seconde. Ralentissable au possible. Fontionne aussi en années négatives.
Il a des raccourcis de message. Il peut vous permettre de faire sonner les horloges... et c'est déjà pas mal.



-Installation

Ce script n'échappe pas à la régle du "copiez en dessous de material".
Il n'a pas de nécéssité particulière.

-Utilisation

Le temps est une notion assez particulière. La customiser peut être à double tranchant.

Configuration:

Regardons le module de configuration:

Code:

#Module de configuration


#=====================================DATAS=====================================
ASTRAL_YEAR =365.2422
CALENDAR =[["Janvier",31],["Février",28,29],["Mars",31],["Avril",30],["Mai",31],["Juin",30],["Juillet",31],["Août",31],["Septembre",30],["Octobre",31],["Novembre",30],["Décembre",31]]
WEEK =["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
INIT_MINUTE =23
INIT_HOUR  =22
INIT_DAY    =28
INIT_MONTH  =2
INIT_YEAR  =1604
#===================================ADRESSAGE===================================
  #Id des variables principales
  MINUTES =1
  HOURS  =2
  DAYS    =3
  MONTHS  =4
  YEARS  =5
 
  #Id des variables secondaires            
  DAY_WEEK    =6                                #Le jour de la semaine
 
  H_MODE_12    =10                              #L'heure en mode 12h
  SONNERIE    =11                              #Le nbs de sonneries à jouer
 
  #Id des Montres
  EQUIP_NV1    =[23]                            # Heure
  EQUIP_NV2    =[]                              # Heure + Js
  EQUIP_NV3    =[]                              # Heure + Js J Ms
  EQUIP_NV4    =[]                              # Heure + J Ms An
  EQUIP_NV5    =[24]                            # Heure + J/Ms/An[2]
  EQUIP_NV6    =[]                              # Heure + J/Ms/An[4]
  EQUIP_NV7    =[]                              # Heure + Js J Ms An
  EQUIP_NV8    =[25]                            # Heure + Js[3] J/Ms/An[2]
 
  #Id des switches
  RUNNING = 1                                    #Si  le  temps  s'écoule
  HIDE_TIME = 2                                  #Si  la montre s'affiche

 
#===============================================================================



Bon, il est assez conséquent. Regardons les données (DATAS)

Code:

#Module de configuration


#=====================================DATAS=====================================
ASTRAL_YEAR =365.2422
DECALAGE = 79.25
CALENDAR =[["Janvier",31],["Février",28,29],["Mars",31],["Avril",30],["Mai",31],["Juin",30],["Juillet",31],["Août",31],["Septembre",30],["Octobre",31],["Novembre",30],["Décembre",31]]
WEEK =["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
INIT_MINUTE =23
INIT_HOUR  =22
INIT_DAY    =28
INIT_MONTH  =2
INIT_YEAR  =1604



ASTRAL_YEAR correspond à la "vraie" durée d'une année: dans le calendrier Grégorien les années bissextiles sont un peu plus compliquée que dans le calendrier Julien. 365,25 est la valeur d'une année Julienne. Cette différence d'apparence insignifiante fera varier des paramètres comme les saisons très doucement sur 400 ans... (cela explique en parti pourquoi le premier jour des saisons, n'est pas toujours le même mais oscille entre 4 jours, même si le 21 est le plus récurent.
Je me suis sans doute embeter pour rien, mais bon ça ne représente pas beaucoup de code en plus.
nota: les saisons sont absentes de ce script mais sont prévues pour le suivant...

DECALAGE, c'est le décalage à l'origine de l'année calendaire avec l'année astronomique. Je considère que l'année astronomique commence le premier jour de la première saison (le Printemps)...

CALENDAR est bien la structure de l'année. Vous pouvez ajouter un mois ou en supprimer un, les rallonger ou les raccourcirs, les rendre sensibles aux années bissextiles, ou non. Pour faire la dernière action, il suffit de rajouter une seconde valeur de durée, comparez Février aux autres mois.

WEEK est la structure de la semaine, tout aussi customisable.

Les valeurs "INIT" sont les valeurs de départ de l'horloge.

Le reste du module correspond à de l'adressage, donc ce n'est pas difficile de comprendre.

Fonctionnalités:

- Mettre en route le temps:
Il suffit d'activer l'interrupteur à l'adresse RUNNING par défaut 1. Pour le stopper, il suffit de le désactiver.

- Modifier le rythme:
Dans un appel de script, écrivez:
$game_time.time_speed( speed, limite)
speed correspond au nombre de secondes incrémentées par frame.
limite correspond au nombre de secondes pour incrémenter une minute.
Ainsi quand speed = limite vous êtes à la vitesse maximale.
nota: je n'ai pas remarqué de lag causé par le changement de vitesse, ou inputable à la vitesse, même maximale. Le lag que j'avais pu repéré était au niveau de l'affichage, mais il est normalement solutioné.

- Saut temporel:
Pour faire un saut temporel, je vous conseil:
- de stopper le temps
- de modifier les variables correspondantes comme des variables normales
- d'appeller un script: $game_time.verif
(en réalité, il s'agit plus d'une update, qu'une vérif. Il vérifie bien vos valeurs, mais il met à jour certaines variables muettes)
- de remettre en marche le temps

- Raccourci de message:
Il y a plusieurs raccourcis.
Pour l'heure, c'est \TH[mode], le mode correspond à 24 ou 12, par défaut c'est 24.
Pour la date, c'est \TD[forme], il y a beaucoup de forme:
0: Lundi
1: Lundi 23 Septembre
2: 23 Septembre 1390
3: 23/09/90
4: 23/09/1390
5: Lundi 23 Septembre 1390
6: Lun 23/09/90
Pour le mois \TM[id] renvois le nom du mois, si non complété, il renvois le mois actuel.

- La montre:

Il suffit de compléter les tableaux pour rendre l'accessoire apte à donner l'heure. Selon dans quel tableau, il se trouve, l'affichage sera different (même ordre que le raccourci de date).

- La sonnerie:

La sonnerie est une variable qui possède le nombre de l'heure en mode 12h, tant que les minutes ne dépassent pas la valeur de l'heure en mode 12h, sinon la variable est toujours égale à 0. Un event avec comme trigger "la variable sonnerie est superieure à 1", s'activera à chaque début d'heure. Il vous suffit de lui donner le déplacement automatique de jouer un beep, puis d'attendre 59 frames en boucle. Il biiiippera le nombre d'heures.

-Le script
Spoiler:
Code:

#===============================================================================
#
#
#                                    TIME.v3
#
#
#===============================================================================
#
#By Vincentmhd
#http://vincentmhdmaker.canalblog.com/
#3/09/09
#
#
#
#
#
#=====================================NOTE======================================
#
#
#-------------------------------------------------------------------------------
#
#Ce script  génére une notion de  temps fictive  dans votre jeu. Il  possède une
#boucle  principale  qui incrémente  le temps  et le  calendrier. Le  calendrier
#utilisé est le calendrier Grégorien.  Chaque variable  importante est  contenue
#dans  une  $game_variables[] dont  l'adresse est  modifiable dans  le module de
#configuration.
#Le calendrier comprend comme notions:
#les minutes, les heures, les jours, les mois, les années.
#
#A ces notions, les jours de la semaines s'ajoutent.
#-------------------------------------------------------------------------------
#
#Le temps en soit  n'a pas de  manifestation  autre que les  variables, et les
#switches. Les manifestations les plus vives seront ajoutées par d'autres
#scripts complémentaires.
#
#-------------------------------------------------------------------------------
#
#Utilisation:
#Le temps s'initialise  aux valeurs enregistrées pendant l'écran titre. Le temps
#est dans une variable globale nommée $game_time. Un interrupteur signifie si le
#temps doit s'écouler ou non: RUNNING.
#
#Pour modifier la date, il suffit  de jouer directement  avec les variables. Une
#méthode de  vérification existe. Elle fait  les conversions nécéssaires  au bon
#déroulement du  script. Je vous  conseille fortement  de stopper  le  temps, de
#faire les  modifications, de  les vérifier, puis de réactiver le temps...
#
#Le temps  est  accelérable  et  ralentissable. Le rythme  du  temps  dépend  de
#l'incrémentation  des secondes, qui sont  muettes, autant  de par  le nombre de
#secondes incrémentées  en une frame, et de par  le nombre de secondes  dans une
#minute. la méthode time_speed(speed, limit =60) s'occupe de cela.
#
#
#-------------------------------------------------------------------------------
#A cette gestion, des fonctionnalités ont étées ajoutées:
#
#Sonnerie: une variable contient la valeur de l'heure en mode 12 et qu'au moment
#          de sonner. Sinon, elle contient 0.
#
#Ecriture: Deux surcharges du Window_message vous permettent d'écrire l'heure ou
#          la date directement en message.
#
#Affichage: Le temps  est  affichable, par  une fenêtre. Cependant, il  faut une
#          montre  pour avoir l'heure. C'est  la montre de forme la plus élevée
#          qui conditionne l'affichage: Avoir 5 montres ne change rien.
#          L'affichage risque d'être aberrant en année négative.
#          l'affichage  est  aussi  soumis  à  un interrupteur  pour  cacher la
#          fenêtre (genre si vous stoppez le temps durant  une  cut-scene).
#-------------------------------------------------------------------------------
#
#Le temps  est  customisable. Outre  les noms  modifiables, il y a  le nombre de
#mois, le nombre de jours  dans ceci, s'ils sont sensibles à l'année bissextile,
#combien de jours dure une année "astrale", le nombre de jours dans la semaines.
#
#Je  tiens  juste  à  vous  mettre  en  garde, customiser  un  calendrier, n'est
#pas aussi simple que vous pourriez être tenté de le penser.
#
#-------------------------------------------------------------------------------

module Custom_Time
 
#Module de configuration


#=====================================DATAS=====================================
ASTRAL_YEAR =365.2422
DECALAGE =79.25
CALENDAR =[["Janvier",31],["Février",28,29],["Mars",31],["Avril",30],["Mai",31],["Juin",30],["Juillet",31],["Août",31],["Septembre",30],["Octobre",31],["Novembre",30],["Décembre",31]]
WEEK =["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
INIT_MINUTE =23
INIT_HOUR  =22
INIT_DAY    =28
INIT_MONTH  =2
INIT_YEAR  =1604
#===================================ADRESSAGE===================================
  #Id des variables principales
  MINUTES =1
  HOURS  =2
  DAYS    =3
  MONTHS  =4
  YEARS  =5
 
  #Id des variables secondaires            
  DAY_WEEK    =6                                #Le jour de la semaine
 
  H_MODE_12    =7                              #L'heure en mode 12h
  SONNERIE    =8                              #Le nbs de sonneries à jouer
 
  #Id des Montres
  EQUIP_NV1    =[23]                            # Heure
  EQUIP_NV2    =[]                              # Heure + Js
  EQUIP_NV3    =[]                              # Heure + Js J Ms
  EQUIP_NV4    =[]                              # Heure + J Ms An
  EQUIP_NV5    =[24]                            # Heure + J/Ms/An[2]
  EQUIP_NV6    =[]                              # Heure + J/Ms/An[4]
  EQUIP_NV7    =[]                              # Heure + Js J Ms An
  EQUIP_NV8    =[30]                            # Heure + Js[3] J/Ms/An[2]
 
  #Id des switches
  RUNNING = 1                                    #Si  le  temps  s'écoule
  HIDE_TIME = 2                                  #Si  la montre s'affiche

 
#===============================================================================

class Mhd_Time

  attr_accessor  :secondes, :speed, :incrementation, :total_day, :astral_day

  def initialize
    @secondes = 0
    @speed = 1
    @incrementation = 60
    @total_day = 0
    @astral_day = 0
    init
  end
 
 
#=============================#
#  Incrémentation du temps  #
#=============================#
#Appelée à chaque frame,  c'est la méthode principale.
#Elle incrémente les secondes et les autres variables
#en cascade.
#Elle est appelée par Game_map update ainsi le temps
#ne s'incémente que sur la map.
 
  def run
    if $game_switches[RUNNING]
      secondes_update
      if @secondes >= @incrementation
        @secondes-= @incrementation
        minutes_update
        if $game_variables[MINUTES]>=60
          $game_variables[MINUTES]-=60
          hours_update
          if $game_variables[HOURS]>= 24
            $game_variables[HOURS]-=24
            days_update
            month_limite = month_size?()
            if ($game_variables[DAYS] > month_limite)
              $game_variables[DAYS]-= month_limite 
              months_update
              if $game_variables[MONTHS] > CALENDAR.size
                $game_variables[MONTHS]-=CALENDAR.size
                years_update
              end
            end
            week_update
            astral_update
            $time_window.day_refresh
          end
        end
        $time_window.minute_refresh
        $time_window.update
      end
    end
  end
#=============================#
#        Initialisation      #
#=============================#
#Elle assigne les premières valeurs avant même
#le chargement de données, ainsi charger écrase
#les valeurs initiatiales
#Appelée à l'écran titre
def init
  $game_variables[MINUTES] = INIT_MINUTE
  $game_variables[HOURS] = INIT_HOUR
  $game_variables[DAYS] = INIT_DAY
  $game_variables[MONTHS] = INIT_MONTH
  $game_variables[YEARS] = INIT_YEAR
 
  setup 
end

#=============================#
#          Verif            #
#=============================#
#verification des valeurs
#la différence entre le 2 tient au fait que verif
#ne peut s'appeler que sur la map
#car elle nécéssite l'existance de la fenêtre.

def setup
  verif_pos
  verif_neg
  verif_zero
  @total_day = total_day?()
  astral_calculate
  week_update
  hours_12_update
  if $game_variables[MINUTES] < $game_variables[H_MODE_12]
    sonnerie_On
  end
end

def verif
  setup
  $time_window.minute_refresh
  $time_window.day_refresh
  $time_window.update 
end

#=============================#
#      Update de temps      #
#=============================#
#Updates appelée par l'incrémenteur
  def secondes_update
    @secondes += @speed
  end
 
  def minutes_update
    $game_variables[MINUTES] +=1
    sonnerie_Off
  end
 
  def hours_update
    $game_variables[HOURS]+=1
    hours_12_update
    sonnerie_On
  end
 
  def hours_12_update
    if $game_variables[HOURS]> 12
      $game_variables[H_MODE_12] = $game_variables[HOURS] - 12
    else
      $game_variables[H_MODE_12] = $game_variables[HOURS]
    end
  end
 
  def days_update
    $game_variables[DAYS]+= 1
    @total_day +=1
  end
  #comme les secondes, @astral_day et @total_day
  #ne sont pas enresgistrées dans une variable
  #car non exploitables en events.
  #Elles sont calculées une première fois par les vérificateurs.
  #leurs calculs assez lourd donc autant le faire le moins possible.
  #l'incrémenteur se contante d'incrémenter, son rôle quoi.
  def astral_update
    @astral_day += 1
    if @astral_day > ASTRAL_YEAR
      @astral_day -= ASTRAL_YEAR
    end
  end
      
  def week_update
    $game_variables[DAY_WEEK] = day_week?()
  end
   
  def months_update
    $game_variables[MONTHS]+= 1
  end
 
  def years_update
    $game_variables[YEARS]+= 1
  end
 
  #===============================#
  #      Méthodes usuelles      #
  #===============================#       
 
  def bissextile?(year)                                                                        
    if year%4 ==0                                                                                     
      if year%100 ==0                                                                              
        if year%400 ==0                                                                           
          return true                                                                                          
        else                                                                                                      
          return false                                                                                     
        end
      else
        return true                                                                                          
      end                                                                                                      
    else                                                                                                       
      false                                                                                                   
    end                                                                                                       
  end 
 
  def month_size?(month =$game_variables[MONTHS], year=$game_variables[YEARS])
    if bissextile?(year)&&(CALENDAR[month-1].size == 3)
      return CALENDAR[month-1][2]
    else
      return CALENDAR[month-1][1]
    end
  end
 
  #il y a peut être des erreurs dans cette fonction
  #dans le sens notion de durée, d'interval et de date
  def total_day?(day=$game_variables[DAYS], month=$game_variables[MONTHS], year=$game_variables[YEARS])
    #année positive
    if year> 0
      result = (year-1)*ASTRAL_YEAR  #l'année 0 n'existe pas donc 1/1/1 = 1 jour, et non pas 366j
      month -=1
      while month > 0 
        result += month_size?(month, year)
        month -= 1
      end
      result += (day-1)
      return result
      #année négative
    elsif year< 0
      result = year*(-ASTRAL_YEAR)
      month -=1
      while month > 0
        result -= month_size?(month, year)
        month -= 1
      end
      result -= (day-1)
      return result
    else
      #année 0? erreur mais on continue car non fatale
      print("TIME::ERROR year 0 met")
      month -=1
      while month > 0 
        result += month_size?(month, year)
        month -= 1
      end
      result += (day-1)
      return result
    end
  end
 
  def day_week?(day= @total_day, year=$game_variables[YEARS])
    day%=WEEK.size
    if year<0
      day-=(WEEK.size -1)
      day*=-1
    end
    return (day).to_i
  end
 
  #le jour astral servira aux météos et à la gestion lumineuse
  #si je l'inclus maintenant c'est pour laisser le choix
  #à une personne d'installer les saisons sans la gst lumineuse
  #ou inverse
  def astral_calculate
    if $game_variables[YEARS]>= 0
      @astral_day = (@total_day - DECALAGE)% ASTRAL_YEAR
    else
      @astral_day = (@total_day + DECALAGE)% ASTRAL_YEAR
      @astral_day = ASTRAL_YEAR - @astral_day
    end
    if (@astral_day < 0)
      @astral_day = ASTRAL_YEAR + @astral_day
    end
  end

  #==================================#
  #      Méthodes de la Sonnerie    #
  #==================================#
  #Expliqué en en tête
  def sonnerie_On
    $game_variables[SONNERIE] = $game_variables[H_MODE_12]
    $game_map.refresh
  end
  def sonnerie_Off
    if $game_variables[MINUTES] >= ($game_variables[SONNERIE])
      if $game_variables[SONNERIE] != 0
        $game_variables[SONNERIE] = 0
        $game_map.refresh
      end
    end
  end
  #==================================#
  #      Méthodes de rapidité      #
  #==================================# 
  #modification de la vitesse
  def time_speed(speed, limit = 60)
    @speed = speed
    @incrementation = limit
  end
  #==================================#
  #      Méthodes d'écriture        #
  #==================================#
  def write_hour(mode = 24)
    hour = ""
    if(mode == 24)
      if $game_variables[HOURS] < 10
        hour = " "
      end
      hour += $game_variables[HOURS].to_s
    else
      if $game_variables[H_MODE_12] < 10
        hour = " "
      end
      hour += $game_variables[H_MODE_12].to_s
    end
    hour += "h"
    if ($game_variables[MINUTES]) < 10
      hour += "0"
    end
    hour += ($game_variables[MINUTES]).to_s
    return hour
  end
 
  #horriblement scripté mais plus simple pour la window
  def write_date(forme = 3)
    date = ""
    case forme
    when 0
      date += WEEK[$game_variables[DAY_WEEK]]
    when 1
      date += WEEK[$game_variables[DAY_WEEK]]
      date += " "
      date += $game_variables[DAYS].to_s
      date += " "
      date += CALENDAR[$game_variables[MONTHS]-1][0]
    when 2
      date += $game_variables[DAYS].to_s
      date += " "
      date += CALENDAR[$game_variables[MONTHS]-1][0]
      date += " "
      date += $game_variables[YEARS].to_s
    when 3
      date += $game_variables[DAYS].to_s
      date += "/"
      if $game_variables[MONTHS]<10
        date += "0"
      end
      date += $game_variables[MONTHS].to_s
      date += "/"
      if (($game_variables[YEARS].to_i)%100)<10
        date += "0"
      end
      date += (($game_variables[YEARS].to_i)%100).to_s
    when 4
      date += $game_variables[DAYS].to_s
      date += "/"
      date += $game_variables[MONTHS].to_s
      date += "/"
      if ($game_variables[YEARS])<10
        date += "0"
      end
      date += $game_variables[YEARS].to_s
    when 5
      date += WEEK[$game_variables[DAY_WEEK]]
      date += " "
      date += $game_variables[DAYS].to_s
      date += " "
      date += CALENDAR[$game_variables[MONTHS]-1][0]
      date += " "
      date += $game_variables[YEARS].to_s
    else
      date += WEEK[$game_variables[DAY_WEEK]][0,3]
      date += " "
      date += $game_variables[DAYS].to_s
      date += "/"
      if $game_variables[MONTHS]<10
        date += "0"
      end
      date += $game_variables[MONTHS].to_s
      date += "/"
      if (($game_variables[YEARS].to_i)%100)<10
        date += "0"
      end
      date += (($game_variables[YEARS].to_i)%100).to_s   
    end
    return date
  end
 
  def write_month(id = $game_variables[MONTHS])
    return CALENDAR[id][0]
  end
 
  #==================================#
  #    Méthodes de vérification    #
  #==================================#
  #gymnastique mentale!
 
  def verif_zero
    if $game_variables[YEARS] ==0
      $game_variables[YEARS] =1
    end
    if $game_variables[MONTHS] == 0
      $game_variables[MONTHS] = 1
    end
    if $game_variables[DAYS] == 0
      $game_variables[DAYS] = 1
    end
  end
   
  def verif_pos
    if  $game_variables[MINUTES]>= 60
      $game_variables[HOURS]+= $game_variables[MINUTES]/60
      $game_variables[HOURS] =$game_variables[HOURS]
      $game_variables[MINUTES]%=60
    end
    if  $game_variables[HOURS]>= 24
      $game_variables[DAYS]+= $game_variables[HOURS]/24
      $game_variables[DAYS] = $game_variables[DAYS]
      $game_variables[HOURS]%=24
    end
    #les mois avant les jours car le nombre de jours
    #dans le mois dépend des année et du mois
    if $game_variables[MONTHS]>CALENDAR.size
      $game_variables[YEARS] += $game_variables[MONTHS]/CALENDAR.size
      $game_variables[MONTHS]%= CALENDAR.size
    end
    while $game_variables[DAYS] > month_size?()
      $game_variables[DAYS] -=month_size?()
      $game_variables[MONTHS]-=1
    end
    #revérification car modifications du mois...
    if $game_variables[MONTHS]>CALENDAR.size
      $game_variables[YEARS] += $game_variables[MONTHS]/CALENDAR.size
      $game_variables[MONTHS]%= CALENDAR.size
    end
    #je dois revérifier les jours car le mois à changé...
    #non ce n'est pas infini mais c'est long.
    while $game_variables[DAYS] > month_size?()
      $game_variables[DAYS] -=month_size?()
      $game_variables[MONTHS]-=1
    end
  end
      
  def verif_neg
    while $game_variables[MINUTES] < 0
      $game_variables[MINUTES] +=60
      $game_variables[HOURS] -=1
    end
    while $game_variables[HOURS] < 0
      $game_variables[HOURS] +=24
      $game_variables[DAYS] -=1
    end
    while $game_variables[MONTHS] <=0
      $game_variables[YEARS]-=1
      $game_variables[MONTHS] += CALENDAR.size
    end
    while $game_variables[DAYS] <=0
      $game_variables[MONTHS]-=1
      if $game_variables[MONTHS] ==0
        $game_variables[YEARS]-=1
        $game_variables[MONTHS] += CALENDAR.size
      end
      $game_variables[DAYS] += month_size?()
    end
  end
end

  #==================================#
  #              Window            #
  #==================================#
 
class Time_Window < Window_Base
  def initialize
    super(362, 0, 192, 120)
    @forme = 0
    @heure = ""
    @date  = ""
    forme?
    visible?
    refresh
  end
 
  #détermine quel affichage en fonction de l'équipement
  #Appelé à la fermeture de Scene_equip
  def forme?
    @forme = 0
   
      
      for i in 0...EQUIP_NV1.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV1[i]]))
            @forme = 1
          end
        end
      end
      for i in 0...EQUIP_NV2.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV2[i]]))
            @forme = 2
          end
        end
      end
      for i in 0...EQUIP_NV3.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV3[i]]))
            @forme = 3
          end
        end
      end
      for i in 0...EQUIP_NV4.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV4[i]]))
            @forme = 4
          end
        end
      end
      for i in 0...EQUIP_NV5.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV5[i]]))
            @forme = 5
          end
        end
      end
      for i in 0...EQUIP_NV6.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV6[i]]))
            @forme = 6
          end
        end
      end
      for i in 0...EQUIP_NV7.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV7[i]]))
            @forme = 7
          end
        end
      end
      for i in 0...EQUIP_NV8.size
        for actor_id in 0...$game_party.members.size
          actor = $game_party.members[actor_id]
          if(actor.armors.include?($data_armors[EQUIP_NV8[i]]))
            @forme = 8
          end
        end
      end
  end
 
 
  def minute_refresh
  @heure = $game_time.write_hour()
  end

  def day_refresh
    if (@forme > 1)
      @date = $game_time.write_date(@forme -2)
    else
      @date = ""
    end
  end

  def window_refresh
    #redimension la fenêtre
    #appelée au jour
    txt_size = 0
    if (((@date.size) * 8) >= (((@heure.size) * 8)+ 24))
      txt_size = 32 + (@date.size * 8)
    else
      txt_size = ((@heure.size) *8) +24 + 32
    end
    self.x = 544 - txt_size
    self.y = 0
    self.width = txt_size
    if(@date == "")
      self.height = 32 + WLH
    else
      self.height = 32 + WLH*2
    end
      create_contents   
  end 
 
  def visible?
    if (!$game_switches[HIDE_TIME]== true)&&(@forme != 0)
      self.visible = true
    else
      self.visible = false
    end
  end
 
  def draw_window
    self.contents.clear
    x = 0
    y = 0
    if(@date != "")
      self.contents.draw_text( x, y, @date.size * 8, 18, @date, 1)
      x = ((self.width - 32) - (((@heure.size) *8) +24))
      y = WLH
    end
    self.contents.draw_text(x , y, @heure.size * 8, 18, @heure , 1)
    x += @heure.size * 8
    self.draw_icon(188, x + 2, y - 2)
  end
   
  def refresh
    minute_refresh
    day_refresh
    window_refresh
    draw_window
  end

  def update
      super
      draw_window
  end

end

end

  #==================================#
  #              Alias              #
  #==================================#
class Window_Message
  alias time_convert_special_characters convert_special_characters
  def convert_special_characters
    time_convert_special_characters
    @text.gsub!(/\\TH\[(\d+)\]/i) { $game_time.write_hour($1.to_i)  }
    @text.gsub!(/\\TD\[(\d+)\]/i) { $game_time.write_date($1.to_i) } 
    @text.gsub!(/\\TM\[(\d+)\]/i) { $game_time.write_month($1.to_i) }
  end
end
 
 
class Scene_Title
  alias vincentmhd_time_create_game_objects create_game_objects
  def create_game_objects
    vincentmhd_time_create_game_objects
    $game_time = Custom_Time::Mhd_Time.new
  end
end

class Scene_Equip
  alias time_scene_equip_terminate terminate
  def terminate
    time_scene_equip_terminate
    #juste rafraichir
    $time_window.forme?
    $time_window.minute_refresh
    $time_window.day_refresh
  end
end

class Scene_Map
  alias vincentmhd_time_update update
  def update
    $time_runner = Thread.new {$game_time.run}
    vincentmhd_time_update
  end
 
  alias time_window_start start
  def start
    time_window_start
    $time_window = Custom_Time::Time_Window.new
  end
 
 
  def refrech
    alias time_window_map_refresh refresh
    $time_window.visible?
  end   
 
  alias time_window_terminate terminate
  def terminate
    $time_window.dispose
    time_window_terminate
  end
end




RPG Maker VX

-Démo

Elle ne met pas vraiment en valeur mais pour le moment, le temps
n'est qu'un ensemble de variables...
Lien vers la démo

-Crédits:Vincentmhd

_________________

Publicité
Commentaires
Publicité