Dynamic Day And Night System (DDNS) é um script para o RPG Maker XP, desenvolvido por Blizzard. Resumidamente, ele controla o dia e a noite em um jogo/projeto feito neste sistema, inclusive clareando e escurecendo a tela, para dar uma impressão de dia e noite mesmo.
Ele parece ser bem compatível com outros scripts, o autor dá 99% de chance de compatibilidade total com o SDK apesar que ele mesmo não testou. Pode causar problemas de incompatibilidade com outros sistemas de diae noite e VAI corromper savegames antigos. É melhor começar o jogo de novo para prevenir este problema.
Jogos como os Might And Magics usam um sistema de dia e noite também, que eu sempre achei interessante, mas sem esse lance dinâmico que o DDNS promete, em um jogo de RPG Maker, fica meio chato.
Para instalar o script, basta copiar o código abaixo acima do Main:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= # Dynamic Day and Night System (DDNS) by Blizzard # Version: 1.51b # Date: 27.06.2006 # Date v1.1b: 29.06.2006 # Date v1.2b: 08.09.2006 # Date v1.3b: 11.09.2006 # Date v1.4b: 23.2.2007 # Date v1.43b: 25.3.2007 # Date v1.5b: 23.10.2007 # Date v1.51b: 5.11.2007 #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= # # Compatibility: # # 99% chance of full compatibility with SDK, not tested altough. Can cause # incompatibilty issues with other DNS-es. WILL corrupt old savegames. If # used with an old savegame, it could cause problems. Please start a new game # if you use this to avoid incompatibilty issues. # # # Features: # # - complete control over the DDNS # - easy switching from day to night and night to day # - possibility for dynamic length of night and/or day # - easy manipulating through events with the "Call script" commands # - 3 possible states: interiors, exteriors, dark interiors # - display a clock or don´t display a clock # - uses 5 switches and 2 variables, so the user can easily access the DDNS # to e.g. connect it with event based systems and/or enhance it with events # # new in v1.1b: # - a fatal glitch was fixed, but it had its price, old savegames need to # turn on the DDNS to clear an issue # # new in v1.2b: # - shorter, more simple code and less lag # # new in v1.3b: # - improved code # # new in v1.4b: # - now compatible with Tons of Add-ons # # new in v1.43b: # - fixed a bug, improved code and changed a little bit # # new in v1.5b: # - rewritten conditions using classic syntax to avoid RGSS conditioning bug # - improved coding # - fixed an issue with Tons of Add-ons v5.x and higher # # new in v1.51b: # - fixed tpying mistakes that caused bugs # # # Instructions: # # - Explanation: # # This Dynamic Day and Night System will make your game have daytime and # nighttime periods. You can set up the length and variation intervals if you # want to use it dynamically. Other features are explained below. Please be # sure to configure this system appropriately. # # - Configuration: # # DAY - set this value to the switch ID you want to use for control # over the day # NIGHT - set this value to the switch ID you want to use for control # over the night # INSIDE - set this value to the switch ID you want to use to determine # if the player is inside # OUTSIDE - set this value to the switch ID you want to use to determine # if the player is outside # INSIDEDARK - set this value to the switch ID you want to use to determine # if the player is inside a dark place # DAY_VAR - set this value to the variable ID you want to use as the # seconds counter for the day # NIGHT_VAR - set this value to the variable ID you want to use as the # seconds counter for the night # MAX_DAY - set this value to the duration of a day in seconds # MAX_NIGHT - set this value to the duration of a night in seconds # DYN_DAY - set this value to true if you want a dynamic day that has a # variating length, otherwise to false # DYN_NIGHT - set this value to true if you want a dynamic night that has a # variating length, otherwise to false # DAY_INT - set this value to the variation a day might have in seconds # (i.e. 30 will make a day be MAX_DAY ± 30 seconds of length) # NIGHT_INT - set this value to the variation a night might have in seconds # (i.e. 5 will make a night be MAX_NIGHT ± 5 seconds of length) # MINUTES - set this value to true if you want the clock to use a precise # minute display, please also see IMPORTANT NOTES for further # reference, otherwise to false # SHOW_CLOCK - set this value to false to if you want to remove the clock # from the map, otherwise to true # # - Basic manipulation of the DDNS: # # This system is based upon your eventing. It will work basically if you # want, but with a little bit of using the "Call Script" event command you # are able to have 3 different states of the DDNS (interior, exterior, dark # interior). Interiors and dark interior will never get dark during night. # Also dark interiors are always a little bit tinted. Here are the # instructions how to do so. Please also note, use this syntax with the "Call # Script" event command # # $game_ddns.go_inside # # This command will set up everything to enter an interior. # # $game_ddns.go_outside # # This command will set up everything to leave any interior. # # $game_ddns.go_inside_dark_place # # This command will set up everything to enter a dark tinted interior. # # $game_ddns.turn_off # # This command will turn off the DDNS if you want to tint the screen for # during a cutscene or something else related to screen tinting as DDNS is # dominant and will cause all of your event based screen tinting to reset the # next time day and night switch or the player changes the map. Day and night # will freeze during this period. To turn it on again, just use following # command: # # $game_ddns.turn_on = false # # AND one of the three commands above to determine where the player is. # # $game_ddns.make_it_day # # This command will set every counter to zero and start a new day. You can # use this together with an item, that calls a common event to execute this # code. # # $game_ddns.make_it_night # # This command will set every counter to zero and start a new night. You can # use this together with an item, that calls a common event to execute this # code. # # Also note, that the last 2 commands will ONLY work if the DDNS is NOT # turned off. To check if it´s turned off, just check the state of the # INSIDE, OUTSIDE and INSIDEDARK switches. All the switches are off if the # DNSS is turned off. # # - Direct manipulation of the DDNS: # # You can directly operate the switches WHICH IS NOT RECOMMENED to further # manipulate the system. An example is to change the values in the variables # which are used as second counter for the day and night. # # $game_system.show_clock = true # $game_system.show_clock = false # # You can use this syntax if you want to show/hide the clock during e.g. the # appearance of a countdown timer. Version 1.41b and higher even saves this # setting. # # - Enhancement hints: # # If you wish to implement the DDNS further into your game and e.g. allow # different behavious of monsters during day and night, you only need to # check the the state of the appropriate switch. e.g. If NIGHT is # turned on inflict "Sleep" on one enemy. # # # Additional info: # # The predecessor event based version of this script was tested a lot and the # result was the optimal tint during night, so the player can see the screen, # but also has the feeling, it is actually night in the game. # # # IMPORTANT NOTES: # # Make DAY_INT or $night_intervals at least by 2 smaller than MAX_DAY # or MAX_NIGHT # - do NOT use odd numbers for these variables, only even ones! (2, 4, 6...) # otherwise the clock WILL glitch # - if you use different lengths for day and night and do not use any dynamic # time, it is recommened, that you don´t show the minutes, because the # player can easily notice that one period is faster than the other # - there is NO timeflow during battle, menu etc., only in the map # - due to glitching the DDNS is initially turned off now # # # If you find any bugs, please report them here: # http://www.chaosproject.co.nr #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # START Configuration #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DAY = 1 # switch ID of the "day" switch NIGHT = 2 # switch ID of the "night" switch INSIDE = 3 # switch ID of the "inside" switch OUTSIDE = 4 # switch ID of the "outside" switch INSIDEDARK = 5 # switch ID of the "inside dark places" switch DAY_VAR = 1 # variable ID of the "day counter" NIGHT_VAR = 2 # variable ID of the "night counter" MAX_DAY = 120 # duration of a day in seconds MAX_NIGHT = 90 # duration of a night in seconds DYN_DAY = false # allow dynamic shortening and prolongening of day DYN_NIGHT = false # allow dynamic shortening and prolongening of night DAY_INT = 3 # variation of day in seconds NIGHT_INT = 2 # variation of night in seconds MINUTES = true # if dynamic day and night are turned off show minutes on clock SHOW_CLOCK = true # set to false to remove the clock from the map #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # END Configuration #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #============================================================================== # Game_System #============================================================================== class Game_System attr_accessor :ddns_off attr_accessor :show_clock alias init initialize def initialize init @ddns_off = false @show_clock = SHOW_CLOCK end end #============================================================================== # Game_DDNS #============================================================================== class Game_DDNS attr_reader :dyn_day attr_reader :dyn_night attr_reader :dynamic_day attr_reader :dynamic_night attr_reader :minutes attr_accessor :off def initialize @minutes = MINUTES @day_intervals, @night_intervals = DAY_INT, NIGHT_INT @max_day, @max_night = MAX_DAY, MAX_NIGHT @dyn_day, @dyn_night = DYN_DAY, DYN_NIGHT @dynamic_day, @dynamic_night = @max_day, @max_night dynamize_day @off = true end def go_inside unless @off $game_switches[INSIDE] = true $game_switches[INSIDEDARK] = $game_switches[OUTSIDE] = false end return end def go_outside unless @off $game_switches[OUTSIDE] = true $game_switches[INSIDE] = $game_switches[INSIDEDARK] = false end return end def go_inside_dark_place unless @off $game_switches[INSIDEDARK] = true $game_switches[INSIDE] = $game_switches[OUTSIDE] = false end return end def turn_off $game_switches[INSIDE] = $game_switches[INSIDEDARK] = $game_switches[OUTSIDE] = false @off = $game_system.ddns_off = true return end def turn_on @off = $game_system.ddns_off = false return end def make_it_day if $game_switches[INSIDE] || $game_switches[OUTSIDE] || $game_switches[INSIDEDARK] $game_switches[DAY] = true $game_switches[NIGHT] = false $game_variables[DAY_VAR] = $game_variables[NIGHT_VAR] = 0 if $game_switches[OUTSIDE] $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 160) end dynamize_day end $game_map.need_refresh = true end def make_it_night if $game_switches[INSIDE] || $game_switches[OUTSIDE] || $game_switches[INSIDEDARK] $game_switches[DAY] = false $game_switches[NIGHT] = true $game_variables[DAY_VAR] = $game_variables[NIGHT_VAR] = 0 if $game_switches[OUTSIDE] $game_screen.start_tone_change(Tone.new(-100, -100, 0, 0), 160) end dynamize_night end $game_map.need_refresh = true end def dynamize_day @dynamic_day = @max_day @dynamic_day -= @day_intervals + rand((2*@day_intervals)) if @dyn_day return end def dynamize_night @dynamic_night = @max_night @dynamic_day -= @day_intervals + rand((2*@day_intervals)) if @dyn_night return end end #============================================================================== # Bitmap #============================================================================== class Bitmap def draw_time(x, y, w, h, string, a) font.size = 26 save_color = font.color.clone font.color = Color.new(0, 0, 0, 192) if $tons_version != nil && $tons_version >= 3.71 && $game_system != nil && $game_system.SHADED_TEXT draw_text_shaded_text_later(x+1, y+1, w, h, string, a) draw_text_shaded_text_later(x-1, y+1, w, h, string, a) draw_text_shaded_text_later(x-1, y-1, w, h, string, a) draw_text_shaded_text_later(x+1, y-1, w, h, string, a) else draw_text(x+1, y+1, w, h, string, a) draw_text(x-1, y+1, w, h, string, a) draw_text(x-1, y-1, w, h, string, a) draw_text(x+1, y-1, w, h, string, a) end font.color = save_color draw_text(x, y, w, h, string, a) end if $tons_version == nil || $tons_version < 3.71 alias draw_text_shaded_text_later draw_text def draw_text(x2, y2, w2 = 0, h2 = 0, text2 = "", a2 = 0) if x2.is_a?(Rect) x, y, w, h, text, a = x2.x, x2.y, x2.width, x2.height, y2, w2 else x, y, w, h, text, a = x2, y2, w2, h2, text2, a2 end save_color = self.font.color.clone self.font.color = Color.new(0, 0, 0, 255) draw_text_shaded_text_later(x+1, y+1, w, h, text, a) self.font.color = save_color draw_text_shaded_text_later(x, y, w, h, text, a) end end end #============================================================================== # Clock #============================================================================== class Clock < Sprite def initialize super self.x, self.y, self.z = 480, 8, 5000 self.bitmap = Bitmap.new(128, 32) if $fontface != nil self.bitmap.font.name = $fontface self.bitmap.font.size = $fontsize elsif $defaultfonttype != nil self.bitmap.font.name = $defaultfonttype self.bitmap.font.size = $defaultfontsize end @odd = 0 draw unless $game_ddns.off end def draw self.bitmap.clear hours = minutes = 0 if $game_switches[DAY] hours = (12*$game_variables[DAY_VAR]/$game_ddns.dynamic_day+8)%24 minutes = (60*12*$game_variables[DAY_VAR]/$game_ddns.dynamic_day)%60 elsif $game_switches[NIGHT] hours = (12*$game_variables[NIGHT_VAR]/$game_ddns.dynamic_night+20)%24 minutes = (60*12*$game_variables[NIGHT_VAR]/$game_ddns.dynamic_night)%60 end if ($game_switches[DAY] || $game_switches[NIGHT]) && @odd % 2 == 0 if !$game_ddns.minutes || $game_ddns.dyn_day || $game_ddns.dyn_night self.bitmap.draw_time(0, 0, 128, 32, sprintf('%d 00', hours), 2) else self.bitmap.draw_time(0, 0, 128, 32, sprintf('%d %02d', hours, minutes), 2) end elsif !$game_ddns.minutes || $game_ddns.dyn_day || $game_ddns.dyn_night self.bitmap.draw_time(0, 0, 128, 32, sprintf('%d:00', hours), 2) else self.bitmap.draw_time(0, 0, 128, 32, sprintf('%d:%02d', hours, minutes), 2) end @odd = (@odd + 1) % 2 end end #============================================================================== # Scene_Title #============================================================================== class Scene_Title alias main_ddns_later main def main main_ddns_later $game_ddns = Game_DDNS.new end end #============================================================================== # Scene_Map #============================================================================== class Scene_Map attr_accessor :timer alias main_ddns_later main def main @clock = Clock.new if $game_system.show_clock @timer = Graphics.frame_count / Graphics.frame_rate * 2 main_ddns_later @clock.dispose unless @clock == nil end alias update_ddns_later update def update if $game_system.show_clock @clock = Clock.new if @clock == nil elsif @clock != nil @clock.dispose @clock = nil end $game_ddns.off = $game_system.ddns_off if @timer != Graphics.frame_count / Graphics.frame_rate * 2 update_ddns @timer = Graphics.frame_count / Graphics.frame_rate * 2 @clock.draw if $game_system.show_clock end update_ddns_later end def update_ddns if $game_switches[DAY] $game_variables[DAY_VAR] += 1 unless $game_ddns.off if $game_variables[DAY_VAR] == $game_ddns.dynamic_day if $game_switches[OUTSIDE] $game_screen.start_tone_change(Tone.new(-100, -100, 0, 0), 160) end $game_switches[DAY] = false $game_switches[NIGHT] = true $game_ddns.dynamize_night $game_variables[DAY_VAR] = $game_variables[NIGHT_VAR] = 0 $game_map.need_refresh = true end elsif $game_switches[NIGHT] $game_variables[NIGHT_VAR] += 1 unless $game_ddns.off if $game_variables[NIGHT_VAR] == $game_ddns.dynamic_night if $game_switches[OUTSIDE] $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 160) end $game_switches[DAY] = true $game_switches[NIGHT] = false $game_ddns.dynamize_day $game_variables[DAY_VAR] = $game_variables[NIGHT_VAR] = 0 $game_map.need_refresh = true end end end alias transfer_player_ddns_later transfer_player def transfer_player if $game_switches[INSIDE] $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 0) elsif $game_switches[OUTSIDE] if $game_switches[DAY] $game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 0) elsif $game_switches[NIGHT] $game_screen.start_tone_change(Tone.new(-100, -100, 0, 0), 0) end elsif $game_switches[INSIDEDARK] $game_screen.start_tone_change(Tone.new(-40, -40, 0, 0), 0) end transfer_player_ddns_later end end
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!