One Hour One Life - jasonrohrer


Forum member Wuatduhf made an important discovery: recent changes to the way object patterns work had suddenly made curved cart tracks much more reasonable to implement.

It turns out that I already had the graphics drawn for these curves, and they looked really good back in the day, but I had to scrap them because of the combinatorial explosion that they would entail. For example, north-moving carts already had three "leave" cases (leaving from south ends, north-south tracks, and cross tracks) and three "entering" cases (entering north-south segments, entering north ends, and entering cross tracks). To handle all the combinations, 9 distinct transitions were required for each cart direction, resulting in a total of 36 transitions. That's a lot, but as soon as we add in curves, it blows up even more, with something like 25 transitions needed for each cart direction, or 100 total. That's a lot of transitions to author correctly, and way too much to keep track of along the way, resulting in tons of room for error.

So what changed with object patterns to help with this problem? Something pretty tiny and simple, actually. Part of the bottle update a few weeks back involved emptied bottles that made a final sound as they were emptied. Roughly half of the bottles held liquid, and the other half powders, requiring a different empty bottle state for each to play the "glug-glug" or "swish-swish" sound. All the bottles were part of one big 18-item pattern, but how could I flesh out the empty state for this pattern? Since an object can only occur in a given pattern once, I would need to create 18 separate "empty" bottles, even though they all pretty much did the same thing (half of them playing the powder sound instead of the liquid sound). That's a lot of extra objects that essentially do nothing. But why couldn't a pattern have repeated objects in it? In other words, why couldn't a pattern "converge" on a few common end states? These bottles could be different all along, with 18 variations, but once empty, end up as one of two empty-state bottles to play one of two sounds. Each of the 18 slots in the pattern would contain one or the other of these two bottle objects. I updated the pattern editor to support this, and that was it.

Wuatduhf's observation was that these new "converging" patterns were exactly what was needed to cut through the combinatorial explosion for tracks. As a simple example, when a track cart moves north out of one of five possible north-bound tracks, each of these needs to potentially land in the same connecting track. This can be implemented as a pattern, then, only if the pattern can contain repeats of the same destination track.

Thus, instead of 25 separate north-bound transitions, I was able to implement one set of north-bound transitions describing what happened to a north-bound pattern, and then fill the pattern with all the cases.

This also allowed me to implement tracks that pass through spring-loaded doors pretty easily, preserving the insulation bonus for the room that the track emerges from.

In the end, each of these patterns had 25 elements each (with repeats to cover the various combinations), and the north-south patterns had 36 elements each (due to the extra combinations needed for passing through spring doors). And there were five separate patterns for each direction, resulting in a grand total of 610 items listed in these patterns (all passing through only a small handful of transitions).

There was still a lot to keep track of when fleshing out these patterns, and the whole thing felt about as close to an IQ test as I've experienced while working on this game. My moth-holed, 42-year-old brain muddled through it all, but barely.

But those curvy tracks sure do look nice. Great to dust off 17-month-old artwork and finally put it to use.
One Hour One Life - jasonrohrer


My wife was out of town all week, so I was left with the task of being a full-time parent as well as a game developer. I did manage to get a few things done, though.

First, there was the question of Eve frequency, and how that tends to spread civilizations out over time. Eve placement is related to baby placement (we place an Eve instead of a baby under certain conditions), and in thinking about the baby placement code, I realized it had grown into a multi-scarred monster over the years of trying different methods inside and outside the rift. Seemed like a good time to start clean and really think about what baby placement is supposed to accomplish.

Our highest priority in placing a baby should be to make sure there's at least one family in each of the specialist skin tones, and if all of them are already present, bolster the population of the weakest skin tone. After that, our next priority is to bolster the population of the weakest family, and place girl babies when the number of potentially fertile females in a given family gets too low. Of course, we also want to respect each mother's birth cool-down when possible, and also each player's previous-life area bans (so they don't get born to the same family over and over). But we should also be willing to ignore cool-downs and area bans if there are no other mothers available. No one should be able to area ban themselves, through suicide, into being an Eve, and we'd rather overload a mother on cool-down than spawn an Eve.

Finally, we need to make sure that the server is never overloaded with babies relative to the adult population (more than 2/3 babies), nor that a few remaining mothers are overloaded with babies (more than 4 babies per mother).

And of course, through out all of this, we respect curses, never placing a cursed baby near a player who cursed them, ever ever ever. If there's no place for a cursed baby to go, they are sent to donkey town.

With those priorities cleanly stated, we can see that we only place Eves in two situations. First, if there are too many babies for the existing adult population or population of mothers. And second, if we're missing one of the specialist skin tones.

Those cases should be relatively rare, which means that new Eves should be rare.

With the simplified code in place, the behavior is much easier to reason about. If there seem to be too many Eves in the future, I'll be able to figure out exactly why.

Next, the Genetic Fitness leaderboard has clearly been getting out of hand, with top scores climbing into the 500s. In looking closely at the top-scoring players, I found something distressing: many of them had very low average lifespans themselves. By keeping their own lifespans low through regular suicide, the were able to farm points whenever they lived an occasional long life. Furthermore, they were essentially handing out free points to everyone else through these occasional long lives. It was also clear that quantity was trumping quality. When scores are potentially infinite, playing a lot of lives is the only way to reach the top.

Implementing a suggestion from Wondible, we're now back to scores that are asymptotically capped at 60, while still solving the problems that the older capped system had (where you got punished for having a new player as a baby). You now gain points whenever you help an offspring player live longer than expected, but the amount you gain is scaled relative to your own score. Thus, the closer you are to 60, the less you can gain from each offspring, but the more you stand to lose if you actually hurt an offspring and cause them to live a shorter life than we expect for them. You also gain points for yourself when you live longer than expected, with your score approximating how long we expect you to live.

Thus, there's no longer an exploit possible through suicide. The best way to get a very high score is to live very long lives yourself, and never suicide, and help all of your offspring to live as long as possible, too.

Returning to a capped score demands a new formula for mapping score to tool slots, which can be seen in this graph:



As part of this investigation, I made more of the leaderboard data public. You can now click on the top-scoring players and see the recent lives that contributed to their score:

http://onehouronelife.com/fitnessServer/server.php?action=show_leaderboard

Thus, if another exploitative way to boost score emerges in the future, it will be easier for everyone to study and identify it.

But looking at the data now, we're off to a good start. All of the top-scoring folks have very high average lifespans themselves.

There are also a bunch of little fixes. More stuff can be bottled, and bottles are a bit easier to work with.
One Hour One Life - jasonrohrer


Still working my way through this list of issues:

https://github.com/jasonrohrer/OneLifeData7/issues

Some of the issues provide inspiration about obvious holes in the game's content space. This week, I fleshed out bottles, which had previously only been used for wine. Now they're used for almost every liquid and powder in the game. Wall shelves were fleshed out too, to go along with this, so now colored walls can have shelves too. Colored wall shelves full of colorful bottles.

More bottles means you're going to need more glass, and Tarr pointed out that glasswort was the current bottlneck there (bottleneck, see what I did there?). Now you can cultivate glasswort, but of course, it's a desert-loving plant. And yes, in real life, glasswort doesn't grow in the desert, but instead along the edges of brackish bodies of water. We don't have a beach or salt marsh in the game yet, though, so we can at least imagine that our desert is an ancient sea bed.

Fleeing rabbits now avoid floors when digging their new holes.

Together, all these changes resulted in 138 new objects, most of them varying states of the 18 new types of bottles. But yeah, that's a lot of new bottles.
One Hour One Life - jasonrohrer


Still plowing through this list, with only 168 more to go:

https://github.com/jasonrohrer/OneLifeData7/issues

Some of the fixes this week involved quite a bit of new content, as I fleshed out the dye possibilities for knitted clothing and roses, and patched some gaps in hat decorations. Over 135 new things, but most of them are the result of combinatorial explosion (red hats with blue roses and blue hats with red roses). Regardless, there's a lot more visual variety in clothing now.

Tables are useful for storing a few things even when you're not feasting, way stones no longer block movement, grapes can be removed, and a bunch of things that weren't containable are now containable. Rabbit holes can be dug up. You can no longer dump fresh water back into a water source, so there's no more confusing situation where you gain or lose a unit of water by doing that. Drunkenness has been refined a bit and clarified with a blushing emote.

The little photo icons in the family tree are back, for anyone starring in a photo. A few cases of spurious tool learning have been fixed (you no longer learn the knife when taking it apart, for example).

And most exiting of all: another cause of the bouncing-forever (wild bug appeared) has been found and fixed. Hopefully, that's the last one (this mysterious issue has been lurking for more than a year now, it seems).

I gird my loins to plunge back into that list of 168 and make another dent next week.
Dec 20, 2019
One Hour One Life - jasonrohrer


It's not glamorous. It's not exciting. But it needs to be done.

This week, I plowed through all reproducible code bugs, as reported here:

https://github.com/jasonrohrer/OneLife/issues

It's amazing how long it can take to fix even a simple-sounding bug. This project is huge and complicated (117,000 lines and counting), and figuring out what's going on when something's going wrong can be really difficult. This is not fun or interesting work, but I'm getting through it.

Next week, I'll be trying to make a dent in the stupendous pile of content-related bug reports:

https://github.com/jasonrohrer/OneLifeData7/issues

There are lots of these, but fortunately, content problems are usually a bit easier to find and fix.

Have a nice holiday time, everyone!
Dec 13, 2019
One Hour One Life - jasonrohrer


This week, we have an experiment in voluntary hierarchical leadership.

Each player can optionally pick one other player as their direct leader, by saying I FOLLOW SALLY SMITH, to follow them by name, or I FOLLOW YOU when standing near them. You can switch leaders at any time, and you can go back to having no leader by saying I FOLLOW MYSELF.

Following someone has absolutely no direct impact on gameplay, and is simply a source of information. People who have the same leader are marked as allies, and they wear the same color badges on their clothing. Leaders can follow other leaders, resulting in a dynamic hierarchy. Higher-order leaders have more elaborate badges and tiles, including Lord, Baron, Count, Duke, King, and several levels of Emperor. Your badge color is determined by the leader at the top of your tree.

Everyone can also exile other players at will by saying I EXILE SALLY SMITH, to exile them by name, or I EXILE YOU. This allows you to keep track of players that are causing trouble, and you will see a black X mark on their chests. I REDEEM SALLY SMITH, or I REDEEM YOU, allows you to bring someone back from exile.

The people exiled by leaders are seen as exiled by all of their followers further down in the hierarchy. Thus, information about troublemakers can be shared easily and efficiently. When a high-order leader exiles someone, a large group of people will all know about this person's status. Leaders can also be exiled, and any remaining followers are marked as dubious. An exiled person can appeal over the head of the person who exiled them, and higher-ups can override and redeem the exiles made by leaders beneath them.

When you're born, you inherit your mother's leader. You can change leaders when you are old enough to speak the necessary command.

When a leader dies, their followers are passed up to the leader above them, if any, and their list of exiles is passed downward to each of their immediate followers. In other words, the tree does the right thing automatically, behind the scenes, to preserve valuable information.

The inner workings of this system are a little complex, but on the ground, as one cog in the machine, you just need to make a single, very simple decision: who to follow, if anyone? And if you find yourself in a leadership position, you can also make decisions about who to exile. The tree will take care of the rest.

This system was inspired by forum-user Kinrany's post here:

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

More details and discussion about this system can be seen in this very lively thread here:

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


In other news, the Bell directional arrow has been moved down from the top of the screen to a more visually pleasing location. Thanks to Twisted for pointing out that it was visually jarring up there.



UPDATE:

I just added an order system, where order messages get passed down through the leadership tree to followers. To issue an order, say something like ORDER, EVERYONE COME TO THE TOWN CENTER

Please note the comma in there. No comma, no order.

Your immediate followers will pick up the message whenever they get within 10 tiles of you, and their followers will get them message when they are in close proximity, and so on, until everyone in your tree has the message. As an example, you might be away at an outpost and then return to town. When you return, you will be automatically told the leader's most recent standing order. When you get an order message, it's accompanied by an explanation of which leader issued that order.

Exiled people do not see the message themselves, but do pass the message on to their non-exiled followers.

Also, in the original post, I forgot to mention the new verbal kill trigger feature. If you're holding a weapon and say I WILL KILL SAM JONES, you will enter the murder-mouth state against Sam Jones (or I WILL KILL YOU for the nearest person). There are a bunch of variations on this wording that work, too. The point is to allow you to start kill-chasing someone who is hard to click (maybe they just raced by on a horse), or to allow you resume a kill chase after dropping your weapon to eat. As another nice side effect: this kill state trigger is visible to everyone around you, so new players can learn how to do it (where shift-right-click is harder to learn).
Dec 6, 2019
One Hour One Life - jasonrohrer


New this week, for a belated Thanksgiving: a feasting table, where you can serve yourself a whole plate of food. This takes advantage of the recently-added food overflow system, and is the first food source that offers +40 in one gulp, giving you a huge buffer of time before your next meal.

I spent the rest of the week making a dent in the very long list of issues that have piled up.

You now have a separate directional arrow, at the top of the screen, when you hear a distant bell tower ring. No more needing to dig up your home marker to follow the bell. A bug in lingering home markers from the last life has also been fixed. Some glitchiness in biome sickness have been fixed, along with an exploit that allowed you to plant biome-specific things outside of their target biome.

Eves were being spread out too far, because tutorial players and donkeytown players were advancing the next Eve position by accident, so that's been fixed. This should bring everyone a bit closer together. I Fixed a few confusing cases of tool learning (like when you're too hungry to use the axe, but learn it anyway).

There was a huge inaccuracy in the way that average lifespans were being computed as part of fitness score calculations. That has been fixed, which should dramatically reduce fitness score inflation, and all fitness scores have been reset back to 0.

There are still loads of issues left to fix, and I'll be focusing on those next week. Thanks to all of the people who spent so much time reporting them. Keep them coming. If I don't know about them, I can't fix them.

Please report programming-related issues here:

https://github.com/jasonrohrer/OneLife/issues

and content-related issues here:

https://github.com/jasonrohrer/OneLifeData7/issues
Nov 29, 2019
One Hour One Life - jasonrohrer


Please consider nominating my game for the Steam Awards this year.

Thanks!

--Jason
Nov 27, 2019
One Hour One Life - jasonrohrer


As a mini-update before I start my much-needed family vacation, I give you pumpkin pie and wine.

Have a great Thanksgiving, everyone!
Nov 23, 2019
One Hour One Life - jasonrohrer


This week's update focuses on new ways to find each other, in light of the fact that you now need each other for long-term survival.

First, there's a new tool in place for sharing long-distance navigation, and for helping people find your village. Way stones were inspired by forum member SirCaio's suggestion. They act like permanent maps that anyone can use simply by touching them. If you're looking to interact with foreign explorers, you can make your village easier to find by planting way stones in a radius around it. Just like maps, way stones can have long titles, which means they also can function as informative sign posts. Way stones can also be used to duplicate maps, but they can also be used in village center to make sure that important destinations are known to future generations---no chance of the map getting lost if it's literally etched in stone.

And now, when you pick up a map or touch a way stone, your character speaks a distance estimate along with the title. No more wandering in a vague map direction and figuring out that it's actually too far away.

Next, rideable objects, like horses and cars, protect you from the effects of bad biomes. No more long, circuitous routes. If you're riding, you can plow right through.

Along with these exploration updates, there have also been huge improvements to wall-building.

First, pine walls now require a lot less resources, and pine floors are possible, making them viable for early-stage camps. Being indoors adds a huge reduction to your food consumption rate, so building a few primitive buildings might be worth considering as part of your bootstrapping.

Next, all walls now auto-orient, freeing you from the tedium of cycling through the various wall orientations when building. You can put walls down wherever, and your building will look nicely connected, guaranteed. Fences also auto-orient, even relative to walls.

Finally, springy doors now open automatically when you pass through, and they don't interfere with path-finding. Being indoors is no longer a navigation inconvenience.

Beyond those content changes, a bunch of bugs have been fixed, and an exploit in the fitness score system has been cleared up. Committing suicide when young no longer allows you to reap a score benefit from a long-lived mother. Your mother and grandmother still count toward your score, but only if you live longer than they do.

Even with this exploit removed, some rather high scores are possible, and such scores make the tool slot limitations irrelevant. I've updated the mapping formula to a sigmoid, as shown in the following graph:



No matter how high your genetic fitness score goes, you'll never have more than 19 tool slots.

The recent Steam sale brought in a lot of new players. I'm deeply grateful to the existing players for helping all of these new people to learn the ropes.

There will be one more content update on Monday, and then I'm on vacation for Thanksgiving.
...

Search news
Archive
2020
Jan  
Archives By Year
2020   2019   2018   2017   2016  
2015   2014   2013   2012   2011  
2010   2009   2008   2007   2006  
2005   2004   2003   2002