Remilia Scarlet Posted June 16, 2018 (edited) I didn't exactly plan to be back Doom mapping again this quickly, but I had an itch I needed to scratch, and it was easier for me to do in ACS than QuakeC for the at the moment ;^) Freaky Panties is an experimental level for GZDoom I'm working on that foregoes the usual difficulty settings and instead dynamically adjusts itself to how you're playing. In short, if you're having a hard time making it through, it'll scale things back. Likewise, if you're doing really well, it'll make it harder for you. Outside of that, it's a straight forward level designed around classic fast paced Doom-style gameplay. There isn't really a story since it's just an experiment. At current time, the level is tracking the number of player deaths; the average time between the last three player deaths; and the current health, ammo, and armor. These get fed into various ACS functions that look things up in tables and will adjust a few different factors. The biggest thing it adjusts is the amount of damage the player takes (via the DamageFactor property). Ammo and health also respawn at various places, and one of the other things adjusted is the interval between respawns. This is based on the number of deaths and the current player health/ammo. Not all of the health and ammo spawn dynamically, just some of it. Some monsters also have their behavior adjusted very slightly. For example, Revenants, Hell Knights, and Barons of Hell are currently slightly less aggressive if you're playing poorly. Sometimes the level will "forget" a player death and will adjust itself to be slightly harder once again. This is one way it attempts to keep from being too easy. Another thing it does occasionally is check to see if the player hasn't died at all, or hasn't died for a very long time. In both cases, it'll start gradually making it harder. How well will this work in the end? I have absolutely no clue :D So far it feels pretty good, but I haven't done much testing yet. If anyone has additional suggestions for factors I can use to adjust difficulty, please suggest them! Work-in-progress screenshots: Spoiler If things go well, I should have this out in about four weeks. It's about 35% done right now. EDIT 1 July 2018: I'm looking for playtesters! See this post for more details. Edited July 1, 2018 by YukiRaven : added new note about playtesting 21 Share this post Link to post
Remilia Scarlet Posted June 16, 2018 29 minutes ago, antares031 said: Nice title. It's a reference to an anime that I saw fansubbed. I laughed so hard at the line that I just had to use it. 1 Share this post Link to post
Suitepee Posted June 16, 2018 Interesting idea, even more interesting choice of name. Any easter eggs planned? 0 Share this post Link to post
Remilia Scarlet Posted June 16, 2018 28 minutes ago, Suitepee said: Any easter eggs planned? Nah, it's just a quick simple level to test out an idea. Though maybe I'll throw in some literal easter eggs... 0 Share this post Link to post
SOSU Posted June 16, 2018 Looks like another one of those "my pc can't handle it" maps of yours :D I wonder how a vanilla or boom map made by you would look like o: 1 Share this post Link to post
MFG38 Posted June 16, 2018 (edited) When I initially saw this on them tweeterz, I became instantly intrigued by the concept. I know it involves ACS, but I'm curious as to how exactly you intend on implementing the dynamic difficulty. I'm guessing it's essentially measuring things like the player's health/ammo/etc., am I correct? EDIT: Nevermind, just took a proper look at the OP. Edited June 16, 2018 by MFG38 1 Share this post Link to post
Pegleg Posted June 16, 2018 @YukiRaven The levels look great (as usual) and I love the dynamic concept. I assume that it would start out at the equivalent of HMP and then scale up or down as needed? Also, I echo the sentiment of interesting title. 9 hours ago, Suitepee said: Interesting idea, even more interesting choice of name. Any easter eggs planned? Given the title, I hesitate to wonder what sort of easter eggs you were thinking of. 1 Share this post Link to post
Remilia Scarlet Posted June 16, 2018 (edited) 11 hours ago, MFG38 said: EDIT: Nevermind, just took a proper look at the OP. Haha yeah, I was going to mention this. But if you still want more info, here ya go. There are two tables that both deal with health. The first table is used to calculate the base damage factor for the player (that is, how much damage the player receives from an attack; 1.0 = normal amount). It has three columns: health threshold, minimum number of deaths, and the new damage factor. A script, DifficultyAdjuster_DamageFactor(), is run every so many seconds (three at the moment) that looks at this table and first looks up the correct row based on the player's health. If it's less than or equal to the threshold, it then looks at the number of deaths column for that row. If it's greater than or equal to that value, then it makes note of the damage factor for that row. Next, it uses the second table. This table has three columns as well: low death threshold, high death threshold, and a multiplier. What it does is checks to see if the number of deaths falls within the range of the low and high death thresholds for a given row, then adjusts the new damage factor by that multiplier. It then sets the player's APROP_DamageFactor property to the computed value, delays, and repeats the process. Now as I mentioned, I'm keeping track of the number of deaths. What this means overall is that the more times you die, the easier it gets. In order to correctly keep track of this number between respawns and save game loads, this value is stored in a custom CVAR ("alexa_num_deaths"). To keep it from getting too easy, every once in a while (1 minute 12 seconds right now), another script will fire and reduce this value by one, never going below 0. I call this the DeathFudger() script. This is one way it gradually gets harder again. Another script, PossiblyMakeHarder(), is triggered not on an interval, but occasionally by a linedef. This script looks at the current CVAR value for the number of deaths ("alexa_num_deaths"), as well as the average time between the last three deaths (also stored in a CVAR, "alexa_average_last_death"), and gradually increases the Damage Factor for the player. This one behaves differently in that it'll possibly raise the damage factor above 1.0, meaning the player can take extra damage compared to normal. Obviously since it deals with the number of deaths, this means this is indirectly influenced by the DeathFudger() script as well. As for ammo spawning, I simply use proximity and a threshold. For example, if the player is below 10 shells and is within 800 map units of a particular MapSpot, a shell box spawns there. This is all done in a set of spawning scripts. However, the script that calls these spawning scripts does take other stuff into account. Specifically, if you've died a lot, things spawn a lot more often. If you've barely died, it takes a bit longer. The differences here are small and vary by seconds. Health is controlled the same way as ammo. There's one place where, when I spawn enemies with a script, I take into account the number of deaths to control what gets spawned. The difference is between a demon and a spectre right now, so that isn't being used much. I have a stat collection system in place that I borrowed from Umbra of Fate. Originally I used it for testing (because UoF was a pain to test). I simply added the number of deaths and the average time between deaths stats to it. However, there's always room to take the other stats it collects into account. It also keeps track of average health, armor, and ammo counts, and has a reset mechanism that can be called as-needed. Edited June 16, 2018 by YukiRaven : hit tab and enter accidentally, posting early 2 Share this post Link to post
Remilia Scarlet Posted July 1, 2018 Freaky Panties is almost done! I'm at the point that I need a few playtesters to run through it, so if you're interested, shoot me a PM. Just be sure to read the OP so that you know what this is about. I ended up simplifying the difficulty adjustment just slightly in the end, while also expanding it in ZScript very slightly. This shouldn't be noticeable in most cases, but it should make things pretty natural feeling. At least it has in my own testing. As far as what's still left to do, the final area still needs, but I need to wait until it's better tested to do so. I also need to get the music finished, but that won't take long. I've decided to use an old song of mine called Cyber-Run, rearranged for a YM2151 + SegaPCM chipset (like in many 16-bit Sega arcade games). This was originally going to be a VGM file, but since the sound code in GZDoom doesn't seem to support this particular chip combination (despite it being supported by the VGM format), I'll have to render it to an Ogg Vorbis file. No biggie. If you're curious, I'm using DefleMask to write the song. There's also a small handful of bugs, visual or otherwise, that I want to squash. But it's nothing that will affect playtesting. Latest screenshots: Spoiler Note the area in the west. This is the final area that needs playtesting before I detail it :D The northern area is just the exit room. 1 Share this post Link to post