[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)