commit 74b73ef589543b707afb73fee8f956b8a5e7d7fe
Author: parazyd <parazyd@dyne.org>
Date: Fri, 23 Feb 2018 18:16:08 +0100
Initial
Diffstat:
37 files changed, 2064 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -0,0 +1,3 @@
+all:
+ rsync -P -e "ssh" -avul --delete --stats \
+ . parazyd@jakku.parazyd.org:public_html/parazyd.org/dotg/
diff --git a/act-i/Balcony.dcgi b/act-i/Balcony.dcgi
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. config
+echo Balcony > $savegame/room
+. functions
+. maps
+
+map_balcony
+
+cat <<EOM
+## THE BALCONY (BAL)
+
+You are on the balcony. It's chilly. There are:
+$(cat $balcony/Beers) beers, and $(cat $balcony/Chocolate_Milks) chocolate milks left.
+
+There are two people talking near you.
+
+
+[1|Talk to people|$path/talk-balcony.dcgi|server|port]
+
+[1|Take two beers|$path/takebeer.dcgi|server|port]
+[1|Take chocolate milk|$path/takemilk.dcgi|server|port]
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+EOM
+
+navigation
diff --git a/act-i/Bedroom1.dcgi b/act-i/Bedroom1.dcgi
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+. config
+echo Bedroom1 > $savegame/room
+. functions
+. maps
+
+map_bedroom1
+
+cat <<EOM
+## BEDROOM 1 (R1)
+
+You are in a small bedroom.
+
+You see a bed, closet, and a chair.
+
+EOM
+
+[ -f "$bedroom1/.notyet" ] || {
+ list_items_to take "$bedroom1" "foo"
+}
+
+cat <<EOM
+
+[1|Look into the closet|$path/r1-closet.dcgi|server|port]
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+EOM
+
+navigation
diff --git a/act-i/Bedroom2.dcgi b/act-i/Bedroom2.dcgi
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+. config
+echo Bedroom2 > $savegame/room
+. functions
+. maps
+
+gotkey="yes"
+[ -f "$bedroom2/.notyet" ] && gotkey="no"
+
+case "$gotkey" in
+ yes) map_bedroom2_unlocked ;;
+ *) map_bedroom2_locked ;;
+esac
+
+cat <<EOM
+## BEDROOM 2 (R1)
+
+EOM
+
+case "$gotkey" in
+ yes)
+ cat <<EOM
+You are in a small bedroom.
+
+You see a bed, closet, and a chair.
+
+EOM
+ list_items_to take "$bedroom2"
+ ;;
+ *)
+ cat <<EOM
+You can not open the bedroom door. It seems it's locked.
+EOM
+ ;;
+esac
+
+cat <<EOM
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+EOM
+
+navigation
diff --git a/act-i/Bedroom2.sh b/act-i/Bedroom2.sh
@@ -0,0 +1,21 @@
+specific_bedroom2() {
+ item="$1"
+
+ case "$item" in
+ Keychain_with_a_key)
+ cat <<EOM
+
+You unlock the bedroom door. The key snaps and breaks, blocking the
+keyhole.
+EOM
+ rm "$inventory/$item"
+ rm "$bedroom2/.notyet"
+ ;;
+ *)
+ cat <<EOM
+
+$item is of no use here.
+EOM
+ ;;
+ esac
+}
diff --git a/act-i/Hipster_Area.dcgi b/act-i/Hipster_Area.dcgi
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+. config
+echo Hipster_Area> $savegame/room
+. functions
+. maps
+
+map_hipsterarea
+
+cat <<EOM
+## HIPSTER AREA (HIP)
+
+You are in the hipster area. In front of you there is a coffee
+ttable.
+
+You are sitting on a soft carpet. Left of you on the couch
+is your friend that you have brought here with you. He's sitting
+in the middle. On his left there is a hipster using a Macbook
+and deep-frying his testicles. Right of him there is an obese
+Spaniard.
+
+EOM
+
+dropitem Beers && echo "You give a beer to your friend."
+
+if [ -f "$inventory/.nerdsmoved" ]; then
+ cat <<EOM
+
+Behind you (NX) there is an unattended NeXT UNIX machine.
+EOM
+else
+ cat <<EOM
+
+Behind you (NX) there are a couple of nerds trying to type in
+commands into a NeXT machine.
+EOM
+fi
+
+cat <<EOM
+
+The people right of you and across you do not seem interesting.
+
+Behind the couch to your right there's a DJ and some people
+playing bad beats on the sound system.
+
+
+[1|Talk to your friend|$path/talk-20h.dcgi|server|port]
+[1|Talk to the obese Spaniard|$path/talk-gentoo.dcgi|server|port]
+[1|Talk to the burning hipster|$path/talk-hipster.dcgi|server|port]
+[1|Talk to the NeXT nerds|$path/talk-nerds.dcgi|server|port]
+
+[1|Inspect the coffee table|$path/coffeetable.dcgi|server|port]
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+EOM
+
+navigation
diff --git a/act-i/Hipster_Area.sh b/act-i/Hipster_Area.sh
@@ -0,0 +1,34 @@
+specific_talk_hipsterarea() {
+ item="$1"
+
+ case "$item" in
+ Old_Thinkpad)
+ if [ -f "$inventory/Wifi_password" ]; then
+ cat <<EOM
+
+You got the Wifi password. You type it in and you now enjoy the Gopherspace.
+
+EOM
+ else
+ cat <<EOM
+
+You scan the Wifi radio, but don't manage to find an open network.
+EOM
+ fi
+ return
+ ;;
+ Plate_of_Bolognese_Sauce)
+ cat <<EOM
+
+You disgustingly look at the Bolognese sauce, but decide to keep it.
+EOM
+ return
+ ;;
+ *)
+ cat <<EOM
+$item is of no use here.
+EOM
+ return
+ ;;
+ esac
+}
diff --git a/act-i/Work_Desk.dcgi b/act-i/Work_Desk.dcgi
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+. config
+echo Work_Desk > $savegame/room
+. functions
+. maps
+
+map_workdesk
+
+cat <<EOM
+## WORK DESK (COMP)
+
+You are at the work desk. There are two girls and a guy.
+
+Behind them there is a bookshelf. On the work desk you see:
+
+EOM
+
+list_items_to take $workdesk
+
+cat <<EOM
+[1|Talk to girls |$path/talk-girls.dcgi|server|port]
+
+[1|Check bookshelf|$path/bookshelf.dcgi|server|port]
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+EOM
+
+navigation
diff --git a/act-i/bookshelf.dcgi b/act-i/bookshelf.dcgi
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. config
+. functions
+
+cat <<EOM
+You look at the bookshelf, and you recognize some books:
+
+EOM
+
+list_items_to take $books
+
+cat <<EOM
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
diff --git a/act-i/coffeetable.dcgi b/act-i/coffeetable.dcgi
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. config
+. functions
+
+cat <<EOM
+You look at the coffee table, and you see:
+
+EOM
+
+list_items_to take "$hipsters/coffeetable"
+
+cat <<EOM
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
diff --git a/act-i/config b/act-i/config
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+export path="/dotg/act-i"
+
+export savegame="/home/parazyd/dotg/act-i/$REMOTE_ADDR"
+export hipsters="$savegame/hipsters"
+export bedroom1="$savegame/bedroom1"
+export bedroom2="$savegame/bedroom2"
+export kitchen="$savegame/kitchen"
+export toilet1="$savegame/toilet1"
+export toilet2="$savegame/toilet2"
+export books="$savegame/books"
+export balcony="$savegame/balcony"
+export workdesk="$savegame/workdesk"
+export nextbox="$savegame/nextbox"
+export inventory="$savegame/inventory"
+
+[ -d "$savegame" ] && return
+
+mkdir -p \
+ "$hipsters" \
+ "$hipsters/coffeetable" \
+ "$hipsters/20h" \
+ "$hipsters/obese" \
+ "$hipsters/dj" \
+ "$bedroom1" \
+ "$bedroom2" \
+ "$kitchen" \
+ "$kitchen/table" \
+ "$kitchen/sink" \
+ "$kitchen/cupboard" \
+ "$kitchen/fridge" \
+ "$toilet1/toilet" \
+ "$toilet1/shower" \
+ "$toilet2/toilet" \
+ "$toilet2/shower" \
+ "$books" \
+ "$balcony" \
+ "$workdesk" \
+ "$nextbox" \
+ "$inventory"
+
+printf 1 > "$inventory/Old_Thinkpad"
+printf 1 > "$inventory/Plastic_bottle_of_rakia"
+printf 20 > "$inventory/Cigarettes"
+printf 3 > "$inventory/Red_Lighter"
+printf 1 > "$inventory/White_Lighter"
+printf 1 > "$inventory/Smartphone"
+printf 0 > "$inventory/.notyet"
+
+printf 0 > "$hipsters/obese/.drunklevel"
+printf 1 > "$hipsters/obese/Plate_of_Bolognese_Sauce"
+printf 1 > "$hipsters/20h/Plate_of_Bolognese_Sauce"
+printf 1 > "$hipsters/coffeetable/Dirty_Ashtray"
+printf 1 > "$hipsters/coffeetable/Empty_Beer_Bottles"
+printf 1 > "$hipsters/coffeetable/Empty_Glasses"
+
+printf 100 > "$balcony/Beers"
+printf 100 > "$balcony/Chocolate_Milks"
+
+printf 1 > "$bedroom1/.notyet"
+
+printf 1 > "$bedroom2/Unlocked_Macbook"
+printf 1 > "$bedroom2/Google_Ad_coupons"
+printf 1 > "$bedroom2/.notyet"
+
+printf 1 > "$toilet1/toilet/Vomit"
+printf 1 > "$toilet1/shower/Lab_Rat"
+printf 1 > "$toilet1/shower/.notyet"
+
+printf 1 > "$toilet2/toilet/Water"
+printf 1 > "$toilet2/shower/Plastic_bag"
+
+printf 1 > "$nextbox/Terminal"
+printf 1 > "$nextbox/Keyboard"
+printf 1 > "$nextbox/Mouse"
+
+printf 1 > "$workdesk/Locked_computer"
+printf 1 > "$workdesk/Keychain_with_a_key"
+
+printf 1 > "$kitchen/fridge/Wifi_password"
+printf 1 > "$kitchen/fridge/Old_yoghurt"
+printf 8 > "$kitchen/fridge/Beers"
+printf 8 > "$kitchen/fridge/Chocolate_Milks"
+printf 1 > "$kitchen/fridge/Plastic_bag"
+
+printf 1 > "$books/Also_sprach_Zarathustra"
+printf 1 > "$books/The_Birth_of_Tragedy"
+printf 1 > "$books/Siddhartha"
+printf 1 > "$books/Steppenwolf"
+printf 1 > "$books/Baby_and_child_care"
+printf 1 > "$books/The_C_Programming_Language"
+printf 1 > "$books/Developing_NodeJS"
+printf 1 > "$books/To_Kill_a_Mockingbird"
+printf 1 > "$books/Sex_drugs_and_cocoa_puffs"
+printf 1 > "$books/Fight_Club"
+printf 1 > "$books/Fear_and_loathing_in_Las_Vegas"
+printf 1 > "$books/The_Dharma_Bums"
+
+printf 1 > "$kitchen/table/Empty_beer_bottles"
+printf 1 > "$kitchen/table/Rolling_tobacco"
+printf 1 > "$kitchen/table/Empty_Glasses"
+printf 1 > "$kitchen/cupboard/Plates"
+printf 1 > "$kitchen/cupboard/Empty_Glasses"
+printf 1 > "$kitchen/sink/Dirt"
diff --git a/act-i/functions b/act-i/functions
@@ -0,0 +1,213 @@
+#!/bin/sh
+
+navigation() {
+ locations="
+ Balcony
+ Bedroom1
+ Bedroom2
+ Toilet1
+ Toilet2
+ Kitchen
+ Hipster_Area
+ Work_Desk
+ "
+ current="$(cat $savegame/room)"
+
+ for i in $locations; do
+ if ! [ "$current" = "$i" ]; then
+ echo "[1|Go to $i|$path/$i.dcgi|server|port]"
+ fi
+ done
+}
+
+takebeer() {
+ current="$(cat $savegame/room)"
+
+ drink="$1"
+
+ case "$current" in
+ Balcony)
+ beersat="$balcony/$drink"
+ ;;
+ Kitchen)
+ beersat="$kitchen/fridge/$drink"
+ ;;
+ esac
+
+ if [ -f "$inventory/$drink" ]; then
+ inbag="$(cat $inventory/$drink)"
+ else
+ inbag=0
+ fi
+
+ incrate="$(cat $beersat)"
+
+ if [ "$incrate" -lt 2 ]; then
+ cat <<EOM
+
+There are no $drink left for you here!
+
+EOM
+ else
+ newcnt="$(( $incrate - 2 ))"
+ newbag="$(( $inbag +2 ))"
+ printf "$newcnt" > "$beersat"
+ printf "$newbag" > "$inventory/$drink"
+ cat << EOM
+
+You took two $drink from the $current.
+
+EOM
+ fi
+
+ echo "[1|Exit|$path/$current.dcgi|server|port]"
+}
+
+dropitem() {
+ item="$1"
+ [ -f "$inventory/$item" ] || return 1
+ oldcount="$(cat $inventory/$item)"
+ newcount="$(( $oldcount - 1))"
+ printf "$newcount" > "$inventory/$item"
+ if [ "$newcount" -lt 1 ]; then
+ rm -f "$inventory/$item"
+ fi
+}
+
+list_items_to() {
+ what="$1"
+ where="$2"
+ cd "$where"
+ for i in $(ls -1); do
+ echo "[1|$i|$path/$what.dcgi?$where/$i|server|port]"
+ done
+ cd - >/dev/null
+
+ cat <<EOM
+
+(note1: select any item to $what it)
+
+EOM
+}
+
+take_item() {
+ fullpath="$1"
+ itemname="$(basename $fullpath)"
+
+ if echo "$itemname" | grep -q '^\.' ; then
+ itemname="$(echo $itemname | cut -c 2-)"
+ fi
+
+ mv "$fullpath" "$inventory/$itemname"
+}
+
+find_usecase() {
+ item="$1"
+ room="$2"
+
+ line="$(grep "^$item" usecases.csv)"
+ [ -z "$line" ] && {
+ echo "No use for $item here."
+ return
+ }
+
+ uses="$(echo $line | tr ',' '\n' | tail -n+2)"
+ if [ "$uses" = "anywhere" ]; then
+ echo "use-generic"
+ return
+ fi
+
+ for i in $uses; do
+ if [ "$i" = "anywhere" ]; then
+ echo "use-generic"
+ return
+ elif [ "$i" = "$room" ]; then
+ echo "use-specific,$i"
+ return
+ fi
+ done
+
+ echo "No use for $item here."
+}
+
+use_generic() {
+ case "$1" in
+ Cigarettes)
+ oldcount="$(cat $inventory/Cigarettes)"
+ newcount="$(( $oldcount -1 ))"
+ printf "$newcount" > "$inventory/Cigarettes"
+ if [ "$newcount" -lt 1 ]; then
+ rm -f "$inventory/Cigarettes"
+ fi
+ echo "You smoke a cigarette."
+ return
+ ;;
+ Beers)
+ oldcount="$(cat $inventory/Beers)"
+ newcount="$(( $oldcount -1 ))"
+ printf "$newcount" > "$inventory/Beers"
+ if [ "$newcount" -lt 1 ]; then
+ rm -f "$inventory/Beers"
+ fi
+ echo "You drink a beer."
+ return
+ ;;
+ Plastic_bottle_of_rakia)
+ cat <<EOM
+You take a sip of rakia.
+
+You feel drunk.
+EOM
+ ;;
+ Keychain_with_a_key)
+ cat <<EOM
+You try to unlock things, but there's no place to use the key.
+
+You put it back in your pocket.
+EOM
+ esac
+}
+
+use_specific() {
+ call="$1"
+ item="$2"
+
+ case "$call" in
+ talk-girls)
+ . talk-girls.sh
+ specific_talk_girls "$item"
+ ;;
+ talk-gentoo)
+ . talk-gentoo.sh
+ specific_talk_gentoo "$item"
+ ;;
+ talk-20h)
+ . talk-20h.sh
+ specific_talk_20h "$item"
+ ;;
+ talk-hipster)
+ . talk-hipster.sh
+ specific_talk_hipster "$item"
+ ;;
+ talk-nerds)
+ . talk-nerds.sh
+ specific_talk_nerds "$item"
+ ;;
+ #talk-balcony)
+ # . talk-balcony.sh
+ # specific_talk_balcony "$item"
+ # ;;
+ Hipster_Area)
+ . Hipster_Area.sh
+ specific_talk_hipsterarea "$item"
+ ;;
+ Bedroom2)
+ . Bedroom2.sh
+ specific_bedroom2 "$item"
+ ;;
+ *)
+ echo "Not implemented"
+ ;;
+ esac
+}
+
diff --git a/act-i/host.dcgi b/act-i/host.dcgi
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+. config
+. maps
+
+map_host
+
+cat <<EOM
+"Hello! Welcome!" - The host says.
+
+You greet him back.
+
+"Feel like home. There is beer outside on the balcony, some
+might be in the fridge." - He says.
+
+"The toilets are back there and to the right" - The host turns
+around and points across the room.
+
+"I'll leave the two of you to be, go around and talk to people,
+enjoy yourself" - He says, as he disappears into the crowd made
+of a strange combination of colorfully and black dressed people.
+
+You oversee the room and see some free spots on the couch in
+front of you. You look at your friend and tell him to go grab
+tthe seats, and you'll be there with the beers.
+
+"Okay!" - He says, and leaves for the couch (HIP)
+
+You look around again, and
+[1|leave towards the balcony.|$path/Balcony.dcgi|server|port]
+EOM
diff --git a/act-i/index.dcgi b/act-i/index.dcgi
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+. config
+
+cat <<EOM
+
+ ▛▀▖ ▞▀▖▗▀▖ ▀▛▘▌ ▞▀▖ ▛▀▖ ▌
+ ▌ ▌▝▀▖▌ ▌ ▌ ▌▐ ▌ ▛▀▖▞▀▖ ▌▄▖▙▀▖▙▄▘▝▀▖▙▀▖▝▀▖▀▜▘▌ ▌▞▀▌
+ ▌ ▌▞▀▌▚▄▌ ▌ ▌▜▀ ▌ ▌ ▌▛▀ ▌ ▌▌ ▌ ▞▀▌▌ ▞▀▌▗▘ ▚▄▌▌ ▌
+ ▀▀ ▝▀▘▗▄▘ ▝▀ ▐ ▘ ▘ ▘▝▀▘ ▝▀ ▘ ▘ ▝▀▘▘ ▝▀▘▀▀▘▗▄▘▝▀▘
+
+A Bitreich FOSDEM adventure... 02 Feb 2018 A.D.
+
+
+ ⣎⣱ ⢀⣀ ⣰⡀ ⡇
+ ⠇⠸ ⠣⠤ ⠘⠤ ⠇
+ -- Hipsters
+EOM
+
+if [ -f "$savegame/room" ]; then
+ cat <<EOM
+
+[1|Continue adventure!|$path/$(cat ${savegame}/room).dcgi|server|port]
+
+EOM
+else
+ cat <<EOM
+
+[1|Start adventure!|$path/start.dcgi|server|port]
+
+EOM
+fi
+
+echo "[1|Go back :(|/dotg/index.gph|server|port]"
diff --git a/act-i/inventory.dcgi b/act-i/inventory.dcgi
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. config
+. functions
+
+cat <<EOM
+You check your hands, backpack and pockets and find:
+
+EOM
+
+list_items_to use $inventory
+
+ cat <<EOM
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
diff --git a/act-i/maps b/act-i/maps
@@ -0,0 +1,483 @@
+#!/bin/sh
+
+cat <<EOM
+
+[1|--reset game--|$path/reset.dcgi|server|port]
+
+EOM
+
+map_start() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | <o> |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o______| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o |
+| |
+|bk| o (H) |
+|bk| o |
+|bk| o TTT o +-------+....+--------+
+|bk| TTT | |
+|bk| (COMP) o | (BAL) o bbb |
+|bk| YOU | o mmm |
+|bk| ☃ ☃ <---- | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_host() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | <o> |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o______| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o |
+| |
+|bk| o |
+|bk| o |
+|bk| o TTT (H) o +-------+....+--------+
+|bk| TTT ☃ ☃ <---- | |
+|bk| (COMP) o YOU | (BAL) o bbb |
+|bk| | o mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_balcony() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| (H)TTTT |
+| o o |
+| |
+|bk| |
+|bk| o o |
+|bk| o TTT o +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | ----> ☃ mmm |
+|bk| | YOU |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talkbalcony() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| (H)TTTT |
+| o o |
+| |
+|bk| |
+|bk| o o |
+|bk| o TTT o +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | ----> ☃ mmm |
+|bk| | YOU |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_bedroom1() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | YOU--> ☃ | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| | TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| (H)TTTT |
+| o o o |
+| |
+|bk| |
+|bk| o o |
+|bk| TTT o +-------+....+--------+
+|bk| TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_bedroom2_unlocked() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | YOU--> ☃ |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| o |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| o | | TTTTo o |x|
+| |o o | |bk| o o | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o (H) |
+| o o |
+|bk| |
+|bk| o o |
+|bk| TTT o +-------+....+--------+
+|bk|o TTT | |
+|bk| o (COMP) | (BAL)o o bbb |
+|bk| | mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_bedroom2_locked() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | o | |
+| | (R1) o | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| YOU--> ☃ |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | o |x|
+| |bk| | | |x|
+| o oo |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| | o o | |bk| | o | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o o |
+| |
+|bk| |
+|bk| o o o |
+|bk| o TTT +-------+....+--------+
+|bk| oTTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | (H) mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_workdesk() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| o |bk| o | o | |x|
+| (H) o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| | o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o |
+| |
+|bk| YOU |
+|bk| o ☃ <---- o |
+|bk| o TTT o +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talkgirls() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| o |bk| o | | |x|
+| o (H) |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT o |x|
+| +- +----+ o |bk| | | TTTTo o |x|
+| | o | |bk| | | TTTT |S|
+| |o TTT +----------+--------+ o TTTT o |x|
+| |o TTT | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o o o |
+| |
+|bk| YOU |
+|bk| o ☃ <---- |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_hipsterarea() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | o TTTT (H) |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | | TTTT |S|
+| |o TTT YOU +----------+--------+ o TTTT o |x|
+| |o TTT ☃ <---- | | o oTTTT o |F|
+| +- (HIP) o +| TTTT |x|
+| |_o_☃_<o>| o NX| TTTT (KIT) |-|
+| o +| TTTT |
+| o o o |
+| oo |
+|bk| |
+|bk| |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o bbb |
+|bk| | mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talk20h() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| |
+| |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | oo TTTT (H) |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | oo | TTTT o |S|
+| |o TTT YOU +----------+--------+ TTTT |x|
+| |o TTT ☃ <---- | | oo TTTT o |F|
+| +- (HIP) o +| o TTTT |x|
+| |_o_☃_<o>| o NX| o TTTT (KIT) |-|
+| o +| TTTT |
+| |
+| o o |
+|bk| o |
+|bk| |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o o bbb |
+|bk| | o mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talkgentoo() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| o |
+| o |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| |bk| | | |x|
+| o o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | TTTT (H) |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | oo | TTTT o |S|
+| |o TTT YOU +----------+--------+ TTTT |x|
+| |o TTT ☃ <---- | | oo TTTT o |F|
+| +- (HIP) o +| o TTTT |x|
+| |_o_☃_<o>| o NX| o TTTT (KIT) |-|
+| o +| TTTT |
+| |
+| o o |
+|bk| o |
+|bk| |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o o bbb |
+|bk| | o mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talkhipster() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| o |
+| o |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| o |bk| | | |x|
+| o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | TTTT (H) |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | oo | TTTT o |S|
+| |o TTT YOU +----------+--------+ TTTT |x|
+| |o TTT ☃ <---- | | oo TTTT o |F|
+| +- (HIP) o +| o TTTT |x|
+| |_o_☃_<o>| o NX| o TTTT (KIT) |-|
+| o o +| TTTT |
+| o o |
+| |
+|bk| |
+|bk| |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o o bbb |
+|bk| | o mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
+
+map_talknerds() {
+ cat <<EOM
++-------------------------------------------------------------+
+| | | |
+| | (R1) | (R2) |
+|-----------------+....+------+-----------------+....+--------+
+| o |
+| o |
+| +---+....+---+....+------+....+--------+
+| |bk| | | |x|
+| o |bk| | | |x|
+| o |bk| | | |x|
+| | DJ | |bk| (T1) | (T2) | TTTT (H) |x|
+| +- +----+ |bk| | | TTTTo o |x|
+| |o o o | |bk| | oo | TTTT o |S|
+| |o TTT YOU +----------+--------+ TTTT |x|
+| |o TTT ☃ <---- | | oo TTTT o |F|
+| +- (HIP) o +| o TTTT |x|
+| |_o_☃_<o>| o NX| o TTTT (KIT) |-|
+| o o +| TTTT |
+| |
+| |
+|bk| o |
+|bk| o |
+|bk| o TTT +-------+....+--------+
+|bk| o TTT | |
+|bk| (COMP) | (BAL)o o o bbb |
+|bk| | o mmm |
+|bk| | |
++---------------+....+----------------------------------------+
+
+EOM
+}
diff --git a/act-i/r1-closet.dcgi b/act-i/r1-closet.dcgi
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. config
+
+if [ -f "$inventory/.letusfuck" ]; then
+ cat <<EOM
+
+As you open the closet, the two girls from the work desk enter the
+bedroom...
+
+"Hey you" - They smile.
+
+"Thank you for the beers! We're all out bored by that work. Do you
+want to have some fun?"
+
+You're left to no choice but to lock the bedroom door and say:
+[1|Let us fuck.|$path/sex.dcgi|server|port]
+
+EOM
+else
+ cat <<EOM
+
+You find nothing interesting in the closet.
+
+EOM
+fi
+
+echo "[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]"
diff --git a/act-i/reset.dcgi b/act-i/reset.dcgi
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+. config
+
+rm -rf "$savegame"
+
+cat <<EOM
+
+Game state reset.
+
+[1|Go back|/dotg/act-i|server|port]
+EOM
diff --git a/act-i/sex.dcgi b/act-i/sex.dcgi
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+. config
+
+rm -f "$bedroom1/.notyet"
+rm -f "$inventory/.letusfuck"
+printf 1 > "$bedroom1/Black_dildo"
+printf 1 > "$bedroom1/Used_condom"
+
+cat <<EOM
+
+You have hardcore sex with the two girls...
+
+lcdxxxxkodxoxodxckkxxxxkdxkd:oxldkOxkxoddOOOkdkxodxd:lx:ckkkkxxodxxO:oxxcdkxxddxOOd'lxcdkdkl;ldcc:xd:llx::occo;:o
+lcoxxkxkdoxdxdoxckkkdxxkdxkd:okldkOkkkodxOOOkdkxodxd:lx:ckkkkxxodkxO:dxxldkxxxdxOOd'oxodkxkc;ld::cxoccox:co:ll;:o
+lcoxkkdkxoxdxxlxckkkxxxOxxkd:dkldxkOkkdddkOOxlkkoddx:lx;lkkkxxkdokxO:xxxldkxxxdxOOl'dkookkkc;lx,,lklocdd:lo:ol;co
+cclxkkxkkodxxxlxcdxOxxxOxxkd:dkodxkOkkdldkkxxlxkoodx:cx;lxxxxxkxokxk;kxdodkxxxdxOOc,xkddOOxl;ox;.dkcocxd:olcdl;lo
+clodxkxkkddxxxoxllxOxxxOdkkd:dkodxxOkkxdodkxd:xkolox:cd:cddddxxxoxxx;kxxoxkxxxxkOO:;kkddkOdc:ox;'dxcdlko:occdl:lo
+;lcdxkxxkkdxxxokd:dOkxdc;;ld;dkloxkkkxxxooddd;dxoccd::dclddddddkoxdx:kdxoxkxxxxkOk,ckxddkOdl:ok:,xdlookocdcldl:lo
+;ccoxkxdkkdkxxdxx,xOx: .:c..''....',,,';.cdo;:o:;dclooooooxdxxd:xdxdxxxxxxkOx'lkxodkkdlcokc;xoolxklcocodl:ol
+,:ccdkxdxkdkxkdxx,dk. ,c:,.. .......:clccccllxdddlcxdxdxxxkdxkOd.dkxodxkdccox::kldokkllllddlcol
+,;l:okkxdxxxdkddd,;: 'doc:,'.. ....'..','.ddod:lddddxxxxdxkkl'xxdlodkdcclx:cxcddxxcocldoocol
+,'l:lxkxooxddkdl;.. '::':'.'.. ... .... .,';.:lllcddxddxkk:,kdxoodxocl:d;lo:xkxxlocldolcoc
+,.c::dxxolxodl;... cxxol;',;' ....:........... ...''lodccokx;,kdkxlodd::;l'ol:xxdxlocooollo:
+;.;c;ldl;'. .cxdc;,,;. ...dc .... ........'',:d;,cxx';kdxxllodl:,;,dd:xdodllcoollll;
+:..c,'... :oo:,',, ....... .'lc:. .. .... ...'','''cxx.;xoddccodo:,,;xdcxxollccoocloc;
+'.... .'lolc;;c..',;:;;,. ... .... 'llloc...... . ...,...;dd.;dodo;:ldo;'':ddlddd:c:lolcllc,
+.. . 'clc:;,,;,,;:ccllllcc;. .;cccccc.,;c. . .....,.;oooo',ldl'..:xxcddo;c:llccl:;,
+. ;kkxdolc:;,,;::codddddl;'... ':cccc; .. ........:oco''coc...cxd:odc,c:cc:lc;;'
+.... okddxddooolcccccccodddlc;''..'',:odd;.. .''',,;:;,'.. .........,c'.:o; .cdo:ol;,cc::cl:,,'
+.'.. cooddlloddddoolllllllllllcc;;,'..;lo;., c .''':loolllc;,,;::,. ...;c' .ldl;lc,;c:,;::,,'.
+.... . ':lolc',looooolooddooolccc::;;,..';:' ...k;....:loooolccclcldxdl,.. .';. .coc,::';cc:;:''''.
+ .. .,:::;..codddolooooooooooollc;'..,,,.,Oko0X. ...;clllllcccccoddolllc;,.. .','.,;':c:::'.....
+ .,;;' .;clloooollooolllllc:,';:;,..dxco0' . ...'',;;;,,;:::::cccclll:'. ...::;;,......
+ ..'. ..,:llc:::;:;;::::::::::c;,''.... '. .... ..',;;;;::clooc;... ..',........
+ ..',;:cc:,.':cc:,'. .......,:cccc::::;;;;,........',:cl:. ..',,,,,;:clol:,.. .........
+ ..... .'. ..,lllllccl::cclllccccccc:'. ....',;;:clc;,,'.....
+ .,:c::::;;;coxdocccc;. ...,:;;cccllc:
+ .. 'cc ..,;;;,,,;::;,'.. .. . ........ .......',;,
+ coc.'';;:;,'. ...... . .... ....
+ ..,,... .l;'. ..
+ 'c:.
+ .:ll .,;,,,:;;;
+ llok. .'''.
+ ';;c:;,,,;;'..
+
+oh, you touch my tralala,
+mmm... my ding ding dong.
+la la la la la la la,
+la la la la la la,
+la la la la la la la.
+Oh, you touch my tralala
+la la la la la la la,
+la la la la la la.
+mmm... my ding ding dong.
+la la la la la la la,
+la la la la la la.
+
+Deep in the night,
+i'm looking for some fun,
+deep in the night,
+i'm looking for some love.
+de-de-de-deep in the night,
+i'm looking for some fun,
+deep in the night,
+i'm looking for some (ping)
+
+You tease me,
+oh please me,
+i want you to be my lovetoy,
+come near me, don't fear me,
+i just can't get enough of you boy.
+
+Oh, you touch my tralala.
+la la la..
+mmm, my ding ding dong,
+oh you touch my tralala,
+mmm, my ding ding dong.
+la la la...
+
+Deep in the night,
+i'm looking for some fun,
+deep in the night,
+i'm looking for some love.
+
+you tease me,
+oh please me,
+i want you to be my lovetoy.
+come near me, don't fear me,
+i just can't get enough of you boy.
+
+Oh, you touch my tralala.
+la la la...
+mmm, my ding ding dong.
+la la la..
+oh, you touch my tralala.
+la la la..
+mmm, my ding ding dong.
+
+(ding ding dong)
+mmm, my ding ding dong 2x
+
+oh, you touch my tralala.
+lalala...
+mmm, my ding ding dong.
+oh ,you touch my tralala
+(ding ding dong)
+oh, you touch my tralala.
+mmm, my ding dong dong.
+
+[1|Reach orgasm|$path/Bedroom1.dcgi|server|port]
+EOM
diff --git a/act-i/start.dcgi b/act-i/start.dcgi
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. config
+. maps
+
+map_start
+
+cat <<EOM
+It's Friday night before FOSDEM. You arrive at a party in
+Brussels, Belgium with your friend. With all your plans of
+getting drunk with Belgian beer and Serbian rakia you smuggled
+into the country, seeing all the hipsters in this place makes
+you feel like just walking away. But things might not be as
+tthey seem...
+
+In front of you, the party host (H) greets you...
+
+[1|Talk to the host|$path/host.dcgi|server|port]
+EOM
diff --git a/act-i/take.dcgi b/act-i/take.dcgi
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+. config
+. functions
+
+case "$(basename $2)" in
+ Plate_of_Bolognese_Sauce)
+ rm -f "$toilet1/.notyet"
+ rm -f "$hipster/obese/.takingashit"
+ ;;
+
+ Keychain_with_a_key)
+ if [ -f "$bedroom1/.notyet" ]; then
+ cat <<EOM
+
+"Umm, that's not something you should be taking..."
+
+The girls don't let you take the keys.
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
+ return
+ else
+ cat <<EOM
+
+The girls smile at you and let you take it.
+EOM
+ fi
+ ;;
+esac
+
+take_item "$2"
+
+cat <<EOM
+
+You took the $(basename $2).
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
diff --git a/act-i/takebeer.dcgi b/act-i/takebeer.dcgi
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+. config
+. functions
+
+if [ "$(basename $0)" = "takebeer.dcgi" ]; then
+ takebeer Beers
+else
+ takebeer Chocolate_Milks
+fi
diff --git a/act-i/takemilk.dcgi b/act-i/takemilk.dcgi
@@ -0,0 +1 @@
+takebeer.dcgi+
\ No newline at end of file
diff --git a/act-i/talk-20h.dcgi b/act-i/talk-20h.dcgi
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+. config
+echo talk-20h > $savegame/room
+. maps
+
+map_talk20h
+
+if [ -f "$hipsters/20h/.meaningoflife" ]; then
+ str="He's babbling about the meaning of life to hipsters around him."
+else
+ str="He's eating a place of bolognese sauce"
+fi
+
+cat <<EOM
+## HIPSTER AREA (HIP)
+
+You nod at your friend.
+
+$str
+
+In the meantime he's talking sense into the Macbook user left
+of him.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Hipster_Area.dcgi|server|port]
+EOM
diff --git a/act-i/talk-20h.sh b/act-i/talk-20h.sh
@@ -0,0 +1,128 @@
+specific_talk_20h() {
+ item="$1"
+
+ case "$item" in
+ Beers)
+ cat <<EOM
+
+You give a beer to your friend. He thanks you and starts drinking it.
+EOM
+ givebeer "$item"
+ ;;
+ Chocolate_Milks)
+ cat <<EOM
+
+Your friend takes the chocolate milk and pours it all over the Macbook
+guy's testicles to cool them down.
+EOM
+ givebeer "$item"
+ ;;
+ Locked_computer)
+ cat <<EOM
+
+Your friend takes the locked computer and installs Gentoo on it while
+uploading the old content to the cloud.
+EOM
+ mv "$inventory/$item" "$hipsters/20h/$item"
+ ;;
+ Smartphone)
+ cat <<EOM
+
+Your friend takes the smartphone and calls father christmas to bring
+some elves for fun.
+EOM
+ printf 1 > "$inventory/.elvesarehere"
+ ;;
+ Used_condom)
+ cat <<EOM
+
+Your friend takes the used condom, blows it up using heat from the
+Macbook guy's produced heat and gives you back a balloon.
+EOM
+ mv "$inventory/$item" "$inventory/Condom_balloon"
+ ;;
+ White_Lighter)
+ cat <<EOM
+
+Your friend asks for the red lighter.
+EOM
+ ;;
+ Red_Lighter)
+ cat <<EOM
+
+Your friend uses the red lighter to start the fire of the revolution.
+EOM
+ printf 1 > "$inventory/.revolutionstarted"
+ ;;
+ Black_dildo)
+ cat <<EOM
+
+You give the black dildo to your friend. He smiles perversly and sticks it
+in his butt.
+EOM
+ mv "$inventory/$item" "$hipsters/20h"
+ ;;
+ Also_sprach_Zarathustra)
+ cat <<EOM
+
+God dies.
+
+Your friend takes the book and starts babbling about the meaning of life.
+EOM
+ if [ -f "$hipsters/20h/Plate_of_Bolognese_Sauce" ]; then
+ mv "$hipsters/20h/Plate_of_Bolognese_Sauce" "$hipsters/coffeetable"
+ fi
+ mv "$inventory/$item" "$hipsters/20h"
+ printf 1 > "$hipsters/20h/.meaningoflife"
+ ;;
+ The_Birth_of_Tragedy)
+ cat <<EOM
+
+"Christianity is bad, mmkay" - He tries to tell a meme.
+
+Your friend takes the book from you and starts babbling about the meaning of
+life.
+EOM
+ if [ -f "$hipsters/20h/Plate_of_Bolognese_Sauce" ]; then
+ mv "$hipsters/20h/Plate_of_Bolognese_Sauce" "$hipsters/coffeetable"
+ fi
+ mv "$inventory/$item" "$hipsters/20h"
+ printf 1 > "$hipsters/20h/.meaningoflife"
+ ;;
+ Siddhartha)
+ cat <<EOM
+"Religions suck." - He says.
+
+You nod.
+EOM
+ return
+ ;;
+ The_C_Programming_Language)
+ cat <<EOM
+
+"Nice find! Keep it. It could be of good use." - Your friend says.
+
+You tuck the book back in your backpack.
+EOM
+ ;;
+ Developing_NodeJS)
+ cat <<EOM
+
+Your friend starts manically laughing.
+
+"Maybe give it to those nerds behind you!" - He grins.
+
+You tuck the book back in your backpack.
+EOM
+ ;;
+ Sex_drugs_and_cocoa_puffs)
+ cat <<EOM
+
+"Drugs? No. But the other two will do"
+
+He takes the book from you and smiles.
+EOM
+ mv "$item" "$hipsters/20h"
+ ;;
+ esac
+}
diff --git a/act-i/talk-balcony.dcgi b/act-i/talk-balcony.dcgi
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. config
+echo talk-balcony > $savegame/room
+. maps
+
+map_talkbalcony
+
+cat <<EOM
+## THE BALCONY (BAL)
+
+You try to spark a conversation with the two hipsters.
+
+"Hi!" - You say.
+
+They don't seem to bother.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Balcony.dcgi|server|port]
+EOM
diff --git a/act-i/talk-gentoo.dcgi b/act-i/talk-gentoo.dcgi
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+. config
+echo talk-gentoo > $savegame/room
+. maps
+
+map_talkgentoo
+
+cat <<EOM
+## HIPSTER AREA (HIP)
+
+You smalltalk with the spaniard. It turns out he is a Gentoo
+developer.
+
+Your friend and you acknowledge this.
+
+The spaniard is eating a plate of bolognese sauce.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Hipster_Area.dcgi|server|port]
+EOM
diff --git a/act-i/talk-gentoo.sh b/act-i/talk-gentoo.sh
@@ -0,0 +1,90 @@
+specific_talk_gentoo() {
+ item="$1"
+
+ if [ -f "$hipsters/obese/.takingashit" ]; then
+ cat <<EOM
+
+The yoghurt did not bode well for the spaniard. He's in the toilet.
+EOM
+ return
+ fi
+
+ case "$item" in
+ Old_Thinkpad)
+ cat <<EOM
+
+You whip out your old Thinkpad and show the spaniard the amazing
+Gentoo Hardened setup you have.
+
+The spaniard is butthurt that you have access to latest Grsecurity
+patches so he wants to start plotting murder against you.
+
+You realize if you just start walking away in a normal tempo he would
+be unable to catch up.
+
+You put your laptop back in your backpack.
+EOM
+ ;;
+ Plate_of_Bolognese_Sauce)
+ cat <<EOM
+
+You give a plate of Bolognese sauce to the spaniard.
+
+He thanks you and starts eating it swiftly.
+EOM
+ mv "$inventory/$item" "$hipsters/obese/"
+ ;;
+ Beers)
+ cat <<EOM
+You offer a beer to the spaniard. He refuses.
+
+Is it because it makes bellies big, you ponder...
+EOM
+ ;;
+ Chocolate_Milks)
+ cat <<EOM
+
+You give a chocolate milk bottle to the spaniard. He thanks you and
+drinks it in one sip.
+EOM
+ givebeer "$item"
+ ;;
+ Old_yoghurt)
+ cat <<EOM
+
+You give the old yoghurt to the spaniard. He starts eating it.
+
+You hear his stomach gurgling. Struggling, but he manages to get
+up and start walking towards the toilet.
+EOM
+ printf 1 > "$hipsters/obese/.takingashit"
+ cp -f "$hipsters/obese/Plate_of_Bolognese_Sauce" "$hipsters/coffeetable"
+ ;;
+ The_Birth_of_Tragedy)
+ cat <<EOM
+"Man, christianity sucks, man." - He says while gasping.
+
+You nod.
+EOM
+ ;;
+ The_C_Programming_Language)
+ cat <<EOM
+
+You show the K&R book to the spaniard. His head explodes.
+EOM
+ printf 1 > "$hipsters/obese/.dead"
+ ;;
+ Developing_NodeJS)
+ cat <<EOM
+
+"Man, nodejs sucks, man." - He says while gasping.
+EOM
+ ;;
+ *)
+ cat <<EOM
+
+$item is of no use here.
+EOM
+ ;;
+ esac
+}
diff --git a/act-i/talk-girls.dcgi b/act-i/talk-girls.dcgi
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. config
+echo talk-girls > $savegame/room
+. functions
+. maps
+
+map_talkgirls
+
+cat <<EOM
+## WORK DESK (COMP)
+
+You introduce yourself to the girls.
+
+"Hello!" - You say eagerly.
+
+"Hello to you to! Excuse us though, we're in the middle of
+some work. See you around later?" - One of them asks.
+
+"Sure thing!" - You reply.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Work_Desk.dcgi|server|port]
+EOM
diff --git a/act-i/talk-girls.sh b/act-i/talk-girls.sh
@@ -0,0 +1,68 @@
+specific_talk_girls() {
+ item="$1"
+ case "$item" in
+ Beers)
+ oldcount="$(cat $inventory/Beers)"
+ if [ "$oldcount" -lt 2 ]; then
+ echo "You don't have enough beers to give."
+ else
+ cat <<EOM
+
+You hand over two beers to the girls.
+
+"Why thank you! This sure is nice." - They smile.
+
+"Say, could you do us a favor? There is a thing in the closet in the
+small bedroom over there. Would you mind going there and bringing it
+back to us?" - One of the girls asks.
+
+"Hm, what is it?" - You ask.
+
+"Eh, just go, you'll figure it out when you see it" - The other one winks.
+
+You wonder for a short second, and say: "Ah well, why not!".
+
+You smile.
+EOM
+ printf 1 > "$inventory/.letusfuck"
+ fi
+ return
+ ;;
+ Black_dildo)
+ cat <<EOM
+
+You whip out a big black dildo in front of the girls. They laugh
+because they know what's up. Anyone else would be disgusted/shocked.
+EOM
+ return
+ ;;
+ Baby_and_child_care)
+ cat <<EOM
+
+You show the Baby and child care book to the girls, obviously trolling.
+They look confused and somewhat worried.
+EOM
+ return
+ ;;
+ To_Kill_a_Mockingbird)
+ cat <<EOM
+
+"One of my favorite books!", one of the girls says.
+
+You hand the book over to her, and say: "Enjoy it".
+
+You wink at her.
+EOM
+ mv "$inventory/$item" "$books"
+ return
+ ;;
+ *)
+ cat <<EOM
+
+$item is of no use here.
+EOM
+ return
+ ;;
+ esac
+}
+
diff --git a/act-i/talk-hipster.dcgi b/act-i/talk-hipster.dcgi
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+. config
+echo talk-hipster > $savegame/room
+. maps
+
+map_talkhipster
+
+cat <<EOM
+## HIPSTER AREA (HIP)
+
+"Hi! You realize you're going to become infertile" - You say,
+seeing that his Macbook is sitting on his testicles, burning
+tthem up.
+
+He doesn't seem to care, and instead starts showing you his
+WebGL project on the Macbook. The Macbook starts emitting even
+more heat.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Hipster_Area.dcgi|server|port]
+EOM
diff --git a/act-i/talk-hipster.sh b/act-i/talk-hipster.sh
@@ -0,0 +1,37 @@
+specific_talk_hipster() {
+ item="$1"
+
+ case "$item" in
+ Black_dildo)
+ cat <<EOM
+
+You make gay jokes at the hipster.
+
+His eyes tear up.
+EOM
+ return
+ ;;
+ To_Kill_a_Mockingbird)
+ cat <<EOM
+
+"Ha, did you know my name is Atticus?"
+
+You're shocked.
+EOM
+ return
+ ;;
+ Fight_Club)
+ cat <<EOM
+
+"Oh wow! That's one of my favorite movies. I didn't know they wrote
+a book after it... I probably won't read it, but cool!"
+
+You're shocked. You take a sip of rakia to relax.
+EOM
+ ;;
+ *)
+ cat <<EOM
+$item is of no use here.
+EOM
+ esac
+}
diff --git a/act-i/talk-nerds.dcgi b/act-i/talk-nerds.dcgi
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+. config
+echo talk-nerds > $savegame/room
+. maps
+. functions
+
+map_talknerds
+
+cat <<EOM
+## HIPSTER AREA (HIP)
+EOM
+
+if [ -f "$inventory/.nerdsmoved" ]; then
+ cat <<EOM
+
+The nerds seem to have left the machine in a usable state. You're
+surprised.
+
+You see:
+EOM
+
+list_items_to use $nextbox
+
+ cat <<EOM
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Leave the computer|$path/Hipster_Area.dcgi|server|port]
+EOM
+else
+ cat <<EOM
+
+You take a look at what the nerds are doing. They seem to be
+ttrying to find a C compiler on the NeXT machine. They are
+not successful.
+
+You ask if you can use the keyboard, they do not let you and
+diss you off instead.
+
+
+[1|Check inventory|$path/inventory.dcgi|server|port]
+
+[1|Quit the conversation|$path/Hipster_Area.dcgi|server|port]
+EOM
+fi
+
+
diff --git a/act-i/talk-nerds.sh b/act-i/talk-nerds.sh
@@ -0,0 +1,90 @@
+specific_talk_nerds() {
+ item="$1"
+
+ if [ -f "$inventory/.nerdsmoved" ]; then
+ cat <<EOM
+
+The nerds seem to have left.
+
+EOM
+
+ case "$item" in
+ The_C_Programming_Language)
+ cat <<EOM
+
+You use the power of C to flip bytes and bang bits...
+EOM
+ [ -f "$inventory/.notyet" ] || {
+ cat <<EOM
+Accidentally, you activate a
+[h|time machine|URL:ssh://time-machine@bitreich.org|server|port]
+
+
+You have finished Act I.
+
+[1|To to Act II|/dotg/act-ii|server|port]
+EOM
+ rm -f "$nextbox/Terminal" "$nextbox/Keyboard" \
+ "$nextbox/Mouse" "$nextbox/The_C_Programming_Language"
+ printf 1 > "$inventory/.timemachineactivated"
+ }
+ ;;
+ Terminal|Keyboard|Mouse)
+ cat <<EOM
+
+You try using the NeXT computer, but you're unsuccessful.
+EOM
+ ;;
+ *)
+ cat <<EOM
+$item is of no use here.
+EOM
+ ;;
+ esac
+ else
+ case "$item" in
+ Beers|Chocolate_Milks)
+ cat <<EOM
+
+The nerds steal all your $item.
+EOM
+ rm -f "$inventory/$item"
+ ;;
+ The_C_Programming_Language)
+ cat <<EOM
+
+The nerds take $item from you and try to type in examples in the
+NeXT console.
+
+They seem to be failing.
+EOM
+ mv "$inventory/$item" "$nextbox"
+ ;;
+ Developing_NodeJS)
+ cat <<EOM
+
+As you pull out the book from your backpack, one of the nerds catches
+a glance at it. He loudly points at it.
+
+The other nerds look at it and forcefully take it away from you. They
+leave the area and move towards somewhere else.
+EOM
+ rm -f "$inventory/$item"
+ printf 1 > "$inventory/.nerdsmoved"
+ ;;
+ Sex_drugs_and_cocoa_puffs)
+ cat <<EOM
+
+The virgins try to convince you they're not.
+
+(Developer note: this is actually a good book, unrelated to the context
+it is presented in-game. Read it ;)
+EOM
+ ;;
+ *)
+ cat <<EOM
+$item is of no use here.
+EOM
+ esac
+ fi # !nerdsmoved
+}
diff --git a/act-i/use.dcgi b/act-i/use.dcgi
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+. config
+. functions
+
+fullpath="$2"
+itemname="$(basename $fullpath)"
+
+currentloc="$(cat $savegame/room)"
+
+call="$(find_usecase $itemname $currentloc)"
+
+case "$call" in
+ No*)
+ cat <<EOM
+$call
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
+ return
+ ;;
+ use-generic*)
+ use_generic "$itemname"
+ cat <<EOM
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
+ return
+ ;;
+ use-specific*)
+ use_specific "$(echo $call | awk -F, '{print $2}')" "$itemname"
+ cat <<EOM
+
+[1|Exit|$path/$(cat $savegame/room).dcgi|server|port]
+EOM
+ return
+ ;;
+esac
+
diff --git a/act-i/usecases.csv b/act-i/usecases.csv
@@ -0,0 +1,33 @@
+Old_Thinkpad,Hipster_Area,talk-gentoo
+Plastic_bottle_of_rakia,anywhere
+Cigarettes,anywhere
+Smartphone,Kitchen,Bedroom1,talk-20h
+Plate_of_Bolognese_Sauce,Kitchen,Hipster_Area,Toilet1,talk-gentoo
+Empty_Beer_Bottles,Toilet1,Balcony,Kitchen
+Empty_Glasses,Kitchen,Toilet1
+Beers,talk-girls,talk-nerds,talk-20h,talk-gentoo,anywhere
+Chocolate_Milks,talk-gentoo,talk-nerds,Kitchen,talk-20h
+Black_dildo,Toilet1,Balcony,Bedroom1,Bedroom2,talk-girls,talk-20h,talk-hipster
+Red_Lighter,talk-20h
+White_Lighter,talk-20h
+Locked_computer,talk-20h
+Keychain_with_a_key,Bedroom2,anywhere
+Used_condom,Toilet1,Toilet2,talk-20h
+Plastic_bag,Balcony,Toilet1,Toilet2
+Old_yoghurt,talk-gentoo
+Rolling_tobacco,anywhere
+Empty_Glasses,Kitchen,Toilet1
+Terminal,talk-nerds
+Keyboard,talk-nerds
+Mouse,talk-nerds
+Google_Ad_coupons,talk-balcony
+
+Also_sprach_Zarathustra,talk-20h
+The_Birth_of_Tragedy,talk-20h,talk-gentoo
+Siddhartha,talk-20h
+Baby_and_child_care,talk-20h,talk-girls
+The_C_Programming_Language,talk-20h,talk-gentoo,talk-nerds
+Developing_NodeJS,talk-20h,talk-gentoo,talk-nerds
+To_Kill_a_Mockingbird,talk-hipster,talk-girls
+Sex_drugs_and_cocoa_puffs,talk-20h,talk-nerds
+Fight_Club,talk-hipster
diff --git a/index.gph b/index.gph
@@ -0,0 +1,22 @@
+
+ ▛▀▖ ▞▀▖▗▀▖ ▀▛▘▌ ▞▀▖ ▛▀▖ ▌
+ ▌ ▌▝▀▖▌ ▌ ▌ ▌▐ ▌ ▛▀▖▞▀▖ ▌▄▖▙▀▖▙▄▘▝▀▖▙▀▖▝▀▖▀▜▘▌ ▌▞▀▌
+ ▌ ▌▞▀▌▚▄▌ ▌ ▌▜▀ ▌ ▌ ▌▛▀ ▌ ▌▌ ▌ ▞▀▌▌ ▞▀▌▗▘ ▚▄▌▌ ▌
+ ▀▀ ▝▀▘▗▄▘ ▝▀ ▐ ▘ ▘ ▘▝▀▘ ▝▀ ▘ ▘ ▝▀▘▘ ▝▀▘▀▀▘▗▄▘▝▀▘
+
+A Bitreich FOSDEM adventure...
+
+
+ ⣎⣱ ⢀⣀ ⣰⡀ ⡇
+ ⠇⠸ ⠣⠤ ⠘⠤ ⠇
+ -- Hipsters
+
+[1|Enter... 02 Feb 2018 A.D.|/dotg/act-i|server|port]
+-----------------------------------------------------------------
+
+ ⣎⣱ ⢀⣀ ⣰⡀ ⡇ ⡇
+ ⠇⠸ ⠣⠤ ⠘⠤ ⠇ ⠇
+ -- "Hackers"
+
+[1|Enter... 03 Feb 2018 A.D.|/dotg/act-ii|server|port]
+-----------------------------------------------------------------