view Level/Decoration.cpp @ 1483:223605b325b3

Слияние
author Ritor1
date Thu, 29 Aug 2013 12:04:55 +0600
parents 61451d5980bf
children a27cdb3d753e
line wrap: on
line source

#include <assert.h>

#include "Decoration.h"
#include "../Party.h"
#include "../mm7_data.h" // for _449B57_test_bit

//----- (004583B0) --------------------------------------------------------
LevelDecoration::LevelDecoration()
{
  this->field_1A = 0;
  this->field_18 = 0;
  this->vPosition.z = 0;
  this->vPosition.y = 0;
  this->vPosition.x = 0;
  this->uDecorationDescID = 0;
  this->field_2 = 0;
  this->field_16_event_id = 0;
  this->uCog = 0;
}

//----- (00450929) --------------------------------------------------------
int LevelDecoration::GetGlobalEvent()
{
  LevelDecoration *v1; // esi@1
  signed int v2; // eax@1
  int v3; // eax@5
  int v4; // eax@6
  int v5; // eax@7
  int v6; // eax@8
  int v7; // eax@9
  int result; // eax@14
  int v9; // eax@18
  int v10; // eax@19
  int v11; // eax@20
  int v12; // eax@21
  int v13; // eax@22

  switch (uDecorationDescID)
  {
    case   0: case 1:
    case   2: case 3:
      return 0;

    case   4: return 16;               // dec01 "Trash Pile"
    case   5: return 32;               // dec02 "Campfire"
    case   6: return 12 + rand() % 4;  // dec03 "Cauldron"
    case   7: case 8:
    case   9: case 10:
      return 0;

    case  11: return 34;               // dec08 "Fruit plate"
    case  12:
      return 0;

    case  13: return 17;               // dec10 "Trash Pile"
    case  14: return 18;               // dec11 "Filth"
    case  15: case 16: case 17:
    case  18: case 19: case 20:
    case  21: case 22: case 23:
      return 0;

    case  24: return 36;               // dec21 "Keg"
    case  25: case 26: case 27: case 28: case 29:
    case  30: case 31: case 32: case 33:
      return 0;

    case  34: return 4 + rand() % 6;   // dec32 "Barrel"
    case  35: case  36: case  37: case  38: case  39:
    case  40: case  41: case  42: case  43: case  44: case  45: case  46: case  47: case  48: case  49:
    case  50: case  51: case  52: case  53: case  54: case  55: case  56: case  57: case  58: case  59:
    case  60: case  61: case  62: case  63: case  64: case  65: case  66: case  67: case  68: case  69:
    case  70: case  71: case  72: case  73: case  74: case  75: case  76: case  77: case  78: case  79:
    case  80: case  81: case  82: case  83: case  84: case  85: case  86: case  87: case  88: case  89:
    case  90: case  91: case  92: case  93: case  94: case  95: case  96: case  97: case  98: case  99:
    case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109:
    case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119:
    case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129:
    case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139:
    case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149:
    case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159:
    case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169:
    case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179:
    case 180: case 181: case 182: case 183:

    case 184: return 33;               // dec24 "Campfire"
    case 185: case 186:
      return 0;

    case 187:                          // dec88 "Mushroom"
    case 190:                          // dec91 "Mushroom"
      return 37;

    case 188: case 189:
    case 191: case 192: case 193: case 194: case 195: case 196:
    case 197: case 198: case 199: case 200: case 201: case 202:
    case 203: case 204: case 205:
      return 0;

    case 206: return 162 + rand() % 7; // dec60
    case 207: return 169 + rand() % 7; // dec61
    case 208: return 176 + rand() % 7; // dec62
    case 209: return 183 + rand() % 7; // dec63
    case 210: return 150;              // dec64 "Magic Pedistal"
    case 211: return 151;              // dec65 "Magic Pedistal"
    case 212: return 152;              // dec66 "Magic Pedistal"
    case 213: return 153;              // dec67 "Magic Pedistal"
    case 214: return 154;              // dec68 "Magic Pedistal"
    case 215: return 155;              // dec69 "Magic Pedistal"
    case 216: return 156;              // dec70 "Magic Pedistal"
    case 217: return 157;              // dec71 "Magic Pedistal"
    case 218: return 158;              // dec72 "Magic Pedistal"
    case 219: return 159;              // dec73 "Magic Pedistal"
    case 220: return 160;              // dec74 "Magic Pedistal"
    case 221: return 161;              // dec75 "Magic Pedistal"

    case 222: case 223: case 224:
    case 225: case 226: case 227:
      return 0;

    default: assert(false && "Invalid Decoration");
  }
}

//----- (0047A825) --------------------------------------------------------
bool LevelDecoration::_47A825()
{
  //bool v1; // ebx@1
  //LevelDecoration *v2; // edi@1

  if (pParty->uCurrentHour == 0
      && !_449B57_test_bit(pParty->_quest_bits, 178)
      && _449B57_test_bit(pParty->_quest_bits, 164)
      && _449B57_test_bit(pParty->_quest_bits, 165)
      && _449B57_test_bit(pParty->_quest_bits, 166)
      && _449B57_test_bit(pParty->_quest_bits, 167)
      && _449B57_test_bit(pParty->_quest_bits, 168)
      && _449B57_test_bit(pParty->_quest_bits, 169)
      && _449B57_test_bit(pParty->_quest_bits, 170)
      && _449B57_test_bit(pParty->_quest_bits, 171)
      && _449B57_test_bit(pParty->_quest_bits, 172)
      && _449B57_test_bit(pParty->_quest_bits, 173)
      && _449B57_test_bit(pParty->_quest_bits, 174)
      && _449B57_test_bit(pParty->_quest_bits, 175)
      && _449B57_test_bit(pParty->_quest_bits, 176)
      && _449B57_test_bit(pParty->_quest_bits, 177))
  {
    this->field_2 &= ~LEVEL_DECORATION_INVISIBLE;
    return true;
  }

  this->field_2 |= LEVEL_DECORATION_INVISIBLE;
  return false;
}

//----- (0044C2F4) --------------------------------------------------------
bool LevelDecoration::IsInteractive()
{
  switch (uDecorationDescID)
  {
    case 4:    // trash pile
    case 5:    // campfire
    case 6:    // cauldron
    case 11:   // fruit plate
    case 13:   // trash pile
    case 14:   // dirt
    case 24:   // keg
    case 184:  // fire
    case 187:  // fire
    case 190:  // fire
      return true;
  }

  if (uDecorationDescID >= 206 && uDecorationDescID <= 209) // lighthouse fire
    return true;
  if (uDecorationDescID >= 210 && uDecorationDescID <= 221) // magic pedistal
    return true;

  return false;
}