Newer
Older
naledi / items.lisp
;;;;
;;;; Naledi ya Africa ("Star of Africa") is a rogue-like survival game
;;;; set in Africa.
;;;;
;;;; This file defines in-game items.
;;;; 
;;;; (c) 2018 Daniel Vedder, MIT license
;;;;

(let ((item-list NIL))
	(defun register-item (symbol-name item-object)
		(setf item-list
			(cons (list symbol-name item-object) item-list)))

	(defun get-item-type (symbol-name)
		(cassoc symbol-name item-list))

	(defun get-item (symbol-name)
		;;FIXME copy-item doesn't work with CLOS
		(copy-item (get-item-type symbol-name))))

(defmacro new-item (type name &body body)
	`(register-item ',name
		 (make-instance ',type
			 :name ,(symbol-to-string name)
			 ,@body)))


;;; RESOURCE ITEMS

;;TODO sand, glass, clay, bricks

(new-item resource wood
	:description "A block of wood, just right for working with"
	:weight 1 :burning-product 'charcoal)

(new-item resource charcoal
	:description "A black lump of charcoal. Burns better than wood."
	:weight 1)

(new-item resource stone
	:description "A fist-sized stone. What are you going to do with it?"
	:weight 2)

(new-item resource iron-ore
	:description "A lump of iron ore - still needs to be smelted."
	:weight 4 :burning-product 'iron)

(new-item resource iron
	:description "An iron ingot, ready for further crafting."
	:weight 3)

;;; LANDSCAPE FEATURES

(new-item feature acacia
	:description "A tall acacia tree, spreading its branches wide."
	:destroy-with '(wood)
	:drops '(wood) :weight 2000
	:char #\T :color :green)

(new-item feature miombo
	:description "A small, crooked miombo tree."
	:destroy-with '(wood)
	:drops '(wood) :weight 500
	:char #\Y :color :green)

(new-item feature boulder
	:description "A huge lump of grey basalt, sticking out of the ground."
	:destroy-with '(stone)
	:drops '(stone) :weight 5000
	:char #\8 :color :white) ;XXX colour :gray is not supported on Arch :-(

(new-item feature cactus
	:description "A prickly eupharbacae sticks out of the ground here - don't touch!"
	:destroy-with '(axe) ;does it drop anything?
	:char #\+ :color :green)

;;TODO termite hill, palm, baobab, pond

;;; TOOL ITEMS

;;TODO bronze tools, weapons

(new-item tool stone-axe
	:description "An axe, crudely but effectively fashioned out of stone."
	:type 'wood :level 1
	:weight 2 :craft-with '(stone wood))

(new-item tool iron-axe
	:description "A finely honed iron axe, just right for chopping wood."
	:type 'wood :level 3
	:weight 3 :craft-with '(iron wood))

(new-item tool stone-pickaxe
	:description "A pickaxe, somewhat helplessly made from stone."
	:type 'stone :level 1
	:weight 3 :craft-with '(stone stone wood))

(new-item tool iron-pickaxe
	:description "A solid iron pickaxe. Prepare to split rock!"
	:type 'stone :level 3
	:weight 4 :craft-with '(iron iron wood))