Smell restrictions (Hugo example)
From IFWiki
!::
! Smell Restrictions Example by Roody Yogurt for IFWiki
!::
#include "verblib.g" ! Verb Library
! we must define the "smell" verb if the verbstub files haven't been included
#ifclear _VERBSTUB_H
verb "smell", "sniff", "inhale", "breathe"
* DoSmell
* object DoSmell
#endif
#include "hugolib.h" ! Standard Hugo Library
!:: Game Initialization routine
routine init
{
prompt = ">"
window 0 ! resets the windows in case the player is restarting a game
cls
DEFAULT_FONT = PROP_ON
Font(DEFAULT_FONT)
player = you
location = street
move player to location
old_location = location
FindLight(location)
DescribePlace(location)
location is visited
CalculateHolding(player)
}
!:: Main game loop
routine main
{
counter = counter + 1
run location.each_turn
runevents
RunScripts
if speaking not in location
speaking = 0
PrintStatusLine
}
player_character you "you"
{
before
{
actor DoSmell
{
if (object ~= you,spacesuit) and spacesuit is worn
"You can't smell anything while wearing the spacesuit."
else
return false
}
}
after
{
object DoSmell
{
"Forgot your deodorant, did you?"
}
}
}
room street "Street"
{
long_desc
"You are in a street. The sewer is below you."
d_to sewer
after
{
location DoSmell
{
"You pick up a faint odour from below."
}
}
}
object flower "flower"
{
article "a"
noun "flower"
after
{
object DoSmell
{
"It smells wonderful."
}
}
in street
}
object spacesuit "spacesuit"
{
article "a"
noun "spacesuit" "suit"
after
{
object DoSmell
{
! regular response is "You smell nothing special."
"You smell nothing special about the spacesuit."
}
}
nearby ! puts it by last-defined object
is clothing
}
room sewer "Sewer"
{
! (the other way of doing a long_desc)
long_desc : "You are in a sewer. The street is above you."
u_to street
}
object sewage "sewage"
{
article "some"
noun "sewage"
is static
react_before
{
if verbroutine = &DoSmell and object ~= self and spacesuit is not worn
{
"The disgusting reek of the sewage overwhelms your nose. You can't
smell anything else."
}
else
return false
}
after
{
object DoSmell
{
"It reeks."
}
}
in sewer
}
! The Hugo library doesn't normally do much with SMELL, other than a stub
! routine in the appropriately-named "verbstub" file. This is a replacement
! based on DoListen.
#ifset _VERBSTUB_H
replace DoSmell
{
if not object
{
if not location.after
{
"You smell nothing special."
return true
}
verbroutine = ""
return true
}
elseif not object.after
"You smell nothing special."
! we have to clear verbroutine or else location.after.DoListen will run again
verbroutine = ""
return true
}
#else
routine DoSmell
{
if not object
{
if not location.after
{
"You smell nothing special."
return true
}
verbroutine = ""
return true
}
elseif not object.after
"You smell nothing special."
! we have to clear verbroutine or else location.after.DoListen will run again
verbroutine = ""
return true
}
#endif