[Release] Scattered Evil for Hexen (new version Dec 8)

For Total Conversions and projects that don't otherwise fall under the other categories.
Forum rules
The Projects forums are ONLY for YOUR PROJECTS! If you are asking questions about a project, either find that project's thread, or start a thread in the General section instead.

Got a cool project idea but nothing else? Put it in the project ideas thread instead!

Projects for any Doom-based engine (especially 3DGE) are perfectly acceptable here too.

Please read the full rules for more details.

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby rambo » Sat Dec 22, 2018 1:56 pm

MaxRideWizardLord wrote:Will it be ported to gzdoom one day?


It would have to be a community effort.

The assets probably wouldn't need a lot of work (though we are talking about hundreds of model definitions to be converted and thousands of actor definitions that need to be reviewed and possibly modified), but converting the code would probably be a huge undertaking, if even possible. Scattered Evil uses some ACS and lots of DECORATE, but the majority of the code is in two other languages: VavoomC which is a Vavoom feature and the custom conversation engine written exclusively for KoraxRPG that has its own syntax.

If anyone with knowledge of ZSCRIPT is interested into looking into this, below an example with the conversation script, which is an abstraction layer on top of VavoomC, allowing designers to create complex NPC conversations with very little programming knowledge and no need to touch actual gameplay code.

The NPC in the example buys quartz flasks from the player by the dozen. The price she pays and the maximum amount she is willing to buy depends on a matrix of the RPG Complexity and the game difficulty setting, only showing appropriate conversation options (i.e. offer to buy an artifact is hidden if the purchase limit has been reached or the player doesn't have the artifacts).

Code: Select allExpand view
//------------------------------------------------------------------------------
conitem k21202 21202
{
   name "Amanda";

   var WTBArtiHealth integer 6;
   
   hello
   {
      say "Would you like to sell us some of your excess inventory?" f1whatcanidoforyoutoday;
   }
   
   //----
   
   choice none "A dozen Quartz Flasks for 12 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOff)) )
   {
      Player.RemoveInventory( KRPGArtiHealth , 12 );
      Player.GiveInventory( Coin , 12 );
      say "Pleasure doing business. Got more to sell?" cointake;
   }
   
   choice none "A dozen Quartz Flasks for 15 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierEasy)) )
   {
      Player.RemoveInventory( KRPGArtiHealth , 12 );
      Player.GiveInventory( Coin , 15 );
      say "Pleasure doing business. Got more to sell?" cointake;
   }
   
   choice none "A dozen Quartz Flasks for 12 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierMedium)) )
   {
      Player.RemoveInventory( KRPGArtiHealth , 12 );
      Player.GiveInventory( Coin , 12 );
      say "Pleasure doing business. Got more to sell?" cointake;
   }
   
   choice none "A dozen Quartz Flasks for 9 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierHard)) )
   {
      Player.RemoveInventory( KRPGArtiHealth , 12 );
      Player.GiveInventory( Coin , 9 );
      say "Pleasure doing business. Got more to sell?" cointake;
   }
   
   choice none "A dozen Quartz Flasks for 15 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierEasy)) )
   {
      if (WTBArtiHealth is 1)
      {
         set WTBArtiHealth 0;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
      }
      else if (WTBArtiHealth is 2)
      {
         set WTBArtiHealth 1;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else if (WTBArtiHealth is 3)
      {
         set WTBArtiHealth 2;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else if (WTBArtiHealth is 4)
      {
         set WTBArtiHealth 3;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else if (WTBArtiHealth is 5)
      {
         set WTBArtiHealth 4;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else if (WTBArtiHealth is 6)
      {
         set WTBArtiHealth 5;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 15 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else
      {
         say "Sorry, our stores are full. Got something else to sell maybe?" none;
      }
   }
   
   choice none "A dozen Quartz Flasks for 12 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierMedium)) )
   {
      if (WTBArtiHealth is 2)
      {
         set WTBArtiHealth 0;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 12 );
         say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
      }
      else if (WTBArtiHealth is 4)
      {
         set WTBArtiHealth 2;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 12 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else if (WTBArtiHealth is 6)
      {
         set WTBArtiHealth 4;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 12 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else
      {
         say "Sorry, our stores are full. Got something else to sell maybe?" none;
      }
   }
   
   choice none "A dozen Quartz Flasks for 9 crowns."
   if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierHard)) )
   {
      if (WTBArtiHealth is 3)
      {
         set WTBArtiHealth 0;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 9 );
         say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
      }
      else if (WTBArtiHealth is 6)
      {
         set WTBArtiHealth 3;
         Player.RemoveInventory( KRPGArtiHealth , 12 );
         Player.GiveInventory( Coin , 9 );
         say "Pleasure doing business. Got more to sell?" cointake;
      }
      else
      {
         say "Sorry, our stores are full. Got something else to sell maybe?" none;
      }
   }
   
   //----

   choice none "No, I just want to buy some stuff."
   {
      say "Macy handles that part of business." f1haveaniceday;
      terminate;
   }

   choice none "Enough trading for now."
   {
      say "I'll be here if you change your mind." f1haveaniceday;
      end;
   }
}
rambo
Korax' Heritage Team Member
 
Joined: 13 Apr 2017

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby rambo » Wed Jan 02, 2019 1:49 pm

Just a quick update: I found the bug with a number of weapons/spells (like sapphire wand and armageddon) not using mana, this will be fixed in the next release.
rambo
Korax' Heritage Team Member
 
Joined: 13 Apr 2017

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby John Stalvern » Wed Jan 02, 2019 3:45 pm

I found an odd bug; after clearing the Jodisec mine and returning to Oesis (sp?) outpost for the reward, the game glitched and I couldn't leave the outpost. Walking for any amount in any direction would not trigger a return to the overworld. I haven't been able to replicate the bug.

I also noted that in Ostoria many vendors have the merchandise on their sale tables clip through the tables or appear on the floor. I mainly saw this in the trading hall.
John Stalvern
 
Joined: 21 Jun 2018

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby rambo » Wed Jan 02, 2019 7:58 pm

Sounds like the initial download that was up on ModDB for the first ca. 20 hours after release, then replaced. Most of those errors are just visual; in the case of Oresis Outpost some of the linedefs are missing the special for exiting to the travel map, but some of the linedefs have it so if you walk around the building in circles, you should be able to exit.
rambo
Korax' Heritage Team Member
 
Joined: 13 Apr 2017

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby Manhs » Sat Jan 05, 2019 7:46 am

rambo wrote:Just a quick update: I found the bug with a number of weapons/spells (like sapphire wand and armageddon) not using mana, this will be fixed in the next release.


Thanks, i want try it with the Mage ^^
Manhs
 
Joined: 08 Feb 2016

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby rambo » Mon Jan 07, 2019 6:52 pm

I decided to backport a number of fixes from the upcoming 1.6 release (which is probably in a few months):

Scattered Evil 1.5.1 patch is a minor bugfix release that is 100% compatible with existing 1.5 savegames. Get it from SourceForge or ModDB.


All Classes
  • Charisma now doesn't reduce the mana cost below 1 mana/shot or cast
  • Weapons and offensive spells now don't say "no mana" if the player has enough mana to shoot/cast (but less mana than the weapon's base mana cost)
Mage
  • Sapphire Wand
    • Damage now scales with Dexterity instead of Intelligence
    • Uses mana once again
  • Ruby Wand
    • Damage now scales with Dexterity instead of Intelligence
    • Uses mana once again
  • Bloodscourge
    • Damage now scales with Dexterity instead of Intelligence
  • Fireball
    • Damage greatly increased
    • Uses mana once again
  • Armageddon
    • Projectiles are once again green
    • Uses mana once again
Cleric
  • Morning Star
    • Can't be used any more if the player doesn't have enough mana
  • Serpent Staff
    • Damage now scales with Dexterity instead of Intelligence
    • Melee life drain function now restores health up to the player's maximum health
  • Evening Star
    • Can't be used any more if the player doesn't have enough mana
Fighter
  • Quietus
    • Weapon can't be used any more if the player doesn't have enough mana
  • Berserk
    • Now needs a minimum of 5 rage to cast
    • Now uses a maximum of 50 rage when cast
    • Duration is 5 secs + 0.2 secs per rage point spent, making duration min. 6 secs and max. 15 secs
rambo
Korax' Heritage Team Member
 
Joined: 13 Apr 2017

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby Manhs » Mon Jan 07, 2019 7:09 pm

Thanks for this patch!
Gonna play it very soon again ^^
I will share it in the facebook group of "heretic & hexen" too :)
Manhs
 
Joined: 08 Feb 2016

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby Manhs » Fri Jan 11, 2019 7:45 am

Back ;)

I refinished it, i did videos of my adventure with the mod!
https://www.youtube.com/watch?v=H0T6j4r ... LJsjLCRi2i

Again, awesome mod and concept, i like the fact it's like a real rpg, art of stuff like the NPC (characters who give you missions by exemple), journal and all are well made.
Sounds and themes fit well the atmosphere of the mod ^^ short medieval musics but nice for the maps!
The level design is enjoyable with some 3D floor stuff, the egyptian map with the mission of Daedolon is really cool.

About balance:
I think, it needs just a balance for some stuff, the "defensive" spell (invincibility) of the Mage, it lasts very long and it cost not a lot of magic at all, i think the effect should be short. When we get too much armor, we are like invincible too, too much armor replace the health for damage, i think it could be better if it takes a minimum for the health or if there is a limit for the armor to avoid it?
Mana system seemed ok! :D
I think, the attack speed can make some weapons a bit broken or overpowered, maybe if there is a limit for the attack speed per weapon (depending of the weapon), i think some competences should have a limit but it depends of the class/weapons.
Maybe not needed, but i think 6 bonus point per level up is a bit much, what about 3 or 4? if we put the 6 points on charisma or power on ranged, i could have been very strong at the start. Also when we did 70% of all the optional missions, we are like undefeatable. That's why less points per level up could help i think?
Just my thoughts about balance, the game is challenging and all at the beginning but close to the 3/4 of the game, it's really very easy! The "red" sapphire wand was really strong with the buff, could 1shot a lot of enemy (or 3 shot since it shoot 3times).

I hope you will continue to work on this mod, a good "next" story for Hexen, really awesome, it's fun to explore to find some NPC who have missions or pages for the journal (about cooking and general informations ^^) and some design of the weapons and spells are ok and not crazy with a ton of effects :) (i don't like when some weapons add too much things in their attack).

What are you next projects on the mod? Maybe new maps or others? The lenght is good anyway, needed 5 hours and a little more to finish it at 100% all the missions, i missed just a few journal pages :)
I will try with the Fighter another day ^^
Manhs
 
Joined: 08 Feb 2016

Re: [Release] Scattered Evil for Hexen (new version Dec 8)

Postby rambo » Mon Jan 14, 2019 7:50 am

I've watched all the videos from beginning to end, and it gave me a lot of valuable feedback, some of them things you mention above but a lot of other things too (e.g. running out of mana with the mage being a huge problem in the early stages, autoaim on/off not being a menu option etc.). I'll implement a number of changes in 1.6 based on this input.

As for the number of dungeons, the current limit on them is the time I can allocate for it. If the project had more than one mapper, more dungeons could be added faster. Mapping for Scattered Evil is probably 98% the same as vanilla Vavoom mapping and maybe 90% the same as making a map for ZDOOM. For anyone interested, there is a DoomBuilder 2 config file called "ScatteredEvil.cfg" in the 1.5 download (subfolder "documentation").


Warning: the rest of this post is a bit technical and is meant for those interested in the inner workings of the RPG system.

The original concept called for 10 being the base value in every ability, and improving on a linear scale, i.e. at 20 strength your melee attacks hit twice as hard as at 10 strength, at 100 strength ten times as hard etc. Weapon and movement speed also scaled more or less linearly.

I've started replacing this with a curve for diminishing returns in two different ways:
1) Movement and weapon speed can approach but never quite reach double the normal value (you get 1.5x the normal speed at 100 points in strength resp. dexterity, 1.67x at 200 points, 1.76x at 300 points).
2) Damage increase from str/dex/int will be 2x (instead of 3x) at 30 points, 4x (instead of 10x) at 100 points, 7x (instead of 28x) at 280 points.

As far as armor, I dug into the code and found that KRPG takes the original default armor value of 1/3 (0.33) and multiplies it with 40% of Constitution. While there is a cap of 75% (meaning that a quarter of each hit should still take life), I dug deeper into the underlying Vavoom code and found that the hard cap on final damage absorption is 2x the default armor value. Put the two together and you get up to 150% armor absorption, so as long as the armor piece holds, the player is effectively invulnerable.

From a first look at the code, I should be able to replace the whole Hexen armor system with a new one that not only doesn't scale to such high absorption levels but also allows for different armor pieces to offer protection against different types of attacks (e.g. fire resistance).
rambo
Korax' Heritage Team Member
 
Joined: 13 Apr 2017

Previous

Return to TCs, Full Games, and Other Projects

Who is online

Users browsing this forum: No registered users and 8 guests