diff options
author | Torbjörn Andersson | 2003-09-20 17:00:14 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2003-09-20 17:00:14 +0000 |
commit | 588af50cd6141066780e2a03da87734aec826077 (patch) | |
tree | b1eca4d5861e333e943c04cf43beca213d567bf9 | |
parent | a412dd9fcb28b1cb878be695f5653cc98805a301 (diff) | |
download | scummvm-rg350-588af50cd6141066780e2a03da87734aec826077.tar.gz scummvm-rg350-588af50cd6141066780e2a03da87734aec826077.tar.bz2 scummvm-rg350-588af50cd6141066780e2a03da87734aec826077.zip |
cleanup
svn-id: r10338
-rw-r--r-- | sword2/startup.cpp | 361 | ||||
-rw-r--r-- | sword2/startup.h | 26 |
2 files changed, 184 insertions, 203 deletions
diff --git a/sword2/startup.cpp b/sword2/startup.cpp index 6b262103db..b522e1542c 100644 --- a/sword2/startup.cpp +++ b/sword2/startup.cpp @@ -17,18 +17,16 @@ * $Header$ */ -//------------------------------------------------------------------------------------ #include <stdio.h> #include "stdafx.h" -//#include "src\driver96.h" #include "build_display.h" #include "console.h" #include "debug.h" #include "defs.h" #include "header.h" #include "interpreter.h" -#include "maketext.h" // for Kill_text_bloc() +#include "maketext.h" // for Kill_text_bloc() #include "memory.h" #include "mouse.h" // for FN_add_human() #include "object.h" @@ -37,293 +35,278 @@ #include "sound.h" #include "speech.h" // for 'speech_text_bloc_no' - so that speech text can be cleared when running a new start-script #include "startup.h" -#include "sword2.h" // (James11aug97) for CloseGame() +#include "sword2.h" // (James11aug97) for CloseGame() #include "sync.h" #include "tony_gsdk.h" -//------------------------------------------------------------------------------------ -uint32 total_startups=0; -uint32 total_screen_managers=0; -uint32 res; +uint32 total_startups = 0; +uint32 total_screen_managers = 0; +uint32 res; -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ -_startup start_list[MAX_starts]; -//------------------------------------------------------------------------------------ -uint32 Init_start_menu(void) //Tony13Aug96 -{ -//print out a list of all the start points available -//there should be a linc produced file called startup.txt -//this file should contain ascii numbers of all the resource game objects that are screen managers -//we query each in turn and setup an array of start structures -//if the file doesn't exist then we say so and return a 0 +_startup start_list[MAX_starts]; +uint32 Init_start_menu(void) { // Tony13Aug96 + // Print out a list of all the start points available. + // There should be a linc produced file called startup.txt. + // This file should contain ascii numbers of all the resource game + // objects that are screen managers. + // We query each in turn and setup an array of start structures. + // If the file doesn't exist then we say so and return a 0. - uint32 end; - mem *temp; - uint32 pos=0; - uint32 j=0; - char *raw_script; - uint32 null_pc; + uint32 end; + mem *temp; + uint32 pos = 0; + uint32 j = 0; + char *raw_script; + uint32 null_pc; + char ascii_start_ids[MAX_starts][7]; - char ascii_start_ids[MAX_starts][7]; - - -//ok, load in the master screen manager file - - - - - total_startups=0; //no starts - + // ok, load in the master screen manager file + total_startups = 0; // no starts Zdebug("initialising start menu"); - - if (!(end=Read_file("STARTUP.INF", &temp, UID_temp))) - { + if (!(end = Read_file("startup.inf", &temp, UID_temp))) { Zdebug("Init_start_menu cannot open startup.inf"); - return(0); //meaning no start menu available + return 0; // meaning no start menu available } + // Ok, we've loaded in the startup.inf file which contains a list of + // all the files now extract the filenames - -//ok, we've loaded in the resource.inf file which contains a list of all the files -//now extract the filenames - do - { - while(((char)*(temp->ad+j))!=13) //item must have an #0d0a - { - ascii_start_ids[total_screen_managers][pos]=*(temp->ad+j); + do { + while (temp->ad[j] != 13) { // item must have an #0d0a + ascii_start_ids[total_screen_managers][pos] = temp->ad[j]; j++; pos++; + } + + // NULL terminate our extracted string + ascii_start_ids[total_screen_managers][pos] = 0; - }; + // reset position in current slot between entries + pos = 0; - ascii_start_ids[total_screen_managers][pos]=0; //NULL terminate our extracted string + // past the 0a + j += 2; - pos=0; //reset position in current slot between entries - j+=2; //past the 0a - total_screen_managers++; //done another + // done another + total_screen_managers++; - if (total_screen_managers==MAX_starts) - { Zdebug("WARNING MAX_starts exceeded!"); + if (total_screen_managers == MAX_starts) { + Zdebug("WARNING MAX_starts exceeded!"); break; } - } - while(j<end); //using this method the Gode generated resource.inf must have #0d0a on the last entry - + } while (j <end); + // using this method the Gode generated resource.inf must have #0d0a + // on the last entry Zdebug("%d screen manager objects", total_screen_managers); -//open each object and make a query call. the object must fill in a startup structure -//it may fill in several if it wishes - for instance a startup could be set for later in the game where specific vars are set - for (j=0;j<total_screen_managers;j++) - { - res=atoi(ascii_start_ids[j]); + // Open each object and make a query call. The object must fill in a + // startup structure. It may fill in several if it wishes - for + // instance a startup could be set for later in the game where + // specific vars are set - Zdebug("+querying screen manager %d", res); + for (j = 0; j < total_screen_managers; j++) { + res = atoi(ascii_start_ids[j]); + Zdebug("+querying screen manager %d", res); -// resopen each one and run through the interpretter -// script 0 is the query request script + // resopen each one and run through the interpretter + // script 0 is the query request script + // if the resource number is within range & it's not a null + // resource (James 12mar97) + // - need to check in case un-built sections included in + // start list - if (res_man.Res_check_valid(res)) // if the resource number is within range & it's not a null resource (James 12mar97) - { // - need to check in case un-built sections included in start list - Zdebug("- resource %d ok",res); - raw_script= (char*) (res_man.Res_open(res)); //+sizeof(_standardHeader)+sizeof(_object_hub)); - null_pc=0; // - RunScript ( raw_script, raw_script, &null_pc ); + if (res_man.Res_check_valid(res)) { + Zdebug("- resource %d ok", res); + raw_script = (char*) res_man.Res_open(res); + null_pc = 0; + RunScript(raw_script, raw_script, &null_pc); res_man.Res_close(res); - } - else - { - Zdebug("- resource %d invalid",res); - } + } else + Zdebug("- resource %d invalid", res); } + Zdebug(""); // line feed + Free_mem(temp); // release the Talloc - Zdebug(""); //line feed - + return 1; +} - Free_mem(temp); //release the Talloc +int32 FN_register_start_point(int32 *params) { // Tony14Oct96 + // params: 0 id of startup script to call - key + // 1 pointer to ascii message - return(1); -} -//------------------------------------------------------------------------------------ -int32 FN_register_start_point(int32 *params) //Tony14Oct96 -{ - // param 0 id of startup script to call - key - // param 1 pointer to ascii message + // Zdebug(" FN_register_start_point %d %s", params[0], params[1]); +#ifdef _SWORD2_DEBUG + if (total_startups == MAX_starts) + Con_fatal_error("ERROR: start_list full [%s line %u]", __FILE__, __LINE__); -// Zdebug(" FN_register_start_point %d %s", params[0], params[1]); + // +1 to allow for NULL terminator + if (strlen((char*) params[1]) + 1 > MAX_description) + Con_fatal_error("ERROR: startup description too long [%s line %u]", __FILE__, __LINE__); +#endif - #ifdef _SWORD2_DEBUG - if (total_startups==MAX_starts) - Con_fatal_error("ERROR: start_list full [%s line %u]",__FILE__,__LINE__); + // this objects id + start_list[total_startups].start_res_id = res; - if (strlen((char*)params[1])+1 > MAX_description) // +1 to allow for NULL terminator - Con_fatal_error("ERROR: startup description too long [%s line %u]",__FILE__,__LINE__); - #endif + // a key code to be passed to a script via a script var to SWITCH in + // the correct start + start_list[total_startups].key = params[0]; - start_list[total_startups].start_res_id = res; // this objects id - start_list[total_startups].key = params[0]; // a key code to be passed to a script via a script var to SWITCH in the correct start - strcpy(start_list[total_startups].description, (char*)params[1]); + strcpy(start_list[total_startups].description, (char*) params[1]); - total_startups++; //point to next + //point to next + total_startups++; - return(1); + return 1; } -//------------------------------------------------------------------------------------ -uint32 Con_print_start_menu(void) //Tony14Oct96 -{ - //the console 'starts' (or 's') command which lists out all the registered start points in the game - uint32 j; - int scrolls=0; - char c; +uint32 Con_print_start_menu(void) { // Tony14Oct96 + // the console 'starts' (or 's') command which lists out all the + // registered start points in the game - if (!total_startups) - { Print_to_console("Sorry - no startup positions registered?"); + uint32 j; + int scrolls = 0; + char c; - if (!total_screen_managers) + if (!total_startups) { + Print_to_console("Sorry - no startup positions registered?"); + + if (!total_screen_managers) Print_to_console("There is a problem with startup.inf"); else Print_to_console(" (%d screen managers found in startup.inf)", total_screen_managers); - - } - else - { - for(j=0;j<total_startups;j++) - { + } else { + for(j = 0; j < total_startups; j++) { Print_to_console("%d (%s)", j, start_list[j].description); Build_display(); scrolls++; - - if (scrolls==18) - { + if (scrolls == 18) { Temp_print_to_console("- Press ESC to stop or any other key to continue"); Build_display(); - do - { + do { // Service windows - ServiceWindows(); - } - while(!KeyWaiting()); + } while(!KeyWaiting()); - ReadKey(&c); //kill the key we just pressed - if (c==27) //ESC + // kill the key we just pressed + ReadKey(&c); + if (c == 27) break; - Clear_console_line(); //clear the Press Esc message ready for the new line - scrolls=0; - } - + // clear the Press Esc message ready for the + // new line + Clear_console_line(); + scrolls = 0; + } } } - return(1); + return 1; } -//------------------------------------------------------------------------------------ -uint32 Con_start(uint8 *input) //Tony15Oct96 -{ -//if the second word id is a numeric that can be applied to a genuine startup then do it - uint32 j=0; - uint32 start; - char *raw_script; - char *raw_data_ad; - uint32 null_pc; +uint32 Con_start(uint8 *input) { // Tony15Oct96 + // if the second word id is a numeric that can be applied to a + // genuine startup then do it + uint32 j = 0; + uint32 start; + char *raw_script; + char *raw_data_ad; + uint32 null_pc; - if (*input == 0) // so that typing 'S' then <enter> works on NT (James26feb97) - { + // so that typing 'S' then <enter> works on NT (James26feb97) + if (input[0] == 0) { Con_print_start_menu(); - return(1); + return 1; } - - while(*(input+j)) - { - if ( (*(input+j)>='0') && (*(input+j)<='9') ) + while (input[j]) { + if (input[j] >= '0' && input[j] <= '9') j++; else break; } + //didn't quit out of loop on a non numeric chr$ + if (!input[j]) { + start = atoi((char*) input); - if (!*(input+j)) //didn't quit out of loop on a non numeric chr$ - { - start = atoi((char*)input); - - if (!total_startups) + if (!total_startups) Print_to_console("Sorry - there are no startups!"); + else if (start < total_startups) { + // do the startup as we've specified a legal start - else if (start<total_startups) //a legal start - { -// do the startup as we've specified a legal start - - //-------------------------------------------------------------- // restarting - stop sfx, music & speech! Clear_fx_queue(); - //--------------------------------------------- - FN_stop_music(NULL); // fade out any music that is currently playing - //--------------------------------------------- + // fade out any music that is currently playing + FN_stop_music(NULL); + + // halt the sample prematurely g_sound->UnpauseSpeech(); - g_sound->StopSpeechSword2(); // halt the sample prematurely + g_sound->StopSpeechSword2(); + + // clean out all resources & flags, ready for a total + // restart (James24mar97) + + // remove all resources from memory, including player + // object & global variables - //-------------------------------------------------------------- - // clean out all resources & flags, ready for a total restart (James24mar97) + res_man.Remove_all_res(); - res_man.Remove_all_res(); // remove all resources from memory, including player object & global variables - SetGlobalInterpreterVariables((int32*)(res_man.Res_open(1)+sizeof(_standardHeader))); // reopen global variables resource & send address to interpreter - it won't be moving + // reopen global variables resource & send address to + // interpreter - it won't be moving + SetGlobalInterpreterVariables((int32 *) (res_man.Res_open(1) + sizeof(_standardHeader))); res_man.Res_close(1); - FreeAllRouteMem(); // free all the route memory blocks from previous game + // free all the route memory blocks from previous game + FreeAllRouteMem(); - if (speech_text_bloc_no) // if there was speech text - { - Kill_text_bloc(speech_text_bloc_no); // kill the text block + // if there was speech text, kill the text block + if (speech_text_bloc_no) { + Kill_text_bloc(speech_text_bloc_no); speech_text_bloc_no=0; } - //-------------------------------------------------------------- + // set the key + + // Open George + raw_data_ad = (char*) (res_man.Res_open(8)); + raw_script = (char*) (res_man.Res_open(start_list[start].start_res_id)); + + // denotes script to run + null_pc = start_list[start].key & 0xffff; -// set the key - raw_data_ad= (char*) (res_man.Res_open(8)); //+sizeof(_standardHeader)+sizeof(_object_hub)); //open george - raw_script= (char*) (res_man.Res_open(start_list[start].start_res_id)); //+sizeof(_standardHeader)+sizeof(_object_hub)); - null_pc=start_list[start].key&0xffff; //denotes script to run Print_to_console("running start %d", start); - RunScript ( raw_script, raw_data_ad, &null_pc ); + RunScript(raw_script, raw_data_ad, &null_pc); res_man.Res_close(start_list[start].start_res_id); - res_man.Res_close(8); //close george - FN_add_human(NULL); // make sure thre's a mouse, in case restarting while mouse not available - } - else + // Close George + res_man.Res_close(8); + + // make sure thre's a mouse, in case restarting while + // mouse not available + FN_add_human(NULL); + } else Print_to_console("not a legal start position"); + } else { + // so that typing 'S' then <enter> works under Win95 + Con_print_start_menu(); } - else - { - Con_print_start_menu(); // so that typing 'S' then <enter> works under Win95 - } - return(1); -} - -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ -//------------------------------------------------------------------------------------ - + return 1; +} diff --git a/sword2/startup.h b/sword2/startup.h index da69389164..642172c538 100644 --- a/sword2/startup.h +++ b/sword2/startup.h @@ -20,26 +20,24 @@ #ifndef _STARTUP #define _STARTUP -//#include "src\driver96.h" - - -#define MAX_starts 100 +#define MAX_starts 100 #define MAX_description 100 +typedef struct { + char description[MAX_description]; -typedef struct -{ - char description[MAX_description]; - uint32 start_res_id; //id of screen manager object - uint32 key; //tell the manager which startup you want (if there are more than 1) (i.e more than 1 entrance to a screen and/or seperate game boots) + // id of screen manager object + uint32 start_res_id; + //tell the manager which startup you want (if there are more than 1) + // (i.e more than 1 entrance to a screen and/or seperate game boots) + uint32 key; } _startup; +extern _startup start_list[MAX_starts]; -extern _startup start_list[MAX_starts]; - -uint32 Init_start_menu(void); //Tony13Aug96 -uint32 Con_print_start_menu(void); //Tony13Aug96 -uint32 Con_start(uint8 *input); //Tony15Oct96 +uint32 Init_start_menu(void); +uint32 Con_print_start_menu(void); +uint32 Con_start(uint8 *input); #endif |