Princess revisited


1. Post-jam jam game

I'm satisfied by my post-jam lispmoo2. I mean, look at the jam game.

{ @create $room :named start-locn } x
{ @describe start-locn :as
 #:|A place of beginnings; try '{ north } x'| } x
{ @create $room :named forest } x
{ @describe forest :as
|A fantasy forest.| } x
{ @describe forest :as
#:|There is a path to the west and a distressed-princess aside from trees| } x
{ @describe forest :as
#:|Try '{ talk distressed-princess }'| } x
{ @describe forest :as
#:|Or '{ @give gold-ring :to distressed-princess }'| } x
{ @create $room :named clearing } x
{ @describe clearing :as
#:|(The gold-ring is right there)| } x
{ @describe clearing :as
#:|A trail leads into the trees east| } x
{ @describe clearing :as
#:|Try { @take gold-ring } x| } x
{ @create $player :named you } x
{ @create $player :named distressed-princess } x
{ @create $thing :named gold-ring } x

{ @go start-locn } x
{ @dig north :to forest } x
{ north } x
{ @dig south :to start-locn } x
{ @dig west :to clearing } x

{ deploy distressed-princess :to forest } x
{ @put clearing :with (:contents (gold-ring)) } x

{ @verb distressed-princess :is
(com-talk
 (cond
   ((member 'gold-ring (get 'distressed-princess :inventory))
    (print "Oh, thank-you for finding my gold-ring!"))
   (:otherwise
    (print "Help! I lost my gold-ring in the clearing to the west!")))) } x

{ west } x
{ @dig east :to forest } x
{ deploy you :to start-locn } x
{ setcur you } x
{ look-around } x

There are some prickles but I'm satisfied.

2. There's no difference between making the game and playing it

I guess since the goal of the game isn't to competitively kill other players, (so far as I can tell), the things to do in the game are the things to do in the game. Explore the world as it stands; build, storytell…

I did all of the above in emacs slime, and just saved the commands I issued into a text file afterwards.

Admittedly, the game engine is hella slow, but it sort of adds to the pacing of things with all those little pauses, doesn't it?

The reason is that when an action (ie verb call) happens, the engine expects that literally anything could be true, but has faith enough to still try.

In principle, performance is very upgradable with even a little caching, but I think that introducing the category of performance optimisations will muck up the simplistic beauty I stumbled across.

3. How to play this?

I think this will work:

  1. apt install sbcl, and get quicklisp from quicklisp.org like it says
  2. Clone both https://codeberg.org/tfw/moonclimb and https://codeberg.org/tfw/lispmoo2 into ~/common-lisp/
  3. (ql:quickload :mcclim)

If 3 worked, everything should work. I guess in your slime repl, or terminal I guess,

(asdf:load-system :lispmoo2)
(in-package :lispmoo2/user)
(glist)
(gload "game0")

and you can watch the game world emerge step by step, and then you can play the somewhat fancier game. Here's a log of me playing it anyway:

CL-USER> (asdf:load-system :lispmoo2)
<snipped>
CL-USER> (in-package :lispmoo2/user)
#<PACKAGE "LISPMOO2/USER">
LISPMOO2/USER> (gload "game0")

SCREWTAPE @creates $ROOM :named START-LOCN.
SCREWTAPE @creates $ROOM :named FOREST.
SCREWTAPE @creates $ROOM :named CLEARING.
SCREWTAPE @creates $PLAYER :named YOU.
SCREWTAPE @creates $PLAYER :named DISTRESSED-PRINCESS.
SCREWTAPE @creates $THING :named GOLD-RING.
SCREWTAPE  leaves NIL
SCREWTAPE  goes to START-LOCN
You are in START-LOCN.
A place of beginnings; try '{ north } x'
Objects here are:

Players here are:
SCREWTAPE 
Exits here are: 

SCREWTAPE  digs from START-LOCN to FOREST
SCREWTAPE @verbs COM-NORTH of START-LOCN.
SCREWTAPE goes through NORTH.
SCREWTAPE  leaves START-LOCN
SCREWTAPE  goes to FOREST
You are in FOREST.
A fantasy forest.
There is a path to the west and a distressed-princess aside from trees
Try '{ talk distressed-princess }'
Or '{ @give gold-ring :to distressed-princess }'
Objects here are:

Players here are:
SCREWTAPE 
Exits here are: 

SCREWTAPE  digs from FOREST to START-LOCN
SCREWTAPE @verbs COM-SOUTH of FOREST.
SCREWTAPE  digs from FOREST to CLEARING
SCREWTAPE @verbs COM-WEST of FOREST.
SCREWTAPE @verbs COM-TALK of DISTRESSED-PRINCESS.
SCREWTAPE goes through WEST.
SCREWTAPE  leaves FOREST
SCREWTAPE  goes to CLEARING
You are in CLEARING.
(The gold-ring is right there)
A trail leads into the trees east
Try { @take gold-ring } x
Objects here are:
GOLD-RING 
Players here are:
SCREWTAPE 
Exits here are: 

SCREWTAPE  digs from CLEARING to FOREST
SCREWTAPE @verbs COM-EAST of CLEARING.
You are in START-LOCN.
A place of beginnings; try '{ north } x'
Objects here are:

Players here are:
YOU 
Exits here are: 
NORTH 
T
LISPMOO2/USER> { north } x

YOU goes through NORTH.
YOU  leaves START-LOCN
YOU  goes to FOREST
You are in FOREST.
A fantasy forest.
There is a path to the west and a distressed-princess aside from trees
Try '{ talk distressed-princess }'
Or '{ @give gold-ring :to distressed-princess }'
Objects here are:

Players here are:
DISTRESSED-PRINCESS YOU 
Exits here are: 
WEST SOUTH 
NIL
LISPMOO2/USER> { talk distressed-princess } x

"Help! I lost my gold-ring in the clearing to the west!" 
"Help! I lost my gold-ring in the clearing to the west!"
LISPMOO2/USER> { @give gold-ring :to distressed-princess } x

YOU  tries but fails to give GOLD-RING to DISTRESSED-PRINCESS.
"."
LISPMOO2/USER> { west } x

YOU goes through WEST.
YOU  leaves FOREST
YOU  goes to CLEARING
You are in CLEARING.
(The gold-ring is right there)
A trail leads into the trees east
Try { @take gold-ring } x
Objects here are:
GOLD-RING 
Players here are:
SCREWTAPE YOU 
Exits here are: 
EAST 
NIL
LISPMOO2/USER> { @take gold-ring } x

YOU takes GOLD-RING
(GOLD-RING)
LISPMOO2/USER> { east } x

YOU goes through EAST.
YOU  leaves CLEARING
YOU  goes to FOREST
You are in FOREST.
A fantasy forest.
There is a path to the west and a distressed-princess aside from trees
Try '{ talk distressed-princess }'
Or '{ @give gold-ring :to distressed-princess }'
Objects here are:

Players here are:
DISTRESSED-PRINCESS YOU 
Exits here are: 
WEST SOUTH 
NIL
LISPMOO2/USER> { @give gold-ring :to distressed-princess } x

YOU gives GOLD-RING to DISTRESSED-PRINCESS
DISTRESSED-PRINCESS
LISPMOO2/USER> { talk distressed-princess } x

"Oh, thank-you for finding my gold-ring!" 
"Oh, thank-you for finding my gold-ring!"
LISPMOO2/USER> 

anyway, the immersive game world is very natural to experience, while just inside your regular lisp environment, whatever it is.

</div>

Author: screwlisp

Created: 2024-11-16 Sat 17:38

Validate

Get lispmoo2

Leave a comment

Log in with itch.io to leave a comment.