Hey Cloudee1,
Welcome back

ok I think I've understood what you're suggesting. It seems to work fine. Does it look correct? When ego is mounted on the bike and changes rooms it maintains the bike view. When dismounted it uses the normal ego view.
The only thing left is to see when starting in a room with gPreviousRoomNumber if there is a way when using the bike view to automatically push the co-ordinates a little over, as the bike view is longer. So if there is a control line on the edge of the room he is going into it trips it and will force ego to go back into the room he came from. It would look crap if I manually edit these coordinates to take into account the new bike view size and make them further away from the edge of the screen, as when using the normal ego view he will look far away from the edge of the screen.
I might try regions as lskovlun mentioned, instead of using OneOf gRoomNumber. Not sure which would use less memory?
((== gPreviousRoomNumber 005) (gEgo posn: 300 167 loop: 1)
)I've added this to my main.sc
((Said 'use,mount,ride/bike')
; Check if already on bike using DEFAULT view
(if (== gDefaultEgoView 719) ; Use 719 view number for bike
(Print 0 163) ; "You're already on your bike."
(return TRUE)
)
(cond
((not (gEgo has: 15))
(Print 0 158) ; "You don't have a bike."
)
((OneOf gRoomNumber 6 7 8 11 14 15 16 17 18 19 29 21 22 24 30 31 33 35 36 39 40 41 42 43 44 45 46 47 48 50 51 52 53 55 56 90 91 92 93 94 95 97 98 100 101 102 103 104 111 120 121 122 123)
(Print 0 159) ; "Sorry, you can't ride your bike here."
)
(else
; Change current view AND update persistent default
(gEgo view: 719) ; or 719 for bike view
(= gDefaultEgoView 719) ; <<< KEY: Set persistent default!
(Print 0 160) ; "You mount the bike."
)
)
(return TRUE)
)
((Said 'dismount,(get<off)/bike')
(if (== gDefaultEgoView 719) ; Check DEFAULT view, not current
(gEgo view: 0)
(= gDefaultEgoView 0) ; <<< KEY: Reset persistent default!
(Print 0 161) ; "You get off the bike and stuff it into your pocket."
else
(Print 0 162) ; "You're not riding anything."
)
(return TRUE)
)(procedure (SetUpEgo theLoop theView)
(PlayerControl)
(gEgo edgeHit: EDGE_NONE)
; Handle -1 parameters (use defaults)
(if (== theLoop -1)
(= theLoop (gEgo loop?)) ; Keep current loop
)
(if (== theView -1)
(= theView gDefaultEgoView) ; Use persistent default view!
)
(switch argc
(0
(SetUpActor gEgo (gEgo loop?) gDefaultEgoView) ; Use default
)
(1
(SetUpActor gEgo theLoop gDefaultEgoView) ; Use default
)
(2
(SetUpActor gEgo theLoop theView) ; Use specified view
)
)
)