Skip to content

Commit

Permalink
initial push
Browse files Browse the repository at this point in the history
  • Loading branch information
cj12312021 committed Sep 2, 2024
1 parent baf83d6 commit 03fa095
Show file tree
Hide file tree
Showing 19 changed files with 206 additions and 1 deletion.
15 changes: 15 additions & 0 deletions plugins/chooseYourAdventurePlayer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Choose Your Own Adventure Player
A plugin to adapt Choose Your Own Adventure Games to the Stash VideoJS player.

## Setup

The plugin provides various settings, but only the `Game tag`, `Resource path`, and `Scene directory path` settings are required for it to work.

### Game tag (Required)
This is the name of the tag created to indicate that the selected game clip is the starting video for the game. (I would recommend setting your default filters up to hide other related videos that are not the starting video)

### Resource path (Required)
This is the path where the non-video game resources would live. For example, the path to the `Sample` directory would be the `Resource path`, which contains one game with the id `1234`. Each game within this directory is expected to have a choices directory with all the necessary JSON files as well as an `images` directory with all the relevant images for the game. You can configure assets directly in this plugin if you want. I would just recommend against it to prevent your game files from being deleted if you ever uninstalled this plugin from the Stash plugin page. I would recommend setting up a custom-served folder for your Stash; see: [Custom served folders](https://docs.stashapp.cc/in-app-manual/configuration/#custom-served-folders).

### Scene directory path (Required)
This is the path within your Stash library directories where your game scenes are stored. For example, the path to the `Sample` directory would be the `Scene directory path`, which contains one game with the id `1234`. In your case, the videos do not have to live under a videos directory within the `1234` directory.
34 changes: 34 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"id": "0",
"type": null,
"title": "Game Start",
"map": {
"title": "Demo",
"description": "Your are viewing a demo of the Choose Your Adventure Player"
},
"mapItem": [
{
"choice_id": "TBD",
"title": "TBD",
"picture": "TBD.png"
}
],
"skipto": "2",
"choices": [
{
"description": "Good Choice",
"id": "1a",
"type": "",
"photo": "TBD"
},
{
"description": "Bad Choice",
"id": "1b",
"type": "",
"photo": "TBD"
}
],
"resource": {
"resolved_content": "Scene0.mp4"
}
}
17 changes: 17 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/1a.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"id": "1a",
"type": null,
"title": "Good Choice",
"skipto": "2",
"choices": [
{
"description": null,
"id": "2",
"type": null,
"photo": "TBD"
}
],
"resource": {
"resolved_content": "Scene1a.mp4"
},
}
10 changes: 10 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/1b-e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": "1b-e",
"type": "exit",
"title": "Bad Choice",
"skipto": null,
"choices": null,
"resource": {
"resolved_content": null
},
}
17 changes: 17 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/1b.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"id": "1b",
"type": null,
"title": "Bad Choice",
"skipto": null,
"choices": [
{
"description": null,
"id": "1b-e",
"type": "exit",
"photo": "TBD"
}
],
"resource": {
"resolved_content": "Scene1b.mp4"
},
}
10 changes: 10 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/2-e.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": "2-e",
"type": "end",
"title": "",
"skipto": null,
"choices": null,
"resource": {
"resolved_content": null
},
}
72 changes: 72 additions & 0 deletions plugins/chooseYourAdventurePlayer/Sample/1234/choices/2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"id": "2",
"type": null,
"title": "Action choice",
"fragments": [
{
"id": "frag-a",
"photo": {
"id": "frag-a_photo",
"content": "frag-a.jpg",
},
"video": {
"id": "frag-a_video",
"resolved_content": "Scene2A.mp4"
},
"actions": [
{
"id": "frag-a-action-a",
"photo": {
"id": "frag-a-action-a_photo",
"content": "frag-a-action-a.jpg"
},
"video": {
"id": "frag-a-action-a_video",
"resolved_content": "Scene2A-1.mp4"
},
"title": "TBD",
},
{
"id": "frag-a-action-b",
"photo": {
"id": "frag-a-action-b_photo",
"content": "frag-a-action-b.jpg"
},
"video": {
"id": "frag-a-action-b_video",
"resolved_content": "Scene2A-1.mp4"
},
"title": "TBD",
}
],
"title": "TBD",
},
{
"id": "frag-b",
"photo": {
"id": "frag-b_photo",
"content": "frag-b.jpg"
},
"video": {
"id": "frag-b_video",
"resolved_content": "Scene2B.mp4"
},
"actions": null,
"title": "TBA",
"subtitles": "Scene3-08"
}
],
"skipto": null,
"choices": [
{
"description": null,
"id": "2-e",
"type": "end",
"photo": "TBD"
}
],
"resource": {
"id": "empty",
"resolved_content": null
},
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
30 changes: 30 additions & 0 deletions plugins/chooseYourAdventurePlayer/chooseYourAdventurePlayer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Choose Your Own Adventure Player
description: Plugin to adapt Choose Your Own Adventure Games to the VideoJS player.
version: 1.0
# requires: CommunityScriptsUILibrary
ui:
requires:
- CommunityScriptsUILibrary
assets:
/: assets
settings:
gameTag:
displayName: Game tag
description: Name of the tag indicating a scene is the starting point of game. Player will initialize once scene with this tag is loaded. Only use this tag on the starting scene.
type: STRING
enableGameSave:
displayName: Enable game save
description: When enabled you will be giving the opportunity to resume your games from where you last left off which all your choices in tack.
type: BOOLEAN
resourcePath:
displayName: Resource path
description: Location where game resources live (images, jsons). It is recommended to create custom served folder for this.
type: STRING
rootScenesPath:
displayName: Root scenes directory path
description: Data path where game scenes live.
type: STRING
useCustomPosters:
displayName: Use custom game posters
description: When enabled the t=start game screen will use provided poster instead of default scene cover. Poster should be named with the following comvention {resourcePath}/{gameId}/poster_{number}.jpg
type: BOOLEAN
2 changes: 1 addition & 1 deletion plugins/cjCardTweaks/cjCardTweaks.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
const PERFORMER_PROFILE_CARD_STYLE =
".performer-card:hover img.performer-card-image{box-shadow: 0 0 0 rgb(0 0 0 / 20%), 0 0 6px rgb(0 0 0 / 90%);transition: box-shadow .5s .5s}@media (min-width: 1691px){.performer-recommendations .card .performer-card-image{height: unset}}button.btn.favorite-button.not-favorite,button.btn.favorite-button.favorite{transition: filter .5s .5s}.performer-card:hover .thumbnail-section button.btn.favorite-button.not-favorite, .performer-card:hover .thumbnail-section button.btn.favorite-button.favorite{filter: drop-shadow(0 0 2px rgba(0, 0, 0, .9))}.performer-card .thumbnail-section button.btn.favorite-button.not-favorite, .performer-card .thumbnail-section button.btn.favorite-button.favorite{top: 10px;filter: drop-shadow(0 2px 2px rgba(0, 0, 0, .9))}.item-list-container .performer-card__age,.recommendation-row .performer-card__age,.item-list-container .performer-card .card-section-title,.recommendation-row .performer-card .card-section-title,.item-list-container .performer-card .thumbnail-section,.recommendation-row .performer-card .thumbnail-section{display: flex;align-content: center;justify-content: center}.item-list-container .performer-card .thumbnail-section a,.recommendation-row .performer-card .thumbnail-section a{display: contents}.item-list-container .performer-card-image,.recommendation-row .performer-card-image{aspect-ratio: 1 / 1;display: flex;object-fit: cover;border: 3px solid var(--plex-yelow);border-radius: 50%;min-width: unset;position: relative;width: 58%;margin: auto;z-index: 1;margin-top: 1.5rem;box-shadow:0 13px 26px rgb(0 0 0 / 20%),0 3px 6px rgb(0 0 0 / 90%);object-position: center;transition: box-shadow .5s .5s}.item-list-container .performer-card hr,.recommendation-row .performer-card hr{width: 90%}.item-list-container .performer-card .fi,.recommendation-row .performer-card .fi{position: absolute;top: 81.5%;left: 69%;border-radius: 50% !important;background-size: cover;margin-left: -1px;height: 1.5rem;width: 1.5rem;z-index: 10;border: solid 2px #252525;box-shadow: unset}.item-list-container .performer-card .card-popovers .btn,.recommendation-row .performer-card .card-popovers .btn{font-size: 0.9rem}";
const RATING_BANNER_3D_STYLE =
".grid-card{overflow: unset}.detail-group .rating-banner-3d{display: none}.grid-card:hover .rating-banner-3d{opacity: 0;transition: opacity .5s}.rating-banner{display: none}.rating-banner-3d{height: 110px;left: -6px;overflow: hidden;position: absolute;top: -6px;width: 110px}.rating-banner-3d span{box-shadow: 0 5px 4px rgb(0 0 0 / 50%);position: absolute;display: block;width: 170px;padding: 10px 0;padding-right: 5px;background-color: #ff6a07;color: #fff;font: 700 18px / 1 'Lato', sans-serif;text-shadow: 0 1px 1px rgba(0, 0, 0, .2);text-transform: uppercase;text-align: center;font-size: 1rem;font-weight: 700;letter-spacing: 1px;right: -20px;top: 24px;transform: rotate(-45deg)}.rating-banner-3d::before{top: 0;right: 0;position: absolute;z-index: -1;content: '';display: block;border: 5px solid #a34405;border-top-color: transparent;border-left-color: transparent}.rating-banner-3d::after{bottom: 0;left: 0;position: absolute;z-index: -1;content: '';display: block;border: 5px solid #963e04}";
"span.file-count.badge.badge-pill.badge-info{position:absolute;top:.3rem;right:.5rem;border-radius:50%;width:1.7rem;height:1.7rem;padding:5px 8px;font-size:100%;box-shadow:1px 3px 4px rgb(0 0 0 / .5)}.grid-card:hover .file-count.badge,.grid-card:hover .rating-banner-3d{opacity:0;transition:opacity .5s}.grid-card{overflow:unset!important}.detail-group .rating-banner-3d,.rating-banner{display:none}.rating-banner-3d{height:110px;left:-6px;overflow:hidden;position:absolute;top:-6px;width:110px}.rating-banner-3d span{box-shadow:0 5px 4px rgb(0 0 0 / 50%);position:absolute;display:block;width:170px;padding:10px 5px 10px 0;background-color:#ff6a07;color:#fff;font:700 1rem/1 Lato,sans-serif;text-shadow:0 1px 1px rgb(0 0 0 / .2);text-transform:uppercase;text-align:center;letter-spacing:1px;right:-20px;top:24px;transform:rotate(-45deg)}.rating-banner-3d::before{top:0;right:0;position:absolute;z-index:-1;content:'';display:block;border:5px solid #a34405;border-top-color:#fff0;border-left-color:#fff0}.rating-banner-3d::after{bottom:0;left:0;position:absolute;z-index:-1;content:'';display:block;border:5px solid #963e04}.performer-card:hover img.performer-card-image{box-shadow:0 0 0 rgb(0 0 0 / 20%),0 0 6px rgb(0 0 0 / 90%);transition:box-shadow .5s .5s}@media (min-width:1691px){.performer-recommendations .card .performer-card-image{height:unset}}button.btn.favorite-button.favorite,button.btn.favorite-button.not-favorite{transition:filter .5s .5s}.performer-card:hover .thumbnail-section button.btn.favorite-button.favorite,.performer-card:hover .thumbnail-section button.btn.favorite-button.not-favorite{filter:drop-shadow(0 0 2px rgb(0 0 0 / .9))}.performer-card .thumbnail-section button.btn.favorite-button.favorite,.performer-card .thumbnail-section button.btn.favorite-button.not-favorite{top:10px;filter:drop-shadow(0 2px 2px rgb(0 0 0 / .9))}.item-list-container .performer-card .card-section-title,.item-list-container .performer-card .thumbnail-section,.item-list-container .performer-card__age,.recommendation-row .performer-card .card-section-title,.recommendation-row .performer-card .thumbnail-section,.recommendation-row .performer-card__age{display:flex;align-content:center;justify-content:center}.item-list-container .performer-card .thumbnail-section a,.recommendation-row .performer-card .thumbnail-section a{display:contents}.item-list-container .performer-card-image,.recommendation-row .performer-card-image{aspect-ratio:1/1;display:flex;object-fit:cover;border:3px solid var(--plex-yelow);border-radius:50%;min-width:unset;position:relative;width:58%;margin:1.5rem auto auto;z-index:1;box-shadow:0 13px 26px rgb(0 0 0 / 20%),0 3px 6px rgb(0 0 0 / 90%);object-position:center;transition:box-shadow .5s .5s}.item-list-container .performer-card hr,.recommendation-row .performer-card hr{width:90%}.item-list-container .performer-card .fi,.recommendation-row .performer-card .fi{position:absolute;top:81.5%;left:69%;border-radius:50%!important;background-size:cover;margin-left:-1px;height:1.5rem;width:1.5rem;z-index:10;border:2px solid #252525;box-shadow:unset}.item-list-container .performer-card .card-popovers .btn,.recommendation-row .performer-card .card-popovers .btn{font-size:.9rem}";

/**
* Element to inject custom CSS styles.
Expand Down

0 comments on commit 03fa095

Please sign in to comment.