aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Pouar <pouar@pouar.net>2020-09-17 11:20:13 -0500
committerGravatar Pouar <pouar@pouar.net>2020-09-17 12:33:47 -0500
commit6f41abeefd343ac411409b2d888acdbabfcd20a0 (patch)
tree0e5674c4fbc519dfc2ae2034a78b815b145692d2
parentadd werewolfs (diff)
another optimization
-rw-r--r--core/init.lisp2
-rw-r--r--core/libexec/declares.lisp3
-rw-r--r--core/libexec/functions.lisp3
-rw-r--r--core/libexec/generic-functions.lisp3
-rw-r--r--core/libexec/macros.lisp2
-rw-r--r--data/enemies/eggbots.lisp2
-rw-r--r--data/enemies/haunted.lisp4
-rw-r--r--data/enemies/navy.lisp2
-rw-r--r--data/enemies/pirates.lisp2
-rw-r--r--data/enemies/pokemon.lisp2
-rw-r--r--data/enemies/rpgmaker.lisp117
-rw-r--r--data/moves/pokemon.lisp37
-rw-r--r--data/moves/regular.lisp69
-rw-r--r--packages.lisp1
14 files changed, 127 insertions, 122 deletions
diff --git a/core/init.lisp b/core/init.lisp
index f991438..5206831 100644
--- a/core/init.lisp
+++ b/core/init.lisp
@@ -54,3 +54,5 @@
"contains the package designators for the exported symbols to be used as commands")
(g:define-global-var *last-rng-update* 0)
(g:define-global-var *immutable* nil)
+(g:define-global-var *element-types* (make-hash-table :test 'eq)
+ "Hash table containing preinitialized element types. Used instead of defining a bunch of constants.")
diff --git a/core/libexec/declares.lisp b/core/libexec/declares.lisp
index 0090019..66ea27c 100644
--- a/core/libexec/declares.lisp
+++ b/core/libexec/declares.lisp
@@ -46,4 +46,5 @@
t)
process-battle)
(ftype (function (ally) (values (eql t) &optional)) ally-join)
- (ftype (function (simple-string boolean simple-string) (values (eql t) &optional)) set-player))
+ (ftype (function (simple-string boolean simple-string) (values (eql t) &optional)) set-player)
+ (ftype (function (t) (values list &optional)) coerce-element-types))
diff --git a/core/libexec/functions.lisp b/core/libexec/functions.lisp
index cdb5cf3..edc9eaa 100644
--- a/core/libexec/functions.lisp
+++ b/core/libexec/functions.lisp
@@ -1309,6 +1309,9 @@
'function)
had-accident user)
had-accident))
+(defun coerce-element-types (element-types)
+ (iter (for element-type in (a:ensure-list element-types))
+ (collect (coerce-element-type element-type))))
(defun get-props-from-zone (position)
(props-of (get-zone position)))
(defun get-items-from-prop (prop position)
diff --git a/core/libexec/generic-functions.lisp b/core/libexec/generic-functions.lisp
index 0c450ca..adc693f 100644
--- a/core/libexec/generic-functions.lisp
+++ b/core/libexec/generic-functions.lisp
@@ -272,7 +272,8 @@
(:method ((element-type (eql nil)))
nil)
(:method ((element-type symbol))
- (make-instance element-type))
+ (or (gethash element-type *element-types*)
+ (setf (gethash element-type *element-types*) (make-instance element-type))))
(:method ((element-type element-type))
element-type))
(defgeneric type-match (source target)
diff --git a/core/libexec/macros.lisp b/core/libexec/macros.lisp
index a07e0a1..a3559b3 100644
--- a/core/libexec/macros.lisp
+++ b/core/libexec/macros.lisp
@@ -47,6 +47,8 @@
,@(iter (for class-option in class-options)
(unless (s:memq (car class-option) '(:super-effective :not-very-effective :no-effect :element-name))
(collect class-option)))))
+ (or (gethash ',name *element-types*)
+ (setf (gethash ',name *element-types*) (make-instance ',name)))
,@(iter (for class-option in class-options)
(let ((option-name (car class-option)))
(when (s:memq option-name '(:super-effective :not-very-effective :no-effect))
diff --git a/data/enemies/eggbots.lisp b/data/enemies/eggbots.lisp
index 4116dcd..0fb3632 100644
--- a/data/enemies/eggbots.lisp
+++ b/data/enemies/eggbots.lisp
@@ -8,4 +8,4 @@
:male t
:attributes (list :not-ticklish t)
:bitcoins-per-level 40
- :element-types '(#.(make-instance 'yadfa-element-types:steel))))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:steel)))
diff --git a/data/enemies/haunted.lisp b/data/enemies/haunted.lisp
index 3abf260..4fb4a94 100644
--- a/data/enemies/haunted.lisp
+++ b/data/enemies/haunted.lisp
@@ -15,7 +15,7 @@
:defense float-features:long-float-positive-infinity
:energy most-positive-fixnum
:speed 120)
- :element-types '(#.(make-instance 'yadfa-element-types:ghost))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:ghost)
:moves (make-instances yadfa-moves:ghost-tickle yadfa-moves:ghost-mush yadfa-moves:ghost-squish)))
(defmethod default-attack ((target team-member) (user ghost))
(declare (ignore target))
@@ -43,7 +43,7 @@
:description "A scary werewolf"
:species "Werewolf"
:male (a:random-elt '(t nil))
- :element-types '(#.(make-instance 'yadfa-element-types:dark))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:dark)
:moves (make-instances yadfa-moves:bite yadfa-moves:roar yadfa-moves:scratch)))
(defmethod initialize-instance :after
((c werewolf) &key (wear nil wearp) &allow-other-keys)
diff --git a/data/enemies/navy.lisp b/data/enemies/navy.lisp
index 72c9b4f..7e48a53 100644
--- a/data/enemies/navy.lisp
+++ b/data/enemies/navy.lisp
@@ -10,7 +10,7 @@
:mudsport-chance 3
:bladder/contents (random 500)
:bowels/contents (random 700)
- :element-types '(#.(make-instance 'yadfa-element-types:water))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:water)
:inventory (iter (for i from 0 to (random 5)) (collect (make-instance 'yadfa-items:navy-pullups)))
:bitcoins-per-level 60))
(defmethod process-battle-accident ((character navy-officer) attack (item item) reload (selected-target base-character))
diff --git a/data/enemies/pirates.lisp b/data/enemies/pirates.lisp
index 04bd21e..ab2e01a 100644
--- a/data/enemies/pirates.lisp
+++ b/data/enemies/pirates.lisp
@@ -8,7 +8,7 @@
:male (a:random-elt '(t nil))
:bladder/contents (random 500)
:bowels/contents (random 700)
- :element-types '(#.(make-instance 'yadfa-element-types:water))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:water)
:watersport-limit 300
:mudsport-limit 400
:inventory (iter (for i from 0 to (random 20)) (collect (make-instance 'yadfa-items:diaper)))))
diff --git a/data/enemies/pokemon.lisp b/data/enemies/pokemon.lisp
index b2ca043..d2fd243 100644
--- a/data/enemies/pokemon.lisp
+++ b/data/enemies/pokemon.lisp
@@ -7,7 +7,7 @@
:species "Magikarp"
:male (a:random-elt '(t nil))
:bitcoins-per-level 10
- :element-types '(#.(make-instance 'yadfa-element-types:water))))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:water)))
(defmethod attack ((target team-member) (user magikarp) (attack null))
(declare (ignore target attack))
(format t "~a uses Splash, obviously it had no effect. What did you think was going to happen?" (name-of user)))
diff --git a/data/enemies/rpgmaker.lisp b/data/enemies/rpgmaker.lisp
index cfe7fb2..b9e27ac 100644
--- a/data/enemies/rpgmaker.lisp
+++ b/data/enemies/rpgmaker.lisp
@@ -22,34 +22,21 @@
a)
(wear-of c))
(push (make-instance (if (malep c) 'yadfa-items:shendyt 'yadfa-items:kalasiris)) (wear-of c))))
-(progn
- (defclass diapered-skunk (potty-enemy skunk-boop-mixin) ()
- (:default-initargs
- :name "Diapered Skunk"
- :description "They spray their diapers when attacking. Their diapers reek of a smell of urine, feces, and skunk spray."
- :species "Skunk"
- :male (a:random-elt '(t nil))
- :bladder/contents (random 500)
- :bowels/contents (random 700)
- :watersport-chance 3
- :mudsport-chance 3
- :bitcoins-per-level 100
- :inventory (iter (for i from 0 to (random 10))
- (collect (make-instance 'yadfa-items:high-capacity-diaper)))
- :element-types '(#1=#.(make-instance 'yadfa-element-types:poison))
- :moves (make-instances yadfa-moves:spray yadfa-moves:face-sit)))
- (defclass diapered-skunk* (potty-enemy skunk-boop-mixin) ()
- (:default-initargs
- :name "Diapered Skunk"
- :species "Skunk"
- :male (a:random-elt '(t nil))
- :bladder/contents (random 500)
- :bowels/contents (random 700)
- :watersport-chance 3
- :mudsport-chance 3
- :bitcoins-per-level 100
- :element-types '(#1#)
- :moves (make-instances yadfa-moves:spray yadfa-moves:face-sit))))
+(defclass diapered-skunk (potty-enemy skunk-boop-mixin) ()
+ (:default-initargs
+ :name "Diapered Skunk"
+ :description "They spray their diapers when attacking. Their diapers reek of a smell of urine, feces, and skunk spray."
+ :species "Skunk"
+ :male (a:random-elt '(t nil))
+ :bladder/contents (random 500)
+ :bowels/contents (random 700)
+ :watersport-chance 3
+ :mudsport-chance 3
+ :bitcoins-per-level 100
+ :inventory (iter (for i from 0 to (random 10))
+ (collect (make-instance 'yadfa-items:high-capacity-diaper)))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:poison)
+ :moves (make-instances yadfa-moves:spray yadfa-moves:face-sit)))
(defmethod initialize-instance :after
((c diapered-skunk) &key (watersport-limit nil watersportp) (mudsport-limit nil mudsportp)
(wear nil wearp) &allow-other-keys)
@@ -107,6 +94,18 @@
(mess :messer character)
(set-status-condition 'yadfa-status-conditions:messing character))
t))))
+(defclass diapered-skunk* (potty-enemy skunk-boop-mixin) ()
+ (:default-initargs
+ :name "Diapered Skunk"
+ :species "Skunk"
+ :male (a:random-elt '(t nil))
+ :bladder/contents (random 500)
+ :bowels/contents (random 700)
+ :watersport-chance 3
+ :mudsport-chance 3
+ :bitcoins-per-level 100
+ :element-types '#.(coerce-element-types 'yadfa-element-types:poison)
+ :moves (make-instances yadfa-moves:spray yadfa-moves:face-sit)))
(defmethod initialize-instance :after
((c diapered-skunk*) &key (watersport-limit nil watersportp) (mudsport-limit nil mudsportp)
(wear nil wearp) (description nil descriptionp) &allow-other-keys)
@@ -166,38 +165,23 @@
(mess :messer character)
(set-status-condition 'yadfa-status-conditions:messing character))
t))))
-(progn
- (defclass diapered-dragon (potty-enemy) ()
- (:default-initargs
- :name "Diapered Dragon"
- :description "Keeps kobolds as pets. Waits until the last minute because \{,s}he's not some hatchling that has to use the potty all the time\""
- :species "Dragon"
- :male (a:random-elt '(t nil))
- :bladder/contents (random 500)
- :bowels/contents (random 700)
- :bitcoins-per-level 100
- :wear (list (make-instance 'yadfa-items:black-leather-jacket)
- (make-instance 'yadfa-items:high-capacity-diaper))
- :inventory (nconc (iter (for i from 0 to (random 20))
- (collect (make-instance 'yadfa-items:high-capacity-diaper)))
- (iter (for i from 0 to (random 20))
- (collect (make-instance 'yadfa-items:kurikia-thick-diaper))))
- :element-types '(#1=#.(make-instance 'yadfa-element-types:dragon) #.(make-instance 'yadfa-element-types:fire)
- #.(make-instance 'yadfa-element-types:flying))
- :moves (make-instances yadfa-moves:tickle yadfa-moves:roar yadfa-moves:mush yadfa-moves:fire-breath)))
- (defclass dergy (bladder-enemy) ()
- (:default-initargs
- :name "Dergy"
- :description "An alien dragon like species that liquefies its food, so he lacks bowels as everything goes through its bladder. But since all that mass is forced through its bladder now, it fills up much quicker, so they have to go more often and can't hold it in for as long."
- :species "Dergy"
- :malep (a:random-elt '(t nil))
- :bitcoins-per-level 100
- :bladder/fill-rate (* (/ 14000 24 60) 2)
- :wear (list (make-instance 'yadfa-items:kurikia-thick-rubber-diaper))
- :inventory (iter (for i from 0 to (random 20))
- (collect (make-instance 'yadfa-items:kurikia-thick-rubber-diaper)))
- :element-types '(#1#)
- :moves (make-instances yadfa-moves:tickle yadfa-moves:roar yadfa-moves:mush yadfa-moves:fire-breath))))
+(defclass diapered-dragon (potty-enemy) ()
+ (:default-initargs
+ :name "Diapered Dragon"
+ :description "Keeps kobolds as pets. Waits until the last minute because \{,s}he's not some hatchling that has to use the potty all the time\""
+ :species "Dragon"
+ :male (a:random-elt '(t nil))
+ :bladder/contents (random 500)
+ :bowels/contents (random 700)
+ :bitcoins-per-level 100
+ :wear (list (make-instance 'yadfa-items:black-leather-jacket)
+ (make-instance 'yadfa-items:high-capacity-diaper))
+ :inventory (nconc (iter (for i from 0 to (random 20))
+ (collect (make-instance 'yadfa-items:high-capacity-diaper)))
+ (iter (for i from 0 to (random 20))
+ (collect (make-instance 'yadfa-items:kurikia-thick-diaper))))
+ :element-types '#.(coerce-element-types '(yadfa-element-types:dragon yadfa-element-types:fire yadfa-element-types:flying))
+ :moves (make-instances yadfa-moves:tickle yadfa-moves:roar yadfa-moves:mush yadfa-moves:fire-breath)))
(defclass diapered-dragon* (diapered-dragon pantsable-character) ()
(:default-initargs
:description "Keeps kobolds as pets. Wears pants to hide {his,her} padding. Waits until the last minute because \"{,s}he's not some hatchling that has to use the potty all the time\""
@@ -215,3 +199,16 @@
(setf (get 'diapered-kobold 'change-class-target) 'yadfa-allies:raptor)
(defmethod change-class-text ((class raptor))
(format nil "~a was adopted and diapered" (name-of class)))
+(defclass dergy (bladder-enemy) ()
+ (:default-initargs
+ :name "Dergy"
+ :description "An alien dragon like species that liquefies its food, so he lacks bowels as everything goes through its bladder. But since all that mass is forced through its bladder now, it fills up much quicker, so they have to go more often and can't hold it in for as long."
+ :species "Dergy"
+ :malep (a:random-elt '(t nil))
+ :bitcoins-per-level 100
+ :bladder/fill-rate (* (/ 14000 24 60) 2)
+ :wear (list (make-instance 'yadfa-items:kurikia-thick-rubber-diaper))
+ :inventory (iter (for i from 0 to (random 20))
+ (collect (make-instance 'yadfa-items:kurikia-thick-rubber-diaper)))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:dragon)
+ :moves (make-instances yadfa-moves:tickle yadfa-moves:roar yadfa-moves:mush yadfa-moves:fire-breath)))
diff --git a/data/moves/pokemon.lisp b/data/moves/pokemon.lisp
index 355efa9..c1c49c8 100644
--- a/data/moves/pokemon.lisp
+++ b/data/moves/pokemon.lisp
@@ -12,23 +12,11 @@
name
name)
(setf (health-of target) 0))
-(progn
- (defclass watersport (wet-move-mixin) ()
- (:default-initargs
- :name "Watersport"
- :description "Soak your diapers"
- :element-types '(#1=#.(make-instance 'yadfa-element-types:abdl))))
- (defclass mudsport (mess-move-mixin) ()
- (:default-initargs
- :name "Mudsport"
- :description "mess your diapers"
- :element-types '(#1#)))
- (defclass mudbomb (mess-move-mixin debuff) ()
- (:default-initargs
- :name "Mud Bomb"
- :description "massively mess your diapers, never fails"
- :energy-cost 5
- :element-types '(#1# #.(make-instance 'yadfa-element-types:poison)))))
+(defclass watersport (wet-move-mixin) ()
+ (:default-initargs
+ :name "Watersport"
+ :description "Soak your diapers"
+ :element-types '#.(coerce-element-types 'yadfa-element-types:abdl)))
(defmethod attack ((target base-character) (user base-character) (attack watersport)
&aux (name (name-of user)))
(declare (ignore target))
@@ -36,6 +24,11 @@
(format t "But it failed~%")
(progn (wet :wetter user)
(format t "~a wet ~a~%" name (if (malep user) "himself" "herself")))))
+(defclass mudsport (mess-move-mixin) ()
+ (:default-initargs
+ :name "Mudsport"
+ :description "mess your diapers"
+ :element-types '#.(coerce-element-types 'yadfa-element-types:abdl)))
(defmethod attack ((target base-character) (user base-character) (attack mudsport)
&aux (name (name-of user)))
(declare (ignore target))
@@ -45,6 +38,12 @@
(format t "~a messed ~a~%"
name
(if (malep user) "himself" "herself")))))
+(defclass mudbomb (mess-move-mixin debuff) ()
+ (:default-initargs
+ :name "Mud Bomb"
+ :description "massively mess your diapers, never fails"
+ :energy-cost 5
+ :element-types '#.(coerce-element-types '(yadfa-element-types:abdl yadfa-element-types:poison))))
(defmethod attack ((target base-character) (user base-character) (attack mudbomb))
(write-line "But it failed."))
(defmethod attack ((target base-character) (user bowels-character) (attack mudbomb)
@@ -72,7 +71,7 @@
(:default-initargs
:name "Tackle"
:description "Tackles the enemy"
- :element-types '(#.(make-instance 'yadfa-element-types:normal))))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:normal)))
(defclass roar (move debuff) ()
(:default-initargs
:name "Roar"
@@ -96,7 +95,7 @@
:name "Bite"
:description "Bites the enemy"
:power 80
- :element-types '(#.(make-instance 'yadfa-element-types:dark))))
+ :element-types '#.(coerce-element-types 'yadfa-element-types:dark)))
(defclass scratch (damage-move) ()
(:default-initargs
:name "Scratch"
diff --git a/data/moves/regular.lisp b/data/moves/regular.lisp
index 157e402..df0102d 100644
--- a/data/moves/regular.lisp
+++ b/data/moves/regular.lisp
@@ -1,40 +1,10 @@
;;;; -*- mode: Common-Lisp; sly-buffer-package: "yadfa-moves"; coding: utf-8-unix; -*-
(in-package :yadfa-moves)
-(progn
- (defclass mush (move debuff) ()
- (:default-initargs
- :name "Mush"
- :description "Mush the target's diaper"
- :element-types '(#1=#.(make-instance 'yadfa-element-types:abdl))))
- (defclass spray (move debuff) ()
- (:default-initargs
- :name "Spray"
- :description "Spray the target with skunk spray. Also fills your pamps with skunk spray while you're at it."
- :energy-cost 5
- :element-types '(#2=#.(make-instance 'yadfa-element-types:poison))))
- (defclass face-sit (mess-move-mixin damage-move debuff) ()
- (:default-initargs
- :name "Face Sit"
- :energy-cost 3
- :power 40
- :description "Sits on the enemy's face and messes"
- :element-types '(#1# #2#)))
- (defclass teleporting-flood (wet-move-mixin) ()
- (:default-initargs
- :name "Teleporting Flood"
- :description "Flood your diapers, but enchants the diaper so it all teleports into someone else's diaper."
- :element-types '(#1#)))
- (defclass teleporting-mess (mess-move-mixin) ()
- (:default-initargs
- :name "Teleporting Mess"
- :description "Mess your diapers, but enchants the diaper so it all teleports into someone else's diaper."
- :element-types '(#1# #2#)))
- (defclass fart (mess-move-mixin debuff) ()
- (:default-initargs
- :name "fart"
- :description "Grosses out the enemies with gas. If poisoned or if desperate, you may end up messing yourself instead."
- :energy-cost 10
- :element-types '(#1# #2#))))
+(defclass mush (move debuff) ()
+ (:default-initargs
+ :name "Mush"
+ :description "Mush the target's diaper"
+ :element-types '#.(coerce-element-types 'yadfa-element-types:abdl)))
(defmethod attack ((target base-character) (user base-character) (attack mush))
(declare (ignore attack))
(if (filter-items (wear-of user) 'incontinence-product)
@@ -114,6 +84,12 @@
(progn
(format t "~a tries to pants ~a~%" (name-of user) (name-of target))
(format t "The attack has no effect on ~a~%" (name-of target))))))
+(defclass spray (move debuff) ()
+ (:default-initargs
+ :name "Spray"
+ :description "Spray the target with skunk spray. Also fills your pamps with skunk spray while you're at it."
+ :energy-cost 5
+ :element-types '#.(coerce-element-types 'yadfa-element-types:poison)))
(defmethod attack ((target base-character) (user base-character) (attack spray))
(format t "~a used ~a~%" (name-of user) (name-of attack))
(let ((amount 50))
@@ -166,6 +142,13 @@
:power 60
:description "Breathes fire at the enemy"
:element-types '(#.(make-instance 'yadfa-element-types:fire))))
+(defclass face-sit (mess-move-mixin damage-move debuff) ()
+ (:default-initargs
+ :name "Face Sit"
+ :energy-cost 3
+ :power 40
+ :description "Sits on the enemy's face and messes"
+ :element-types '#.(coerce-element-types '(yadfa-element-types:abdl yadfa-element-types:poison))))
(defmethod attack ((target base-character) (user base-character) (self face-sit))
(let* ((m (mess :messer user))
(c (calculate-diaper-usage user)))
@@ -176,18 +159,34 @@
(format t "~a is grossed out by the smell~%" (name-of target))
(set-status-condition 'yadfa-status-conditions:skunked target))
(format t "~a is damaged by the impact~%" (name-of target))))
+(defclass teleporting-flood (wet-move-mixin) ()
+ (:default-initargs
+ :name "Teleporting Flood"
+ :description "Flood your diapers, but enchants the diaper so it all teleports into someone else's diaper."
+ :element-types '#.(coerce-element-types 'yadfa-element-types:abdl)))
(defmethod attack ((target base-character) (user base-character) (self teleporting-flood))
(if (< (bladder/contents-of user) (bladder/need-to-potty-limit-of user))
(format t "But it failed~%")
(progn (wet :wetter user :clothes (wear-of target))
(format t "~a gets a freaked expression on ~a face as ~a floods ~a's pamps~%" (name-of target) (if (malep target) "his" "her")
(name-of user) (name-of target)))))
+(defclass teleporting-mess (mess-move-mixin) ()
+ (:default-initargs
+ :name "Teleporting Mess"
+ :description "Mess your diapers, but enchants the diaper so it all teleports into someone else's diaper."
+ :element-types '#.(coerce-element-types '(yadfa-element-types:abdl yadfa-element-types:poison))))
(defmethod attack ((target base-character) (user base-character) (self teleporting-mess))
(if (< (bowels/contents-of user) (bowels/need-to-potty-limit-of user))
(format t "But it failed~%")
(progn (mess :messer user :clothes (wear-of target))
(format t "~a gets a freaked expression on ~a face as ~a messes ~a's pamps~%" (name-of target) (if (malep target) "his" "her")
(name-of user) (name-of target)))))
+(defclass fart (mess-move-mixin debuff) ()
+ (:default-initargs
+ :name "fart"
+ :description "Grosses out the enemies with gas. If poisoned or if desperate, you may end up messing yourself instead."
+ :energy-cost 10
+ :element-types '#.(coerce-element-types '(yadfa-element-types:abdl yadfa-element-types:poison))))
(defmethod attack ((target base-character) (user base-character) (attack fart))
(f:fmt t "But it failed." #\Newline))
(defmethod attack :around ((target base-character) (user bowels-character) (attack fart))
diff --git a/packages.lisp b/packages.lisp
index b2dc4b8..8cb51d7 100644
--- a/packages.lisp
+++ b/packages.lisp
@@ -128,6 +128,7 @@
#:toggle-onesie
#:type-match
#:coerce-element-type
+ #:coerce-element-types
#:fill-bladder
#:fill-bowels
#:bladder/fill-rate