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