|
Post by zaimoni on Nov 11, 2022 22:41:58 GMT
I cut a checkpoint two days ago, immediately before attempting upgrade to .NET 7. It is not properly tested (the last tested binaries are the edge binaries for the prior release). If something "went wrong", it'll likely do so when the bikers try to invade. Note the unbreak-build diff: github.com/zaimoni/RSRevived/commit/5630b59974723957c48f666a593238b39cd6beb1 . Yes, I am having to instruct the build system that using System.Runtime.Serialization is not a compiler error. Outright replacing it is becoming "urgent" again, not just "important". MP : it appears that the earliest .NET that could be considered for the (bloated) JSON savefile format is .NET 7: the JsonPolymorphic attribute is needed to avoid problems with the MapObject and ActorController class hierarchies. (Need to see whether proper handling of reference cycles is in, now -- that would still be a show-stopper.)
|
|
MP
Member
Posts: 150
|
Post by MP on Nov 13, 2022 11:13:44 GMT
Interesting. When you say "bloated", how does it compare to the legacy DAT format? RS's save system is notoriously sluggish to save/load (which RS:SA made even worse with all the other stuff I've added), so I'm sure players would appreciate something more performant, even if the file size is bigger. I went through a phase of trying to port RS:SA to a different API in order to ditch MDX, one of the benefits being able to move off .NET 3.5 as well. However, I read that the jump from 3.5 to 4.5+ could come with some pitfalls, and it all got a bit too time consuming so I put it on the backburner. I haven't been keeping an eye on .NET releases for a long time. Aside from keeping up with the times, are there any major benefits to moving to a newer .NET? Or conversely, any major drawbacks to not upgrading?
|
|
|
Post by zaimoni on Nov 14, 2022 3:33:41 GMT
My current reference game for RS Revived has a file size of 25MB at turn 0; about 4 seconds to save, 90 seconds to load. (This is due to the police tourism and threat tracking database maintained by their pre-apocalypse radios.) JSON should be at least 100MB. I really don't have any good options (I parked the hand-rolled replacement subproject May 2022(?) when it became obvious that Dictionary<string, object> had to be handled.) Testing a save/load corruption issue involving inventory found that the System.Runtime.Serialization code is highly inefficient. (it calls custom serializers once *for each reference* to an object, not just once. That means thousands of redundant calls which theoretically slows down saving dramatically.)
RS Revived did not have any major issues just from upgrading framework versions (I was able to go all the way up to 4.7.x from 3.5.x without issue). Going to .NET 5 from Framework 4.7.x was painful (bad documentation...instructions for converting to *.csproj were flaky, I needed a full calendar day to repair the instructions enough to get a working build). That's when my source code picked up a local copy of the Microsoft RNG -- they made it non-serializable for .NET 5 for no objective reason. .NET 5 to .NET 6 was maybe an hour, again due to undocumented breakage in the build system. (It also gave a 20% CPU reduction per-turn without any source code changes whatsoever....shouldn't be observable for other forks/variants.)
The biggest technical advantage when upgrading was C# 8: having static member variables available for interfaces, means you can have "almost singletons".
|
|
MP
Member
Posts: 150
|
Post by MP on Nov 14, 2022 17:26:37 GMT
Hmm I'm kinda tempted to give it a go now actually. I found a good write-up of the .NET 7 performance improvements, and at quick skim it looks quite promising (admittedly much of it is over my head, and probably not relevant to RS anyway). Worth a shot I guess.
|
|
|
Post by zaimoni on May 6, 2023 1:52:49 GMT
If something "went wrong", it'll likely do so when the bikers try to invade. Biker invasions are world-ending. The latest edge build (released Cinco de Mayo, May 5th, "Day of the Dead") is far more stable. This edge build also has the new stance crouching. This stance is "automatic", and exists solely to make ground inventories mostly usable at range 1. (The PC-only Unload command for ranged weapons, still requires actually standing on the ground inventory to use against a gun on the ground. Yes, this is an AI bug -- just hard to specify its fix.) EDIT Test game backing this edge build is up to Day 6 Hour 16.
|
|
|
Post by zaimoni on Jun 1, 2023 5:22:14 GMT
New edge build released. I'm considering some invasive changes: - I don't feel good about livings being double-moved by slower zombies.
- I still want motorcycles. And helicopters. Data design for these is awful.
- Some of the inventory changes I'm considering, motivate removing Classic mode (the only mode without corpses; World War Z is Classic with corpses).
|
|
MP
Member
Posts: 150
|
Post by MP on Jun 1, 2023 23:47:15 GMT
Vehicles are something that I've seen requested many times, even very recently, and have pondered myself more than once. I think they'd be cool to see in RS, though really hard to both implement organically and balance for difficulty and endgame. RS Revived seems to be best placed for vehicles, given that it's one big open city, rather than divided into districts. On a technical level, I'm sure it has its challenges (eg. action points per turn, player viewpoint while traveling, storage slots in the vehicles, etc), but balancing them could well be the hardest part. Vehicle damage, noise alerts, refueling, and so on are the practical concerns, but perhaps most difficult is the question of 'why doesn't the player simply drive/ride/fly out of the city?' If you do opt to give it a go, I wish you luck. It would be really cool to see such a next-level layer to RS.
|
|
|
Post by zaimoni on Dec 1, 2023 18:08:54 GMT
RS Revived trunk is now on .NET 8.0 (two-line change, much easier to go from .NET 7.0 to .NET 8.0 than usual).
Note that the Rogue Survivor family are Windows Forms programs. That's why System.RunTime.Serialization.BinaryFormatter is still working (only WinForms and WPF have working binary serialization on .NET 8.0, other targets are intentionally broken with no override by Microsoft).
|
|
|
Post by zaimoni on Dec 7, 2023 4:59:49 GMT
Ok...heads up regarding gameplay changes for RS Revived: - I have re-specified RS Revived's rapid fire to be more like a snap shot or fanning a pistol, rather than a 2-round burst. No more "firing at nothing". Think further UI and AI changes are useful.
- Trunk's combat helper is currently unreliable (downstream of changes that prevent being double-moved by z when wearing CHAR armor, that are also needed for motorcycles.)
- I want to re-introduce proper burst fire as a new mode, used by army rifles and machine pistols. I also did some data design regarding shotguns, but I don't know how the AI would cope with the revised fire arc.
|
|
|
Post by zaimoni on Dec 21, 2023 3:28:55 GMT
Technical heads up for other developers: I just eliminated the Data.ActorSheet class from RS Revived. (Per commit log, I moved the SkillTable to the Actor class, and all other fields to the ActorModel class (which does not reach hard drive).)
I had also introduced Data.Model.MapObject a week or so back (i.e., a model object for MapObjects). That isn't quite complete yet: the enum for map object id types still needs de-duplication, as of this time.
|
|
|
Post by zaimoni on Oct 5, 2024 14:36:00 GMT
Heads up: I took a very quick look at how difficult it would be to move RS Revived to System.Text.Json save/load. (It's substantial...the reflection-based approach cannot fully handle readonly fields, bespoke constructors required.)
|
|
|
Post by zaimoni on Nov 19, 2024 14:53:42 GMT
|
|
|
Post by chikoeduardo on Nov 20, 2024 3:09:33 GMT
Woah... I had no idea there was a revival project for this game. I remembered about this game just now while I was checking an old hard drive and found the game and a gfx mod I made for it years ago.
|
|