CONST_MAX_NUM_PRESTIGE_NERF = 32; // The max number of nerf options CONST_NERF_TABLE = "mp/alien/prestige_nerf.csv"; CONST_NERF_TABLE_IDX_COLUMN = 0; CONST_NERF_TABLE_REF_COLUMN = 1; CONST_NERF_SCALAR_DAMAGE_TAKEN = 1.33; // Greater than 1 to make player takes more damage from aliens CONST_NERF_SCALAR_THREATBIAS = 500; // Greater than 0 to make aliens attack this particular player more often CONST_NERF_SCALAR_WALLET_SIZE = 0.5; // Less than 1 to make the wallet size smaller; CONST_NERF_SCALAR_EARN_LESS_MONEY = 0.75; // Less then 1 to make player earn less money CONST_NERF_SCALAR_WEAPON_DAMAGE = 0.66; // Less than 1 to make player do less damage on aliens; CONST_NERF_NO_CLASS_ALLOWED = 1.0; // 1 = can't select a class, 0 or undefined means you can CONST_NERF_PISTOLS_ONLY = 1.0; // 1 = can't but weapons, 0 or undefined means you can CONST_NERF_SCALAR_HEALTH_REGEN = 1.5; // slow health regen by 50% CONST_NERF_SCALAR_MOVE_SLOWER = 0.7; // movement scalar CONST_NERF_NO_ABILITIES = 1.0; // 1 = can't use Left and Right Dpad abilities, 0 = you can use them CONST_NERF_SCALAR_MIN_AMMO = 0.25; // scalar of max stock for give ammo calls CONST_NERF_NO_DEPLOYABLES = 1.0; // 1 = can't use Up and Down Dpad abilities, 0 = you can use them // Those name references need to match the "reference string" column in the prestige_nerf csv table CONST_REF_NO_NERF = "none"; CONST_REF_TAKE_MORE_DAMAGE = "nerf_take_more_damage"; CONST_REF_HIGHER_THREATBIAS = "nerf_higher_threatbias"; CONST_REF_SMALLER_WALLET = "nerf_smaller_wallet"; CONST_REF_EARN_LESS_MONEY = "nerf_earn_less_money"; // This one is not in the prestige_nerf csv table. It is the additional nerf for smaller wallet CONST_REF_LOWER_WEAPON_DAMAGE = "nerf_lower_weapon_damage"; CONST_REF_NO_CLASS_ALLOWED = "nerf_no_class"; CONST_REF_PISTOLS_ONLY = "nerf_pistols_only"; CONST_REF_SLOW_HEALTH_REGEN = "nerf_fragile"; CONST_REF_MOVE_SLOWER = "nerf_move_slower"; CONST_REF_NO_ABILITIES = "nerf_no_abilities"; CONST_REF_MIN_AMMO = "nerf_min_ammo"; CONST_REF_NO_DEPLOYABLES = "nerf_no_deployables"; init_prestige() { nerf_func = []; nerf_func[CONST_REF_NO_NERF] = ::empty; nerf_func[CONST_REF_TAKE_MORE_DAMAGE] = ::increase_damage_scalar; nerf_func[CONST_REF_HIGHER_THREATBIAS] = ::increase_threatbias; nerf_func[CONST_REF_SMALLER_WALLET] = ::reduce_wallet_size_and_money_earned; nerf_func[CONST_REF_LOWER_WEAPON_DAMAGE] = ::lower_weapon_damage; nerf_func[CONST_REF_NO_CLASS_ALLOWED] = ::no_class; nerf_func[CONST_REF_PISTOLS_ONLY] = ::pistols_only; nerf_func[CONST_REF_SLOW_HEALTH_REGEN] = ::slow_health_regen; nerf_func[CONST_REF_MOVE_SLOWER] = ::move_slower; nerf_func[CONST_REF_NO_ABILITIES] = ::no_abilities; nerf_func[CONST_REF_MIN_AMMO] = ::min_ammo; nerf_func[CONST_REF_NO_DEPLOYABLES] = ::no_deployables; level.prestige_nerf_func = nerf_func; table_list = []; for( i = 0; i < CONST_MAX_NUM_PRESTIGE_NERF; i++ ) { nerfRef = TableLookupByRow( CONST_NERF_TABLE, i, CONST_NERF_TABLE_REF_COLUMN ); if( !IsDefined( nerfRef ) || nerfRef == "" ) break; table_list[table_list.size] = nerfRef; } level.nerf_list = table_list; } init_player_prestige() { init_nerf_scalar(); if ( is_relics_enabled() ) nerf_based_on_selection(); } init_nerf_scalar() { nerf_scalars = []; nerf_scalars[CONST_REF_TAKE_MORE_DAMAGE] = 1.0; nerf_scalars[CONST_REF_HIGHER_THREATBIAS] = 0; // Default threatbias value is 0 nerf_scalars[CONST_REF_SMALLER_WALLET] = 1.0; nerf_scalars[CONST_REF_EARN_LESS_MONEY] = 1.0; nerf_scalars[CONST_REF_LOWER_WEAPON_DAMAGE] = 1.0; nerf_scalars[CONST_REF_NO_CLASS_ALLOWED] = 0; // 0 = can use classes nerf_scalars[CONST_REF_PISTOLS_ONLY] = 0; // 0 = not pistols only, can buy weapons nerf_scalars[CONST_REF_SLOW_HEALTH_REGEN] = 1.0; // default health regen scalar is 1 nerf_scalars[CONST_REF_MOVE_SLOWER] = 1.0; //Move speed scalar nerf_scalars[CONST_REF_NO_ABILITIES] = 0; // 0 = can use abilities nerf_scalars[CONST_REF_MIN_AMMO] = 1.0; nerf_scalars[CONST_REF_NO_DEPLOYABLES] = 0; // 0 = can use abilities self.nerf_scalars = nerf_scalars; self.activated_nerfs = []; } nerf_based_on_selection() { foreach( nerf in level.nerf_list ) { if ( self alienscheckisrelicenabled( nerf ) ) { activate_nerf( nerf ); } } } activate_nerf( reference ) { register_nerf_activated( reference ); [[level.prestige_nerf_func[reference]]](); } nerf_already_activated( reference ) { return common_scripts\utility::array_contains( self.activated_nerfs, reference ); } register_nerf_activated( reference ) { self.activated_nerfs[self.activated_nerfs.size] = reference; } reduce_wallet_size_and_money_earned() { reduce_wallet_size(); reduce_money_earned(); } is_relics_enabled() { if ( maps\mp\alien\_utility::is_chaos_mode() ) return false; return true; } is_no_nerf( reference ) { return reference == "none"; } get_num_nerf_selected() { return self.activated_nerfs.size; } empty() {} increase_damage_scalar() { set_nerf_scalar( CONST_REF_TAKE_MORE_DAMAGE , CONST_NERF_SCALAR_DAMAGE_TAKEN ); } increase_threatbias() { set_nerf_scalar( CONST_REF_HIGHER_THREATBIAS , CONST_NERF_SCALAR_THREATBIAS ); } reduce_wallet_size() { set_nerf_scalar( CONST_REF_SMALLER_WALLET , CONST_NERF_SCALAR_WALLET_SIZE ); } reduce_money_earned() { set_nerf_scalar( CONST_REF_EARN_LESS_MONEY , CONST_NERF_SCALAR_EARN_LESS_MONEY ); } lower_weapon_damage() { set_nerf_scalar( CONST_REF_LOWER_WEAPON_DAMAGE , CONST_NERF_SCALAR_WEAPON_DAMAGE ); } no_class() { set_nerf_scalar( CONST_REF_NO_CLASS_ALLOWED , CONST_NERF_NO_CLASS_ALLOWED ); } pistols_only() { set_nerf_scalar( CONST_REF_PISTOLS_ONLY , CONST_NERF_PISTOLS_ONLY ); } slow_health_regen() { set_nerf_scalar( CONST_REF_SLOW_HEALTH_REGEN , CONST_NERF_SCALAR_HEALTH_REGEN ); } move_slower() { set_nerf_scalar( CONST_REF_MOVE_SLOWER , CONST_NERF_SCALAR_MOVE_SLOWER ); } no_abilities() { set_nerf_scalar( CONST_REF_NO_ABILITIES , CONST_NERF_NO_ABILITIES ); } min_ammo() { set_nerf_scalar( CONST_REF_MIN_AMMO , CONST_NERF_SCALAR_MIN_AMMO ); } no_deployables() { set_nerf_scalar( CONST_REF_NO_DEPLOYABLES , CONST_NERF_NO_DEPLOYABLES ); } set_nerf_scalar( field, value ) { self.nerf_scalars[field] = value; } get_nerf_scalar( field ) { return self.nerf_scalars[field]; } get_selected_nerf( index ) { return self getcoopplayerdata( "alienPlayerLoadout", "nerfs", index ); } // Interface function for external systems prestige_getDamageTakenScalar() { return get_nerf_scalar( CONST_REF_TAKE_MORE_DAMAGE ); } prestige_getThreatbiasScalar() { return get_nerf_scalar( CONST_REF_HIGHER_THREATBIAS ); } prestige_getWalletSizeScalar() { return get_nerf_scalar( CONST_REF_SMALLER_WALLET ); } prestige_getMoneyEarnedScalar() { return get_nerf_scalar( CONST_REF_EARN_LESS_MONEY ); } prestige_getWeaponDamageScalar() { return get_nerf_scalar( CONST_REF_LOWER_WEAPON_DAMAGE ); } prestige_getNoClassAllowed() { return get_nerf_scalar( CONST_REF_NO_CLASS_ALLOWED ); } prestige_getPistolsOnly() { return get_nerf_scalar( CONST_REF_PISTOLS_ONLY ); } prestige_getSlowHealthRegenScalar() { return get_nerf_scalar( CONST_REF_SLOW_HEALTH_REGEN ); } prestige_getMoveSlowScalar() { return get_nerf_scalar( CONST_REF_MOVE_SLOWER ); } prestige_getNoAbilities() { return get_nerf_scalar( CONST_REF_NO_ABILITIES ); } prestige_getMinAmmo() { return get_nerf_scalar( CONST_REF_MIN_AMMO ); } prestige_getNoDeployables() { return get_nerf_scalar( CONST_REF_NO_DEPLOYABLES ); }