- This topic has 0 replies, 1 voice, and was last updated 8 hours, 25 minutes ago by
leah.
-
AuthorPosts
-
Hello friends, you may know me by now since I have been here being cringe a couple of times but if you don’t, I am leah and Pooch and I picked up a copy of the Haven public release essentially like 4 seconds after it dropped, so while I have no idea how New Haven works I do like to interpret how the code used to work and speculate on it and gush about how well written and interesting it (always) is.
I have *fairly* recently realized how insanely talented Tyr is (I was a big $#!+ talker for a long time but I like to think I have grown slightly) so I won’t pretend to know exactly what he’s cooked up here but I’ll try and explain it the best way I can.
————————————————————————————————————-
For plots:
First the game will ensure that you are actually running a plot and you do have permission to run the plot, this much we know.
Each of your emotes is graded based on length and multiplied (with some strange math that I won’t pretend to understand) by number of plot participants.
karmagain = length * 5 / 130;
if (is_gm(ch))
karmagain = karmagain * (10 + UMIN(5, pop)) / 10;If anyone’s story is off and you have less than 3 players, halve your gain per emote
Solidity of all of the characters in the room is averaged and divided by 100, then your gain is multiplied by that number (i thiiiink)
As you gain karma while running the plot you’ll tick your earnedkarma amount, and as soon as earnedkarma reaches 2000, the plot will find your cap, which is the average solidity in the room x 80, with a soft cap of 15,000. If your plot is sponsored, 150%. If it’s a quest, 50%. If it’s a mystery or other, it instead soft caps at 10,000.
if (is_gm(ch) && plot != NULL && (!in_haven(ch->in_room) || plot->type == PLOT_MYSTERY)) {
plot->earnedkarma += amount;if (plot->karmacap == 0 && plot->earnedkarma >= 2000) {
int cap = average_solidity(ch->in_room);
cap *= 80;
cap = UMIN(cap, 15000);
if (plot->sponsored == 1) cap = cap * 3 / 2;
if (plot->type == PLOT_QUEST) cap /= 2;
if (plot->type == PLOT_MYSTERY) cap = 10000;
if (plot->type == PLOT_OTHER) cap = 10000;
plot->karmacap = cap;When you plot finish, Adventure type quests pay the author 2000, quest and mysteries give 0 payout. Use of any gallery characters not made by the author(i think) give the author another 500.
if ((*it)->type == PLOT_ADVENTURE || (*it)->type == PLOT_PVP || (*it)->type == PLOT_JOINT) {
offline_reward((*it)->author, TYPE_KARMA, 2000, NULL);
…
if (useother == TRUE)
offline_reward((*it)->author, TYPE_KARMA, 500, NULL);
(*it)->valid = FALSE;
}
…
if ((*it)->type == PLOT_MYSTERY) {
…
if (useother == TRUE)
offline_reward((*it)->author, TYPE_KARMA, 500, NULL);
(*it)->valid = FALSE;——————————————-
For encounters!
You start with a karma pool, a number you can earn up to before your x25 rate goes back to x1 rate, which is determined by how much of your total karma is encounter karma. in the code this is called encounter overload. With no overload, this is 2000 to start. there are 3 levels of overload and your karma pool gets divided by your overload level (so divide by 2 or 3, i think).
int enc_karma = ch->pcdata->account->encounter_karma;
if(enc_karma < 5000)
return 1;int t_karma = enc_karma + ch->pcdata->account->adventure_karma + ch->pcdata->account->mystery_karma
+ ch->pcdata->account->monster_karma + ch->pcdata->account->other_karma + ch->pcdata->account->misc_karma;if(enc_karma > t_karma/2) {
if(enc_karma >= 25000) return 3;
else return 2;
}
return 1;——————————————-
So if I was running this code (and I am on Duskholm still!) and I had to explain
The average expected karma for an encounter: Between 633-2000 (though I intend to make encounter overload less punishing presently)
The average expected karma for a plot: 15,000 for adventures, 7,500 for quests, and 10,000 for mysteries and other stuff
Why people were getting lower payouts for plots: The solidity score of your participants has got to go up
Why people were getting lower payouts for encounters: You’ve got to earn more karma outside of encounters
If the number of plot sessions affected plot karma payouts: They don’t
If the number of clues collected by participants affected the karma payout for plots: They don’t
If relic discovery on a plot affected the karma payout for a plot: It wouldn’t
If running content for the same group of people across plots and encounters affected karma payout: Only if by continuously taking them you are seeing their solidity score drop
If the AI (I’m thinking an LLM?) judged theme or other criteria for plot payout: Not as a part of this code.I can’t imagine New Haven uses exactly the same code, but it *might be* that some of the foundations of this code made it into New Haven so maybe this has been illuminating or at least interesting for players who are interested in how the system works (or used to)
-
AuthorPosts
- You must be logged in to reply to this topic.

