Author Topic: EasyTUTU: BreakingPoint() trigger for Imoen  (Read 5061 times)

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6253
  • Gender: Female
  • The perfect moment is now.
EasyTUTU: BreakingPoint() trigger for Imoen
« on: May 18, 2007, 01:26:44 AM »
We hit this thing with Imoen: basically, that she tries to leave, when the party's reputation is 7. :(

cmorgan has confirmed that this is default EasyTUTU behavior(that is, that BG1 NPC doesn't have anything to do with it). What I want to know is, does EasyTUTU change original BG1 triggers, or is it like this with Imoen in the unchanged BG1, too(that she wants to leave as soon as PC asks her to steal something for him, she fails, and reputation drops below the neutral level :) )?


Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #1 on: May 18, 2007, 05:15:55 AM »
I've never touched anything in this area.  If it's present in clean EasyTutu, I would suspect clean Tutu 4 has it as well.  Not sure on vanilla BG1.
EasyTutu: Tutu installation made simple.

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6253
  • Gender: Female
  • The perfect moment is now.
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #2 on: May 18, 2007, 05:21:32 AM »
Then it is possible that it is a bug in EasyTUTU/TUTU4 both? What can be done about it, what do you think?

Miloch's post in the topic I mentioned above gives some insight on vanilla BG1; personally, I am inclined to think it might be a glitch in both TUTU versions.

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #3 on: May 18, 2007, 06:38:59 PM »
Hello -

So what must be done to reproduce this behavior?  Simply set rep to 7?  I'll give it a try.
EasyTutu: Tutu installation made simple.

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #4 on: May 18, 2007, 06:50:04 PM »
Hello -

Well, I set rep to 7, activated party AI, changed maps a couple of times, slept, and even tried to initiate dialog with Imoen.  Nothing.  What am I missing here?
EasyTutu: Tutu installation made simple.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1424
  • Gender: Male
  • Searcher of Bugs
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #5 on: May 18, 2007, 08:38:52 PM »
What we are missing is a clear understanding of how Reputation and Happiness work in the BG2 engine :(

Player report on Tutu and BG2 is that with low reputations, Imoens' BreakPoint() triggers, and the P file leave party dialogue triggers. Usually it hangs. The same happens with Jaheira at high reputation levels - at 19 or 20, she leaves the party (in both cases this is on unmodded or BG1 NPC'd installs, without modification of the 2da ). Changing Jaheira to Neutral Good stops this, as does applying the Happy Patch, which changes this:
Code: [Select]
// stop rep complaints
COPY_EXISTING ~happy.2da~ ~override~
  FOR (row = 0 ; row < 8 ; row = row + 1) BEGIN
    SET_2DA_ENTRY %row% 1 4 ~0~
  END
  FOR (row = 0 ; row < 5 ; row = row + 1) BEGIN
    SET_2DA_ENTRY %row% 2 4 ~0~
  END
  FOR (row = 18 ; row < 20 ; row = row + 1) BEGIN
    SET_2DA_ENTRY %row% 2 4 ~0~
  END
  FOR (row = 12 ; row < 20 ; row = row + 1) BEGIN
    SET_2DA_ENTRY %row% 3 4 ~0~
  END
  BUT_ONLY_IF_IT_CHANGES
and this in the DPLAYER2.BCS (both Tutu and BG2) is supposed to trigger the "I'm outta here" speech if BreakingPoint(0) is reached:
Code: [Select]
IF
  Breakingpoint()
THEN
  RESPONSE #100
    Setglobal("IHATEYOUALL","LOCALS",1)
    Setleavepartydialoguefile()
    Wait(1)
    Startdialognoset(Player1)
    Changeaiscript("",DEFAULT)
    Setglobal("IHATEYOUALL","LOCALS",0)
END

IF
  Global("IHATEYOUALL","LOCALS",1)
  Inparty(Myself)
THEN
  RESPONSE #100
    Setleavepartydialoguefile()
    Wait(1)
    Startdialognoset(Player1)
    Changeaiscript("",DEFAULT)
    Leaveparty()
    Setglobal("IHATEYOUALL","LOCALS",0)
END

Players report different experiences when they set reputation in SK, and when they do an in-game action, for instance, SKing rep does not help, as the reputation is not read by the engine until it *changes*, at which point the happy.2da and reputation.2da et all seem to interact. SK'ing the rep does not change the reactions, while killing an innocent does. ( this I can report from personal experience :( ).

We know both EasyTutu and Tutu use HappinessLT(0) triggers for the P file dialogue option to leave the party in disgust.

We know the same values in BG2 NPCs are HappinessLT(-290) or HappinessLT(-250), etc.

We know that in BGT and Tutu v4 and EasyTutu, players report the same errors - Imoen is supposed to stick with you, but at low rep leaves.

We know that BG1 uses a different mechanism, as they have the P file option for leaving as ~False~, which in BG1 scripting means it is only approached as a directly called state (though how they call that on the P file, I don't know).
« Last Edit: May 18, 2007, 09:11:37 PM by cmorgan »

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #6 on: May 18, 2007, 09:04:30 PM »
Hello -

Quote
SK'ing the rep does not change the reactions, while killing an innocent does.

OK, so that's what I'm missing.  I'll disgrace myself the old-fashioned way and report back.
EasyTutu: Tutu installation made simple.

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #7 on: May 18, 2007, 09:33:31 PM »
Hello -

I can reproduce the departure if I force-talk her after killing Kolssed in FW2700.
EasyTutu: Tutu installation made simple.

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #8 on: May 18, 2007, 09:43:56 PM »
Hello -

It's easy enough to suppress the issue if the desired behavior is for Imoen never to depart.  Some minor (although admittedly ham-handed) edits to DPLAYER2.BCS, _IMOENP.DLG and _IMOEN2.DLG accomplished that.

Or is she supposed to depart under more dire circumstances?  I wouldn't know, I'm more of a neutral / good spectrum player.
EasyTutu: Tutu installation made simple.

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6253
  • Gender: Female
  • The perfect moment is now.
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #9 on: May 19, 2007, 02:57:49 AM »
I think that it would make sense to bring it to BG2 level: i.e. good/neutral NPCs leave at Rep=1, or their Happiness level at -299, as cmorgan pointed out.

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #10 on: May 19, 2007, 07:57:02 AM »
Hello -

Well, what I'm asking is: when cmorgan says...

Quote
Imoen is supposed to stick with you

...does he mean forever, or only to a point?  I'm pretty sure I've heard it said before that Imoen is supposed to be "immune" to the forces which drive other party members to leave.
EasyTutu: Tutu installation made simple.

Offline Kulyok

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 6253
  • Gender: Female
  • The perfect moment is now.
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #11 on: May 19, 2007, 08:18:34 AM »
She has a definite leaving dialogue, so I am sure she is supposed to have a breaking point - just not as high as she does now:

Quote
I s'pose I'll be going. We're friends and all, but I guess I'll just wait 'till you change yer tune. I'll be around when you do.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1424
  • Gender: Male
  • Searcher of Bugs
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #12 on: May 19, 2007, 09:27:35 AM »
I think this is beyond my knowledge level, but I'll take a guess one step farther than Kulyok - she has two leaving dialogues, just like most other NPCs. The first is the one Kulyok gives, which is the "I'll wait here while you run around with your questing"; the second is the "Youv'e changed" thing.

This leads me to believe that original intent was to have Imoen playable by both good and evil PCs, but at some extreme point she was supposed to break and leave based on very low reputation (BG1) which is now (Reputation+Happiness)=BreakingPoint()

I would like to mirror your changes, Macready, to fix Tutu v4 before playing BG1NPC - and you might want to toss a line to Ascension64 as I know last summer we were both dealing with bug reports on reputation stuff...

what I don't know is if simply changing the Happiness trigger on the P file will do the job, as I don't understand specifics of BreakingPoint() and if it is used in other situations (grumbling, morale, etc.).

Offline Macready

  • Planewalker
  • *****
  • Posts: 1801
    • EasyTutu
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #13 on: May 19, 2007, 09:29:58 AM »
Hello -

what I don't know is if simply changing the Happiness trigger on the P file will do the job

No.  _IMOEN2 has an "adios" state as well, which at the very least, will fire on a force-talk.
EasyTutu: Tutu installation made simple.

Offline cmorgan

  • Planewalker
  • *****
  • Posts: 1424
  • Gender: Male
  • Searcher of Bugs
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #14 on: May 19, 2007, 01:52:11 PM »
[this is for your research info - the behavior is the same on vanilla Tutu v4 and EasyTutu, and I think on BGT, too, but I am not sure - here's what we have done to try to clean up a little]

We false that out on BG1 NPC, to allow the PID to function correctly;

in X#JFIX_TUTU.D, Core Fixes - unattainable variable equivalent to ~False~ but undoable by CLUAConsole or script, in case someone needs to use/modify the original JFile "Leave FOREVAR" talk...
Code: [Select]
/* Cleaning J's of not conditionals */
REPLACE_STATE_TRIGGER ~_AJANTJ~ 0 ~Global("AjantisLeave","GLOBAL",0) HappinessLT(Myself,0)~
REPLACE_STATE_TRIGGER ~_AJANTJ~ 1 ~Global("X#JCleanAjantis","GLOBAL",1)~
REPLACE_STATE_TRIGGER ~_ALORAJ~ 0 ~Global("X#JCleanAlora","GLOBAL",1)~ 1 2
REPLACE_STATE_TRIGGER ~_BRANWJ~ 0 ~Global("X#JCleanBranwen","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_CORANJ~ 7 ~Global("X#JCleanCoran","GLOBAL",1)~ 8
REPLACE_STATE_TRIGGER ~_DYNAHJ~ 0 ~Global("X#JCleanDynaheir","GLOBAL",1)~ 1 2 3 4 5 6 7 8 9 10 11
REPLACE_STATE_TRIGGER ~_EDWINJ~ 1 ~Global("X#JCleanEdwin","GLOBAL",1)~ 2 3
REPLACE_STATE_TRIGGER ~_ELDOTJ~ 12 ~Global("X#JCleanEldoth","GLOBAL",1)~ 13 14 15
REPLACE_STATE_TRIGGER ~_FALDOJ~ 0 ~Global("X#JCleanFaldorn","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_GARRIJ~ 0 ~Global("X#JCleanGarrick","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_JAHEIJ~ 0 ~Global("X#JCleanJaheira","GLOBAL",1)~ 1 2 3
REPLACE_STATE_TRIGGER ~_KAGAIJ~ 2 ~Global("X#JCleanKagain","GLOBAL",1)~ 3
REPLACE_STATE_TRIGGER ~_KHALIJ~ 0 ~Global("X#JCleanKhalid","GLOBAL",1)~ 1 2 3
REPLACE_STATE_TRIGGER ~_KIVANJ~ 0 ~Global("X#JCleanKivan","GLOBAL",1)~ // zeroing out no condition leave dialogue
// ADD_TRANS_ACTION ~_KIVANJ~ BEGIN 0 END BEGIN END ~SetGlobal("X#KivanWarning","GLOBAL",2)~
REPLACE_STATE_TRIGGER ~_KIVANJ~ 1 ~Global("X#KivanJClean","GLOBAL",2)~ // zeroing out no condition leave dialogue
REPLACE_STATE_TRIGGER ~_MINSCJ~ 2 ~Global("X#JCleanMinsc","GLOBAL",1)~ 3 4 5 6 7
REPLACE_STATE_TRIGGER ~_MONTAJ~ 0 ~Global("X#JCleanMontaron","GLOBAL",1)~ 1 2 3 4
REPLACE_STATE_TRIGGER ~_QUAYLJ~ 0 ~Global("X#JCleanQuayle","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_SAFANJ~ 0 ~Global("X#JCleanSafana","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_SHARTJ~ 2 ~Global("X#JCleanSharteel","GLOBAL",1)~ 3
REPLACE_STATE_TRIGGER ~_SKIEJ~ 0 ~Global("X#JCleanSkie","GLOBAL",1)~ 1 2 3
REPLACE_STATE_TRIGGER ~_TIAXJ~ 0 ~Global("X#JCleanTiax","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_VICONJ~ 0 ~Global("X#JCleanViconia","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_XANJ~ 0 ~Global("X#JCleanXan","GLOBAL",1)~ 1
REPLACE_STATE_TRIGGER ~_XZARJ~ 3 ~Global("X#JCleanXzar","GLOBAL",1)~ 4 5 6
REPLACE_STATE_TRIGGER ~_YESLIJ~ 0 ~Global("X#JCleanYeslick","GLOBAL",1)~ 1

Not that it matters to EasyTutu, but for your own research purposes, we modify the DPLAYER2.BCS on Tutu/EasyTutu only, to split that "cycle" listed above into half-BCS, half-D, because we thought the reason that the BreakingPoint() dialogues were hanging was because the cycle was being interrupted - code for moving the PFile materials looks like this:

we ignore the J file, because our core fixes remove these entries (they were uncalled in the original game, meaning they would stack up when BreakingPoint() was reached and the next StartDialogueNoSet() or Force Talk would result in leaving and a bug report...)

then we modify DLPAYER2.BCS
in tp2,
Code: [Select]
    /* Changing DPLAYER2.bcs to stop BreakingPoint SDNS from hanging Tutu Only */
    COPY_EXISTING ~DPLAYER2.bcs~ ~override~
      DECOMPILE_BCS_TO_BAF
        REPLACE_TEXTUALLY ~!InParty(Myself)~ ~False()~
        REPLACE_TEXTUALLY ~ChangeAIScript("",DEFAULT)~ ~~
        REPLACE_TEXTUALLY ~SetGlobal("IHATEYOUALL","LOCALS",0)~ ~~
      COMPILE_BAF_TO_BCS
    BUT_ONLY_IF_IT_CHANGES

    EXTEND_TOP ~DPLAYER2.bcs~ ~BG1NPC/Core/BAF/X#DPLYR2.BAF~

Contents of ~BG1NPC/Core/BAF/X#DPLYR2.BAF~
Code: [Select]
IF
!InParty(Myself)
HPGT(Myself,0)
THEN
RESPONSE #100
SetLeavePartyDialogueFile()
StartDialogNoSet(Player1)
ChangeAIScript("",DEFAULT)
END

Adding back the missing parts to the Dialogue:
Code: [Select]
/* Patching "unhappiness" P-file entries */
ADD_TRANS_ACTION ~_YESLIP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_XZARP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_XZARP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_VICONP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_XANP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_TIAXP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_SKIEP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_SKIEP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_SHARTP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_SAFANP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_QUAYLP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_MONTAP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_MONTAP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_MINSCP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_MINSCP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_KIVANP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_KHALIP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_KHALIP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_KAGAIP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_JAHEIP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_JAHEIP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_IMOENP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_GARRIP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_ELDOTP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_ELDOTP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_EDWINP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_DYNAHP~ BEGIN 2 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_DYNAHP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_CORANP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_BRANWP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_ALORAP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_AJANTP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~
ADD_TRANS_ACTION ~_FALDOP~ BEGIN 3 END BEGIN END ~SetGlobal("IHATEYOUALL","LOCALS",0) ChangeAIScript("",DEFAULT)~

REPLACE_ACTION_TEXT ~_MINSC~ ~ActionOverride("jaheira",LeaveParty())[^!]*ActionOverride("jaheira",EscapeArea())~ ~ActionOverride("dynaheir",LeaveParty()) ActionOverride("dynaheir",EscapeArea())~

Sorry if I am cluttering the thread - just trying to be helpful and have all the data I can get for you organized and at your fingertips :)

erik

  • Guest
Re: EasyTUTU: BreakingPoint() trigger for Imoen
« Reply #15 on: May 21, 2007, 08:56:59 AM »
As I said over in the BG1NPC forum, I'm suspecting that BreakingPoint triggers the "I'm annoyed with you, but not going just yet" lines if nothing matches in the npc's script. In Imoen's case, that's preempted by the if happiness<0 test, and things go downhill from there.

Did that make sense?

So changing the happiness test to BG2 levels would make sense, from my viewpoint.

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
What color is grass?:
What is the seventh word in this sentence?:
What is five minus two (use the full word)?: