Preston Choate
← CFB Data Mining

CFB 27 Recruiting Tunables: Weights and Math

cfb27 recruiting

Derived from dynasty-tuning-binary.FTC (CFB 27, patch cfb27-db-data/2/).
Source command: cfb-dynasty recruiting-tunables -schema-dir ./data

This document records tuning constants and inferred influence arithmetic only.
Compiled formula bytecode is not available; evaluation order below is inferred from schema field structure (RecruitingActionInfo, RecruitTarget, ProspectTargetSchool).

Executive summary

  • Weekly influence on hour-based actions is modeled as base + pipeline bonus + motivation grade bonuses, with a pitch mismatch penalty where applicable.
  • Stage visibility uses commit-score share thresholds: Top 5 at 35%, Top 3 at 75%, commit at 100%.
  • SoftSell / HardSell / Sway / Contact Friends & Family hours and base influence are listed under recruiting actions; visit activities add separate influence.
  • Visit competitive/complimentary ±5 and the hidden per-position competitive threshold: Competitive & Complimentary Visits.
  • NIL offer influence is a spline on offer ÷ expectation: NIL Offer → Recruiting Influence.
  • Program prestige stars from My School grades: School Prestige From My School Grades.
  • Tables below are the full scalar/array dump for pipelines, pitches, motivations, and visit activities.

Save fields vs tuning constants

RoleSave export fieldTable / notes
Per-school influencerecruiting[].schoolInterest[].influenceProspectTargetSchool.TeamInfluence
Total influence poolrecruits[].commitScoreRecruit.CommitScore
Recruit stagerecruits[].recruitStageRecruit.RecruitStage
Weekly influence changerecruiting[].prospectInfluenceDeltaRecruitTarget.ProspectInfluenceDelta
Cumulative influencerecruiting[].prospectInfluenceTotalRecruitTarget.ProspectInfluenceTotal
Hours this weekrecruiting[].prospectHoursSpentCurrentRecruitTarget.ProspectHoursSpentCurrent
School letter gradesschoolGrades[]MySchoolTrackingTable
Recruit motivationsrecruits[].player.motivations[]Recruit motivation fields
Active pitch + intensityrecruiting[].activePitches[]ActiveRecruitingPitch

School share of commit score is computed in-game by RecruitingStageDetails_GetSchoolPercentageOfCommitScore(recruit, schoolRank) (expression asset; bytecode not decoded).


Influence model (inferred)

Weekly influence gain for an hour-based action:

influenceGain = BaseInfluenceGranted
              + PipelineInfluenceBonusTable[pipelineLevel]
              + sum of MotivationGradeBonus(pitchMotivationSlot_i, schoolLetterGrade)
              + matchingMotivationBoosts (see ChanceToSwayBoostPerMatchingMotivation)
              + NonMatchingMotivationPenalty   (PITCH only; negative when pitch mismatches)
  • pipelineLevel is indexed 0-5 (six entries in every PipelineInfluenceBonusTable).
  • MotivationGradeBonus uses LetterGradeValueTable rows attached to the action (three rows for PITCH; one row per motivation slot).
  • NonMatchingMotivationPenalty is 0 for non-pitch actions and for PITCH / Sway.

Stage visibility thresholds

Percentage of commit score required for stage visibility (from RecruitingTunables scalars):

ThresholdValue
PointsPercentageThresholdTop535
PointsPercentageThresholdTop375
PointsPercentageThresholdCommit100

Stage school-count caps:

FieldValue
RecruitStageTop10SchoolCount10
RecruitStageTop5SchoolCount5
RecruitStageTop3SchoolCount3
RecruitStageBattleSchoolCount3
RecruitStageSoftCommittedSchoolCount3
RecruitStageHardCommittedSchoolCount1
RecruitStageSignedSchoolCount1

Recruit stage enum values present in tuning (RecruitingStageDetails):
Top10, Top5, Top3, Battle, SoftCommitted, HardCommitted

Battle proximity threshold: TriggerRecruitingBattleWithinCommitThreshold = 10

Commit-score modifiers:

FieldValue
BattleAdditionalCommitScorePercentage25
HardCommitAdditionalCommitScorePercentage50
TransferDefaultCommitScore1000

Weekly limits

FieldValue
MaxTotalHoursOnRecruitPerWeek50
MaxRecruitingBoardTargets35
MaxTeamScholarshipOffers35
MaxRecruitVisitsPerWeek4
MaxTimesScouted5
CPU_AI_MaxPitchCount2

Recruiting actions

From RecruitingActionInfo tuning table.

ActionIntensityCost (hrs)Base influencePenalty
SearchSocialMedian/a540
SCOUTINGn/a1000
ContactHighSchoolCoachesn/a1080
ContactFriendsAndFamilyn/a25200
OFFERSCHOLARSHIPn/a500
PITCHSoftSell2020-20
PITCHHardSell4040-40
PITCHSway30150
SCHEDULEVISITn/a4000
VisitRecruitsSchooln/a50400
SendTheHousen/a50500

SearchSocialMedia aliases GenericHoursAction_First. SendTheHouse aliases GenericHoursAction_Last.

Base efficiency (BaseInfluenceGranted / Cost):

ActionRatio
GenericHoursAction_First0.80
ContactHighSchoolCoaches0.80
ContactFriendsAndFamily0.80
VisitRecruitsSchool0.80
GenericHoursAction_Last1.00
PITCH SoftSell1.00
PITCH HardSell1.00
PITCH Sway0.50

Pipeline influence bonus by action

Add PipelineInfluenceBonusTable[pipelineLevel] where pipelineLevel is in {0, 1, 2, 3, 4, 5}.

ActionL0L1L2L3L4L5
ContactHighSchoolCoaches011234
GenericHoursAction_First011112
ContactFriendsAndFamily0246810
VisitRecruitsSchool048121620
PITCH SoftSell0246810
PITCH HardSell048121620
PITCH Sway000000
GenericHoursAction_Last000000
OFFERSCHOLARSHIP, SCHEDULEVISIT, SCOUTING000000

Pitch motivation grade bonuses

Each PITCH row has MotivationGradesInfluenceBonusTable with three LetterGradeValueTable rows (motivation slots 1-3, aligned with AssociatedMotivation1..3 on RecruitingPitchInfo).
When a recruit motivation matches a pitch motivation slot, the school’s letter grade for the mapped MySchoolGrade (see below) selects a bonus from that slot’s row.

PITCH / Sway has no motivation grade table attached in tuning.

Grade column order: F, D-, D, D+, C-, C, C+, B-, B, B+, A-, A, A+

SoftSell slot 1

-6  -5  -4  -3  -2  -1   0   0   1   2   3   4   6

SoftSell slot 2

-7  -6  -5  -4  -3  -2  -1   0   1   2   4   5   7

SoftSell slot 3

-9  -8  -6  -5  -4  -2  -1   0   2   4   6   8  10

HardSell slot 1

-14 -12 -10  -8  -6  -4  -1   1   2   4   8  10  14

HardSell slot 2

-20 -18 -16 -14 -10  -6  -2   2   4   6  10  14  20

HardSell slot 3

-12 -10  -8  -6  -4  -2  -1   0   2   4   6   8  12

Matching-motivation scalar: ChanceToSwayBoostPerMatchingMotivation = 15


Motivation to school grade mapping

From RecruitingMotivationToMySchoolGradeMapping. The school grade field used for pitch bonus lookup is the recruit motivation’s mapped MySchoolGrade (exported under schoolGrades).

Recruiting motivationMySchoolGrade key
AcademicPrestigeAcademicPrestige
AthleticFacilitiesAthleticFacilities
BrandExposureBrandExposure
CampusLifestyleCampusLifestyle
ChampionshipContenderChampionshipContender
CoachPrestigeCoachPrestige
CoachStabilityCoachStability
ConferencePrestigeConferencePrestige
PlayingStylePlayingStyle
PlayingTimePlayingTime
ProgramTraditionProgramTradition
ProPotentialProPotential
ProximityToHomeProximityToHome
StadiumAtmosphereStadiumAtmosphere

Pitch catalog

From RecruitingPitchInfo (20 pitches). hasDealbreakerMotivation is stored on pitches that declare it in tuning.

Pitch IDDisplay name
AspirationalAspirational Goals
CampusPersonalityCampus Personality
TimeToGetToWorkClocked In
CoachsFavoriteCoach Connection
CollegeExperienceCollege Experience
ConferenceSpotlightConference Legend
FootballInfluencerFootball Influencer
ItsGameTimeGamer
GrassrootsGrassroots Traditionalist
WorkHorseGym Rat
HometownHeroHometown Hero
ToTheHouseHouse Call
TVTimePrimetime Player
PrestigiousStandard Bearer
StarterStar Search
ProveYourselfStatus Seeker
StudentOfTheGameStudent of the Game
SundayBoundSunday Player
TeamPlayerTeam Player
TheClutchThe Clutch

Motivations by pitch (slots 1, 2, 3), part 1:

Pitch IDMotivation 1Motivation 2Motivation 3
AspirationalChampionshipContenderConferencePrestigeCoachPrestige
CampusPersonalityCampusLifestylePlayingTimePlayingStyle
TimeToGetToWorkPlayingStylePlayingTimeProPotential
CoachsFavoriteAthleticFacilitiesCoachPrestigeProximityToHome
CollegeExperienceAcademicPrestigeCampusLifestyleStadiumAtmosphere
ConferenceSpotlightChampionshipContenderConferencePrestigeProximityToHome
FootballInfluencerBrandExposurePlayingTimeProPotential
ItsGameTimeConferencePrestigePlayingStyleProPotential
GrassrootsProgramTraditionProximityToHomeStadiumAtmosphere
WorkHorseAthleticFacilitiesBrandExposureProPotential

Motivations by pitch, part 2:

Pitch IDMotivation 1Motivation 2Motivation 3
HometownHeroChampionshipContenderProgramTraditionProximityToHome
ToTheHouseBrandExposureCoachPrestigeChampionshipContender
TVTimeBrandExposureChampionshipContenderPlayingTime
PrestigiousCoachPrestigeConferencePrestigePlayingStyle
StarterBrandExposurePlayingTimeProximityToHome
ProveYourselfBrandExposureCoachPrestigeConferencePrestige
StudentOfTheGameAcademicPrestigeCoachPrestigeProximityToHome
SundayBoundChampionshipContenderConferencePrestigeProPotential
TeamPlayerCoachStabilityPlayingStyleProximityToHome
TheClutchCoachStabilityPlayingStylePlayingTime

Visit tunables

Scalars (VisitTunables):

FieldValue
competitiveVisitPenalty5
complimentaryVisitBonus5

Per-position competitive thresholds and complimentary position groups: Competitive & Complimentary Visits (at-or-below threshold skips −5; count > threshold is the working assumption; CB A/B + Agusting).

SCHEDULEVISIT costs 40 hours with 0 base influence; influence from visit activities is applied separately via VisitActivityInfluenceTable.

Visit activity types

From VisitActivityInfo:

AttendLecture, AttendPositionMeeting, AttendPractice, AttendTeamMeeting, CampusTour, FamilyVisit, MeetAlumni, OneOnOneCoaching, PodcastInterview, Tailgate, TeamDinner, TeamHistory, TeamWorkout, TrophyTour

Visit influence by recruit interest level

Each activity maps to an interest level (Dealbreaker, Interested, NotInterested). The selected LetterGradeValueTable row provides a bonus from the school’s grade for the activity’s associated motivation.

Grade column order: F, D-, D, D+, C-, C, C+, B-, B, B+, A-, A, A+

Dealbreaker

-48 -40 -32 -24 -16  -8   0   8  16  24  32  40  48

Interested

-36 -30 -24 -18 -12  -6   0   6  12  18  24  30  36

NotInterested

-24 -22 -20 -18 -16 -14 -12 -10  -8  -6  -4  -2   0

Scholarship and NIL

FieldValue
ScholarshipOfferWeeklyBonus5
ScholarshipBonusLowExpectationCutoff10
MinimumNILToOfferPercentage0.80
SoftCommitInfluenceVariance10

NIL offer → influence spline (offer ÷ expectation, low-expectation raw path, Deal Maker): NIL Offer → Recruiting Influence.


Pipeline and initial interest arrays

Indexed arrays from RecruitingTunables (index meaning is game-defined; pipeline tables use indices 0-5).

ArrayValues
RecruitInitialInfluencePerPipelineLevel0, 5, 15, 25, 75, 100
InitialInterest_Pipeline0, 5, 10, 15, 25, 35
InfluenceRequiredPerPipelineLevel0, 1, 30, 90, 175, 300
ChanceToSwayBoostFromPipelineInfluenceLevel0, 5, 10, 15, 20, 25
InitialInterest_AlmaMater_Starlevel10, 10, 10, 10, 10
InterestBoost_Start_Awards_Starlevel10, 10, 10, 10, 10

Scouting arrays

ArrayValues
ScoutingAttributesUnlockPercentage10 entries of 10
ScoutingPhysicalAbilityUnlockPercentage5 entries of 20
ScoutingAttributeLongSliderWidth (scalar)28
ScoutingAttributeShortSliderWidth (scalar)13

Instant commit and class ranking

ArrayValues
InstantCommitOddsPerStarLevel10, 8, 6, 4, 2
InstantCommitBonusPrestige0, 1, 2, 5, 15, 25, 40, 70, 100
TopClassesStarRatingTable5, 10, 15, 20, 25
TopClassesRankWeightPercentageTablesee below

TopClassesRankWeightPercentageTable (35 entries):

100, 99, 98, 95, 91, 86, 80, 74, 67, 61, 54, 47, 41, 35, 30, 25, 21, 17, 14, 11,
8, 7, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3

Transfer portal TransferValueCutOffs:

76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86

Recruiting points abstraction

RecruitingPointsAbstractionTable maps raw influence totals to UI tiers (15 entries):

141, 100, 61, 41, 21, 11, 6, 1, 0, -5, -10, -20, -40, -60, -99

High school recruit generation

From HighSchoolRecruitingTunables (single tuning row):

FieldValue
AcademicsMeterBonusMax30
BrandMeterBonusMax75000
ChallengePerformanceThreshold10
CoachTrustBonusMax1000
FitnessMeterBonusMax16
InitialTapeScoreBoostDecrementRate20
LeadershipMeterBonusMax25
NumberOfRecommendedSchoolScholarshipOffers3
RankChangeExpectedPerformanceMax10
RankChangeOverPerformanceMax25
RankChangeUnderPerformanceMax25
ScholarshipBonusDecommitPenalty1
ScholarshipBonusVariance10
ScholarshipScoreDecommitPenalty1500
SchoolPrestigeFactorWeight1.0
SkillPointsBonusMax600
TeamNeedFactorWeight1.0

Remaining scalars

FieldValue
AIAggressivenessSlider1.15
AINILAggressivenessSlider2.25
CPU_AI_SpendScoutingWeeklyMaxRecruitsToScout35
ChanceToSwayBoostPerMatchingMotivation15
EventRankingCutoff10
MaxCollegeYearsRemaining4
MaxFiveStarsInClass32
MaxJumpBacks0
OVRProjection2
RecruitsToGenerateGroupMax20
RecruitsToGenerateMinimum4100
RecruitsToGenerateMaximum4100
Stage2WarningThreshold50

UI strings

FieldText
EarlySigningDayActionItemStringEarly National Signing Day
PreseasonRecruitingActionItemStringSet Up Recruiting Board and Scout
TransferPortalActionItemStringTransfer Portal and Offseason Recruiting

Encoding note

Tuning FTC array elements use EA s_int storage with minValue = 0x80000000. Exported values in cfb-dynasty recruiting-tunables decode this bias automatically.


Not decoded

  • Compiled expression bodies (RecruitingStageDetails_GetSchoolPercentageOfCommitScore, RecruitingEval_ApplyWeeklyRecruitingHours, etc.)
  • Exact stacking order of additive bonuses vs multipliers
  • Per-activity motivation to interest-level mapping (which visit activity triggers which VisitActivityInterestLevel)
  • RecruitingActionFeedbackEntry / RecruitingActionBonus runtime bonus breakdown on executed actions