Position comparison

This commit is contained in:
Mr. Stallion 2021-04-22 18:49:21 -05:00
parent 4f2d58cc29
commit 9369f9483e
9 changed files with 102 additions and 14 deletions

View File

@ -1,5 +1,8 @@
# Changelog
## 1.13.0
* Position is now part of the profile match score
## 1.12.0
* Post length preference is now part of the profile match score
* Improved kink match scoring

View File

@ -1,7 +1,7 @@
# Download
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-win.exe) (75 MB)
| [MacOS](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-macos.dmg) (76 MB)
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-linux.AppImage) (76 MB)
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-win.exe) (75 MB)
| [MacOS](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-macos.dmg) (76 MB)
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-linux.AppImage) (76 MB)
# F-Chat Rising
@ -94,6 +94,7 @@ This repository contains a heavily customized version of the mainline F-Chat 3.0
* Dominance preference
* Human/anthro preference
* Post length preference
* Position preference
* Non-custom kinks
* Species
1. Maching for non-binary genders relies on kinks. For example, if your non-binary character has a preference for females, make sure 'females' are listed as a favorite kink.

View File

@ -50,7 +50,7 @@ theme: jekyll-theme-slate
changelog: https://github.com/mrstallion/fchat-rising/blob/master/CHANGELOG.md
download:
version: 1.12.0
version: 1.13.0
url: https://github.com/mrstallion/fchat-rising/releases/download/v%VERSION%/F-Chat-Rising-%VERSION%-%PLATFORM_TAIL%

View File

@ -1,6 +1,6 @@
{
"name": "fchat",
"version": "1.12.0",
"version": "1.13.0",
"author": "The F-List Team and Mister Stallion (Esq.)",
"description": "F-List.net Chat Client",
"main": "main.js",

View File

@ -56,6 +56,14 @@ export enum SubDomRole {
AlwaysDominant = 11
}
export enum Position {
AlwaysBottom = 85,
UsuallyBottom = 86,
Switch = 91,
UsuallyTop = 87,
AlwaysTop = 88
}
export enum Orientation {
Straight = 4,
Gay = 5,

View File

@ -28,6 +28,7 @@ import {
mammalSpecies,
nonAnthroSpecies,
Orientation,
Position,
PostLengthPreference, postLengthPreferenceMapping, postLengthPreferenceScoreMapping, Scoring,
Species,
SpeciesMap,
@ -148,6 +149,7 @@ export class CharacterAnalysis {
readonly furryPreference: FurryPreference | null;
readonly age: number | null;
readonly subDomRole: SubDomRole | null;
readonly position: Position | null;
readonly postLengthPreference: PostLengthPreference | null;
readonly isAnthro: boolean | null;
@ -162,6 +164,7 @@ export class CharacterAnalysis {
this.species = Matcher.species(c);
this.furryPreference = Matcher.getTagValueList(TagId.FurryPreference, c);
this.subDomRole = Matcher.getTagValueList(TagId.SubDomRole, c);
this.position = Matcher.getTagValueList(TagId.Position, c);
this.postLengthPreference = Matcher.getTagValueList(TagId.PostLength, c);
const ageTag = Matcher.getTagValue(TagId.Age, c);
@ -401,7 +404,8 @@ export class Matcher {
[TagId.Species]: this.resolveSpeciesScore(),
[TagId.SubDomRole]: this.resolveSubDomScore(),
[TagId.Kinks]: this.resolveKinkScore(pronoun),
[TagId.PostLength]: this.resolvePostLengthScore()
[TagId.PostLength]: this.resolvePostLengthScore(),
[TagId.Position]: this.resolvePositionScore()
},
info: {
@ -731,7 +735,7 @@ export class Matcher {
if (yourSubDomRole === SubDomRole.UsuallyDominant) {
if (theirSubDomRole === SubDomRole.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
if ((theirSubDomRole === SubDomRole.AlwaysSubmissive) || (theirSubDomRole === SubDomRole.UsuallySubmissive))
return new Score(Scoring.MATCH, `Loves <span>submissives</span>`);
@ -747,7 +751,7 @@ export class Matcher {
if (yourSubDomRole === SubDomRole.AlwaysDominant) {
if (theirSubDomRole === SubDomRole.Switch)
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span>`);
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (role)`);
if ((theirSubDomRole === SubDomRole.AlwaysSubmissive) || (theirSubDomRole === SubDomRole.UsuallySubmissive))
return new Score(Scoring.MATCH, `Loves <span>submissives</span>`);
@ -766,7 +770,7 @@ export class Matcher {
if (yourSubDomRole === SubDomRole.UsuallySubmissive) {
if (theirSubDomRole === SubDomRole.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
if ((theirSubDomRole === SubDomRole.AlwaysDominant) || (theirSubDomRole === SubDomRole.UsuallyDominant))
return new Score(Scoring.MATCH, `Loves <span>dominants</span>`);
@ -782,7 +786,7 @@ export class Matcher {
if (yourSubDomRole === SubDomRole.AlwaysSubmissive) {
if (theirSubDomRole === SubDomRole.Switch)
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span>`);
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (role)`);
if ((theirSubDomRole === SubDomRole.AlwaysDominant) || (theirSubDomRole === SubDomRole.UsuallyDominant))
return new Score(Scoring.MATCH, `Loves <span>dominants</span>`);
@ -801,7 +805,7 @@ export class Matcher {
// You must be a switch
if (theirSubDomRole === SubDomRole.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
// if (yourRoleReversalPreference === KinkPreference.Favorite)
// return new Score(Scoring.MATCH, `Loves <span>role reversal</span>`);
@ -818,6 +822,78 @@ export class Matcher {
return new Score(Scoring.NEUTRAL);
}
private resolvePositionScore(): Score {
const yourPosition = this.yourAnalysis.position;
const theirPosition = this.theirAnalysis.position;
if ((!yourPosition) || (!theirPosition))
return new Score(Scoring.NEUTRAL);
if (yourPosition === Position.UsuallyTop) {
if (theirPosition === Position.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>tops</span>');
}
if (yourPosition === Position.AlwaysTop) {
if (theirPosition === Position.Switch)
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (position)`);
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
if ((yourPosition === Position.AlwaysTop) && (theirPosition === Position.AlwaysTop))
return new Score(Scoring.MISMATCH, 'No <span>tops</span>');
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>tops</span>');
}
if (yourPosition === Position.UsuallyBottom) {
if (theirPosition === Position.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>bottoms</span>');
}
if (yourPosition === Position.AlwaysBottom) {
if (theirPosition === Position.Switch)
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (position)`);
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
if ((yourPosition === Position.AlwaysBottom) && (theirPosition === Position.AlwaysBottom))
return new Score(Scoring.MISMATCH, 'No <span>bottoms</span>');
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>bottoms</span>');
}
// You must be a switch
if (theirPosition === Position.Switch)
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
// if (yourRoleReversalPreference === KinkPreference.Favorite)
// return new Score(Scoring.MATCH, `Loves <span>role reversal</span>`);
//
// if (yourRoleReversalPreference === KinkPreference.Yes)
// return new Score(Scoring.MATCH, `Likes <span>role reversal</span>`);
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
return new Score(Scoring.NEUTRAL);
}
private resolveKinkBucketScore(bucket: 'all' | 'favorite' | 'yes' | 'maybe' | 'no' | 'positive' | 'negative'): KinkBucketScore {
const yourKinks = this.getAllStandardKinks(this.you);

View File

@ -99,7 +99,7 @@ export class IndexedStore implements PermanentIndexedStore {
species: ca.species,
age: ca.age,
domSubRole: ca.subDomRole, // domSubRole
position: null, // position
position: ca.position, // position
lastMetaFetched: null,
guestbook: null,

View File

@ -1,6 +1,6 @@
{
"name": "f-list-rising",
"version": "1.12.0",
"version": "1.13.0",
"author": "The F-List Team and and Mister Stallion (Esq.)",
"description": "A heavily modded F-Chat 3.0 client for F-List",
"license": "MIT",

View File

@ -59,7 +59,7 @@
}
theirInterestIsRelevant(id: number): boolean {
return ((id === TagId.FurryPreference) || (id === TagId.Orientation) || (id === TagId.SubDomRole) || (id === TagId.PostLength));
return ((id === TagId.FurryPreference) || (id === TagId.Orientation) || (id === TagId.SubDomRole) || (id === TagId.Position) || (id === TagId.PostLength));
}
yourInterestIsRelevant(id: number): boolean {