Hello folks. I use SLIME for all my Common Lisp interaction. I recently implemented a custom prototype-based object system for a roguelike game project i'm doing. With the use of reader macros and some code walking, I can write methods like this:
(define-method equip cell (item &optional slot) (when [is-equipment item] (let ((match [equipment-match self item])) (setf (getf <equipment> (or slot (first match))) item) [add-category item :equipped] ;; remove from inventory [remove-item self item])))
The syntax is [method-name object &rest args] and <foo> represents (field-value self :foo)
Another example:
(define-method forward world (method-key &rest args) "Send unhandled messages to the player object. This is where most world computations start, because nothing happens in a roguelike until the user has pressed a key." (let ((player <player>) (phase-number <phase-number>)) (with-message-queue <message-queue> ;; send the message, possibly generating queued messages (apply #'send method-key player args) ;; process any messages that were generated [process-messages self] ;; update the player's action points [take-turn player phase-number] ;; if this is the player's last turn, begin the cpu phase ;; otherwise, stay in player phase and exit (unless [needs-turn player phase-number] [run-cpu-phase self]))) nil)
I would like this to work with SLIME's arguments list lookup and so on. My system retains all the documentation and arglist info at runtime so I could probably hook this up somehow.
Any suggestions on how I could make this work with SLIME?