You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
4.2 KiB
100 lines
4.2 KiB
2 years ago
|
// Greeting text functions that can be hooked into your cd function so that moving between folders becomes an experience of the AO
|
||
|
import { selectRandom } from './util.js'
|
||
|
|
||
|
const stepMessages = [
|
||
|
'You find a door and walk through.',
|
||
|
'You walk over there now.',
|
||
|
'You head over.',
|
||
|
'Walking briskly, you arrive quickly.',
|
||
|
]
|
||
|
const walkMessages = [
|
||
|
'You take a winding path near a river.',
|
||
|
'A few meadows away is the place you are looking for.',
|
||
|
'A deer leads you a few galleries away to where you were going.',
|
||
|
]
|
||
|
const wanderMessages = {
|
||
|
up: [
|
||
|
'You crane your head upwards to get a better view.',
|
||
|
'You lean back to try and get a better vantage point.',
|
||
|
'You stand on your toes to see above the underbrush.',
|
||
|
'You pull yourself up to a nearby branch.',
|
||
|
'You climb up into the branches to get an overview.',
|
||
|
'After traveling up a slight incline, you realize you are higher than you were before.',
|
||
|
'You climb up onto a boulder so you can see futher around you.',
|
||
|
'You send your trained falcon on ahead to get an aerial view.',
|
||
|
'A rope ladder here leads up to a cozy treehouse with a window you can look out from.',
|
||
|
'Agily climbing the boulders next to a small waterfall, you can see the pool below.',
|
||
|
'A trapdoor? Here? You climb right up through it, pulling yourself up on your forearms.',
|
||
|
'A small trampoline allows you to reach the next platform.',
|
||
|
],
|
||
|
home: [
|
||
|
'You are weary from your journey. You return home.',
|
||
|
'You head home.',
|
||
|
'You return home.',
|
||
|
'Time to go home.',
|
||
|
'Your journey eventually takes you, once again, back to your home.',
|
||
|
'You return to your origin tree.',
|
||
|
'You fall asleep and when you wake up, you are home again. Was it all a dream?',
|
||
|
'Home, sweet, home.',
|
||
|
'There\'s no place like home!',
|
||
|
'You head to the heart of the forest, where you have built a glowing shrine.',
|
||
|
],
|
||
|
root: [
|
||
|
'You are weary of this world. You head up the Mountain, up where the air is thin, to the very acme of creation!',
|
||
|
'On your many long journeys you sometimes find occasion to return to the Headwaters.',
|
||
|
'Deep under the World-Tree lies the root of all things.',
|
||
|
'You take out your compass and it spins wildly. You are at the Center.',
|
||
|
'A large bird swoops down and takes you high into the sky,',
|
||
|
'A rather ungainly solar-powered dirigible carries you safely into the heavens.',
|
||
|
'Without further ado, you ascend.',
|
||
|
'Returning to the center once again, you feel your memories bend around you.',
|
||
|
],
|
||
|
0: [
|
||
|
'Wherever you go, there you are.',
|
||
|
'You\'re going nowhere.',
|
||
|
'You\'re already here.',
|
||
|
],
|
||
|
1: stepMessages,
|
||
|
2: stepMessages,
|
||
|
3: stepMessages,
|
||
|
4: walkMessages,
|
||
|
5: [
|
||
|
'You teleport.',
|
||
|
'You fold space and arrive there in the blink of an eye.',
|
||
|
'You wrinkle time and arrive there in two shakes of a cat\'s tail.',
|
||
|
'You perform a basic transit spell to take you to your destination.',
|
||
|
'Turning your mind inside out, you transmigrate zones.',
|
||
|
'You bilocate and, when the confusion clears, there you are.',
|
||
|
]
|
||
|
}
|
||
|
|
||
|
export default function wander(direction) {
|
||
|
direction = !!direction ? direction.trim() : 'home'
|
||
|
switch(direction) {
|
||
|
case '..':
|
||
|
direction = 'up'
|
||
|
break
|
||
|
case '':
|
||
|
case '~':
|
||
|
case process.env.HOME:
|
||
|
case 'home':
|
||
|
direction = 'home'
|
||
|
break
|
||
|
case '/':
|
||
|
direction = 'root'
|
||
|
break
|
||
|
default:
|
||
|
// To find the jump-distance, add the slashes in the old and new paths, then subtract the number of filenames/folder names they share × 2
|
||
|
// This rewards making further jumps with cd with a cooler flavor text message, encouraging diligence and direct transit.
|
||
|
if(direction && direction.length >= 1) {
|
||
|
const findSlashes = /\//g
|
||
|
const slashesInOldPwd = process.env.OLDPWD.match(findSlashes)?.length
|
||
|
const slashesInNewPwd = process.env.PWD.match(findSlashes)?.length
|
||
|
const sharedWordsCount = process.env.OLDPWD.split('/').filter(word => word != '' && process.env.PWD.split('/').includes(word)).length
|
||
|
let totalSlashes = slashesInOldPwd + slashesInNewPwd - (sharedWordsCount * 2)
|
||
|
if(totalSlashes < 0) totalSlashes = 0
|
||
|
direction = Math.min(parseInt(totalSlashes), 5)
|
||
|
}
|
||
|
}
|
||
|
return selectRandom(wanderMessages[direction])
|
||
|
}
|