Mercurial > ~darius > hgwebdir.cgi > paradise_client
view getship.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line source
/* $Id: getship.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ /* * getship.c for client of socket protocol. * * This file has been mangled so it only sets the ship characteristics needed. */ #include "copyright.h" #include <stdio.h> #ifdef __STDC__ #include <stdlib.h> #endif #include <sys/types.h> #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "proto.h" /* Prototypes */ static void getship_default P((struct ship * shipp, int s_type)); void init_shiptypes() { int i; struct shiplist *temp; /* start at -1, the default shiptype */ for (i = -1; i < nshiptypes; i++) { temp = (struct shiplist *) malloc(sizeof(struct shiplist)); temp->ship = (struct ship *) malloc(sizeof(struct ship)); getship_default(temp->ship, i); temp->next = shiptypes; if (temp->next) temp->next->prev = temp; temp->prev = NULL; shiptypes = temp; } } void init_galaxy_class() { /* hack to allow galaxy class ships. By the time the client knows it's connected to a paradise server, the defaults must already have been run. [BDyess] */ struct shiplist *temp; for (temp = shiptypes; temp->ship->s_type != GALAXY; temp = temp->next) /* null body */ ; getship_default(temp->ship, GALAXY); /* slurp_ship_bitmaps(); */ /* don't destroy downloaded bitmaps */ return; } #if 0 void init_puck() { /* ditto above init_galaxy_class(), but this time for hockey and puck. [BDyess] */ struct shiplist *temp; temp = shiptypes; while(temp->next) temp = temp->next; temp->next = (struct shiplist*)malloc(sizeof(struct shiplist)); temp = temp->next; temp->ship = (struct ship*)malloc(sizeof(struct ship)); getship_default(temp->ship, PUCK); temp->next = NULL; slurp_ship_bitmaps(); return; } #endif /*0*/ /* now returns a pointer to where the ship data is located. This way if the data is later changed by the server everybody gets updated. Plus as a bonus it's more efficient :) [Bill Dyess] */ struct ship * getship(s_type) int s_type; { struct shiplist *temp, *new; temp = shiptypes; while (temp) { if (temp->ship->s_type == s_type) { /* bcopy(temp->ship, shipp, sizeof(struct ship)); */ return temp->ship; } temp = temp->next; } /* ok, that shiptype is unheard of. Assume a new shiptype, and get the values for CA. Also add the ship to the list so if it gets updated by the server later everyone stays happy. [Bill Dyess] */ printf("Error: getship of unknown ship type %d, using CA defaults\n", s_type); temp = shiptypes; while (temp) { if (temp->ship->s_type == DEFAULT) { printf("Adding ship type %d\n", s_type); /* bcopy(temp->ship, shipp, sizeof(struct ship)); */ /* now add the new ship to the list */ new = (struct shiplist *) malloc(sizeof(struct shiplist)); new->ship = (struct ship *) malloc(sizeof(struct ship)); new->next = shiptypes; new->prev = NULL; if (shiptypes) shiptypes->prev = new; shiptypes = new; bcopy(temp->ship, new->ship, sizeof(struct ship)); new->ship->s_type = s_type; return new->ship; } temp = temp->next; } return temp->ship; } /* fill in ship characteristics */ static void getship_default(shipp, s_type) struct ship *shipp; int s_type; { switch (s_type) { case SCOUT: case PUCK: shipp->s_torpspeed = 16; shipp->s_phaserrange = 4500; shipp->s_maxspeed = 12; shipp->s_maxfuel = 5000; shipp->s_maxarmies = 2; shipp->s_maxshield = 75; shipp->s_maxdamage = 75; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; if(s_type == PUCK) { shipp->s_type = PUCK; shipp->s_letter = 'k'; shipp->s_desig[0] = 'P'; shipp->s_desig[1] = 'U'; shipp->s_bitmap = PUCK; } else { shipp->s_type = SCOUT; shipp->s_letter = 's'; shipp->s_desig[0] = 'S'; shipp->s_desig[1] = 'C'; shipp->s_bitmap = SCOUT; } break; case DESTROYER: shipp->s_type = DESTROYER; shipp->s_torpspeed = 14; shipp->s_phaserrange = 5100; shipp->s_maxspeed = 10; shipp->s_maxfuel = 7000; shipp->s_maxarmies = 5; shipp->s_maxshield = 85; shipp->s_maxdamage = 85; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; shipp->s_letter = 'd'; shipp->s_desig[0] = 'D'; shipp->s_desig[1] = 'D'; shipp->s_bitmap = DESTROYER; break; default: case DEFAULT: case CRUISER: shipp->s_type = s_type; shipp->s_torpspeed = 12; shipp->s_phaserrange = 6000; shipp->s_maxspeed = 9; shipp->s_maxfuel = 10000; shipp->s_maxarmies = 10; shipp->s_maxshield = 100; shipp->s_maxdamage = 100; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; shipp->s_letter = 'c'; shipp->s_desig[0] = 'C'; shipp->s_desig[1] = 'A'; shipp->s_bitmap = CRUISER; break; case BATTLESHIP: shipp->s_type = BATTLESHIP; shipp->s_torpspeed = 12; shipp->s_phaserrange = 6300; shipp->s_maxspeed = 8; shipp->s_maxfuel = 14000; shipp->s_maxarmies = 6; shipp->s_maxshield = 130; shipp->s_maxdamage = 130; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; shipp->s_letter = 'b'; shipp->s_desig[0] = 'B'; shipp->s_desig[1] = 'B'; shipp->s_bitmap = BATTLESHIP; break; case ASSAULT: shipp->s_type = ASSAULT; shipp->s_torpspeed = 16; shipp->s_phaserrange = 4800; shipp->s_maxspeed = 8; shipp->s_maxfuel = 6000; shipp->s_maxarmies = 20; shipp->s_maxshield = 80; shipp->s_maxdamage = 200; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1200; shipp->s_letter = 'a'; shipp->s_desig[0] = 'A'; shipp->s_desig[1] = 'S'; shipp->s_bitmap = ASSAULT; break; case STARBASE: shipp->s_type = STARBASE; shipp->s_torpspeed = 14; shipp->s_phaserrange = 7200; shipp->s_maxspeed = 2; shipp->s_maxfuel = 60000; shipp->s_maxarmies = 25; shipp->s_maxshield = 500; shipp->s_maxdamage = 600; shipp->s_maxwpntemp = 1300; shipp->s_maxegntemp = 1000; shipp->s_letter = 'o'; shipp->s_desig[0] = 'S'; shipp->s_desig[1] = 'B'; shipp->s_bitmap = STARBASE; break; case ATT: /* or GALAXY */ if (paradise) { shipp->s_type = ATT; shipp->s_torpspeed = 20; shipp->s_phaserrange = 6000; shipp->s_maxspeed = 90; shipp->s_maxfuel = 60000; shipp->s_maxarmies = 1000; shipp->s_maxshield = 30000; shipp->s_maxdamage = 30000; shipp->s_maxwpntemp = 10000; shipp->s_maxegntemp = 10000; shipp->s_letter = 'X'; shipp->s_desig[0] = 'A'; shipp->s_desig[1] = 'T'; shipp->s_bitmap = ATT; } else { shipp->s_type = GALAXY; shipp->s_torpspeed = 13; shipp->s_phaserrange = 6000; /* this is a guess */ shipp->s_maxspeed = 9; shipp->s_maxfuel = 12000; shipp->s_maxarmies = 12; shipp->s_maxshield = 140; shipp->s_maxdamage = 120; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; shipp->s_letter = 'g'; shipp->s_desig[0] = 'G'; shipp->s_desig[1] = 'A'; shipp->s_bitmap = FLAGSHIP; } break; case FLAGSHIP: shipp->s_type = FLAGSHIP; shipp->s_torpspeed = 14; shipp->s_phaserrange = 5750; shipp->s_maxspeed = 9; shipp->s_maxfuel = 14500; shipp->s_maxarmies = 8; shipp->s_maxshield = 115; shipp->s_maxdamage = 115; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1500; shipp->s_letter = 'f'; shipp->s_desig[0] = 'F'; shipp->s_desig[1] = 'L'; shipp->s_bitmap = FLAGSHIP; break; case JUMPSHIP: shipp->s_type = JUMPSHIP; shipp->s_torpspeed = 18; shipp->s_phaserrange = 3000; shipp->s_maxspeed = 20; shipp->s_maxfuel = 50000; shipp->s_maxarmies = 0; shipp->s_maxshield = 5; shipp->s_maxdamage = 60; shipp->s_maxwpntemp = 1300; shipp->s_maxegntemp = 5000; shipp->s_letter = 'j'; shipp->s_desig[0] = 'J'; shipp->s_desig[1] = 'S'; shipp->s_bitmap = JUMPSHIP; break; case WARBASE: shipp->s_type = WARBASE; shipp->s_torpspeed = 15; shipp->s_phaserrange = 6000; shipp->s_maxspeed = 3; shipp->s_maxfuel = 50000; shipp->s_maxarmies = 0; shipp->s_maxshield = 150; shipp->s_maxdamage = 500; shipp->s_maxwpntemp = 1500; shipp->s_maxegntemp = 1000; shipp->s_letter = 'w'; shipp->s_desig[0] = 'W'; shipp->s_desig[1] = 'B'; shipp->s_bitmap = WARBASE; break; case LIGHTCRUISER: shipp->s_type = LIGHTCRUISER; shipp->s_torpspeed = 13; shipp->s_phaserrange = 6000; shipp->s_maxspeed = 10; shipp->s_maxfuel = 9000; shipp->s_maxarmies = 4; shipp->s_maxshield = 95; shipp->s_maxdamage = 90; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1500; shipp->s_letter = 'l'; shipp->s_desig[0] = 'C'; shipp->s_desig[1] = 'L'; shipp->s_bitmap = LIGHTCRUISER; break; case CARRIER: shipp->s_type = CARRIER; shipp->s_torpspeed = 10; shipp->s_phaserrange = 4500; shipp->s_maxspeed = 10; shipp->s_maxfuel = 15000; shipp->s_maxarmies = 3; shipp->s_maxshield = 100; shipp->s_maxdamage = 150; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1000; shipp->s_letter = 'v'; shipp->s_desig[0] = 'C'; shipp->s_desig[1] = 'V'; shipp->s_bitmap = CARRIER; break; case UTILITY: shipp->s_type = UTILITY; shipp->s_torpspeed = 16; shipp->s_phaserrange = 5000; shipp->s_maxspeed = 7; shipp->s_maxfuel = 12000; shipp->s_maxarmies = 12; shipp->s_maxshield = 110; shipp->s_maxdamage = 180; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1800; shipp->s_letter = 'u'; shipp->s_desig[0] = 'U'; shipp->s_desig[1] = 'T'; shipp->s_bitmap = UTILITY; break; case PATROL: shipp->s_type = PATROL; shipp->s_torpspeed = 15; shipp->s_phaserrange = 5000; shipp->s_maxspeed = 11; shipp->s_maxfuel = 4000; shipp->s_maxarmies = 1; shipp->s_maxshield = 50; shipp->s_maxdamage = 40; shipp->s_maxwpntemp = 1000; shipp->s_maxegntemp = 1500; shipp->s_letter = 'p'; shipp->s_desig[0] = 'P'; shipp->s_desig[1] = 'T'; shipp->s_bitmap = PATROL; break; } buildShipKeymap(shipp); }