diff --git a/animals.lisp b/animals.lisp index a0428f2..dfdfb55 100644 --- a/animals.lisp +++ b/animals.lisp @@ -8,28 +8,8 @@ ;;;; -;;; ANIMAL & SPECIES STRUCTS & FUNCTIONS - (defvar *animals* NIL) -(defstruct animal - (id 0) - (pos '(0 0)) - (health 0) - (species NIL)) - -;;TODO predatory species - -(defstruct species - (name "") - (strength 0) - (max-health 0) - (aggression 0) ;attack probability % - (group-size 1) ;maximum group size - (habitat '()) ;preferred biomes - (corpse-items '()) ;items dropped on death - (update-fn #'(lambda (id) NIL))) ; takes animal ID as argument - (let ((species-list NIL)) (defun register-species (symbol-name species-object) (setf species-list @@ -40,14 +20,14 @@ (defmacro new-species (name &body body) `(register-species ,name - (make-species ,@body))) + (make-instance 'species ,@body))) (let ((max-id 0)) (defun add-animal (species position) "Create a new animal of the given species" (let ((a (make-animal :id max-id :pos position :species species - :health (species-max-health species)))) + :health (.max-health species)))) (incf max-id) (setf *animals* (append *animals* a))))) @@ -61,25 +41,25 @@ :strength 3 :max-health 10 :aggression 0 :group-size 10 :habitat '(forest grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'boar :name "boar" :strength 7 :max-health 15 :aggression 5 :group-size 5 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'wolf :name "wolf" :strength 10 :max-health 20 :aggression 20 :group-size 6 :habitat '(grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'bear :name "bear" :strength 20 :max-health 30 :aggression 20 :group-size 1 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO diff --git a/animals.lisp b/animals.lisp index a0428f2..dfdfb55 100644 --- a/animals.lisp +++ b/animals.lisp @@ -8,28 +8,8 @@ ;;;; -;;; ANIMAL & SPECIES STRUCTS & FUNCTIONS - (defvar *animals* NIL) -(defstruct animal - (id 0) - (pos '(0 0)) - (health 0) - (species NIL)) - -;;TODO predatory species - -(defstruct species - (name "") - (strength 0) - (max-health 0) - (aggression 0) ;attack probability % - (group-size 1) ;maximum group size - (habitat '()) ;preferred biomes - (corpse-items '()) ;items dropped on death - (update-fn #'(lambda (id) NIL))) ; takes animal ID as argument - (let ((species-list NIL)) (defun register-species (symbol-name species-object) (setf species-list @@ -40,14 +20,14 @@ (defmacro new-species (name &body body) `(register-species ,name - (make-species ,@body))) + (make-instance 'species ,@body))) (let ((max-id 0)) (defun add-animal (species position) "Create a new animal of the given species" (let ((a (make-animal :id max-id :pos position :species species - :health (species-max-health species)))) + :health (.max-health species)))) (incf max-id) (setf *animals* (append *animals* a))))) @@ -61,25 +41,25 @@ :strength 3 :max-health 10 :aggression 0 :group-size 10 :habitat '(forest grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'boar :name "boar" :strength 7 :max-health 15 :aggression 5 :group-size 5 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'wolf :name "wolf" :strength 10 :max-health 20 :aggression 20 :group-size 6 :habitat '(grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'bear :name "bear" :strength 20 :max-health 30 :aggression 20 :group-size 1 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO diff --git a/classes.lisp b/classes.lisp new file mode 100644 index 0000000..4bc7b7a --- /dev/null +++ b/classes.lisp @@ -0,0 +1,70 @@ +;;;; +;;;; Terra Nostra is a Minecraft-like survival game for the commandline. +;;;; +;;;; This file defines all CLOS classes used in the game. +;;;; +;;;; (c) 2018 Daniel Vedder, MIT license +;;;; + +(defclass item () + ;; The base class of all game items. + ((name :accessor .name :initarg :name :initform "") + (description :accessor .description :initarg :description :initform "") + (weight :accessor .weight :initarg :weight :initform 0) + (movable :reader movablep :initarg :movable :initform T) + ;;XXX not sure yet how I'm going to use the actions + (action :accessor .action :initarg :action + :initform #'(lambda () NIL)))) + +(defclass destructable (item) + ;; An item that can be destroyed + ((destroy-with :reader destructors :initarg :destroy-with :initform NIL) + (drops :reader drops :initarg :drops :initform '()))) + +(defclass craftable (item) + ;; An item that can be crafted from other items or resources + ((requires-tool :reader requires-tool :initarg :requires-tool :initform '()) + (craft-with :reader craft-with :initarg :craft-with :initform '()))) + +(defclass feature (destructable) + ;; A landscape feature such as a rock, a tree, or an animal. + ((symbol-char :reader .char :initarg :char :initform NIL) + (symbol-color :reader .color :initarg :color :initform NIL) + ;;XXX is there a way of setting a superclass variable for all + ;; subclass instances? + (movable :reader movablep :initarg :movable :initform NIL))) + +(defclass resource (item) + ;; A resource that can be gathered and used to craft items. + ((burning-product :reader .burning-product :initarg :burning-product))) + +(defclass tool (craftable) + ;; A tool or weapon that can be crafted and used in-game. + ((level :reader .level :initarg :level :initform 0) + ;;TODO the type needs some thought (add/change to efficiency?) + (type :reader .type :initarg :type :initform NIL) ;e.g. 'weapon, 'wood + (condition :accessor .condition :initarg :condition :initform 100))) + +(defclass container (craftable feature) + ;; An item that can store other items (and perhaps manipulate them) + ((contains :accessor .contains :initform '()) + (max-weight :reader .max-weight :initarg :max-weight :initform -1) + (capacity :reader .capacity :initarg :capacity :initform 0))) + +(defclass species (feature) ;XXX inherit from `feature' or `destructable'? + ;; An animal species + ((strength :accessor .strength :initarg :strength :initform 1) + (max-health :accessor .max-health :initarg :max-health :initform 1) + (aggression :accessor .aggression :initarg :aggression :initform 0) + (group-size :reader .group-size :initarg :group-size :initform 1) + (habitat :reader .habitat :initarg :habitat :initform '()) + (destroy-with :reader destructors :initarg :destroy-with + :initform '(weapon)))) + +(defclass animal (species) + ;; An individual animal + ((id :reader .id :initarg :id :initform -1) + (position :reader .position :initform '(0 0)) + (health :reader .health :initform 1) + (species :reader .species :initform NIL))) + diff --git a/animals.lisp b/animals.lisp index a0428f2..dfdfb55 100644 --- a/animals.lisp +++ b/animals.lisp @@ -8,28 +8,8 @@ ;;;; -;;; ANIMAL & SPECIES STRUCTS & FUNCTIONS - (defvar *animals* NIL) -(defstruct animal - (id 0) - (pos '(0 0)) - (health 0) - (species NIL)) - -;;TODO predatory species - -(defstruct species - (name "") - (strength 0) - (max-health 0) - (aggression 0) ;attack probability % - (group-size 1) ;maximum group size - (habitat '()) ;preferred biomes - (corpse-items '()) ;items dropped on death - (update-fn #'(lambda (id) NIL))) ; takes animal ID as argument - (let ((species-list NIL)) (defun register-species (symbol-name species-object) (setf species-list @@ -40,14 +20,14 @@ (defmacro new-species (name &body body) `(register-species ,name - (make-species ,@body))) + (make-instance 'species ,@body))) (let ((max-id 0)) (defun add-animal (species position) "Create a new animal of the given species" (let ((a (make-animal :id max-id :pos position :species species - :health (species-max-health species)))) + :health (.max-health species)))) (incf max-id) (setf *animals* (append *animals* a))))) @@ -61,25 +41,25 @@ :strength 3 :max-health 10 :aggression 0 :group-size 10 :habitat '(forest grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'boar :name "boar" :strength 7 :max-health 15 :aggression 5 :group-size 5 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'wolf :name "wolf" :strength 10 :max-health 20 :aggression 20 :group-size 6 :habitat '(grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'bear :name "bear" :strength 20 :max-health 30 :aggression 20 :group-size 1 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO diff --git a/classes.lisp b/classes.lisp new file mode 100644 index 0000000..4bc7b7a --- /dev/null +++ b/classes.lisp @@ -0,0 +1,70 @@ +;;;; +;;;; Terra Nostra is a Minecraft-like survival game for the commandline. +;;;; +;;;; This file defines all CLOS classes used in the game. +;;;; +;;;; (c) 2018 Daniel Vedder, MIT license +;;;; + +(defclass item () + ;; The base class of all game items. + ((name :accessor .name :initarg :name :initform "") + (description :accessor .description :initarg :description :initform "") + (weight :accessor .weight :initarg :weight :initform 0) + (movable :reader movablep :initarg :movable :initform T) + ;;XXX not sure yet how I'm going to use the actions + (action :accessor .action :initarg :action + :initform #'(lambda () NIL)))) + +(defclass destructable (item) + ;; An item that can be destroyed + ((destroy-with :reader destructors :initarg :destroy-with :initform NIL) + (drops :reader drops :initarg :drops :initform '()))) + +(defclass craftable (item) + ;; An item that can be crafted from other items or resources + ((requires-tool :reader requires-tool :initarg :requires-tool :initform '()) + (craft-with :reader craft-with :initarg :craft-with :initform '()))) + +(defclass feature (destructable) + ;; A landscape feature such as a rock, a tree, or an animal. + ((symbol-char :reader .char :initarg :char :initform NIL) + (symbol-color :reader .color :initarg :color :initform NIL) + ;;XXX is there a way of setting a superclass variable for all + ;; subclass instances? + (movable :reader movablep :initarg :movable :initform NIL))) + +(defclass resource (item) + ;; A resource that can be gathered and used to craft items. + ((burning-product :reader .burning-product :initarg :burning-product))) + +(defclass tool (craftable) + ;; A tool or weapon that can be crafted and used in-game. + ((level :reader .level :initarg :level :initform 0) + ;;TODO the type needs some thought (add/change to efficiency?) + (type :reader .type :initarg :type :initform NIL) ;e.g. 'weapon, 'wood + (condition :accessor .condition :initarg :condition :initform 100))) + +(defclass container (craftable feature) + ;; An item that can store other items (and perhaps manipulate them) + ((contains :accessor .contains :initform '()) + (max-weight :reader .max-weight :initarg :max-weight :initform -1) + (capacity :reader .capacity :initarg :capacity :initform 0))) + +(defclass species (feature) ;XXX inherit from `feature' or `destructable'? + ;; An animal species + ((strength :accessor .strength :initarg :strength :initform 1) + (max-health :accessor .max-health :initarg :max-health :initform 1) + (aggression :accessor .aggression :initarg :aggression :initform 0) + (group-size :reader .group-size :initarg :group-size :initform 1) + (habitat :reader .habitat :initarg :habitat :initform '()) + (destroy-with :reader destructors :initarg :destroy-with + :initform '(weapon)))) + +(defclass animal (species) + ;; An individual animal + ((id :reader .id :initarg :id :initform -1) + (position :reader .position :initform '(0 0)) + (health :reader .health :initform 1) + (species :reader .species :initform NIL))) + diff --git a/items.lisp b/items.lisp index 582a4a1..ee75e07 100644 --- a/items.lisp +++ b/items.lisp @@ -6,21 +6,6 @@ ;;;; (c) 2018 Daniel Vedder, MIT license ;;;; -;;TODO This needs to be done with CLOS - -(defstruct item - (name "") - (description "") - (weight 0) - (movable T) - (occupant NIL) - (equipment NIL) - (resource NIL) - (destroy-with '()) - (drops '()) - (craft-with '()) - (action #'(lambda () NIL))) - (let ((item-list NIL)) (defun register-item (symbol-name item-object) (setf item-list @@ -32,68 +17,81 @@ (defun get-item (symbol-name) (copy-item (get-item-type symbol-name)))) -(defmacro new-item (name &body body) +(defmacro new-item (type name &body body) `(register-item ,name - (make-item ,@body))) + (make-instance ,type ,@body))) ;;; RESOURCE ITEMS -(new-item 'wood - :name "wood" :weight 1 - :description "A block of wood, just right for working with") +;;TODO sand, glass, clay, bricks -(new-item 'stone +(new-item 'resource 'wood + :name "wood" :weight 1 + :description "A block of wood, just right for working with" + :burning-product 'charcoal) + +(new-item 'resource 'charcoal + :name "charcoal" :weight 1 + :description "A black lump of charcoal. Burns better than wood.") + +(new-item 'resource 'stone :name "stone" :weight 2 :description "A fist-sized stone. What are you going to do with it?") -(new-item 'iron +(new-item 'resource 'iron-ore + :name "iron ore" :weight 4 + :description "A lump of iron ore - still needs to be smelted." + :burning-product 'iron) + +(new-item 'resource 'iron :name "iron" :weight 3 :description "An iron ingot, ready for further crafting.") ;;; LANDSCAPE FEATURES -(new-item 'acacia +(new-item 'feature 'acacia :name "acacia" :description "A tall acacia tree, spreading its branches wide." - :destroy-with '(stone-axe iron-axe) - :drops '(wood) :weight 2000 - :movable NIL :occupant T) + :destroy-with '(wood) + :drops '(wood) :weight 2000) -(new-item 'miombo +(new-item 'feature 'miombo :name "miombo" :description "A small, crooked miombo tree." - :destroy-with '(stone-axe iron-axe) - :drops '(wood) :weight 500 - :movable NIL :occupant T) + :destroy-with '(wood) + :drops '(wood) :weight 500) -(new-item 'boulder +(new-item 'feature 'boulder :name "boulder" :description "A huge lump of grey basalt, sticking out of the ground." - :destroy-with '(stone-pickaxe iron-pickaxe) - :drops '(stone) :weight 5000 - :movable NIL :occupant T) + :destroy-with '(stone) + :drops '(stone) :weight 5000) ;;; TOOL ITEMS -;;TODO Faustkeil? +;;TODO bronze tools, weapons -(new-item 'stone-axe +(new-item 'tool 'stone-axe :name "stone axe" :description "An axe, crudely but effectively fashioned out of stone." + :type 'wood :level 1 :weight 2 :craft-with '(stone wood)) -(new-item 'iron-axe +(new-item 'tool 'iron-axe :name "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 'stone-pickaxe +(new-item 'tool 'stone-pickaxe :name "stone pickaxe" :description "A pickaxe, somewhat helplessly made from stone." - :weight 3 :craft-with '(stone wood)) + :type 'stone :level 1 + :weight 3 :craft-with '(stone stone wood)) -(new-item 'iron-pickaxe +(new-item 'tool 'iron-pickaxe :name "iron pickaxe" :description "A solid iron pickaxe. Prepare to split rock!" - :weight 4 :craft-with '(iron wood)) + :type 'stone :level 3 + :weight 4 :craft-with '(iron iron wood)) diff --git a/animals.lisp b/animals.lisp index a0428f2..dfdfb55 100644 --- a/animals.lisp +++ b/animals.lisp @@ -8,28 +8,8 @@ ;;;; -;;; ANIMAL & SPECIES STRUCTS & FUNCTIONS - (defvar *animals* NIL) -(defstruct animal - (id 0) - (pos '(0 0)) - (health 0) - (species NIL)) - -;;TODO predatory species - -(defstruct species - (name "") - (strength 0) - (max-health 0) - (aggression 0) ;attack probability % - (group-size 1) ;maximum group size - (habitat '()) ;preferred biomes - (corpse-items '()) ;items dropped on death - (update-fn #'(lambda (id) NIL))) ; takes animal ID as argument - (let ((species-list NIL)) (defun register-species (symbol-name species-object) (setf species-list @@ -40,14 +20,14 @@ (defmacro new-species (name &body body) `(register-species ,name - (make-species ,@body))) + (make-instance 'species ,@body))) (let ((max-id 0)) (defun add-animal (species position) "Create a new animal of the given species" (let ((a (make-animal :id max-id :pos position :species species - :health (species-max-health species)))) + :health (.max-health species)))) (incf max-id) (setf *animals* (append *animals* a))))) @@ -61,25 +41,25 @@ :strength 3 :max-health 10 :aggression 0 :group-size 10 :habitat '(forest grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'boar :name "boar" :strength 7 :max-health 15 :aggression 5 :group-size 5 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'wolf :name "wolf" :strength 10 :max-health 20 :aggression 20 :group-size 6 :habitat '(grassland) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO (new-species 'bear :name "bear" :strength 20 :max-health 30 :aggression 20 :group-size 1 :habitat '(forest) - :corpse-items NIL) ;TODO + :drops NIL) ;TODO diff --git a/classes.lisp b/classes.lisp new file mode 100644 index 0000000..4bc7b7a --- /dev/null +++ b/classes.lisp @@ -0,0 +1,70 @@ +;;;; +;;;; Terra Nostra is a Minecraft-like survival game for the commandline. +;;;; +;;;; This file defines all CLOS classes used in the game. +;;;; +;;;; (c) 2018 Daniel Vedder, MIT license +;;;; + +(defclass item () + ;; The base class of all game items. + ((name :accessor .name :initarg :name :initform "") + (description :accessor .description :initarg :description :initform "") + (weight :accessor .weight :initarg :weight :initform 0) + (movable :reader movablep :initarg :movable :initform T) + ;;XXX not sure yet how I'm going to use the actions + (action :accessor .action :initarg :action + :initform #'(lambda () NIL)))) + +(defclass destructable (item) + ;; An item that can be destroyed + ((destroy-with :reader destructors :initarg :destroy-with :initform NIL) + (drops :reader drops :initarg :drops :initform '()))) + +(defclass craftable (item) + ;; An item that can be crafted from other items or resources + ((requires-tool :reader requires-tool :initarg :requires-tool :initform '()) + (craft-with :reader craft-with :initarg :craft-with :initform '()))) + +(defclass feature (destructable) + ;; A landscape feature such as a rock, a tree, or an animal. + ((symbol-char :reader .char :initarg :char :initform NIL) + (symbol-color :reader .color :initarg :color :initform NIL) + ;;XXX is there a way of setting a superclass variable for all + ;; subclass instances? + (movable :reader movablep :initarg :movable :initform NIL))) + +(defclass resource (item) + ;; A resource that can be gathered and used to craft items. + ((burning-product :reader .burning-product :initarg :burning-product))) + +(defclass tool (craftable) + ;; A tool or weapon that can be crafted and used in-game. + ((level :reader .level :initarg :level :initform 0) + ;;TODO the type needs some thought (add/change to efficiency?) + (type :reader .type :initarg :type :initform NIL) ;e.g. 'weapon, 'wood + (condition :accessor .condition :initarg :condition :initform 100))) + +(defclass container (craftable feature) + ;; An item that can store other items (and perhaps manipulate them) + ((contains :accessor .contains :initform '()) + (max-weight :reader .max-weight :initarg :max-weight :initform -1) + (capacity :reader .capacity :initarg :capacity :initform 0))) + +(defclass species (feature) ;XXX inherit from `feature' or `destructable'? + ;; An animal species + ((strength :accessor .strength :initarg :strength :initform 1) + (max-health :accessor .max-health :initarg :max-health :initform 1) + (aggression :accessor .aggression :initarg :aggression :initform 0) + (group-size :reader .group-size :initarg :group-size :initform 1) + (habitat :reader .habitat :initarg :habitat :initform '()) + (destroy-with :reader destructors :initarg :destroy-with + :initform '(weapon)))) + +(defclass animal (species) + ;; An individual animal + ((id :reader .id :initarg :id :initform -1) + (position :reader .position :initform '(0 0)) + (health :reader .health :initform 1) + (species :reader .species :initform NIL))) + diff --git a/items.lisp b/items.lisp index 582a4a1..ee75e07 100644 --- a/items.lisp +++ b/items.lisp @@ -6,21 +6,6 @@ ;;;; (c) 2018 Daniel Vedder, MIT license ;;;; -;;TODO This needs to be done with CLOS - -(defstruct item - (name "") - (description "") - (weight 0) - (movable T) - (occupant NIL) - (equipment NIL) - (resource NIL) - (destroy-with '()) - (drops '()) - (craft-with '()) - (action #'(lambda () NIL))) - (let ((item-list NIL)) (defun register-item (symbol-name item-object) (setf item-list @@ -32,68 +17,81 @@ (defun get-item (symbol-name) (copy-item (get-item-type symbol-name)))) -(defmacro new-item (name &body body) +(defmacro new-item (type name &body body) `(register-item ,name - (make-item ,@body))) + (make-instance ,type ,@body))) ;;; RESOURCE ITEMS -(new-item 'wood - :name "wood" :weight 1 - :description "A block of wood, just right for working with") +;;TODO sand, glass, clay, bricks -(new-item 'stone +(new-item 'resource 'wood + :name "wood" :weight 1 + :description "A block of wood, just right for working with" + :burning-product 'charcoal) + +(new-item 'resource 'charcoal + :name "charcoal" :weight 1 + :description "A black lump of charcoal. Burns better than wood.") + +(new-item 'resource 'stone :name "stone" :weight 2 :description "A fist-sized stone. What are you going to do with it?") -(new-item 'iron +(new-item 'resource 'iron-ore + :name "iron ore" :weight 4 + :description "A lump of iron ore - still needs to be smelted." + :burning-product 'iron) + +(new-item 'resource 'iron :name "iron" :weight 3 :description "An iron ingot, ready for further crafting.") ;;; LANDSCAPE FEATURES -(new-item 'acacia +(new-item 'feature 'acacia :name "acacia" :description "A tall acacia tree, spreading its branches wide." - :destroy-with '(stone-axe iron-axe) - :drops '(wood) :weight 2000 - :movable NIL :occupant T) + :destroy-with '(wood) + :drops '(wood) :weight 2000) -(new-item 'miombo +(new-item 'feature 'miombo :name "miombo" :description "A small, crooked miombo tree." - :destroy-with '(stone-axe iron-axe) - :drops '(wood) :weight 500 - :movable NIL :occupant T) + :destroy-with '(wood) + :drops '(wood) :weight 500) -(new-item 'boulder +(new-item 'feature 'boulder :name "boulder" :description "A huge lump of grey basalt, sticking out of the ground." - :destroy-with '(stone-pickaxe iron-pickaxe) - :drops '(stone) :weight 5000 - :movable NIL :occupant T) + :destroy-with '(stone) + :drops '(stone) :weight 5000) ;;; TOOL ITEMS -;;TODO Faustkeil? +;;TODO bronze tools, weapons -(new-item 'stone-axe +(new-item 'tool 'stone-axe :name "stone axe" :description "An axe, crudely but effectively fashioned out of stone." + :type 'wood :level 1 :weight 2 :craft-with '(stone wood)) -(new-item 'iron-axe +(new-item 'tool 'iron-axe :name "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 'stone-pickaxe +(new-item 'tool 'stone-pickaxe :name "stone pickaxe" :description "A pickaxe, somewhat helplessly made from stone." - :weight 3 :craft-with '(stone wood)) + :type 'stone :level 1 + :weight 3 :craft-with '(stone stone wood)) -(new-item 'iron-pickaxe +(new-item 'tool 'iron-pickaxe :name "iron pickaxe" :description "A solid iron pickaxe. Prepare to split rock!" - :weight 4 :craft-with '(iron wood)) + :type 'stone :level 3 + :weight 4 :craft-with '(iron iron wood)) diff --git a/terranostra.lisp b/terranostra.lisp index e08a41b..075a37f 100644 --- a/terranostra.lisp +++ b/terranostra.lisp @@ -13,6 +13,7 @@ (use-package :croatoan) (load "util.lisp") +(load "classes.lisp") (load "items.lisp") (load "biomes.lisp") (load "animals.lisp")