diff options
author | dreammaster | 2019-10-04 05:50:25 +0100 |
---|---|---|
committer | Paul Gilbert | 2019-10-07 19:01:51 -0700 |
commit | af4f390ab26c2a181b3dc69dfd93e8fcf5bc30a0 (patch) | |
tree | 05e38513a7a11de5288815fba6ee1fca56e5efc6 /engines/glk/jacl/display.cpp | |
parent | a00ed41679b9cdc6a4f2ede5c500a658f600103c (diff) | |
download | scummvm-rg350-af4f390ab26c2a181b3dc69dfd93e8fcf5bc30a0.tar.gz scummvm-rg350-af4f390ab26c2a181b3dc69dfd93e8fcf5bc30a0.tar.bz2 scummvm-rg350-af4f390ab26c2a181b3dc69dfd93e8fcf5bc30a0.zip |
GLK: JACL: Adding subengine files
Diffstat (limited to 'engines/glk/jacl/display.cpp')
-rw-r--r-- | engines/glk/jacl/display.cpp | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/engines/glk/jacl/display.cpp b/engines/glk/jacl/display.cpp new file mode 100644 index 0000000000..db59efbdb1 --- /dev/null +++ b/engines/glk/jacl/display.cpp @@ -0,0 +1,265 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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. + * + */ + +#include "glk/jacl/jacl.h" +#include "glk/jacl/language.h" +#include "glk/jacl/types.h" +#include "glk/jacl/prototypes.h" + +namespace Glk { +namespace JACL { + +extern char temp_buffer[]; +extern char function_name[]; + +extern struct object_type *object[]; +extern struct variable_type *variable[]; + +extern char *word[]; + +extern int player; +extern int wp; +extern int objects; +extern int custom_error; + +extern int spaced; + +int check_light(int where) { + int index; + + if ((object[where]->attributes & DARK) == FALSE) + return (TRUE); + else { + for (index = 1; index <= objects; index++) { + if ((object[index]->attributes & LUMINOUS) + && scope(index, "*present")) + return (TRUE); + } + } + return (FALSE); +} + +char *sentence_output(int index, int capital) { + if (!strcmp(object[index]->article, "name")) { + strcpy(temp_buffer, object[index]->inventory); + } else { + strcpy(temp_buffer, object[index]->definite); + strcat(temp_buffer, " "); + strcat(temp_buffer, object[index]->inventory); + } + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return (temp_buffer); +} + +char *isnt_output(int index, bool) { + if (object[index]->attributes & PLURAL) + return (cstring_resolve("ARENT")->value); + else + return (cstring_resolve("ISNT")->value); +} + +char *is_output(int index, bool) { + if (object[index]->attributes & PLURAL) + return (cstring_resolve("ARE")->value); + else + return (cstring_resolve("IS")->value); +} + +char *sub_output(int index, int capital) { + if (object[index]->attributes & PLURAL) { + strcpy(temp_buffer, cstring_resolve("THEY_WORD")->value); + } else { + if (index == player) { + strcpy(temp_buffer, cstring_resolve("YOU_WORD")->value); + } else if (object[index]->attributes & ANIMATE) { + if (object[index]->attributes & FEMALE) { + strcpy(temp_buffer, cstring_resolve("SHE_WORD")->value); + } else { + strcpy(temp_buffer, cstring_resolve("HE_WORD")->value); + } + } else { + strcpy(temp_buffer, cstring_resolve("IT_WORD")->value); + } + } + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return temp_buffer; +} + +char *obj_output(int index, int capital) { + if (object[index]->attributes & PLURAL) { + strcpy(temp_buffer, cstring_resolve("THEM_WORD")->value); + } else { + if (index == player) { + strcpy(temp_buffer, cstring_resolve("YOURSELF_WORD")->value); + } else if (object[index]->attributes & ANIMATE) { + if (object[index]->attributes & FEMALE) { + strcpy(temp_buffer, cstring_resolve("HER_WORD")->value); + } else { + strcpy(temp_buffer, cstring_resolve("HIM_WORD")->value); + } + } else { + strcpy(temp_buffer, cstring_resolve("IT_WORD")->value); + } + } + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return temp_buffer; +} + +char *it_output(int index, bool) { + if (object[index]->attributes & ANIMATE) { + return sentence_output(index, FALSE); + } else { + if (object[index]->attributes & PLURAL) { + return (cstring_resolve("THEM_WORD")->value); + } else { + return (cstring_resolve("IT_WORD")->value); + } + } +} + +char *that_output(int index, int capital) { + if (object[index]->attributes & PLURAL) { + strcpy(temp_buffer, cstring_resolve("THOSE_WORD")->value); + } else { + strcpy(temp_buffer, cstring_resolve("THAT_WORD")->value); + } + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return temp_buffer; +} + +char *doesnt_output(int index, bool) { + if (object[index]->attributes & PLURAL) + return (cstring_resolve("DONT")->value); + else + return (cstring_resolve("DOESNT")->value); +} + +char *does_output(int index, bool) { + if (object[index]->attributes & PLURAL) + return (cstring_resolve("DO")->value); + else + return (cstring_resolve("DOES")->value); +} + +char *list_output(int index, int capital) { + if (!strcmp(object[index]->article, "name")) { + strcpy(temp_buffer, object[index]->inventory); + } else { + strcpy(temp_buffer, object[index]->article); + strcat(temp_buffer, " "); + strcat(temp_buffer, object[index]->inventory); + } + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return (temp_buffer); +} + +char *plain_output(int index, int capital) { + strcpy(temp_buffer, object[index]->inventory); + + if (capital) + temp_buffer[0] = toupper(temp_buffer[0]); + + return (temp_buffer); +} + +char *long_output(int index) { + if (!strcmp(object[index]->described, "function")) { + strcpy(function_name, "long_"); + strcat(function_name, object[index]->label); + if (execute(function_name) == FALSE) { + unkfunrun(function_name); + } + + // THE BUFFER IS RETURNED EMPTY AS THE TEXT IS OUTPUT BY + // WRITE STATEMENTS IN THE FUNCTION CALLED + temp_buffer[0] = 0; + return (temp_buffer); + } else { + return (object[index]->described); + } +} + +void no_it() { + write_text(cstring_resolve("NO_IT")->value); + write_text(word[wp]); + write_text(cstring_resolve("NO_IT_END")->value); + custom_error = TRUE; +} + +void look_around() { + /* THIS FUNCTION DISPLAYS THE DESCRIPTION OF THE CURRENT LOCATION ALONG + * WITH ANY OBJECTS CURRENTLY IN IT */ + + if (!check_light(HERE)) { + /* THE CURRENT LOCATION HAS 'DARK' AND NO SOURCE OF LIGHT IS + * CURRENTLY PRESENT */ + execute("+dark_description"); + return; + } + + if (execute("+before_look") != FALSE) + return; + + execute("+title"); + + if (DISPLAY_MODE->value) { + /* THE INTERPRETER IS IN VERBOSE MODE SO TEMPORARILY TAKE AWAYS THE + * 'VISITED' ATTRIBUTE */ + object[HERE]->attributes &= ~1L; + } + + strcpy(function_name, "look_"); + strcat(function_name, object[HERE]->label); + execute(function_name); + + /* GIVE THE LOCATION THE ATTRIBUTES 'VISITED', 'KNOWN', AND 'MAPPED' NOW + * THAT THE LOOK FUNCTION HAS RUN */ + object[HERE]->attributes = object[HERE]->attributes | KNOWN; + object[HERE]->attributes = object[HERE]->attributes | VISITED; + object[HERE]->attributes = object[HERE]->attributes | MAPPED; + + execute("+object_descriptions"); + + strcpy(function_name, "after_look_"); + strcat(function_name, object[HERE]->label); + execute(function_name); + + execute("+after_look"); +} + +} // End of namespace JACL +} // End of namespace Glk |