# HG changeset patch # User Steve Losh # Date 1483814774 0 # Node ID 9dbe31fef037f60229d94aec29b9122236b2d363 # Parent fa45164eab854974d6b9fb2df7f2cef8efe8b685 Add meat and help diff -r fa45164eab85 -r 9dbe31fef037 data/help.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/help.txt Sat Jan 07 18:46:14 2017 +0000 @@ -0,0 +1,8 @@ +Summer has begun in the southern hemisphere. +You must head to the North Pole to survive. + +CONTROLS +←↑↓→ - move + q - quit + g - get item + d - drop item diff -r fa45164eab85 -r 9dbe31fef037 data/meat.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/meat.lisp Sat Jan 07 18:46:14 2017 +0000 @@ -0,0 +1,11 @@ +#("lamb" + "chicken" + "beef" + "mutton" + "venison" + "pork" + "ham" + "corned-beef hash" + "duck" + "turkey" + "alligator meat") diff -r fa45164eab85 -r 9dbe31fef037 src/entities/food.lisp --- a/src/entities/food.lisp Sat Jan 07 17:48:08 2017 +0000 +++ b/src/entities/food.lisp Sat Jan 07 18:46:14 2017 +0000 @@ -1,7 +1,9 @@ (in-package :ap.entities) -(defparameter *vegetables* - (read-file-into-form "data/vegetables.lisp")) +(defparameter *foods* + (concatenate 'vector + (read-file-into-form "data/vegetables.lisp") + (read-file-into-form "data/meat.lisp"))) (define-entity food (visible coords holdable) @@ -13,7 +15,7 @@ (defun random-food-description () (format nil "a ~A of ~A" (random-elt #("can" "tin" "package")) - (random-elt *vegetables*))) + (random-elt *foods*))) (defun make-food (x y) (create-entity 'food diff -r fa45164eab85 -r 9dbe31fef037 src/main.lisp --- a/src/main.lisp Sat Jan 07 17:48:08 2017 +0000 +++ b/src/main.lisp Sat Jan 07 18:46:14 2017 +0000 @@ -9,6 +9,7 @@ (defparameter *intro4* (read-file-into-string "data/intro4.txt")) (defparameter *intro5* (read-file-into-string "data/intro5.txt")) (defparameter *intro6* (read-file-into-string "data/intro6.txt")) +(defparameter *help* (read-file-into-string "data/help.txt")) (defparameter *screen-width* nil) (defparameter *screen-height* nil) @@ -143,6 +144,23 @@ (world-map)) +;;;; Popups ------------------------------------------------------------------- +(defun popup (contents) + (let ((lines (cl-strings:split contents #\newline))) + (with-dims ((+ 3 (apply #'max 13 (mapcar #'length lines))) + (+ 3 (length lines))) + (with-panel-and-window + (pan win *width* *height* + (center *width* *screen-width*) + (center *height* *screen-height*)) + (charms:clear-window win) + (border win) + (write-lines-left win lines 1 1) + (write-string-centered win "Press any key" (1- *height*)) + (redraw) + (charms:get-char win))))) + + ;;;; World Map ---------------------------------------------------------------- (defun terrain-char (height) (cond ((< height -0.20) (values #\~ +blue-black+)) ; deep water @@ -219,7 +237,8 @@ (write-lines-left window (cl-strings:shorten (holdable/description item) (- *width* 2 2 3 1)) - 3 y))))) + 3 y))) + (write-string-left window (format nil "Press h for help") 1 (1- *height*)))) (defun move-player (dx dy) @@ -231,6 +250,7 @@ (defun world-map-input (window) (case (charms:get-char window) (#\q :quit) + (#\h :help) (:left (move-player -1 0) :tick) (:right (move-player 1 0) :tick) (:up (move-player 0 -1) :tick) @@ -250,9 +270,12 @@ (render-map map-win) (render-items map-win)) (redraw) - (case (world-map-input bar-win) - (:tick (tick-player *player*)) - (:quit (return)))))) + (if-first-time + (popup "Head north!") + (case (world-map-input bar-win) + (:tick (tick-player *player*)) + (:quit (return)) + (:help (popup *help*))))))) nil) diff -r fa45164eab85 -r 9dbe31fef037 src/utilities.lisp --- a/src/utilities.lisp Sat Jan 07 17:48:08 2017 +0000 +++ b/src/utilities.lisp Sat Jan 07 18:46:14 2017 +0000 @@ -62,15 +62,19 @@ (defun write-string-centered (window string y) (charms:write-string-at-point window string (center (length string) ap::*width*) y)) -(defun write-lines-left (window string start-x start-y) - (iterate (for line :in (cl-strings:split string #\newline)) - (for y :from start-y) - (write-string-left window line start-x y))) +(defun write-lines-left (window contents start-x start-y) + (if (stringp contents) + (write-lines-left window (cl-strings:split contents #\newline) start-x start-y) + (iterate (for line :in contents) + (for y :from start-y) + (write-string-left window line start-x y)))) -(defun write-lines-centered (window string start-y) - (iterate (for line :in (cl-strings:split string #\newline)) - (for y :from start-y) - (write-string-centered window line y))) +(defun write-lines-centered (window contents start-y) + (if (stringp contents) + (write-lines-centered window (cl-strings:split contents #\newline) start-y) + (iterate (for line :in contents) + (for y :from start-y) + (write-string-centered window line y)))) (defmacro with-dims ((width height) &body body)