Annotation of micropolis/src/sim/s_power.c, revision 1.1

1.1     ! root        1: /* s_power.c
        !             2:  *
        !             3:  * Micropolis, Unix Version.  This game was released for the Unix platform
        !             4:  * in or about 1990 and has been modified for inclusion in the One Laptop
        !             5:  * Per Child program.  Copyright (C) 1989 - 2007 Electronic Arts Inc.  If
        !             6:  * you need assistance with this program, you may contact:
        !             7:  *   http://wiki.laptop.org/go/Micropolis  or email  [email protected].
        !             8:  * 
        !             9:  * This program is free software: you can redistribute it and/or modify
        !            10:  * it under the terms of the GNU General Public License as published by
        !            11:  * the Free Software Foundation, either version 3 of the License, or (at
        !            12:  * your option) any later version.
        !            13:  * 
        !            14:  * This program is distributed in the hope that it will be useful, but
        !            15:  * WITHOUT ANY WARRANTY; without even the implied warranty of
        !            16:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            17:  * General Public License for more details.  You should have received a
        !            18:  * copy of the GNU General Public License along with this program.  If
        !            19:  * not, see <http://www.gnu.org/licenses/>.
        !            20:  * 
        !            21:  *             ADDITIONAL TERMS per GNU GPL Section 7
        !            22:  * 
        !            23:  * No trademark or publicity rights are granted.  This license does NOT
        !            24:  * give you any right, title or interest in the trademark SimCity or any
        !            25:  * other Electronic Arts trademark.  You may not distribute any
        !            26:  * modification of this program using the trademark SimCity or claim any
        !            27:  * affliation or association with Electronic Arts Inc. or its employees.
        !            28:  * 
        !            29:  * Any propagation or conveyance of this program must include this
        !            30:  * copyright notice and these terms.
        !            31:  * 
        !            32:  * If you convey this program (or any modifications of it) and assume
        !            33:  * contractual liability for the program to recipients of it, you agree
        !            34:  * to indemnify Electronic Arts for any liability that those contractual
        !            35:  * assumptions impose on Electronic Arts.
        !            36:  * 
        !            37:  * You may not misrepresent the origins of this program; modified
        !            38:  * versions of the program must be marked as such and not identified as
        !            39:  * the original program.
        !            40:  * 
        !            41:  * This disclaimer supplements the one included in the General Public
        !            42:  * License.  TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, THIS
        !            43:  * PROGRAM IS PROVIDED TO YOU "AS IS," WITH ALL FAULTS, WITHOUT WARRANTY
        !            44:  * OF ANY KIND, AND YOUR USE IS AT YOUR SOLE RISK.  THE ENTIRE RISK OF
        !            45:  * SATISFACTORY QUALITY AND PERFORMANCE RESIDES WITH YOU.  ELECTRONIC ARTS
        !            46:  * DISCLAIMS ANY AND ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES,
        !            47:  * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY,
        !            48:  * FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY
        !            49:  * RIGHTS, AND WARRANTIES (IF ANY) ARISING FROM A COURSE OF DEALING,
        !            50:  * USAGE, OR TRADE PRACTICE.  ELECTRONIC ARTS DOES NOT WARRANT AGAINST
        !            51:  * INTERFERENCE WITH YOUR ENJOYMENT OF THE PROGRAM; THAT THE PROGRAM WILL
        !            52:  * MEET YOUR REQUIREMENTS; THAT OPERATION OF THE PROGRAM WILL BE
        !            53:  * UNINTERRUPTED OR ERROR-FREE, OR THAT THE PROGRAM WILL BE COMPATIBLE
        !            54:  * WITH THIRD PARTY SOFTWARE OR THAT ANY ERRORS IN THE PROGRAM WILL BE
        !            55:  * CORRECTED.  NO ORAL OR WRITTEN ADVICE PROVIDED BY ELECTRONIC ARTS OR
        !            56:  * ANY AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY.  SOME
        !            57:  * JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF OR LIMITATIONS ON IMPLIED
        !            58:  * WARRANTIES OR THE LIMITATIONS ON THE APPLICABLE STATUTORY RIGHTS OF A
        !            59:  * CONSUMER, SO SOME OR ALL OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY
        !            60:  * NOT APPLY TO YOU.
        !            61:  */
        !            62: #include "sim.h"
        !            63: 
        !            64: 
        !            65: /* Power Scan */
        !            66: 
        !            67: 
        !            68: int PowerStackNum;
        !            69: char PowerStackX[PWRSTKSIZE], PowerStackY[PWRSTKSIZE];
        !            70: QUAD MaxPower, NumPower;
        !            71: 
        !            72: 
        !            73: /* comefrom: TestForCond DoPowerScan TryGo */
        !            74: MoveMapSim (short MDir)
        !            75: {
        !            76:   switch (MDir) {
        !            77:   case 0:
        !            78:     if (SMapY > 0) {
        !            79:       SMapY--;
        !            80:       return (TRUE);
        !            81:     }
        !            82:     if (SMapY < 0)
        !            83:       SMapY = 0;
        !            84:     return (FALSE);
        !            85:   case 1:
        !            86:     if (SMapX < (WORLD_X - 1)) {
        !            87:       SMapX++;
        !            88:       return (TRUE);
        !            89:     }
        !            90:     if (SMapX > (WORLD_X - 1))
        !            91:       SMapX = WORLD_X - 1;
        !            92:     return (FALSE);
        !            93:   case 2:
        !            94:     if (SMapY < (WORLD_Y - 1)) {
        !            95:       SMapY++;
        !            96:       return (TRUE);
        !            97:     }
        !            98:     if (SMapY > (WORLD_Y - 1))
        !            99:       SMapY = WORLD_Y - 1;
        !           100:     return (FALSE);
        !           101:   case 3:
        !           102:     if (SMapX > 0) {
        !           103:       SMapX--;
        !           104:       return (TRUE);
        !           105:     }
        !           106:     if (SMapX < 0)
        !           107:       SMapX = 0;
        !           108:     return (FALSE);
        !           109:   case 4:
        !           110:     return (TRUE);
        !           111:   }
        !           112:   return (FALSE);                              
        !           113: }
        !           114: 
        !           115: 
        !           116: /* inlined -Don */
        !           117: #if 0
        !           118: /* comefrom: DoPowerScan */
        !           119: SetPowerBit(void) 
        !           120: {
        !           121:   register int PowerWrd;
        !           122: 
        !           123:   /* XXX: assumes 120x100 */
        !           124:   PowerWrd = (SMapX >>4) + (SMapY <<3);
        !           125:   PowerMap[PowerWrd] |= 1 << (SMapX & 15);
        !           126: }
        !           127: #endif
        !           128: 
        !           129: 
        !           130: /* inlined */
        !           131: #if 0
        !           132: /* comefrom: TestForCond */
        !           133: int TestPowerBit(void)
        !           134: {
        !           135:   register int PowerWrd;
        !           136: 
        !           137:   if ((CChr9 == NUCLEAR) || (CChr9 == POWERPLANT))
        !           138:     return(1);
        !           139:   /* XXX: assumes 120x100 */
        !           140:   PowerWrd = (SMapX >>4) + (SMapY <<3);
        !           141:   if (PowerWrd >= PWRMAPSIZE)
        !           142:     return(0);
        !           143:   return ((PowerMap[PowerWrd] & (1 << (SMapX & 15))) ? 1 : 0);
        !           144: }
        !           145: #endif
        !           146: 
        !           147: 
        !           148: /* comefrom: DoPowerScan */
        !           149: short TestForCond(short TFDir)
        !           150: {      
        !           151:   register int xsave, ysave, PowerWrd;
        !           152: 
        !           153:   xsave = SMapX;
        !           154:   ysave = SMapY;
        !           155:   if (MoveMapSim(TFDir)) {
        !           156:     /* TestPowerBit was taking a lot of time so I swapped the & order -Don */
        !           157: #if 0
        !           158:     if ((Map[SMapX][SMapY] & CONDBIT) &&
        !           159:        (!TestPowerBit()))
        !           160: #else
        !           161:     if ((Map[SMapX][SMapY] & CONDBIT) &&
        !           162:        (CChr9 != NUCLEAR) &&
        !           163:        (CChr9 != POWERPLANT) &&
        !           164:        (
        !           165: #if 0
        !           166:         (PowerWrd = (SMapX >>4) + (SMapY <<3)),
        !           167: #else
        !           168:         (PowerWrd = POWERWORD(SMapX, SMapY)),
        !           169: #endif
        !           170:         ((PowerWrd > PWRMAPSIZE) ||
        !           171:          ((PowerMap[PowerWrd] & (1 << (SMapX & 15))) == 0))))
        !           172: #endif
        !           173:     {
        !           174:       SMapX = xsave;
        !           175:       SMapY = ysave;
        !           176:       return (TRUE);
        !           177:     }
        !           178:   }
        !           179:   SMapX = xsave;
        !           180:   SMapY = ysave;
        !           181:   return (FALSE);
        !           182: }
        !           183: 
        !           184: 
        !           185: /* comefrom: Simulate SpecialInit InitSimMemory */
        !           186: DoPowerScan()
        !           187: {      
        !           188:   short ADir;
        !           189:   register int ConNum, Dir, x;
        !           190: 
        !           191:   for (x = 0; x < PWRMAPSIZE; x++)
        !           192:     PowerMap[x] = 0;   /* ClearPowerMem */
        !           193: 
        !           194:   MaxPower = (CoalPop * 700L) + (NuclearPop * 2000L); /* post release */
        !           195:   NumPower = 0;
        !           196: 
        !           197:   while (PowerStackNum)        {
        !           198:     PullPowerStack();
        !           199:     ADir = 4;
        !           200:     do {
        !           201:       if (++NumPower > MaxPower) {
        !           202:        SendMes(40);
        !           203:        return;
        !           204:       }
        !           205:       MoveMapSim(ADir);
        !           206: /* inlined -Don */
        !           207: #if 0
        !           208:       SetPowerBit();
        !           209: #else
        !           210: #if 1
        !           211:       SETPOWERBIT(SMapX, SMapY);
        !           212: #else
        !           213:       PowerMap[(SMapX >>4) + (SMapY <<3)] |= 1 << (SMapX & 15);
        !           214: #endif
        !           215: #endif
        !           216:       ConNum = 0;
        !           217:       Dir = 0;
        !           218:       while ((Dir < 4) && (ConNum < 2))        {
        !           219:        if (TestForCond(Dir)) {
        !           220:          ConNum++;
        !           221:          ADir = Dir;
        !           222:        }
        !           223:        Dir++;
        !           224:       }
        !           225:       if (ConNum > 1)
        !           226:        PushPowerStack();
        !           227:     } while (ConNum);
        !           228:   }
        !           229: }
        !           230: 
        !           231: 
        !           232: /* comefrom: DoPowerScan DoSPZone */
        !           233: PushPowerStack(void) 
        !           234: {      
        !           235:   if (PowerStackNum < (PWRSTKSIZE - 2)) {
        !           236:     PowerStackNum++;
        !           237:     PowerStackX[PowerStackNum] = SMapX;
        !           238:     PowerStackY[PowerStackNum] = SMapY;
        !           239:    }
        !           240: }
        !           241: 
        !           242: 
        !           243: /* comefrom: DoPowerScan */
        !           244: PullPowerStack(void)
        !           245: {      
        !           246:   if (PowerStackNum > 0)  {
        !           247:     SMapX = PowerStackX[PowerStackNum];
        !           248:     SMapY = PowerStackY[PowerStackNum];
        !           249:     PowerStackNum--;
        !           250:   }
        !           251: }
        !           252: 
        !           253: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.