|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T o
Length: 12300 (0x300c)
Types: TextFile
Names: »ocountry.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Omega/ocountry.c«
/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988 */
/* ocountry.c */
/* load_country(), and all load_ functions for places which are
/* accessible from the country and don't have their own files */
#include "oglob.h"
/* loads the countryside level from the data file */
void load_country()
{
int i,j;
char site;
FILE *fd;
strcpy(Str3,OMEGALIB);
strcat(Str3,"ocountry.dat");
fd = fopen(Str3,"r");
for(j=0;j<LENGTH;j++) {
for(i=0;i<WIDTH;i++) {
site = getc(fd);
Country[i][j].base_terrain_type = site;
Country[i][j].aux = 0;
if ((site == PASS) ||
(site == CASTLE) ||
(site == STARPEAK) ||
(site == CAVES) ||
(site == VOLCANO)) Country[i][j].current_terrain_type = MOUNTAINS;
else if (site == DRAGONLAIR) Country[i][j].current_terrain_type = DESERT;
else if (site == MAGIC_ISLE)
Country[i][j].current_terrain_type = CHAOS_SEA;
else if ((site >= 'a') && (site <= 'f')) {
Country[i][j].current_terrain_type =
Country[i][j].base_terrain_type = 'o';
Country[i][j].aux = 1+site-'a';
}
else if ((site >= '1') && (site <= '6')) {
Country[i][j].current_terrain_type =
Country[i][j].base_terrain_type = TEMPLE;
Country[i][j].aux = site-'0';
}
else Country[i][j].current_terrain_type = site;
Country[i][j].explored = FALSE;
}
fscanf(fd,"\n");
}
fclose(fd);
}
/* loads the dragon's lair into Level*/
void load_dlair(empty)
int empty;
{
int i,j;
char site;
FILE *fd;
if (empty) mprint("The Lair is now devoid of inhabitants and treasure.");
TempLevel = Level;
if (ok_to_free(TempLevel)) {
free((char *) TempLevel);
TempLevel = NULL;
}
Level = ((plv) malloc(sizeof(levtype)));
clear_level(Level);
Level->environment = E_DLAIR;
strcpy(Str3,OMEGALIB);
strcat(Str3,"odlair.dat");
fd = fopen(Str3,"r");
for(j=0;j<LENGTH;j++) {
for(i=0;i<WIDTH;i++) {
Level->site[i][j].lstatus = 0;
Level->site[i][j].roomnumber = RS_CAVERN;
Level->site[i][j].p_locf = L_NO_OP;
site = getc(fd);
switch(site) {
case 'D':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML10+3); /* dlord */
Level->site[i][j].creature->specialf = M_SP_LAIR;
break;
case 'd':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML8+3); /* elite dragons */
Level->site[i][j].creature->specialf = M_SP_LAIR;
Level->site[i][j].creature->hit *= 2;
Level->site[i][j].creature->dmg *= 2;
break;
case 'W':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML9+2);
break;
case 'M':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,-1);
break;
case 'S':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].showchar = WALL;
if (! empty)
lset(i,j,SECRET);
Level->site[i][j].roomnumber = RS_SECRETPASSAGE;
break;
case '$':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].roomnumber = RS_DRAGONLORD;
if (! empty)
make_site_treasure(i,j,10);
break;
case 's':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_TRAP_SIREN;
break;
case '7':
if (! empty)
Level->site[i][j].locchar = PORTCULLIS;
else Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_PORTCULLIS;
break;
case 'R':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_RAISE_PORTCULLIS;
break;
case 'p':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_PORTCULLIS;
break;
case 'T':
Level->site[i][j].locchar = FLOOR;
if (! empty)
Level->site[i][j].p_locf = L_PORTCULLIS_TRAP;
break;
case 'X':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_TACTICAL_EXIT;
break;
case '#':
Level->site[i][j].locchar = WALL;
Level->site[i][j].aux = 150;
break;
case '.':
Level->site[i][j].locchar = FLOOR;
break;
}
}
fscanf(fd,"\n");
}
fclose(fd);
}
/* loads the star peak into Level*/
void load_speak(empty)
int empty;
{
int i,j,safe = Player.alignment > 0;
char site;
FILE *fd;
if (empty) mprint("The peak is now devoid of inhabitants and treasure.");
TempLevel = Level;
if (ok_to_free(TempLevel)) {
free((char *) TempLevel);
TempLevel = NULL;
}
Level = ((plv) malloc(sizeof(levtype)));
clear_level(Level);
Level->environment = E_STARPEAK;
strcpy(Str3,OMEGALIB);
strcat(Str3,"ospeak.dat");
fd = fopen(Str3,"r");
for(j=0;j<LENGTH;j++) {
for(i=0;i<WIDTH;i++) {
Level->site[i][j].lstatus = 0;
Level->site[i][j].roomnumber = RS_STARPEAK;
Level->site[i][j].p_locf = L_NO_OP;
site = getc(fd);
switch(site) {
case 'S':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].showchar = WALL;
lset(i,j,SECRET);
Level->site[i][j].roomnumber = RS_SECRETPASSAGE;
break;
case 'L':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML10+2); /* lawbringer */
if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
break;
case 's':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML4+12); /* servant of law */
if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
break;
case 'M':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,-1);
if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
break;
case '$':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_treasure(i,j,10);
break;
case '7':
if (! empty)
Level->site[i][j].locchar = PORTCULLIS;
else Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_PORTCULLIS;
break;
case 'R':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_RAISE_PORTCULLIS;
break;
case '-':
Level->site[i][j].locchar = CLOSED_DOOR;
break;
case '|':
Level->site[i][j].locchar = OPEN_DOOR;
break;
case 'p':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_PORTCULLIS;
break;
case 'T':
Level->site[i][j].locchar = FLOOR;
if (! empty)
Level->site[i][j].p_locf = L_PORTCULLIS_TRAP;
break;
case 'X':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_TACTICAL_EXIT;
break;
case '#':
Level->site[i][j].locchar = WALL;
Level->site[i][j].aux = 150;
break;
case '4':
Level->site[i][j].locchar = RUBBLE;
Level->site[i][j].p_locf = L_RUBBLE;
break;
case '.':
Level->site[i][j].locchar = FLOOR;
break;
}
}
fscanf(fd,"\n");
}
fclose(fd);
}
/* loads the magic isle into Level*/
void load_misle(empty)
int empty;
{
int i,j;
char site;
FILE *fd;
if (empty) mprint("The isle is now devoid of inhabitants and treasure.");
TempLevel = Level;
if (ok_to_free(TempLevel)) {
free((char *) TempLevel);
TempLevel = NULL;
}
Level = ((plv) malloc(sizeof(levtype)));
clear_level(Level);
Level->environment = E_MAGIC_ISLE;
strcpy(Str3,OMEGALIB);
strcat(Str3,"omisle.dat");
fd = fopen(Str3,"r");
for(j=0;j<LENGTH;j++) {
for(i=0;i<WIDTH;i++) {
Level->site[i][j].lstatus = 0;
Level->site[i][j].roomnumber = RS_MAGIC_ISLE;
Level->site[i][j].p_locf = L_NO_OP;
site = getc(fd);
switch(site) {
case 'E':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML10+1); /* eater of magic */
break;
case 'm':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML8+9); /* militant priest */
break;
case 'n':
Level->site[i][j].locchar = FLOOR;
if (! empty)
make_site_monster(i,j,ML7+1); /* nazgul */
break;
case 'X':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_TACTICAL_EXIT;
break;
case '#':
Level->site[i][j].locchar = WALL;
Level->site[i][j].aux = 150;
break;
case '4':
Level->site[i][j].locchar = RUBBLE;
Level->site[i][j].p_locf = L_RUBBLE;
break;
case '~':
Level->site[i][j].locchar = WATER;
Level->site[i][j].p_locf = L_CHAOS;
break;
case '=':
Level->site[i][j].locchar = WATER;
Level->site[i][j].p_locf = L_MAGIC_POOL;
break;
case '-':
Level->site[i][j].locchar = CLOSED_DOOR;
break;
case '|':
Level->site[i][j].locchar = OPEN_DOOR;
break;
case '.':
Level->site[i][j].locchar = FLOOR;
break;
}
}
fscanf(fd,"\n");
}
fclose(fd);
}
/* loads a temple into Level*/
void load_temple(deity)
int deity;
{
int i,j;
char site;
pml ml;
FILE *fd;
TempLevel = Level;
if (ok_to_free(TempLevel)) {
free((char *) TempLevel);
TempLevel = NULL;
}
Level = ((plv) malloc(sizeof(levtype)));
clear_level(Level);
Level->environment = E_TEMPLE;
strcpy(Str3,OMEGALIB);
strcat(Str3,"otemple.dat");
fd = fopen(Str3,"r");
for(j=0;j<LENGTH;j++) {
for(i=0;i<WIDTH;i++) {
switch(deity) {
case ODIN: Level->site[i][j].roomnumber = RS_ODIN; break;
case SET: Level->site[i][j].roomnumber = RS_SET; break;
case HECATE: Level->site[i][j].roomnumber = RS_HECATE; break;
case ATHENA: Level->site[i][j].roomnumber = RS_ATHENA; break;
case DRUID: Level->site[i][j].roomnumber = RS_DRUID; break;
case DESTINY: Level->site[i][j].roomnumber = RS_DESTINY; break;
}
site = getc(fd);
switch(site) {
case '8':
Level->site[i][j].locchar = ALTAR;
Level->site[i][j].p_locf = L_ALTAR;
Level->site[i][j].aux = deity;
break;
case 'H':
Level->site[i][j].locchar = FLOOR;
if (strcmp(Player.name,Priest[Player.patron]) != 0)
make_high_priest(i,j,deity);
break;
case 'S':
Level->site[i][j].locchar = FLOOR;
if (strcmp(Player.name,Priest[Player.patron]) != 0)
lset(i,j,SECRET);
break;
case 'W':
Level->site[i][j].locchar = FLOOR;
if ((deity != Player.patron) &&
((deity == ODIN) ||
(deity == SET) ||
(deity == HECATE) ||
(deity == ATHENA) ||
(deity == DESTINY)))
Level->site[i][j].p_locf = L_TEMPLE_WARNING;
break;
case 'm':
Level->site[i][j].locchar = FLOOR;
make_site_monster(i,j,ML8+9); /* militant priest */
break;
case 'd':
Level->site[i][j].locchar = FLOOR;
make_site_monster(i,j,ML4+10); /* doberman death hound */
break;
case 'X':
Level->site[i][j].locchar = FLOOR;
Level->site[i][j].p_locf = L_TACTICAL_EXIT;
break;
case '#':
if (deity != DRUID) {
Level->site[i][j].locchar = WALL;
Level->site[i][j].aux = 150;
}
else {
Level->site[i][j].locchar = HEDGE;
Level->site[i][j].p_locf = L_HEDGE;
}
break;
case '.':
Level->site[i][j].locchar = FLOOR;
break;
case 'x':
Level->site[i][j].locchar = FLOOR;
random_temple_site(i,j,deity);
break;
case '?':
if (deity != DESTINY)
Level->site[i][j].locchar = FLOOR;
else {
Level->site[i][j].locchar = ABYSS;
Level->site[i][j].p_locf = L_ADEPT;
}
break;
case '-':
Level->site[i][j].locchar = CLOSED_DOOR;
break;
case '|':
Level->site[i][j].locchar = OPEN_DOOR;
break;
}
}
fscanf(fd,"\n");
}
/* Main Temple is peaceful for player of same sect,druids always peaceful. */
if ((Player.patron == deity) || (deity == DRUID))
for(ml=Level->mlist;ml!=NULL;ml=ml->next)
m_status_reset(ml->m,HOSTILE);
fclose(fd);
}
void random_temple_site(i,j,deity)
int i,j,deity;
{
switch(random_range(12)) {
case 0:
make_site_monster(i,j,ML0+1); break; /* mendicant priest */
case 1:
Level->site[i][j].locchar = WATER;
Level->site[i][j].p_locf = L_MAGIC_POOL;
case 2: make_site_monster(i,j,ML7+14); break; /* inner circle demon */
case 3:
make_site_monster(i,j,ML6+11);
Level->site[i][j].creature->aux1 = deity;
break; /* angel of apropriate sect */
case 4:
make_site_monster(i,j,ML8+11);
Level->site[i][j].creature->aux1 = deity;
break; /* archangel of apropriate sect */
case 5:
make_site_monster(i,j,ML9+6);
Level->site[i][j].creature->aux1 = deity;
break; /* archangel of apropriate sect */
}
}
void make_high_priest(i,j,deity)
int i,j,deity;
{
pml ml = ((pml) malloc(sizeof(mltype)));
pmt m = ((pmt) malloc(sizeof(montype)));
make_hiscore_npc(m,deity);
m->x = i;
m->y = j;
Level->site[i][j].creature = m;
ml->m = m;
ml->next = Level->mlist;
Level->mlist = ml;
}