[HN Gopher] Julius: An open source re-implementation of Caesar III
___________________________________________________________________
Julius: An open source re-implementation of Caesar III
Author : nix23
Score : 178 points
Date : 2022-12-02 08:48 UTC (1 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| kace91 wrote:
| I remember playing this game as a kid, and it was basically
| "build however you can until an army comes and destroys
| everything".
|
| I don't think I ever managed to understand how to properly fight
| with the legions you build. Then again, I was like 10 years old
| at the time...
| Nition wrote:
| I can't remember if all stages have the option, but most stages
| in the game give you two cities to choose from, one peaceful
| and one with combat.
| jacobmartin wrote:
| I recently downloaded this and got it to work. I loved it. So
| much nostalgia.
| oliwary wrote:
| I have spent countless hours on this on my unlocked PS Vita... it
| runs very smoothly, and the controls are great. Really scratches
| an itch that few games do. Man does it get difficult at the later
| stages though...
| xkcd1963 wrote:
| Well that was misleading if you need an original copy of the game
| kzrdude wrote:
| Save game compatibilty is impressive and maybe an "unnecessary"
| feature. Any reason that this was possible, was the save game
| format documented or just reverse engineered?
| dragontamer wrote:
| This appears to be a huge effort. The "Augustus" engine, which
| shares a lot of code with "Julius", has all of the incompatible
| updates (roadblocks, zoom, changes to worker behavior, etc.
| etc.).
|
| The compatible updates (compatibility with modern Windows, MP3
| based sound support, etc. etc.) are all together in Julius... I
| guess for all the people who have 20+ year old save files they
| want to come back to.
| Eleison23 wrote:
| If only 27-year-old me had realized that 50-year-old me would
| have need of save files from a game I no longer wanted to play.
| bombcar wrote:
| My guess is that save game compatibility is a great way to get
| people to try the new engine, and it was probably relatively
| easy to reverse engineer.
| JoshMcguigan wrote:
| Save game compatibility would be very useful for testing if a
| bug was reproducible in the original game.
| mihaigalos wrote:
| Have my upvote, you made my day!
| ghoshbishakh wrote:
| Thank you for doing this <3
| squaredot wrote:
| Half of me agrees with this, the other half doesn't... I liked
| too much that game.
| sudhirj wrote:
| Amazing memories of growing up on this game. I remember playing
| others in the series, but somehow this is what stuck in my mind.
|
| Spiritual successor is probably Anno 1800, for anyone who wants
| to try a modern take on this.
| amatecha wrote:
| Aw heck yeah, this is ported to OpenBSD and is up to date! Great
| surprise since I wasn't expecting it to be available haha :)
| sirwhinesalot wrote:
| Make sure to try out the Augustus fork if you want extra niceties
| from "future" Impressions games like roadblocks and a global
| labor pool.
| actinium226 wrote:
| For a more modern take on the genre check out Nebuchadnezzar:
| https://store.steampowered.com/app/1157220/Nebuchadnezzar/
|
| It's got some great new features, like having some control and
| visibility over where and how far the workers go.
| smnrchrds wrote:
| For a second I though this was CAESAR II, the piping analysis
| program, and got excited.
| dragontamer wrote:
| In Caesar III, your "blocks" were organized by how far the
| laborers walked. For example, the houses a Bath Worker walked by
| determined which houses had access to a bath. If the worker took
| a left at a fork, all the houses to the left would have access to
| the bath, but none of the houses to the right would have a bath.
|
| This led to the strategy of minimizing forks and maximizing the
| worker loops to create "blocks", where workers reliably provided
| needed services (marketplace for food/pottery, furniture. Bath
| houses. Doctors. Prefects/police+firefighter units, religious
| services, entertainment, etc. etc.0.
|
| -------
|
| Pharaoh / Cleopatra, the next game in this series, made this more
| explicit. With "roadblocks", any worker who "determines services"
| would make a U-turn upon touching a blocker. This allows you to
| explicitly make blocks (by preventing workers from taking the
| wrong fork in a road).
|
| So I guess what I'm saying is... the "height" of the gameplay was
| found in Pharaoh / Cleopatra, rather than Caesar III. Impressions
| Games did a great job with Caesar III, but those last few
| additions in Pharaoh / Cleopatra really makes the designing of
| blocks / housing areas much easier and more consistent.
|
| > While Julius does not implement any gameplay changes, a fork of
| Julius named Augustus is implementing many long-wanted gameplay
| changes, such as roadblocks.
|
| Ah, that's somewhat exciting. At least another open source
| project is backporting the roadblock to Caesar III's engine.
| Which of course breaks compatibility... but it'd be a better game
| IMO.
| forty wrote:
| Yeah, I really wish those games allowed me to simplify "draw"
| the trajectory of the workers. You'd still be limited by the
| length they can walk from their origin building but would not
| get frustrated by worker suddenly choosing another route,
| breaking all the nice areas you took hours to build.
|
| But they were really great games anyway. Caesar III in
| particular is the first game I spent many hours on, and hold a
| special place in my heart.
| philwelch wrote:
| Augustus has been playable for a long time now. I was playing
| it months ago when I went back to revisit CIII.
|
| The walker mechanic struck me as a clever solution that really
| feels like something from a more resource-constrained era of
| games. With one feature, they managed to solve two problems:
| "is this service building close enough to this other building
| when following the road graph" and "guys walking around whom
| you can click on".
| YeGoblynQueenne wrote:
| In my recollection, roadblocks didn't really fix the walker
| issues.
|
| I've had countless occasions where a walker would suddenly stop
| servicing a row of houses he or she could previously access
| just fine without any change to the layout of a
| "neighbourhood". This seemed to happen because the houses had
| gotten too big and a resource the walker was distributing to
| the houses did not last until the last few houses (walkers had
| limited stores of resources they carried, although this seemed
| to happen with religious walkers also who as far as I remember
| didn't have quantifiable stores; might be wrong). At that point
| the walker would have to go back to fetch more of the resource
| to service those last few houses. Meanwhile those houses would
| devolve because they didn't have any more of the resource they
| needed to keep their current level. Devolving houses would lose
| one or more levels and shed occupants. Once the walker reached
| them with the required resource, the houses would evolve again.
| Then when they ran out of the resource again they 'd also
| devolve again, in a vicious circle that could drive a player
| mad. Usually the only solution was to demolish some housing and
| build a service building in their place. Which messed up
| everything all over again.
|
| To be fair, I observed this primarily in Emperor: Rise of the
| Middle Kingdom (which I played at least as much as Cesar III,
| but more recently since I found it on GOG a few years ago).
| I've only played a little bit of Pharaoh and Zeus, but if this
| kind of problem wasn't fixed in Emperor (which came after
| Pharaoh) then I'm guessing it affected Pharaoh too.
|
| Interestingly, I observed exactly the same issue in Lethis:
| Path of Progress, a Cesar III clone I've played. Lethis also
| has roadblocks, but they don't really help, you gotta be
| prepared to pull some houses down and build new service
| buildings.
| dragontamer wrote:
| Well, the key to these games is to "not solve every problem"
| for the players, but only to "solve the tedious problems" for
| the players.
|
| You could build very good blocks in Caesar III with
| consistent services. However, it meant that you couldn't have
| _ANY_ forks in the road at all, and that all of your blocks
| would be giant loops. By adding roadblocks (ie: Pharaoh), you
| can suddenly have as many forks in the road as you like. For
| different sized blocks. Expanding the kinds of "block
| designs" that are optimal for the game is probably a good
| thing. Base CaesarIII is too restrictive IMO.
|
| --------
|
| "Running out of resources" locally is solved through
| warehouse management. I'd argue that this is the "fun" part
| of the game. Each warehouse + marketplace only can serve as
| many homes / houses as they can reliably pull supplies. For
| something like pottery, that is:
|
| 1. Clay Pits
|
| 2. Pottery furnace
|
| 3. Warehouse
|
| 4. + Additional Warehouses throughout the city for a good
| distribution network. Possibly augmented with foreign trade /
| docks.
|
| 5. Marketplaces
|
| 6. The final delivery to the house.
|
| Yes, the Marketplaces, and even warehouses, have limited
| "throughput" and can only serve a finite number of houses.
| After that, you must expand by building "parallel
| marketplaces". Eventually, you build too many marketplaces
| and the Warehouse cart-pusher is overloaded with work, so you
| need additional warehouses to expand that bottleneck. Etc.
| etc.
|
| IE: This problem is "reserved for the player to solve". The
| game shouldn't solve it for you, otherwise it wouldn't be a
| game anymore. Deciding "which bits" of the game to solve vs
| leave to the player to solve is the fundamental question of
| game design: what is fun anyway?
| ufo wrote:
| In my experience, the biggest source of "random" glitches
| were the entertainment walkers. Because of a bug, sometimes
| the dancers would teleport and wonder off outside of the
| block. Lack of bazaar goods can also be a problem, specially
| if you have 1x1 houses because those run out of supplies
| faster than 2x2 houses. For 2x2 houses they need a bazaar
| visit twice a year, which matches the period in the random
| walker algorithm. However, for 1x1 houses that might not be
| enough; I suggest building an extra bazaar to be safe.
| Religion & water walkers don't spend resources. Education
| walkers consume papyrus every time they leave their building.
| If they're out of papyrus they don't go to work.
| bombcar wrote:
| I remember spending class time diagraming possible "block
| layouts" on graph paper, trying to optimize and perfect this.
| dugditches wrote:
| The old 'Plebs are needed' from Caesar II still burnt into my
| brain.
|
| The amount of detail and information thrown into the game and the
| manual.
| adamm255 wrote:
| Came here to say "need more plebs" lol!
| chrisabrams wrote:
| I am haunted by the of things that caught fire and as a 8-9
| year old I didn't understand why. I don't think I generally
| made it far enough that the plebs were in need because the
| whole city had burned.
| spockz wrote:
| Oh yes the dreaded "(There is) Fire in the city!"
|
| I really liked Caesar III but I never seemed to be able to
| get service reach a reasonable amount of real-estate,
| presumably due to the left turn mentioned in another branch.
| So I ended up plopping way more temples and
| engineers/prefects than strictly required.
| murkt wrote:
| A catalog of more than one thousand open source game re-
| implementations: https://osgameclones.com/
| fbdab103 wrote:
| This would be a bit more usable if it were in a sortable table
| and/or had more filters. The badges look is cute, but less
| useful for quickly skimming. As a casual "hey I want to play an
| opensource game" reader, I think it would be beneficial if the
| landing page focused only on those that were Playable. A long
| list of Unplayable games with Halted development degrades the
| quality of the resource.
| ss108 wrote:
| Is it necessary to build a game like this in C? Could one build a
| game with comparable computational and graphical requirements in
| Python or something?
| turing_complete wrote:
| One could.
|
| However, many people in game programming care about their craft
| and having as much control as possible and also being efficient
| with their resources. In this project specifically, there might
| be also some kind of nostalgia thing going on.
|
| By the way, even though I use Python daily for ML and some web
| stuff, I find Python very lacking for serious, complex projects
| because of the dynamic type system, bad performance, and the
| infamous GIL. I find the idea that programming something in a
| system-level language is some kind of lost, arcane craft that
| shouldn't even be attempted quite perplexing.
| ss108 wrote:
| > By the way, even though I use Python daily for ML and some
| web stuff, I find Python very lacking for serious, complex
| projects because of the dynamic type system, bad performance,
| and the infamous GIL.
|
| I don't disagree re: the downsides of Python specifically,
| just threw it out as an example.
|
| > I find the idea that programming something in a system-
| level language is some kind of lost, arcane craft that
| shouldn't even be attempted quite perplexing.
|
| Well, some of us are self-taught developers and so system-
| level languages are very unapproachable.
|
| Ultimately though, seems like a simply unnecessary headache
| even if one would be competent in using those languages.
| Friends of mine with CS degrees still don't opt to do side
| and hobbyist projects in those languages, for example.
| bombcar wrote:
| This (original) game came out in 1998.
|
| You could write an _emulator_ for x86 in Python that 'd be fast
| enough to run the original operating system and game on modern
| equipment.
|
| Whether that would be the best choice for implementing a game
| like this today - probably not.
| ahefner wrote:
| Seems unlikely. The performance ratio of native code vs.
| Python is hundreds of times. The original game targeted
| roughly 100 MHz CPUs. Computers have gotten faster since
| 1998, but not that much faster in terms of single-threaded
| performance, the relevant metric here. I'd guess a python x86
| emulator would run at 1/5 to 1/10 the required speed.
___________________________________________________________________
(page generated 2022-12-03 23:00 UTC)