-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Heretic & Hexen: misc feature/minor issues discussion #93
Comments
😱 I'm not that good reader! 😅
This logic comes from Doom, I'm afraid, where messages are always left-aligned. But yeah, making impossible to read next pickup messages in next four seconds is not really good. I think I'll just follow your recommendation, and "top" becomes third message line in all three games - for some unclear reason, I would like to have some vertical space between "normal" and "secret" strings.
Small clue where to investigate could be very helpful. On very brief look I wasn't able to find the reason of such speedup. 🙁 But should falling speed must be also get fixed? AFAIR, there was complains in Crispy Doom...
On a brief investigation by using freeze+spectator mode, cubes are not spawning "above ceiling", looks likes they are spawning at all, so it seems to be a play state, not render bug. If it's play state thing, most probably better leave it untouched to don't bring up any fixes to original mechanics.
Done. 🙂 Very reasonable question of two lines of code. Fourth weapon items doesn't seems to be affecting game mechanics, and it's a cheat code after all.
I'm afraid IWAD icons doesn't represents full armor system of four items. An options should be possible, but then nice vertical space between these stings will be lost: Like in Heretic, which is looking not very good. But it doesn't means "no", I'll try it out. By the way, have you tried to understand how A.C. is calculated in Hexen? It's a total mind...blow! 🤯
Probably, same way to Crispy Doom, by holding
Done. 🙂 Not that useless to have, and finally a motivation to move bindings menu one line up in Doom. |
Sorry!! wasn't trying to overwhelm you, just wanted to collect all my thoughts about little things in one place, rather than making a dozen tiny issues.
I haven't been very motivated to code anything lately but I imagine this is something I can fix if I can figure out where the problem is. I'll take a look.
Definitely a playstate thing, so if it's not worth trying to fix, that's fine
No problem if you want to leave it, I can see how putting only one armour piece might be misleading for some people. And yeah Hexen's armour system is totally bonkers, way more complicated than it needs to be especially since you lose most of your armour in just a few hits anyhow.
That'd be fine. (Is that how it works in Crispy? I actually have
Looks good, thanks a lot! |
Yes, just checked - Crispy loads last save when |
Woof uses "On Death Action" with options of "last save", "default" (restart level), "nothing" (do nothing, potentially useful for speedrunners I guess), which sounds good to me. But truthfully I'm fine with it being the Crispy way, if you prefer to avoid the extra menu option. My control setup is unusual and not something most people will use. Perhaps @NightFright2k19 or @Meerschweinmann have opinions on this? One thing Crispy does differently than Woof is that it won't auto-load a save if it was from a different level than you're on. I like things this way, but again I'm not too picky about how this is handled. (I'm also assuming this is not some quirk due to my weird control setup.) |
I'm all to follow Woof approach, literally everything that needs and must be clear as cross-port standard. Crispy handles cases with not loading saves from previous levels indeed - it restarts level entirely if no save was made on new level and takes away all player's stuff. Maybe it's a bit punishing? It's definitely deserves an option, and both Doom and Heretic still have free line for it.🙂 Hexen doesn't seems to be need it, as it already handles last save by itself. But sure, let's hear opinions of our respected colleagues. |
Well it's not that bad since you can always reload the save manually. But again I don't have strong opinions on the particulars of the implementation.
Not quite: Hexen will load the last autosave it made, which it does every time you enter a new level. But if you've saved manually since then, that save won't be loaded automatically. Except, if you load a game from the titlescreen/when no game is being played, and you haven't gone to a different level since, it will fall back on loading that save instead of going to the start of the level. What a mess! |
As english is not my native language i have sometimes hard times to follow when there is many unread text :) If you want to know if i find it usefull to define an action what should happen after you have died, instead of only restart the level from beginning, then yes, i find that useful. Hope i get it right. It is up to Julia to decide if she want to do such thing. But Julia seems open for almost everything :) |
My apologies, this whole issue was a lot harder to read than I thought it'd be. The question is, which do you like better?
|
No problem :) I could live with the crispy way, but newcomers have to know this key-combo. The Woof-way is the deluxe way in my opinion that i would prefer. |
Seems like all vertical movement is accelerated in noclip mode in both Heretic and Hexen, because of this check in I doubt this is intentional, but I'm not sure if this overall behaviour should be changed or not. What do you think? Either way I feel like special-casing jumping alone is not worth the trouble. |
"On death action" is technically done, using Woof and Crispy code. But both implementations have one small flaw, I found completely uncomfortable: if user is saved near the wall or exit switch, then dies and reloads by |
That could be a problem if the wall has a linedef action you will not activate? But if it is only a wall it makes oof. |
True, if it's just a wall, then "oof" sound will be played. I'm almost at the solution, engine must be tricked to prevent |
* Variables * Just use Woof variable names * for Doom * for Heretic * Add missing lines * Prevent imideate "use" repeating As mentioned in #93 (comment) * for Hexen
Tested the "on death action" in DOOM II now with last save. It worked like a charm. When i go to next level and do not save in next level, then it goes flawlessly to my last save the level before. The options name is "last save", so this is correct. |
Excellent, works great! Using a switch on reload is also a problem in Woof sometimes, I will see if I can adapt it to work there, should be pretty easy. |
Oha, Hexen has the "on death action" too. And it works nice :) |
Yeah, Hexen's implementation was a nightmare on first look, but in the end it was even simpler than Doom and Heretic. Good news: taken Michael's correction suggested in Chocolate Hexen, demo compatibility gets finally good level. There also was a small problem brought by Lee Killough's fix, so I have reverted it. Please note - this will bring back falling into a wall if player is saved while standing on the ledge and then loading, so be careful. Not sure if it is possible or worth to guard this fix with "single player only" condition, let everything be working in one logics. A
Heretic got D'Sparil spawning spots removing - until there will be no other decition, and if there will be any, this seems to be the most reasonable way to go. Not very good news: Hexen have filled it's quota for two pages of features. Not really a problem, as third page can be added as well, or it is still possible to draw strings over status bar, but I stubbornly want to have a nice looking menu. 🤪 There is still huge potential for visual improvements, like stained glass shards can not disappear (actually, this leads to another problem with their "zero-gravity" once floor level changes...), random flipping of sitting corpses (technically they are not corpses initially) and couple of more, but none of this are demo-safe, and should implemented, it must be strictly "Compatibility breaking / cosmetic" features. Or most probably, better don't touch such thing for good, I definitely don't want to repeat my past mistakes by making changes in original game mechanics. |
Hiho. I wanted to answer earlier, but i was not at home. In the end everything went good with Hexen and the "on death action" is very good for it, because it is an useful feature. To be honest, i did not know that Hexen can't use -timedemo, because when i had benchmarked it was DOOM over all the years to compare source ports. As you said with the spawning spots to remove everything that goes beyond the vanilla limit seems the most reasonable too for my understandment. The other thing is that, what should be wrong with your solution? Compatibility to vanilla exe could not break because of that, because the vanilla .exe could not play such maps. I could never use a vanilla exe demo from such a map, because there can be no demos made with vanilla exe and GZDOOM plays no vanilla demos as Inter plays no GZDOOM demos. And you are in contact with Fabian and Kraflab to get a cross port solution, so everything should come after some time to a good end. Or do i get something wrong? To Hexens gameplay page. For me it would not be a problem if there would be a third page for gameplay-features instead of pressing too much options at one page that could hit Hexens holy and high status bar. Inter-DOOM and Inter-Heretic have those third pages too. With optical improvements like glass shards or sitting corpses i think you will do the right decisions. It would be nice if the glass lays around after get punched or some corpses are flipped, but when these options alter gameplay mechanics or break compatibility that would be not so fine. The audience that plays ports like Inter/Crispy/Woof may be not so strict or hardcore vanilla like those vanilla exe or Choco-DOOM lovers that want to penetrate themself with the original errors and limitations that we had back in the days, but the Inter ports are part of a port family that should go the faithful enhanced way it does. I wish you nice 50 minutes rest of your sunday today, for me the sunday has a whopping 170 minutes rest :) |
Agree with this. I imagine Fabian will be OK with these additions in Crispy Heretic as well; as for dsda-doom, it's currently lagging a bit in features anyhow (like HEHACKED support of any kind) and has been for some time, so who knows. I do think it would be a good idea to at least output a message to the terminal on maps that exceed the limits of mace spots, D'Sparil spots, and ambient sounds. |
Happy day job Monday everyone! ☠️ In case of Hexen,
In general, I don't think someone will use Inter for demo recordings, there is a DSDA source port nowadays for such tasks, and this is only good. But providing demo compatibility is a good tone, since demos can be not only recorded, but watched as well. 🙂 Also, long demos helping a lot for automated tests of both render and game mechanics. Performance benchmarking too, but this is situational.
Well, there is a started discussion for it: fabiangreffrath/crispy-doom#1167. But no decision was made at this point, though. Heretic doesn't seems to be a highly requested by runners, so this is not about "okay everyone, stop all your activities and let's make a decision now!". I can only hope that it will not lead to yet-another standard or complevel. 🤭 Speaking of complevels and standards, I do hope as well that @kitchen-ace's idea with |
Really good idea, thank you! It's a bit tricky, as once limit is raised, it will remain raised, so simple approach like this one will not work properly: src/heretic/p_pspr.c Mon Feb 19 13:30:42 2024
@@ -261,6 +261,12 @@
{
MaceSpotCountMax = MaceSpotCountMax ? MaceSpotCountMax * 2 : MAX_MACE_SPOTS;
MaceSpots = I_Realloc(MaceSpots, sizeof(*MaceSpots) * MaceSpotCountMax);
+
+ if (MaceSpotCount == MAX_MACE_SPOTS)
+ {
+ printf ("\n Warning: found more than 8 Firemace spots."
+ " This level won't work in vanilla Heretic!\n");
+ }
}
MaceSpots[MaceSpotCount].x = mthing->x << FRACBITS;
MaceSpots[MaceSpotCount].y = mthing->y << FRACBITS; I.e. it will work just once. |
Happy monday everybody :) That i had used timedemo with Heretic last time to bench low graphics, should be no hint to integrate low graphics mode in Hexen too. If you have reasons against it, then it is not necessary, because there are many other resolutions to get more performance. And yes, the demo-scene is on DSDA, but as you wrote, i like it to watch demos too. And why delete a feature the Vanilla exes could do? And your spawner solution seems logical. Eventually Fabian and kraflab join this solution. But even it should come something else as solution, people that use Inter can play those levels now without getting bombed Out of the Game until there is a cross port solution. |
Still much better than nothing.
Did you change the ini file for Heretic 1.3? I don't know that that would be why it doesn't work, but maybe. Instructions here: https://ettingrinder.youfailit.net/heretic-hhe.html
The problem with HEHACKED as it is, is that it's quite broken, and even if you hex-edited HHE.EXE to fix it with Heretic 1.3 and solved all the patch version issues, it's still lacking and some features don't work properly, and the patch format itself is much worse than DHE. There's also no source code for it, only for DEHACKED; and no ports support it besides Chocolate Heretic, and its descendants. I do want to (eventually) have something that works with Vanilla, but if I manage to do that and make the patch format better, I might as well call it something else and not "HEHACKED 3.0 unofficial" or whatever. Not going to happen any time soon though, I can barely make a 2-line PR without errors these days :p |
Regarding the "load save after death": If you ask me, the best system is the keyframe rewind from DSDA. Sure, it kinda turns the gaming session into a demo which you can replay and fix at any given time, but at least I can stop worrying about when was the last time I hit the save key in case I screw up. But well... I guess most people will be happy with the instant reload, so be it. However, if there were an option to keep the question whether or not to load the last save, I'd be all for it. |
You're in luck as it was implemented with an option :) |
That is everything in this collection of issues, except for jumping in Hexen with noclip. Going to repaste my previous comment in case it got missed: Seems like all vertical movement is accelerated in noclip mode in both Heretic and Hexen, because of this check in I doubt this is intentional, but I'm not sure if this overall behaviour should be changed or not. What do you think? Either way I feel like special-casing jumping alone is not worth the trouble. |
An addition to what kitchen-ace said. It is not only an option, you have to turn on that option that it loads the last save. |
Good news: Well, perhaps one, but I guess it's not related to the port: |
Nice @NightFright2k19 ! Lots of bugs in hexen.wad, most are pretty minor but there's a few softlocks, Gibbet is probably the worst: https://doomwiki.org/wiki/Hub_4:_Gibbet#Bugs |
Yeah, just as said before, "On death action" is completely optional and disabled by default, i.e. default behavior is same to vanilla. BTW, all features by default are off or set to vanilla behavior, excluding 2x resolution. Friendly ports was using this approach, so I decided to follow.
I see.. Even if will be fixed, I'm afraid there might be complains like "what the heck is happened with vanilla noclip behavior while no play state fixes was declared?". Probably worth to leave it "as is". The only unconditional fix in play state mechanics at the moment is Fabian's correction of Icon of Sin spawner, which prevents division by zero (a program crash, literally) while saving and reloading while flying cube.
This must be a problem with clipping in original code, which wasn't touched. In general, Hexen also have huge clipping bug with running into a wall while standing on some kind of map object, like this one: https://youtu.be/fzMaITI2_rM?t=28 I'm no longer fixing any kinds of such bugs in game mechanics, not because of demo compatibility - such fixes can be guarded by "in single player only" condition, but because of "one logics approach" as Fabian calls it. This means: what if player is suggesting to see/have/use this this bug not only while demo recording, but while normal playing? Boomers! And having a dozens of micro-switches for all possible fixes is the worst idea. Fixing all the things was a good practice, but in the end, brought nothing more than headache of compatibility not only with demos, but complicated mapping things like in KDiKDiZD. Render, however, is a different story. Initially, all Inter-s are having Crispy-s render code, but porting was done, I made a lot of changes like PrBoom+ optimizations and other things. This is not critically needed unless complex scene with hundreds of visplanes or sprites in view is appearing, but I totally like the idea of having fast/effective render, especially now, when higher render resolutions are available. |
Yeah those were basically my thoughts as well. And it's irrelevant most of the time either way. In that case: I declare this issue closed! Thanks as always for all your hard work, and sorry for dumping all these things into one issue (though it made for a nice discussion thread 😄) |
Thanks everyone too! Sorry, I'm a bit quiet again, probably because of finally starting to get slightly tired from code grinding. Looks likes at the moment, all this path of Heretic and Hexen took three months (initial commit with Heretic, which started it all). Not that long for two ports. 🤓 |
Hah, I knew you'd have to slow down eventually! Good thing because I'm running out of things for you to fix ;) |
For all it's worth: |
I can agree with everything Nightfright said. Inter-Heretic and Inter-Hexen are the ports these both Raven games needed so long. The feature list is a perfect match for me. And it is fun to look/read and write here. Thank you for everything! |
Since these ports are getting closer to a proper release, here's some random things I've thought about while playing. All of these are very minor and you are well within your right to WONTFIX all of them :)
✅ Heretic: The secret found message overwrites the normal messages while it's up; often I've stumbled into a secret area and picked up something but I don't know what it was because the pickup message is supplanted.
It might be possible to display normal messages on a 2nd line? Or move the secret message back to the center of the screen.
This is also the case with Hexen's "some of the puzzle has been solved" type messages; I imagine special-casing these is harder though.
Hexen:
Jumping while in noclip mode makes your jump height lower/faster. This is a vanilla bug. Really there's no need to jump in noclip, but it looks a bit odd anyhow.
❌ The Heresiarch's floating cubes can disappear. (vanilla bug). This is probably very hard to fix in a demo-safe way, see this discussion from Doomsday: https://tracker.dengine.net/issues/770
(seems down right now, the gist is that the sectors the cubes get spawned in don't get updated IIRC)
Here's an example wad to test if you want: hxsorc.zip
Let him walk towards you a bit and then circle around behind him.
✅ Giving all weapons doesn't update the super-weapon indicators (either the normal statusbar one or the new inter-hexen widget). (vanilla behaviour again.) I don't know if there are situations where changing this would be a problem?
✅ While I like your generic armour icon, is there a reason you didn't want to use one of the armour pieces as an armour icon? You could even make it class-specific: mesh armour for the fighter, shield for the cleric, amulet for the mage.
edit: All games:
✅ option to reload save on death when you press a key instead of going to the start of the level
✅ key to toggle vertical mouse movement on/off. (extremely niche use)
Also none of this is required for a proper release.
The text was updated successfully, but these errors were encountered: