aboutsummaryrefslogtreecommitdiff
path: root/simon/verb.cpp
diff options
context:
space:
mode:
authorMax Horn2006-02-11 22:45:04 +0000
committerMax Horn2006-02-11 22:45:04 +0000
commit26ee630756ebdd7c96bccede0881a8c8b98e8f2b (patch)
tree26e378d5cf990a2b81c2c96e9e683a7f333b62e8 /simon/verb.cpp
parent2a9a0d4211b1ea5723f1409d91cb95de8984429e (diff)
downloadscummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.gz
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.bz2
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.zip
Moved engines to the new engines/ directory
svn-id: r20582
Diffstat (limited to 'simon/verb.cpp')
-rw-r--r--simon/verb.cpp608
1 files changed, 0 insertions, 608 deletions
diff --git a/simon/verb.cpp b/simon/verb.cpp
deleted file mode 100644
index 65f105f1f9..0000000000
--- a/simon/verb.cpp
+++ /dev/null
@@ -1,608 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2001-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-// Verb and hitarea handling
-#include "common/stdafx.h"
-#include "simon/simon.h"
-#include "simon/intern.h"
-
-namespace Simon {
-
-static const char *const russian_verb_names[] = {
- "Ietj _",
- "Qnotrft< pa",
- "Nt_r[t<",
- "Ecjdat<",
-
- "Q=fst<",
- "C^]t<",
- "Ha_r[t<",
- "Isqom<^ocat<",
-
- "Docorjt<",
- "Qp]t<",
- "Neft<",
- "Eat<"
-};
-
-static const char *const hebrew_verb_names[] = {
- "LJ @L",
- "DQZKL RL",
- "TZG",
- "DFF",
-
- "@KEL",
- "DXM",
- "QBEX",
- "DYZNY",
-
- "CAX @L",
- "DQX",
- "LAY",
- "ZO"
-};
-
-static const char *const spanish_verb_names[] = {
- "Caminar",
- "Mirar",
- "Abrir",
- "Mover",
-
- "Consumir",
- "Coger",
- "Cerrar",
- "Usar",
-
- "Hablar",
- "Quitar",
- "Llevar",
- "Dar"
-};
-
-static const char *const italian_verb_names[] = {
- "Vai verso",
- "Osserva",
- "Apri",
- "Sposta",
-
- "Mangia",
- "Raccogli",
- "Chiudi",
- "Usa",
-
- "Parla a",
- "Togli",
- "Indossa",
- "Dai"
-};
-
-static const char *const french_verb_names[] = {
- "Aller vers",
- "Regarder",
- "Ouvrir",
- "D/placer",
-
- "Consommer",
- "Prendre",
- "Fermer",
- "Utiliser",
-
- "Parler ;",
- "Enlever",
- "Mettre",
- "Donner"
-};
-
-static const char *const german_verb_names[] = {
- "Gehe zu",
- "Schau an",
- ";ffne",
- "Bewege",
-
- "Verzehre",
- "Nimm",
- "Schlie+e",
- "Benutze",
-
- "Rede mit",
- "Entferne",
- "Trage",
- "Gib"
-};
-
-static const char *const english_verb_names[] = {
- "Walk to",
- "Look at",
- "Open",
- "Move",
-
- "Consume",
- "Pick up",
- "Close",
- "Use",
-
- "Talk to",
- "Remove",
- "Wear",
- "Give"
-};
-
-static const char *const russian_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "s yfn?",
- "", "", "", "_onu ?"
-};
-
-static const char *const hebrew_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "RM ND ?",
- "", "", "", "LNI ?"
-};
-
-static const char *const spanish_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "^con qu/?",
- "", "", "", "^a qui/n?"
-};
-
-static const char *const italian_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "con cosa ?",
- "", "", "", "a chi ?"
-};
-
-static const char *const french_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "avec quoi ?",
- "", "", "", "; qui ?"
-};
-
-static const char *const german_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "mit was ?",
- "", "", "", "zu wem ?"
-};
-
-static const char *const english_verb_prep_names[] = {
- "", "", "", "",
- "", "", "", "with what ?",
- "", "", "", "to whom ?"
-};
-
-void SimonEngine::defocusHitarea() {
- HitArea *last;
- HitArea *ha;
-
- if (getGameType() == GType_SIMON2) {
- if (_bitArray[4] & 0x8000) {
- o_sync(202);
- _lastHitArea2Ptr = NULL;
- return;
- }
- }
-
- last = _hitAreaPtr5;
-
- if (last == _hitAreaPtr7)
- return;
-
- hitareaChangedHelper();
- _hitAreaPtr7 = last;
-
- if (last != NULL && (ha = findHitAreaByID(200)) && (ha->flags & 0x40) && !(last->flags & 0x40))
- focusVerb(last->id);
-}
-
-void SimonEngine::focusVerb(uint hitarea_id) {
- uint x;
- const char *txt;
- const char * const *verb_names;
- const char * const *verb_prep_names;
-
- hitarea_id -= 101;
-
- if (_showPreposition) {
- switch (_language) {
- case Common::RU_RUS:
- verb_prep_names = russian_verb_prep_names;
- break;
- case Common::HB_ISR:
- verb_prep_names = hebrew_verb_prep_names;
- break;
- case Common::ES_ESP:
- verb_prep_names = spanish_verb_prep_names;
- break;
- case Common::IT_ITA:
- verb_prep_names = italian_verb_prep_names;
- break;
- case Common::FR_FRA:
- verb_prep_names = french_verb_prep_names;
- break;
- case Common::DE_DEU:
- verb_prep_names = german_verb_prep_names;
- break;
- default:
- verb_prep_names = english_verb_prep_names;
- break;
- }
- CHECK_BOUNDS(hitarea_id, english_verb_prep_names);
- txt = verb_prep_names[hitarea_id];
- } else {
- switch (_language) {
- case Common::RU_RUS:
- verb_names = russian_verb_names;
- break;
- case Common::HB_ISR:
- verb_names = hebrew_verb_names;
- break;
- case Common::ES_ESP:
- verb_names = spanish_verb_names;
- break;
- case Common::IT_ITA:
- verb_names = italian_verb_names;
- break;
- case Common::FR_FRA:
- verb_names = french_verb_names;
- break;
- case Common::DE_DEU:
- verb_names = german_verb_names;
- break;
- default:
- verb_names = english_verb_names;
- break;
- }
- CHECK_BOUNDS(hitarea_id, english_verb_names);
- txt = verb_names[hitarea_id];
- }
- x = (53 - strlen(txt)) * 3;
- showActionString(x, (const byte *)txt);
-}
-
-void SimonEngine::showActionString(uint x, const byte *string) {
- FillOrCopyStruct *fcs;
-
- fcs = _windowArray[1];
- if (fcs == NULL || fcs->text_color == 0)
- return;
-
- fcs->textColumn = x >> 3;
- fcs->textColumnOffset = x & 7;
-
- for (; *string; string++)
- video_putchar(fcs, *string);
-}
-
-void SimonEngine::hitareaChangedHelper() {
- FillOrCopyStruct *fcs;
-
- if (getGameType() == GType_SIMON2) {
- if (_bitArray[4] & 0x8000)
- return;
- }
-
- fcs = _windowArray[1];
- if (fcs != NULL && fcs->text_color != 0)
- video_fill_or_copy_from_3_to_2(fcs);
-
- _lastHitArea2Ptr = NULL;
- _hitAreaPtr7 = NULL;
-}
-
-HitArea *SimonEngine::findHitAreaByID(uint hitarea_id) {
- HitArea *ha = _hitAreas;
- uint count = ARRAYSIZE(_hitAreas);
-
- do {
- if (ha->id == hitarea_id)
- return ha;
- } while (ha++, --count);
- return NULL;
-}
-
-HitArea *SimonEngine::findEmptyHitArea() {
- HitArea *ha = _hitAreas;
- uint count = ARRAYSIZE(_hitAreas);
-
- do {
- if (ha->flags == 0)
- return ha;
- } while (ha++, --count);
- return NULL;
-}
-
-void SimonEngine::clear_hitarea_bit_0x40(uint hitarea) {
- HitArea *ha = findHitAreaByID(hitarea);
- if (ha != NULL)
- ha->flags &= ~0x40;
-}
-
-void SimonEngine::set_hitarea_bit_0x40(uint hitarea) {
- HitArea *ha = findHitAreaByID(hitarea);
- if (ha != NULL) {
- ha->flags |= 0x40;
- ha->flags &= ~2;
- if (hitarea == 102)
- hitarea_proc_1();
- }
-}
-
-void SimonEngine::set_hitarea_x_y(uint hitarea, int x, int y) {
- HitArea *ha = findHitAreaByID(hitarea);
- if (ha != NULL) {
- ha->x = x;
- ha->y = y;
- }
-}
-
-void SimonEngine::delete_hitarea(uint hitarea) {
- HitArea *ha = findHitAreaByID(hitarea);
- if (ha != NULL) {
- ha->flags = 0;
- if (ha == _lastHitArea2Ptr)
- defocusHitarea();
- _needHitAreaRecalc++;
- }
-}
-
-bool SimonEngine::is_hitarea_0x40_clear(uint hitarea) {
- HitArea *ha = findHitAreaByID(hitarea);
- if (ha == NULL)
- return false;
- return (ha->flags & 0x40) == 0;
-}
-
-void SimonEngine::addNewHitArea(int id, int x, int y, int width, int height, int flags, int unk3, Item *item_ptr) {
- HitArea *ha;
- delete_hitarea(id);
-
- ha = findEmptyHitArea();
- ha->x = x;
- ha->y = y;
- ha->width = width;
- ha->height = height;
- ha->flags = flags | 0x20;
- ha->id = ha->layer = id;
- ha->unk3 = unk3;
- ha->item_ptr = item_ptr;
-
- _needHitAreaRecalc++;
-}
-
-void SimonEngine::hitarea_proc_1() {
- uint id;
- HitArea *ha;
-
- if (getGameType() == GType_SIMON2) {
- id = 2;
- if (!(_bitArray[4] & 0x8000))
- id = (_mouseY >= 136) ? 102 : 101;
- } else {
- id = (_mouseY >= 136) ? 102 : 101;
- }
-
- _hitAreaUnk4 = id;
-
- ha = findHitAreaByID(id);
- if (ha == NULL)
- return;
-
- if (ha->flags & 0x40) {
- _hitAreaUnk4 = 999;
- _hitAreaPtr5 = NULL;
- } else {
- _verbHitArea = ha->unk3;
- handle_verb_hitarea(ha);
- }
-}
-
-void SimonEngine::handle_verb_hitarea(HitArea *ha) {
- HitArea *tmp = _hitAreaPtr5;
-
- if (ha == tmp)
- return;
-
- if (!(getGameType() == GType_SIMON2)) {
- if (tmp != NULL) {
- tmp->flags |= 8;
- video_toggle_colors(tmp, 0xd5, 0xd0, 0xd5, 0xA);
- }
-
- if (ha->flags & 2)
- video_toggle_colors(ha, 0xda, 0xd5, 0xd5, 5);
- else
- video_toggle_colors(ha, 0xdf, 0xda, 0xda, 0xA);
-
- ha->flags &= ~(2 + 8);
-
- } else {
- if (ha->id < 101)
- return;
- _mouseCursor = ha->id - 101;
- _needHitAreaRecalc++;
- }
- _hitAreaPtr5 = ha;
-}
-
-void SimonEngine::hitarea_leave(HitArea *ha) {
- if (!(getGameType() == GType_SIMON2)) {
- video_toggle_colors(ha, 0xdf, 0xd5, 0xda, 5);
- } else {
- video_toggle_colors(ha, 0xe7, 0xe5, 0xe6, 1);
- }
-}
-
-void SimonEngine::leaveHitAreaById(uint hitarea_id) {
- HitArea *ha = findHitAreaByID(hitarea_id);
- if (ha)
- hitarea_leave(ha);
-}
-
-void SimonEngine::handle_uparrow_hitarea(FillOrCopyStruct *fcs) {
- uint index;
-
- index = get_fcs_ptr_3_index(fcs);
-
- if (fcs->fcs_data->unk1 == 0)
- return;
-
- mouseOff();
- drawIconArray(index, fcs->fcs_data->item_ptr, fcs->fcs_data->unk1 - 1, fcs->fcs_data->unk2);
- mouseOn();
-}
-
-void SimonEngine::handle_downarrow_hitarea(FillOrCopyStruct *fcs) {
- uint index;
-
- index = get_fcs_ptr_3_index(fcs);
-
- mouseOff();
- drawIconArray(index, fcs->fcs_data->item_ptr, fcs->fcs_data->unk1 + 1, fcs->fcs_data->unk2);
- mouseOn();
-}
-
-void SimonEngine::setup_hitarea_from_pos(uint x, uint y, uint mode) {
- HitArea *best_ha;
- HitArea *ha = _hitAreas;
- uint count = ARRAYSIZE(_hitAreas);
- uint16 layer = 0;
- uint16 x_ = x;
- const uint16 y_ = y;
-
- if (getGameType() == GType_SIMON2) {
- if (_bitArray[4] & 0x8000 || y < 134) {
- x_ += _scrollX * 8;
- }
- }
-
- best_ha = NULL;
-
- do {
- if (ha->flags & 0x20) {
- if (!(ha->flags & 0x40)) {
- if (x_ >= ha->x && y_ >= ha->y &&
- x_ - ha->x < ha->width && y_ - ha->y < ha->height && layer <= ha->layer) {
- layer = ha->layer;
- best_ha = ha;
- } else {
- if (ha->flags & 2) {
- hitarea_leave(ha);
- ha->flags &= ~2;
- }
- }
- } else {
- ha->flags &= ~2;
- }
- }
- } while (ha++, --count);
-
- if (best_ha == NULL) {
- defocusHitarea();
- return;
- }
-
- if (mode != 0 && mode != 3) {
- _lastHitArea = best_ha;
- _variableArray[1] = x;
- _variableArray[2] = y;
- }
-
- if (best_ha->flags & 4) {
- defocusHitarea();
- } else if (best_ha != _lastHitArea2Ptr) {
- new_current_hitarea(best_ha);
- }
-
- if (best_ha->flags & 8 && !(best_ha->flags & 2)) {
- hitarea_leave(best_ha);
- best_ha->flags |= 2;
- }
-
- return;
-}
-
-void SimonEngine::new_current_hitarea(HitArea *ha) {
- bool result;
-
- hitareaChangedHelper();
- if (ha->flags & 1) {
- result = hitarea_proc_2(ha->flags >> 8);
- } else {
- result = hitarea_proc_3(ha->item_ptr);
- }
-
- if (result)
- _lastHitArea2Ptr = ha;
-}
-
-bool SimonEngine::hitarea_proc_2(uint a) {
- uint x;
- const byte *string_ptr;
-
- if (getGameType() == GType_SIMON2) {
- if (_bitArray[4] & 0x8000) {
- Subroutine *sub;
- _variableArray[84] = a;
- sub = getSubroutineByID(5003);
- if (sub != NULL)
- startSubroutineEx(sub);
- return true;
- }
- }
-
- if (a >= 20)
- return false;
-
- string_ptr = getStringPtrByID(_stringIdArray2[a]);
- // Arisme : hack for long strings in the French version
- if ((strlen((const char*)string_ptr) - 1) <= 53)
- x = (53 - (strlen((const char *)string_ptr) - 1)) * 3;
- else
- x = 0;
- showActionString(x, string_ptr);
-
- return true;
-}
-
-bool SimonEngine::hitarea_proc_3(Item *item) {
- Child2 *child2;
- uint x;
- const byte *string_ptr;
-
- if (item == 0 || item == _dummyItem2 || item == _dummyItem3)
- return false;
-
- child2 = (Child2 *)findChildOfType(item, 2);
- if (child2 == NULL)
- return false;
-
- string_ptr = getStringPtrByID(child2->string_id);
- // Arisme : hack for long strings in the French version
- if ((strlen((const char*)string_ptr) - 1) <= 53)
- x = (53 - (strlen((const char *)string_ptr) - 1)) * 3;
- else
- x = 0;
- showActionString(x, string_ptr);
-
- return true;
-}
-
-} // End of namespace Simon