--- ../../P/library/First.h Thu Aug 30 17:51:12 2001 +++ First.h Sat Mar 13 10:11:39 2004 @@ -3670,7 +3670,7 @@ wn = match_from; TryGivenObject(thing); MEDDLE_EARLY_REASON: - if (thing.meddle_early == 0 or NULL) return; + if (~~(thing provides meddle_early) || thing.&meddle_early-->0 == 0 or NULL) return; #ifdef DEBUG; if (parser_trace>=2) { print "[Considering meddle_early for ", (the) thing, "]^"; } @@ -3678,7 +3678,7 @@ a = RunRoutines(thing, meddle_early); if (parser_one == 0) parser_one = a; MEDDLE_LATE_REASON: - if (thing.meddle_late == 0 or NULL) return; + if (~~(thing provides meddle_late) || thing.&meddle_late-->0 == 0 or NULL) return; #ifdef DEBUG; if (parser_trace>=2) print "[Considering meddle_late for ", (the) thing, "]^"; @@ -3686,7 +3686,7 @@ a = RunRoutines(thing, meddle_late); if (parser_one == 0) parser_one = a; MEDDLE_LATE_LATE_REASON: - if (thing.meddle_late_late == 0 or NULL) return; + if (~~(thing provides meddle_late_late) || thing.&meddle_late_late-->0 == 0 or NULL) return; #ifdef DEBUG; if (parser_trace >= 2) print "[Considering meddle_late_late for ",(the) thing,"]^"; @@ -3694,7 +3694,7 @@ a = RunRoutines(thing, meddle_late_late); if (parser_one == 0) parser_one = a; MEDDLE_REASON: - if (thing.meddle == 0 or NULL) return; + if (~~(thing provides meddle) || thing.&meddle-->0 == 0 or NULL) return; #ifdef DEBUG; if (parser_trace >= 2) print "[Considering meddle for ",(the) thing,"]^"; @@ -3702,7 +3702,7 @@ a = RunRoutines(thing, meddle); if (parser_one == 0) parser_one = a; EACH_TURN_REASON: - if (thing.each_turn == 0 or NULL) return; + if (~~(thing provides each_turn) || thing.&each_turn-->0 == 0 or NULL) return; #ifdef DEBUG; if (parser_trace>=2) { print "[Considering each_turn for ", (the) thing, "]^"; } --- ../../P/library/Middle.h Thu Aug 30 17:51:12 2001 +++ Middle.h Sat Mar 13 10:22:18 2004 @@ -2460,10 +2460,11 @@ ancestor = CommonAncestor(actor, x); if (ancestor == 0) - { if (x in FloatingHome) os = actor.location; + { + if (x in FloatingHome) os = actor.location; else os = ObjectScopedBySomething(x); if (os) - { if (f && x has static) return ActionMessage(##Take, 7, os); + { if (f && (x has static)) return ActionMessage(##Take, 7, os); else ancestor = CommonAncestor(actor, os); } else return ActionMessage(##Take, 8, x); @@ -2474,9 +2475,10 @@ if (f && ancestor == x) return ActionMessage(##Take, 4, x); i = parent(x); - if (i hasnt animate && i notin Map && positionof(x) == 0) + if (f && i hasnt animate && i notin Map && positionof(x) == 0) + { return ActionMessage(##Take, 7, i); - + } if (actor ~= ancestor) { i = parent(actor); j = actor; while (i ~= ancestor) @@ -3596,7 +3598,7 @@ if (actor notin noun || actor hasnt upon) return ActionMessage(##GetOff, 2); - <>; + <>; ]; [ ExitFromSub; @@ -3607,7 +3609,7 @@ { if (TestExit(noun, outdir)) <>; return ActionMessage(##Go, 15); } - <>; + <>; ]; [ ExitSub p ppos mes; @@ -3830,15 +3832,15 @@ if (descin ofclass Rooms) objectloop(o in FloatingHome) - { if (IsFoundIn(o, descin) && o.describe ~= 0 or NULL) - HandleDescribe(o); + { + if (IsFoundIn(o, descin) && o hasnt concealed && o provides describe && o.&describe-->0 ~= 0 or NULL) + HandleDescribe(o); } objectloop (o in descin) give o ~workflag; objectloop (o in descin) - if ((o hasnt concealed || o has static) - && IndirectlyContains(o, actor) == 0) + if (IndirectlyContains(o, actor) == 0) { if (o has concealed) { if (o has supporter && SayWhatsOn(o)) @@ -3846,7 +3848,7 @@ continue; } give o workflag; k++; - if (o.describe ~= 0 or NULL) + if (o provides describe && o.&describe-->0 ~= 0 or NULL) { j = HandleDescribe(o); if (j) { flag = 1; give o ~workflag; k--; } }