Position comparison
This commit is contained in:
		
							parent
							
								
									4f2d58cc29
								
							
						
					
					
						commit
						9369f9483e
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user