diff --git a/animals.lisp b/animals.lisp new file mode 100644 index 0000000..2f02144 --- /dev/null +++ b/animals.lisp @@ -0,0 +1,60 @@ +;;;; +;;;; Terra Nostra is a Minecraft-like survival game for the commandline. +;;;; +;;;; This file defines animal and species structs and the various species +;;;; found in-game. +;;;; +;;;; (c) 2018 Daniel Vedder, MIT license +;;;; + +(defstruct animal + (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 '())) + +(let ((species-list NIL)) + (defun register-species (symbol-name species-object) + (setf species-list + (cons (list symbol-name species-object) species-list))) + + (defun get-species (symbol-name) + (cassoc symbol-name species-list))) + +(register-species 'deer + (make-species :name "deer" + :strength 3 :max-health 10 :aggression 0 + :group-size 10 + :habitat '(forest grassland) + :corpse-items NIL)) ;TODO + +(register-species 'boar + (make-species :name "boar" + :strength 7 :max-health 15 :aggression 5 + :group-size 5 + :habitat '(forest) + :corpse-items NIL)) ;TODO + +(register-species 'wolf + (make-species :name "wolf" + :strength 10 :max-health 20 :aggression 20 + :group-size 6 + :habitat '(grassland) + :corpse-items 'NIL)) ;TODO + +(register-species 'bear + (make-species :name "bear" + :strength 20 :max-health 30 :aggression 20 + :group-size 1 + :habitat '(forest) + :corpse-items 'NIL)) ;TODO