Call of Chernobyl is a free-play sandbox mod for S.T.A.L.K.E.R. : Call of Pripyat created by TeamEPIC. It features 32 explorable maps, reworked level design and level fixes, new original level, Trucks Cemetery, Full AI and A-Life overhaul, engine and script enhancements, Repeatable task system which bases itself on A-Life events, Customizable weather environments for every map as well as surges and psi-storms from AF3, Character creation which includes name, portrait and faction selection; Several optional modes such as Ironman mode, story mode and zombie survival mode, New achievements, rankings and reputation system, PDA leaderboard and enhanced PDA statistics, Companion system with keyboard issued commands, many optional side-features and community-made addons . Call of Chernobyl was player's choice Mod of the Year 9th place in 2015 and 1st place in 2016!

Forum Thread
Poll: How should you check character level and abilities? (400 votes)
  Posts  
RPG character progression system (Games : S.T.A.L.K.E.R.: Call of Pripyat : Mods : S.T.A.L.K.E.R.: Call of Chernobyl : Forum : Suggestions : RPG character progression system) Locked
Thread Options 1 2
Jan 16 2016 Anchor

I decided to start developing such a feature. I'm not sure how to implement the UI. Through the PDA? Through the Inventory? Keep in mind PDA and Inventory are hardcoded so I'm going to have to spend a lot of time exporting these UI to lua if I want to adds the character stats and bonuses to these screens. The third option is to have a new bindable key that will bring up this menu in game. The fourth option is to have a usable journal item in your inventory that brings up the menu.


Progress and Information


Skill Trees

There will be 7 skill trees based on the STALKER acronym. Scavenger, Trespasser, Adventurer, Loner, Killer, Explorer and Robber. Each skill tree will have an undecided amount of tiers. Put in a point and you increase a tier. Each tier will give a simple bonus or ability. If you have suggestions on the kinds of bonuses offered from each tree, leave a comment.

Character Levels

I haven't decided but the current level cap will be 100. Every 3 levels you will receive a point to allocate into the skill trees at your free will. You gain experience for killing stalkers, killing mutants, completing tasks and finding artifacts. Level cap will be 100 but I haven't decided how many ability bonuses for each skill tree. Character levels will most likely be referred to as Rank in the new character menu I will design.

Bonuses

The kind of bonuses you will receive for each tier will be minor. The top tier for a tree will give a much better bonus. The kinds of bonuses to expect are simple things like increased carry weight, better sprinting, increased ability to stealth at night, etc. An example of a capstone for a tree will be Robber will offer the ability to force low ranking stalkers to surrender by pressing a keybind while their back is turned. The player will also shout "chiki-briki i v damke"!

The implementation on some of these features will likely require me to alter the source code to export ways to do these through lua.

Implementation

Below are new functions and formula I've written to deal with experience and character level. Further below you will find the results of the experience formula for each level. Currently in my build experience gain, in all the possible ways I mentioned above, is already implemented. The UI work has not even begone nor the bonuses:

function add_experience(n)
 actor_statistic.experience = actor_statistic.experience + n
end

function add_experience_mul(n)
 actor_statistic.experience = actor_statistic.experience + (needed_for_next_level(true)*n)
end

function remove_experience(n)
 actor_statistic.experience = actor_statistic.experience - n
end

function remove_experience_mul(n)
 actor_statistic.experience = actor_statistic.experience - (needed_for_next_level(true)*n)
end

function character_level()
 points = 0
 for level=1,LEVEL_CAP do
  local diff = level + 300 * math.pow(2,level/7)
  points = points + diff
  if not ( math.floor(points/4) <= actor_statistic.experience ) then
   return level
  end
 end
 return LEVEL_CAP
end

function max_available_points()
 return math.floor(character_level()/3)
end

function needed_for_next_level(total)
 points = 0
 for level=1,LEVEL_CAP do
  if (level == LEVEL_CAP) then 
   return 0 
  end
  local diff = level + 300 * math.pow(2,level/7)
  points = points + diff
  local c = math.floor(points/4)
  if not ( c <= actor_statistic.experience ) then
   local d = math.floor( (points + (level+1) + 300 * math.pow(2,level/7)) / 4)
   if (total) then
    return d - c
   else
    return c - actor_statistic.experience
   end
  end
 end
 return 0
end
-----------------------------------------------------------------------------------------------
function assign_point_to_skill(skill,n)
 actor_statistic.skills[skill] = actor_statistic.skills[skill] + n
end
function calculate_available_points()
 local used = 0
 for skill, v in pairs(actor_statistic.skills) do 
  used = used + v
 end
 return max_available_points() - used
end

level 2 = 83
level 3 = 174
level 4 = 276
level 5 = 389
level 6 = 513
level 7 = 650
level 8 = 802
level 9 = 970
level 10 = 1155
level 11 = 1359
level 12 = 1585
level 13 = 1834
level 14 = 2109
level 15 = 2412
level 16 = 2747
level 17 = 3117
level 18 = 3525
level 19 = 3975
level 20 = 4472
level 21 = 5021
level 22 = 5626
level 23 = 6294
level 24 = 7031
level 25 = 7845
level 26 = 8742
level 27 = 9733
level 28 = 10827
level 29 = 12034
level 30 = 13366
level 31 = 14836
level 32 = 16459
level 33 = 18251
level 34 = 20228
level 35 = 22410
level 36 = 24819
level 37 = 27477
level 38 = 30412
level 39 = 33652
level 40 = 37228
level 41 = 41176
level 42 = 45533
level 43 = 50344
level 44 = 55654
level 45 = 61517
level 46 = 67988
level 47 = 75132
level 48 = 83019
level 49 = 91726
level 50 = 101339
level 51 = 111950
level 52 = 123666
level 53 = 136599
level 54 = 150878
level 55 = 166642
level 56 = 184046
level 57 = 203260
level 58 = 224472
level 59 = 247892
level 60 = 273748
level 61 = 302294
level 62 = 333810
level 63 = 368605
level 64 = 407021
level 65 = 449434
level 66 = 496261
level 67 = 547960
level 68 = 605039
level 69 = 668057
level 70 = 737634
level 71 = 814452
level 72 = 899264
level 73 = 992902
level 74 = 1096285
level 75 = 1210428
level 76 = 1336450
level 77 = 1475588
level 78 = 1629208
level 79 = 1798815
level 80 = 1986076
level 81 = 2192826
level 82 = 2421095
level 83 = 2673122
level 84 = 2951381
level 85 = 3258602
level 86 = 3597800
level 87 = 3972302
level 88 = 4385785
level 89 = 4842304
level 90 = 5346340
level 91 = 5902840
level 92 = 6517262
level 93 = 7195638
level 94 = 7944623
level 95 = 8771568
level 96 = 9684586
level 97 = 10692638
level 98 = 11805616
level 99 = 13034440
level 100 = 14391170


Edited by: Alundaio

Jan 16 2016 Anchor

Very excited about this feature. I think the PDA would be by far the most suitable way to display the new information. The ideas for bonuses you posted on the other thread are excellent. One possible idea I thought of is highlighting mutant locations on the mini-map like in Clear Sky. That could be a part of the Loner tree maybe? It kind of fits because someone who likes travelling on their own may want to avoid most mutants.

Jan 17 2016 Anchor

I'm excited, too. Many years ago when Fallout 3 first came out I wanted to make an RPG system in Stalker but it wasn't possible. Now with source code I can change anything.

Yeah, any more ideas are welcome especially for Loner and Adventurer as I can't think of many things for these.


Status update:

Scavenger and Explorer bonuses are implemented. Both have 5 tiers. Scavenger focuses on loot bonuses (ie. more ammo, better condition on found equipment, etc) while Explorer focuses on movement bonuses. I'm in the process of exporting visibility calculations used in engine to lua and I'm sure many other modders might be interested in this as you can theoretically create a stealth system. Once that is done I will work on Trespasser bonuses which will focus on detection avoidance and stealth.

UI will be done last so there is still plenty of time to vote

EDIT:

For you hungry modders out there look below for new lua code to determine visibility based on visibility settings in m_stalker.ltx. What is interesting is that in engine only luminosity was considered for the actor. I removed this, now luminosity is considered for both mutants and stalkers. This will fix the notorious NPCs shooting at other NPCs through walls because of certain lighting conditions.

-- Visual Memory Manager exports
-- by Alundaio 

-- called from engine
-- This occurs during the visible check. If value >= visiblity_threshold then object is considered visible
function get_visible_value(npc,who,distance,object_distance,time_delta,time_quant,velocity,velocity_factor,luminocity,always_visible_distance)
	return time_delta / time_quant * luminocity * (1 + velocity_factor*velocity) * (distance - object_distance) / (distance - always_visible_distance)
end

-- called from engine
-- This is used in visibility calculation. Normally this is only used for actor and would return 1.0 for stalker/mutant
-- This return value is used in the above function
function object_luminocity(npc,who,luminocity,luminocity_factor)
	local power = math.log(luminocity > 0.001 and luminocity or .001)*luminocity_factor
	return math.exp(power)
end

Edited by: Alundaio

Jan 17 2016 Anchor

S.T.A.L.K.E.R + FALLOUT = OMG ! Can you add the gameplay of Metal Gear Solid 5 in third person view, too ?

Seriously, Fallout is the first thing i thought about when you started talking about such features.

As an FPS, Fallout sucks (well, the last one is a better shooter but it still sucks) and i've always thought the S.T.A.L.K.E.R series lacked of more RPG elements.

One question : Do you still think to make this as an addon or will it be a new evolution of CoC (patches) ?

Edited by: Zealot_K

Jan 17 2016 Anchor
strelok_komputer wrote:

S.T.A.L.K.E.R + FALLOUT = OMG ! Can you add the gameplay of Metal Gear Solid 5 in third person view, too ?

Seriously, Fallout is the first thing i thought about when you started talking about such features.

As an FPS, Fallout sucks (well, the last one is a better shooter but it still sucks) and i've always thought the S.T.A.L.K.E.R series lacked of more RPG elements.

One question : Do you still think to make this as an addon or will it be a new evolution of CoC (patches) ?

I think it will be part of main Call of Chernobyl but will be toggleable some place so that it can be disabled for people who don't want it. Otherwise it would just be another addon for me to keep updating for conflicts.

I wish I could add good third person play, I actually prefer 3rd person.

Edited by: Alundaio

Jan 17 2016 Anchor

This is just a personal opinion and it could be subject to change:


Scavenger - looting skill (higher level in this skill = better chance to find high tech items/artefacts on dead bodies);

Trespasser - stealth skill (higher level = less detectable);

Adventurer - survivability skill (higher level = better resistances, speed, health, artefact bonuses, etc.);

Loner - social skill (higher level = can make more friends or more enemies or receive more money for tasks);

Killer - weapons skill (higher level = better weapon proficiency);

Explorer - artefact skill (higher level = more rare artefacts or with higher chance to respawn after emissions) - level 100 = guide option or something similar;

Robber - thief skill (obviously what you already said it would be).


And, if it's possible, every faction should have some bonuses for one or two skills in the beginning of the game:

Loner - +trespasser, loner;

Bandit - +scavenger, robber;

Military - +adventurer, killer;

Duty - +adventurer, killer;

Freedom - +scavenger, explorer;

Mercenary - +trespasser, killer;

Ecologist - +scavenger, explorer;

Clear Sky - +adventurer, loner;

Monolith - +explorer, killer.




Jan 17 2016 Anchor

Loner - social skill (higher level = can make more friends or more enemies or receive more money for tasks);

Just want to point out that a loner is someone who is not social. Making friends easier or being given more money for tasks wouldn't make sense. For example the idea Alundaio already has (bonuses when without companion) makes sense for a loner and is opposite of that suggestion.

Jan 17 2016 Anchor
Khimicheskiy_Ali wrote:

Loner - social skill (higher level = can make more friends or more enemies or receive more money for tasks);

Just want to point out that a loner is someone who is not social. Making friends easier or being given more money for tasks wouldn't make sense. For example the idea Alundaio already has (bonuses when without companion) makes sense for a loner and is opposite of that suggestion.

Yeah, i didn't thought this through at that moment ;)

Jan 17 2016 Anchor

Putting in my vote for PDA menu, if only for my slightly selfish reasons as I desperately want LUA access to the PDA :p

Jan 17 2016 Anchor

Putting in my vote for PDA menu, if only for my slightly selfish reasons as I desperately want LUA access to the PDA :p

IMO it's the most logical and professional of all the methods too. All of the player's stats and information in STALKER games have always been stored in the PDA. Comparable games like Fallout also have the information for character level and abilities stored the same way (a Pip-Boy is basically a futuristic PDA.). They often use journals in fantasy RPGs, but I can't imagine a STALKER walking around with a paper journal and a pen in his backpack. :) The entire method of clicking something in your inventory seems like a work-around to me. Which is fine if that's the only method available, but not when there is an alternative. There, that's my sales pitch done. :D


Jan 17 2016 Anchor

Okay Trespasser is implemented, so things are going as planned. Here is outlook of the skill:

Tier 1: Slightly harder to detect during low-light conditions

Tier 2: Slightly harder to detect while moving

Tier 3: Slightly harder to detect during low-light conditions

Tier 4: Slightly harder to detect while moving

Tier 5: Significantly harder to detect while not moving


@TheNoxx: Faction bonuses would be interesting I will keep that in mind


EDIT

I don't think I'm going to do damage or immunity bonuses for any of the passive traits. That is left to equipment and upgrades. It would become very unbalanced with them considering that people will be using different weapon addons and things. I can't think of many good ideas for Robber except what I have implemented last night. Tier 5 will be the ability to run up to enemies (either sneaking or during combat) and force them to put their hands up. It works in a similar way to surrendered wounded stalkers.

I need some more ideas for Killer, Robber, Adventurer and Loner. Scavenger, Trespasser and Explorer are done. Maybe the ability to disarm when you shoot at the arm? Could be for Killer or Robber, perhaps.

Khimicheskiy mentioned on the other thread about seeing monster lairs on PDA, for loner. But I think I will do this for Adventurer. I won't be able to do the compass teleport thing like I said in the other thread without Bangalore's help as he was basically the only one who did the LE edits for me. I can use LE but I don't feel comfortable with it and sometimes end up having problems with it crashing.

Edited by: Alundaio

Jan 23 2016 Anchor

I've been racking my brain for some more ideas, but nothing's coming to me unfortunately. I like your choice to move the PDA bonus to the Adventurer skill tree. And disarming people like that sounds awesome. IMO that bonus would be a perfect fit for the Killer skill tree (makes sense: disarming people makes killing them easier.). Plus, adding that to the Robber skill tree may make the Robber skill tree overpowered in comparison to the others (Robbers will already have that cool ability you implemented for tier 5.).

Edited by: Khimicheskiy_Ali

Jan 24 2016 Anchor


Yes, i really like the ability to disarm or cripple for the killer (that's one thing i like in the Fallout series)

Adventurer :

Maybe the ability to loot and cook mutants meat at fires.

A better immunity to radiation.

The ability to repair weapons with pieces of other weapons and without a tool-kit.



Edited by: Zealot_K

Jan 25 2016 Anchor

Alright, since changing damages/immunities are left to the outfits/weapons and upgrade system, bonuses for some skills could be a little hard to get. So, i got some ideas, but they are hard to implement or even impossible.

Killer: Well, i think having 100% in triggering events is too much (just my opinion), so i say for killer skill it should be disarming the enemy by shooting his hands(?), higher tiers meaning higher chance(%), and for ultimate tier, besides the percent chance of disarming, add an 100% chance of an event like: if an enemy is cooking a grenade, shooting him should blow him up. :))

Robber: Like the killer skill, i think it should be chance triggered. Running and robbing enemies is an instant win, and if it is 100% chance of that, isn't it too op? So i thought having a chance to rob enemies to be in 50% or even more in highest tier and again for the last tier of this skill, to add the thief implementation (if possible, and with 100% chance), meaning in crouch mode and by the help of a high level trespasser, behind an enemy (or even neutral?) by pressing the use key, you could open the looting menu (window) and take whatever you find (if you find anything).

Adventurer: The idea of having monster lair on PDA is not bad, can be for until ultimate tier (low skill level shows there are mutants, higher levels shows how many and what mutants?), when it can be added (if it can) the survival event (?), thats because a stalker in the harsh conditions of the Zone, in time develops some abilities for surviving, meaning when his life is below a threshold (10-20%), for a period of time (seconds), triggers immunity to all damages (i think this can be changed without messing with outfits). And of course, it should be a % chance for the event (50% or less).

Loner: This is the hard one. So, when not having any companions, when an enemy is wounded and on the ground, besides the robber options, for loner it can be added a new dialog where you can help the enemy by giving him a medkit (chance triggered also). Maybe he should now become neutral?, and on the highest level of skill, helping a wounded enemy, he would become your companion? (% chance). But i think again and say it should not mess with the faction's relations (if it is possible). And again, the moment you take an enemy for companionship, is only one, in that moment, the loner skill should not work anymore.

Other idea for loner skill is to make the stalker neutral to zombies, but this skill is now useless for monolith :|. Maybe messing around with those ghosts (met them in yantar) an if i noticed correctly, when they attack you, health drops, so for high levels of loner skill, playing without companions gives immunity to ghosts?. Yeah, a high tier loner is not afraid of ghosts when being alone anymore. :))


I just woke up, so sorry for some unreal suggestions:)

Jan 25 2016 Anchor

I think I can pitch some ideas as well.

Robber - could get more loot from robbing people at higher levels, higher chance to wound instead of kill.

Loner - Maybe just general character improvements like running speed or something similar to that?

Adventurer - at the highest level, ability like the Veles detector - you can see individual anomalies or navigate anomalies better, possibly.


Jan 30 2016 Anchor

Looks like I have to remake entire PDA in lua which will be a pain in the ass. Will update if I make any progress on it.

Jan 30 2016 Anchor

Good luck and thank you for all your work.

Feb 1 2016 Anchor

Damn this is a pretty good idea, I don't know if this helps but in SGM they have a Rank system maybe you can use something of that.
Thanks for all Alundaio :)

Feb 1 2016 Anchor

Okay, I'm having a rocky start with PDA exports, mainly because I'm not an expert in C++ as it's been about a decade since college C++ courses. Another problem is my slow PC takes about 30-40 minutes just to build xrGame.dll just for little changes. My goal mainly is to export all the CUIPdaWnd methods to lua as a class wrapper. It's working except some methods don't work at all, mainly SetActiveSubDialog.

As always, some technical stuffs for those who like it

Here is the lua class, I can see working PDA in game just fine with it: Pastebin.com

Basically I can re-code PDA methods in lua. Say I don't like how engine CUIPdaWnd:Show() works, I can just comment out CUIPda.Show(self,b) and re-write how it should work. This is going to allow people to add new tabs, buttons or windows to PDA without altering the source code further.

Here is engine source that lets me do it,

UIPdaWnd_script.h Pastebin.com

UIPdaWnd_script.cpp Pastebin.com


Not only did I do this but I exported a lot of other UI methods to lua, like OnMouseAction! This means now with any lua scripted UI you can get mouse x, y and action! Furthermore I exported SetMouseCapture which means you can attach UI Windows to mouse!

The PDA map has been exported as well and I think it's functionality will allow for some really neat new possiblities. You can get the level positional data from map spots on the global map! This means in the future it might be possible to code in stuff like Fast Travel by right-clicking an icon on the map or have squads attack a location with a mouse click in a mod like Warfare.

EDIT:


Okay got SetActiveSubDialog to work because I forgot to make it virtual in CUIPdaWnd's class definition. Now I can add a character tab to see your level and experience. I was looking at Statistic screen, it might be possible to just condense the layout and show what I need to show here.

Edited by: Alundaio

Feb 2 2016 Anchor

Impressive... even if i understand your explanations, too bad i haven't got the "brain" and the education to master all this.

Feb 2 2016 Anchor

Alundaio, I love you.

I've been looking for a way to disable the PDA for months. Several C++ programmers have tackled the task for us, but nothing has ever come to fruition.

Mad respect.

Feb 2 2016 Anchor
burguois wrote:

Alundaio, I love you.

I've been looking for a way to disable the PDA for months. Several C++ programmers have tackled the task for us, but nothing has ever come to fruition.

Mad respect.


What do you mean by disable? If you have any specific things you want to be able to do, let me know.

Feb 2 2016 Anchor

From what it seems like, you're doing exactly what I want, which is to allow us to hide the main pda and display a different one (basically the same, but with an error texture to indicate a BSOD) depending on certain conditions.

For Radium we've tried everything to get this done. i guess, for whatever reason, most of the CUI stuff from SoC doesn't work in COP because the PDA is coded differently.

Adding a dialog to the renderer also didn't pan out that great.

If that is possible I promise you my firstborn child, whenever I get around to that.

Feb 2 2016 Anchor
burguois wrote:

From what it seems like, you're doing exactly what I want, which is to allow us to hide the main pda and display a different one (basically the same, but with an error texture to indicate a BSOD) depending on certain conditions.

For Radium we've tried everything to get this done. i guess, for whatever reason, most of the CUI stuff from SoC doesn't work in COP because the PDA is coded differently.

Adding a dialog to the renderer also didn't pan out that great.

If that is possible I promise you my firstborn child, whenever I get around to that.

Okay, yeah that should be possible. Still more work to be done. CUIPdaWnd is exported but now I have to re-write some of the methods in Lua, which requires exporting other things like CUIMapWnd, CUITaskWnd, CUILogsWnd, CMapSpot and 4 or 5 other classes.

If whomever you got to try and do this they probably didn't realize that you can use class_registrator.script to load lua instances of an object in engine. For example my ui_pda_menu class is loaded and replaces the engine CUIPdaWnd like this:

class_registrator.script

c_register	(object_factory, "ui_pda_menu.pda_menu","PDA_MENU", "pda_menu")


CUIGameCustom.cpp

	//Alundaio: PDA lua wrapper
	DLL_Pure* dlg = NEW_INSTANCE(TEXT2CLSID("PDA_MENU"));
	if (dlg)
		PdaMenu = smart_cast<CUIPdaWnd*>(dlg);
	else
		PdaMenu = xr_new<CUIPdaWnd>();
	//-Alundaio

The engine will create an instance of my lua scripted PDA menu if it exists, if not it just creates the engine version.

Edited by: Alundaio

Feb 3 2016 Anchor

I didn't actually know that either.

That's why you're the master.

Reply to thread
click to sign in and post

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.