• Welcome to Freedom Reborn Archive.
 

EZScript Comics

Started by BentonGrey, May 06, 2007, 06:28:24 PM

Previous topic - Next topic
|

BentonGrey

Howdy guys, I'm still a few days (or weeks, depending on work) away from starting on my 'comics,' but I had a question that I figured I needed to ask while I was thinking about it.  That way, I should have an answer for it by the time I'm ready to work on that mission.  This, plus the fact that I'll need a help thread eventually, and you've got this:

So, I want to go on an adventure where you've got to free imprisoned allies, is that do-able?  Specifically, I'm thinking the League are prisoners, and Batman's got to free them one at a time, or something similar.

HumanTon

Yep, very doable with EZScript, as there's a special encounter just for that. Here's something to get you started--you free Minute Man from a cage:


#-----------------------------------------
Encounter: Cage Traps
Type: Rescue Caged
Villains: nuclear_winter
Allies: minute_man

Alert Cutscene:
Yellow arrow on Villain

Start Cutscene:
Cinematic camera on Hero to Villain1
Hero turns to Villain1
Hero says, "Hold on hero, I'll save you!"

Ally Thanks Hero Cutscene:
Cinematic camera on minute_man to Hero
minute_man says, "Thanks for the assist, friend!"

End Cutscene:
Hero says, "So much for Nuclear Winter."
#-----------------------------------------


(For best results you'll want to user the special EZScript markers for allies on the map, so you control exactly where the allies show up.)

BentonGrey

Perfect HT, thanks man!  That is deffinetly what I was looking for, even down to the cage object!

BentonGrey

Nevermind, I figured it out.  Man!  I finally finished one of these, hooray!  This is so ridiculously awesome, thanks guys!

Watch this space though, ha, I'll be going back to work on the first mission shortly.

:EDIT:

Okay, this sucker has been giving me headaches for a long time, but now, with the new encounter types, I believe there is a way to do it, I'm just not sure how to go about it.  Alright, here is what I WANT to happen.  Batman interrogates a thug to find out about a museum heist, he intercepts the Penguin on his way out.  Then, the Penguin and his thugs try to flee with a museum piece and Batman has to stop them.  This all works decently well, but THEN I want Mr. Freeze to show up, it would actually be nice if he showed up halfway through all of this, and he and his men assault Penguin.  He freezes Batman and escapes with the object.

Now, I know I can use the new 'rival' type of encounter to force villains to fight each other...but can anyone help me with the mechanics of this?  I'm just not quite sure how to do it all.

:EDIT2: Okay, now I've just about finished the second mission, but I'm having trouble getting the last encounter to trigger.  Nothing is happening, no-one is spawning, and the cutscene isn't playing, so I'm not sure what's wrong.  Here's the story:

[spoiler]#------------------------------------------------------------------------
Encounter: Pretty Poison
Type: Fight
Villains: poison_ivy
Minions: ffx_oakman, ffx_hedgeant, ffx_bushman, ffx_treeman
Marker: ivy1
Next: Mean Streets, Riddle Me This

Alert Cutscene:
Set lighting to night
Red arrow on Villain1
Camera on Hero1
Hero1 turns to Hero2
Hero1 says, "Batgirl, what are you doing here?!"
Hero2 turns to Hero1
Hero2 says, "I heard about the Riddler on the police band, I'm here to help!"

Start Cutscene:
Camera on Villain1
Villain1 turns to Hero1
Hero1 turns to Villain1
Hero2 turns to Villain1
Villain1 says, "Trespassers!  My plants and I have done nothing, but still you

persecute us, breaking our branches and slashing our leaves, you will pay!"
Hero2 says, "Poison Ivy, where'd she come from!?"
Hero1 turns to Hero2
Hero1 says, "Of course, 'watch out for the vines...'  How could I have missed

it?  Ivy is a type of vine!"
#------------------------------------------------------------------------


#------------------------------------------------------------------------
Encounter: Mean Streets
Type: Save Civilian
Villains: thug_with_bat, thug_with_bat, thug_with_bat
Allies: civilian_male, civilian_female

Alert Cutscene:
Yellow arrow on Ally1

Start Cutscene:
Camera on Villain1
Villain1 turns to Ally1
Ally1 turns to Villain1
Ally2 turns to Villain1
Villain1 says, "Okay mister, let's see what you've got on you.."
Ally1 says,"O-okay, just...please don't hurt us..."
Camera on Hero1
Hero1 says, "Congratulations scumbag, you just won the street-punk lottery, and

your prize is a good old fashioned walloping..."
#-------------------------------------------------------------------------------


#-------------------------------------------------------------------------------
Encounter: Riddle Me This
Type: Save Civilians
Villains: riddler
Minions: riddle_puzzle_thug, riddle_puzzle_thug, riddle_puzzle_thug
Allies: civilian_male, civilian_male, civilian_male
Marker: riddle1

Alert Cutscene:
Red arrow on Ally1

Start Cutscene:
Camera on Villain1
Villain1 turns to Hero1
Hero1 turns to Villain1
Hero2 turns to Villain1
Villain1 says, "Well, if it isn't the Boy-Blunder himself!  I swear, you never

get what you pay for these days."
Villain1 says, "I mean, I go to all this trouble, set up this whole elaborate

trap, all in the hopes that Batman will rise to the challenge and match wits

with The Riddler..."
Villain1 plays animation ranged
Villain1 says, "Instead, I get the junior partner of this private freakshow!"
Hero1 says, "I think you'll find that I'm MORE than you bargained for, Riddler!"
Hero2 turns to Hero1
Hero2 says, "WE are more than he bargained for, you mean!"
Villain1 says, "Tut Tut, are we feeling a little unappreciated my dear?"
Hero1 says, "We'll see how you feel after I'm through with you Nigma!  Now hand

over the hostages or things are gonna' get rough!"
Villain1 says, "Ahh...that group of worthless ingrates?  I brought them ideas

that could have made them a fortune, and they had the gall to laugh at me!  I'm

afraid I've got something rather unpleasant planned for them...You on the other

hand, are no more than a mere annoyance.  Boys!"
Villain1 plays animation ranged
#------------------------------------------------------------------------
[/spoiler]

Pretty Poison is working like a charm, and so is the mugging, but Riddle Me This is falling flat.

BentonGrey

Sorry to double post, but that darn character limit makes it difficult to do some of these things.  Here's the script.log, it's got a few errors in it, but I can't make heads or tails of them:

[spoiler]initAttribsForChar: working on m25obj_2 (ffx_treeman)
initAttribsForChar (ffx_treeman): looking at attribute tough guy
initAttribsForChar (ffx_treeman): looking at attribute ponderous
initAttribsForChar: working on m25obj_4 (ffx_treeman)
initAttribsForChar (ffx_treeman): looking at attribute tough guy
initAttribsForChar (ffx_treeman): looking at attribute ponderous
initAttribsForChar: working on m25obj_6 (ffx_oakman)
initAttribsForChar (ffx_oakman): looking at attribute tough guy
initAttribsForChar (ffx_oakman): looking at attribute ponderous
initAttribsForChar: working on m25obj_8 (ffx_oakman)
initAttribsForChar (ffx_oakman): looking at attribute tough guy
initAttribsForChar (ffx_oakman): looking at attribute ponderous
initAttribsForChar: working on m25obj_10 (poison_ivy)
initAttribsForChar (poison_ivy): looking at attribute puppetn
execInitAttrib: init puppetn attribute
    on m25obj_10 of template poison_ivy (poison_ivy)
initAttribsForChar (poison_ivy): looking at attribute beautiful
initAttribsForChar (poison_ivy): looking at attribute pheremones
execInitAttrib: init pheremones attribute
    on m25obj_10 of template poison_ivy (poison_ivy)
initpheremones: target gender=2
initAttribsForChar (poison_ivy): looking at attribute alkaline
initAttribsForChar (poison_ivy): looking at attribute superhealer
execInitAttrib: init superhealer attribute
    on m25obj_10 of template poison_ivy (poison_ivy)
initAttribsForChar: working on m25obj_12 (thug_with_bat)
initAttribsForChar (thug_with_bat): looking at attribute timid
initAttribsForChar (thug_with_bat): looking at attribute weak minded
initAttribsForChar: working on m25obj_14 (thug_with_bat)
initAttribsForChar (thug_with_bat): looking at attribute timid
initAttribsForChar (thug_with_bat): looking at attribute weak minded
initAttribsForChar: working on m25obj_18 (civilian_male)
initAttribsForChar: working on m25obj_16 (thug_with_bat)
initAttribsForChar (thug_with_bat): looking at attribute timid
initAttribsForChar (thug_with_bat): looking at attribute weak minded
initAttribsForChar: working on m25obj_20 (civilian_female)
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
2
1
3
2
addArrow m25obj_18arrow m25obj_18 1 1
Traceback (innermost last):
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\skXMapInfo.py", line 685, in MapInfo_CheckObjects2
    Object_UpdateGridPos (ms)
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\skXMapInfo.py", line 565, in Object_UpdateGridPos
    if ts not in ff.MapInfo [maGrid
  • ] [maGrid [1]]:
    KeyError: 7
    addArrow m25obj_28arrow m25obj_28 1 1
    ff.DoEncSavecivilians(4,villains = ['riddler'], minions = ['riddle_puzzle_thug', 'riddle_puzzle_thug', 'riddle_puzzle_thug'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['ally1', 'ally']], ['cutscene', "CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_RED)"]]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", 'CS_Speak(\'villain1\', "Well, if it isn\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)', "CS_Speak('villain1', 'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...', force=0)", "CS_Animate('villain1','ranged')", "CS_Speak('villain1', 'Instead, I get the junior partner of this private freakshow!', force=0)", 'CS_Speak(\'hero1\', "I think you\'ll find that I\'m MORE than you bargained for, Riddler!", force=0)', "CS_TurnTo('hero2', 'hero1')", "CS_Speak('hero2', 'WE are more than he bargained for, you mean!', force=0)", "CS_Speak('villain1', 'Tut Tut, are we feeling a little unappreciated my dear?', force=0)", 'CS_Speak(\'hero1\', "We\'ll see how you feel after I\'m through with you Nigma!  Now hand over the hostages or things are gonna\' get rough!", force=0)', 'CS_Speak(\'villain1\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\'m afraid I\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)', "CS_Animate('villain1','ranged')", 'CS_End()']]]], marker = 'riddle1', allies = ['civilian_male', 'civilian_male', 'civilian_male'],return_function="StorylineEncounterReturn")
    Traceback (innermost last):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 250, in DoStorylineStateEvent
        DoStorylineState(story, state, event.user)
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 293, in DoStorylineState
        if not StorySetupEncounter(enc_id,story,state,a):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 383, in StorySetupEncounter
        val = eval('ff.%s(%i,%s,return_function="StorylineEncounterReturn")'%(encname,enc_id,encparams))
      File "<string>", line 0, in ?
    AttributeError: DoEncSavecivilians
    initAttribsForChar: working on m25obj_26 (thug_with_bat)
    initAttribsForChar (thug_with_bat): looking at attribute timid
    initAttribsForChar (thug_with_bat): looking at attribute weak minded
    initAttribsForChar: working on m25obj_24 (thug_with_bat)
    initAttribsForChar (thug_with_bat): looking at attribute timid
    initAttribsForChar (thug_with_bat): looking at attribute weak minded
    initAttribsForChar: working on m25obj_22 (thug_with_bat)
    initAttribsForChar (thug_with_bat): looking at attribute timid
    initAttribsForChar (thug_with_bat): looking at attribute weak minded
    initAttribsForChar: working on m25obj_30 (civilian_female)
    initAttribsForChar: working on m25obj_28 (civilian_male)
    addArrow m25obj_28arrow m25obj_28 1 0
    ff.DoEncSavecivilians(5,villains = ['riddler'], minions = ['riddle_puzzle_thug', 'riddle_puzzle_thug', 'riddle_puzzle_thug'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['ally1', 'ally']], ['cutscene', "CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_RED)"]]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", 'CS_Speak(\'villain1\', "Well, if it isn\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)', "CS_Speak('villain1', 'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...', force=0)", "CS_Animate('villain1','ranged')", "CS_Speak('villain1', 'Instead, I get the junior partner of this private freakshow!', force=0)", 'CS_Speak(\'hero1\', "I think you\'ll find that I\'m MORE than you bargained for, Riddler!", force=0)', "CS_TurnTo('hero2', 'hero1')", "CS_Speak('hero2', 'WE are more than he bargained for, you mean!', force=0)", "CS_Speak('villain1', 'Tut Tut, are we feeling a little unappreciated my dear?', force=0)", 'CS_Speak(\'hero1\', "We\'ll see how you feel after I\'m through with you Nigma!  Now hand over the hostages or things are gonna\' get rough!", force=0)', 'CS_Speak(\'villain1\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\'m afraid I\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)', "CS_Animate('villain1','ranged')", 'CS_End()']]]], marker = 'riddle1', allies = ['civilian_male', 'civilian_male', 'civilian_male'],return_function="StorylineEncounterReturn")
    Traceback (innermost last):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 250, in DoStorylineStateEvent
        DoStorylineState(story, state, event.user)
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 293, in DoStorylineState
        if not StorySetupEncounter(enc_id,story,state,a):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 383, in StorySetupEncounter
        val = eval('ff.%s(%i,%s,return_function="StorylineEncounterReturn")'%(encname,enc_id,encparams))
      File "<string>", line 0, in ?
    AttributeError: DoEncSavecivilians
    addArrow m25obj_18arrow m25obj_18 1 0
    ff.DoEncSavecivilians(6,villains = ['riddler'], minions = ['riddle_puzzle_thug', 'riddle_puzzle_thug', 'riddle_puzzle_thug'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['ally1', 'ally']], ['cutscene', "CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_RED)"]]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", 'CS_Speak(\'villain1\', "Well, if it isn\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)', "CS_Speak('villain1', 'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...', force=0)", "CS_Animate('villain1','ranged')", "CS_Speak('villain1', 'Instead, I get the junior partner of this private freakshow!', force=0)", 'CS_Speak(\'hero1\', "I think you\'ll find that I\'m MORE than you bargained for, Riddler!", force=0)', "CS_TurnTo('hero2', 'hero1')", "CS_Speak('hero2', 'WE are more than he bargained for, you mean!', force=0)", "CS_Speak('villain1', 'Tut Tut, are we feeling a little unappreciated my dear?', force=0)", 'CS_Speak(\'hero1\', "We\'ll see how you feel after I\'m through with you Nigma!  Now hand over the hostages or things are gonna\' get rough!", force=0)', 'CS_Speak(\'villain1\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\'m afraid I\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)', "CS_Animate('villain1','ranged')", 'CS_End()']]]], marker = 'riddle1', allies = ['civilian_male', 'civilian_male', 'civilian_male'],return_function="StorylineEncounterReturn")
    Traceback (innermost last):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 250, in DoStorylineStateEvent
        DoStorylineState(story, state, event.user)
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 293, in DoStorylineState
        if not StorySetupEncounter(enc_id,story,state,a):
      File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 383, in StorySetupEncounter
        val = eval('ff.%s(%i,%s,return_function="StorylineEncounterReturn")'%(encname,enc_id,encparams))
      File "<string>", line 0, in ?
    AttributeError: DoEncSavecivilians[/spoiler]

catwhowalksbyhimself

I'm seeing this:

Quoteff.DoEncSavecivilians(5,villains = ['riddler'], minions = ['riddle_puzzle_thug', 'riddle_puzzle_thug', 'riddle_puzzle_thug'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['ally1', 'ally']], ['cutscene', "CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_RED)"]]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", 'CS_Speak(\'villain1\', "Well, if it isn\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)', "CS_Speak('villain1', 'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...', force=0)", "CS_Animate('villain1','ranged')", "CS_Speak('villain1', 'Instead, I get the junior partner of this private freakshow!', force=0)", 'CS_Speak(\'hero1\', "I think you\'ll find that I\'m MORE than you bargained for, Riddler!", force=0)', "CS_TurnTo('hero2', 'hero1')", "CS_Speak('hero2', 'WE are more than he bargained for, you mean!', force=0)", "CS_Speak('villain1', 'Tut Tut, are we feeling a little unappreciated my dear?', force=0)", 'CS_Speak(\'hero1\', "We\'ll see how you feel after I\'m through with you Nigma!  Now hand over the hostages or things are gonna\' get rough!", force=0)', 'CS_Speak(\'villain1\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\'m afraid I\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)', "CS_Animate('villain1','ranged')", 'CS_End()']]]], marker = 'riddle1', allies = ['civilian_male', 'civilian_male', 'civilian_male'],return_function="StorylineEncounterReturn")

Which to me looks like a syntax error in the Python behind the "Save Civilians" encounter type.

BentonGrey

Whoops!  Well, I think I figured it out, Civilian, singular, not plural.... :unsure:

:EDIT:  Err...maybe not.  Well, I changed Civilians to singualr, I don't THINK I changed anything else, and all of a sudden, it doesn't work at all.  Nothing, nadda, not even the first alert cutscene.

[spoiler]Story: Robin's Riddles

Starting Encounters: Pretty Poison, Mean Streets

#------------------------------------------------------------------------
Encounter: Pretty Poison
Type: Fight
Villains: poison_ivy
Minions: ffx_oakman, ffx_hedgeant, ffx_bushman, ffx_treeman
Marker: ivy1
Next: Mean Streets, Riddle Me This

Alert Cutscene:
Set lighting to night
Red arrow on Villain1
Camera on Hero1
Hero1 turns to Hero2
Hero1 says, "Batgirl, what are you doing here?!"
Hero2 turns to Hero1
Hero2 says, "I heard about the Riddler on the police band, I'm here to help!"

Start Cutscene:
Camera on Villain1
Villain1 turns to Hero1
Hero1 turns to Villain1
Hero2 turns to Villain1
Villain1 says, "Trespassers!  My plants and I have done nothing, but still you persecute us, breaking our branches and slashing our leaves, you will pay!"
Hero2 says, "Poison Ivy, where'd she come from!?"
Hero1 turns to Hero2
Hero1 says, "Of course, 'watch out for the vines...'  How could I have missed it?  Ivy is a type of vine!"
#------------------------------------------------------------------------


#------------------------------------------------------------------------
Encounter: Mean Streets
Type: Save Civilian
Villains: thug_with_bat, thug_with_bat, thug_with_bat
Allies: civilian_male, civilian_female

Alert Cutscene:
Yellow arrow on Ally1

Start Cutscene:
Camera on Villain1
Villain1 turns to Ally1
Ally1 turns to Villain1
Ally2 turns to Villain1
Villain1 says, "Okay mister, let's see what you've got on you.."
Ally1 says,"O-okay, just...please don't hurt us..."
Camera on Hero1
Hero1 says, "Congratulations scumbag, you just won the street-punk lottery, and your prize is a good old fashioned walloping..."
#-------------------------------------------------------------------------------


#-------------------------------------------------------------------------------
Encounter: Riddle Me This
Type: Save Civilian
Villains: riddler
Minions: riddle_puzzle_thug, riddle_puzzle_thug, riddle_puzzle_thug
Allies: civilian_male, civilian_male, civilian_male
Marker: riddle1

Alert Cutscene:
Red arrow on Ally1

Start Cutscene:
Camera on Villain1
Villain1 turns to Hero1
Hero1 turns to Villain1
Hero2 turns to Villain1
Villain1 says, "Well, if it isn't the Boy-Blunder himself!  I swear, you never get what you pay for these days."
Villain1 says, "I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler..."
Villain1 plays animation ranged
Villain1 says, "Instead, I get the junior partner of this private freakshow!"
Hero1 says, "I think you'll find that I'm MORE than you bargained for, Riddler!"
Hero2 turns to Hero1
Hero2 says, "WE are more than he bargained for, you mean!"
Villain1 says, "Tut Tut, are we feeling a little unappreciated my dear?"
Hero1 says, "We'll see how you feel after I'm through with you Nigma!  Now hand over the hostages or things are gonna' get rough!"
Villain1 says, "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I'm afraid I've got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!"
Villain1 plays animation ranged
#------------------------------------------------------------------------[/spoiler]

What in the world?  Plus, the script log:

[spoiler]>>> system/init.py executed
>>> system/localinit.py executed
>>> system\tredir.py executed
Starting ffx.py v. 3.2.0 build 11; branch = Gold / Release
Loading m25ai.py v. 3.2.0 build 10; branch = beta 2: m25 branch 2
importing missionobjvar.py v1.18
loading datfiles version 0.251000
importing MLOG Reader 1.0.18 release
Starting General Utilities 1.0
missionobjvar(FixLongs): Fixing overflow issue with <SCSTATE_BUOYANT>
missionobjvar defining functions for Campaign play.
CustomHeadCurrentTime 1180218512.843000
Starting Height Check module 1.4
Starting System Utilities 1.4
OBJECTS_HEIGHT: 604 entries
NIF_OBJECTS: 482 entries
BUILDINGS_IN_OBJECTS_DAT: 30 entries
BUILDING_DIMENSIONS: 30 entries
Starting skXMapInfo.py  v 0.79 beta
skXMapInfo: m25ai available
Campaign_ReadObjects() warning: object template <water> has more than one entry for attribute <mass>, values 650.000000 and 650.000000
FFX Mission Plugin 'firehydrant' imported
FFX Mission Plugin 'zombie' imported
Loading freeroam_keepbuildingdamage.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'freeroam_keepbuildingdamage' imported
FFX Mission Plugin 'm25ai_lowjumper' imported
FFX Mission Plugin 'm25ai_realitymanipulation' imported
FFX Mission Plugin 'cutscene_power' imported
Loading     m25enc_OPENDOOR.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_opendoor' imported
Loading     m25enc_simplechoice.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_simplechoice' imported
Starting Built-In Function Wrapper 1.5
('Object_CalcPrestige', 'js')
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod RobinsRiddles.py executed
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\danger.py executed
! GetMapInfo
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod RobinsRiddles.py executed
MLOG_Init(keepRunningModules=0): starting up
mlogreader.MLOG_Init: current mission = '02_ROBINSRIDDLESBETA'
initialising FFX: skirmish=0
mapinfocaliper0 is not a valid explosion object
mapinfocaliper1 is not a valid explosion object
mapinfocaliper2 is not a valid explosion object
mapinfocaliper3 is not a valid explosion object
numberStr=93
storing hero_0: id_1,-93
numberStr=94
storing hero_1: id_2,-94
ff.DoEncCustom(1,villains = ['poison_ivy'], minions = ['ffx_oakman', 'ffx_hedgeant', 'ffx_bushman', 'ffx_treeman'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Lighting('night')", "CS_AddArrow('villain1arrow', 'villain1', arrow_type=js.ARROW_RED)", "CS_Camera('hero1', dist=-160, yaw=0)", "CS_TurnTo('hero1', 'hero2')", "CS_Speak('hero1', 'Batgirl, what are you doing here?!', force=0)", "CS_TurnTo('hero2', 'hero1')", 'CS_Speak(\'hero2\', "I heard about the Riddler on the police band, I\'m here to help!", force=0)', 'CS_End()']]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", "CS_Speak('villain1', 'Trespassers!  My plants and I have done nothing, but still you persecute us, breaking our branches and slashing our leaves, you will pay!', force=0)", 'CS_Speak(\'hero2\', "Poison Ivy, where\'d she come from!?", force=0)', "CS_TurnTo('hero1', 'hero2')", 'CS_Speak(\'hero1\', "Of course, \'watch out for the vines...\'  How could I have missed it?  Ivy is a type of vine!", force=0)', 'CS_End()']]]], marker = 'ivy1', actions="villains fight heroes, allies fight villains",return_function="StorylineEncounterReturn")
Traceback (innermost last):
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25minimod.py", line 137, in OnPostInit
    m25story.DoStoryline()
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 244, in DoStoryline
    DoStorylineState(story,enc)
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 293, in DoStorylineState
    if not StorySetupEncounter(enc_id,story,state,a):
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 383, in StorySetupEncounter
    val = eval('ff.%s(%i,%s,return_function="StorylineEncounterReturn")'%(encname,enc_id,encparams))
  File "<string>", line 0, in ?
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 4193, in DoEncCustom
    return SetupEncounter(enc_id, encounter)
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 1342, in SetupEncounter
    if not SetupEnc_Spawn(enc_id, start_num, encounter): return 0
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 1408, in SetupEnc_Spawn
    EncSpawnGroup(enc_id,start_num +'_'+ s[1] ,s[2],s[0],s[3],marker_type=s[4],create_markers=s[5])
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 388, in EncSpawnGroup
    Enc_SetCharEnc(s,enc_id) #make sure we are able to find out which encounter this is a part of
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 655, in Enc_SetCharEnc
    js.Object_SetAttr(char, '_enc_id', enc_id)
SystemError: NULL result without error in call_object
initialising FFQ_initialiseExtras()
FFX_UpdateSun: getting default sun
FFX_UpdateSun: setting = (-137.0, 57.0, 1.5, 0.20000000298, (0.20000000298, 0.20000000298, 0.600000023842))
initAttribsForChar: working on hero_0 (batman)
initAttribsForChar (batman): looking at attribute heroic
initAttribsForChar (batman): looking at attribute wall climbing
initAttribsForChar (batman): looking at attribute danger sense
initAttribsForChar (batman): looking at attribute capedcrusader
execInitAttrib: init flier attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init ffqropeswinger attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init disciplined attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init utilitybelt attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init nimble attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init acrobatic attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init grimresolve attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init ffqtracking attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
initAttribsForChar: working on hero_1 (batgirl)
initAttribsForChar (batgirl): looking at attribute beautiful
initAttribsForChar (batgirl): looking at attribute nimble
initAttribsForChar (batgirl): looking at attribute wall climbing
initAttribsForChar (batgirl): looking at attribute danger sense
initAttribsForChar (batgirl): looking at attribute capedcrusader
execInitAttrib: init flier attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init ffqropeswinger attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init disciplined attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init utilitybelt attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init nimble attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init acrobatic attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init grimresolve attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init ffqtracking attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
initAttribsForChar: working on m25obj_4 (ffx_hedgeant)
initAttribsForChar: working on m25obj_2 (ffx_hedgeant)
initAttribsForChar: working on m25obj_6 (ffx_hedgeant)
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
2
1
3
2
2
1
3
2
[/spoiler]

HumanTon

I'm not sure what's up, but make sure there are are no carriage returns or line breaks in the middle of a line.

In other words, check that you have:

Hero says, "Make sure there's no carriage returns or line breaks within a single line of EZScript!"

and not:

Hero says, "Make sure there's no
carriage returns or line breaks within a single line of EZScript!"

BentonGrey

Hmm, I fixed all of those that I could find, but still no dice.  I wonder what I did to break this... :wacko:  Anyroad, I did notice that Ivy's minions are spawning, but she's not.  However, that's the only thing that spawns, the mugging doesn't spawn ANYTHING.

M25

It's choking trying to spawn poison ivy.  Did you change anything on that character?

If you open up m25config.py in your missions/scripts directory there's a line to turn reporting on (M25_USE_REPORTS or something like that - I don't have it in front of me.)  If you set that to 1, it'll spit out more useful information.

BentonGrey

Hey M25, yeah, I upped her endurance...but I can't figure out how that would cause this...I think I also added a prestige value, but I'm not sure.  I'll turn that report and and see if we can't see what's wrong.

Alright, so it tells me that the FFX Bushman is missing either a mesh or an HF, and that DoEncCustom has some sort of problem.  I'll look into the first thing, but I'm afraid the second has got me stumped.  Ohh masters of EZScript, can you decipher it?

[spoiler]>>> system/init.py executed
>>> system/localinit.py executed
>>> system\tredir.py executed
Starting ffx.py v. 3.2.0 build 11; branch = Gold / Release
Loading m25ai.py v. 3.2.0 build 10; branch = beta 2: m25 branch 2
importing missionobjvar.py v1.18
loading datfiles version 0.251000
importing MLOG Reader 1.0.18 release
Starting General Utilities 1.0
missionobjvar(FixLongs): Fixing overflow issue with <SCSTATE_BUOYANT>
missionobjvar defining functions for Campaign play.
CustomHeadCurrentTime 1180292615.498000
Starting Height Check module 1.4
Starting System Utilities 1.4
OBJECTS_HEIGHT: 604 entries
NIF_OBJECTS: 482 entries
BUILDINGS_IN_OBJECTS_DAT: 30 entries
BUILDING_DIMENSIONS: 30 entries
Starting skXMapInfo.py  v 0.79 beta
skXMapInfo: m25ai available
Campaign_ReadObjects() warning: object template <water> has more than one entry for attribute <mass>, values 650.000000 and 650.000000
FFX Mission Plugin 'firehydrant' imported
FFX Mission Plugin 'zombie' imported
Loading freeroam_keepbuildingdamage.py v.1.0.0 build 0; branch = main
FREEROAM_KBD: initialized
FFX Mission Plugin 'freeroam_keepbuildingdamage' imported
FFX Mission Plugin 'm25ai_lowjumper' imported
FFX Mission Plugin 'm25ai_realitymanipulation' imported
FFX Mission Plugin 'cutscene_power' imported
Loading     m25enc_OPENDOOR.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_opendoor' imported
Loading     m25enc_simplechoice.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_simplechoice' imported
Starting Built-In Function Wrapper 1.5
('Object_CalcPrestige', 'js')
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod RobinsRiddles.py executed
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\danger.py executed
MISSION: EZScript MiniMod/Campaign Precache.
PSTORY: {'name': "Robin's Riddles", 'encounters': [{'minions': ['ffx_oakman', 'ffx_hedgeant', 'ffx_bushman', 'ffx_treeman'], 'marker': 'ivy1', 'type': 'Fight', 'timeofday': 'none', 'required_map': [], 'trigger': [], 'next': ['Mean Streets', 'Riddle Me This'], 'objectives': [], 'parameters': [], 'name': 'Pretty Poison', 'villains': ['poison_ivy'], 'cutscenes': [{'replace': [['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], 'name': 'Alert', 'required': [], 'priority': 1, 'cutscene': ['CS_Start()', "CS_Lighting('night')", "CS_AddArrow('villain1arrow', 'villain1', arrow_type=js.ARROW_RED)", "CS_Camera('hero1', dist=-160, yaw=0)", "CS_TurnTo('hero1', 'hero2')", "CS_Speak('hero1', 'Batgirl, what are you doing here?!', force=0)", "CS_TurnTo('hero2', 'hero1')", 'CS_Speak(\'hero2\', "I heard about the Riddler on the police band, I\'m here to help!", force=0)', 'CS_End()']}, {'replace': [['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], 'name': 'Start', 'required': [], 'priority': 1, 'cutscene': ['CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", "CS_Speak('villain1', 'Trespassers!  My plants and I have done nothing, but still you persecute us, breaking our branches and slashing our leaves, you will pay!', force=0)", 'CS_Speak(\'hero2\', "Poison Ivy, where\'d she come from!?", force=0)', "CS_TurnTo('hero1', 'hero2')", 'CS_Speak(\'hero1\', "Of course, \'watch out for the vines...\'  How could I have missed it?  Ivy is a type of vine!", force=0)', 'CS_End()']}], 'pre': []}, {'marker': 'encounter', 'type': 'Save Civilian', 'timeofday': 'none', 'required_map': [], 'trigger': [], 'next': [], 'objectives': [], 'parameters': [['allies', 'civilian_male, civilian_female']], 'name': 'Mean Streets', 'villains': ['thug_with_bat', 'thug_with_bat', 'thug_with_bat'], 'cutscenes': [{'replace': [['ally1', 'ally']], 'name': 'Alert', 'required': [], 'priority': 1, 'cutscene': ["CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_YELLOW)"]}, {'replace': [['villain1', 'villain'], ['ally1', 'ally'], ['ally2', 'ally'], ['hero1', 'hero']], 'name': 'Start', 'required': [], 'priority': 1, 'cutscene': ['CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'ally1')", "CS_TurnTo('ally1', 'villain1')", "CS_TurnTo('ally2', 'villain1')", 'CS_Speak(\'villain1\', "Okay mister, let\'s see what you\'ve got on you..", force=0)', 'CS_Speak(\'ally1\', "O-okay, just...please don\'t hurt us...", force=0)', "CS_Camera('hero1', dist=-160, yaw=0)", "CS_Speak('hero1', 'Congratulations scumbag, you just won the street-punk lottery, and your prize is a good old fashioned walloping...', force=0)", 'CS_End()']}], 'pre': []}, {'minions': ['riddle_puzzle_thug', 'riddle_puzzle_thug', 'riddle_puzzle_thug'], 'marker': 'riddle1', 'type': 'Save Civilian', 'timeofday': 'none', 'required_map': [], 'trigger': [], 'next': [], 'objectives': [], 'parameters': [['allies', 'civilian_male, civilian_male, civilian_male']], 'name': 'Riddle Me This', 'villains': ['riddler'], 'cutscenes': [{'replace': [['ally1', 'ally']], 'name': 'Alert', 'required': [], 'priority': 1, 'cutscene': ["CS_AddArrow('ally1arrow', 'ally1', arrow_type=js.ARROW_RED)"]}, {'replace': [['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], 'name': 'Start', 'required': [], 'priority': 1, 'cutscene': ['CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", 'CS_Speak(\'villain1\', "Well, if it isn\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)', "CS_Speak('villain1', 'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...', force=0)", "CS_Animate('villain1','ranged')", "CS_Speak('villain1', 'Instead, I get the junior partner of this private freakshow!', force=0)", 'CS_Speak(\'hero1\', "I think you\'ll find that I\'m MORE than you bargained for, Riddler!", force=0)', "CS_TurnTo('hero2', 'hero1')", "CS_Speak('hero2', 'WE are more than he bargained for, you mean!', force=0)", "CS_Speak('villain1', 'Tut Tut, are we feeling a little unappreciated my dear?', force=0)", 'CS_Speak(\'hero1\', "We\'ll see how you feel after I\'m through with you Nigma!  Now hand over the hostages or things are gonna\' get rough!", force=0)', 'CS_Speak(\'villain1\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\'m afraid I\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)', "CS_Animate('villain1','ranged')", 'CS_End()']}], 'pre': []}], 'start': ['Pretty Poison', 'Mean Streets']}
PSTORY: {"Robin's Riddles": {'encounters': {'__lose__': {'action': ['ff.Story_LoseMission()']}, 'Riddle Me This': {'next': ['__end__'], 'required_map': [], 'timeofday': 'none', 'action': ['DoEncCustom(villains = [\'riddler\'], minions = [\'riddle_puzzle_thug\', \'riddle_puzzle_thug\', \'riddle_puzzle_thug\'], cutscenes = [[\'alertcs\', [[\'priority\', 1], [\'replace\', [\'ally1\', \'ally\']], [\'cutscene\', "CS_AddArrow(\'ally1arrow\', \'ally1\', arrow_type=js.ARROW_RED)"]]], [\'startcs\', [[\'priority\', 1], [\'replace\', [\'villain1\', \'villain\'], [\'hero1\', \'hero\'], [\'hero2\', \'hero\']], [\'cutscene\', \'CS_Start()\', "CS_Camera(\'villain1\', dist=-160, yaw=0)", "CS_TurnTo(\'villain1\', \'hero1\')", "CS_TurnTo(\'hero1\', \'villain1\')", "CS_TurnTo(\'hero2\', \'villain1\')", \'CS_Speak(\\\'villain1\\\', "Well, if it isn\\\'t the Boy-Blunder himself!  I swear, you never get what you pay for these days.", force=0)\', "CS_Speak(\'villain1\', \'I mean, I go to all this trouble, set up this whole elaborate trap, all in the hopes that Batman will rise to the challenge and match wits with The Riddler...\', force=0)", "CS_Animate(\'villain1\',\'ranged\')", "CS_Speak(\'villain1\', \'Instead, I get the junior partner of this private freakshow!\', force=0)", \'CS_Speak(\\\'hero1\\\', "I think you\\\'ll find that I\\\'m MORE than you bargained for, Riddler!", force=0)\', "CS_TurnTo(\'hero2\', \'hero1\')", "CS_Speak(\'hero2\', \'WE are more than he bargained for, you mean!\', force=0)", "CS_Speak(\'villain1\', \'Tut Tut, are we feeling a little unappreciated my dear?\', force=0)", \'CS_Speak(\\\'hero1\\\', "We\\\'ll see how you feel after I\\\'m through with you Nigma!  Now hand over the hostages or things are gonna\\\' get rough!", force=0)\', \'CS_Speak(\\\'villain1\\\', "Ahh...that group of worthless ingrates?  I brought them ideas that could have made them a fortune, and they had the gall to laugh at me!  I\\\'m afraid I\\\'ve got something rather unpleasant planned for them...You on the other hand, are no more than a mere annoyance.  Boys!", force=0)\', "CS_Animate(\'villain1\',\'ranged\')", \'CS_End()\']]]], marker = \'riddle1\', actions="villains fight heroes, villains attack innocent allies, allies thank heroes, allies do not fight", allies = [\'civilian_male\', \'civilian_male\', \'civilian_male\'])']}, 'Pretty Poison': {'timeofday': 'none', 'next': ['Mean Streets', 'Riddle Me This'], 'trigger': ['start'], 'action': ['DoEncCustom(villains = [\'poison_ivy\'], minions = [\'ffx_oakman\', \'ffx_hedgeant\', \'ffx_bushman\', \'ffx_treeman\'], cutscenes = [[\'alertcs\', [[\'priority\', 1], [\'replace\', [\'villain1\', \'villain\'], [\'hero1\', \'hero\'], [\'hero2\', \'hero\']], [\'cutscene\', \'CS_Start()\', "CS_Lighting(\'night\')", "CS_AddArrow(\'villain1arrow\', \'villain1\', arrow_type=js.ARROW_RED)", "CS_Camera(\'hero1\', dist=-160, yaw=0)", "CS_TurnTo(\'hero1\', \'hero2\')", "CS_Speak(\'hero1\', \'Batgirl, what are you doing here?!\', force=0)", "CS_TurnTo(\'hero2\', \'hero1\')", \'CS_Speak(\\\'hero2\\\', "I heard about the Riddler on the police band, I\\\'m here to help!", force=0)\', \'CS_End()\']]], [\'startcs\', [[\'priority\', 1], [\'replace\', [\'villain1\', \'villain\'], [\'hero1\', \'hero\'], [\'hero2\', \'hero\']], [\'cutscene\', \'CS_Start()\', "CS_Camera(\'villain1\', dist=-160, yaw=0)", "CS_TurnTo(\'villain1\', \'hero1\')", "CS_TurnTo(\'hero1\', \'villain1\')", "CS_TurnTo(\'hero2\', \'villain1\')", "CS_Speak(\'villain1\', \'Trespassers!  My plants and I have done nothing, but still you persecute us, breaking our branches and slashing our leaves, you will pay!\', force=0)", \'CS_Speak(\\\'hero2\\\', "Poison Ivy, where\\\'d she come from!?", force=0)\', "CS_TurnTo(\'hero1\', \'hero2\')", \'CS_Speak(\\\'hero1\\\', "Of course, \\\'watch out for the vines...\\\'  How could I have missed it?  Ivy is a type of vine!", force=0)\', \'CS_End()\']]]], marker = \'ivy1\', actions="villains fight heroes, allies fight villains")'], 'required_map': []}, '__end__': {'action': ['ff.Story_SetStoryEnded("Robin\'s Riddles")']}, 'Mean Streets': {'timeofday': 'none', 'next': ['Riddle Me This'], 'trigger': ['start'], 'action': ['DoEncCustom(villains = [\'thug_with_bat\', \'thug_with_bat\', \'thug_with_bat\'], cutscenes = [[\'alertcs\', [[\'priority\', 1], [\'replace\', [\'ally1\', \'ally\']], [\'cutscene\', "CS_AddArrow(\'ally1arrow\', \'ally1\', arrow_type=js.ARROW_YELLOW)"]]], [\'startcs\', [[\'priority\', 1], [\'replace\', [\'villain1\', \'villain\'], [\'ally1\', \'ally\'], [\'ally2\', \'ally\'], [\'hero1\', \'hero\']], [\'cutscene\', \'CS_Start()\', "CS_Camera(\'villain1\', dist=-160, yaw=0)", "CS_TurnTo(\'villain1\', \'ally1\')", "CS_TurnTo(\'ally1\', \'villain1\')", "CS_TurnTo(\'ally2\', \'villain1\')", \'CS_Speak(\\\'villain1\\\', "Okay mister, let\\\'s see what you\\\'ve got on you..", force=0)\', \'CS_Speak(\\\'ally1\\\', "O-okay, just...please don\\\'t hurt us...", force=0)\', "CS_Camera(\'hero1\', dist=-160, yaw=0)", "CS_Speak(\'hero1\', \'Congratulations scumbag, you just won the street-punk lottery, and your prize is a good old fashioned walloping...\', force=0)", \'CS_End()\']]]], marker = \'encounter\', actions="villains fight heroes, villains attack innocent allies, allies thank heroes, allies do not fight", allies = [\'civilian_male\', \'civilian_female\'])'], 'required_map': []}, '__win__': {'action': ['ff.Story_WinMission()']}}}}
PSTORY: precaching ffx_oakman
PSTORY: precaching ffx_hedgeant
PSTORY: precaching ffx_bushman
PSTORY: precaching ffx_treeman
PSTORY: precaching poison_ivy
PSTORY: precaching civilian_male
PSTORY: precaching civilian_female
PSTORY: precaching thug_with_bat
PSTORY: precaching riddle_puzzle_thug
PSTORY: precaching riddler
! GetMapInfo[/spoiler]

BentonGrey

[spoiler]>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod RobinsRiddles.py executed
MISSION: On Post Init... start.
MLOG_Init(keepRunningModules=0): starting up
mlogreader.MLOG_Init: current mission = '02_ROBINSRIDDLESBETA'
initialising FFX: skirmish=0
mapinfocaliper0 is not a valid explosion object
mapinfocaliper1 is not a valid explosion object
mapinfocaliper2 is not a valid explosion object
mapinfocaliper3 is not a valid explosion object
numberStr=93
storing hero_0: id_1,-93
numberStr=94
storing hero_1: id_2,-94
MISSION: On Post Init... complete; starting story.
RANDOMENC: selected ffx_oakman : total prestige 1
RANDOMENC: selected ffx_hedgeant : total prestige 2
RANDOMENC: selected ffx_bushman : total prestige 3
RANDOMENC: selected ffx_hedgeant : total prestige 4
RANDOMENC: selected ffx_hedgeant : total prestige 5
RANDOMENC: selected ffx_hedgeant : total prestige 6
ENCOUNTER: Setting up encounter 1
ENCOUNTER: Start marker found for ['ivy1'] 'ivy1'
ENCOUNTER: No markers for 1 [['allyleave', 'ivy1_allyleave', 'dist500']]
AI: SetupAI() - setting ai for m25obj_2 ('ffx_oakman')
AI: SetupAI() - setting ai for m25obj_4 ('ffx_hedgeant')
ERROR: The character m25obj_6 with template ffx_bushman is missing a mesh or a hero file.
AI: SetupAI() - setting ai for m25obj_8 ('ffx_hedgeant')
AI: SetupAI() - setting ai for m25obj_10 ('ffx_hedgeant')
AI: SetupAI() - setting ai for m25obj_12 ('ffx_hedgeant')
GROUP: '1_minion' set to []
GROUP: 'm25obj_2' added to group '1_minion'
GROUP: 'm25obj_4' added to group '1_minion'
GROUP: 'm25obj_6' added to group '1_minion'
GROUP: 'm25obj_8' added to group '1_minion'
GROUP: 'm25obj_10' added to group '1_minion'
GROUP: 'm25obj_12' added to group '1_minion'
GROUP: '1_minion' set to ['m25obj_2', 'm25obj_4', 'm25obj_6', 'm25obj_8', 'm25obj_10', 'm25obj_12']
ERROR: The encounter DoEncCustom does not exist or is broken.  You may need to download the appropriate plug-in, or check script.log for errors.
ff.DoEncCustom(1,villains = ['poison_ivy'], minions = ['ffx_oakman', 'ffx_hedgeant', 'ffx_bushman', 'ffx_treeman'], cutscenes = [['alertcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Lighting('night')", "CS_AddArrow('villain1arrow', 'villain1', arrow_type=js.ARROW_RED)", "CS_Camera('hero1', dist=-160, yaw=0)", "CS_TurnTo('hero1', 'hero2')", "CS_Speak('hero1', 'Batgirl, what are you doing here?!', force=0)", "CS_TurnTo('hero2', 'hero1')", 'CS_Speak(\'hero2\', "I heard about the Riddler on the police band, I\'m here to help!", force=0)', 'CS_End()']]], ['startcs', [['priority', 1], ['replace', ['villain1', 'villain'], ['hero1', 'hero'], ['hero2', 'hero']], ['cutscene', 'CS_Start()', "CS_Camera('villain1', dist=-160, yaw=0)", "CS_TurnTo('villain1', 'hero1')", "CS_TurnTo('hero1', 'villain1')", "CS_TurnTo('hero2', 'villain1')", "CS_Speak('villain1', 'Trespassers!  My plants and I have done nothing, but still you persecute us, breaking our branches and slashing our leaves, you will pay!', force=0)", 'CS_Speak(\'hero2\', "Poison Ivy, where\'d she come from!?", force=0)', "CS_TurnTo('hero1', 'hero2')", 'CS_Speak(\'hero1\', "Of course, \'watch out for the vines...\'  How could I have missed it?  Ivy is a type of vine!", force=0)', 'CS_End()']]]], marker = 'ivy1', actions="villains fight heroes, allies fight villains",return_function="StorylineEncounterReturn")
Traceback (innermost last):
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25minimod.py", line 137, in OnPostInit
    m25story.DoStoryline()
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 244, in DoStoryline
    DoStorylineState(story,enc)
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 293, in DoStorylineState
    if not StorySetupEncounter(enc_id,story,state,a):
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25story.py", line 383, in StorySetupEncounter
    val = eval('ff.%s(%i,%s,return_function="StorylineEncounterReturn")'%(encname,enc_id,encparams))
  File "<string>", line 0, in ?
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 4193, in DoEncCustom
    return SetupEncounter(enc_id, encounter)
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 1342, in SetupEncounter
    if not SetupEnc_Spawn(enc_id, start_num, encounter): return 0
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 1408, in SetupEnc_Spawn
    EncSpawnGroup(enc_id,start_num +'_'+ s[1] ,s[2],s[0],s[3],marker_type=s[4],create_markers=s[5])
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 388, in EncSpawnGroup
    Enc_SetCharEnc(s,enc_id) #make sure we are able to find out which encounter this is a part of
  File "C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\.\ffx3\missions\scripts\m25enc.py", line 655, in Enc_SetCharEnc
    js.Object_SetAttr(char, '_enc_id', enc_id)
SystemError: NULL result without error in call_object
initialising FFQ_initialiseExtras()
FFX_UpdateSun: getting default sun
FFX_UpdateSun: setting = (-137.0, 57.0, 1.5, 0.20000000298, (0.20000000298, 0.20000000298, 0.600000023842))
AI: AISetRunning m25obj_2 to 0
AI: AISetRunning m25obj_4 to 0
AI: AISetRunning m25obj_8 to 0
AI: AISetRunning m25obj_10 to 0
AI: AISetRunning m25obj_12 to 0
initAttribsForChar: working on hero_0 (batman)
initAttribsForChar (batman): looking at attribute heroic
initAttribsForChar (batman): looking at attribute wall climbing
initAttribsForChar (batman): looking at attribute danger sense
initAttribsForChar (batman): looking at attribute capedcrusader
execInitAttrib: init flier attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init ffqropeswinger attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init disciplined attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init utilitybelt attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init nimble attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init acrobatic attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init grimresolve attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
execInitAttrib: init ffqtracking attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_0 of template custom_template_93 (batman)
initAttribsForChar: working on hero_1 (batgirl)
initAttribsForChar (batgirl): looking at attribute beautiful
initAttribsForChar (batgirl): looking at attribute nimble
initAttribsForChar (batgirl): looking at attribute wall climbing
initAttribsForChar (batgirl): looking at attribute danger sense
initAttribsForChar (batgirl): looking at attribute capedcrusader
execInitAttrib: init flier attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init ffqropeswinger attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init disciplined attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init utilitybelt attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init nimble attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init acrobatic attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init grimresolve attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
execInitAttrib: init ffqtracking attribute inside ['capedcrusader', 'flier', 'ffqropeswinger', 'disciplined', 'utilitybelt', 'nimble', 'acrobatic', 'grimresolve', 'ffqtracking'] combo
    on hero_1 of template custom_template_94 (batgirl)
initAttribsForChar: working on m25obj_2 (ffx_oakman)
initAttribsForChar (ffx_oakman): looking at attribute tough guy
initAttribsForChar (ffx_oakman): looking at attribute ponderous
initAttribsForChar: working on m25obj_4 (ffx_hedgeant)
initAttribsForChar: working on m25obj_8 (ffx_hedgeant)
initAttribsForChar: working on m25obj_10 (ffx_hedgeant)
initAttribsForChar: working on m25obj_12 (ffx_hedgeant)
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
2
1
3
2
2
1
3
2[/spoiler]

Okay, I've fixed the bushman thing....turns out it was 'busman,' whoops.....anyroad, that seems to have fixed the Ivy part, I've got to test the second encounter later.  It's our anniversary today, and I just had time to do this little bit while the wife was getting ready.  Anyroad, we're off, and I'll mess with this again tomorrow.  Thanks M25!

BentonGrey

Hurray!  Everything works!  Thanks for the help guys, apparently it was just that one glitch.  The first three 'comic' missions are finished!

BentonGrey

Alright, since everything seems to be working again, I've gone back to trying to improve the first comic mission, and I need some help.  Here's the script as it looks now:

[spoiler]Starting: Big Bird, Unexpected

#-----------------------------------------------------------------------------
Encounter: Big Bird
Type: Custom
Actions: villains fight heroes, villains are invulnerable
Villains: penguin
Minions: fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang
Marker: museum1

Start Cutscene:
Remove arrow from Villain1
Camera on Villain1
Villain1 turns to Minion1
Villain1 plays animation melee
Villain1 says, "Faster you poultrons, that curs-ed caped crusader loves to prowl the streets at this time of night!"
Minion1 turns to Villain1
Minion1 says, "I don't get it boss, why are we stealing this here statue thingy again?"
Villain1 says, "Aside from an asthetic value that a pea-brain like yours couldn't hope to comprehend, this particular piece of antiquity is worth a considerable fortune!"
Minion1 says, "Oh, okay then boss, what are we waiting for?"
Villain1 plays animation pain
Villain1 says, "That's what I'd like to know you pack of neolithic neanderthals, get on with it!"
Camera on Hero1
Hero1 turns to Villain1
Hero1 says, "Hold it Penguin!  You just earned a one-way trip back to Stonegate Prison!"
Camera on Villain1
Villain1 turns to Hero1
Villain1 says, "Drat your timing Batman, but you haven't caught us yet!  Discretion is the better part of valour my fine feathered friends!"
Minion1 turns to Villain1
Minion1 says, "What's 'dat mean boss?"
Villain1 turns to Minion1
Villain1 says, "It means run you insufferable low-brow!"
#-------------------------------------------------------------------------------


#-------------------------------------------------------------------------------
Encounter: Unexpected
Type: Custom
Actions: villains fight heroes, rivals fight villains, villains fight rivals, villain stops at one quarter health
Rivals: mrfreeze
Minions: fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2
Cohorts: freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey
Marker: freeze1

Start Cutscene:
penguin is revived
Camera on mrfreeze
mrfreeze moves to Villain1
penguin turns to mrfreeze
mrfreeze turns to penguin
Rival1 says, "Penguin, I believe you have something I want..."
Cinematic camera on Rival1 to Villain1
penguin plays animation melee
penguin says, "Back off you petulant icicle, this is my robbery!"
Rival1 says, "It was your robbery..."
mrfreeze plays animation ranged_gun_4

Villans Hurt Cutscene:
Hero1 moves to mrfreeze
mrfreeze turns to Hero1
Hero1 turns to mrfreeze
Cinematic camera on mrfreeze to Hero1
Rival1 says, "Well fought Batman, but a colder head prevailed.
Hero1 says, "Freeze, wait!  Why are you doing this?"
Rival1 says, "We must all obey our hearts Batman.  My heart is cold, but not dead...not yet.  I will do what I must...but I've said to much!
mrfreeze plays animation ranged_gun_4
mrfreeze moves to freeze2
Fade for 2 seconds
[/spoiler]

First off, it's not working, the Penguin and his men are spawning, but the CS doesn't play.  Secondly, I can't help feeling like there is a better way to do this.  Is there any way to force a character to use a power through EZScript?  Thanks for looking at these guys, I'll be out of town for the next two weeks, but I'll be checking in.  I hope y'all can help me smooth this out.

Boalt92

i guess i'm your answer man....(i hope):

1) EZ Script seems to like consistency.  Use specific names (i.e. penguin, mrfreeze, etc.) whereever possible. In "unexpected" you mix and match "mrfreeze", "penguin", and Villain1.  That might be causing a problem

2) In "unexpected", you refer to "Villain1" but you do not list a Villain1 among your variables.  I think you can take out "penguin is revived" and just list "penguin" as a Villain.  (did that make sense?  :unsure:).

3) In "Big Bird", you start with "Remove arrow from Villain1".  You might need an Alert Cutscene with "Red arrow on Villain1".  Not sure if this is a deal breaker, just something I noticed.

4) Minions: I noticed in "Big Bird", you have 15 minions listed.  Did you want 15 opponents, or for EZ Script to chose from the 15?  If you just want it to choose, you only have to list the minions in the ratio you want it to select.  For example, you have 10 f_f_gang and 5 f_f_gang2 listed (a 2:1 ratio).  Just use 2 f_f_gang and 1 f_f_gang2.  EZ Script will still pick them randomly and you'll be twice as likely to get f_f_gang members as f_f_gang2.  This is not a deal-breaker either, but seems to make missions run smoother (for me, anyway).

5) Which CS isn't running?

BentonGrey

Thanks for the response man, I can certainly use all the help I can get!  Anyroad, let me answer your points one at a time:

1) Alright, I will definitely change this.

2) Whoops!  I had the Penguin in there, but removed him because I'm not quite sure how this will behave.  What I WANT is for the first encounter to flow into the second, but I'm afraid that this will give me two Penguins running around.  Is there a way to destroy the first one?

3) Once again, this is something of a Frankenstien script, so I removed the alert cutscene to see if it was causing problems, forgot to remove that.

4) This is in an attempt to get EZScript to give me more minions, because it's only been giving me a handful, I might revise the numbers, but at the moment it's still only spawning two.

5) Neither, the Penguin and two men are spawning, but nothing is playing and Mr Freeze and co. aren't even spawning.

I won't be able to work on this until I get back home on the 10th, but maybe I can help narrow things down before then.  Ohh, and do you know if it's possible to force a character to use a power through EZScript?

Boalt92

1) hope it works

2) Once the first encounter ends, all minions, villains, etc. will disappear.  Maybe m25 can clarify on this one.  This means you'll either need to combine the two

encounters or start the second with another penguin.  2 encounters cannot run at the same marker at the same time.  If you use the same marker for both encounters,

the second encounter will not (cannot) begin until the first one completes.  You'd need to write each encounter as self-contained sequences ("scenes" in a movie) and make sure you use the same villains and minions for both encounters.

Your other option is to combine the two encounters and teleport mrfreeze (i.e. your "Rival") off camera somewhere until you need him later.  I don't know where I got the idea (I think it was a Conduit post), but basically, you pick a point off map (this prevents him from moving to the encounter), teleport him there, and then bring him back when you're ready.  (an easy way to do this is to move an object (building, car, character, etc.) off map in ffedit and make a note of its position.  You can use those coords and "teleport mrfreeze to x,y,z" in the Alert Cutscene.  Then use "teleport mrfreeze to hero1" to bring him back (I always fade in/out when I teleport characters).

To do this, remove "Villains are invulnerable" and replace it with "Villains can be interrogated" or "Villain stops at one quarter health".  Mr Freeze would enter the picture during the "interrogation" (or "villains stop") cutscene.  You could also revive penguin to full health at that point

3) I think this may be a sticking point.  It looks like EZ Script can't find an arrow to remove and won't do anything else until it does.


4) Your minions are too tough.  They spawn at levels based on your characters, so EZ Script is only spawning a couple.  Name them as "villains" and refer to "penguin" by name for any of his custom actions.


5) see #3


I don't think you can force a certain power, the best you can do is simulate it by playing the animation, then playing the effect (or fx) on the target.  The only hang up is that any animation/effect you play will end before the next one starts.  Looks a bit awkward at times, but hardly a deal-breaker.

B92

M25

Thanks for your answers, Boalt92.   It's great having other people that know EZ script.




There's a plug-in that got included with FFX3.2 (cutscene_power) that allows you to force the use of a power during a cutscene

<name> uses power <power> on <target>


EZ script does automatically do a 'clean up' to remove all of the characters involved in an encounter so they don't clutter up the map.  If you want a character to continue past an encounter you can give them a name.

Villains: nuclear_winter named chilly, ice_queen

In that case, the nuclear_winter character is flagged as being able to move from one encounter to the next (the ice_queen isn't).  If you have another encounter that uses the same character with the same name, then EZ script will use the same character.

Encounter: First
Type: Custom
Actions: Villain stops at half-health, villains fight heroes
Villains: nuclear_winter named chilly

Encounter: Second
Type: Flee the scene
Villains: nuclear_winter named chilly

In the above setup, nuclear winter will fight until he reaches half health, then the second encounter will kick in and he will try to flee.


Minions:  EZ script spawns minions based on the difficulty level the player has chosen and the number of heroes the player has.  It doesn't base it on point totals at all.   (I used to do that, but it didn't work well and was too slow).

If you want a lot of characters to spawn regardless of difficulty level, then put them as villains and not minions.



BentonGrey

Thanks guys, that actually makes a lot of sense, I think I'm following you.  I'm glad you included a way to force powers M25, that'll be a big help! :D

I can't wait until we get back to try all of this out...it's going to be torture not being able to see if it works or not!

BentonGrey

Hey guys, I took your advice and combined the different encounters, and I am really happy with the results.  I have a few more tweaks to make, but I'm still having one problem.  The final cutscene isn't playing.  Everything else is working wonderfully, but when you knock out Mr Freeze and his goons, the game ends.  (I tried using 'Rival stops at quarter health,' but that didn't work and caused an error in the script.log.)  The only error I'm seeing is 'custom_template93 not found.'  Anyroad, here's the script.

[spoiler]Story: Fowl Play

Starting: Big Bird, Unexpected

#-----------------------------------------------------------------------------
Encounter: Big Bird
Type: Custom
Actions: villains fight heroes, villains can be interrogated, rivals fight villains
Villains: penguin, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang,

fowl_feathers_gang2, fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2,

fowl_feathers_gang, fowl_feathers_gang, fowl_feathers_gang2, fowl_feathers_gang
Rivals: mrfreeze, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey, freeze_lackey,

freeze_lackey, freeze_lackey
Marker: museum1

Alert Cutscene:
Fade for 2 seconds
Rival1 teleports to freeze1
Rival2 teleports to freeze1
Rival3 teleports to freeze1
Rival4 teleports to freeze1
Rival5 teleports to freeze1
Rival6 teleports to freeze1
Rival7 teleports to freeze1
Rival8 teleports to freeze1
Unfade for 2 seconds
Red arrow on Villain1


Start Cutscene:
Remove arrow from Villain1
Camera on Villain1
Villain1 turns to Villain2
Villain1 plays animation melee
Villain1 says, "Faster you poultrons, that curs-ed caped crusader loves to prowl the streets at

this time of night!"
Villain2 turns to Villain1
Villain2 says, "I don't get it boss, why are we stealing this here statue thingy again?"
Villain1 says, "Aside from an asthetic value that a pea-brain like yours couldn't hope to

comprehend, this particular piece of antiquity is worth a considerable fortune!"
Villain2 says, "Oh, okay then boss, what are we waiting for?"
Villain1 plays animation pain
Villain1 says, "That's what I'd like to know you pack of neolithic neanderthals, get on with it!"
Camera on Hero1
Hero1 turns to Villain1
Hero1 says, "Hold it Penguin!  You just earned a one-way trip back to Stonegate Prison!"
Camera on Villain1
Villain1 turns to Hero1
Villain1 says, "Drat your timing Batman, but you haven't caught us yet!  Discretion is the better

part of valour my fine feathered friends!"
Villain2 turns to Villain1
Villain2 says, "What's 'dat mean boss?"
Villain1 turns to Villain2
Villain1 says, "It means run you insufferable low-brow!"

Interrogation Cutscene:
Fade for 2 seconds
Hero1 teleports to museum1
Villain1 teleports to museum1
Rival1 teleports to freeze2
Rival2 teleports to freeze2
Rival3 teleports to freeze2
Rival4 teleports to freeze2
Rival5 teleports to freeze2
Rival6 teleports to freeze2
Rival7 teleports to freeze2
Rival8 teleports to freeze2
Unfade for 2 seconds
Rival1 moves to Villain1
Cinematic camera on Villain1 to Hero1
Hero1 turns to Villain1
Hero1 says, "I hope you enjoy your time at Stonegate, Penguin, you're going to be there for a very

long time."
Villain1 says, "What are a few more months with my birds?  You know I'll be back soon..."
Rival1 turns to Villain1
Rival1 says, "Everyone freeze!"
Villain1 turns to Rival1
Hero1 turns to Rival1
Cinematic camera on Rival1 to Villain1
Rival1 says, "Penguin, I believe you have something I want..."
penguin plays animation melee
penguin says, "Back off you petulant icicle, this is my robbery!"
Rival1 says, "It was your robbery..."
Rival1 uses freeze freeze ray on Villain1
Villain1 plays animation stunned

Rivals Gone Cutscene:
Rival1 is revived
Hero1 moves to Rival1
Cinematic camera on Hero1 to Rival1
Rival1 turns to Hero1
Hero1 turns to Rival1
Rival1 says, "Well fought Batman, but a colder head prevailed."
Hero1 says, "Freeze, wait!  Why are you doing this?"
Rival1 says, "We must all obey our hearts Batman.  My heart is cold, but not dead...not yet.  I

will do what I must...but I've said to much!"
Rival1 uses freeze freeze ray on Villain1
Rival1 moves to freeze2
Fade for 2 seconds[/spoiler]

BentonGrey

And the error log.

[spoiler]>>> system/init.py executed
>>> system/localinit.py executed
>>> system\tredir.py executed
Starting ffx.py v. 3.2.0 build 11; branch = Gold / Release
Loading m25ai.py v. 3.2.0 build 10; branch = beta 2: m25 branch 2
importing missionobjvar.py v1.18
loading datfiles version 0.251000
importing MLOG Reader 1.0.18 release
Starting General Utilities 1.0
missionobjvar(FixLongs): Fixing overflow issue with <SCSTATE_BUOYANT>
missionobjvar defining functions for Campaign play.
CustomHeadCurrentTime 1181863149.812000
Starting Height Check module 1.4
Starting System Utilities 1.4
OBJECTS_HEIGHT: 604 entries
NIF_OBJECTS: 482 entries
BUILDINGS_IN_OBJECTS_DAT: 30 entries
BUILDING_DIMENSIONS: 30 entries
Starting skXMapInfo.py  v 0.79 beta
skXMapInfo: m25ai available
Campaign_ReadObjects() warning: object template <water> has more than one entry for attribute <mass>, values 650.000000 and 650.000000
FFX Mission Plugin 'firehydrant' imported
FFX Mission Plugin 'zombie' imported
Loading freeroam_keepbuildingdamage.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'freeroam_keepbuildingdamage' imported
FFX Mission Plugin 'm25ai_lowjumper' imported
FFX Mission Plugin 'm25ai_realitymanipulation' imported
FFX Mission Plugin 'cutscene_power' imported
Loading     m25enc_OPENDOOR.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_opendoor' imported
Loading     m25enc_simplechoice.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_simplechoice' imported
Starting Built-In Function Wrapper 1.5
('Object_CalcPrestige', 'js')
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod FowlPlay.py executed
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\danger.py executed
! GetMapInfo
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod FowlPlay.py executed
MLOG_Init(keepRunningModules=0): starting up
mlogreader.MLOG_Init: current mission = '01_FOWLPLAYBETA'
initialising FFX: skirmish=0
mapinfocaliper0 is not a valid explosion object
mapinfocaliper1 is not a valid explosion object
mapinfocaliper2 is not a valid explosion object
mapinfocaliper3 is not a valid explosion object
numberStr=93
storing hero_0: id_1,-93
initialising FFQ_initialiseExtras()
FFX_UpdateSun: getting default sun
FFX_UpdateSun: setting = (-140.0, 70.0, 1.0, 0.800000011921, (0.699999988079, 0.600000023842, 0.600000023842))
initAttribsForChar: working on hero_0 (superman)
initAttribsForChar (superman): looking at attribute bedevilled
initAttribsForChar (superman): looking at attribute kryptonian
execInitAttrib: init ffqnimbleflier attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init vulnerability attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init fastflier attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init invulnerable attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init toughguy2 attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
inittoughguy2: char=<hero_0>
inittoughguy2: initializing for hero_0
execInitAttrib: init heavylifter attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
initAttribsForChar (superman): looking at attribute flier
initAttribsForChar (superman): looking at attribute heavy hitter
initAttribsForChar (superman): looking at attribute accidentalchange
execInitAttrib: init accidentalchange attribute
    on hero_0 of template custom_template_93 (superman)
accidental change
superman
isNever
initAttribsForChar: working on m25obj_2 (penguin)
initAttribsForChar (penguin): looking at attribute flier
initAttribsForChar (penguin): looking at attribute summoner4
execInitAttrib: init summoner4 attribute
    on m25obj_2 of template penguin (penguin)
initAttribsForChar (penguin): looking at attribute unheroic
initAttribsForChar (penguin): looking at attribute disciplined
initAttribsForChar: working on m25obj_4 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_6 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_8 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_12 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_14 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_10 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_16 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_22 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_18 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_24 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_20 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_26 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_28 (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute icecontrol
execInitAttrib: init icecontrol attribute
    on m25obj_28 of template mrfreeze (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute jumper
initAttribsForChar (mrfreeze): looking at attribute armoured
initAttribsForChar (mrfreeze): looking at attribute dispassionate
execInitAttrib: init dispassionate attribute
    on m25obj_28 of template mrfreeze (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute solid skeleton
initAttribsForChar: working on m25obj_30 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_32 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_34 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_36 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_38 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_40 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_42 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
addArrow m25obj_2arrow m25obj_2 0 1
speak('m25obj_2','SPEECH_P2_INTEROGATEME_01')
cshelper: Cutscene [cutscene] submitted for playing
cshelper: Now playing cutscene [cutscene]
Step 1 of 2
0
speakInternal
0
Step 2 of 2
cshelper: Cutscene [cutscene] has ended
addArrow _m25obj_12_int_arrow m25obj_12 0 1
addArrow _m25obj_22_int_arrow m25obj_22 0 1
addArrow _m25obj_18_int_arrow m25obj_18 0 1
addArrow _m25obj_24_int_arrow m25obj_24 0 1
speak('hero_0','SPEECH_S5_CANTINTEROGATE_01')
cshelper: Cutscene [cutscene] submitted for playing
cshelper: Now playing cutscene [cutscene]
Step 1 of 2
0
speakInternal
0
Step 2 of 2
cshelper: Cutscene [cutscene] has ended
Template_GetHeight() non-fatal error:
    template 'penguin' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetHeight() non-fatal error:
    template 'custom_template_93' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetHeight() non-fatal error:
    template 'mrfreeze' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
[/spoiler]

M25

I don't think there is a 'Rivals Gone' cutscene.   Maybe call it End Cutscene instead.  That should play when everything is done.



BentonGrey

Hmm, I see now that I must have misread your documentation, whoops!  I'll try and replace it with that and we'll see what happens.

BentonGrey

Okay guys, everything is working perfectly now....except for that blasted end cutscene.  I just can't get it to play.  Here's what it looks like:

[spoiler]Interrogation Cutscene:
Fade for 2 seconds
Hero1 teleports to museum1
Villain1 teleports to museum1
Rival1 teleports to freeze2
Rival2 teleports to freeze2
Rival3 teleports to freeze2
Rival4 teleports to freeze2
Rival5 teleports to freeze2
Rival6 teleports to freeze2
Rival7 teleports to freeze2
Rival8 teleports to freeze2
Rival1 moves to Villain1
Unfade for 2 seconds
Cinematic camera on Villain1 to Hero1
Hero1 turns to Villain1
Hero1 says, "I hope you enjoy your time at Stonegate, Penguin, you're going to

be there for a very long time."
Villain1 says, "Cage me up again like a canary if you like Batman, but you

know I'll be back soon..."
Rival1 turns to Villain1
Rival1 says, "Everyone freeze!"
Villain1 turns to Rival1
Hero1 turns to Rival1
Cinematic camera on Rival1 to Villain1
Rival1 says, "Penguin, I believe you have something I want..."
penguin plays animation melee
penguin says, "Back off you petulant icicle, this is my robbery!"
Rival1 says, "It was your robbery..."
Rival1 uses freeze freeze ray on Villain1

End Cutscene:
Rival1 is revived
Hero1 moves to Rival1
Cinematic camera on Hero1 to Rival1
Rival1 turns to Hero1
Hero1 turns to Rival1
Rival1 says, "Well fought Batman, but a colder head prevailed."
Hero1 says, "Freeze, wait!  Why are you doing this?"
Rival1 says, "We must all obey our hearts Batman.  My heart is cold, but not

dead...not yet.  I will do what I must...but I've said to much!"
Rival1 uses freeze freeze ray on Hero1
Rival1 moves to freeze2
Fade for 2 seconds[/spoiler]

And this is the script log from running it:

[spoiler]>>> system/init.py executed
>>> system/localinit.py executed
>>> system\tredir.py executed
Starting ffx.py v. 3.2.0 build 11; branch = Gold / Release
Loading m25ai.py v. 3.2.0 build 10; branch = beta 2: m25 branch 2
importing missionobjvar.py v1.18
loading datfiles version 0.251000
importing MLOG Reader 1.0.18 release
Starting General Utilities 1.0
missionobjvar(FixLongs): Fixing overflow issue with <SCSTATE_BUOYANT>
missionobjvar defining functions for Campaign play.
CustomHeadCurrentTime 1184090833.296000
Starting Height Check module 1.4
Starting System Utilities 1.4
OBJECTS_HEIGHT: 604 entries
NIF_OBJECTS: 482 entries
BUILDINGS_IN_OBJECTS_DAT: 30 entries
BUILDING_DIMENSIONS: 30 entries
Starting skXMapInfo.py  v 0.79 beta
skXMapInfo: m25ai available
Campaign_ReadObjects() warning: object template <water> has more than one entry for attribute <mass>, values 650.000000 and 650.000000
FFX Mission Plugin 'firehydrant' imported
FFX Mission Plugin 'zombie' imported
Loading freeroam_keepbuildingdamage.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'freeroam_keepbuildingdamage' imported
FFX Mission Plugin 'm25ai_lowjumper' imported
FFX Mission Plugin 'm25ai_realitymanipulation' imported
FFX Mission Plugin 'cutscene_power' imported
Loading     m25enc_OPENDOOR.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_opendoor' imported
Loading     m25enc_simplechoice.py v.1.0.0 build 0; branch = main
FFX Mission Plugin 'm25enc_simplechoice' imported
Starting Built-In Function Wrapper 1.5
('Object_CalcPrestige', 'js')
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod FowlPlay.py executed
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\danger.py executed
! GetMapInfo
>>> C:\Documents and Settings\Owner\Local Settings\Application Data\Irrational Games\Freedom Force vs the 3rd Reich\temp\MiniMod FowlPlay.py executed
MLOG_Init(keepRunningModules=0): starting up
mlogreader.MLOG_Init: current mission = '01_FOWLPLAYBETA'
initialising FFX: skirmish=0
mapinfocaliper0 is not a valid explosion object
mapinfocaliper1 is not a valid explosion object
mapinfocaliper2 is not a valid explosion object
mapinfocaliper3 is not a valid explosion object
numberStr=93
storing hero_0: id_1,-93
initialising FFQ_initialiseExtras()
FFX_UpdateSun: getting default sun
FFX_UpdateSun: setting = (-140.0, 70.0, 1.0, 0.800000011921, (0.699999988079, 0.600000023842, 0.600000023842))
initAttribsForChar: working on hero_0 (superman)
initAttribsForChar (superman): looking at attribute bedevilled
initAttribsForChar (superman): looking at attribute kryptonian
execInitAttrib: init ffqnimbleflier attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init vulnerability attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init fastflier attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init invulnerable attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
execInitAttrib: init toughguy2 attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
inittoughguy2: char=<hero_0>
inittoughguy2: initializing for hero_0
execInitAttrib: init heavylifter attribute inside ['kryptonian', 'ffqnimbleflier', 'vulnerability', 'fastflier', 'invulnerable', 'toughguy2', 'heavylifter'] combo
    on hero_0 of template custom_template_93 (superman)
initAttribsForChar (superman): looking at attribute flier
initAttribsForChar (superman): looking at attribute heavy hitter
initAttribsForChar (superman): looking at attribute accidentalchange
execInitAttrib: init accidentalchange attribute
    on hero_0 of template custom_template_93 (superman)
accidental change
superman
isNever
initAttribsForChar: working on m25obj_2 (penguin)
initAttribsForChar (penguin): looking at attribute flier
initAttribsForChar (penguin): looking at attribute summoner4
execInitAttrib: init summoner4 attribute
    on m25obj_2 of template penguin (penguin)
initAttribsForChar (penguin): looking at attribute unheroic
initAttribsForChar (penguin): looking at attribute disciplined
initAttribsForChar: working on m25obj_4 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_10 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_6 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_18 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_8 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_12 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_14 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_16 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_22 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_24 (fowl_feathers_gang2)
initAttribsForChar (fowl_feathers_gang2): looking at attribute timid
initAttribsForChar (fowl_feathers_gang2): looking at attribute weak minded
initAttribsForChar: working on m25obj_28 (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute icecontrol
execInitAttrib: init icecontrol attribute
    on m25obj_28 of template mrfreeze (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute jumper
initAttribsForChar (mrfreeze): looking at attribute armoured
initAttribsForChar (mrfreeze): looking at attribute dispassionate
execInitAttrib: init dispassionate attribute
    on m25obj_28 of template mrfreeze (mrfreeze)
initAttribsForChar (mrfreeze): looking at attribute solid skeleton
initAttribsForChar: working on m25obj_20 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_26 (fowl_feathers_gang)
initAttribsForChar (fowl_feathers_gang): looking at attribute timid
initAttribsForChar (fowl_feathers_gang): looking at attribute weak minded
initAttribsForChar: working on m25obj_30 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_32 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_34 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_36 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_38 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_40 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
initAttribsForChar: working on m25obj_42 (freeze_lackey)
initAttribsForChar (freeze_lackey): looking at attribute weak minded
initAttribsForChar (freeze_lackey): looking at attribute bedevilled
Plugin 'firehydrant' OnPostInit() called
Plugin 'zombie' has no OnPostInit()
Plugin 'freeroam_keepbuildingdamage' OnPostInit() called
Plugin 'm25ai_lowjumper' has no OnPostInit()
Plugin 'm25ai_realitymanipulation' has no OnPostInit()
Plugin 'cutscene_power' has no OnPostInit()
Plugin 'm25enc_opendoor' has no OnPostInit()
Plugin 'm25enc_simplechoice' has no OnPostInit()
addArrow m25obj_2arrow m25obj_2 0 1
speak('m25obj_2','SPEECH_P2_INTEROGATEME_01')
cshelper: Cutscene [cutscene] submitted for playing
cshelper: Now playing cutscene [cutscene]
Step 1 of 2
0
speakInternal
0
Step 2 of 2
cshelper: Cutscene [cutscene] has ended
addArrow _m25obj_10_int_arrow m25obj_10 0 1
addArrow _m25obj_14_int_arrow m25obj_14 0 1
addArrow _m25obj_22_int_arrow m25obj_22 0 1
addArrow _m25obj_20_int_arrow m25obj_20 0 1
speak('hero_0','SPEECH_S5_CANTINTEROGATE_01')
cshelper: Cutscene [cutscene] submitted for playing
cshelper: Now playing cutscene [cutscene]
Step 1 of 2
0
speakInternal
0
Step 2 of 2
cshelper: Cutscene [cutscene] has ended
Template_GetHeight() non-fatal error:
    template 'penguin' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetHeight() non-fatal error:
    template 'custom_template_93' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetMesh() fatal error: template 'custom_template_93' not found
Template_GetHeight() non-fatal error:
    template 'mrfreeze' not found in list of template heights.
    To detect approximate height, use
    checkHeight(templateList, precise = 'no', repeat = 0, replace = 0, giants = 1, campaign = 0)
[/spoiler]

Could it be that End Cutscene doesn't work in this kind of encounter?

M25

The End cutscene is not playing because EZ script can't find a living Rival.  Unfortunately, the 'is revived' command won't fix that.  I would just make the last cutscene a separate encounter.

Encounter: The End
Type: Cutscene
Villain: mr_freeze

Start Cutscene:
Villain teleports to Hero
Cinematic Camera on Hero to Villain
(rest of the cutscene)

BentonGrey

Hey guys, let there be rejoicing!  Almost everything works perfectly, thanks M25!  There is just one last thing, and if it doesn't work, I can live with it.  Mr. Freeze still isn't using his power when the script calls for it.  Here's what it looks like:

Villain1 uses power freeze freeze ray on Hero1

It's not causing any problems in the mission, he's simply not using.  It's a shame from a visual standpoint, but I can live with it if we can't figure it out.

I've checked the spelling and spacing of the power name, and other than that I don't know what to do.

GogglesPizanno

QuoteVillain1 uses power freeze freeze ray on Hero1

Couple thoughts from one who knows little...

A) Is the power actually named "freeze freeze ray"
B) Is a power name (or any name in EZScript) allowed to use spaces? I know if you were scripting or programming something in a traditional language this would be a no-no.

BentonGrey

Yes, the name is "freeze freeze ray" (because of using a hero editor to add the character in, and not doing it by hand).  I know that all of my powers have spaces in them, and none of them give me trouble....hmm.

GogglesPizanno


M25

Space in the power name shouldn't be a problem.

Do make sure you have FFX 3.2 gold or later.  The beta version had a bug in it that prevented cutscene plug-ins (and the 'uses power' thing is a cutscene plug-in) from working properly.

|