Lord Winner
Fremen-
Posts
10 -
Joined
-
Last visited
-
Days Won
1
Everything posted by Lord Winner
-
Interesting. I don't have this issue as I've been attacking Arrakeen-Tuek early for years. In vanilla Dune, when attacking eastwards from Bledan, then Tsympo and Arrakeen-Siet, Arrakeen-Tuek's single troop is the tipping point in the game: the atomics found there make it possible to gradually steamroll over all other fortresses.
-
Thanks a lot for posting this file. Could you also post DUNE38S0.SAV, so that I can add its hash to my scriptable editor ? Entering all sietches and recruiting all troops, as well as visiting the Haga region, would easily cost you an additional day, even with the Sihaya-Tabr -> Cielago-Timin -> Haga-Timin -> Cielago-Tabr -> Celimyn-Timin -> Celimyn-Tabr path (leaving the Haga-Tabr visit for a later trip, as I mentioned) back to the palace, and a trip to the Haga region starting by the relatively short Arrakeen-Timin -> Haga-Harg travel. Despite its 3 troops, Tsympo-Timin is a weak fortress in vanilla Dune, so it's one of the easiest targets for leftover troops.
-
Er, DUNE38S*.SAV ? I didn't know about that version, only 21, 23, 37 for a long time and more recently 24. If that isn't a typo, then people implementing save game editors, be it the one linked by Dmitri Fatkin above or mine ( https://github.com/debrouxl/odrade ), will be pretty interested in getting a copy of these save files, to add support for this version to the editors Indeed. I was surprised by how large the impact on overall time of that cheat was. Without using it, I never managed to finish the game (which always includes full travel to all sietches, in my runs) before day 23. With it, I reached the morning of day 17, as mentioned above, and I had ideas for saving several periods. That's correct. I've been using that strategy for years, to destroy a subset of the fortresses - weakening them before finishing them, with or without a massive attack. All of the main army troops use ornis, as does the single, orni-equipped army troop which performs espionage on most of the planet ahead of time. Whoa, day 10 ? I can't watch much of this video right now, and I don't watch many videos in general (especially not long videos), but I suppose I will watch it at least partially Did you eventually enter all sietches on the whole planet, including the 5 ones which aren't uncovered by talking to Liet Kynes (well, at least in the versions of Dune I'm used to), and recruit all troops ? That easily adds a number of periods, even when not visiting all of them at once: the sietch closest to the Haga fortresses can easily be visited a bit later, on a Carthag <-> Haga path. Clearly, you must have used ornis for your army troops as well. I suppose you used smugglers much more extensively than I usually do, and more army troops. Do you use fast troop moves, where using A -> C -> B intermediate sietches for the movement can save some time over direct A -> B moves ? EDIT: you seem not to have used the fact that restarting the game in the mirror room saves a period - the day and time restarts at day 1, 7h30 instead of the day 1, 9h00 when entering the game.
-
Actually, at least in the version of the game which creates DUNE21S*.SAV files, it's possible to proceed forward with the game even if you don't tell Gurney Halleck to stay into a sietch where army troops are training. That's how I played Dune for the largest part of the ~25 years I've been playing Dune on and off. It triggers the aforementioned glitch of Leto's NPC remaining stuck into the palace's room, Jessica causing a vision when the player reaches the second sietch from Chani's region and telling the player that the Duke was killed in a punitive expedition which the player never saw starting, etc. I do no longer play the game this way because I noticed, relatively recently, that it's an impediment to game progress, by delaying the point where the player can drink the Water of Life without dying. I use that to have Fremen troops proceed with further fortress attacks, while traveling to, and entering, sietches in Liet Kynes' area.
-
Interesting indeed, both facts are unexpected to me at least. Also, good reverse-engineering work
-
About 6), a wild guess: in the first 12 KB of decompressed savegame files (offsets ~6 to ~0x3080), the patterns are interesting (mostly 0, 2, A and 8 hex digits, but occasional F or E), and the proportion of set bits raises over time, AFAICS, it's higher in a day 27 pre-final-attack savegame than in a day 17 pre-final-attack save games. I don't currently have access to the computer which has savegames of higher in-game times and wider controlled areas. I hope I kept the day 200+ savegame, where I had Fremen troops build wind-traps into all sietches which didn't have any, converted all troops to ecology, and reached over 70% controlled area without cheating (nearly, or slightly more than, 80% after resorting to manual water refilling in the savegame file ). EDIT the next day: a bit of testing by direct savegame editing (in compressed form) proved this wild guess to be correct. The first F7 BD 00 in DUNE21S0.SAV, at file offsets 6-8, is a perfect playground for experimenting with the control status of a fairly large area by changing a single byte. I played with a single hex digit, the other half of the byte behaves the same way. The effect applies to the northern area of the planet, north of Tsympo-Pyort, and it is as follows: 00 (0b0000): nothing 01 (0b0001): light Atreides control, light vegetation (only green) 02 (0b0010): light Atreides control, no vegetation 03 (0b0011): light Harkonnen control, no vegetation 04 (0b0100): light Atreides control, light vegetation 05 (0b0101): heavier Atreides control, heavy vegetation (green and brown) 06 (0b0110): heavier Atreides control, light vegetation 07 (0b0111): mixed Atreides / Harkonnen control, light vegetation 08 (0b1000): light Atreides control, no vegetation 09 (0b1001): heavier Atreides control, light vegetation 0a (0b1010): heavier Atreides control, no vegetation 0b (0b1011): mixed Atreides / Harkonnen control, no vegetation 0c (0b1100): light Harkonnen control, no vegetation 0d (0b1101): mixed Atreides / Harkonnen control, light vegetation 0e (0b1110): mixed Atreides / Harkonnen control, no vegetation 0f (0b1111): heavier Harkonnen control, no vegetation Therefore, pairs of bits have the following meaning: 00: no area control or vegetation; 01: Atreides control, vegetation; 10: Atreides control, no vegetation; 11: Harkonnen control.
-
I kept 49 successive copies of DUNE21S3.SAV from the game run where I could launch the final attack on the morning of day 17 ( https://forum.dune2k.com/topic/20497-dune-cheats/?tab=comments#comment-395491 ). These might help pinpointing the game stage / phase variable, without having to playing through the entire game again. I can somehow send you a set of savegames for quick runs (17 to 20 in-game days) if you wish EDIT: In order to research 5), I built a couple C++ programs, a RLE decompressor with hard-coded F7 byte and a program to detect bytes whose values have strictly increased between the N given files. Nothing fancy, and in fact, while posting this, I'm thinking that this decompressor is incorrect: I didn't special-case the F7 02 00 bytes at the beginning. Also, the "chars[1] < chars[argc - 1]" condition is superfluous, it's a leftover from an earlier state of the code. #include <cstdio> #include <cstring> int main(int argc, char ** argv) { FILE * fin; FILE * fout; if (argc < 3) { fprintf(stderr, "Usage: %s <input file, - for stdin> <output file, - for stdout>\n", argv[0]); return 1; } if (!strcmp(argv[1], "-")) { fin = stdin; } else { fin = fopen(argv[1], "rb"); } if (nullptr != fin) { if (!strcmp(argv[2], "-")) { fout = stdout; } else { fout = fopen(argv[2], "w+b"); } if (nullptr != fout) { while (!feof(fin)) { int c1 = fgetc(fin); if (c1 != EOF) { if (c1 != 0xF7) { fputc(c1, fout); } else { int len = fgetc(fin); if (len != EOF) { int data = fgetc(fin); if (data != EOF) { for (int i = 0; i < len; i++) { fputc(data, fout); } } } } } } fclose(fout); } fclose(fin); } return 0; } #include <cstdio> #include <cstring> #define __STDC_FORMAT_MACROS #include <cinttypes> int main(int argc, char ** argv) { if (argc < 3) { fprintf(stderr, "Usage: %s <input file 1> <input file 2> ... <input file n>\n", argv[0]); return 1; } printf("%d\n", argc); FILE * fptr[argc + 1]; int chars[argc + 1]; bool error = false; for (int i = 1; i < argc; i++) { fptr[i] = fopen(argv[i], "rb"); if (nullptr == fptr[i]) { error = true; } } if (!error) { uint32_t offset = 0; while (!feof(fptr[1]) && !error) { for (int i = 1; i < argc; i++) { chars[i] = fgetc(fptr[i]); if (EOF == chars[i]) { error = true; } } if (!error) { bool candidate = true; for (int i = 1; i < argc - 1; i++) { if (chars[i] >= chars[i + 1]) { candidate = false; } } if (candidate && chars[1] < chars[argc - 1]) { fprintf(stdout, "%04" PRIX32 " ", offset); for (int i = 1; i < argc; i++) { printf("%02X ", chars[i]); } printf("%d ", candidate); fputc('\n', stdout); } offset++; } } for (int i = 1; i < argc; i++) { if (nullptr != fptr[i]) { fclose(fptr[i]); } } } return 0; } I chose a subset of the savegame files from the aforementioned 17-day run of the game, decompressed them with the first program (producing 22056-byte files), then fed them to the second program thusly: ./findincreasedbytes DUNE21S3_day2_afterfindingtuonoclam_decompressed.SAV DUNE21S3_day2_afterfindingharah_decompressed.SAV DUNE21S3_day3_afterfirstvisionandviewingmessage_decompressed.SAV DUNE21S3_day5_afterfindingstilgarandrecruitingtroops_decompressed.SAV DUNE21S3_day8_beforegoingtochani_2_decompressed.SAV DUNE21S3_day9_aftermeetingchani_decompressed.SAV DUNE21S3_day10_attackingtsympos_decompressed.SAV DUNE21S3_day17_5charactersinarrakeentuek_decompressed.SAV The output was pretty small: 9 43DF 07 09 0C 14 15 16 1B 28 1 43E1 08 0C 0D 16 19 1D 22 3B 1 43E4 10 14 15 2C 44 48 55 68 1 4CA4 0D 16 24 3D 4C 74 97 FB 1 4CB0 0E 10 12 18 1C 1E 24 36 1 For Dune "21", the variable at offset 43E4 (with the above decompressor, probably at a slight offset from that with a fixed decompressor) looks like a great candidate for the game stage / phase variable, since multiple values of that byte match the first byte of the section F of multiple sietches: Tuono-Clam can be found when the game stage is >= 0x10; Harah is in Tuono-Timin, which can be found at stage 0x14, and Habbanya-Tabr, Habbanya-Timin and Habbanya-Tuek have also 0x14; the Ergsun region and Sihaya-Clam have 0x28 or 0x2C; Chani is in Oxtyn-Tabr which has 0x44; after meeting Chani and she falls in love with Paul, sietches such as Oxtyn-Tuek and Habbanya-Harg become accessible, they have 0x48; 0x55 is the value of Sihaya-Tuek, which means I started attacking the Tsympo fortresses remotely (as described in the other topic, I had the character drink the water of life in Tuono-Tabr on day 9), before meeting Liet Kynes; the last save is from the step before I could launch the final attack, long after meeting Liet Kynes, which raises the variable to 0x5C. Then, I checked a DUNE21S3_day11_attackingtsympos2_decompressed.SAV savegame between these two last savegames passed to my program: the byte at offset 43E4 is 0x5C. Looks like I met Liet Kynes in the meantime. In my fast runs, the Harkonnens never get a chance to attack Fremen, I don't leave any mining troops close to the Arrakeen region and I have at most one army troop from the Carthag - Tuono - Habbanya region. The game stage / phase variable is not the only input to the algorithm deciding whether the Harkonnens should attack, that's all I can guess A couple final notes: the byte at offset 4CA4 might be the charisma byte, given that it's the only value among the four candidates which goes over 100 at the end of the game. But maybe the set of savegame files I fed into the program contains two consecutive states where the charisma didn't increase, causing it to be filtered. In any case, easy to check by changing that byte and reloading the save; if it's not the byte at offset 4CA4, diffing fewer savegames with more change between savegames would help. EDIT2: nope, that byte isn't the charisma, and in fact, I can't find any byte containing the values displayed in the results screen. I should definitely special-case F7 02 00 in my decompressor, and then, I'd be curious to try using a different byte for the RLE compression (not that it makes much sense in practice). Maybe that's the reason for that odd F7 02 00 sequence at the beginning of the savegame: storing the RLE byte inside the savegame.
-
Yes, the Fremen troops you can recruit after liberating Harkonnen fortresses are randomized. The appearance of their respective leaders is always the same for the troop "belonging" to a given fortress, though on Dune "21" at least, there's occasionally a glitch where the Fremen leader notifying the player of a battle being won is neither any of the Fremen leaders whose troops won the battle, nor the Fremen leader of the troop you can recruit after entering the location and possibly having a Harkonnen captain captured. This glitch occurs especially for Arrakeen-Tsymyn. However, the number of Fremen, and to some extent the sietch equipment left after the battle (especially in the Bledan area), are randomized, yielding a total number of Fremen on the planet between ~74K and ~81K, without losing any Fremen in a battle. The head count randomization is performed around an average value. Usually, after destroying the four Bledan fortresses and recruiting formerly slaved Fremen troops, you have a good estimation of how many Fremen you can count on for attacking fortresses, and therefore whether the game will be easier (~8K Fremen in the Bledan area, if you're lucky) or harder (~5K-6K Fremen in that area).
-
Another cheat in the time area, which I never saw described anywhere... At least in the version which creates DUNE21S*.SAV files, one can take advantage of the automatic save when entering into a place, and Maps -> Globe -> Load game -> Last entering into a place, to cram a higher number of character dialogs - sequences and/or troop actions per 1h30 time period. The sub-hour counter doesn't seem to be adequately saved or restored. I've been using this cheat occasionally for years; using it intensively has a surprisingly deep impact (read: several days !) on the game's internal time, obviously at the expense of the playing time in the real world. That's how, last week-end, I had: Paul Atreides meet Chani, drink the Water of Life in Tuono-Tabr, get back to the Carthag palace and talk with Jessica to get the Fremen contact range boosted, before the end of day 9; the Fremen destroy all Harkonnen fortresses (and Paul Atreides enter all of them + recover Chani + rally all 47 troops, reaching less than 78000 Fremen total - some game runs provide more than 81000 Fremen in these 47 troops) at the end of day 16; the ability to trigger the final attack from Arrakeen-Tabr on day 17, 4h30, and therefore the ability to enter the Arrakeen (Harkonnen) palace at the same timestamp by going to the palace and launching a massive attack. without editing the save game beyond changing the first byte of the F section of Celimyn-Tuek to 14 right after meeting Harah, as mentioned above. This even slows down the game by one period (moving from Tuono-Timin to Celimyn-Tuek then from Celimyn-Tuek to Habbanya-Tuek, instead of moving directly from Tuono-Timin to Habbanya-Tuek), in fact... Several pieces of information about how I made that game run, and their consequences: zero Fremen killed by the Harkonnen, thanks to undoing / repeating several close battles multiple times (you usually end up being lucky at some point), and maybe 20 or 40 killed by sandworms (but no harvester swallowed, I undid that); no saboteurs, I undid that as well; only two spice shipments to the emperor at the end of day 3 (more than the Emperor asked for) and on day 9 (twice what the Emperor asked for); dozens of tons of spice mined as usual, since most troops from the Southern part of the planet kept mining spice; obviously, the prospectors troop didn't get around to prospecting the northern part of the planet, despite being equipped with an orni around day 9 (10 ?). equipping your army troops with ornis very early, the first one even before attacking the Bledan fortresses, helps a lot with espionage and attack; attacking the Harkonnen very early (days 5-7) in the Bledan region prevents sietch attacks from the Harkonnen in e.g. Carthag-Tabr; the fortresses in the Tsympo area are relatively easy to attack after picking up weirding modules from the Tsympo sietch; after winning battles in the Tsympo fortresses, then Arrakeen-Siet, you have enough equipment to attack Arrakeen-Tuek. I only figured that fairly recently. Even 12000+ inexperienced Fremen with inferior equipment can run over less than 2000 atomics-equipped Harkonnen, especially if you reach the fortress using a worm during the attack to boost your troops' motivation. Then, it's basically game over for the Harkonnen, as the atomics picked up there open up the door to e.g. the Haga region (possibly precedeed by Arrakeen-Clam, I don't remember what I did exactly) and its relatively easy weirding modules and atomics, which will be required for the rest of the Arrakeen region. Destroying Arrakeen-Tuek early has another upside: long before you get to attacking Arrakeen-Tabr and Arrakeen-Timin, Arrakeen-Tuek is transformed into a sietch, into which, unlike a Harkonnen fortress, you can tell Stilgar and Chani to stay while you're getting back to the Atreides palace to pick up Thufir Hawat and Jessica and bring them to one of the three locations closest to the Harkonnen palace; lots of free travel was used between sietches / fortresses, especially in the Arrakeen region (Tuek -> Tabr -> Clam -> Tsymyn -> Timin, Clam -> Harg) - extremely useful when visiting fortresses and moving characters from the Atreides (Carthag) palace to Arrakeen-Tuek, for instance; It's pretty clear to me how this blueprint for a low internal game time can be beat with Dune version "21", as I didn't take advantage of multiple strategies, such as but probably not limited to: starting ecology experiments to boost troop motivation; moving to e.g. Carthag-Timin (instead of Tuono-Tabr) the army troop which I had Gurney Halleck train for several seconds in order to save two 1h30 periods flying in an orni between the sietch and the Atreides (Carthag) palace; using Gurney Halleck to train army troops. After letting him once in a sietch to trigger Baron Harkonnen's phony message which causes Leto to depart, etc., there's so much to do moving all over the planet with Stilgar and Harah in the beginning, then Stilgar and Chani, to enter / discover sietches / villages / fortresses that there was little opportunity to pick up Gurney Halleck back from the Atreides (Carthag) palace; using the same set of army troops in a smarter way: 4 of them ended up being ill together, and I didn't even bother undoing it because they had both low training and low equipment; converting spice troops from the southern half of the planet to army troops, though I'm not sure that would have helped much because of a lack of equipment, unless I resorted to... ... grabbing (more) weapons from the smugglers: I think I used the one in Tuono-Pyons for spice harvesters and ornis, but not for weapons, and if I bought weapons from the one in Tsympo-Pyons, it was too early in the game for him to offer weirding modules. And besides this set of options, maybe there's some even smarter game strategy I haven't yet found in 20+ years of using the game on and off Also, without impacting the total game time, the spice mining troops could have mined quite a bit more spice if I had moved them to richer areas in the south. Without using this auto save / load game cheat intensively, it's probably hard to avoid making three spice shipments to the Emperor, e.g. on days 3, 9 and 17 (well, that one can be delayed to 18 or 19, the Emperor will just get angry). However, having to make four spice shipments is a sign of a suboptimal attack strategy, as all Harkonnen fortresses can be easily destroyed by the end of day 23, even without using this auto save / load game cheat (I hadn't found it 20 years ago), and the fourth shipment can be made to occur on day 24 or 25.
-
If the game stage variable never goes to 0xFF, that explains why nobody can find Celimyn-Tuek by traveling into that area of the desert with an orni or a worm... it's revealed by meeting none of Harah (the first byte should then be 0x14), Chani (should be 48) or even Liet Kynes (should be 58). I guess I'll test that by editing the first byte of the F section early in the game to say 14, next time I play the game [EDIT: yup, unsurprisingly, if the first byte of the F section of Celimyn-Tuek is set to 0x14, then that sietch can be found by flying over the area, right after meeting Harah.] Spice refilling is a cool hack, but having to resort to it indicates that something's wrong with the way the player is playing the game. The game can be won without sending more than 10 tons of spice to the Emperor, and without cheating either; the area where the game starts, bounded by the rocky areas at the north and east, down to Habbanya-Tabr in the south, and comprising Habbanya-Clam + Oxtyn-Harg in the west (well, everything you can find with Harah before going to Stilgar's area), contains far more than 10 tons of spice. Even by playing in a somewhat more relaxed way - it's been over two decades since I started consistently beating all of the Harkonnen fortresses by day 30. I never saw the Sardaukar, I guess I should try it once... assuming they're supported by my old version which creates DUNE21S*.SAV files. IIRC, the only time I failed to send enough spice to the Emperor in a timely manner, Paul Atreides died even when he wasn't in the Atreides palace. That was beyond day 80...