One Hour One Life Forums

a multiplayer game of parenting and civilization building

You are not logged in.

#1 News » Update: Community Joy » 2026-08-21 14:54:07

jasonrohrer
Replies: 0

1ni4uwL.png

First, the new feature in this update:   anyone can now type /NOCHAT in the chat box to disable chat at any time, and /YESCHAT to re-enable it.  When toggled, /NOCHAT mode will replace all player-generated text with X's.  Thus, you can still see that people are talking (like you can see a hungry baby asking for food), but you can't see what they are saying.  With /NOCHAT, your own chat still goes through and is seen by other players (though even that will be replaced for you with X's as you see it above your own head).  This also applies to DING messages, which can sometimes contain player-generated text from leaders.

The /NOCHAT feature is an extension of the older /BLACKLIST feature, where you could block certain words and replace them with X's.  /NOCHAT essentially blacklists every word.

For concerned parents, here's where things get interesting:   you can also type /NOCHAT MYSECRETPASSWORD, and then after that, /YESCHAT won't work unless you type /YESCHAT MYSECRETPASSWORD.   These passwords are scrubbed from the Up Arrow chat history, so your child won't be able to see them.   Thus, if you'd like your child to play One Hour One Life, but not risk them reading any text written by internet strangers, you can now block chat for them permanently.  I've talked to some parents who play online games with their kids, and they often just turn chat off completely.  Now you can do that in One Hour One Life.

Okay, so that's the new feature.   But the fun and joyful part of this update is the long and winding story of how we got to this point of even needing a /NOCHAT feature.

Let me tell you about a guy named Ian.

Ian has been playing One Hour One Life for 8 years, since 2018.  At first, he was just like any other OHOL player, enjoying the game, participating in the community, and even submitting very helpful and thorough bug reports on Github.  At some point about four years ago, for reasons that I don't fully understand, he switched gears and made it his personal mission to ruin the game for everyone.  He became the most troublesome and notorious griefer in the history of the game.  Every serious OHOL player knows his name.

For many years, OHOL has had a curse system, which is a way for players to say, "Hey, I don't want to play the game with you anymore."   You had a somewhat limited supply of curses, and when you cursed someone, it originally prevented them from being born near you for a few weeks.   It was your own personal blacklist, allowing you to express your own preferences about the kind of behavior you liked and didn't like from other players in the game.  In general, this worked pretty well.

However, what happened if you bothered lots and lots of people?   Eventually, you were cursed by pretty much everyone, and then you couldn't be born near anyone, and then there was nowhere for you to be born at all.  In that case, you were spawned 200 million meters away in a lovely place called Donkeytown, where you could play with the other donkeys who had also been bothering everyone.

And guess where Ian ended up after not too long?  He rode first class on the Donkeytown express.  But did that stop Ian from bothering people?  No, it did not!

You see, your curse status is tied to your account, which is based on either your email or your Steam ID.   How hard is it to get a new email address?  Not too hard, it turns out!

And Ian got a boatload of new email addresses, and used them to purchase dozens of extra accounts.  Each new account had a blank slate, with no curses at all.   He could escape from Donkeytown and go right back to bothering people.  Meanwhile, his Donkeytown accounts were waiting in the wings for their curses to expire after a few weeks, and then he'd go right back to using those.  Rinse and repeat.

Over time, I ratcheted up the expiration time on curses, eventually settling on five years, which in the context of the game is essentially "forever".  This put an end to Ian cycling through accounts, but it didn't stop him from buying new accounts, and buy new accounts he did.

At some point he realized that it was better to buy new accounts on Steam, when the game was on sale, and to exploit some outdated pricing in certain third-world countries that had experienced recent currency crashes.  If you waited for the right moment, you could buy the game on sale in the Philippines for $2 US.   By using a VPN to evade region locks, Ian created dozens of fake Steam accounts, each with a fresh copy of OHOL ready for a brief stint of unbridled griefing before it got cursed by everyone.

Even better, Steam's generous refund policy made this process even more viable.  You could refund with less than 2 hours of playtime and less than 14 days of ownership.  Furthermore, by buying the game on Steam, but launching it outside of Steam, you could trick Steam into not counting your hours of play.   Which meant you could play for hundreds of hours over 14 days and still get a refund from Steam.

So now Ian was essentially getting unlimited free accounts, through Steam's refund policy, to keep griefing without cost.

All told, between Ian and the other griefers who were helping him, we're talking hundreds of accounts.

Still, people were cursing each new account when it caused trouble, which helped to limit the damage somewhat.  But the idea that "this person won't be born near you" is a small comfort when the griefer in question is so determined.   Ian was known to travel for 8+ hours in-game to reach a long-distance target for his harassment.

Eventually, Ian also started using multiple accounts at the same time, essentially having a bunch of zombies running around helping him swamp the various voting systems in the game.   He would spawn 10 of these dummy accounts into a town, vote himself into the leadership role, and then exile and kill all the real members of the town.

Once it escalated to this point, where he was no longer just bothering people and getting sent repeatedly to Donkeytown, but also effectively conducting a distributed attack against the game's servers and systems, I realized something more serious needed to be done.   The curse system was effective over the long term (as everyone eventually got bothered and cursed a given account), but that collective action couldn't act swiftly enough to deal with this endless barrage of trouble.  It was also exhausting for the player community to keep cursing account after account.

I eventually granted special powers to a small group of long-time community members, headed by the venerable Tarr.  These vigilant watchdogs had one mission:  identify and tag all of the extra accounts used by Ian and the other griefers.   Without waiting for the community to collectively notice them, these accounts could be sent instantly---and permanently---to Donkeytown.

These watchdogs have been active for about three months, and during that time, they have identified and tagged over 140 accounts.  This has dramatically curtailed the troublesome activities of Ian and the other serial griefers.

For minor disagreements on playstyle between individual people, the existing curse system works fine, and we generally don't need in-game "rules" or "moderation" to solve every little dispute.   But the curse system was not sufficient to deal with a determined group of attackers who were using over one hundred accounts.

Okay, so, problem solved, right?  Happy ending?

After all these years of determination, do you think the tale of Ian would really end there?

There's an obscure feature of the OHOL crafting tree where you can mix photo chemicals from scratch, using actual real-world steps, and make photo paper.  You can also make a primitive camera through a combination of carpentry, black paint, glass blowing, weaving, and metal tempering.  After that, you can use each piece of light-sensitized paper to snap one photograph in-game (which comes out initially as a negative, of course), then dip it in fixer to make it permanent.  After that, you can make a contact print to create a positive image.   If you go through this process, the photo object that you create in-game can be viewed by anyone when they pick it up.  Even cooler, these in-game photographs appear in a visual log on the OHOL website.   This photography feature was introduced back in 2019, and you can read about that here:

https://onehouronelife.com/forums/viewtopic.php?id=6188

Over the past 7 years, more than 6000 photographs have been taken, which is a staggering number, given how difficult photographs are to take in-game.  Many of these photos are beautiful and touching---lingering artifacts depicting the in-game world as it used to be.  You can browse through all of them here:

http://photos.onehouronelife.com/server … front_page

To understand the next part of this long and winding tale, you need to understand a bit about the tech behind the photos.  The server for OHOL only knows about objects and the interactive relationships between them.  It doesn't need to know about what those objects look like.  Thus, the server doesn't deal with sprites or textures.  The client uses sprites and textures to render a visual representation of the map and object data described by the server.   The fully-composed game image only exists client-side.  This means that to snap a photograph in-game, we somehow need to trust the client to generate this image, and you can see how this might lead to problems.  First of all, what if people just uploaded random junk images to the photo server---images that weren't even taken in-game with the real camera?   I blocked that possibility by having the server generate a signature when it believes you are actually taking a photo (because you have actually crafted a camera and actually used it).  It sends this signature to the client, and the client sends this signature to the photo server.   Thus, every photo submitted must correspond to a real, in-game photography action that happened for real on the game server.   Furthermore, this signature indelibly ties the photograph submitted to the account that took it.   So yes, someone could mod their client to submit weird images, but at least they would be limited (they'd have to craft photo paper each time), and the bad images would be linked to their account.

Seven years went by without anyone submitting a bad, non-game image through a modded client.

About three weeks ago, Ian and the other griefers realized that you didn't even need to fully mod the client to submit bad images.  You could just replace the in-game ground texture with an image of your choice, and then snap a picture with that part of the ground in the frame.   Given that you were taking a real photo according to the server, the client would just snap a picture of this modified ground texture and upload it, and the photo server would accept it and post it to the website.

And guess what Ian and friends submitted in their first batch of modified images?  Swastikas!

Of course, I quickly removed these images from the photo server and banned the account in question.

At this point, I was pretty much out of options.  I had spent hundreds of hours dealing with this one guy named Ian.  I had programmed whole new systems just to deal with him.  I had appointed a team of volunteers to deal with him.  And now he was gracing my home page with Nazi images.  The only way to stop more images from being posted was to disable the photo feature entirely---which was one of the most beautiful and touching aspects of One Hour One Life.

Community lore was that Ian was a kid when he started playing OHOL, but that he was an adult now.  He apparently still lived at home, and had no job, which is what gave him so much time for such an endless streak of determined trouble-making.

He had bought something like 20 accounts off-Steam through my payment processor FastSpring, and he had used his real name and home address for several of these accounts.  Of course, if he really was living at home with no job, this probably wasn't HIS house or HIS money or even HIS credit card.  It was likely his mother's!

So, after all these years, and all these wasted hours, I decided to call his mom.  Yes, for real.  I called his mom.

This was one of the strangest phone calls that I've ever had to make.

She answered right away.  I explained that I was a game developer, and asked her if she was Ian's mother.  She immediately said, "Oh no, what has he done now?"   When I mentioned that I made One Hour One Life, she (of course!) knew all about the game.  But she didn't realize Ian had used her money to buy so many accounts, and she didn't understand how much trouble he had been causing with Nazi images and all the rest.   She said she was going to talk with him, and she thanked me for calling.  She said I could call her any time if he was still causing trouble.

I was hopeful that things would calm down for a bit after this. 

Then, about three days later, a new batch of images was submitted.  More swastikas, but now we had little OHOL characters in modified SS officer hats standing around at salute, complete with big cartoon erections.   We also got an image of Hitler's face in the mix.

It seemed like these might have been posted by Ian's griefer friends, and not by Ian directly.   Again, I removed the images, and banned the account.

Then, a few days later, another batch of images.   This time a photo-shopped image of me standing arm-in-arm with Trump and Epstein (I vehemently deny having ever been to that island), and another image featuring a bomb dropping onto the roof of my actual family home, complete with text showing my home address and making various threats.

3MyG6K9.jpeg

These.  Guys.  Just.  Won't.  Stop.

Of course, banning these three accounts did nothing, because they were all brand new accounts that were created the same day the photos were taken.  They've already gotten their refunds from Steam, and they can get more accounts, and post more photos, tomorrow, and the day after, and the day after that.

In general, players have the power to remodel and remove everything in the game.  Apparently Ian and pals also build buildings in the shape of swastikas, but players tear down those buildings.

There's one permanent bit of content that can't be removed, however:   the statues that are left behind, commemorating each player who rode the rocket.  These statues are engraved with the player's last words before flying away.  And can you guess what Ian's last words are, when Ian rides the rocket?   There's his permanent message, for all to see, on his statue.

I eventually decided to remove "last words" messages from statues entirely to solve this problem, but it was a sad decision to make.

Was I going to have to remove the photo feature completely, in a similar way?

After all these years, and all these failed attempts, it finally dawned on me:  there is only one way to stop all these extra throw-away accounts, and that's TIME.

Online communities have been plagued by trolls, spammers, bots, and other trouble-makers for decades.  "Prove You Are Human" challenges, it turns out, do nothing these days, because even the spam "bots" are humans.  Thus, most online communities have actual humans sifting through and removing the junk on a daily basis.  It never ends.  It just keeps coming.  Every day.  For the rest of your life.

The OHOL Discord community was plagued by this for years.   Banning accounts on Discord does nothing, because you can get a new Discord account for free, and use a VPN to bypass IP bans.   The moderators banned over 800 accounts through the years.  The vast majority of these were alt accounts of people who had already been banned.  What a colossal waste of time.

I had similar problems on the Discord community for my Project Skydrop treasure hunt.  There was a members-only chat area, only visible to the people who had joined Project Skydrop for $20.  But the general public area was a seething mess of spam and inappropriate posts.   After a short while, I closed the public area entirely, and the entire Skydrop server became paying-members-only.  The problems went away instantly.   When people have something to lose, they don't cause trouble.  I think in the entire history of Skydrop, I only needed to ban one or two people from the Members area.

Back in April of this year, I applied a similar system to the OHOL Discord:   in order to join, you had to prove that you owned one of my games on Steam.  Steam makes a handy API for checking ownership.  This worked pretty well, dramatically decreasing the rate at which banned troublemakers were returning with alt accounts.

However, as we've already seen, the most notorious troublemakers already have dozens of copies of the game on Steam.  So the most determined people kept coming back over and over.  Furthermore, they are using the old Steam refund trick to prove ownership again and rejoin without cost.

But how do you tell the difference between a REAL PERSON and the alt account of a known trouble-maker?   What differentiates them?   The answer turns out to be pretty simple:  TIME.

And the mods had already been doing this manually when trying to detect alt accounts.  They'd check out how long the person had been a Discord member.  Brand new alt accounts, created just to rejoin, were usually about one day old.   How many real people, who are active on Discord, have only been Discord members for one day?  I've had my account for 8 years.  I bet you've had your Discord account for years too.

So just require that people who join your Discord have been Discord members for at least 6 months.   Real people come right in.  Throw-away alt accounts are completely blocked.  Banned people stay banned.  Problem solved.

And we can do a similar thing to curtail the Steam refund loop:   require that people have owned the game for at least 15 days.

In the case of taking photos in-game, I currently limit that to people who have owned the game for one year.  If your account is too new, you get a helpful arrow leading you toward a veteran who can help you take a photo.

And if you want to waste your year-old account posting a bad photo, I'm happy to remove the photo and ban your account, but at least you'll be paying for my speedy customer service with your money and your time.

It's so strange to me, to be beating my head against a problem for eight long years, trying everything under the sun, and there's a simple, bullet-proof solution staring right at me the whole time.

Of course, getting this set up on Discord required some pretty complicated bot programming on my end.  This seems like something Discord should offer by default:   a simple requirement that new members to your server have had their Discord account for at least X months, where you can set X to whatever you want.  Currently, you can just require that they've had Discord accounts for at least 5 minutes.   If you know someone at Discord who could affect this change, please pass my contact info their way:

jasonrohrer AT fastmail DOT fm

We could collectively save millions of hours of wasted moderation effort with one simple change on Discord's end.

With these systems in place, things are finally calming down a bit.  No more need for constant Discord moderation.  No more bad pictures on the photo server, at least for the time being.  Meanwhile, Tarr and his crew continue their diligent in-game work.

Neither snow nor rain nor heat nor gloom of night stays these couriers from the swift completion of their appointed rounds.

#2 News » Update: Only Friends » 2026-05-10 17:15:23

jasonrohrer
Replies: 23

3ICqSC2.png

Several big changes in the face of griefing and bot accounts.

First, human-caused wounds (from knives and arrows) can no longer be healed.  There are several vestigial systems in the game around killing, left over from previous solution attempts.  The original idea was that killing would always be necessary in this game, because how else are you going to deal with people who are bothering you and just won't stop?  The hope was that the good guys would outnumber the bad guys.  But the insta-killing in very early versions of the game was still too abrupt, so healing was added, which further helped the good majority overcome the bad minority---there was safety in numbers, and the good guys could heal each other, while lone griefers would go unhealed.  Eventually a posse system was added, and then a leadership and exile system, to make sure any killing that took place involved group consensus.  These days, it's mostly griefers getting killed, which is good, but that means healing only helps griefers, who often work together in teams, healing each other as the larger group of good guys tries to get rid of them.  So, that kind of healing has been removed.

The leadership system---which allows a bad actor to be exiled so that they can be killed---generally works, because it's hard for bad actors to become leaders, since who would pick them?   However, when a bad actor is using a bunch of extra dummy accounts, they've been able to essentially stuff the ballot box and force themselves into power, after which they engage in indiscriminate exiling and killing.  Griefers buy new accounts constantly to serve this purpose, which means that these dummy accounts can be thwarted by restriction leader picking to older, more established accounts.  Legitimate new players aren't engaging with the leadership system at first anyway.

And the same problem occurs when griefers use a bunch of dummy accounts for cursing, so cursing has been limited to older, more established accounts.

And finally, for as long as this game has existed, people have tried to play alone or with small groups of friends.  Historically, the higher-numbered servers---the so-called low-pop servers---have been used for this purpose.  More recently, people have figured out that they can use the (very rare and precious) ghost ability, left over from several Halloweens back, for this purpose.  Ghosts, being immortal, can walk very far away from mainline civilization and set up hidden private villages.  Of course, all these methods of playing privately aren't really private, which means they can be targeted by griefers.  Most recently, griefers have been acting like self-styled ghost hunters.  Some people just want to be left alone.

Over the years, I've thought about various possible affordances to help these people play privately.  I have considered paid private servers, and even spin-off games like One Hour One Hermit and One Hour One Tribe, but in polling players, there was never enough interest to make setting these things up worthwhile.

Meanwhile, the higher-numbered servers aren't free to operate, and I've burned thousands of dollars of the past 10 years on servers that are almost always empty.

Enter the new Friends-Only server, which allows you to play privately, either by yourself or with a group of friends.   This sever leverages twin codes, which are used on the other servers to get born together as twins, triplets, or quadruplets, but the Friends-Only server now uses those same twin codes as Friend Codes to do two special things:

1.  If you are the first person currently connecting to the server with a given code, it maps your code to one of a trillion unique locations in the server world map, and spawns you as Even in that specific, special-to-you location.

2.  If other players are already alive on the server with that code, you get born into their family.

So there you have it, private villages, as long as you keep your friend code a secret.   In fact, you can have as many private villages as you want, just by changing your friend code.  There are a trillion locations available, so we're never going to run out.  Each player can have a million private villages if they want.

But wait, you might ask, won't griefers find these private villages anyway, if they're all on the same server?   Yes, that's possible, but it's also extremely unlikely.  Remember, the server map is huge---more than 50,000 times bigger than earth.  It is 4 billion tiles wide by 4 billion tiles tall.  The chances of two private villages being within a million tiles of each other is 1 in 5 million, and we expect to be able to place 2500 private villages before any pair of villages is within a million tiles of each other.   It takes something like 20 hours to travel a million tiles at the fastest travel speeds, and also remember that we're not just talking about straight-line distance.  If a village is within a million tiles of you, you are searching a circle with a radius of one million, which actually has 3 trillion tiles in it.

And yes, ghosts tried to do this on the main server by walking far away from civilization, but they could only walk so far themselves, and the main server also has public map logs available, so their hidden activities could be observed over time.   The friends server has no public logs.

Okay, so how do you join this friends-only server?   First, you need to look in your SETTINGS screen and set a custom server address for friends.onehouronelife.com like this:

uvv8jmM.png

After that, go to the FRIENDS screen (the same one you'd use for twinning), type or generate a unique code (there's no limit on length, type whatever you want as a code), and then use the brand new SAME FAMILY option, like this:

MHVYVqK.png

LOGIN from the FRIENDS screen, and you're off to the races.

#3 Re: News » Update: Last Hunt Event » 2025-12-10 19:58:41

A few people have emailed me about their travel plans to look for the golden object hidden in the woods in real life.  I will post here what I've been telling them, so that everyone knows:

Don't book anything until you are 100% sure exactly where the treasure is.  Once you solve it, there is no ambiguity or guessing or wandering around involved.

#4 News » Update: Jason's Rocket Ride » 2025-11-11 23:18:24

jasonrohrer
Replies: 5

wvEWbUy.png

All logged bugs and issues have been fixed.

I first started working on this game more than 10 years ago.  My first commit, on May 28, 2015, bears the message, "Got basic client skeleton in place.  It compiles, runs, pauses, and quits without crashing."  No crashing!  Sounds like I was off to a good start.

146,000 lines of code and over 3.5 million in-game player hours later, here we are.  With something like 25 servers coordinating behind the scenes to keep things running, One Hour One Life is a massive, sprawling city of a solo engineering project.  With so many moving parts, it's a miracle that this house of cards works at all, but somehow, it does.  According to my records, the main game server hasn't crashed since July 2024, and it's been running steadily since the last update in January of 2025.  That's 10 months of continuous uptime, during which players made something like 200 million changes to the persistent map.

Along the way, I processed and fixed over 2000 reported bugs and issues.  There were something like 100 issues in this most recent batch, which was itself quite a mountain to climb.

But I'm turning 48 on Friday, and I'm not going to spend the next 10 years of my life working on One Hour One Life.  It's time to make a new game, before my time of making games runs out.  I fancy making something a bit smaller and simpler for the next one.

Of course, I will continue to keep the servers running and fix showstopping bugs as they're discovered, for as long as I'm alive and able.  For the most part, the servers run themselves, but every once in a while, there's a fire that needs putting out.

One last little token before I go:  over 300 people have ridden the rocket to Another Planet, which was always meant to be a "You Won the Game" moment.  Now they will each be immortalized, hopefully forever, as long as the servers keep running.  Maybe if you can get 146,000 lines of C code to compile in 2125, there's a chance at forever.

And lastly, over the next few days, I'll be getting born in the game as a baby and trying to build and ride the rocket myself, as one final salute.  No cheating with VOG or other funny business---I'm going to build the rocket for real.

I may even spawn as your baby at some point, and it will be up to you to take care of me.

#5 News » Update: Last Hunt Event » 2025-10-31 18:19:48

jasonrohrer
Replies: 1

rB9Utr5.png

Last he rode four years ago
One more haunt before the snow

Spun in long lost tales of old
Secret hidden ounce of gold

Find it and it's yours to keep
Sunrise he'll forever sleep

SlDphpj.jpeg

#6 News » Update: Personal Blacklist » 2025-01-13 23:56:18

jasonrohrer
Replies: 0

BXRmAaS.png

People have been asking for some kind of censorship around bad words in speech for a long time.  I don't want to censor things globally, and even if I did, it would be a never-ending arms race as people figured out cl evv er ways to bbbb y pass my f il ter s.  Since everyone would be seeing the same filters, it would be easy for trolls to test them repeatedly to see what tricks can allow words to slip through.

For those people who are tired of seeing bad words in-game, I'm instead putting the power into your hands.  You each have your own personal word filter now, which you can populate as you please.  And since no one can see the results of your word filter but you, trolls won't be able to figure out tricks to bypass your personal list.

You can add the word DOG to your list by typing /BLACKLIST DOG into the speech box.

If you do this, SHAGGY DOG will become SHAGGY XXX.

However, HOTDOG will still look like HOTDOG, and DDOGG will still look like DDOGG.

If you want to censor DOG in all its forms, use /BLACKLIST !DOG, with an exclamation mark in front of DOG.  Then HOTDOG becomes HOTXXX and DDOGG becomes XXXXX.  Also, D O G will become X X X.

If you ever need to clear things out of your list, you'll have to roll up your sleeves and dig into the settings folder.  wordBlacklist.ini is the file you will need to edit.

Have a good XXXXXXX evening, folks!

#7 Re: Main Forum » How tool decay will work in the update » 2025-01-13 23:30:31

Well, the interesting thing about all the "tweaks" to loot drop probabilities is why they are needed in the first place:  variance.  If you want an item to be very rare, and only drop 1/500 kills, if you roll a D500 to determine when it drops, the variance is going to be huge.  In fact, standard deviation in that case is +/- 499.  And in terms of "grinding".... well, the average player has to kill 500 monsters to get the item, but a good portion have to kill 1000 to get the item.  And yes, lucky ones will also get the rare item after only a few kills, but... that also kinda breaks the game for them, and it doesn't help to make up for the horrible experience that other players have when variance breaks the other way.

So you implement "bad luck protection" and all the rest.  Which, by the way, only deals with bad luck.  It doesn't help smooth out godlike luck, which is just as much of a problem when variance is high.


But if you could simply control variance in the first place, you wouldn't need other tricks.

Obviously, SOME variance is okay.... since you don't want players simply counting up to 500 and seeing the rare item drop like clockwork.  But what if you thought +/- 499 was too big, and you wanted to try 500 +/- 250?  Or 500 +/- 100?  So the lucky players get it in 400 kills, and the unlucky ones get it in 600 kills?

I've never heard anyone talking about specific methods to control variance in loot drops, as a parameter.


If you implement it with Markov Chains instead of just weighted coin flips, you can control variance precisely.

For example, if you want the average drop to happen in 500 kills, with standard deviation of 100, I can plug those values into my formula here and tell you that you can have a chain with 24 hops in it, and 1/21 chance in going on to the next hop for each kill.  Your EV is then 504 kills, with a standard deviation of 100.4 kills.

On the other hand, if you wanted 500 kills +/- 50 kills, you could have a chain with 83 hops in it, with a 1/6 chance of going on to the next hop for each kill.  This gives you an EV of 498 kills, with a standard deviation of 49.9 kills.

The other cool thing about this is that when testing, you can force yourself to play as the "average" player by putting variance temporarily to 0, and taking luck out of the picture.  Then you can see how it actually "feels" to be the average player.  Later, after you're done testing, you can reintroduce whatever variance you want.

For example, it might be that 500 kills on average to get the rare item is way too long.  But it's normally hard to feel this when testing, because sometimes you get lucky, etc.

#8 Re: Main Forum » How tool decay will work in the update » 2025-01-10 21:19:21

For future reference, this ends up being a Pascal random variable.  We're waiting to hop through all n states, where we hop between states with probability p.  Our expected value, for number of hops before we reach the end, is:

 n / p 

And our variance is:

 n * ( 1-p ) / ( p^2 )

https://www.probabilitycourse.com/calculator/pascal.php

If we want to hold our expected value constant---say we want an axe to last 100 swings on average---than we can vary n and p to achieve this while changing the variance.  Obviously, p can never be greater than 1, which means that n can't be greater than the average we're trying to achieve.

But as n goes up while our expected value remains constant, p must go up as well, and our variance goes down.  It's pretty amazing how much control this gives us over variance.  For example, we can have 98 hops, and p = 0.98, and our expected value is still 100, but our variance shrinks to 2.04.

This is also like a simple Markov chain, where you have n nodes, and each node only connects to the next node or itself, and we're asking how long it takes before the final node is reached.

In revisiting this today, five years later (wow!), I couldn't find anyone else discussing this method of controlling variance for game events, like for loot drops, and so on.  I also didn't realize, at the time, that the result is a Pascal random variable---at least in terms of measuring "how many steps until" the event happens.

For loot drops, you might be interested in how many drops occur in a given number of total steps (like if a monster drops an item 1/100 times, and you kill 1000 monsters, you expect 10 items, but this is a Binomial distribution, so the variance is 9.9.

With the Markov chain implementation, you can vary chain length and probability to keep the 10 item average while reducing variance, but it's not clear to me how to calculate the resulting variance.

#9 News » Update: Town Launch » 2024-05-11 18:09:52

jasonrohrer
Replies: 1

Qr68P72.png

Launch pads must now be built in populated areas, with coordinates discovered from the remote orbital alignment location.  This brings rocket-building home, returning it to to community endeavor that it was in the beginning, while still limiting rocket launches to once every five hours.

There have also been many fixes and improvements to the Editor, based on feedback from the Another Planet content team.

#10 Re: News » Update: End Game » 2024-05-04 13:07:49

I'll think about adding a way for you all to see how many people have reached AHAP....

#11 News » Update: End Game » 2024-04-26 18:01:43

jasonrohrer
Replies: 5

7Ss0u7N.png

All pieces are in place now for the One Hour One Life end game.

You can build a rocket inside OHOL.  And coming full circle, you can listen to Tom Bailey's amazing music when you do.

You can ride that rocket to Another Planet, which gives you a Steam Key to let you into the beta test of this exclusive new, unreleased game.

https://store.steampowered.com/app/2787 … er_Planet/

After gaining access to Another Planet, you can specify your own Github account name, and you can also vote for a Content Leader using their Github name.

The Content Leader has full Push access to the AnotherPlanetData Git repository, and the ability to push changes live to the playerbase.

The Export functionality makes it easy for people to collaborate with the Content Leader, submitting sprites, objects, animations, and sounds.

All contributions to Another Planet are tagged with an authorship hash.

When Another Planet is finally released for sale, in February 2026, authorship tracking will be used to divided 60% of the first year's revenue among the players who contributed content to it, based on the portion of the content that each person contributed.

But most importantly...  you can now build a rocket.  A rocket!

#12 News » Update: Launch Prep » 2024-04-21 21:19:14

jasonrohrer
Replies: 1

Hi4TWr7.png

All of the remaining infrastructure for Another Hour Another Planet is in place now.

It is now possible to ride the rocket inside One Hour One Life, leave the planet, and gain access to Another Hour Another Planet via a Steam Key and an off-Steam download link.  And once you're playing on Another Planet, it's also now possible for you to specify your GitHub account name, and to vote for the current Content Leader.  The current Leader is automatically granted Push access to the anotherPlanet data repository on GitHub, and that access is removed whenever they leave office and are replaced by someone else.

All of this stuff has been tested on my end, and seems to be working.  But I need you to help me test it more thoroughly.

Starting on Monday, I will be making surprise VOG appearances in the game, and placing test launch pads for people to use.  By triggering these launch pads, they will be able to ride the test rocket, gain access to Another Planet, and help me make sure that all of this infrastructure is actually working correctly.

The last thing to do, for me, is to actually draw the rocket, and flesh out the tech tree changes that will make constructing the rocket possible.  Currently, the rocket features place-holder art, and it's currently uncraftable, except by me in VOG mode for testing.

#13 News » Update: Fast Download » 2024-03-15 20:39:46

jasonrohrer
Replies: 2

irdWmLz.png

I've been working on the infrastructure for the Another Hour Another Planet endgame, and the various pieces are coming together.

There are now two AHAP servers running, which you can see here:

http://onehouronelife.com/ahapReflector … ion=report

These are live and playable with bare-bones placeholder content, which is being managed here:

https://github.com/jasonrohrer/AnotherPlanetData

Eventually, the elected Content Leader will be able to edit and add to the content in this repository, and then make it live using this update trigger interface:

http://onehouronelife.com/ahapUpdateGate/

The general idea is that the community will make content (sprites, objects, sounds, and animations) and the submit it to the Content Leader as OXZ export bundles.  The Leader will then choose which content to accept and integrate it into the master content tree, which is being maintained on Github.  Once an "update full" of content is ready, the Leader will be able to push it out to the AHAP servers and players.

Off-Steam, One Hour One Life has always used its own custom-built update-downloading system.  But elements of that system are going to be exercised heavily by all AHAP players in the future---even Steam players---since that's how user-generated content, selected by the Content Leader, will be delivered to players.

In testing this, I noticed that the first diff bundle for AHAP, the one that includes my place-holder content, was annoyingly slow to download.  At around 48 MiB large, it was bigger than most individual OHOL diff bundles.  At first, I thought the bandwidth on my download servers was lacking, but in doing some stress-testing, I found that downloading through the OHOL client was 2 to 4x slower than downloading the same diff bundle directly.

Long ago in my development career, I digested a bit of wisdom and took it to heart:  threads are evil.  Avoid using them whenever possible.  A corollary is that when you're making networked systems, non-blocking IO is the performance king.  In your main thread, you just check the socket to see if there's new data to read, and you read as much as you can, and then you continue on doing other things, and then you return to check the socket again later.  While this is 100% true server-side, when you need to handle requests from hundreds or thousands of simultaneous clients, things end up working a bit differently in interactive GUI software when you're just trying to maximize download bandwidth.

In order to keep the GUI responsive, you have to keep returning to it and synchronizing with it---you need to wait for the graphic cards VSYNC interval.  But waiting for VSYNC can take a while.  On my test system, which was updating the screen at 60 Hz, you can end up waiting for 16.6 ms, worst case.  But what's happening during that 16.6ms?  Well, more data is arriving on the socket, and you're not reading it, because your main thread is stuck waiting for VSYNC.  On a fast network, this is bad, because a lot of data can arrive in 16.6 ms.  Let's say the OS receive buffer for your socket is 8192 bytes, which is the default size on many systems.  And let's say you're on a pretty average DLS connection like mine, downloading at 40 Mbps.  Well,  during that 16.6ms, something like 83,000 bytes will arrive, which overflows the OS receive buffer ten times over.  Even if you code things just right to do as much work as possible between VSYNC, if you wait for even 1/10 of the VSYNC interval, your receive buffer overflows.  I haven't looked into the details of what happens when the buffer overflows, but my guess is that the socket has to send some kind of signal to tell the server to stop sending data (or maybe it's just through lack of packet ACKs coming back to the server).  Regardless, the server is sending packets that aren't being received, and at the bare minimum, they will need to be re-sent later.  Goodbye max throughput.

You can imagine all kinds of tricks to overcome this problem while still using threadless, non-blocking IO, but they all hit the hard reality of waiting on VSYNC eventually.  Even if they don't wait on VSYNC as much, you can't have a responsive UI with a progress bar unless you're occasionally drawing to the screen.

The most straight-forward way to solve this problem is with a thread that runs in the background, receiving data from the socket as fast as possible, while your main thread continues updating the GUI and progress bar in a responsive way.

So yes, there's a thread in OHOL now!  Actually, there was always one other thread in OHOL, because it turns out that on many platforms, resolving a DNS host name to an IP address cannot be done in a non-blocking fashion.  But that LookupThread was pretty trivial.  This new thread is doing a substantial amount of work.

And with all that in place, the OHOL client downloads stuff fast, maximizing the available bandwidth between the download server and you.

For the time being, this will mostly impact off-Steam players who are downloading all of their OHOL updates through this system.

#14 News » Update: Author Credit » 2024-02-16 20:54:39

jasonrohrer
Replies: 1

AOUALUa.png

Content made with the Editor now tracks authorship using a hash of your account's email address or Steam ID.  When you export contents as OXZ files to share with others, your authorship hash goes with your content.  Thus, over time, we can keep track of the portion of the content that each person contributes.  This will be important in connection to the plan for Another Hour Another Planet, which I will explain here.

Another Hour Another Planet will be a separate game, released for real on Steam.

First of all, how will people gain access to Another Planet?  For the time being, there will be a hard-to-build object inside One Hour One Life which requires some kind of server-wide collaboration and consensus:  a rocket ship.  Once this rocket is built, there will be room inside it for one lone traveler.  Whoever is chosen by the collective action of the players on the server will ride the rocket and gain permanent access to Another Planet.  For each rocket launched, one additional person will gain access.

And the content on Another Planet?  It will be entirely conceived, designed, drawn, animated, and assembled by the player community.  Each person who has access to Another Planet will also get the right to vote for the current Content Leader---the person in charge of curating, assembling, and testing the content submitted by the player community.  And yes, the Content Leader might make bad choices, try to sabotage the game, or even just burn out.  A new Content Leader is always just a vote away, and the entire process will be organized through an immutable Github repository, meaning that a future Content Leader can roll back bad content changes if needed.

Over the years, lots of people have disagreed with various content design decisions that I have made.  This will be a chance for the community to make their own decisions, chart their own course, and make the game their own. 

Only the content will be modifiable by end-users.  Another Hour Another Planet will use exactly the same binary client and server code as One Hour One Life, and I'll still be maintaining that, and fixing bugs, into the future.  So we don't need to worry about player-submitted virus code.

Finally according to Steam's policies, games that appear in the Steam Store and in people's game libraries must eventually be sold.  They don't want prestige items, only accessible as prizes earned outside their usual sales channels, clogging up their store and confusing their customers.  So yes, while Another Hour Another Planet will only be accessible by rocket from inside One Hour One Life during it's beta development period, it will eventually be sold to the general public as a real game.  I've set a deadline for you folks, in fact:  roughly two years from now, on February 13, 2026.  Of course, you can all keep working on it and adding content to it after that release date, but you should shoot to have a solid, compelling Another Planet game experience by then.

But if it's sold, that means it might make some money, and then what?

Coming full-circle, that's where the Authorship Tracking comes in.  I promise to share 60% of the revenue from the first year of AHAP sales with each and every person who contributed content to the game world, based on the fraction of the total content that they contributed.  Details still need to be ironed out, but sprites, sounds, objects, animations, transitions, and music will all be factored in.  But even if you only contribute one thing, you will get some money during the first year.

During future years after that, I will make a good-faith effort to continue sharing 60% of revenue with content contributors who's portion of the revenue would total more than $500 for the year.  In other words, I'm not going to continue paying thousands of people a few dollars per year forever.  I will do that during the first year, however.  Regarding the "good faith effort" part:  obviously, I won't live forever, etc.

And the point of all this?

I've dedicated eight years of my life to One Hour One Life.  I'm now 46 years old, and I may not have that many big software projects left in me.  It's time for me to move on to other things, before it's too late.  I could just turn One Hour One Life over to a dev team, or even sell it to a company, in order to keep it going.  But given that I drew every pen line, played every piano note, and recorded every sound myself, it's a very personal work.  It is exactly how I want it to be, and I want to leave it that way, going into the future.  People who play One Hour One Life should be playing my One Hour One Life.  But how can the game really live on, and the community keep thriving, if I stop working on it?  Another Hour Another Planet is an outlet for that future vitality.

One Hour One Life also maintains a certain degree of visual consistency, in part because everything in it was drawn by the same hand, using exactly the same tools (heck, even on exactly the same paper stock).  Any collaborative effort would obviously deviate from that consistency.  In fact, I imagine that Another Hour Another Planet will be a bit of stylistic mish-mash.  But that's perfectly fine, given the theming:  it's supposed to be an alien world, after all.  Alien worlds can be strange.

There are obviously lots of details to iron out, but that's a broad overview of the plan.

#15 News » Update: Methman Memorial » 2024-02-03 20:39:18

jasonrohrer
Replies: 6

vkHTmGi.png

We recently received some sad news.  Methman, a friendly pillar of our community and Discord moderator, died late last fall.

The One Hour One Life community has been remembering him in various ways this week.

His primary online handle was MaDc0w, and I just recently learned where the "Methman" nickname in the OHOL community came from.  Mofobert designed an "OHOL Portrait" of MaDc0w using the Editor, and MaDc0w loved this hilarious image so much that he adopted it as his Discord icon.  MaDc0w thought that this wacky OHOL character with the red cape looked like he was high on meth, so the name Methman was born.

Here is a direct quote from the email that I received from his friend:

Now that the family has had a couple months to grieve we are providing the following statement in one of his online communities. I pass this information on to you so you can choose to make a statement or have a remembrance as well.

It is with deep sadness that we announce the loss of MaDc0w, a friend so close to us that they are considered family. He unfortunately passed suddenly and untimely in the morning on November 30th while in his home. He lived an amazing life with a love of Technology matched by few. MaDc0w was a leader in our community and will be missed by all.

Rest in peace, Methman.  You will be missed.

#16 News » Update: Big Soil » 2024-01-17 17:56:16

jasonrohrer
Replies: 3

4B9uhsi.png

A small mid-week update this week.  You can now pile baskets of soil, just like you can with baskets of charcoal.  There's also been a gotcha fixed with worm farming:  taking the last worm from the wormy soil pile no longer permanently ends the worm farm, since you can put the worm right back in if you've removed it by mistake.

I also spent a good chunk of time this week ironing out the details of AHAP and starting to implement it.  You'll hear more about this soon.

Tomorrow, I'm heading out to Utah for the premier of the documentary Eternal You at Sundance, which is in part about Project December, my AI side-project.  More details here:

https://festival.sundance.org/program/f … 6f45c03c81

I'll be back early next week to resume work on One Hour One Life.

#17 News » Update: Power Edit » 2024-01-13 21:43:11

jasonrohrer
Replies: 1

OAi53ws.png

A bunch of improvements to the Editor this week.

First of all, along with loading mods, which are temporary, the Editor can now import content permanently.  You can either replace objects content (similar to how mods are loaded, but permanently) or add entirely new objects.  To import, drop an OXZ file into the new import_add or import_replace folder.  The idea here is that people who are working together on new content can easily share their work with each other.

The various pickers in the Editor now support searching by ID numbers in addition to name text.

Next/Prev paging in the pickers works more sensibly when holding CTRL and SHIFT for bigger jumps (jumping by 25 on CTRL, 125 on SHIFT, and 625 on CTRL+SHIFT).

You can also search using a new field=value, field>value, or field<value syntax.  For example, searching for food>10 will find all food objects that are worth more than 10 food.  Searching for MapP>0 will find all objects that occur naturally on the map.  Almost all of the text field and checkbox names in the Editor can be used as part of this new search syntax.

There's also a new contentSettings folder, which ships as part of the content updates, to cover settings that are content-specific.  Before, all settings shipped as part of the platform-specific binary client updates.  This meant, for example, that when adding a new emote, both the content (for the emote's appearance) and the binary client (for the emote's settings) would have to receive an update.  Now a content editor, who wants to make deep changes to the game world, can do so with a content update alone and without touching the binary client codebase.

And most importantly, you can now put dried beans in piles and buckets.

#18 News » Update: Steam Workshop Mod Contest » 2023-12-24 20:10:34

jasonrohrer
Replies: 5

M9AP4hh.png

Steam Workshop support is live.  You can find it here:

https://steamcommunity.com/app/595690/workshop/

Instructions for posting mods to Steam Workshop can be found here:

https://steamcommunity.com/sharedfiles/ … 3121137673

And I'm holding a contest for the best mods, as voted by the community, between now and New Year's Day.  Post your mods to Workshop between now and then.  The mods with the most subscribers at or around Noon EST (New York City Time) on New Year's Day win.

There will be ten winners.  Each person can only win one prize, even if they have more than one highly-subscribed mod.

Prizes are as follows:

1st place: $500
2nd place:  $400
3rd place:  $300
4th place:  $200
5th through 10th place:  $100

Prize winners can choose from the following payment methods:

--PayPal

--Cashier's Check by Mail.

--Gold coins/chunks by Mail.

--Silver Coins by Mail.


This is obviously a contest of skill, not a lottery.  If it is illegal in your area, I feel sorry for you.

#19 News » Update: Mod » 2023-12-16 00:56:08

jasonrohrer
Replies: 1

68XtNRq.png

The game client has mod support.

Mods can completely overhaul the look, animation, or sounds of any object in the game.

To install a mod, simply drop an .oxz file into your mods folder.  Multiple mods can be installed together by putting multiple files in there (but if they overlap in terms of which objects they change, one of the mods will override the other according to some kind of mysterious filesystem ordering).

When you launch the game client again, your mods will be loaded.  Note that they don't change the game content permanently.  Simply remove a mod file from the mods folder and re-launch the game client---the game will go back to normal.

Mods can be made using the Editor, which is now included on Steam.  No programming required.

To make a mod, in the Editor, use the Objects tab to edit various objects.  Be sure to use the "Replace" button when saving them inside the Editor.  You can also use the Anim tab to edit animations.  I'm pretty sure that live sound recording isn't working in Windows, but you can experiment with it.

If you want to add new sprites, you can import them using the Sprites tab.  Note that you will need to change settings/editorImportPath.ini to the location of the sprite sheet that you want to import.  Sprites should be on white backgrounds with black outlines (though you can get fuzzy edges by also importing a separate Line Import layer).  I draw the sprites in the game on paper and scan them in, and my scanner puts the scanned page in default.png in my home directory, so that's why the import path is set the way that it is by default.

After you get your objects looking the way that you want them to look (remembering to Replace existing objects, not add new ones---your edited objects should appear mixed into the list on the Object Picker, not at the top of the list), you're ready to export them as a bundle.  Use the Export tab to pick a set of objects.  Give it a name Tag, then press the Export button to save the bundle.  Look in your exports folder for your exported bundles.

Note that any mods in your mods folder will be loaded into the editor for further editing and exporting.  You actually need to load each modded object in the Editor and press Replace at least once before trying to export them.  Whatever is actually saved on disk is what's exported (the live RAM-only data is only temporary, and not saved on disk by default).

However, whatever changes you actually make while creating mods are permanent in your game data folder.  It's usually a good idea to make a working copy of the game data when modding.  Just copy your OneLife folder somewhere else, and run EditOneLife from inside that copied folder.

#20 News » Update: Colonization » 2023-12-01 21:06:08

jasonrohrer
Replies: 5

OwBFbIW.png

The four different groups of people in the game have had different specialties for a while.  Three of the groups have biome specialties, making them the experts who can obtain resources from the jungle, the desert, or the arctic.  The forth group had no specialty biome to call their own, so they became the language experts---the one group that could talk to all the other groups with no language barrier.  The idea was that they could serve as a kind of trading group, traveling from area to area in the world and exchanging specialty resources.

But in the harsh survival reality of the game, this fourth group, the language experts, were always seen as dead wood.  While the other groups were necessary for collective survival, because they provided access to necessary resources for technological advancement, the players could really care less about the fourth group.  If they died out, the rest could still survive and progress just fine.

This week, the language experts get an additional buff:  they can travel and settle anywhere, even outside of their homeland.  This means that they can join other villages and help out long-term, across generations, which will give them more opportunity to put their language translation abilities to good use.

There's also a fix to the way /DIE cycling works on the low-population servers, making parallel solo play on low-population servers viable again.

And finally, there's a new, more detailed food consumption log, which will allow third-party statistics services to compute some interesting things.  The log gets populated on a 24-hour delay, but data will eventually start posting here:

http://publicdata.onehouronelife.com/foodLogDetails/

This was partly inspired by DopiePanda's amazing work on this new leaderboard and stats site:

https://oholcurse.com

#21 Re: News » Update: Gestures » 2023-12-01 14:31:00

Yeah, I was aware of the problem with elders...

I tried making the Wave work with the front arm, and it didn't look great.

#22 Re: News » Update: Boneless » 2023-12-01 14:29:37

The impact on small servers has been fixed (in the next update).

#23 News » Update: Boneless » 2023-11-23 17:08:04

jasonrohrer
Replies: 18

n83Q46v.png

A small update, just in time for Thanksgiving.

Eating a drumstick from a plate no longer causes the leg bone to vanish.  This might seem trivial, except that a full set of turkey bones are needed to make turkey broth.  People ended up with a bunch of useless partial sets of bones that piled up.

You can now reclaim rope from the long shaft, along with being able to reclaim it from other wooden shafts.  This was a small oversight that has been lurking in the game content for years now.

And the biggest change this week:  what happens when you type /DIE as a baby (succumbing to SIDS).

Before, the server would remember only your previous SIDS mother, avoiding her for your next birth.  After you typed /DIE for a second mother, that mother, that second mother would be remembered, allowing you to potentially return back to the first mother.  There are also other factors that are taken into account in birth placement, such as lineage bans, birth cooldowns, etc.  These factors together could mean that if you typed /DIE repeatedly, you might ping-pong back and forth between two different mothers.  This would cause lots of annoyance for these mothers, as well as an accumulation of baby bones.

Now the complete list of every mother that you typed /DIE to avoid is remembered, and you avoid all of them in subsequent births, without ever returning to one.  However, what happens when you run out of mothers by doing this?  You go to Donkeytown.  This is  your signal that there are no mothers left for you to try, or at least that the mother that you're looking for is not available based on some other factor.  However, upon visiting Donkeytown, you aren't stuck there:  your SIDS list is cleared entirely when that happens.  After that, you can use /DIE to cycle through the mothers again.  But Donkeytown is a signal to you:  you've run out of options.  Hopefully, this new system will help to alleviate the annoyance of repeat visits from /DIE-cycling babies.

#24 News » Update: More Fixes » 2023-11-03 20:38:45

jasonrohrer
Replies: 0

PwfFxks.png

More fixes this week, based on some newly reported issues.

A possible exploit that would allow a daisy-chain of carts to be used as an impenetrable wall has been fixed.  Trash pit behavior has been improved to avoid nuisance trashing of some items, and accept some other waste items.  Large animal bones now decay faster.  Defaced graves are no longer permanent (and defaced baby graves decay after two minutes, just like regular baby graves).  Stone walls with shelves can become ancient.  And you can FINALLY place a drumstick down on a plate.

#25 Re: News » Update: Demon Haunted World » 2023-11-03 20:33:43

Well, if you could see your own age, you must have been using a mod.

Most of this ghost stuff was client-side, so vanilla client was needed (or a mod that had been updated).

Board footer

Powered by FluxBB