;;;; ;;;; 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))