On searching for rest timers in Godot, all I found were topics about timer reset. What I’m proposing is that timer modules be available as a default feature, for pausing all game elements and allowing the player to close their eyes and take rest. One of the reasons my eyes got badly strained is due to gaming, and I’m sure it happens to many others. The challenge is to make the timer aware of what is happening in the game. For example, it shouldn’t pause the game while the player is jumping over lava or right in the middle of a fight where a bullet is moving toward the player. There should be an intelligence in deciding when to pause, but it should happen at reasonable intervals of 20 minutes or so. For multiplayer games, it’s harder to synchronize pauses, but still can be done by presenting visual cues and audio cues, and putting some kind of protective shields over all players before the pause happens.
We are in a decade where the number of people succumbing to poor eyesight is increasing drastically. Don’t you think it’s high time we took concrete steps to build such safety features into games to save people’s eyesight? Normal vision is too precious a gift to ruin for the sake of gaining some entertainment and virtual points.
It’s a noble request, but aren’t people responsible for themselves? It is the same with everything else that harms you: Bad diet, smoking, alcohol, no physical activities, not enough sleep…
If I remember correctly, Guild Wars did: “You played for x minutes. Don’t you think it’s time for a break?” or something like this. That’s something I’d prefer
Most games (especially multiplayer) don’t really have the luxury of pausing. It would help to have it built into the game engine.
When I was a kid, my uncles and parents used to tell me to take breaks from the computer and TV, but I didn’t listen. I remember my eyes burning and watering, but I didn’t know the consequence would be myopia, further progression of myopia. Resting is not an option we need to give players. It has to be enforced with some degree of flexibility in timing, and also with correct advice given about how they should handle the rest break (closing the eyes for 5 minutes is one essential piece of advice).
“Aren’t people responsible for themselves” was pretty much the argument of car companies who initially resisted having seatbelts and airbags installed as a mandatory requirement.
I know it’s hard to accept such an idea because nobody else is doing it. It’s also hard for game companies to risk losing revenue and patronage by having such a feature which would take a player’s attention away from the game.
However, this is something that needs to be done.
I understand if y’all don’t want to consider this. It’d be hard to weave it into the game engine at this stage anyway. A point has been presented, and it’ll be here on this forum for anyone to consider in future, if you’d like to do something to help people heal and to prevent their eyes from being harmed. Without such a feature, kids and adults will just keep harming their eyes without realizing it.
The Godot engine is open source, developers would just disable it or make a fork without the intrusive design. Building into the engine will never be accepted because it can (and should) be done from scripts instead of a core feature, as you’ve stated designing the rest timer varies from game to game, so it’s impossible to know when every game should recommend a break.
Driving cars is a whole lot different from playing (or making) video games. @Flyde did list some bad, addictive examples like alcohol and smoking, but I think the other similarities are apt. Though turning your screen brightness down is an option to mitigate eye strain not found in other “bad habits”. There’s also blue-light glasses or that sunset screen color mode, point is work is being done on this issue, though I think both those examples are snake oil, it’s more options than we’ve had before.
It’s good to keep rest in mind, seeing the notifications on the Wii was always pleasant. I haven’t seen it on PC games myself.
@gertkeno I agree. However, the reason for posting this on a game engine forum, was with the hope that something could be done to eventually provide game creators with a way to pause a multiplayer game. My intention was to allow players to take rest, but I’ve seen posts even on the Unreal engine forum, where at least two people have asked about how to create a pause in their multiplayer game, so even without the “rest” objective, this seems like a feature that game creators need. It helps to build in such a feature to freeze all game elements reliably.
As of today, I understand there is fear that people would reject a rest feature. I would have rejected it too when I was a kid. But today, I wish someone had yanked me away from the computer whenever I used it too much. In the same way that Charlie Sheen said “if i could go back in time and have NEVER STARTED, i would absolutely do so”, after quitting smoking. I’m sure there is not a single gamer who enjoys being forced to wear spectacles or contact lenses or have lasik done on their eyes. They already know they shouldn’t be gaming too much. If we can slowly encourage gamers and game creators to be more accepting of in-game rest timers (because it’s for their own benefit), we could slowly bring about such a change, as we spread word.
An alternative to freezing game elements, would be to design games with levels or missions that can be completed in less than 20 minutes, and the player can be offered a break during the next level/mission’s loading screen. I know not all games can be designed like this, but I’m merely brainstorming here.
ps: I’ve been through a decade of chronic eye strain (not entirely due to gaming, but due to a combination of sleep loss and excess computer use and wrong spectacles prescriptions). I had to discard all the nonsense like the 20-20-20 rule, blue light, eye drops etc, to figure out what actually does cure the strain, and I found that only three things work: 1. Getting 8 hours of uninterrupted sleep each night. 2. Closing the eyes for around 5 minutes after every 20 minutes of strain. 3. Getting proper nutrition (a non-vegetarian diet helped give my eye muscles better strength and resilience). Even though I’ve recovered now, I’m pretty much crippled because of how severe the strain was, and due to age. I’ve come across many questions on the internet where people are struggling with severe eye strain, and they don’t know what to do about it. Let us please bring about a change in culture to encourage proper rest and sleep.
I mean, that’s not really an issue with missing features in the game engine, though? It’s more of a design question - if one player wants to pause, and the others don’t, what should happen? Of course, if it’s an enforced timer, then the game would pause for everyone - and I see no reason why it shouldn’t be possible to implement that using Godot’s built-in timer node and whatever system you’re using to implement multiplayer functionality already. The reason you don’t see more of it is probably what has already been discussed (players would find it really fucking annoying).
A more subtle way to introduce some “mandatory” pauses would be to simply limit the amount of content available. If there’s only 15 minutes worth of content for every 20 minutes, that puts in a natural break. Similarly for games where you have to queue to find a group of players or such - if there’s a queue of a couple of minutes, why, that’s a great time to go make a cup of tea or something.
Of course, regardless of how you implement your pauses, there’s nothing stopping the player from tabbing over to another window on their computer and continuing to strain their eyes.
Yes, that’s a good idea to design content for limited time and not have breaks right in the middle of the game. For longer games like Age of Empires, a mid-game pause would still be required. As long as the game engine can synchronize the pause well, it’d work. Perhaps something like having an audio notification and a slight dimming of the screen 10 seconds before the pause, and then 3 seconds before the pause the game slows down for all players (to maintain synchronicity, in case players are on different sides of the world) and then pauses the game. This would of course require the acceptance of players, and one way of creating the acceptance is to have little events or talks at gaming conferences/expo’s where avid gamers and game creators can be asked about how they’d introduce rest pauses or to share opinions on what they’d be comfortable with.
There’s nothing stopping people from getting into various bad habits, but over the course of a few decades, society has spread awareness of the ill effects of cigarettes, alcohol, drugs, etc. So even if a small part of the population chooses to abuse addictive things, a larger population will be spared from it and lead a healthy life because they were informed in advance and knew the consequences. We need to do this for gaming and even for office culture. To save people from permanently ruining their eyesight.
I think this is one of the most stupidest brilliant ideas I have seen in ages. Stupid is in I don’t think it has much of a chance of getting up, but, brilliant in what you are trying to achieve and the sincerity in which you approached the situation.
Now if I were you, I would flesh out this idea a little/maybe a lot more and then send it into the Gates Foundation, because, if you can get Bill Gates on board with this idea and the group that he is involved with, can’t remember the name of the group offhand, but, extremely powerful , then I could see it being implemented without much business interference at all, oh, there will be lots of moaning and groaning from developers, gamers, computer manufacturers, schools, console makers alike, but, good on you for thinking outside the box. I really love the idea and see this as eclipsing Doltary, Inequity and Exclusion (DIE) and becoming the next big thing in gaming.
Double thumbs up from me
Here’s a tscn file that works all right, adding it as a Autoload means you can call BreakTimer.check_and_prompt_break()
in any script to pause the game and display a short message encouraging a break, if it’s been 20 minutes since the last break or game start.
[gd_scene load_steps=5 format=3 uid="uid://bli6ixmgqfdg5"]
[sub_resource type="GDScript" id="GDScript_tk1kn"]
script/source = "extends Control
@onready var timer: Timer = %Timer
var previous_pause: bool = false
signal back_from_break
func _ready() -> void:
hide()
func check_and_prompt_break() -> bool:
if timer.is_stopped():
$AnimationPlayer.play(\"show\")
previous_pause = get_tree().paused
get_tree().paused = true
return true
else:
return false
func _on_button_pressed() -> void:
$AnimationPlayer.play_backwards(\"show\")
back_from_break.emit()
await $AnimationPlayer.animation_finished
get_tree().paused = previous_pause
timer.start()
"
[sub_resource type="Animation" id="Animation_tqb0g"]
resource_name = "show"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(0.5, 1),
"update": 0,
"values": [Vector2(0.1, 0.1), Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [false, true, true]
}
[sub_resource type="Animation" id="Animation_x8men"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_g80c1"]
_data = {
"RESET": SubResource("Animation_x8men"),
"show": SubResource("Animation_tqb0g")
}
[node name="PanelContainer" type="PanelContainer"]
process_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -0.5
offset_right = 0.5
grow_horizontal = 2
grow_vertical = 2
script = SubResource("GDScript_tk1kn")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Chill out, Take a break?"
fit_content = true
[node name="Button" type="Button" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
text = "OK, I'm back!"
[node name="Timer" type="Timer" parent="MarginContainer/VBoxContainer"]
unique_name_in_owner = true
wait_time = 1200.0
one_shot = true
autostart = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_g80c1")
}
[connection signal="pressed" from="MarginContainer/VBoxContainer/Button" to="." method="_on_button_pressed"]
gertkeno: Thank you so much. It’s very encouraging to see how the break can be introduced.
celticknight: I appreciate the brutal honesty. This is exactly how people should get talking about this. The topic is nothing new. It has actually been discussed a lot and there are several research papers on the negative effects of gaming for long hours. I had even got in touch with a prominent person in the gaming industry, but she politely sidestepped and suggested I should discuss this with game designers. In the past 20 years, not a single ophthalmologist I’ve been to, has asked about my sleep sufficiency or rest. Prescribing new spectacles and eyedrops were the only suggestions. I also see a good amount of hype or encouragement to try larger monitors and blue light spectacles, like as though it’s a solution. People aren’t being led to the correct solution, which is simply that (one of the reasons) the eyes are strained because various eye muscles are fatigued. The only solution for that fatigue is to take rest. It’s free of cost. At least in workplaces, people have started taking periodic rest. But even there, some misguided corporate leaders are trying to enforce a 70 hour work week. From anyone who has a profit motive, I believe there will be a strong resistance toward getting proper sleep/rest and avoiding myopia. This is why it needs to be a community initiative. People need to start taking care of themselves and others they care about. Perhaps one way to start, would be for gamers who are already suffering from strain, to start taking proper rest and getting proper sleep and see how they improve. They can then make this a talking point with anyone they meet, and convince them to do what it takes to heal too. Rather than long hours of gaming being seen as “cool”. Avoiding health issues should be seen as “cool”. When I speak of enforcing rest timers, the intention is not that an industry big-wig or the game engine enforces it. The players should enforce it onto themselves. When they join a game server, they should take a collective decision as to what extent of time they want to continuously keep gaming, and what duration they’d like to rest. The game engine or game should merely have a feature that allows setting these limits.
Incentive to rest: 1. Whenever I’ve taken breaks from long strategy games, I’ve found it very useful to think about alternate strategies during the break while my eyes are closed, which would’ve been difficult to think of, in the heat of the battle. 2. The rest breaks obviously help with toilet breaks. It was interesting how poker was designed such that James Bond (in Casino Royale) could take a break while poisoned, and return to the game and still win.
For people who have a constant soreness around the eyes even when not using computers, you’ve likely entered a chronic stage of strain, which will take many months of proper sleep and rest to recover even if you don’t use the computer daily. I’ve been through it, and recovered. It took almost a decade to recover, because of all the misinformation and lack of a support system in companies. I’ve realized that in the face of competition, people don’t really know what to do to create an environment that’s free of eye strain. This needs to change with baby-steps of encouraging proper rest and sleep, and like how gertkino took a step toward building a script.
Your knowledge of Godot and programming far exceeds mine, so, I am not going to pretend that I understand much of what is going on in your code, but, as I finish up my current project very soon, I am going to see I can get this working - I really like the idea of encouraging people to take breaks for the sake of their eyes, especially people like me who will never again have 20/20 vision EVEN with the use of glasses.
Thankyou for producing this code, and doubly thankyou, when I get it working in my current project .
- Slainte agus tainte.