Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18242/Core Modified Files: Actions.cpp Actor.cpp ActorBlock.cpp ActorBlock.h GameScript.cpp GameScript.h Map.cpp Triggers.cpp Log Message: implemented door scripts Implemented Closed/Opened triggers Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.331 retrieving revision 1.332 diff -C2 -d -r1.331 -r1.332 *** GameScript.cpp 24 Nov 2005 17:44:08 -0000 1.331 --- GameScript.cpp 26 Nov 2005 20:33:48 -0000 1.332 *************** *** 70,73 **** --- 70,74 ---- {"classlevellt", GameScript::ClassLevelLT, 0}, {"clicked", GameScript::Clicked, 0}, + {"closed", GameScript::Closed, 0}, {"combatcounter", GameScript::CombatCounter, 0}, {"combatcountergt", GameScript::CombatCounterGT, 0}, *************** *** 124,128 **** {"happinessgt", GameScript::HappinessGT, 0}, {"happinesslt", GameScript::HappinessLT, 0}, ! {"harmlessentered", GameScript::IsOverMe, 0}, //pst, not sure {"hasinnateability", GameScript::HaveSpell, 0}, //these must be the same {"hasitem", GameScript::HasItem, 0}, --- 125,130 ---- {"happinessgt", GameScript::HappinessGT, 0}, {"happinesslt", GameScript::HappinessLT, 0}, ! {"harmlessentered", GameScript::Entered, 0}, //pst, not sure ! {"harmlessopened", GameScript::Opened, 0}, //pst, not sure {"hasinnateability", GameScript::HaveSpell, 0}, //these must be the same {"hasitem", GameScript::HasItem, 0}, *************** *** 245,248 **** --- 247,251 ---- {"oncreation", GameScript::OnCreation, 0}, {"onscreen", GameScript::OnScreen, 0}, + {"opened", GameScript::Opened, 0}, {"openstate", GameScript::OpenState, 0}, {"or", GameScript::Or, 0}, Index: Actions.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actions.cpp,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** Actions.cpp 24 Nov 2005 17:44:08 -0000 1.43 --- Actions.cpp 26 Nov 2005 20:33:48 -0000 1.44 *************** *** 1644,1648 **** if (Sender->Type != ST_ACTOR) { //if not an actor opens, it don't play sound ! door->SetDoorOpen( true, false ); Sender->ReleaseCurrentAction(); return; --- 1644,1648 ---- if (Sender->Type != ST_ACTOR) { //if not an actor opens, it don't play sound ! door->SetDoorOpen( true, false, 0 ); Sender->ReleaseCurrentAction(); return; *************** *** 1652,1663 **** distance ); if (distance <= MAX_OPERATING_DISTANCE) { if (door->Flags&DOOR_LOCKED) { const char *Key = door->GetKey(); - Actor *actor = (Actor *) Sender; if (!Key || !actor->inventory.HasItem(Key,0) ) { //playsound unsuccessful opening of door core->PlaySound(DS_OPEN_FAIL); Sender->ReleaseCurrentAction(); ! return; } --- 1652,1664 ---- distance ); if (distance <= MAX_OPERATING_DISTANCE) { + Actor *actor = (Actor *) Sender; + if (door->Flags&DOOR_LOCKED) { const char *Key = door->GetKey(); if (!Key || !actor->inventory.HasItem(Key,0) ) { //playsound unsuccessful opening of door core->PlaySound(DS_OPEN_FAIL); Sender->ReleaseCurrentAction(); ! return; //don't open door } *************** *** 1672,1676 **** } } ! door->SetDoorOpen( true, true ); } else { GoNearAndRetry(Sender, p); --- 1673,1677 ---- } } ! door->SetDoorOpen( true, true, actor->GetID() ); } else { GoNearAndRetry(Sender, p); *************** *** 1698,1702 **** if (Sender->Type != ST_ACTOR) { //if not an actor opens, it don't play sound ! door->SetDoorOpen( false, false ); Sender->ReleaseCurrentAction(); return; --- 1699,1703 ---- if (Sender->Type != ST_ACTOR) { //if not an actor opens, it don't play sound ! door->SetDoorOpen( false, false, 0 ); Sender->ReleaseCurrentAction(); return; *************** *** 1713,1717 **** core->PlaySound(DS_CLOSE_FAIL); } else { ! door->SetDoorOpen( false, true ); } } else { --- 1714,1719 ---- core->PlaySound(DS_CLOSE_FAIL); } else { ! Actor *actor = (Actor *) Sender; ! door->SetDoorOpen( false, true, actor->GetID() ); } } else { Index: GameScript.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.h,v retrieving revision 1.221 retrieving revision 1.222 diff -C2 -d -r1.221 -r1.222 *** GameScript.h 20 Nov 2005 11:01:32 -0000 1.221 --- GameScript.h 26 Nov 2005 20:33:48 -0000 1.222 *************** *** 677,680 **** --- 677,681 ---- static int ClassLevelLT(Scriptable* Sender, Trigger* parameters); static int Clicked(Scriptable* Sender, Trigger* parameters); + static int Closed(Scriptable* Sender, Trigger* parameters); static int CombatCounter(Scriptable* Sender, Trigger* parameters); static int CombatCounterGT(Scriptable* Sender, Trigger* parameters); *************** *** 826,829 **** --- 827,831 ---- static int OnCreation(Scriptable* Sender, Trigger* parameters); static int OnScreen(Scriptable* Sender, Trigger* parameters); + static int Opened(Scriptable* Sender, Trigger* parameters); static int OpenState(Scriptable* Sender, Trigger* parameters); static int Or(Scriptable* Sender, Trigger* parameters); Index: Map.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.cpp,v retrieving revision 1.204 retrieving revision 1.205 diff -C2 -d -r1.204 -r1.205 *** Map.cpp 24 Nov 2005 17:50:21 -0000 1.204 --- Map.cpp 26 Nov 2005 20:33:48 -0000 1.205 *************** *** 462,466 **** actor->DoStep( ); } ! //Check if we need to start some trigger scripts int ipCount = 0; while (true) { --- 462,480 ---- actor->DoStep( ); } ! ! //Check if we need to start some door scripts ! int doorCount = 0; ! while (true) { ! Door* door = TMap->GetDoor( doorCount++ ); ! if (!door) ! break; ! if (!door->Scripts[0]) ! continue; ! door->ExecuteScript( door->Scripts[0] ); ! //Execute Pending Actions ! door->ProcessActions(); ! } ! ! //Check if we need to start some trap scripts int ipCount = 0; while (true) { Index: Triggers.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Triggers.cpp,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** Triggers.cpp 24 Nov 2005 17:44:09 -0000 1.26 --- Triggers.cpp 26 Nov 2005 20:33:48 -0000 1.27 *************** *** 1144,1147 **** --- 1144,1187 ---- } + //opened for doors (using lastEntered) + int GameScript::Opened(Scriptable* Sender, Trigger* parameters) + { + if (Sender->Type != ST_DOOR) { + return 0; + } + if (parameters->objectParameter == NULL) { + if (Sender->LastEntered) { + Sender->AddTrigger (&Sender->LastEntered); + return 1; + } + return 0; + } + if (MatchActor(Sender, Sender->LastEntered, parameters->objectParameter)) { + Sender->AddTrigger (&Sender->LastEntered); + return 1; + } + return 0; + } + + //closed for doors (using lastTrigger) + int GameScript::Closed(Scriptable* Sender, Trigger* parameters) + { + if (Sender->Type != ST_DOOR) { + return 0; + } + if (parameters->objectParameter == NULL) { + if (Sender->LastTrigger) { + Sender->AddTrigger (&Sender->LastTrigger); + return 1; + } + return 0; + } + if (MatchActor(Sender, Sender->LastTrigger, parameters->objectParameter)) { + Sender->AddTrigger (&Sender->LastTrigger); + return 1; + } + return 0; + } + int GameScript::Entered(Scriptable* Sender, Trigger* parameters) { *************** *** 1165,1169 **** int GameScript::IsOverMe(Scriptable* Sender, Trigger* parameters) { ! if (Sender->Type != ST_PROXIMITY || Sender->Type != ST_TRAVEL) { return 0; } --- 1205,1209 ---- int GameScript::IsOverMe(Scriptable* Sender, Trigger* parameters) { ! if (Sender->Type != ST_PROXIMITY && Sender->Type != ST_TRAVEL) { return 0; } Index: Actor.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.cpp,v retrieving revision 1.136 retrieving revision 1.137 diff -C2 -d -r1.136 -r1.137 *** Actor.cpp 24 Nov 2005 17:53:27 -0000 1.136 --- Actor.cpp 26 Nov 2005 20:33:48 -0000 1.137 *************** *** 746,768 **** // } if (KillVar[0]) { if (core->HasFeature(GF_HAS_KAPUTZ) ) { - ieDword value = 0; - game->kaputz->Lookup(KillVar, value); game->kaputz->SetAt(KillVar, value+1); } else { - ieDword value = 0; - game->locals->Lookup(KillVar, value); game->locals->SetAt(KillVar, value+1); } ! } else { char varname[33]; ieDword value = 0; ! snprintf(varname, 32, "SPRITE_IS_DEAD%s", scriptName); ! game->locals->Lookup(varname, value); ! game->locals->SetAt(varname, value+1); } --- 746,773 ---- // } + if (KillVar[0]) { + ieDword value = 0; if (core->HasFeature(GF_HAS_KAPUTZ) ) { game->kaputz->Lookup(KillVar, value); game->kaputz->SetAt(KillVar, value+1); } else { game->locals->Lookup(KillVar, value); game->locals->SetAt(KillVar, value+1); } ! } ! if (scriptName[0]) { char varname[33]; ieDword value = 0; ! if (core->HasFeature(GF_HAS_KAPUTZ) ) { ! snprintf(varname, 32, "%s_DEAD", scriptName); ! game->kaputz->Lookup(varname, value); ! game->kaputz->SetAt(varname, value+1); ! } else { ! snprintf(varname, 32, "SPRITE_IS_DEAD%s", scriptName); ! game->locals->Lookup(varname, value); ! game->locals->SetAt(varname, value+1); ! } } Index: ActorBlock.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.h,v retrieving revision 1.94 retrieving revision 1.95 diff -C2 -d -r1.94 -r1.95 *** ActorBlock.h 24 Nov 2005 17:53:27 -0000 1.94 --- ActorBlock.h 26 Nov 2005 20:33:48 -0000 1.95 *************** *** 354,359 **** void SetName(const char* Name); // sets door ID void SetTiles(unsigned short* Tiles, int count); ! void SetDoorLocked(bool Locked, bool playsound = false); ! void SetDoorOpen(bool Open, bool playsound = false); void SetPolygon(bool Open, Gem_Polygon* poly); bool IsOpen() const; --- 354,359 ---- void SetName(const char* Name); // sets door ID void SetTiles(unsigned short* Tiles, int count); ! void SetDoorLocked(bool Locked, bool playsound); ! void SetDoorOpen(bool Open, bool playsound, ieDword ID); void SetPolygon(bool Open, Gem_Polygon* poly); bool IsOpen() const; Index: ActorBlock.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.cpp,v retrieving revision 1.123 retrieving revision 1.124 diff -C2 -d -r1.123 -r1.124 *** ActorBlock.cpp 26 Nov 2005 17:55:16 -0000 1.123 --- ActorBlock.cpp 26 Nov 2005 20:33:48 -0000 1.124 *************** *** 255,260 **** if (CurrentAction) { - printf("Released action in processAction: %d\n", CurrentAction->actionID); - CurrentAction->Dump(); ReleaseCurrentAction(); } --- 255,258 ---- *************** *** 829,835 **** } ! void Door::SetDoorOpen(bool Open, bool playsound) { ! if (Open) SetDoorLocked(false,playsound); ToggleTiles (Open, playsound); UpdateDoor (); --- 827,838 ---- } ! void Door::SetDoorOpen(bool Open, bool playsound, ieDword ID) { ! if (Open){ ! LastEntered = ID; //used as lastOpener ! SetDoorLocked (false,playsound); ! } else { ! LastTrigger = ID; //used as lastCloser ! } ToggleTiles (Open, playsound); UpdateDoor (); *************** *** 878,882 **** printf( "Secret door: %s (Found: %s)\n", YESNO(Flags&DOOR_SECRET),YESNO(Flags&DOOR_FOUND)); const char *Key = GetKey(); ! printf( "Key (%s) removed: %s\n", Key?Key:"NONE", YESNO(Flags&DOOR_KEY) ); } --- 881,889 ---- printf( "Secret door: %s (Found: %s)\n", YESNO(Flags&DOOR_SECRET),YESNO(Flags&DOOR_FOUND)); const char *Key = GetKey(); ! const char *name = "NONE"; ! if (Scripts[0]) { ! name = Scripts[0]->GetName(); ! } ! printf( "Script: %s, Key (%s) removed: %s\n", name, Key?Key:"NONE", YESNO(Flags&DOOR_KEY) ); } *************** *** 979,983 **** return true; } ! Flags|=TRAP_DEACTIVATED; return true; } --- 986,992 ---- return true; } ! if (Trapped) { ! Flags|=TRAP_DEACTIVATED; ! } return true; } *************** *** 1009,1016 **** break; } ! printf( "TrapDetected: %d, Trapped: %s\n", TrapDetected, YESNO(Scripts[0])); printf( "Trap detection: %d, Trap removal: %d\n", TrapDetectionDiff, TrapRemovalDiff ); ! printf( "Key: %s, Dialog: %s\n", KeyResRef, DialogResRef ); printf( "Active: %s\n", YESNO(Active)); } --- 1018,1029 ---- break; } ! printf( "TrapDetected: %d, Trapped: %s\n", TrapDetected, YESNO(Trapped)); printf( "Trap detection: %d, Trap removal: %d\n", TrapDetectionDiff, TrapRemovalDiff ); ! const char *name = "NONE"; ! if (Scripts[0]) { ! name = Scripts[0]->GetName(); ! } ! printf( "Script: %s, Key: %s, Dialog: %s\n", name, KeyResRef, DialogResRef ); printf( "Active: %s\n", YESNO(Active)); } *************** *** 1189,1191 **** --- 1202,1209 ---- printf( "Trap detection: %d, Trap removal: %d\n", TrapDetectionDiff, TrapRemovalDiff ); + const char *name = "NONE"; + if (Scripts[0]) { + name = Scripts[0]->GetName(); + } + printf( "Script: %s, Key: %s\n", name, KeyResRef ); } |