RPG Maker Day & Night Cycle Step-by-Step Tutorial
Learn how to build a day and night cycle system in RPG Maker using variables, events, and screen tint overlays. 💛
All RPG Maker EnginesBeginner Tutorial~50 min
Good news:
This system works with any version of RPG Maker. If you use MZ or MV, open the demo file and follow along.
Download here!
Let’s build this step by step!
We’re going to set up a fully functional time system that adds life and motion to your project ✨ You'll also learn how to create a real in-game clock and a clean time display to transition your world from dawn to dusk and beyond.
Seconds → Minutes → Hours → Days • Game Time Logic • Screen‑tint Transitions • Custom HUD
What events you’ll create
We will build exactly 3 events for this system (one-time setup):
1
Parallel event 'Game Time (Main)'
Handles Seconds → Minutes → Hours → Days rollover logic. This is the heart of your clock.
2
Parallel event 'Day/Night Tint'
Checks the current hour and applies the correct screen tint (Night, Sunrise, Day, Sunset, Evening).
3
Autorun event 'Pre-Set Time'
Sets the starting time (example: 12:00 PM) and applies the correct tint before gameplay begins. Then disables itself using a Self Switch.
Great tip: If you're just testing, you can place your events on a map first. Once everything works as intended, you can always move them into Common Events for multi-map projects.
Before you start
1
If you have MZ/MV
Open the provided demo file for your engine. The key event commands are placed in the top-left corner of the demo map for learning (one Autorun + two Parallel events). You can move them to Common Events later for multi-map projects.
2
If you use a different engine
Create the events manually in your own project. A clean way is placing the setup events in the top-left corner of a map first, then moving them into Common Events once you’re happy.
Part 1. Create the Game Time (Seconds, Minutes, Hours)
Use Variables + Conditional Branches inside a Parallel event to keep time ticking.
How time will roll over
60 Seconds: +1 Minute, reset Seconds to 0
60 Minutes: +1 Hour, reset Minutes to 0
24 Hours: +1 Day, reset Hours to 0
(Optional) 12 Months: +1 Year
60 Minutes: +1 Hour, reset Minutes to 0
24 Hours: +1 Day, reset Hours to 0
(Optional) 12 Months: +1 Year
1
Create a Parallel event: “Game Time (Main)”
Make a new event and set Trigger to Parallel. This event will run continuously and update your variables.
2
Create variables
Go to
Control Variables > Single Variable. There we'll create variables for: Seconds, Minutes, Hours, Days, and optionally Months, Years.3
Tick seconds
In your Parallel event, do:
Control Variables → Seconds → Add Constant 1Now Seconds will increase by one as the event runs.
4
Convert seconds into minutes
Add a Conditional Branch:
If Seconds ≥ 60 then: Minutes += 1, and reset Seconds like this: Seconds = 0. Now Minutes will increase every 60 Seconds.5
Repeat for hours and days
Do the same rollover logic:
If Minutes ≥ 60 then Hours +1 and reset Minutes. Then If Hours ≥ 24 then Days +1, and reset Hours to zero.
Optional challenge: Add Months and Years too, if you want to have seasonal changes or long-term events in your game.
Part 2. Time Display (so we can see it working)
First, we verify the variables update. Then we make a dynamic display that updates in real-time.
1
Quick test (recommended)
Place a simple object event (like a sign) and show a message using Show Text command that displays your variables.
\V[1] Seconds | \V[2] Minutes | \V[3] Hours | \V[4] Days | \V[5] MonthsPlaytest! Click a few times on a signpost. If numbers change, your clock is ticking:
25 Seconds | 17 Minutes | 12 Hours | 1 Days | 0 Months
2
Make the display update dynamically
Use a Dynamic Text Picture plugin (MV users: DTextPicture.js / MZ: TextPicture.js). Turn it ON in Plugin Manager, then: add a Plugin Command that defines your text, and use Show Picture without selecting an image.
3
Use variables inside the text
Example: Hours is variable 3, Days is variable 4, then write
\V[3] (or \V[003] to display it. You can also add color with \C[].
Important: Make sure to assign a unique number to each image. Each picture needs its own picture ID, or they’ll overwrite one another.
Snippet Guide
Click on the image below to see code snippets for Part 2 💛
3 images
Part 3. Smooth Day/Night Tint (based on Hours)
Now we make the world “feel alive” by tinting the screen depending on the Hour.
Suggested tint schedule
12AM to 5AM = Deep Night (0 → 5)
5AM to 8AM = Sunrise (5 → 8)
8AM to 6PM = Daytime (8 → 18)
6PM to 8PM = Sunset (18 → 20)
8PM to 12AM = Evening (20 → 24)
5AM to 8AM = Sunrise (5 → 8)
8AM to 6PM = Daytime (8 → 18)
6PM to 8PM = Sunset (18 → 20)
8PM to 12AM = Evening (20 → 24)
Steps (2)
1
Create a Parallel event: “Day/Night Tint”
Make a second Parallel event (or Common Event) that checks Hours and applies the correct tint.
2
Use conditional branches by hour range
Build five branches based on military time, where '0' is midnight and '18' is 6PM. Example:
If Hours ≥ 20 then Evening tint, Else If Hours ≥ 18 then Sunset, Else If Hours ≥ 8 then Day, Else If Hours ≥ 5 then Sunrise, Else →
Deep Night.
Pro Tip: Keep tint durations slightly longer (at least 30–60 frames) so transitions don’t feel harsh.
Part 4. Start the game at a specific time (like 12pm)
By default it starts at midnight. Let’s pre-set the clock and apply the right tint.
1
Create an Autorun event: “Pre-Set Time”
Set the event trigger to Autorun, set Hours/Minutes to what you want. For example, for noon (which is 12:00pm), set Hours to 12 and Minutes to 0.
Control Variables → Hours → Set 12Apply a Daylight tint so you don’t start with night colors.
Control Variables → Minutes → Set 0
Tint Screen: (0,0,0,0), 120 frames
2
Turn it off with a Self Switch
Add a new page conditioned by Self Switch A, and turn Self Switch A ON at the end, so the Autorun doesn’t freeze the game.
Important: Make sure to deactivate the Autorun event, otherwise it’ll loop endlessly and freeze the game.
Snippet Guide
Click on the image below to see code snippets for Part 3 & 4 💛
4 images
Part 5. Optimization (make it run smooth)
Parallel events can be heavy if they check too often. Let’s reduce unnecessary work.
Performance checklist
✔ Trigger events only when needed
✔ Minimize frame checks
✔ Use Wait commands strategically
✔ Minimize frame checks
✔ Use Wait commands strategically
1
Use a Wait command (60 frames = 1 second)
Our system now constantly checks if the ‘Seconds’ variable has hit 60:
If:Seconds ≥ 60 <-- drains resources and can slow gameplay down!Let’s fix that in two easy steps! First, change the check from 60 to 1 to prevent overloading the system:
Conditional Branch → Seconds → Set 1Won’t this make the game count seconds way too fast? That's right! If we stop here, the game will think each second equals a full minute. So that’s where a Wait command comes in!
Wait: 60 framesA simple Wait command at the end of your Parallel event prevents the engine from running checks 60 times per second. It keeps the system smooth without unnecessary processing.
Fun fact! If you skip the Wait command, time in your game will fly by at lightning speed! I found this exciting and used it in the Pro version to demonstrate the mechanics in action 😅
2
Same idea for the tint event
Your tint event is also Parallel, without a wait command, it can keep reapplying tint constantly (multiple times per second!). Add a Wait command at the very end of this event to limit checks and avoid draining resources.
Good to know In the Pro version of the system, I’ll show you how to create a Smart System that makes the screen tint to change only when the hour changes!
Snippet Guide
Click on the image below to see code snippets for Part 5 💛
2 images
Free extras! Make events react to time
Did you know? You can make your game world respond in so many fun ways!
Steps
1
Make Events React to Time
Make house windows open/close, lanterns light at night, fireflies appear, or set shops open between set hours.
2
Global Time
Apply time cycles to the world map with ease! Plus, learn how to adjust game time speed (fast-forward effect included as a fun mini-game!)
3
AM/PM Format
Set a beautiful custom HUD with 12-hour time display.
4
Freeze the clock
Pause Time during dialogue, cutscenes, or emotional moments.
5
Boost Performance
Even more smart optimizations and pro tips to keep your game running smoothly.
Want the upgraded version? The Pro version adds global time, custom HUD, time-speed control, and smart optimizations. Expand for free! Simply join the Anya & Lolo Club to get a special link sent straight to your inbox 💌
Go Pro for Free! 🎁
Ready to level up your RPG experience? Click on the image below!
Want to hang out? Join the
Discord
or follow us on your favorite platform below 💛
