code:
var Remtairy = Remtairy || {};
Remtairy.ReactionScore = Remtairy.ReactionScore || {};

//=============================================================================
 /*:
 * @plugindesc Reaction Score
 * @author Remtairy
 *
 * @help
 * This is a private plugin.
 * Do not redistribute, use, or modify this plugin
 * without explicit written permission from Remtairy.
 *
 */
//=============================================================================

const VAR_DEF_RS_LV1_REQ = 30;
const VAR_DEF_RS_LV2_REQ = 60;
const VAR_DEF_RS_LV3_REQ = 125;
const VAR_FP_SEX_RS_LV1_REQ = 20;
const VAR_FP_SEX_RS_LV2_REQ = 40;
const VAR_FP_SEX_RS_LV3_REQ = 80;
const VAR_PA_SEX_RS_LV1_REQ = 30;
const VAR_PA_SEX_RS_LV2_REQ = 60;
const VAR_PA_SEX_RS_LV3_REQ = 100;
const VAR_TYPE_RS_LV1_REQ = 10;
const VAR_TYPE_RS_LV2_REQ = 20;
const VAR_TYPE_RS_LV3_REQ = 30;
const VAR_TOY_RS_LV1_REQ = 10;
const VAR_TOY_RS_LV2_REQ = 30;
const VAR_TOY_RS_LV3_REQ = 70;

Game_Actor.prototype.getReactionScore = function() {
	let score = 0;

	if(this.isInReceptionistPose()) {
		score += this.getReactionDuringSexScore(0.8, 0);
		score += this.reactionScore_enemyVisitorPassive() * 2;
		score += this.reactionScore_enemyGoblinPassive();
		score += this.reactionScore_slutLevel(0.2);
		score += this.reactionScore_masochismLevel(5);
		score += this.reactionScore_sadismLevel(3);
	}
	else if($gameParty.isInWaitressBattle) {
		if(this.isInWaitressServingPose()) {
			score += this.reactionScore_jobWaitressPassive() * 3;
			score += this.reactionScore_slutLevel(0.2);
			score += this.reactionScore_masochismLevel(7);
			score += this.reactionScore_sadismLevel(3);
		}
		else {
			score += this.reactionScore_jobWaitressPassive() * 2;
			score += this.getReactionDuringSexScore(0.7, 0.5);
			score += this.reactionScore_slutLevel();
			score += this.reactionScore_masochismLevel(7);
			score += this.reactionScore_sadismLevel(3);
		}
	}
	else if(this.isInDefeatedLevel1Pose()) {
		score += this.getReactionDuringSexScore(0.8, 1);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel(6);
		score += this.reactionScore_sadismLevel(4);
		score += this.reactionScore_defeatedBlowbangPassive() * 1.5;
	}
	else if(this.isInDefeatedLevel2Pose()) {
		score += this.getReactionDuringSexScore(0.8, 0.8);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel(10);
		score += this.reactionScore_defeatedUrinalPassive() * 1.5;
	}
	else if(this.isInDefeatedGuardPose()) {
		score += this.getReactionDuringSexScore(0.8, 1);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel(8);
		score += this.reactionScore_sadismLevel(2);
		score += this.reactionScore_enemyGuardPassive() * 1.5;
	}
	else if(this.isInSlimeAnalPiledriverSexPose()) {
		score += this.getReactionDuringSexScore(0.5, 3);
		score += this.reactionScore_slutLevel(0.2);
		score += this.reactionScore_masochismLevel(7);
	}
	else if(this.isInFootjobSexPose()) {
		score += this.getReactionDuringSexScore(0.8, 1);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel(1);
		score += this.reactionScore_sadismLevel(9);
	}
	else if(this.isInRimjobSexPose()) {
		score += this.getReactionDuringSexScore(0.8, 1);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel(9);
		score += this.reactionScore_sadismLevel(1);
	}
	else if(this.isInSexPose()) {
		score += this.getReactionDuringSexScore(0.8, 1);
		score += this.reactionScore_slutLevel();
		score += this.reactionScore_masochismLevel();
		score += this.reactionScore_sadismLevel();
	}
	else if(this.isInCombatPose()) {
		score += this.getCombatPoseReactionScore(false);
	}
	else if(this.isInDownPose()) {
		score += this.getDownPoseReactionScore();
	}

	//console.log('general score ' + score);
	return score;
};

Game_Actor.prototype.getMapReactionScore = function() {
	let score = 0;

	score += this.reactionScore_slutLevel(0.4);
	score += this.reactionScore_masochismLevel(8);
	score += this.reactionScore_sadismLevel(8);

	return score;
};

Game_Actor.prototype.getCombatPoseReactionScore = function(masoLean) {
	let score = 0;

	score += this.reactionScore_slutLevel(0.4);
	if(masoLean) {
		score += this.reactionScore_masochismLevel(16);
		score -= this.reactionScore_sadismLevel(3);
	}
	else {
		score += this.reactionScore_masochismLevel(8);
		score += this.reactionScore_sadismLevel(8);
	}

	return score;
};

Game_Actor.prototype.getDownPoseReactionScore = function() {
	let score = 0;

	if(this.isInDownFallDownPose()) {
		score += this.reactionScore_falldownPassive() * 2;
		score += this.reactionScore_slutLevel(0.37);
		score += this.reactionScore_masochismLevel(10);
		score -= this.reactionScore_sadismLevel(3);
	}
	else if(this.isInDownStaminaPose()) {
		score += this.reactionScore_downStaminaPassive() * 2;
		score += this.reactionScore_slutLevel(0.37);
		score += this.reactionScore_masochismLevel(10);
		score -= this.reactionScore_sadismLevel(3);
	}
	else {
		score += this.reactionScore_slutLevel(0.4);
		score += this.reactionScore_masochismLevel(14);
		score -= this.reactionScore_sadismLevel(2);
	}

	return score;
};

Game_Actor.prototype.getOrgasmReactionScore = function() {
	let score = 0;
	score += this.getReactionScore() * 0.4;
	score += this.reactionScore_orgasmPassive();
	return score;
};

Game_Actor.prototype.getBukkakeReactionScore = function() {
	let score = 0;
	score += this.getReactionScore() * 0.4;
	score += this.reactionScore_bukkakePassive();
	return score;
};
Game_Actor.prototype.getSwallowReactionScore = function() {
	let score = 0;
	score += this.getReactionScore() * 0.4;
	score += this.reactionScore_swallowPassive();
	return score;
};
Game_Actor.prototype.getPussyCreampieReactionScore = function() {
	let score = 0;
	score += this.getReactionScore() * 0.4;
	score += this.reactionScore_pussyCreampiePassive();
	return score;
};
Game_Actor.prototype.getAnalCreampieReactionScore = function() {
	let score = 0;
	score += this.getReactionScore() * 0.4;
	score += this.reactionScore_analCreampiePassive();
	return score;
};

Game_Actor.prototype.getCockStareReactionScore = function() {
	let score = 0;

	score += this.reactionScore_slutLevel(0.4);
	score += this.reactionScore_masochismLevel(10);
	score += this.reactionScore_sadismLevel(3);
	score += this.reactionScore_cockStarePassive();
	return score;
};

Game_Actor.prototype.getButtSpankingReactionScore = function() {
	let score = 0;
	score += this.reactionScore_buttSpankingPassive();
	score += this.reactionScore_slutLevel();
	score += this.reactionScore_masochismLevel(10);
	score -= this.reactionScore_sadismLevel(2);
	return score;
};

Game_Actor.prototype.getReactionDuringSexScore = function(sexPositionMultipler, partnerMultipler) {
	if(sexPositionMultipler === 0) { }
	else if(!sexPositionMultipler) sexPositionMultipler = 1;
	if(partnerMultipler === 0) { }
	else if(!partnerMultipler) partnerMultipler = 1;

	let score = 0;

	score += this.currentSexualPositionsReactionScore(sexPositionMultipler);
	score += this.currentSexualPartnersReactionScore(partnerMultipler);

	return score;
};

Game_Actor.prototype.currentSexualPositionsReactionScore = function(sexPositionMultipler) {
	if(sexPositionMultipler === 0) { }
	else if(!sexPositionMultipler) sexPositionMultipler = 1;

	let score = 0;
	let sexPositions = 0;

	if(this.isBodySlotPenis(LEFT_HAND_ID) || this.isBodySlotPenis(RIGHT_HAND_ID)) {
		sexPositions++;
		score += this.reactionScore_handjobPassive();
	}
	if(this.isBodySlotPenis(MOUTH_ID)) {
		sexPositions++;
		score += this.reactionScore_blowjobPassive();
	}
	else if(this.isBodySlotAnus(MOUTH_ID)) {
		sexPositions++;
		score += this.reactionScore_rimjobPassive();
	}

	if(this.isBodySlotPenis(BOOBS_ID)) {
		sexPositions++;
		score += this.reactionScore_tittyFuckPassive();
	}
	if(this.isBodySlotPenis(PUSSY_ID)) {
		sexPositions++;
		score += this.reactionScore_pussySexPassive();
	}
	else if(this.isBodySlotToy(PUSSY_ID)) {
		sexPositions++;
		score += this.reactionScore_pussyToyPassive();
	}
	else if(this.isBodySlotTongue(PUSSY_ID)) {
		sexPositions++;
		score += this.reactionScore_cunniPassive();
	}

	if(this.isBodySlotPenis(ANAL_ID)) {
		sexPositions++;
		score += this.reactionScore_analSexPassive();
	}
	else if(this.isBodySlotToy(ANAL_ID)) {
		sexPositions++;
		score += this.reactionScore_analToyPassive();
	}

	if(this.isBodySlotPenis(FEET_ID)) {
		sexPositions++;
		score += this.reactionScore_footjobPassive();
	}

	if(sexPositions === 0) return 0;
	return score / sexPositions * sexPositionMultipler;
};

Game_Actor.prototype.currentSexualPartnersReactionScore = function(partnerMultipler) {
	if(partnerMultipler === 0) { }
	else if(!partnerMultipler) partnerMultipler = 1;

	let score = 0;
	let partnerTypes = 0;
	let partnerArray = [];
	partnerArray[ENEMYTYPE_GUARD_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_GUARD_TAG);
	partnerArray[ENEMYTYPE_THUG_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_THUG_TAG);
	partnerArray[ENEMYTYPE_GOBLIN_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_GOBLIN_TAG);
	partnerArray[ENEMYTYPE_PRISONER_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_PRISONER_TAG);
	partnerArray[ENEMYTYPE_ROGUE_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_ROGUE_TAG);
	partnerArray[ENEMYTYPE_SLIME_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_SLIME_TAG);
	partnerArray[ENEMYTYPE_NERD_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_NERD_TAG);
	partnerArray[ENEMYTYPE_LIZARDMAN_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_LIZARDMAN_TAG);
	partnerArray[ENEMYTYPE_ORC_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_ORC_TAG);
	partnerArray[ENEMYTYPE_HOMELESS_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_HOMELESS_TAG);
	partnerArray[ENEMYTYPE_VISITOR_MALE_TAG] = this.countCurrentSexualPartnersOfType(ENEMYTYPE_VISITOR_MALE_TAG);

	if(partnerArray[ENEMYTYPE_PRISONER_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyPrisonerPassive();
	}
	if(partnerArray[ENEMYTYPE_GUARD_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyGuardPassive();
	}
	if(partnerArray[ENEMYTYPE_THUG_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyThugPassive();
	}
	if(partnerArray[ENEMYTYPE_GOBLIN_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyGoblinPassive();
	}
	if(partnerArray[ENEMYTYPE_NERD_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyNerdPassive();
	}
	if(partnerArray[ENEMYTYPE_ROGUE_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyRoguePassive();
	}
	if(partnerArray[ENEMYTYPE_SLIME_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemySlimePassive();
	}
	if(partnerArray[ENEMYTYPE_VISITOR_MALE_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyVisitorPassive();
	}
	if(partnerArray[ENEMYTYPE_LIZARDMAN_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyLizardmanPassive();
	}
	if(partnerArray[ENEMYTYPE_ORC_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyOrcPassive();
	}
	if(partnerArray[ENEMYTYPE_HOMELESS_TAG] > 0) {
		partnerTypes++;
		score += this.reactionScore_enemyHomelessPassive();
	}

	if(partnerTypes === 0) return 0;
	return score / partnerTypes * partnerMultipler;
};

Game_Actor.prototype.countCurrentSexualPartnersOfType = function(enemyType) {
	let count = 0;
	if(this._cockMouthTarget && this._cockMouthTarget.enemyType() == enemyType) count++;
	if(this._cockBoobsTarget && this._cockBoobsTarget.enemyType() == enemyType) count++;
	if(this._cockPussyTarget && this._cockPussyTarget.enemyType() == enemyType) count++;
	if(this._cockAnalTarget && this._cockAnalTarget.enemyType() == enemyType) count++;
	if(this._cockRightArmTarget && this._cockRightArmTarget.enemyType() == enemyType) count++;
	if(this._cockLeftArmTarget && this._cockLeftArmTarget.enemyType() == enemyType) count++;
	if(this._cockFeetTarget && this._cockFeetTarget.enemyType() == enemyType) count++;
	return count;
};

Game_Actor.prototype.reactionScore_slutLevel = function(multipler) {
	if(multipler === 0) { return 0; }
	else if(!multipler) multipler = 0.3;
	return this.slutLvl * multipler;
};
Game_Actor.prototype.reactionScore_masochismLevel = function(multipler) {
	if(this.masochismLvl() <= this.sadismLvl()) return 0;
	if(multipler === 0) { return 0; }
	else if(!multipler) multipler = 5;
	return this.masochismLvl() * multipler;
};
Game_Actor.prototype.reactionScore_sadismLevel = function(multipler) {
	if(this.sadismLvl() <= this.masochismLvl()) return 0;
	if(multipler === 0) { return 0; }
	else if(!multipler) multipler = 5;
	return this.sadismLvl() * multipler;
};
Game_Actor.prototype.reactionScore_masturbateLevel = function(multipler) {
	if(multipler === 0) { return 0; }
	else if(!multipler) multipler = 5;
	return this.masturbateLvl * multipler;
};

//Kissing passive
//Max 130
Game_Actor.prototype.reactionScore_kissPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_KISS_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_KISS_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_KISS_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_KISS_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_KISS_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_KISS_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_KISS_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_KISS_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_KISS_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MOUTH_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MOUTH_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_KISS_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_KISS_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Boobs Petting passive
//Max 130
Game_Actor.prototype.reactionScore_boobsPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_BOOBS_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BOOBS_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BOOBS_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BOOBS_PETTED_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_BOOBS_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BOOBS_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BOOBS_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Nipples Petting passive
//Max 130
Game_Actor.prototype.reactionScore_nipplesPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_NIPPLES_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_NIPPLES_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_NIPPLES_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_NIPPLES_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_NIPPLES_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_NIPPLES_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BOOBS_PETTED_PEOPLE_THREE_ID)) score += 10; //temp

	if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_THREE_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_COUNT_TWO_ID)) score += 10; //temp

	if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Butt Petting passive
//Max 130
Game_Actor.prototype.reactionScore_clitPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_CLIT_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_CLIT_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_CLIT_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_CLIT_PETTED_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_CLIT_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_CLIT_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_CLIT_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_CUNNILINGUS_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_CUNNILINGUS_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Pussy Petting passive
//Max 140
Game_Actor.prototype.reactionScore_pussyPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_PUSSY_PETTED_COUNT_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PUSSY_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_SEX_PEOPLE_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FIRST_SEX_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Butt Petting passive
//Max 130
Game_Actor.prototype.reactionScore_buttPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_BUTT_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BUTT_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUTT_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUTT_PETTED_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_BUTT_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BUTT_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUTT_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUTT_SPANKED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUTT_SPANKED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Anal Petting passive
//Max 140
Game_Actor.prototype.reactionScore_analPettingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_ANAL_PETTED_COUNT_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_PETTED_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_PETTED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_PETTED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_PETTED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_PETTED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_PETTED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_SEX_PEOPLE_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FIRST_ANAL_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PETTING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PETTING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Handjob passive
//Max 110
Game_Actor.prototype.reactionScore_handjobPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_HJ_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_HJ_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_HJ_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_HJ_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_HJ_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_HJ_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_HJ_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_HJ_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_HJ_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_HJ_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_HJ_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Blowjob passive
//Max 130
Game_Actor.prototype.reactionScore_blowjobPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_BJ_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BJ_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BJ_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_BJ_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BJ_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BJ_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BJ_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BJ_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BJ_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MOUTH_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MOUTH_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BJ_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BJ_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Titty fuck passive
//Max 130
Game_Actor.prototype.reactionScore_tittyFuckPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_TITTYFUCK_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TITTYFUCK_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BOOBS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TITTYFUCK_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TITTYFUCK_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Pussy sex passive
//Max 160
Game_Actor.prototype.reactionScore_pussySexPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_PUSSY_SEX_COUNT_THREE_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_COUNT_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_COUNT_ONE_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FIRST_SEX_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_SEX_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_SEX_USAGE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_SEX_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_SEX_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Anal sex passive
//Max 160
Game_Actor.prototype.reactionScore_analSexPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_ANAL_SEX_COUNT_THREE_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_COUNT_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_COUNT_ONE_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FIRST_ANAL_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_SEX_PEOPLE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_SEX_USAGE_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_SEX_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_SEX_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Footjob passive
//Max 110
Game_Actor.prototype.reactionScore_footjobPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_FOOTJOB_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FOOTJOB_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_FOOTJOB_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FOOTJOB_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_FOOTJOB_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_FOOTJOB_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FOOTJOB_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_SADISM_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SADISM_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_SADISM_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SADISM_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Rimjob passive
//Max 110
Game_Actor.prototype.reactionScore_rimjobPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_RIMJOB_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_RIMJOB_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_RIMJOB_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_RIMJOB_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_RIMJOB_USAGE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_RIMJOB_USAGE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_RIMJOB_USAGE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MASOCHISM_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MASOCHISM_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MASOCHISM_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MASOCHISM_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Cunni passive
//Max 110
Game_Actor.prototype.reactionScore_cunniPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_CUNNILINGUS_COUNT_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_CUNNILINGUS_COUNT_ONE_ID)) score += 15;

	if(this.hasPassive(PASSIVE_CUNNILINGUS_PEOPLE_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_CUNNILINGUS_PEOPLE_ONE_ID)) score += 15;

	if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_CUNNILINGUS_ORGASM_TWO_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_CUNNILINGUS_ORGASM_ONE_ID)) score += 15;

	return score;
};

//Butt Spanking passive
//Max 110
Game_Actor.prototype.reactionScore_buttSpankingPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_BUTT_SPANKED_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUTT_SPANKED_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUTT_SPANKED_PEOPLE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BUTT_SPANKED_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUTT_SPANKED_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MASOCHISM_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MASOCHISM_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MASOCHISM_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MASOCHISM_ORGASM_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_SPANKING_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SPANKING_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Bukkake passive
//Max 100
Game_Actor.prototype.reactionScore_bukkakePassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_BUKKAKE_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUKKAKE_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUKKAKE_ML_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_BUKKAKE_ML_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BUKKAKE_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUKKAKE_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUKKAKE_MAX_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUKKAKE_MAX_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_BUKKAKE_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BUKKAKE_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Swallow passive
//Max 90
Game_Actor.prototype.reactionScore_swallowPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_SWALLOW_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SWALLOW_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_SWALLOW_ML_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SWALLOW_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SWALLOW_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MAX_SWALLOW_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MAX_SWALLOW_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_SWALLOW_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SWALLOW_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Pussy creampie passive
//Max 100
Game_Actor.prototype.reactionScore_pussyCreampiePassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ML_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ML_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MAX_PUSSY_CREAMPIE_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MAX_PUSSY_CREAMPIE_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_PUSSY_CREAMPIE_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Anal creampie passive
//Max 100
Game_Actor.prototype.reactionScore_analCreampiePassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_PEOPLE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ML_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ML_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_MAX_ANAL_CREAMPIE_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_MAX_ANAL_CREAMPIE_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ANAL_CREAMPIE_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Clit Toy passive
//Max 100
Game_Actor.prototype.reactionScore_clitToyPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_PINK_ROTOR_INSERT_COUNT_TWO_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_PINK_ROTOR_INSERT_COUNT_ONE_ID)) score += 20;

	if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Pussy Toy passive
//Max 100
Game_Actor.prototype.reactionScore_pussyToyPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_DILDO_INSERT_COUNT_TWO_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_DILDO_INSERT_COUNT_ONE_ID)) score += 20;

	if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Anal Toy passive
//Max 100
Game_Actor.prototype.reactionScore_analToyPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_ANAL_BEADS_INSERT_COUNT_TWO_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ANAL_BEADS_INSERT_COUNT_ONE_ID)) score += 20;

	if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOTAL_TOYS_INSERT_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_PLEASURE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_PLEASURE_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_TOYS_ORGASM_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_TOYS_ORGASM_ONE_ID)) score += 10;

	return score;
};

//Orgasm passive
//Max 130
Game_Actor.prototype.reactionScore_orgasmPassive = function() {
	let score = 0;

	if(this.hasPassive(PASSIVE_ORGASM_TRIPLE_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ORGASM_DOUBLE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ORGASM_COUNT_SEVEN_ID)) score += 70;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_SIX_ID)) score += 60;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_FIVE_ID)) score += 50;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_FOUR_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ORGASM_COUNT_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ORGASM_ML_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ORGASM_ML_ONE_ID)) score += 10;

	if(this.hasPassive(PASSIVE_ORGASM_PEOPLE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_ORGASM_PEOPLE_ONE_ID)) score += 10;

	return score;
};

//Cock stare
//Max 60
Game_Actor.prototype.reactionScore_cockStarePassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_KARRYN_STARE_COCK_FOUR_ID)) score += 60;
	else if(this.hasPassive(PASSIVE_KARRYN_STARE_COCK_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_KARRYN_STARE_COCK_TWO_ID)) score += 10;
	return score;
};

// Falldown Passives
// Max 30
Game_Actor.prototype.reactionScore_falldownPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_FALLEN_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_FALLEN_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_FALLEN_COUNT_ONE_ID)) score += 10;
	return score;
};

// Down Stamina Passives
// Max 30
Game_Actor.prototype.reactionScore_downStaminaPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_DOWNSTAMINA_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_DOWNSTAMINA_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_DOWNSTAMINA_COUNT_ONE_ID)) score += 10;
	return score;
};

// Job Passives
// Max 30

Game_Actor.prototype.reactionScore_jobWaitressPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_BAR_WAITRESS_SEX_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BAR_WAITRESS_SEX_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BAR_WAITRESS_SEX_COUNT_ONE_ID)) score += 10;
	score += Math.min(10, $gameParty._barReputation);
	return score;
};

Game_Actor.prototype.reactionScore_jobReceptionistPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_ONE_ID)) score += 10;
	return score;
};

// Defeated Passives
// Max 30

Game_Actor.prototype.reactionScore_defeatedBlowbangPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_BLOWBANG_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_BLOWBANG_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_BLOWBANG_COUNT_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_defeatedUrinalPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_URINAL_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_URINAL_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_URINAL_COUNT_ONE_ID)) score += 10;
	return score;
};

// Enemy types passives
// Max 30

Game_Actor.prototype.reactionScore_enemyGoblinPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GOBLIN_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GOBLIN_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GOBLIN_ONE_ID)) score += 10;
	if(this.hasEdict(EDICT_BAIT_GOBLINS)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyThugPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_THUG_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_THUG_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_THUG_ONE_ID)) score += 10;
	if(this.hasEdict(EDICT_THUGS_STRESS_RELIEF)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyGuardPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GUARD_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GUARD_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_GUARD_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyNerdPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_NERD_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_NERD_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_NERD_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyRoguePassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ROGUE_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ROGUE_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ROGUE_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemySlimePassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_SLIME_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_SLIME_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_SLIME_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyLizardmanPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_LIZARDMAN_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_LIZARDMAN_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_LIZARDMAN_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyOrcPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ORC_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ORC_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_ORC_ONE_ID)) score += 10;
	return score;
};
Game_Actor.prototype.reactionScore_enemyHomelessPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_HOMELESS_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_HOMELESS_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_HOMELESS_ONE_ID)) score += 10;
	return score;
};

Game_Actor.prototype.reactionScore_enemyPrisonerPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_TOTAL_FIVE_ID)) score += 40;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_TOTAL_FOUR_ID)) score += 35;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_TOTAL_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_TOTAL_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_SEXUAL_PARTNERS_TOTAL_ONE_ID)) score += 10;
	return score;
};

Game_Actor.prototype.reactionScore_enemyVisitorPassive = function() {
	let score = 0;
	if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_THREE_ID)) score += 30;
	else if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_TWO_ID)) score += 20;
	else if(this.hasPassive(PASSIVE_RECEPTIONIST_VISITOR_SEX_COUNT_ONE_ID)) score += 10;
	return score;
};

repo_name: Rexhunk/karryn

license: unknown


code:
var Remtairy = Remtairy || {};
Remtairy.Results = Remtairy.Results || {};

const RESULTS_EXP_MAX_LINES = 18;
const RESULTS_EXP_LINE_HEIGHT = 0.9;

const RESULTS_PASSIVES_MAX_LINES = 15;
const RESULTS_PASSIVES_LINE_HEIGHT = 1;

const RESULTS_STAMINA_PER_PLVL = 25;
const RESULTS_ENERGY_PER_PLVL = 1.1;
const RESULTS_STAMINA_PER_ENDURANCE = 12; //Karryn only

const RESULTS_EXP_BASE_PARAM = 100;
const RESULTS_EXP_PER_PARAM_LVL = 75;
const RESULTS_PLVL_REQ_FOR_MAIN_LVL = 5;

const RESULTS_PLVLS_BEFORE_EXP_REDUCE = 12;
const RESULTS_PLVLS_BEFORE_EXP_REDUCE_EASY_MODE = 20;

const RESULTS_MIN_EXP_RATE_EASY_MODE = 0.25; //unused
const RESULTS_MIN_EXP_RATE_NORMAL_MODE = 0.2; //unused
const RESULTS_MIN_EXP_RATE_HARD_MODE = 0.15; //unused
const RESULTS_MIN_EXP_RATE = 0.2;

//=============================================================================
 /*:
 * @plugindesc Results
 * @author Remtairy
 *
 * @help
 * This is a private plugin.
 * Do not redistribute, use, or modify this plugin
 * without explicit written permission from Remtairy.
 *
 */
//=============================================================================

////////////////
// Param Exp Setups
//////////////////

//Init
Game_Actor.prototype.setupParamExp = function() {
	this._paramLvl = [ 1, 1, 1, 1, 1, 1, 1, 1];
	this._paramExp = [ 0, 0, 0, 0, 0, 0, 0, 0];
	let repplMain = RESULTS_EXP_BASE_PARAM + RESULTS_EXP_PER_PARAM_LVL;
	let repplMinor = RESULTS_EXP_BASE_PARAM;
	this._paramToNextLvl = [ repplMain, repplMinor, repplMain, repplMain, repplMain, repplMinor, repplMain, repplMinor];
	this._paramLvlGained = [ 0, 0, 0, 0, 0, 0, 0, 0];
	this._totalParamExpGained = 0;
	this._totalParamLvlsGained = 0;
	this._totalMainLvlsGained = 0;
};

//Called prebattle and postbattle
Game_Actor.prototype.clearParamExp = function() {
	//Param
	this._paramLvlGained = [ 0, 0, 0, 0, 0, 0, 0, 0];
	this._totalParamExpGained = 0;
	this._totalParamLvlsGained = 0;
	this._totalMainLvlsGained = 0;
	//Passives
	this._newPassivesUnlocked = [];
};

Game_Actor.prototype.resetParamExp = function() {
	this.clearParamExp();
	let repplMain = RESULTS_EXP_BASE_PARAM + RESULTS_EXP_PER_PARAM_LVL;
	let repplMinor = RESULTS_EXP_BASE_PARAM;
	this._paramToNextLvl = [ repplMain, repplMinor, repplMain, repplMain, repplMain, repplMinor, repplMain, repplMinor];
	this._paramLvl = [ 1, 1, 1, 1, 1, 1, 1, 1];
};

///////
// Stat Growth
/////////////

Game_Actor.prototype.getParamGrowthRate = function(paramId, useExpRate) {
	if(paramId === PARAM_MAXSTAMINA_ID) return this.getStaminaGrowthRate(useExpRate);
	else if(paramId === PARAM_MAXENERGY_ID) return this.getEnergyGrowthRate(useExpRate);
	else if(paramId === PARAM_STRENGTH_ID) return this.getStrengthGrowthRate(useExpRate);
	else if(paramId === PARAM_DEXTERITY_ID) return this.getDexterityGrowthRate(useExpRate);
	else if(paramId === PARAM_AGILITY_ID) return this.getAgilityGrowthRate(useExpRate);
	else if(paramId === PARAM_ENDURANCE_ID) return this.getEnduranceGrowthRate(useExpRate);
	else if(paramId === PARAM_MIND_ID) return this.getMindGrowthRate(useExpRate);
	else if(paramId === PARAM_CHARM_ID) return this.getCharmGrowthRate(useExpRate);
};

Game_Actor.prototype.getStaminaGrowthRate = function(useExpRate) {
	let growthRate = 1;

	if(this.hasEdict(EDICT_STAMINA_TRAINING_THREE)) growthRate *= 1.2;
	if(this.hasEdict(EDICT_STAMINA_TRAINING_TWO)) growthRate *= 1.2;
	if(this.hasEdict(EDICT_STAMINA_TRAINING_ONE)) growthRate *= 1.2;

	growthRate *= this.passiveGrowthRate(PARAM_MAXSTAMINA_ID);

	if(this.isEquippingThisAccessory(EARRING_TEAR_ID)) growthRate *= 1.2;
	if(this.isEquippingThisAccessory(EARRING_SUN_ID)) growthRate *= 0.25;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

Game_Actor.prototype.getEnergyGrowthRate = function(useExpRate) {
	let growthRate = 1;

	if(this.hasEdict(EDICT_ENERGY_TRAINING_TWO)) growthRate *= 1.2;
	if(this.hasEdict(EDICT_ENERGY_TRAINING_ONE)) growthRate *= 1.2;

	growthRate *= this.passiveGrowthRate(PARAM_MAXENERGY_ID);

	if(this.isEquippingThisAccessory(EARRING_HEART_ID)) growthRate *= 1.2;
	if(this.isEquippingThisAccessory(EARRING_SUN_ID)) growthRate *= 1.75;
	if(this.isEquippingThisAccessory(EARRING_STAR_ID)) growthRate *= 0.2;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	if(this.isUsingThisTitle(TITLE_ID_CUM_GUZZLER)) growthRate *= 1.33;

	return growthRate;
};

Game_Actor.prototype.getStrengthGrowthRate = function(useExpRate) {
	let growthRate = 1;

	let trainingCount = this.karrynTrainingEdictsCount_Strength();
	for(let i = 0; i < trainingCount; ++i) {
		growthRate *= 1.2;
	}

	growthRate *= 1 + (0.03 * this.sadismLvl());
	growthRate *= 1 - (0.01 * this.masochismLvl());

	growthRate *= this.passiveGrowthRate(PARAM_STRENGTH_ID);

	if(this.isEquippingThisAccessory(EARRING_TEAR_ID)) growthRate *= 1.4;
	if(this.isEquippingThisAccessory(EARRING_CHEETAH_ID)) growthRate *= 1.15;
	if(this.isEquippingThisAccessory(EARRING_SKULL_ID)) growthRate *= 1.33;

	if(this.isUsingThisTitle(TITLE_ID_HARDCORE_MASOCHIST)) growthRate *= 0.25;
	else if(this.isUsingThisTitle(TITLE_ID_SOFTCORE_MASOCHIST)) growthRate *= 0.5;
	if(this.isUsingThisTitle(TITLE_ID_STRENGTH_TWO)) growthRate *= 1.42;
	else if(this.isUsingThisTitle(TITLE_ID_STRENGTH_ONE)) growthRate *= 1.25;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

Game_Actor.prototype.getDexterityGrowthRate = function(useExpRate) {
	let growthRate = 1;

	let trainingCount = this.karrynTrainingEdictsCount_Dexterity();
	for(let i = 0; i < trainingCount; ++i) {
		growthRate *= 1.2;
	}

	growthRate *= this.passiveGrowthRate(PARAM_DEXTERITY_ID);

	if(this.isEquippingThisAccessory(EARRING_LIONESS_ID)) growthRate *= 1.4;
	if(this.isEquippingThisAccessory(EARRING_SKULL_ID)) growthRate *= 1.33;
	if(this.isEquippingThisAccessory(MISC_SCARF_ID)) growthRate *= 1.07;

	if(this.isUsingThisTitle(TITLE_ID_DEXTERITY_TWO)) growthRate *= 1.42;
	else if(this.isUsingThisTitle(TITLE_ID_DEXTERITY_ONE)) growthRate *= 1.25;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

Game_Actor.prototype.getAgilityGrowthRate = function(useExpRate) {
	let growthRate = 1;

	let trainingCount = this.karrynTrainingEdictsCount_Agility();
	for(let i = 0; i < trainingCount; ++i) {
		growthRate *= 1.2;
	}

	growthRate *= this.passiveGrowthRate(PARAM_AGILITY_ID);

	if(this.isEquippingThisAccessory(EARRING_CHEETAH_ID)) growthRate *= 1.3;
	if(this.isEquippingThisAccessory(EARRING_SKULL_ID)) growthRate *= 1.33;
	if(this.isEquippingThisAccessory(MISC_HIGHHEELS_ID)) growthRate *= 1.05;

	if(this.isUsingThisTitle(TITLE_ID_HARDCORE_MASOCHIST)) growthRate *= 0.25;
	else if(this.isUsingThisTitle(TITLE_ID_SOFTCORE_MASOCHIST)) growthRate *= 0.5;
	else if(this.isUsingThisTitle(TITLE_ID_AGILITY_TWO)) growthRate *= 1.42;
	else if(this.isUsingThisTitle(TITLE_ID_AGILITY_ONE)) growthRate *= 1.25;
	else if(this.isUsingThisTitle(TITLE_ID_LOST_VIRGINITY_TO_TOY)) growthRate *= 1.15;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

Game_Actor.prototype.getEnduranceGrowthRate = function(useExpRate) {
	let growthRate = 1;

	let trainingCount = this.karrynTrainingEdictsCount_Endurance();
	for(let i = 0; i < trainingCount; ++i) {
		growthRate *= 1.2;
	}

	growthRate *= 1 + (0.01 * this.sadismLvl());
	growthRate *= 1 - (0.03 * this.masochismLvl());

	growthRate *= this.passiveGrowthRate(PARAM_ENDURANCE_ID);

	if(this.isEquippingThisAccessory(EARRING_HEART_ID)) growthRate *= 1.3;

	if(this.isUsingThisTitle(TITLE_ID_FREELOADING_DRINKER)) growthRate *= 1.25;
	else if(this.isUsingThisTitle(TITLE_ID_HARDCORE_MASOCHIST)) growthRate *= 1.5;
	else if(this.isUsingThisTitle(TITLE_ID_SOFTCORE_MASOCHIST)) growthRate *= 1.3;

	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

Game_Actor.prototype.getMindGrowthRate = function(useExpRate) {
	let growthRate = 1;

	let trainingCount = this.karrynTrainingEdictsCount_Mind();
	for(let i = 0; i < trainingCount; ++i) {
		growthRate *= 1.2;
	}

	growthRate *= 1 - (0.02 * this.sadismLvl());
	growthRate *= 1 - (0.02 * this.masochismLvl());

	growthRate *= this.passiveGrowthRate(PARAM_MIND_ID);
	if(useExpRate) growthRate *= this.exr;
	growthRate *= $gameParty.difficultyGrowthRate();

	if(this.isUsingThisTitle(TITLE_ID_FULL_ORDER_FOUR)) growthRate *= 1.3;

	return growthRate;
};

Game_Actor.prototype.getCharmGrowthRate = function(useExpRate) {
	let growthRate = 1;
	growthRate += this.accessoryBonusCharmGrowth();

	growthRate *= this.passiveGrowthRate(PARAM_CHARM_ID);
	growthRate *= this.passiveFlauntCharmGrowthRate();

	if(this.hasEdict(EDICT_CHARM_SPECIALIZATION))growthRate *= 1.42;

	if(this.isEquippingThisAccessory(EARRING_MOON_ID)) growthRate *= 1.33;

	if(this.isUsingThisTitle(TITLE_ID_FIRST_KISS_TO_ANUS)) growthRate *= 1.42;
	else if(this.isUsingThisTitle(TITLE_ID_BUSTY_BARMAID)) growthRate *= 1.15;

	if(useExpRate) growthRate *= this.exr;

	growthRate *= $gameParty.difficultyGrowthRate();

	return growthRate;
};

////////////
// Param Exp and Lvl
//////////////

Game_Actor.prototype.getWardenLevelLimit = function() {
	let limit = 12;

	if(this.hasEdict(EDICT_LEVEL_TWO_SUBJUGATED)) limit += 24;
	else if(this.hasEdict(EDICT_LEVEL_ONE_SUBJUGATED)) limit += 12;

	return limit;

};

Game_Actor.prototype.calculateParamExpRate = function(enemyLvl) {
	let lvl = this.level;
	let expRate = 1;
	if(lvl >= this.getWardenLevelLimit()) expRate = 0;
	else if(lvl > enemyLvl)
		expRate = Math.max(this.minimumExpRate(), 1 - 0.2 * (lvl - enemyLvl));
	//else if(lvl < enemyLvl)
	//	expRate += Math.min(0.3, 0.1 * (enemyLvl - lvl));

	let plvlsBeforeExpReduce = RESULTS_PLVLS_BEFORE_EXP_REDUCE;
	if(Prison.easyMode()) plvlsBeforeExpReduce = RESULTS_PLVLS_BEFORE_EXP_REDUCE_EASY_MODE;
	if(this._totalParamLvlsGained >= plvlsBeforeExpReduce) {
		expRate *= Math.max(this.minimumExpRate(), 1 + (plvlsBeforeExpReduce * 0.1) - (this._totalParamLvlsGained * 0.1))
	}

	return expRate;
};

Game_Actor.prototype.minimumExpRate = function() {
	return RESULTS_MIN_EXP_RATE;
	//below are unused for now
	let minExpRate = 1;
	if(Prison.easyMode()) {
		minExpRate = RESULTS_MIN_EXP_RATE_EASY_MODE;
	}
	else if(Prison.normalMode()) {
		minExpRate = RESULTS_MIN_EXP_RATE_NORMAL_MODE;
	}
	else if(Prison.hardMode()) {
		minExpRate = RESULTS_MIN_EXP_RATE_HARD_MODE;
	}
	return minExpRate;
};

Game_Actor.prototype.gainStaminaExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getStaminaGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_MAXSTAMINA_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_MAXSTAMINA_ID);
};
Game_Actor.prototype.gainEnergyExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getEnergyGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_MAXENERGY_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_MAXENERGY_ID);
};
Game_Actor.prototype.gainStrengthExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getStrengthGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_STRENGTH_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_STRENGTH_ID);
};
Game_Actor.prototype.gainEnduranceExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getEnduranceGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_ENDURANCE_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_ENDURANCE_ID);
};
Game_Actor.prototype.gainDexterityExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getDexterityGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_DEXTERITY_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_DEXTERITY_ID);
};
Game_Actor.prototype.gainMindExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getMindGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_MIND_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_MIND_ID);
};
Game_Actor.prototype.gainAgilityExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getAgilityGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_AGILITY_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_AGILITY_ID);
};
Game_Actor.prototype.gainCharmExp = function(exp, enemyLvl) {
	if(exp <= 0) return;
	let expRate = this.calculateParamExpRate(enemyLvl);
	let growthRate = this.getCharmGrowthRate(true);
	let ratedExp = Math.max(0, Math.round(expRate * exp * growthRate));
	this._paramExp[PARAM_CHARM_ID] += ratedExp;
	this._totalParamExpGained += ratedExp;
	this.seeIfParamLvlGained(PARAM_CHARM_ID);
};

Game_Actor.prototype.seeIfParamLvlGained = function(paramId) {
	while(this._paramExp[paramId] >= this._paramToNextLvl[paramId]) {
		this._paramToNextLvl[paramId] += RESULTS_EXP_BASE_PARAM + this._paramLvl[paramId] * RESULTS_EXP_PER_PARAM_LVL;
		this._paramLvlGained[paramId]++;
		this._paramLvl[paramId]++;
		this._totalParamLvlsGained++;
		this.seeIfMainLvlGained();
	}
};

Game_Actor.prototype.seeIfMainLvlGained = function() {
	let totalParamLvls = this.calculateTotalParamLvls();
	let newMainLvl = Math.floor(totalParamLvls / RESULTS_PLVL_REQ_FOR_MAIN_LVL);
	if(newMainLvl != this.level) {
		if(newMainLvl > this.level)
			this._totalMainLvlsGained += newMainLvl - this.level;
		this.changeLevel(newMainLvl);
	}
};

Game_Actor.prototype.calculateParamLvlsGained = function() {
	for(let i = 0; i < 8; i++) {
		while(this._paramExp[i] >= this._paramToNextLvl[i]) {
			this._paramToNextLvl[i] += RESULTS_EXP_BASE_PARAM + this._paramLvl[i] * RESULTS_EXP_PER_PARAM_LVL;
			this._paramLvlGained[i]++;
			this._paramLvl[i]++;
			this._totalParamLvlsGained++;
		}
	}
};

//unused? seeIfMainLvlGained has same code, looks like only version calls this?
Game_Actor.prototype.calculateMainLvlsGained = function() {
	let totalParamLvls = this.calculateTotalParamLvls();

	let newMainLvl = Math.floor(totalParamLvls / RESULTS_PLVL_REQ_FOR_MAIN_LVL);
	if(newMainLvl != this.level) {
		if(newMainLvl > this.level)
			this._totalMainLvlsGained += newMainLvl - this.level;
		this.changeLevel(newMainLvl);
	}
};

Game_Actor.prototype.calculateTotalParamLvls = function() {
	let totalParamLvls = 0;
	for(let i = 0; i < 8; i++) {
		totalParamLvls += this._paramLvl[i];
	}
	return totalParamLvls;
};

////////////
///////////////
// Game Party
///////////////
////////////

Game_Party.prototype.calculateParamLvlsGained = function() {
	$gameActors.actor(ACTOR_KARRYN_ID).calculateParamLvlsGained();
};

Game_Party.prototype.calculateMainLvlsGained = function() {
	$gameActors.actor(ACTOR_KARRYN_ID).calculateMainLvlsGained();
};

//Called in pre Battle and post battle common events
Game_Party.prototype.clearPrisonResults = function() {
	this._orderResult = 0;
	this._fatigueGain = 0;
	this._extraGoldReward = 0;
};

// Order

Game_Party.prototype.increaseOrderGain = function(value) {
    this._orderResult += value;
};

Game_Party.prototype.gainOrderFromVictory = function() {
    this._orderResult = this._orderGainAtVictory;
};
Game_Party.prototype.gainOrderFromDefeat = function() {
	this._orderResult = this._orderGainAtDefeat;
};
Game_Party.prototype.hasOrderResults = function() {
	return this._orderResult !== 0;
};
Game_Party.prototype.getOrderResults = function() {
	return this._orderResult;
};
Game_Party.prototype.applyOrderResults = function() {
	if(this._gainHalfOrderFlag) this._orderResult *= 0.5;
	if(!Karryn.isInReceptionistPose()) {
		if(Karryn.isUsingThisTitle(TITLE_ID_FULL_ORDER_TWO)) this._orderResult = 0;
		if($gameParty.isRiotBattle()) {
			if(Karryn.isUsingThisTitle(TITLE_ID_SUPPRESS_RIOT_THREE)) this._orderResult *= 1.5;
		}
	}

	this._orderResult = Math.round(this._orderResult);
	this.increaseOrder(this._orderResult);
};

// Fatigue

Game_Party.prototype.increaseFatigueGain = function(value, dontUseFatigueGainRate) {
	if(!dontUseFatigueGainRate) {
		let actor = $gameActors.actor(ACTOR_KARRYN_ID);
		value *= actor.fatigueGainRate();
	}
	this._fatigueGain += value;
};
Game_Party.prototype.increaseFatigueGainFromEnemy = function(value, enemyLvl) {
	let modifiedFatigueGain = value;
	let level = Karryn.level
	if(level < enemyLvl) {
		let diff = enemyLvl - level;
		modifiedFatigueGain *= Math.min(2,(1 + 0.2 * diff));
	}
	else if(level > enemyLvl) {
		let diff = level - enemyLvl;
		modifiedFatigueGain *= Math.max(0.5,(1 - 0.1 * diff));
	}

	if($gameParty.isRiotBattle()) {
		if(Karryn.isUsingThisTitle(TITLE_ID_SUPPRESS_RIOT_ONE)) modifiedFatigueGain *= 0.67;
	}

	this.increaseFatigueGain(modifiedFatigueGain);
};
Game_Party.prototype.getFatigueResults = function(value) {
	let fatigueValue = this._fatigueGain;
	if(BattleManager._gainHalfFatigue) fatigueValue *= 0.5;
	fatigueValue = Math.ceil(fatigueValue);
	return fatigueValue;
};
Game_Party.prototype.applyFatigueResults = function() {
	let fatigueValue = this.getFatigueResults();
	$gameActors.actor(ACTOR_KARRYN_ID).gainFatigue(fatigueValue);
};

// Extra Gold Reward

Game_Party.prototype.increaseExtraGoldReward = function(value) {
	this._extraGoldReward += Math.round(value);
};

// New Passives

Game_Party.prototype.unlockedNewPassives = function() {
	return $gameActors.actor(ACTOR_KARRYN_ID)._newPassivesUnlocked.length > 0 && DEBUG_MODE;
};

Game_Party.prototype.checkForNewPassives = function() {
	$gameActors.actor(ACTOR_KARRYN_ID).checkForNewPassives();
};

Game_Party.prototype.applyEndOfBattleSpecial = function() {
	if(Karryn.isInReceptionistPose()) {
		this.applyEndOfBattleSpecial_receptionistBattle();
	}
	else if($gameParty.isInGloryBattle) {
		this.applyEndOfBattleSpecial_gloryBattle();
	}
};

//////////////
///////////////
// Scene Battle
////////////////
/////////////

////////
// Results Title
//////////
Scene_Battle.prototype.resultsTitleText = function() {
	let title = TextManager.resultsVictory;

	if($gameParty.isInWaitressBattle || Karryn.isInReceptionistPose()) {
		title = TextManager.resultsJobBattleEnd;
		return title;
	}
	else if($gameParty.isInGloryBattle) {
		title = TextManager.gloryBattleEnd;
		return title;
	}

	if(Karryn.isInMasturbationPose()) {
		let num = $gameActors.actor(ACTOR_KARRYN_ID)._tempRecordOrgasmCount;
		if(num === 0) title = TextManager.resultsMasturbateBattleNone;
		else if(num === 1) title = TextManager.resultsMasturbateBattleSingle;
		else {
			title = TextManager.resultsMasturbateBattlePlural;
			title = title.format(num);
		}
		return title;
	}

	if(BattleManager._phase == 'rem abort') {
		title = TextManager.resultsAborted;
	}
	else if(BattleManager._phase == 'rem defeat') {
		title = TextManager.resultsDefeat;
	}
	return title;
};

Scene_Battle.prototype.createVictoryTitle = function() {
    this._statusWindow.hide();
    this._logWindow.hide();
    this._victoryTitleWindow = new Window_VictoryTitle(this.resultsTitleText());
    this.addWindow(this._victoryTitleWindow);
    this._victoryTitleWindow.open();
};

Scene_Battle.prototype.createVictoryExp = function() {
    this._victoryTitleWindow.refresh(this.resultsTitleText());
    this._victoryExpWindow = new Window_VictoryExp();
    this.addWindow(this._victoryExpWindow);
    this._victoryExpWindow.open();
};

/////////
// Victory Passive
////////////

Scene_Battle.prototype.updateVictorySteps = function() {
	$gameActors.actor(ACTOR_KARRYN_ID).resetCockTargets();
	$gameActors.actor(ACTOR_KARRYN_ID).disableAllPoseSkills();
	if(this.isVictoryStep('EXP')) this.updateVictoryExp();
	if(this.isVictoryStep('DROPS')) this.updateVictoryDrops();
	if(this.isVictoryStep('PASSIVES')) {
		if($gameParty.unlockedNewPassives()) {
			this.updateVictoryPassives();
		}
		else {
			this.processNextVictoryStep();
		}
	}
};

Scene_Battle.prototype.updateVictoryPassives = function() {
    if (!this._victoryPassivesWindow) {
      this.createVictoryPassives();
    } else if (this._victoryPassivesWindow.isOpen()) {
      if (this.victoryTriggerContinue()) this.finishVictoryPassives();
    }
};

Scene_Battle.prototype.createVictoryPassives = function() {
    this._victoryTitleWindow.refresh(TextManager.resultsPassivesTitle);
    this._victoryPassivesWindow = new Window_VictoryPassives();
    this.addWindow(this._victoryPassivesWindow);
    this._victoryPassivesWindow.open();
	AudioManager.playSe({name:'+Get_01', pan:0, pitch:100, volume:70});
};

Scene_Battle.prototype.finishVictoryPassives = function() {
	SoundManager.playOk();
	this._victoryPassivesWindow.close();
	this.processNextVictoryStep();
};

////////////////
// Window VictoryTitle
/////////////////

//pass in title
Window_VictoryTitle.prototype.initialize = function(title) {
    var width = this.windowWidth();
    var height = this.windowHeight();
    Window_Base.prototype.initialize.call(this, 0, 0, width, height);
    this.refresh(title);
    this.openness = 0;
};

////////////
///////////////
// Window VictoryExp
////////////////////
/////////////////

Window_VictoryExp.prototype.drawItem = function(index) {
	return;
};

Window_VictoryExp.prototype.drawExpGained = function(actor, rect) {
	var wy = Graphics.boxHeight - this.lineHeight() * 5;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.resultsGainedExp, rect.x + 2, wy, rect.width - 4,
      'left');
    var bonusExp = 1.0 * actor._expGained * this._tick /
      Yanfly.Param.VAGaugeTicks;
    var expParse = Yanfly.Util.toGroup(parseInt(bonusExp));
    var expText = Yanfly.Param.VAGainedExpfmt.format(expParse);
    this.changeTextColor(this.normalColor());
    this.drawText(expText, rect.x + 2, wy, rect.width - 4, 'right');
};

Window_VictoryExp.prototype.drawExpValues = function(actor, rect) {
	var wy = Graphics.boxHeight - this.lineHeight() * 6 - 2;
    var actorLv = actor._preVictoryLv;
    var bonusExp = 1.0 * actor._expGained * this._tick /
      Yanfly.Param.VAGaugeTicks;
    var nowExp = actor._preVictoryExp - actor.expForLevel(actorLv) + bonusExp;
    var nextExp = actor.expForLevel(actorLv + 1) - actor.expForLevel(actorLv);
    if (actorLv === actor.maxLevel()) {
      var text = Yanfly.Param.VAMaxLv;
    } else if (nowExp >= nextExp) {
      var text = TextManager.resultsLevelUp;
    } else {
      var text = Yanfly.Util.toGroup(parseInt(nextExp - nowExp));
    }
    this.changeTextColor(this.normalColor());
    this.drawText(text, rect.x + 2, wy, rect.width - 4, 'right');
};

Window_VictoryExp.prototype.drawExpGauge = function(actor, rect) {
    let rate = this.actorExpRate(actor);
    if (rate >= 1.0) {
      var color1 = this.textColor(Yanfly.Param.ColorLv1);
      var color2 = this.textColor(Yanfly.Param.ColorLv2);
    } else {
      var color1 = this.textColor(Yanfly.Param.ColorExp1);
      var color2 = this.textColor(Yanfly.Param.ColorExp2);
    }
	let wy = Graphics.boxHeight - this.lineHeight() * 6;
    this.drawGauge(rect.x, wy, rect.width, rate, color1, color2);
};

Window_VictoryExp.prototype.drawActorName = function(actor, x, y, width) {
    width = width || 168;
    this.changeTextColor(this.textColor(31));
    this.drawText(actor.name(), x, y, width);
};

Window_VictoryExp.prototype.drawPrisonResults = function() {
	let y = -this._scrollY + this.lineHeight() * this._resultsLine;
	let x = this._scrollX + this.standardPadding() * 2 + Window_Base._faceWidth;
	let width = Graphics.boxWidth;
	this.changeTextColor(this.normalColor());

	//cockiness
	if(Karryn.hasPassive(PASSIVE_SUBDUED_COUNT_TWO_ID)) {
		let actor = $gameActors.actor(ACTOR_KARRYN_ID);
		if(actor._tempRecordCockinessReset) {
			this._resultsLine++;
			var text = TextManager.cockinessReset;
			this.drawText(text, x, y, width, 'left');
		}
		else if(actor.cockiness === 100) {
			this._resultsLine++;
			var text = TextManager.cockinessMaxxedOut;
			text = text.format(actor.cockiness);
			this.drawText(text, x, y, width, 'left');
		}
		else if(actor._tempRecordCockinessIncrease) {
			this._resultsLine++;
			var text = TextManager.cockinessIncrease;
			text = text.format(actor.cockiness);
			this.drawText(text, x, y, width, 'left');
		}
	}

	//order
	if($gameParty.hasOrderResults()) {
		y = -this._scrollY + this.lineHeight() * this._resultsLine;
		this._resultsLine++;
		var orderResults = $gameParty.getOrderResults();
		if(orderResults > 0)
			var text = TextManager.resultsOrderIncrease;
		else
			var text = TextManager.resultsOrderDecrease;

		text = text.format(orderResults);
		this.drawText(text, x, y, width, 'left');
	}

	//funding
	let funding = BattleManager._rewards.gold;
	if(funding !== 0) {
		y = -this._scrollY + this.lineHeight() * this._resultsLine;
		this._resultsLine++;
		if(funding > 0)
			var text = TextManager.resultsFundingIncrease;
		else
			var text = TextManager.resultsFundingDecrease;

		text = text.format(funding);
		this.drawText(text, x, y, width, 'left');
	}

	//fatigue
	let fatigue = $gameParty.getFatigueResults();
	if(fatigue !== 0) {
		y = -this._scrollY + this.lineHeight() * this._resultsLine;
		this._resultsLine++;
		let text = '';

		if(fatigue > 0) {
			text = TextManager.resultsFatigueIncrease;
		}
		else if(fatigue < 0) {
			text = TextManager.resultsFatigueDecrease;
		}

		text = text.format(Math.abs(fatigue));
		this.drawText(text, x, y, width, 'left');
	}

};

Window_VictoryExp.prototype.drawAllGauges = function() {
	this._resultsLine = 0;
    let topIndex = this.topIndex();
    for (let i = 0; i < this.maxPageItems(); i++) {
      let index = topIndex + i;
      if (index < this.maxItems()) this.drawItemGauge(index);
    }
};

Window_VictoryExp.prototype.drawActorGauge = function(actor, index) {
    this.clearGaugeRect(index);
    let rect = this.gaugeRect(index);
    this.changeTextColor(this.normalColor());
	//this.makeFontBigger();
    //this.drawActorName(actor, rect.x + 15, rect.y);
    //this.drawLevel(actor, rect);
	//this.makeFontSmaller();
	//this._resultsLine++;
	this.drawPrisonResults();
	this.drawExpBreakdown(actor, rect);
    //this.drawExpGauge(actor, rect);
    //this.drawExpValues(actor, rect);
    //this.drawExpGained(actor, rect);
};

Window_VictoryExp.prototype.drawExpBreakdown = function(actor, rect) {
	let x = this._scrollX + this.standardPadding() * 2 + Window_Base._faceWidth;
	let expLines = 0;
	//this.makeFontSmaller();

	//Param Gained
	for(let i = 0; i < 8; i++) {
		let value = actor._paramLvlGained[i];
		let valueName = '';
		if(value > 0) {
			if(i === PARAM_MAXSTAMINA_ID) {
				valueName = TextManager.basic(2);
			}
			else if(i === PARAM_MAXENERGY_ID) {
				valueName = TextManager.basic(4);
			}
			else valueName = TextManager.param(i);

			let wy = -this._scrollY + this.lineHeight() * this._resultsLine + this.lineHeight() * expLines * RESULTS_EXP_LINE_HEIGHT;
			expLines++;
			let columnX = 0;
			//if(expLines > RESULTS_EXP_MAX_LINES) {
			//	columnX += (rect.width - 4)/2;
			//	wy -= this.lineHeight() * RESULTS_EXP_MAX_LINES * RESULTS_EXP_LINE_HEIGHT;
			//}
			this.changeTextColor(this.normalColor());
			let text = TextManager.paramLevelGainedSingular;
			if(value > 1) text = TextManager.paramLevelGainedPlural;

			text = text.format(value, valueName);

			//this.drawText(text, x, wy, (rect.width - 4)/2, 'left');
			this.drawText(text, x, wy, rect.width, 'left');

			//this.changeTextColor(this.systemColor());

		}
	}

	//Warden Level
	let wardenLvlGained = actor._totalMainLvlsGained;
	let wy = -this._scrollY + this.lineHeight() * this._resultsLine + this.lineHeight() * expLines * RESULTS_EXP_LINE_HEIGHT;
	expLines++;
	let columnX = 0;

	if(wardenLvlGained > 0) {
		let text = TextManager.wardenLevelUp;
		text = text.format(actor.name(), actor.level);
		this.drawTextEx(text, x, wy, rect.width, 'left');
	}
	else {
		let totalParamLvls = actor.calculateTotalParamLvls();
		let reqLvls = RESULTS_PLVL_REQ_FOR_MAIN_LVL - (totalParamLvls % RESULTS_PLVL_REQ_FOR_MAIN_LVL);
		if(reqLvls === 0) reqLvls = RESULTS_PLVL_REQ_FOR_MAIN_LVL;

		let text = TextManager.wardenLevelRequireSingular;
		if(reqLvls > 1) text = TextManager.wardenLevelRequirePlural;

		text = text.format(reqLvls);
		this.drawTextEx(text, x, wy, rect.width, 'left');
	}
	//this.makeFontBigger();
}; //End of drawExpBreakdown()

////////////
///////////////
// Window VictoryPassives
////////////////////
/////////////////

function Window_VictoryPassives() {
    this.initialize.apply(this, arguments);
}

Window_VictoryPassives.prototype = Object.create(Window_Selectable.prototype);
Window_VictoryPassives.prototype.constructor = Window_VictoryPassives;

Window_VictoryPassives.prototype.initialize = function() {
    var wy = this.fittingHeight(1);
    var ww = Graphics.boxWidth;
    var wh = Graphics.boxHeight - wy;
    Window_Selectable.prototype.initialize.call(this, 0, wy, ww, wh);
    this.refresh();
    this.openness = 0;
};

Window_VictoryPassives.prototype.maxItems = function() {
    return $gameParty.maxBattleMembers();
};

Window_VictoryPassives.prototype.standardFontSize = function() {
    return Yanfly.Param.VAFontSize;
};

Window_VictoryPassives.prototype.lineHeight = function() {
    return this.standardFontSize() + 8;
};

Window_VictoryPassives.prototype.itemHeight = function() {
    var clientHeight = this.height - this.padding * 2;
    var clientHeight = Math.floor(clientHeight / this.maxItems());
    var clientHeight = Math.max(clientHeight, this.lineHeight() * 2);
    return clientHeight;
};

Window_VictoryPassives.prototype.drawItem = function(index) {
    var actor = $gameParty.battleMembers()[index];
    if (!actor) return;
    this.drawActorNewPassives(actor, index);
	//todo: draw text for new slut level here
};

Window_VictoryPassives.prototype.drawActorNewPassives = function(actor, index) {
	var x = this._scrollX + this.standardPadding() * 2 + Window_Base._faceWidth;

	//this.makeFontBigger();
    //this.changeTextColor(this.textColor(31));
    //this.drawText(actor.name(), x + 15, 0, 168);
	//this.makeFontSmaller();

    let newPassives = actor._newPassivesUnlocked;
	for(let i = 0; i < newPassives.length; i++) {
		let name = TextManager.skillName(newPassives[i]);
		let wy = -this._scrollY + this.lineHeight() * (i) * RESULTS_PASSIVES_LINE_HEIGHT;
		let textColor = $dataSkills[newPassives[i]].passiveColor;
		if(textColor) this.changeTextColor(this.textColor(textColor));
		this.drawText(name, x, wy, (this.width - 240)/2, 'left');

	}

	this.changeTextColor(this.normalColor());
};


code:
var Remtairy = Remtairy || {};
Remtairy.SpriteBattlerPos = Remtairy.SpriteBattlerPos || {};

const SBP_ENEMY_DAMAGE_OFFSET_X = 96; //敵のダメージ数字の位置X
const SBP_ENEMY_DAMAGE_OFFSET_Y = 28;　//敵のダメージ数字の位置Y

const REM_SPANK_LV1_ANIME_OFFSET_X = 435;	//Spank Lv1のCut-inと同時に出るMVアニメ　X　＋　この数字
const REM_SPANK_LV1_ANIME_OFFSET_Y = 0;		//Spank Lv1のCut-inと同時に出るMVアニメ　Y　＋　この数字

const REM_SPANK_LV2_ANIME_OFFSET_X = 435;	//Spank Lv2のCut-inと同時に出るMVアニメ　X　＋　この数字
const REM_SPANK_LV2_ANIME_OFFSET_Y = 0;		//Spank Lv2のCut-inと同時に出るMVアニメ　Y　＋　この数字

const REM_SPANK_LV3_ANIME_OFFSET_X = 435;	//Spank Lv3のCut-inと同時に出るMVアニメ　X　＋　この数字
const REM_SPANK_LV3_ANIME_OFFSET_Y = 0;		//Spank Lv3のCut-inと同時に出るMVアニメ　Y　＋　この数字

//Screen Shake
//Butt Spank Lv1の時のシェイク
const REM_SPANK_LV1_SCREEN_SHAKE_POWER = 4;
const REM_SPANK_LV1_SCREEN_SHAKE_SPEED = 10;
const REM_SPANK_LV1_SCREEN_SHAKE_DURATION = 6;

//Butt Spank Lv2の時のシェイク
const REM_SPANK_LV2_SCREEN_SHAKE_POWER = 4;
const REM_SPANK_LV2_SCREEN_SHAKE_SPEED = 10;
const REM_SPANK_LV2_SCREEN_SHAKE_DURATION = 6;

//Butt Spank Lv3の時のシェイク
const REM_SPANK_LV3_SCREEN_SHAKE_POWER = 4;
const REM_SPANK_LV3_SCREEN_SHAKE_SPEED = 10;
const REM_SPANK_LV3_SCREEN_SHAKE_DURATION = 6;

//敵の攻撃スキルの時のシェイク
const REM_ENEMY_ATTACK_SCREEN_SHAKE_POWER = 5;
const REM_ENEMY_ATTACK_SCREEN_SHAKE_SPEED = 5;
const REM_ENEMY_ATTACK_SCREEN_SHAKE_DURATION = 10;

//絶頂Lv1の時のシェイク
const REM_ORGASM_LV1_SCREEN_SHAKE_POWER = 6;
const REM_ORGASM_LV1_SCREEN_SHAKE_SPEED = 6;
const REM_ORGASM_LV1_SCREEN_SHAKE_DURATION = 10;

//絶頂Lv2の時のシェイク
const REM_ORGASM_LV2_SCREEN_SHAKE_POWER = 12;
const REM_ORGASM_LV2_SCREEN_SHAKE_SPEED = 8;
const REM_ORGASM_LV2_SCREEN_SHAKE_DURATION = 10;

//=============================================================================
 /*:
 * @plugindesc Sprite Battler Pos
 * @author Remtairy
 *
 * @help
 * This is a private plugin.
 * Do not redistribute, use, or modify this plugin
 * without explicit written permission from Remtairy.
 *
 */
//=============================================================================

/////////////
/////////////////
// Game Actor
/////////////////
//////////////

//カリンのポーズのアニメやダメージの位置
Game_Actor.prototype.setSpriteBattlerPosData = function(poseName) {
	if(poseName == POSE_STANDBY) {
		this._sbp_current_x = 1060;
		this._sbp_current_y = -150;
	} else if(poseName == POSE_UNARMED) {
		this._sbp_current_x = 1045;
		this._sbp_current_y = -130;
	} else if(poseName == POSE_DEFEND) {
		this._sbp_current_x = 1020;
		this._sbp_current_y = -120;
	} else if(poseName == POSE_EVADE) {
		this._sbp_current_x = 930;
		this._sbp_current_y = -240;
	} else if(poseName == POSE_DOWN_ORGASM) {
		this._sbp_current_x = 880;
		this._sbp_current_y = -150;
	} else if(poseName == POSE_DOWN_FALLDOWN) {
		this._sbp_current_x = 1090;
		this._sbp_current_y = -190;
	} else if(poseName == POSE_DOWN_STAMINA) {
		this._sbp_current_x = 1020;
		this._sbp_current_y = -140;
	} else if(poseName == POSE_DEFEATED_LEVEL1) {
		this._sbp_current_x = 835;
		this._sbp_current_y = 0;
	} else if(poseName == POSE_DEFEATED_LEVEL2) {
		this._sbp_current_x = 850;
		this._sbp_current_y = -180;
	} else if(poseName == POSE_DEFEATED_GUARD) {
		this._sbp_current_x = 900;
		this._sbp_current_y = -230;
	} else if(poseName == POSE_THUGGANGBANG) {
		this._sbp_current_x = 960;
		this._sbp_current_y = -150;
	} else if(poseName == POSE_GUARDGANGBANG) {
		this._sbp_current_x = 1240;
		this._sbp_current_y = -140;
	} else if(poseName == POSE_GOBLINCUNNILINGUS) {
		this._sbp_current_x = 980;
		this._sbp_current_y = -220;
	} else if(poseName == POSE_SLIME_PILEDRIVER_ANAL) {
		this._sbp_current_x = 1050;
		this._sbp_current_y = -130;
	} else if(poseName == POSE_ORC_PAIZURI) {
		this._sbp_current_x = 1065;
		this._sbp_current_y = -70;
	} else if(poseName == POSE_BJ_KNEELING) {
		this._sbp_current_x = 970;
		this._sbp_current_y = -60;
	} else if(poseName == POSE_MAP && $gameParty.isInWaitressBattle) {
		this._sbp_current_x = 1230;
		this._sbp_current_y = -90;
	} else if(poseName == POSE_FOOTJOB) {
		this._sbp_current_x = 1025;
		this._sbp_current_y = -175;
	} else if(poseName == POSE_HJ_STANDING) {
		this._sbp_current_x = 1140;
		this._sbp_current_y = -160;
	} else if(poseName == POSE_PAIZURI_LAYING) {
		this._sbp_current_x = 1000;
		this._sbp_current_y = -60;
	} else if(poseName == POSE_REVERSE_COWGIRL) {
		this._sbp_current_x = 1005;
		this._sbp_current_y = -280;
	} else if(poseName == POSE_KARRYN_COWGIRL) {
		this._sbp_current_x = 1005;
		this._sbp_current_y = -45;
	} else if(poseName == POSE_LIZARDMAN_COWGIRL) {
		this._sbp_current_x = 1100;
		this._sbp_current_y = -320;
	} else if(poseName == POSE_WAITRESS_SEX) {
		this._sbp_current_x = 1040;
		this._sbp_current_y = -150;
	} else if(poseName == POSE_RECEPTIONIST) {
		this._sbp_current_x = 1045;
		this._sbp_current_y = -40;
	} else if(poseName == POSE_KICKCOUNTER) {
		this._sbp_current_x = 1165;
		this._sbp_current_y = -250;
	} else if(poseName == POSE_MASTURBATE1) {
		this._sbp_current_x = 880;
		this._sbp_current_y = -110;

	//Use pose standby values when none of the above
	} else {
		this.setSpriteBattlerPosData(POSE_STANDBY);
		return;
	}
};

//上の基本位置からずれて表示されるダメージの位置 X
Sprite_Actor.prototype.damageOffsetX = function() {
	let poseName = Karryn.poseName;
	let offset = 0;

	if(poseName == POSE_STANDBY) {
		offset = -10;
	}
	else if(poseName == POSE_UNARMED) {
		offset = -80;
	}
	else if(poseName == POSE_DEFEND) {
		offset = -5;
	}
	else if(poseName == POSE_EVADE) {
		offset = 170;
	}
	else if(poseName == POSE_DOWN_FALLDOWN) {
		offset = 15;
	}
	else if(poseName == POSE_DEFEATED_LEVEL2) {
		offset = -20;
	}
	else if(poseName == POSE_DEFEATED_GUARD) {
		offset = -32;
	}
	else if(poseName == POSE_SLIME_PILEDRIVER_ANAL) {
		offset = -10;
	}
	else if(poseName == POSE_REVERSE_COWGIRL) {
		offset = 10;
	}
	else if(poseName == POSE_FOOTJOB) {
		offset = 14;
	}
	else if(poseName == POSE_HJ_STANDING) {
		offset = -10;
	}
	else if(poseName == POSE_KICKCOUNTER) {
		offset = -17;
	}
	else if(poseName == POSE_MAP && $gameParty.isInWaitressBattle) {
		offset = -20;
	}

	if(this._battler && this._battler._sbp_special_type) {
		offset -= this._battler.remSpriteBattlerSpecialPosX();
		offset += this._battler._sbp_current_x;
	}

    return offset;
};

//上の基本位置からずれて表示されるダメージの位置 Y
Sprite_Actor.prototype.damageOffsetY = function() {
	let poseName = Karryn.poseName;
	let offset = 0;

	if(poseName == POSE_STANDBY) {
		offset = -5;
	}
	else if(poseName == POSE_UNARMED) {
		offset = 40;
	}
	else if(poseName == POSE_DEFEND) {
		offset = 50;
	}
	else if(poseName == POSE_EVADE) {
		offset = 120;
	}
	else if(poseName == POSE_DOWN_FALLDOWN) {
		offset = 70;
	}
	else if(poseName == POSE_DEFEATED_LEVEL2) {
		offset = 20;
	}
	else if(poseName == POSE_DEFEATED_GUARD) {
		offset = 47;
	}
	else if(poseName == POSE_GUARDGANGBANG) {
		offset = 45;
	}
	else if(poseName == POSE_GOBLINCUNNILINGUS) {
		offset = 40;
	}
	else if(poseName == POSE_SLIME_PILEDRIVER_ANAL) {
		offset = 60;
	}
	else if(poseName == POSE_ORC_PAIZURI) {
		offset = 60;
	}
	else if(poseName == POSE_FOOTJOB) {
		offset = 50;
	}
	else if(poseName == POSE_HJ_STANDING) {
		offset = 50;
	}
	else if(poseName == POSE_REVERSE_COWGIRL) {
		offset = 50;
	}
	else if(poseName == POSE_LIZARDMAN_COWGIRL) {
		offset = 90;
	}
	else if(poseName == POSE_KICKCOUNTER) {
		offset = 80;
	}
	if(this._battler && this._battler._sbp_special_type) {
		offset -= this._battler.remSpriteBattlerSpecialPosY();
		offset += this._battler._sbp_current_y;
	}

    return offset;
};

//以下のコードを編集してはだめ

Remtairy.SpriteBattlerPos.Game_Actor_initMembers = Game_Actor.prototype.initMembers;
Game_Actor.prototype.initMembers = function() {
    Remtairy.SpriteBattlerPos.Game_Actor_initMembers.call(this);
	this._sbp_current_x = 0;
	this._sbp_current_y = 0;
};

//BattleHud
Game_Actor.prototype.remSpriteBattlerPosX = function() {
	if(this._sbp_special_type) return this.remSpriteBattlerSpecialPosX();
	return this._sbp_current_x;
};
Game_Actor.prototype.remSpriteBattlerPosY = function() {
	if(this._sbp_special_type) return this.remSpriteBattlerSpecialPosY();
	return this._sbp_current_y;
};

Game_Actor.prototype.useSpecialRemSpriteBattlerPos = function(specialType) {
	this._sbp_special_type = specialType;
};
Game_Actor.prototype.resetSpecialRemSpriteBattlerPos = function() {
	this._sbp_special_type = false;
};

Game_Actor.prototype.remSpriteBattlerSpecialPosX = function() {
	let specialPos = 0;

	if(this._sbp_special_type == SPANK_LVL_ONE)
		specialPos = this._tachieCutInPosX + REM_SPANK_LV1_ANIME_OFFSET_X;
	else if(this._sbp_special_type == SPANK_LVL_TWO)
		specialPos = this._tachieCutInPosX + REM_SPANK_LV2_ANIME_OFFSET_X;
	else if(this._sbp_special_type == SPANK_LVL_THREE)
		specialPos = this._tachieCutInPosX + REM_SPANK_LV3_ANIME_OFFSET_X;

	return specialPos;
};
Game_Actor.prototype.remSpriteBattlerSpecialPosY = function() {
	let specialPos = 0;

	if(this._sbp_special_type == SPANK_LVL_ONE)
		specialPos = this._tachieCutInPosY + REM_SPANK_LV1_ANIME_OFFSET_Y;
	else if(this._sbp_special_type == SPANK_LVL_TWO)
		specialPos = this._tachieCutInPosY + REM_SPANK_LV2_ANIME_OFFSET_Y;
	else if(this._sbp_special_type == SPANK_LVL_THREE)
		specialPos = this._tachieCutInPosY + REM_SPANK_LV3_ANIME_OFFSET_Y;

	return specialPos;
};

//unused
Game_Actor.prototype.resetSpriteBattlerPos = function() {
	//this.setSpriteBattlerPosToBoobs();
};

/////////////
////////////////
// Sprite Battler
/////////////////
//////////////

Sprite_Battler.prototype.remSpriteBattlerPosX = function() {
	if(!this._battler) return 0;
	return this._battler.remSpriteBattlerPosX();
};
Sprite_Battler.prototype.remSpriteBattlerPosY = function() {
	if(!this._battler) return 0;
	return this._battler.remSpriteBattlerPosY();
};

//////
////////////
// Battle Manager
////////////
//////

BattleManager.actionClearBattleLog = function() {
    this._logWindow.clear();
	$gameActors.actor(1).resetTachieCutIn();
    return false;
};