/[enigma]/enigma/src/oxyd.cc
ViewVC logotype

Diff of /enigma/src/oxyd.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.21 by mhawlisch, Fri Apr 4 11:52:14 2003 UTC revision 1.22 by mhawlisch, Fri Apr 4 14:07:59 2003 UTC
# Line 71  namespace Line 71  namespace
71          void load_items (const Level &level);          void load_items (const Level &level);
72          void load_stones (const Level &level);          void load_stones (const Level &level);
73          void load_actors (const Level &level);          void load_actors (const Level &level);
74            void connect_signals (const Level &level);
75    
76          // Variables          // Variables
77          OxydVersion  m_version;          OxydVersion  m_version;
# Line 492  LevelPack_Oxyd::LevelPack_Oxyd (OxydVers Line 493  LevelPack_Oxyd::LevelPack_Oxyd (OxydVers
493          stone_map[0x34] = "st-death";          stone_map[0x34] = "st-death";
494          stone_map[0x35] = "st-death_invisible";          stone_map[0x35] = "st-death_invisible";
495          stone_map[0x42] = "st-stoneimpulse";          stone_map[0x42] = "st-stoneimpulse";
         stone_map[0x44] = "st-laser-n";  
         stone_map[0x46] = "st-laser-e";  
496          stone_map[0x68] = "st-bombs";          stone_map[0x68] = "st-bombs";
497          stone_map[0x6c] = "st-shogun-s";          stone_map[0x6c] = "st-shogun-s";
498          stone_map[0x75] = "st-rock2";          stone_map[0x75] = "st-rock2";
# Line 602  LevelPack_Oxyd::set_item (const Level &l Line 601  LevelPack_Oxyd::set_item (const Level &l
601      Item *it = 0;      Item *it = 0;
602      const Grid &grid = level.getGrid (GridType_Objects);      const Grid &grid = level.getGrid (GridType_Objects);
603      int type = grid.get(x,y);      int type = grid.get(x,y);
604        char buf[20] = "";
605    
606      switch (type) {      switch (type) {
607      case 0x00: break;           // ignore      case 0x00: break;           // ignore
608      case 0x02:                  // note 1      case 0x02:                  // note 1
# Line 626  LevelPack_Oxyd::set_item (const Level &l Line 627  LevelPack_Oxyd::set_item (const Level &l
627          it->set_attrib("type", 3);          it->set_attrib("type", 3);
628          break;          break;
629    
630        case 0x2c: it = MakeItem("it-shogun");
631            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
632            it->set_attrib ("size", 1);
633            NameObject(it, buf);
634            break;
635    
636        case 0x40: it = MakeItem("st-trigger");
637            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
638            NameObject(it, buf);
639            break;
640    
641      default:      default:
642          {          {
643              const char *name = item_map[type];              const char *name = item_map[type];
# Line 655  LevelPack_Oxyd::set_stone (const Level & Line 667  LevelPack_Oxyd::set_stone (const Level &
667      Stone *st = 0;      Stone *st = 0;
668      const Grid &grid = level.getGrid (GridType_Pieces);      const Grid &grid = level.getGrid (GridType_Pieces);
669      int type = grid.get(x,y);      int type = grid.get(x,y);
670        char buf[20] = "";
671    
672      switch( type) {      switch( type) {
673      case 0x00: break;           // ignore      case 0x00: break;           // ignore
# Line 674  LevelPack_Oxyd::set_stone (const Level & Line 687  LevelPack_Oxyd::set_stone (const Level &
687      case 0x0d:      case 0x0d:
688      case 0x0e:      case 0x0e:
689      case 0x0f: st = MakeStone("st-oxyd");      case 0x0f: st = MakeStone("st-oxyd");
690          char buf[2];          snprintf( buf, sizeof(buf), "%d", (int)((type-1)/2));
         snprintf( buf, 2, "%d", (int)((type-1)/2));  
691          st->set_attrib("color", Value(buf));          st->set_attrib("color", Value(buf));
692          st->set_attrib("flavor", "a");          st->set_attrib("flavor", "a");
693          break;          break;
694    
695        case 0x28: st = MakeStone("st-switch");
696            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
697            NameObject(st, buf);
698            break;
699    
700        case 0x2b: st = MakeStone("st-fourswitch");
701            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
702            NameObject(st, buf);
703            break;
704    
705        case 0x2c: st = MakeStone("st-switch");
706            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
707            NameObject(st, buf);
708            break;
709    
710        case 0x2d: st = MakeStone("st-floppy");
711            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
712            NameObject(st, buf);
713            break;
714    
715        case 0x3e: st = MakeStone("st-laser");
716            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
717            NameObject(st, buf);
718            st->set_attrib("direction", NORTH);
719            break;
720        case 0x3f: st = MakeStone("st-laser");
721            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
722            NameObject(st, buf);
723            st->set_attrib("direction", SOUTH);
724            break;
725        case 0x40: st = MakeStone("st-laser");
726            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
727            NameObject(st, buf);
728            st->set_attrib("direction", EAST);
729            break;
730    
731        case 0x46:
732            st = MakeStone("st-laser");
733            snprintf( buf, sizeof(buf), "O_%d_%d", x, y);
734            NameObject(st, buf);
735            st->set_attrib("direction", EAST);
736            break;
737    
738      case 0x51: st = MakeStone("st-puzzle");      case 0x51: st = MakeStone("st-puzzle");
739          st->set_attrib("connections", 7);          st->set_attrib("connections", 7);
740          break;          break;
# Line 717  LevelPack_Oxyd::set_stone (const Level & Line 772  LevelPack_Oxyd::set_stone (const Level &
772          st->set_attrib("connections", 1);          st->set_attrib("connections", 1);
773          break;          break;
774    
775        case 0x73:
776            st = MakeStone("st-door");
777            snprintf( buf, sizeof(buf), "D_%d_%d", x, y);
778            NameObject(st, buf);
779            st->set_attrib("type", "h");
780            break;
781    
782      default:      default:
783          {          {
784              const char *name = stone_map[type];              const char *name = stone_map[type];
# Line 784  LevelPack_Oxyd::load_actors (const Level Line 846  LevelPack_Oxyd::load_actors (const Level
846    
847  }  }
848    
849    void
850    LevelPack_Oxyd::connect_signals (const Level &level)
851    {
852        using namespace world;
853    
854        set<SignalLocation> senders;
855        level.getSenders(&senders);
856        set<SignalLocation>::const_iterator senderIter = senders.begin();
857        set<SignalLocation>::const_iterator senderEnd = senders.end();
858        for (; senderIter != senderEnd; ++senderIter) {
859            const SignalLocation &sender = *senderIter;
860            char sender_name[9];
861            snprintf( sender_name, 9, "O_%d_%d", sender.getX(), sender.getY());
862            
863            int numRecipients = level.getNumRecipients(sender);
864            if( numRecipients >= 1) {
865                const SignalLocation &recipient =
866                    level.getRecipient(sender, 0);
867    
868                Object *s_o = GetNamedObject( sender_name);
869    
870                char recipient_name[9];
871                char *signalname = "trigger";
872                snprintf( recipient_name, 9, "O_%d_%d", recipient.getX(), recipient.getY());
873                Object *r_o = GetNamedObject( recipient_name);
874                if( r_o)
875                    signalname = "onoff";
876                else {
877                    snprintf( recipient_name, 9, "D_%d_%d", recipient.getX(), recipient.getY());
878                    r_o = GetNamedObject( recipient_name);
879                    if( r_o) {
880                        signalname = "openclose";
881                    }
882                }
883                            
884                if( s_o) {
885                    s_o->set_attrib( "action", signalname);
886                    s_o->set_attrib( "target", Value(recipient_name));
887                } else {
888                    fprintf(stderr,"Could not get sender %s!\n", sender_name);
889                }
890                fprintf(stderr, "Signal '%s' from %s to %s\n", signalname, sender_name, recipient_name);
891            }
892            if( numRecipients > 1) {
893                fprintf(stderr,"Multiple recipients of Signals currently not supported!\n");
894            }
895            
896        }
897    }
898    
899  bool  bool
900  LevelPack_Oxyd::load_level (size_t index)  LevelPack_Oxyd::load_level (size_t index)
901  {  {
# Line 803  LevelPack_Oxyd::load_level (size_t index Line 915  LevelPack_Oxyd::load_level (size_t index
915      load_items (level);      load_items (level);
916      load_stones (level);      load_stones (level);
917      load_actors (level);      load_actors (level);
918        connect_signals (level);
919    
920      world::InitWorld();      world::InitWorld();
921      if( level.getScrolling())      if( level.getScrolling())

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26