187 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# find mushroom
 | 
						|
# break wheel
 | 
						|
# examine rock
 | 
						|
# deplete power
 | 
						|
# reset to beginning
 | 
						|
# print status: battery
 | 
						|
# print status: wheels
 | 
						|
# generate a map of where we have been
 | 
						|
 | 
						|
playintro=0
 | 
						|
 | 
						|
# $1 message
 | 
						|
echowait () {
 | 
						|
    echo $1
 | 
						|
    read -s -n 1
 | 
						|
}
 | 
						|
 | 
						|
intro () {
 | 
						|
    echowait "CRASH!!!"
 | 
						|
    echowait "ah!!"
 | 
						|
    echowait "..."
 | 
						|
    echowait "...uh oh. hmm. uh. huh. hmmmm."
 | 
						|
    echowait "i appear to have fallen through the surface..." 
 | 
						|
    echowait "...into some kind of tunnel?"
 | 
						|
    echo ""
 | 
						|
}
 | 
						|
 | 
						|
[ $playintro -eq 1 ] && intro
 | 
						|
 | 
						|
maxbattery=10
 | 
						|
 | 
						|
depletebattery () {
 | 
						|
    battery=$((battery-1))
 | 
						|
}
 | 
						|
 | 
						|
# position id
 | 
						|
# start roughly in the middle
 | 
						|
# vertical movement +/- battery
 | 
						|
# horizontal movement +/- 1
 | 
						|
# this setup allows for different "cells" of different values which can be hashed for fun and profit
 | 
						|
# without actually needing to do any 2d math or *shudder* collision detection
 | 
						|
# making the number of columns equal to double the battery means that we can never reach the edge of the map 
 | 
						|
posid=200 # (2*maxbattery)^2/2
 | 
						|
 | 
						|
# $1 direction
 | 
						|
#   north, east, south or west
 | 
						|
move () {
 | 
						|
    echo "you move $1"
 | 
						|
    depletebattery
 | 
						|
 | 
						|
    case $1 in
 | 
						|
        "north")
 | 
						|
            posid=$((posid-maxbattery*2))
 | 
						|
            ;;
 | 
						|
        "east")
 | 
						|
            posid=$((posid+1))
 | 
						|
            ;;
 | 
						|
        "south")
 | 
						|
            posid=$((posid+maxbattery*2))
 | 
						|
            ;;
 | 
						|
        "west")
 | 
						|
            posid=$((posid-1))
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
 | 
						|
    checkhazard
 | 
						|
}
 | 
						|
 | 
						|
# TODO: generate a map
 | 
						|
# TODO: put hazards on the map
 | 
						|
# 80 random cells out of ~400 (calculated from maxbattery^2)
 | 
						|
hazards=($(shuf -i 0-400 -n 120))
 | 
						|
#echo "${hazards[@]}"
 | 
						|
# split the hazard cells proportionally into sand traps and hard rocks
 | 
						|
 | 
						|
checkhazard () {
 | 
						|
    # are we in a hazard cell?
 | 
						|
    for hazard in "${hazards[@]}"; do
 | 
						|
        [ $posid -ne $hazard ] && continue
 | 
						|
 | 
						|
        echowait "you got stuck in sand!"
 | 
						|
        echowait "expended extra energy to escape"
 | 
						|
        depletebattery
 | 
						|
 | 
						|
        # hard rocks break wheels
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
# is there something to find upon examination?
 | 
						|
mushrooms=($(shuf -i 0-400 -n 200))
 | 
						|
 | 
						|
# inentory should be persistent between runs
 | 
						|
inventory=0
 | 
						|
 | 
						|
examine () {
 | 
						|
    # are we in a hazard cell?
 | 
						|
    for mushroom in "${hazards[@]}"; do
 | 
						|
        [ $posid -ne $mushroom ] && continue
 | 
						|
 | 
						|
        echowait "there's something growing here! found a mushroom, yay!!!"
 | 
						|
 | 
						|
        inventory=$((inventory+1))
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
# lightning mushrooms
 | 
						|
# round mushrooms
 | 
						|
 | 
						|
run=0
 | 
						|
while [ 1 ]
 | 
						|
do
 | 
						|
    run=$((run+1))
 | 
						|
    echo "day $run"
 | 
						|
    echo "...awake and fully charged!"
 | 
						|
 | 
						|
    if [ $run -eq 2 ]
 | 
						|
    then
 | 
						|
        echowait "...waht?"
 | 
						|
        echowait "i was down in the tunnel and my batteries died..."
 | 
						|
        echowait "how did i get back?"
 | 
						|
        echo
 | 
						|
        # we need to make this visually distinct so it's not confusing...
 | 
						|
        echowait "i can help with that!"
 | 
						|
        echo
 | 
						|
        echowait "AHHHHHHH"
 | 
						|
        echo
 | 
						|
        echowait "whoa there! its ok!"
 | 
						|
        echowait "i saw ya down there in the depths and figured"
 | 
						|
        echowait "you's prolly what made this here light-hole."
 | 
						|
        echowait "figured you came from up there so maybe you's a light-thing!"
 | 
						|
        echo
 | 
						|
        echowait "you're a... you're a..."
 | 
						|
        echo
 | 
						|
        echowait "brave n mighty rescuer, yup. that's me. name's splork, nice to meet ya!"
 | 
						|
        echo
 | 
						|
        echowait "..."
 | 
						|
    fi
 | 
						|
 | 
						|
 | 
						|
    # we have access to the shop after the first run.
 | 
						|
    if [ $run -gt 1 ]
 | 
						|
    then
 | 
						|
        echowait "well heya there my rovy pal! what can i do ya for?"
 | 
						|
 | 
						|
        gum confirm "sell 3 mushrooms for +1 battery?"
 | 
						|
        if [[ $? -eq 0 ]] # compare last exit code
 | 
						|
        then
 | 
						|
             if [ $inventory -lt 3 ]
 | 
						|
             then
 | 
						|
                 echowait "oooo, sorry, you need 3 mushrooms for that!"
 | 
						|
             else
 | 
						|
                 inventory=$((inventory-3))
 | 
						|
                 maxbattery=$((maxbattery+1))
 | 
						|
             fi
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
 | 
						|
    battery=$maxbattery
 | 
						|
 | 
						|
    while [ $battery -gt 0 ]
 | 
						|
    do
 | 
						|
        # print debug status
 | 
						|
        #echo "pos: $posid battery: $battery"
 | 
						|
 | 
						|
        # print status
 | 
						|
        echo "battery: $battery mushrooms: $inventory"
 | 
						|
 | 
						|
        case $(gum choose "move" "examine" "exit") in
 | 
						|
            "exit")
 | 
						|
                gum confirm && exit 1
 | 
						|
                ;;
 | 
						|
 | 
						|
            "examine")
 | 
						|
                echowait "you look around and see many interesting things!"
 | 
						|
                depletebattery
 | 
						|
                ;;
 | 
						|
            "move")
 | 
						|
                move $(gum choose "north" "east" "south" "west")
 | 
						|
        esac
 | 
						|
    done
 | 
						|
 | 
						|
    echowait "my battery is low and it's getting dark ;-;"
 | 
						|
 | 
						|
done
 |