X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=mudsync%2Froom.scm;fp=mudsync%2Froom.scm;h=c4305233672755dad1f35c50057de342ec40ae33;hp=d201c052a96cd8536e94f65b511af79966da0273;hb=50cd2aba8f13ec7aecb58a683aa55ae665cf83ab;hpb=36042544b6defa138f348f093f895722a472e1ba diff --git a/mudsync/room.scm b/mudsync/room.scm index d201c05..c430523 100644 --- a/mudsync/room.scm +++ b/mudsync/room.scm @@ -35,10 +35,7 @@ ;;; ===== (define-class () - ;; Used for wiring - (to-symbol #:init-keyword #:to-symbol) - ;; The actual address we use - (to-address #:init-keyword #:address) + (to #:init-keyword #:to) ;; Name of the room (@@: Should this be names?) (name #:getter exit-name #:init-keyword #:name) @@ -77,9 +74,6 @@ (define room-actions (build-actions - ;; desc == description - (init (wrap-apply room-init)) - (wire-exits! (wrap-apply room-wire-exits!)) (cmd-go (wrap-apply room-cmd-go)) (cmd-go-where (wrap-apply room-cmd-go-where)) (announce-entrance (wrap-apply room-announce-entrance)) @@ -113,24 +107,6 @@ ;; @@: Can remove this indirection once things settle #:init-value (wrap-apply room-action-dispatch))) -(define (room-init room message) - (room-wire-exits! room)) - -(define (room-wire-exits! room) - "Actually hook up the rooms' exit addresses to the rooms they -claim to point to." - (for-each - (lambda (exit) - (define new-exit - (message-ref - (<-wait room (gameobj-gm room) 'lookup-special - #:symbol (slot-ref exit 'to-symbol)) - 'room-id)) - - (slot-set! exit 'to-address new-exit)) - - (room-exits room))) - (define-mhandler (room-cmd-go room message direct-obj) (define exit (find @@ -138,7 +114,9 @@ claim to point to." (equal? (exit-name exit) direct-obj)) (room-exits room))) (define to-address (if exit - (slot-ref exit 'to-address) + ;; Get the exit, but resolve it dynamically + ;; in case it's a special + (dyn-ref room (slot-ref exit 'to)) #f)) (define player-name (message-ref (<-wait room (message-from message) @@ -156,7 +134,7 @@ claim to point to." (<- room to-address 'announce-entrance #:who-entered (message-from message)) ;; Have the new room update the player to the new location - (<- room (slot-ref exit 'to-address) 'look-room + (<- room to-address 'look-room #:to-id (message-from message))) (else (<- room (message-from message) 'tell