SVN-fs-dump-format-version: 2 UUID: 60756e62-ebd0-0310-9ead-ace0535112e0 Revision-number: 0 Prop-content-length: 56 Content-length: 56 K 8 svn:date V 27 2004-01-15T02:38:37.436034Z PROPS-END Revision-number: 1 Prop-content-length: 119 Content-length: 119 K 7 svn:log V 17 Initial revision K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-28T20:00:40.000000Z PROPS-END Node-path: trunk Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: trunk/prototype Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: trunk/prototype/AUTHORS Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 0 Text-content-md5: d41d8cd98f00b204e9800998ecf8427e Content-length: 10 PROPS-END Node-path: trunk/prototype/Advent.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 3604 Text-content-md5: 24ad15a12cf48e9eb5ec21c8e8182d5c Content-length: 3614 PROPS-END // $Id: Advent.cc,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Scenario.hh" #include "Coin.hh" #include "Advent.hh" #include "Font.hh" #include "AdventObjSmob.hh" Advent app; Inventory inventory; Scenario* current_scenario; // Wrapper to call the member func void inner_main (void* closure, int argc, char* argv[]) { app.inner_main (closure, argc, argv); } Advent::Advent () { } char* Advent::get_title () { return "Advent - Prototype"; } int Advent::main (int argc, char* argv[]) { std::cout << "Starting guile..." << std::endl; scm_boot_guile (argc, argv,::inner_main, 0); std::cout << "this should never be reached..." << std::endl; return 0; } void Advent::inner_main (void* closure, int argc, char* argv[]) { bool fullscreen = false; std::cout << "Loading guile code..." << std::endl; AdventObjSmob::init (); std::cout << "Loading guile code...done" << std::endl; if (argc == 2) { if (strcmp (argv[1], "--fullscreen") == 0) { fullscreen = true; } } try { CL_SetupCore::init (); CL_SetupCore::init_display (); CL_SetupPNG::init (); CL_SetupJPEG::init (); CL_Display::set_videomode (640, 480, 16, fullscreen, false); resource = CL_ResourceManager::create("data/resources.scr", false); Scenario scenario; Coin coin (&scenario); current_scenario = &scenario; gh_load ("guile/adventure.scm"); int time = CL_System::get_time (); int count = 0; char str[256] = {"Calculation"}; gh_eval_str("(let ((obj (advent:makeobj \"testobj\" \"takeme\" 400 100 100))) (println obj))"); while (CL_Keyboard::get_keycode (CL_KEY_ESCAPE) == 0) { //std::cout << "Looping..." << std::endl; //CL_Display::fill_rect (CL_Mouse::get_x (), CL_Mouse::get_y (), //CL_Mouse::get_x () + 16, CL_Mouse::get_y () + 16, //1.0, 1.0, 1.0, 1.0); //CL_Display::clear_display (1.0, 1.0, 0.0, 0.01); scenario.update (); coin.update (); scenario.draw (); coin.draw (); font ("font")->print_left (0, 0, str); if (count > 9) { int time_diff = CL_System::get_time () - time; //std::cout << "fps: " << 10000.0 / time_diff << std::endl; sprintf (str, "fps: %f", 10000.0 / time_diff); //std::cout << "Str: " << str << std::endl; count = 0; time = CL_System::get_time (); } CL_Display::flip_display (); count++; CL_System::keep_alive (); } CL_SetupJPEG::deinit (); CL_SetupPNG::deinit (); CL_SetupCore::deinit_display (); CL_SetupCore::deinit (); } catch (CL_Error err) { std::cout << "CL_Error: " << err.message << std::endl; } } /* EOF */ Node-path: trunk/prototype/Advent.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1419 Text-content-md5: 490fe027183a34688aae7bcc23da036a Content-length: 1429 PROPS-END // $Id: Advent.hh,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENT_HH #define ADVENT_HH #include #include "Inventory.hh" extern Scenario* current_scenario; void inner_main (void* closure, int argc, char* argv[]); class Advent : public CL_ClanApplication { private: CL_ResourceManager* resource; public: Advent (); char* get_title (); CL_ResourceManager* get_resource () { return resource; } void inner_main (void* closure, int argc, char* argv[]); int main (int argc, char* argv[]); }; extern Inventory inventory; extern Advent app; #endif /* EOF */ Node-path: trunk/prototype/AdventObj.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 3468 Text-content-md5: 191bd3f68cfb698a00b38b8231bbbe81 Content-length: 3478 PROPS-END // $Id: AdventObj.cc,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "Scenario.hh" #include "Advent.hh" #include "AdventObj.hh" SurfaceAdvObj::SurfaceAdvObj (Scenario* s, const CL_Surface& arg_sur, const CL_Vector& arg_pos) : AdventObj (s) { sur = arg_sur; pos = arg_pos; } void SurfaceAdvObj::draw_world () { sur.put_screen (pos.x, pos.y); } Mogli::Mogli (Scenario* s) : AdventObj (s) { sur_front = CL_Surface ("mogli_front", app.get_resource ()); sur_back = CL_Surface ("mogli_back", app.get_resource ()); sur_left = CL_Surface ("mogli_left", app.get_resource ()); sur_right = CL_Surface ("mogli_right", app.get_resource ()); counter = 0; pos.x = 320; pos.y = 400; delta = 4.0; on_button_press_slot = CL_Input::sig_button_press.connect (thCreateSlot(this, &Mogli::on_button_press)); } Mogli::~Mogli () { } void Mogli::update () { // update animation if (target != pos) { counter++; if (counter > 7) counter = 0; if (on_target ()) { target = pos; } else { CL_Vector tmp_pos = pos + direction; if (scenario->get_colmap ()->get_pixel (tmp_pos.x, tmp_pos.y) != 0) { pos = tmp_pos; pos.z = scenario->get_colmap ()->get_pixel (pos.x, pos.y); } else { target = pos; } } } else { counter = 0; } } bool Mogli::on_target () { if (pos.x - delta < target.x && pos.x + delta > target.x && pos.y - delta < target.y && pos.y + delta > target.y) { return true; } return false; } void Mogli::draw_world () { float zoom = scenario->get_colmap ()->get_pixel (pos.x, pos.y) / 255.0; CL_Surface* sur; if (fabs(direction.x) < fabs(direction.y)) { if (direction.y > 0) sur = &sur_front; else sur = &sur_back; } else { if (direction.x > 0) sur = &sur_right; else sur = &sur_left; } sur->put_screen (pos.x - (sur->get_width ()/2 * zoom), pos.y - (sur->get_height () * zoom), zoom, zoom, counter % sur->get_num_frames ()); //std::cout << "Zoom: " << zoom << std::endl; } void Mogli::on_button_press(CL_InputDevice *device, const CL_Key &key) { if (key.id == 0) { direction = CL_Vector (key.x - pos.x, key.y - pos.y); direction.normalize (); direction *= 5.0; target = CL_Vector (key.x, key.y); } } bool Mogli::is_at (int x, int y) { if (pos.x - sur_left.get_width()/2 < x && pos.x + sur_left.get_width()/2 > x && pos.y > y && pos.y - sur_left.get_height () < y) { return true; } return false; } /* EOF */ Node-path: trunk/prototype/AdventObj.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2711 Text-content-md5: 99a5215386078fa0f14e4eaae650eb40 Content-length: 2721 PROPS-END // $Id: AdventObj.hh,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENTOBJ_HH #define ADVENTOBJ_HH #include #include "Position.hh" class Scenario; class AdventObj { protected: Scenario* scenario; public: /// Empty default constructor AdventObj (Scenario* s) { scenario = s; } /// Empty default destructor virtual ~AdventObj () {} /// Update the status of the object, this function is called once an /// event loop virtual void update () {} /// Draw the object to the world virtual void draw_world () {} /// Draw the object into the inventory virtual void draw_inventory (int x, int y) {} virtual bool is_at (int x, int y) { return false; } virtual std::string get_name () { return "-- unset --"; } virtual float get_z_pos () { return 0.0; } }; // Little helper class for sort() struct AdventObj_less : public binary_function { bool operator() (AdventObj* a, AdventObj* b) const { return a->get_z_pos () < b->get_z_pos (); } }; class SurfaceAdvObj : public AdventObj { private: CL_Vector pos; CL_Surface sur; public: SurfaceAdvObj (Scenario* s, const CL_Surface& arg_sur, const CL_Vector& arg_pos); ~SurfaceAdvObj () {} void draw_world (); float get_z_pos () { return pos.z; } }; class Mogli : public AdventObj { private: CL_Surface sur_left; CL_Surface sur_right; CL_Surface sur_front; CL_Surface sur_back; int counter; thSlot on_button_press_slot; CL_Vector direction; CL_Vector pos; CL_Vector target; float delta; public: Mogli (Scenario* s); ~Mogli (); bool on_target (); void update (); void draw_world (); void on_button_press(CL_InputDevice *device, const CL_Key &key); float get_z_pos () { return pos.z; } bool is_at (int x, int y); std::string get_name () { return "Mogli"; } }; #endif /* EOF */ Node-path: trunk/prototype/AdventObjSmob.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 3421 Text-content-md5: 872d1e0be639a96a7eb9a1bcc0249526 Content-length: 3431 PROPS-END // $Id: AdventObjSmob.cc,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Advent.hh" #include "AdventObj.hh" #include "GuileAdventObj.hh" #include "AdventObjSmob.hh" #include "Scenario.hh" long AdventObjSmob::tag; struct AdventObjP { int i; GuileAdventObj* obj; }; void AdventObjSmob::init () { tag = scm_make_smob_type ("AdventObj", sizeof (AdventObjP)); scm_set_smob_mark (tag, &AdventObjSmob::mark_obj); scm_set_smob_free (tag, &AdventObjSmob::free_obj); scm_set_smob_print (tag, &AdventObjSmob::print_obj); gh_new_procedure5_0("advent:makeobj", AdventObjSmob::make_obj); gh_new_procedure2_0("advent:set-surface", AdventObjSmob::set_surface); } SCM AdventObjSmob::mark_obj (SCM smob) { return SCM_UNSPECIFIED; } scm_sizet AdventObjSmob::free_obj (SCM smob) { std::cout << "Freeing object..." << std::endl; //AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); // delete obj; // do nothing return 0; } int AdventObjSmob::print_obj (SCM smob, SCM port, scm_print_state *pstate) { std::cout << "Printing object..." << std::endl; AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); if (obj) { std::cout << "STR: " << obj->obj->get_name () << std::endl; scm_puts ("#", port); } else { scm_puts ("#", port); } /* non-zero means success */ return 1; } SCM AdventObjSmob::make_obj (SCM name, SCM surface, SCM x_pos, SCM y_pos, SCM z_pos) { AdventObjP* obj = (AdventObjP*)scm_must_malloc (sizeof (AdventObjP), "AdventObjP"); obj->obj = new GuileAdventObj (0, SCM_CHARS(name), 1, CL_Surface (SCM_CHARS(surface), app.get_resource ()), CL_Vector (SCM_INUM(x_pos), SCM_INUM(y_pos), SCM_INUM(z_pos))); obj->i = 42; std::cout << "Makeing object: " << obj << " "<< obj->obj << std::endl; current_scenario->add (obj->obj); SCM_RETURN_NEWSMOB (tag, obj); } SCM AdventObjSmob::set_surface (SCM smob, SCM name) { std::cout << "Setting surface" << std::endl; AdventObjP* advobj = reinterpret_cast(SCM_CDR (smob)); if (advobj) { char* str = SCM_CHARS(name); puts ("set_surface..."); puts (str); std::cout << "int: " << advobj->i << std::endl; std::cout << "Pointer: " << advobj << " " << advobj->obj << std::endl; advobj->obj->set_surface (str); } else { std::cout << "KAPUTT" << std::endl; } return SCM_UNSPECIFIED; } /* EOF */ Node-path: trunk/prototype/AdventObjSmob.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1338 Text-content-md5: f70eb0c7b7fa01943a1c9adbc0152b3a Content-length: 1348 PROPS-END // $Id: AdventObjSmob.hh,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENTOBJSMOB_HH #define ADVENTOBJSMOB_HH class AdventObjSmob { private: static long tag; public: static void init (); static SCM mark_obj (SCM smob); static scm_sizet free_obj (SCM smob); static int print_obj (SCM smob, SCM port, scm_print_state *pstate); static SCM make_obj (SCM name, SCM surface, SCM x_pos, SCM y_pos, SCM z_pos); static SCM set_surface (SCM obj, SCM name); }; #endif /* EOF */ Node-path: trunk/prototype/Background.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1137 Text-content-md5: 41fbc78009ac9425b48e00003401c620 Content-length: 1147 PROPS-END // $Id: Background.cc,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "Position.hh" #include "Background.hh" Background::Background () { sur = CL_Surface ("background", app.get_resource ()); } Background::~Background () { } void Background::draw () { sur.put_screen (0,0); } /* EOF */ Node-path: trunk/prototype/Background.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1129 Text-content-md5: ec83e77c30a1ac067d03bff54b97fbc3 Content-length: 1139 PROPS-END // $Id: Background.hh,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef BACKGROUND_HH #define BACKGROUND_HH #include class Background { private: CL_Surface sur; public: Background (); virtual ~Background (); virtual void draw (); virtual void update () {} }; #endif /* EOF */ Node-path: trunk/prototype/COPYING Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 17992 Text-content-md5: 94d55d512a9ba36caa9b7df079bae19f Content-length: 18002 PROPS-END GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. Node-path: trunk/prototype/ChangeLog Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 0 Text-content-md5: d41d8cd98f00b204e9800998ecf8427e Content-length: 10 PROPS-END Node-path: trunk/prototype/Coin.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 3766 Text-content-md5: d4cafb15c8b9233cc27c56843fc92aa9 Content-length: 3776 PROPS-END // $Id: Coin.cc,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "GuileAdventObj.hh" #include "Font.hh" #include "AdventObj.hh" #include "Advent.hh" #include "Coin.hh" Coin::Coin (Scenario* s) { scenario = s; visible = false; sur = CL_Surface ("coin", app.get_resource ()); on_button_press_slot = CL_Input::sig_button_press.connect (thCreateSlot(this, &Coin::on_button_press)); on_button_release_slot = CL_Input::sig_button_release.connect (thCreateSlot(this, &Coin::on_button_release)); marked_obj = 0; } void Coin::draw () { if (visible) { //std::cout << "Drawing..." << x_pos << " " << y_pos << std::endl; sur.put_screen (x_pos - sur.get_width ()/2, y_pos - sur.get_height ()/2); } AdventObj* obj = scenario->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (obj) { font ("font")->print_center (320, 460, obj->get_name ().c_str ()); } } void Coin::update () { } void Coin::on_button_press(CL_InputDevice *device, const CL_Key &key) { std::cout << "Coin pressed: " << key.id << std::endl; if (key.id == 1) { std::cout << "Point Color: " << scenario->get_colmap ()->get_pixel (key.x, key.y) << " " << key.x << "x" << key.y << std::endl; } else if (key.id == 2) { marked_obj = scenario->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (marked_obj) { visible = true; x_pos = (int) key.x; y_pos = (int)key.y; } } } void Coin::on_button_release (CL_InputDevice *device, const CL_Key &key) { //std::cout << "Coin released: " << key.id << std::endl; if (key.id == 2) { visible = false; if (marked_obj) { std::cout << "Action on: " << marked_obj->get_name () << std::endl; if (key.x > x_pos - sur.get_width ()/2 && key.x < x_pos + sur.get_width ()/2 && key.y > y_pos - sur.get_height ()/2 && key.y < y_pos + sur.get_height ()/2) { if (key.x < x_pos && key.y < y_pos) { std::cout << "Use" << std::endl; //gh_eval_str ("(advent:eval \"use whip\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("use", obj->get_name ()); } else if (key.x > x_pos && key.y < y_pos) { std::cout << "Open/Close" << std::endl; //gh_eval_str ("(advent:eval \"use whip box\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("open", obj->get_name ()); } else if (key.x < x_pos && key.y > y_pos) { std::cout << "Pickup" << std::endl; //gh_eval_str ("(advent:eval \"pickup whip\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("pickup", obj->get_name ()); } else if (key.x > x_pos && key.y > y_pos) { std::cout << "Inventory" << std::endl; gh_eval_str ("(advent:eval \"inventory\")"); //obj->call ("pickup", obj->get_name ()); } } } } } /* EOF */ Node-path: trunk/prototype/Coin.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1390 Text-content-md5: dc877aa2d985f948c01ada307a0205ba Content-length: 1400 PROPS-END // $Id: Coin.hh,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef COIN_HH #define COIN_HH #include #include "Scenario.hh" class Coin { private: thSlot on_button_press_slot; thSlot on_button_release_slot; CL_Surface sur; bool visible; int x_pos, y_pos; Scenario* scenario; AdventObj* marked_obj; public: Coin (Scenario* s); ~Coin () {} void draw (); void update (); void on_button_press (CL_InputDevice *device, const CL_Key &key); void on_button_release (CL_InputDevice *device, const CL_Key &key); }; #endif /* EOF */ Node-path: trunk/prototype/CollisionMap.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1227 Text-content-md5: b82230dd282873ab161c8a72cf54b80b Content-length: 1237 PROPS-END // $Id: CollisionMap.cc,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "CollisionMap.hh" CollisionMap::CollisionMap () { provider = CL_SurfaceProvider::load ("background_cmap", app.get_resource ()); provider->lock (); } CollisionMap::~CollisionMap () { provider->unlock (); } int CollisionMap::get_pixel (int x, int y) { return provider->get_pixel (x, y); } /* EOF */ Node-path: trunk/prototype/CollisionMap.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1128 Text-content-md5: b83c175529c5c0adb9cc6df7191c3dc7 Content-length: 1138 PROPS-END // $Id: CollisionMap.hh,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef COLLISIONMAP_HH #define COLLISIONMAP_HH class CollisionMap { private: CL_SurfaceProvider* provider; public: CollisionMap (); virtual ~CollisionMap (); void update () {} int get_pixel (int x, int y); }; #endif /* EOF */ Node-path: trunk/prototype/Font.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1209 Text-content-md5: 4309e3eb1c6056f0a5156bf989b2e350 Content-length: 1219 PROPS-END // $Id: Font.cc,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "Font.hh" Font font; CL_Font* Font::operator() (const std::string& fontname) { CL_Font* font = fonts[fontname]; if (font) { return font; } else { fonts[fontname] = CL_Font::load (fontname.c_str (), app.get_resource ()); return fonts[fontname]; } } /* EOF */ Node-path: trunk/prototype/Font.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1140 Text-content-md5: 974fa63f461f1bb364b9faad2b46ef61 Content-length: 1150 PROPS-END // $Id: Font.hh,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef FONT_HH #define FONT_HH #include #include #include class Font { private: std::map fonts; public: CL_Font* operator() (const std::string& fontname); }; extern Font font; #endif /* EOF */ Node-path: trunk/prototype/GuileAdventObj.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1959 Text-content-md5: ed8b88eea73f235d81b536538d96e44e Content-length: 1969 PROPS-END // $Id: GuileAdventObj.cc,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include "Advent.hh" #include "GuileAdventObj.hh" GuileAdventObj::GuileAdventObj (Scenario* s, std::string arg_name, int arg_id, CL_Surface arg_sur, CL_Vector arg_pos) : AdventObj (s) { name = arg_name; id = arg_id; sur = arg_sur; pos = arg_pos; } void GuileAdventObj::call (std::string func, std::string id) { std::string call = "(advent:eval \""; call += func; call += " "; call += id; call += "\")"; std::cout << "Call: " << call << std::endl; char* str = strdup (call.c_str ()); gh_eval_str (str); free (str); } void GuileAdventObj::draw_world () { sur.put_screen (pos.x, pos.y); } bool GuileAdventObj::is_at (int x, int y) { if (pos.x < x && pos.x + sur.get_width() > x && pos.y < y && pos.y + sur.get_height () > y) { return true; } return false; } void GuileAdventObj::set_surface (std::string str) { std::cout << "GuileAdventObj: set_surface: " << str << std::endl; sur = CL_Surface (str.c_str (), app.get_resource ()); } /* EOF */ Node-path: trunk/prototype/GuileAdventObj.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1905 Text-content-md5: aabd9ce9f471cc9d5df9551cc005ae65 Content-length: 1915 PROPS-END // $Id: GuileAdventObj.hh,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef GUILEADVENTOBJ_HH #define GUILEADVENTOBJ_HH #include #include "AdventObj.hh" class GuileAdventObj : public AdventObj { private: std::string name; /// The uniq id of this object instance int id; CL_Surface sur; CL_Vector pos; public: /// Empty default constructor GuileAdventObj (Scenario* s, std::string arg_name, int arg_id, CL_Surface arg_sur, CL_Vector pos); /// Empty default destructor virtual ~GuileAdventObj () {} /// Update the status of the object, this function is called once an /// event loop virtual void update () {} /// Draw the object to the world virtual void draw_world (); /// Draw the object into the inventory virtual void draw_inventory (int x, int y) {} virtual void call (std::string func, std::string id); virtual bool is_at (int x, int y); virtual std::string get_name () { return name; } virtual float get_z_pos () { return pos.z; } virtual void set_surface (std::string str); }; #endif /* EOF */ Node-path: trunk/prototype/INSTALL Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 7831 Text-content-md5: 0d6be33865b76025c20b48bcac87adb7 Content-length: 7841 PROPS-END Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. Node-path: trunk/prototype/Inventory.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1286 Text-content-md5: dc650d9f359cfd69e0993d7672869201 Content-length: 1296 PROPS-END // $Id: Inventory.cc,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Inventory.hh" Inventory::Inventory () { } void Inventory::add (AdventObj* obj) { objects.push_back (obj); } void Inventory::remove (AdventObj* obj) { objects.remove (obj); } void Inventory::draw () { int x = 0; for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->draw_inventory (x, 0); x += 50; } } /* EOF */ Node-path: trunk/prototype/Inventory.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1275 Text-content-md5: 5750c6df1780952732168b37377205a4 Content-length: 1285 PROPS-END // $Id: Inventory.hh,v 1.1 2000/12/28 20:00:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef INVENTORY_HH #define INVENTORY_HH #include "AdventObj.hh" class Inventory { private: std::list objects; public: Inventory (); virtual ~Inventory () {} void draw (); /// Show the inventory and allow the user to select or manipulate it void show (); /// Add void add (AdventObj*); /// Remove void remove (AdventObj*); }; #endif /* EOF */ Node-path: trunk/prototype/Makefile.am Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 550 Text-content-md5: 34e6a360c562e4df4331dc3993dbc197 Content-length: 560 PROPS-END bindir=$(prefix)/games bin_PROGRAMS = advent advent_SOURCES = Advent.cc Background.cc Font.cc Position.hh \ Advent.hh Background.hh Font.hh Scenario.cc \ AdventObj.cc Coin.cc GuileAdventObj.cc Scenario.hh \ AdventObj.hh Coin.hh GuileAdventObj.hh \ AdventObjSmob.cc CollisionMap.cc Inventory.cc \ AdventObjSmob.hh CollisionMap.hh Inventory.hh # SUBDIRS = guile data EXTRA_DIST = guile/*.scm data/resources.scr \ data/images/*.png data/images/*.jpg # EOF # Node-path: trunk/prototype/Makefile.in Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 11761 Text-content-md5: 39c5084aef1518ac9e2a2710cc307493 Content-length: 11771 PROPS-END # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ CXX = @CXX@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ bindir = $(prefix)/games bin_PROGRAMS = advent advent_SOURCES = Advent.cc Background.cc Font.cc Position.hh Advent.hh Background.hh Font.hh Scenario.cc AdventObj.cc Coin.cc GuileAdventObj.cc Scenario.hh AdventObj.hh Coin.hh GuileAdventObj.hh AdventObjSmob.cc CollisionMap.cc Inventory.cc AdventObjSmob.hh CollisionMap.hh Inventory.hh # SUBDIRS = guile data EXTRA_DIST = guile/*.scm data/resources.scr data/images/*.png data/images/*.jpg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ advent_OBJECTS = Advent.o Background.o Font.o Scenario.o AdventObj.o \ Coin.o GuileAdventObj.o AdventObjSmob.o CollisionMap.o Inventory.o advent_LDADD = $(LDADD) advent_DEPENDENCIES = advent_LDFLAGS = CXXFLAGS = @CXXFLAGS@ CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 config.h.in \ configure configure.in install-sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best SOURCES = $(advent_SOURCES) OBJECTS = $(advent_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .cc .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) config.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=config.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f config.h maintainer-clean-hdr: mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .c.o: $(COMPILE) -c $< .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: advent: $(advent_OBJECTS) $(advent_DEPENDENCIES) @rm -f advent $(CXXLINK) $(advent_LDFLAGS) $(advent_OBJECTS) $(advent_LDADD) $(LIBS) .cc.o: $(CXXCOMPILE) -c $< tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) $(mkinstalldirs) $(distdir)/data $(distdir)/data/images $(distdir)/guile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done Advent.o: Advent.cc Scenario.hh AdventObj.hh Position.hh Background.hh \ CollisionMap.hh Coin.hh Advent.hh Inventory.hh Font.hh \ AdventObjSmob.hh AdventObj.o: AdventObj.cc Scenario.hh AdventObj.hh Position.hh \ Background.hh CollisionMap.hh Advent.hh Inventory.hh AdventObjSmob.o: AdventObjSmob.cc Advent.hh Inventory.hh AdventObj.hh \ Position.hh GuileAdventObj.hh AdventObjSmob.hh Scenario.hh \ Background.hh CollisionMap.hh Background.o: Background.cc Advent.hh Inventory.hh AdventObj.hh \ Position.hh Background.hh Coin.o: Coin.cc GuileAdventObj.hh AdventObj.hh Position.hh Font.hh \ Advent.hh Inventory.hh Coin.hh Scenario.hh Background.hh \ CollisionMap.hh CollisionMap.o: CollisionMap.cc Advent.hh Inventory.hh AdventObj.hh \ Position.hh CollisionMap.hh Font.o: Font.cc Advent.hh Inventory.hh AdventObj.hh Position.hh Font.hh GuileAdventObj.o: GuileAdventObj.cc Advent.hh Inventory.hh AdventObj.hh \ Position.hh GuileAdventObj.hh Inventory.o: Inventory.cc Inventory.hh AdventObj.hh Position.hh Scenario.o: Scenario.cc Advent.hh Inventory.hh AdventObj.hh Position.hh \ GuileAdventObj.hh Scenario.hh Background.hh CollisionMap.hh info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am all-recursive-am: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-am all-am: Makefile $(PROGRAMS) config.h all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ mostlyclean-compile mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ distclean-tags distclean-generic clean-am distclean: distclean-am -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ check-am installcheck-am installcheck all-recursive-am install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # EOF # # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Node-path: trunk/prototype/NEWS Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 0 Text-content-md5: d41d8cd98f00b204e9800998ecf8427e Content-length: 10 PROPS-END Node-path: trunk/prototype/Position.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1103 Text-content-md5: cb64ab548d2ac24d8be436d4174e7bab Content-length: 1113 PROPS-END // $Id: Position.hh,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef POSITION_HH #define POSITION_HH class Position { public: Position () { x = 0; y = 0; } Position (int arg_x, int arg_y) { x = arg_x; y = arg_y; } int x; int y; }; #endif /* EOF */ Node-path: trunk/prototype/README Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 0 Text-content-md5: d41d8cd98f00b204e9800998ecf8427e Content-length: 10 PROPS-END Node-path: trunk/prototype/Scenario.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2347 Text-content-md5: d7c843530b6e5e6368e876a1edba139a Content-length: 2357 PROPS-END // $Id: Scenario.cc,v 1.1 2000/12/28 20:00:48 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "GuileAdventObj.hh" #include "Position.hh" #include "Scenario.hh" Scenario::Scenario () { objects.push_back (new Mogli (this)); /* objects.push_back (new GuileAdventObj (this, "odd" , 3, CL_Surface ("odd", app.get_resource ()), CL_Vector (340, 216, 230))); objects.push_back (new GuileAdventObj (this, "tree", 2, CL_Surface ("tree", app.get_resource ()), CL_Vector (0, 211, 255))); objects.push_back (new GuileAdventObj (this, "takeme", 1, CL_Surface ("takeme", app.get_resource ()), CL_Vector (236, 300, 240))); */ } Scenario::~Scenario () { } void Scenario::draw () { background.draw (); // CL_Display::clear_display (); objects.sort (AdventObj_less ()); for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->draw_world (); } } void Scenario::update () { for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->update (); } background.update (); colmap.update (); } CollisionMap* Scenario::get_colmap () { return &colmap; } AdventObj* Scenario::get_object (int x, int y) { AdventObj* obj = 0; for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { if ((*i)->is_at (x, y)) obj = (*i); } return obj; } void Scenario::add (AdventObj* obj) { objects.push_back (obj); } /* EOF */ Node-path: trunk/prototype/Scenario.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1391 Text-content-md5: 54cca2e410b7e582ad43828d648cd23e Content-length: 1401 PROPS-END // $Id: Scenario.hh,v 1.1 2000/12/28 20:00:49 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef SCENARIO_HH #define SCENARIO_HH #include "AdventObj.hh" #include "Background.hh" #include "CollisionMap.hh" #include class AdventObj; class Scenario { protected: std::list objects; Background background; CollisionMap colmap; public: Scenario (); virtual ~Scenario (); virtual void draw (); virtual void update (); virtual CollisionMap* get_colmap (); virtual AdventObj* get_object (int x, int y); virtual void add (AdventObj* obj); }; #endif /* EOF */ Node-path: trunk/prototype/acconfig.h Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 181 Text-content-md5: a0b24a0ef1d0f83b7d5dc81c56a97de8 Content-length: 191 PROPS-END #ifndef ADVENT_CONFIG_H #define ADVENT_CONFIG_H @TOP@ #undef MAJOR_VERSION #undef MINOR_VERSION #undef PATCH_VERSION #undef VERSION_STRING @BOTTOM@ #endif /* ADVENT_CONFIG_H */ Node-path: trunk/prototype/aclocal.m4 Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 4396 Text-content-md5: 32f164e2aab9f2b057f1113981638174 Content-length: 4406 PROPS-END dnl aclocal.m4 generated automatically by aclocal 1.4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) Node-path: trunk/prototype/config.h.in Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 748 Text-content-md5: cf94392a92f31764d65162fba6c3973b Content-length: 758 PROPS-END /* config.h.in. Generated automatically from configure.in by autoheader. */ #ifndef ADVENT_CONFIG_H #define ADVENT_CONFIG_H #undef MAJOR_VERSION #undef MINOR_VERSION #undef PATCH_VERSION #undef VERSION_STRING /* Define if you have the clanCore library (-lclanCore). */ #undef HAVE_LIBCLANCORE /* Define if you have the clanJPEG library (-lclanJPEG). */ #undef HAVE_LIBCLANJPEG /* Define if you have the clanPNG library (-lclanPNG). */ #undef HAVE_LIBCLANPNG /* Define if you have the guile library (-lguile). */ #undef HAVE_LIBGUILE /* Define if you have the qthreads library (-lqthreads). */ #undef HAVE_LIBQTHREADS /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION #endif /* ADVENT_CONFIG_H */ Node-path: trunk/prototype/configure Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 59360 Text-content-md5: 9d09bffbab855a97db29d9cf7322d238 Content-length: 59396 K 14 svn:executable V 1 * PROPS-END #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=Advent.cc # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi PACKAGE=advent MAJOR_VERSION=0 MINOR_VERSION=0 PATCH_VERSION=1 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION} cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:586: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:639: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:696: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=$PACKAGE VERSION=$VERSION if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi cat >> confdefs.h <> confdefs.h <&6 echo "configure:742: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:755: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:768: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:781: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:794: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:811: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:841: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:892: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:924: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 935 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:966: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:971: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:999: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1035: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CXX="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi CXX="$ac_cv_prog_CXX" if test -n "$CXX"; then echo "$ac_t""$CXX" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$CXX" && break done test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:1067: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 ac_ext=C # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext << EOF #line 1078 "configure" #include "confdefs.h" int main(){return(0);} EOF if { (eval echo configure:1083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cxx_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cxx_cross=no else ac_cv_prog_cxx_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cxx_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 if test $ac_cv_prog_cxx_works = no; then { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:1109: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 cross_compiling=$ac_cv_prog_cxx_cross echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 echo "configure:1114: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no fi fi echo "$ac_t""$ac_cv_prog_gxx" 1>&6 if test $ac_cv_prog_gxx = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS="${CXXFLAGS+set}" ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 echo "configure:1142: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.cc if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then ac_cv_prog_cxx_g=yes else ac_cv_prog_cxx_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS="$ac_save_CXXFLAGS" elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:1185: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking for main in -lqthreads""... $ac_c" 1>&6 echo "configure:1240: checking for main in -lqthreads" >&5 ac_lib_var=`echo qthreads'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lqthreads $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo qthreads | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for scm_boot_guile in -lguile""... $ac_c" 1>&6 echo "configure:1283: checking for scm_boot_guile in -lguile" >&5 ac_lib_var=`echo guile'_'scm_boot_guile | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lguile $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo guile | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for main in -lclanCore""... $ac_c" 1>&6 echo "configure:1331: checking for main in -lclanCore" >&5 ac_lib_var=`echo clanCore'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lclanCore $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo clanCore | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "ClanLib installed, but -lclanCore not found, run 'ldconfig' and try again," echo "if that doesn't help have a look at the file config.log and look into" echo "the FAQ." exit fi echo $ac_n "checking for main in -lclanJPEG""... $ac_c" 1>&6 echo "configure:1381: checking for main in -lclanJPEG" >&5 ac_lib_var=`echo clanJPEG'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lclanJPEG $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo clanJPEG | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "ClanLib is installed, but clanJPEG was not found. You probably" echo "forgot to compile clanJPEG, which is part of the ClanLib package" echo "or you need to run 'ldconfig'." echo "If you think you have everything correctly installed have a look at" echo "the file 'config.log' to see what went wrong" exit fi echo $ac_n "checking for main in -lclanPNG""... $ac_c" 1>&6 echo "configure:1433: checking for main in -lclanPNG" >&5 ac_lib_var=`echo clanPNG'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lclanPNG $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo clanPNG | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 echo "ClanLib is installed, but clanPNG was not found. You probably" echo "forgot to compile clanPNG, which is part of the ClanLib package" echo "or you need to run 'ldconfig'." echo "If you think you have everything correctly installed have a look at" echo "the file 'config.log' to see what went wrong" exit fi trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile config.h " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@CXX@%$CXX%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF am_indx=1 for am_file in config.h ; do case " $CONFIG_HEADERS " in *" $am_file "*) echo timestamp > `echo $am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "$am_indx" + 1` done exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 Node-path: trunk/prototype/configure.in Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1550 Text-content-md5: 6f37d85d8231084699d8a630ea05211b Content-length: 1560 PROPS-END AC_INIT( Advent.cc ) AM_CONFIG_HEADER( config.h ) PACKAGE=advent MAJOR_VERSION=0 MINOR_VERSION=0 PATCH_VERSION=1 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION} AC_DEFINE_UNQUOTED(MAJOR_VERSION, $MAJOR_VERSION) AC_DEFINE_UNQUOTED(MINOR_VERSION, $MINOR_VERSION) AC_DEFINE_UNQUOTED(PATCH_VERSION, $PATCH_VERSION) AC_DEFINE_UNQUOTED(VERSION_STRING, "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}") AM_INIT_AUTOMAKE( $PACKAGE, $VERSION ) AC_PROG_CC AC_PROG_CXX AC_PROG_INSTALL dnl Checking for libraries AC_CHECK_LIB(qthreads, main) AC_CHECK_LIB(guile, scm_boot_guile) AC_CHECK_LIB( clanCore, main,, [ echo "ClanLib installed, but -lclanCore not found, run 'ldconfig' and try again," echo "if that doesn't help have a look at the file config.log and look into" echo "the FAQ." exit ]) AC_CHECK_LIB( clanJPEG, main,, [ echo "ClanLib is installed, but clanJPEG was not found. You probably" echo "forgot to compile clanJPEG, which is part of the ClanLib package" echo "or you need to run 'ldconfig'." echo "If you think you have everything correctly installed have a look at" echo "the file 'config.log' to see what went wrong" exit ]) AC_CHECK_LIB( clanPNG, main,, [ echo "ClanLib is installed, but clanPNG was not found. You probably" echo "forgot to compile clanPNG, which is part of the ClanLib package" echo "or you need to run 'ldconfig'." echo "If you think you have everything correctly installed have a look at" echo "the file 'config.log' to see what went wrong" exit ]) AC_OUTPUT( Makefile ) Node-path: trunk/prototype/data Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: trunk/prototype/data/images Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: trunk/prototype/data/images/background.jpg Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 50390 Text-content-md5: aab184df9827314eac1c14de955c5ebc Content-length: 50400 PROPS-END JFIFGGCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"H!1"AQ2aq#3BRbr$CST4D%U5s&6E ? V2 'ک-fQ@W IeJ4i%橚vqNXܪ _Q@qQt:S7Qy MO+ih|P[(]8$yT&2gq\OaqeoFٹ^^q=[} ȭt%X.= e%ZV],Fh)EP{o8YcEn-:yMG'TmxRӥ_xyu +g>}vMtSp6Cւ4=5R0'ýY^־i"P6#MMncS/ Ft#kZ<<|(d#4uvmįOރF5B>."WQGm׭־)A|Z<}*7t;?U;hBSI!rllܧR&w A*h-z%-x{u?L+ViOܕ[9Ֆ>FMbD5S#9յHC82\BGnŜryǗ!]02?֛1\[Y;B zLǖ6@ɱ ()63&2<\OhZ)# k.k1Ǽ?:8+nb1#lFJE{xRH`yuP.zg:5¨ZGQ*eg ;q{;{4?oC?8d XH>]ܶTj٦.՗١Q]ƧyrQ1%n2ŐfQמ<SzGv֧5lDt2["sl\_rQ1y.=A'7:}FИOm7Y^UJ;Vd;y@&a#V|/-) q5heBD V!~uJ|DSWKg-Nj׋*&'vq7W;Mc:i{:?Y"&˰=4RtV2O ŬyT=+$779%U^ X\Iq?;"#k8bN0rvHic|uM?mrn|;zw?{ষQ#Dm[^TS֧16#Fn z<.BrYk|\-=ĀkНnlHٖmu+sq6@=?qIŵORkqK9%?@E)'<,{D |1:Em-Lz(nBk 'x&~ CjAѼyWZÀ&I>;bѤ^`:R$;iMN.|Eb\.Pʴ,GwR.n:#Jzs1D1I/+k=gaGkq< 1$Ү68.Y^V3lȪ9WCBR <d2Q",jW5" mQ+6>b?P!_q"̧L޽+uh|QӔ< fm+nBnQ@eqWZȱxBàzk IHW:flKVNZ|3_FrNBimbO($C5(QJt 5GB?,i r~\MsSܶi9a&U'6|J7 *xKH{Y>+<#P"dy(\,O= ;u-M# 6[ lkaw\*$*A@0Y3YZ<6)"sH|Ƨ% -wmrYră\'AR?Bv LR o6\dmH G(Gq5,{wy_c妚&{QMhH_·:03pY,7\GH ; MhG^rzX Q6Bk(K7RVQP /d.Қ>oujQ`Q#rhz2ʗN7Od Ja&V[K08nQq)bM\'Y-.[ >]# nfmwAO0c-o'htH*&y_=(93=#x a P=wAΆ7Pu6Ycs7f@jlq^FSjv<<f ?:Nku'u4!%IpَVV&TEn[ h+I_)שЦ(6BGj>\[|Ԧ,sL1$(@_P;h4n~u2}n i{,Ҏoт9I&\\v@yVdjɿu ];{kB 9ηU#$5K_cA[9A*=M0TxCq''vY$sMPPL gbڬ\)Sf\1Uk>`9\\QLTNҜ ν z8zph>+/as)m֖Y,t?qld r꼾jl- ]eYK=iƸ[T[$oMUL_pbkˣ@ɔ+H|C7zh2 Fv;#'+lR8TZ_^D3(.V6U`կ79J ҖJcĖYXE1G=i0!m9֚p<"*Is)iT@آ3/**9j*u"AqR[')0sK>#4z\vfVFED$ ލEUC !PA K(wXW# b X-mg4#z>UU\hN΀ 7֥QG9cCA$l\ˊ.|ۃ#<[Zz(ٮg=Wf8n~ׄy'qR1 B'JD@Pփrp GVXed'ӶZ8BҘ֓m{e{sI PYe?Lr~""5cȇP ^C7Y$%W:QW.&W.YTX0j׷`&1&MXݾ <:hSP{pRFFj16'TwQYq['ނ,D(ڊ[Z]\H-~t-ߒc@tؘ5`ukX%*^a\6g0c@v}<*rČ3Ö[]#oTT^FGMsqS4^4tA{|VRh 0>Vݣ(ʎK8Fcm-%w5X7AMyRa@:Pҗ@ETU<@+/.Nq֘lf\^auV wo5c@} w<0ݎ"rI߆ב͊kh7"pduB}꣯+qE_Fg#B0VPNjŹsL5k|H珮Gqb*Ȉd?xWOw!VklVt=Z Zْ35u7)# #ӿҁ#b^b)hե.]5и=(BùO4I/(]^bJqnAЯMffQOMH l"۽ZV(A[yV5XLv] PS40Qʃa[ހp2ʧ>y}YK9U-&[9ŘiswD~@8911jj}}Vc$rtG#uAB795+:awZ15J?9@/.EԌJQ|x[>okf|tLCI?njrd[U^OaBւR: ^PFIZ0OҲIS+UaA(Zi4[,kͱ֪n*RIyGm *u5^W.OJ.8=~VSZY#ӀCk-e|L)ete^n7ڽf vZuv&R!=J5o4nCUVM*MoÍFU* QF27EH ƨ]$ 7E qdV@ )3ï E78,)-n H(9ռ{HݷS_ G8 o'4LEr k'c vQVnuq3^A,pHE,K:gbLmʽN+Y7,jzzSAJwQ];@2Y3;*v YGc `NaEqxe(!5;m"ڠ^!ur/GR%TM(P0cC7:ͯ5 >A?hUfZ KȳP|6ā>)ukURd3TK$V6 ac -P57)`[<[3w+3nGmQ6Uv8@RwVm0_pI.Hfmc 0kBb-"K΀TV|nf(5܁B$Xܞi0nZb:Ũ e}*:pmZf8i$e*Z\u'Q/zzՌ$#J A\'hNAt^䃘n_<>t-E!.l@mؠKlhpPbT*e}/@$v?,яW9젼FbkK@Kn U[{Ψʬut(v*KKD1L<aRO- ]6( "dU&OF QG~.&ܨuqQrchGԊF>[e[r|OQL|(:`hf;B67 w4-?( яed@*μm٦}P'rxOBƵy12_ImI>(B h#K;A[ Evyq\fqNy8չ^^xx{uQţ/M$^#Ċu(~D슻*P`zvrUHAGqF_3t_J3oen~.[Vi{:g`J)goVEz#g&@{zS <ǓCs,JqOQW 4]tM|km!crSAsUӨc>$[aWsqm ]42As3کe[\:g:R{ hW=rHYrK_C%}ΧUޮOqЩ<Oցk o$4]g% ehǵĕ XɳAMmv# "Չ?Z/f\I$;BK=,~Z \ +Ŵ/H< ke K9Yhr(48_1“;<\¤D9I 1ɱ ` n8=)S7qn._Q7Ҁp߻PY--f(װ&9KD?oP:Pdo6դ*uKivuȤaˍ򍏥A"GF$WׅyTSEpѩW',FKcS;1Ȑ<=rLedl@4KA^=* {˻;Q+܊Zt'4 6H}iWYDN]Mlu\3EPoœ%f*cpf?N2 1^ST3w.N7ZA>!H5-Rq'XSCf_ TP5]}sBƩ Kq񽹐G4ܬhžPNph.`:^ۯ<3؃WD[bOL Joڃ' a/3I|/qC!4+5܍BToh`b?j3xF4Inc\bQ?XŐJȬvEjҠ=(~lnj|UHua#ޏ>adN_5:?U02SO/ [HyߢI;,l =h$<dvSGt)r34͂G;|փcpyW[ ԭ7[s0υf<^g*'yCj~1\`rhkjRIw1u$xDy}5Cm,n>T]&{>*Iv?)=e&6%De6\(zPE80Tvثv >&'>kyxyK5},s%a3i/;oֺM-b}zҷ%Q'E4 LڴDkDjr0/q!b}9ʭ"1C'bF.^ʳ9U_JFr~޵5EA}7FƫM9譮8ҡ> p%ڨ-QZm1Hrdh`(t5qDlד QPRFX628׎+2h@o-ޙ%q÷FBIAK ҙ_ޚT+OH$Lz%[K}m /KK:#ޘ?O}nG+[(dv-Jz[tX X*-q-+M30 @ރb<."c~"b?1n{:'ߥ2sz{Pa{lzψoHLZWy7!`K W~k )j~r.uC/moh-WxJ!\=c[ȳ!#yl.y^”tquWi$Phr0Iv]zKLT,vRCڝs|01.6 9G]S0$+"˻}F$:7kO՘o: ڙ1 9 y9G50,nK BJR/^3ngHQz< Rouj0|-rF:itA`hlk̻|> DgE]9-pWWim}4h,5nRB]SE`ү Nr " n!@sޤL5XwPA:ѥ1!nʘu:*ĪtٌY GJEc\lE#wPmu!ݎ7վ~vQѡNKffNHZ {WLĥcW2EOK޽dRfʁKv[V>܄!Qӭ0ZknU%3sN6a&X-/©QQbp> ܵ*$j\ܘ6RTD]z;ῗۻ49'6G'ies!,g2 p/zh4P[̽t;䱷S@-]@8$a,j T"kv;sjZ :*h9W { y$f^`bHǓ~ƑK>n[wPxZ [$GjsHaA*ݭ˄?2)0$kT{e!ӽMȖF07A26ܲN ?N3ԇ@HJodeGī]7|tGPs|*vpc z\T В&،tfss{4Vsy}LkKrFVF<GJwm0\uK'¸Y%Y`h̼yNmPIƤlm'TŜOrp|Abq$ M?8].L#ƻt4`QҎ;q|:.̌y7$nx7Q/97<,.R݁UnSC.pYcg]:4$>@swB$ tE= \?K<щglu F+pI4r/}UX,T<a>)ri̲5*22uڃb"OZLDɧ[o\xו:Pt:Sʢ |(:=er)ngmY[c)3Gbt4y7M}ƷА77PGisVB(WuJQA/x [44)-дZzV^UIXÕ֓#s\Hc"[[$םj _ZO2tw<Kc2si#bd&xу,[[?␦ڭ:!5e)yZvT@ËL]t]R9InݛnUaJ ITى8)z/[3enﮦ e:۠͏ ۋ{!ͳ})3{m=@'ĒBȃڡa sI(܊zSXч fg3moz 7(U]̬{骖ȎÿQY+O$'{oy6:;Be0v㌼myTK8/on2nq7 |+aW؎nڢV>g_!plS6.I;^:.^:)qc}jn* ܨYuF$UhINRa ˡU KxFS`jǁ^rYk5 w8grWA<^e-Q]CLx9ܞ7#w~7|qD)_3T HnԇgpV z=i\ls 1xkcNf!mjuip_llH-\R «kPSaU;zW kAKx qVYXxzA{.nt'X^KzzޘVfخ7]1jx豲~^^ _c;X&1'Q;#,cC;^63)QU{{]QVf;bBtc;XM4{Af,+{ǽHLI7U;7 ݻ^%^ƠcA;!jP?M?2r x|?8ycȽ4ZXn[i)a;\w 1IRwDzǐUF_JLH<|L:}u]ݯmԒ:uЮIkkWV,>`< .1HPK8w6ܢ^ۦ$214\h12i:oJVs0iϏk~hoMA}l d&g؂|7Avm3}6LLh%ͤ-^ d/(u'4 5Jv ~-ug3Ln !5r3u g|E%U<āOyN+ u]I/\_C Ju])f-]uQæ+Z ⥱Gp:\>1KJF֗1eI (uO!^ڠ39-WՑ c"?aF 5U8ki+}o-l{n44zBFƀoS>cptT_yzG9Ɩ"ΠiE|AAZ3l!Ty Q.Pm|hۉ)x:4!Pw*hPs d-DuSʡ4LG0Q|2 u"&J~%SHTDSqwb峒'bO2uhq,z{kV!q˻\1HB]zV3cJ#J q'x-س^>VǖJtu n&*N?'˱UAɗ / ̨5۔TG#6Oں}*Xwj\𽕔Z6t'>ުp_1|Sw!etc^#;=p6e/+u$P&qn!mw* "M7v?9)E4\p;QBN[E¶*ĶGZKػsII>Q|i?R?:/C;?1 nJ koP~ukl8vENa79Kv>A#(.2B)]]SmĢ\ +;a]҅?J,ZkqEoQF2cJErċCG9+ժpE 0GNԩsb庌h'sNRJ񊭌U^߻?߅侼nyOP;)!OAAPX11fEx+Z Dz{zWBQ }(6{s噻0z4<}MIւN.AMV}G$z%esPn.r7ӧz4$]q|=pҴR JIJcTu;XUzOPƕk@woB:޷FR0ZC @^f(W9  ?4k`sY[|",8O]^DxǬǯV4~T/3Pa9h]TTы#$U =<6\9"Dlkځ c-$:snqBM(=Ye^oP7]'`hCGk#몍;2Ju7.onJ/E 7\mEtT%jWV(TGctiqb15IxF(3>FB9tmŸ/\V1ưJ:NERPemK:^f  aU&ἡv0o-򵼟.8$_[LwnZݏ2>JS05aSw;:®[n4MW@dh)=Wh9h+wA 'G3ڢcQycNؗt6,nHd0@u.c*V% nUwOj;mld*+dK~eQMD.dc(.ʉqČBZwwx1pOJvK $E:5œqIbאliCp~*|! Ab\Yd_\M9*|4ҭ ,3"h`pM㗯Fw7hb ;kBL+cYV1gWbE)]OYrj )>LFz]h ^35&A8G)E J*ʩ8O$i*W#/)mlqRb؋A.AS9`w&Ylc ?ிAV k!U9 XiIt:tBX[sJ]H=]ih=xhEzNOSBxѝ8N^f QE6K^#|Rإl{W(9o;3NX(.R{VsRap1aNFe#(oԚ%}⃘3M éE1 QR܃&T7ҡ屙O&u`(㳷s#yPG&Gvsn[ƽyj F0>Z"'o'26VmrJM 5҃]ak ׯjAMz-Pl4"G '߭iq{[Uj[D:POkuĩ*X-AS, `> rx٤ܝtqܶ|dM1_4W wm$M;؈ظր_q&hǭ:Z2QjlnGOgWBĞGvˎRX"dyo"O=זEHQۥ1[~~V' ,>(Q_cUQqt斠p(+}҇[ Ul%>V쵌L> Ʒ@g%asoi!]ZbSNXP n>Fݹ^>nf<D:J1J H(Po \Naܽ(sqEfSG/MX5XSżIw;BDцijm$6 GgPp<0NZqq4=bcQ1r6~uevB88F@?8Zr dۭOA*[茂zlYx=OJf!k0C*ky‹C>fzkҢmE'߭KaW4zPl`[jr /dHGXjEoz^@WM ?K|~9vSAv> .|&,u\AI&kp/$~!҅kʦMe,zr3 AJ5xxFvWldƃꃙsg'4?`Gx i%(QfA!c-)MrJk+2WU2!-͢!<#׽]<'itddo ߔUxpP0q9 CFt;[*PA*o?P+fa̍sZiP;_\ƈڑٮg=TQpWA7t.!c@: Q$cm‚\MѨy[UQmZvHBa Y(սOmi,Yd*~?@ZZK)="m Fn4rŅ/19Pvzy%ݼB$S*"HY؝ Q8u$hM8f` dtBTxǿ^~k,#$wljb Ue%d !}_u@zU=@bczd?Jf/JƮI!SHUFAr<\Phzޛ1h&(mM'4TSMKǛ:4-(-CU3Nj͏ iA׽ HwAGؓ޶U)$JM]Ģ%;d`hZШ'd@ƅXʤJ !=@J+ĕTfB'|{R{c\A+liAF YF\]UE+GDP.2,0DdA+KQA ÎD[)<͎=@[l Ij`IlO['b+}Mo?$SAe0\*QR8`lR3xd-*0E-sj ]{[No2QYŜvo\1 &\-io4cn̒R{1क़;K1 yG@zcĄ͊U+Z v-]ebwҪI}(F*W+ۧ[6|m豭Q*hZFG2ՄLeyykA?K6"{cҍaNfUi8Ӊ#(*2,~z^ج dndP'ުAT [Kk q.S-e-ˡ OsM/]؊+ B6y;m~F͹~c+ӫAxݽOA@7P?J?7<7HPc-kXr@' !GZno-rךp4Pj19"+I ^?¥V+Z5y[#Q^vQ[F=h='LN+qjߌҦaXBGMic}M{Dî{cvArW,9`k ic5n|Wpjtu=Zc\+̓^cǟ<ͽT{8\RQǽP]$*r7{]q1 =OjR/%$,{RؾG_X8"Qo>FؐK(PYnnJoTcn 6iAN$qq 'L4:j|cP[`(][.b?:LORƺ %@R2^%:Psۢ:oT?u~d,ڦUr䋉džP_ңRG@oae[U#%rlm|dJuikXnđ+40b@4rRި^9bhdiv@swO1*,|y)Cխ  4uUflm\lv0hM~zl^p_d(&B%* ҃q<ԍ}I{Ŕh,l\Ij|5[ UBHb@F-#{<^$S."W^ \Z7M&㤷&;QK`4?UҨ$z֍^*s$pƭGcқ0ְ mBA{l…4{.'ނkdnkUU$YfHiCSy P)=Ϋxᑌ$ڂ #htCqidm׼* 5b@.Pmp#)}*!F@ب`Cm^B+fQ@'"W=7Gq+E;%NP\%1oFXW!DJugwvŝ,>fX1 j<<*yX1¿7ÀORφb4B x0&Bj+7RF%^ ?ALٗ]g_ۣj\B( :*v1C|$cW=dl#L!vBtیlPKm[ȌIU5]dbȣ]Se,aRD 'MzR \ǗtFF}j7Q{c3[3yvPdt;=E|EK-.qd4: DO4}@5<)rAb hz הP+Fb(s!J 感ļ]MT5ܸ ү^PWcߛBѓYh:_IIӎ0?Q]:ɍm*UnYa,Y: ='ljE;;=}h041tֲ[ڵocރ@yŏy)J.|}hk"yχH43~&]dALۃ`Um#J9b7&%)9;E&Rh {/&PBUTPii_dC>(|aZ r8c36~WP̪mV⢑kހ1ݤmj^Is~Іky{f/%ԞSY ነOJIZ)m\U|3@;8Vew@*>,h@2S0&E>M/]wX3:wdiO7e@d. G.!}ν7H`;pU7J QqbVA EL tNaM.O?:'rkOW4:$76k]sApA1=hcТe9zyeaF!+u1ws&@o; ; |xCH!0n!>Щ~u'"h1u֩Y.Y֔1ul…bbkzϰy;],5`5bc7l Ahx8Q(>P\|pS\֑\]*MI>e:ݏxg5M #P4̣pFt`lI'~׋gqӑco}/PWo:TM=2qX=J%jlrB*i=k{)ldv26i, ,ƭ*;^,fjZm1?t ׇa#p@:L68#1xjr(x$Q,¢6Tnst Vld nbk1Yj#[z3ۂ@w"M7*O/wy.ܧ$yR2a^E!W 3yOn_Nu= \NѸDآ'Gz %ʷ(['~`wڪ"VNgڪ]A7js9@XNWd7HvV*yAd;sF"~b8~GVI @7Ud"KrU4/q>~)nx1m Pe/r7aҗEKj If!bbMR8TB*d8dAT;RXSBy^kl }ą F+. I6Ni3~uTH}h|wr5^(_xAh XnYWjHSEqE Ы}J^mFԢ±l{n$k҃aF@#ֺD .]"0[r<Ǡi3!@|h bX]lHח׋5q5P|FI3\GmvYP;\\NIY?Zsq!؈[͊{[eMND.%|zcbfNk}klL5-$Ԗ (^Cam%6ϙTrۚ[~g;`VB9U|.$jN;{J0J@Lv/1X|; О ܒOS@R( Bx`.!u߰5nnUUo~Jl-e䣙c;ުíte }EIna F_B;#E{Ƿ)X>kmkkp P]: Q^?Bg{_z !EBcԖBt#`-N CF\{PbƧ2}W8 )Ճ[HK.([Vk@Iںi$$?d}|cE4M7,or/-X=NP|cdS[4%":+抃 n%I jJKi$c~r X2e0ܺP󢑕 IT IdNmC] Yl|(K3s9|4_^m,0)GJ 7orF+/wGiA$ZZrG7@[M4&KY V*'vSڭPhՊtzWmӵi!ޔz傎j E#'aǻx4pp٠bđF^]+}d9zy\/xV,4a,f}l֯\.#\tÜKqki"Ec$̵[n$xʀlmQ'Ⴏ"bU?e\ >huC,5t>,EaSҹ$o\dҜVF `8eG^^`٧ؼr΅|"J MM\72A7bt)^yH51ڙ?3@eyzWV`hPnHJ@m2,Ό ު^,(G#RX;72H "T2j=M'rL#yO3ij)sQ'D=kCWNb k On:'-3;9'~ۭ<\tccK,Wy& 똂[ˌ"hOV$We 4@s4M+ v A$?1/po P#2}֯q˿Q^pj¯_ArD\O@R 8#ld|^G̣un[&>5n$;b!ORk5qN"2 ߹ק-V/YeeÒ7(lx VQK9 骳4v?@bKt ɐ>Q!^I7H<_k&2x6F,=MeOjŭq`yyUUI#뢝MLa2Ss >v+bsͳkpxr42i2AzЗCƁLl0ֶi{h͘>QM `JWcK4I?=<@ȠHkWMʩ!ߥHعUYه,t)RK(aF 'h(N!Z~nF'Jzѻ^4ǭr ) *[ZWCe*)'T+'ޛ5XG*E,S҂[m NBIX/ t +ѕX_㤅$:l"[\M'kEe<*]:z~c̑_0$זIĐCָ|U7@#~ݠttڃit´ۘ+9dnzCڂ]&ǘk_Q1u{9 zW۠#@fV@~t?,1}5S/o${62Z"{3SH9K"@bndOwڣ,SkktiS/OuTD}ݷx"Cށn Ao<|Fs~6 ]w' '"E;D[@ ހs+,DcZ,^=@z5a'X.[Ly5ۏ4E7'j{'ۦV2\Lhߥj"=,fxu_ dCm8߮RZkBn$dAІ0$ȱ(  ]!E= 7[.>.$ ;T쯽S9m" D>.R7B-})8G)賁w!UIձPs~^IFmcO%jG}X2$ZpůH'.md)|k㸟bQŒJNro¦!LxEWF u| Cv.~gIJkXn ݬr0mxށ$pRI:}h칻~6LuV]u[;1?􊫕7`:HNɠx.'Gm59k@ZǕE7CZ2@P*P/Iq$H-c]k?d rҎ^mPL'^~҅0W Y:{t_kI5OVSc*#S\ Yw5Yb+h>+cp@to>2B?El?olx>h;8Vl۹f5?MЅc1~ qp6+`{B^3u߭Rw, v=G03jHtev{d' AH9ODG.cbs$;MUŵ7}_b8,71%RV1ml[EYA<U[]ؔ9^S ">2^3 rDZKiouS55ށ]eu]c,6ҹ]p:1x>sֹXpӆNۿ^*Pa"F}*cn⛯K8JH4ŵU'4Gefz1 j2Fv ;kuTVA[(#@F [+\jѻ50"Kr~yf:P>6(~#,d4LfE -H_#X7>UE#aK6mcX{;iŽ>Z&[3pOŸy FѦ{X _z?dH@\&gRf\ X,_i02قPyujV@e"dd k쓼-f5wbIm6&eaAenx:2q;J H,%%ʀ+abGր؉% z}jBʝzgx(]xR#ˏ th?a/!SGJ|VQp_OysPiֺ>N2C$q\3r9r\==)ݠ{$$bʽ6j |DF7^%̋n;52³qER;HAD_w~T72:703(mqRks0[ڄ>,aAs|BOʱKU;Y1 ]b+s *9׽3sQJwcLgE^6=R7TUY+>vTSBqtYxDXk7 Is(,uT{qznZdt#GғFXV?D<ݍnmrҲhڦ{ɅMcx؎:&A~S3`)kt C֖,|golyoYkUm1clXX`Ʃq5 b |V1Xx_ 2;6Rpo"XiK | ] XoXeoݨf/"1:%0nm}*<.(Ӑ$5S0uZr)w+"D?0=d0ZaF+whRK<[LoVacnEPl.&VV`_z]/)ufV.6 b^9 !pyOZ/ṁ&(P@tʢ4 Qn%`ikx )˸opi<$T]3T+Aͦl&R{U5v nHжO`i+>ԧĘ9b2OEZa-x2j;zׇ_%<$1?UcV7׭*NUp+< U{}myD(jx"hBísgN9+&xsj۸[]Pr^2񣵺UCx=ɌӵT[{}}vdM?9KսX4FKfz~/lYSOzt׿<|\܉GZqcL]μZ>#Bj=wRh>ԭ V5xIRo /Ø?5J߇-̷]aI$U\2(^VbI-|i9 ֍_K<)S/,KT>J,`sqhyJ/tmd#PcRŁrII ׇ.#e 3 zՓ%խC+ʗADeăJ99-~V;#֎.NY죉NŘPOiu-]]rFyuV7b&xguS[Iyc9 O@zU%/ҟx9ff'R!9 VB v :v٠<0.]i}6WJSgfQR`c&Ҁc::ʀxt'V q-Dez;f`w=EU\QJ!uFBW$J:vx o+pQe#[,̇A<\ȭPk*ǣs cHR$V=jc$@!Xʟr\AH:|d-ºNf=c+fT,чJ̗WfE(H֐hP*?Z@GPI=8ݸb\C8 :R+{~K H@W@{Pr 她XlB Wt,uC`i)% UrҷШ.ռ ҈Kf`} @nҢF1.ζkg#ަ0РSX5PbhOf![]`9e^q\Ng_b$=P}+mmg"P{UAW_֑WMvD FK4:yRuUۺQK/Os˼4 5ƻl<Inh87i{`iKYLz]s?~4 w69+_ y_檋99'H.;\q"9$ !cڢnde">z q8 W"źbPoF5 > 71U|efM{ eocyVx~V->/‡r%z#RO=ͯVU(:W[i7a_Jws6JLO)=(F;Ld? 9X$70$ǣHt|@/%1t5Bd7_SA6mZiqrvy.d}M6uj1mshIShz]Nh1O$_ؼm$RIJ!zy.I>\]Bz/֬D fL^nϒd$^()¹ċ n/r̍3pV("^4qP~a-/OJVp\#r=鿇8d-r]%)$Lwí xf7VSڦͽ`nI+W0lxIkwC2Y̶RFר#t/,]')=x[r.#xg 4J݁خgˈ V#MP֊5|ݨMwC Egҁ[1RfoaOmA8{"6 MSuȉ!ul{L|+ Ƶwrى\l FHGň++KkNB׭K|ZP89^nleHm*,*6 mo.I.=jl=K*Ɇ~*$E]K #\:<5Yi'.$JIF:%ڪ'~m$O31#߭92&$veodZ&Mj,lAW/E,(ֆK0󕵄OֽX<p~Y-I_9 }EU4NKR^w!>Nw:uUNFV'_Zs*oCCrZ!mH\ 6ɓÀaV: +iF䶿'xV&9mȅufcQKbE)!}Q|kw?F8%Gn]P=(HrR1ې.2? Ts/u:CfV]ts6ꐾ9YX|)qq'hr#hFƳG{G r/4rk}^rՔݿRƒN *Oj~ Jcn_8[ .MWPͶ?nىVc.k@x‚M=4+}_M K+@5q r(5U$)|9&U?Z}\x unSPݡ%um2Ykwⵑ):|֕#^vb=:ևqT ![Ǎց'O,K #҅Csom]~IuDv 5ރմ_cڦ[+}yoOΣ^Ĝ#@\YڏgdHE0й@3E0I1\s(5_霻Q-⌑jG |Xݘ1BA70;@ߎkԟ\`zgyvɛ+"-Cr.:/.lgAgRun(IWcFZJkUnaCL텏T}y&'UV rMA-o[b {&Jq勓~Ƃ3rWʹŤ>rEȻl3~^X/0gsD#|l#cmStqoJ9$t_C@nBB$w6T׻P]thwaVyn҂v9['FK鏿%G{ᛛG50pEqi;Y479ީ-e)%+r+> eә|I]S, ܃pY(ܫ!om_g[u{PiaA-n>&'!]X#J rHoH`ua,-+"6<%.Tdn}9kTa_MÄ7*. x- XOQI;DA' gd<35~_']u8#c4QU吒VFHoP;O3fB:~H70O?jhBF?{xؙK{@ò% fV<Ƨq5R 6ۤ{f s"zZ\O~qtL/cv@ٮ_6W1'J' :[}dKZ9X- @G^fǃ"H rs#ž:+[9Y+h,ꇽFu.^qK6h~K|Mx"È |ucM[+~'-MowЊ&y @4M)y 1D< g]meo{˗~f(l;IVҬ[OWv.wj;pU>'YsZ¬;0QFqvUՉ=F.GNG^_zR .#-A]cTg`K;Z(2lIs[6x yu~ s7&䑀X\َ/tI) #,dl}i–vg_ޘ{hCA NnUh XIXfs%.$RN"qm-$5=}M¬.!eo Ct-} 7Fv"pvF<6Z/-R e^s T߃B#$ރF9y 9oȼGPMLsΞfl[X\jT;8F;VVPe.G0q֘~)䮭2vY~w@"I8ϔyp0:ŕ_t,Vlt xkGKa`MQNiS)rDͽ)eZBI<@\Z ʰ=5Uht;LhP17uqzU5Yyݎ4)bK.@8 *坚8]usg( O[_FE=۴~n+q? 3 ; Dޟ_D-2r co0/B†d:c{}e%xH"a@{"sEwN]ES>=4'OJX&WuC󣹌zVWg$'7#TG-N,'PUܩ' E#:UnˎK+oo〗^}ǥpYmJipp+~d9۫C@YYYA2e23GԃMl@R}yo#@ N_MP2rY/甏Yx j.\4wyu(+*^)}[Eg-!cUe>Cnq r[t H A,Vx#w? hpެ/PnZ[H\֬f0|۩#G;N$dM*<(?MS.[{(^{i}d5T].Ѓ ʎ 㸉d)(3Uk(<{YYAeeeP! r9`:Zc5Go|xCMxf Gn-b4˜\y{ۈ-k(E!V$)>MsWP4ka*v\I Z8f@z}jի{3h)zX"]Z4ܷ JEg'l\o_֊Y| *bքU[H#PW戎U#چ3] & N;V,%۱5"\ʴIU@b7GQK u_m]c2#G^ hT_4ҽi8hzqhIo+nmР!U) ã4=ktXnւY7; {ɍeu588({6W^@+=fxQ~-yZ$ 1p1;Um}P I4aAhGSPxkBkٴڀ~j/YuQiVH% 6V |Y Aĝm9# =y'Oҥn.$"v=*ݵm!ePW#_J0:YZ~a?!ؿڂ $(M"%S9T8Z9?QF;G6t#2sTҡ;QQlֽ1V+Qڸ-}SݿVTrUF- GS:йBzOw4#hF *R6h2u{Pzi%7TʼnBPڀV.Aƃ{n, Vⴧ4qEs<ɞu}(xO2C4[ [,+w?8ṧ]DLtAslB<=u$P(&V\ c-(?d0ɮsw1Jg E60`AslӦ%7!yѩd;a[t6 zz׶i*&nR4h9T#c1`]c#4zc9{xJ}i+S{rœzF MI=}hr?7ĸwyb~$ZO 43xR-b_deh%"]H͎HGMq:, Ori3068;K&1]T*]փrrέ#ڊGv-N(-/%,;Q;,7X4RhL6<ΫMen})woGT.'0Oή:P7yV?gKڒn_\o@v8IqyE9[ը?f nj @٥ڰL<)>ɑBk\YM266fyd?j( 7r vR9st mfq/%Q2ݷL_7:lM,Č}uLv KuiLl;-=oVglb]}ȩ^vnZ=,$?J<1ʤv$OڀW鍔u/kTXōVEz~T)\aDI7͎uXG~UdžkxJ۸q{J[vWo³"Cw}}-('Ze-hS-+czV5<ċ<r޻bPRA)wk?i~1XMg7h ]~!+dՍ6{S#oXPE8ʂqjvN>̆eog&Sn{|9zd.R>H.Wj 3=/^0Y/n" ( qes"pχI^xIv:{P^1}U$9ujPܪ LcSӐHƺAmӏ\B/h[ _FDalܒiJt .?;`"(ƺP(i$QҎ`6`\7ܖ譶bzJ9k E ̱')W\Jhf8,\-tѷ+<0hQk Ue qSZVVVPx{uu/IU׸$1fϯ(3ETՔ?ρ"VPW+_x+߁"mHEʧA^.mY9@:jaAϯxm^M"8V7AnC\; `$7_WqM})JkFCx_w@,&ۨSP\ڭh>~dAf9fWA[SOQ fBsqPƀnI;Txҏ(A9?*ׄ843/V1[Đ5ͺ*>ROނb#md5]A;T tPiwW"@hW-<]|J,E1qI,GR(P>Aj BU0 i#6y" F= d/ElML2Gcp)+ȃ~л/˨yp@\Pte` }u]J+++(2dt6͑۠%K@ HQL"$( ! hr3Ӝ'P!?+gfzڴ63J+ҘWPuҴ[ 8Sڄ^vrț21Tkxn K38^u]ރ/7m=hdv\w?X٥nttn.ycKHƹ^]ծqN֤Q,1(4?*i0w8 spQf%Cl-_問Dqo]'"Y\o/׭D>4zG~3wrb 5]j1좹'Ie=sc$Γ2H423'MKWD,.,1 pDց-c,V (Dd mFʡ'ުd/e^bHZ ,rd}( Addx"0oti2+"k[]xA\z] ڪ۝.VVVPeeeeVVVPeeeeW:{AeyYAݺ[F ,'{Aߊ:}hca{CL`aAҕ0$ćj;xzhzPo$vB>|m_j%L40-h.tXzE1+W^x=گ[*HbA(vUFdKHPkBm5IP XzչzsQ[fW"6@ܕ]Qrҽ9{ N?{rcSc2ŏJgs1T(*~6ꪗc IG"tV7#A@0qh!=)+8(CȶTrq@rXBZ_B`^rK)D7[zoh@ס_;hzsu vM$Jn]D_z$ @/8p :*z[eo5ߧ}#wh5)FH"1A(z 0>/89nԹy G@G2Zu&wV>yX@}(nE$71 ;<#P#4zҲ7K3)̉)-5rr3Fʹm0NU` c|\R 4!ֺ|\uij]ttCaZ+[獊jO# DN}0p[̀:& z{R7%}i_q[OqbLt4̷LF YQؐmՋ<5Gh]) - nXG4po ^Ay(} <0KJoz>'/u81'5OR$ B瑴6hdn-r\?#>cG dq;[u:5θӆo4\Kn;ǧ\KYDΩzeLoF4{?n]u1yEhҌ..}+iBxK;.L 7yAsn-ofHEjGN`( 2Ut^a@7/pY`#~W%;"ЉDʊnᬆEVKAn}JeeEk $DZ.l⅖;#F6̓ BAkZN eb  =Es)* *7,"r{j;{YYAYYYAYYYAFVA%&ؐ$LyԊ&,k֭g>[_ݏqB0 18}z3&R7@D{حϊ,%IXȼ;m2y$dV4"ҡGx'>cF/@&Y5̇~\/xT4 v#HOkorZ.PIפJP T{ R w"[[mb~HE{Q<RkGu߫(@ي1 +@}BY +AV uWA nA LG7نk2%S3p:?1+9v$Pnl4a}ͳP۫E;@;VoZXrQkJWIĕ7H, ֹdnd܋fmro`@x90]zaUEV,? MY(res$Af|[s;RI2Kfڙ04y0KYIQ@%:˒/@~.W) 6u8zh_8~kC6!@dQ݅F1 sێ1-UF?ct[ǐY]/9L~d5BdeWud4IHB?1nE1:-D{OKv{=TUdi5cޭ~;΃1lqaB1O ozQ'/ּbbh-G4vVRpLhvޞ}c8U[[e}j[-$-@¢BP5B]82q|H~Ƅ]| Uhgq]=/Xm`|K`L)nMY.Rcq#ؚC1R(N75采}(.^uDw:Rq~Abȫ5dË>$P0!x+7z &֊ֳ~oi%FBJ '<O51IvxƺY.OG=n8? \܌ Sb8r AuRJAYMse %G"L'sA5\fuI3jQi)> ϠPV8.?oYl ~m/ tWT76[Yltyl;ώUۄu#~Up}C}A>/ .`X5C J$5Ãj+m4]kďt M{jIv0P#Wl« /QAVխ-M)4'",GN۝u;mP%%0XX܎Yi|P;i2w#|UқaQ=Mi9 @]Qp<zVck}hw4}آ1^$*ҵXTNAA#b?*8Xel#זCT EOԋ a˪1VZd]j,*:PLqiڵ6 j/P~1j ~^sO]-5҂\0 ~&> uW9Pu5%Qk^ 6E[[oV\~HST[=|-do!Աڅ=N3(Ԍy;UYeuG/FTOd#j@>^6)Th YYA]obh0mAڃ+++++(2ebY\t']Eq*AHj;qKȲe-,q1*~J)+22.w=eUm(f܉<4x}r{8EdA: Mu}6N_a0Ypcf2蜝OP[arI! vyQޖ7|D'^䡝 Rj l9WW@6$htXD:z?51X}P xͿ{Mo{uo6/!'ӭR4(=\;4CT`v!ۦ}aA[yo!qHNVA?T-Z$/[Q{HZ{14d> .&ƵFd+574~Pz}(%%뿵F~U4Po5\t]r̄~T3)rӅcЩS |ғQ -AFQ"+ mJw`msW ${P]RyeT'_Vv>~x C{U62i} 9'r֦w͓˶y?ނGe?l.ӥdv={ю]XT5UG}7.4(? Node-path: trunk/prototype/data/images/background_cmap.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2338 Text-content-md5: c50ac1126d22c5f5a0191122e0ebe3dc Content-length: 2348 PROPS-END PNG  IHDR,gAMA aPLTE  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~bKGDH pHYs  @AtIME /qIDATx;dU0@GTtwխ^i}ZEIW[H313$?c ($*9@?a aHTz7OpiS;}TK~ ZtbJitbJ<(yҩQ&=SHzHd|K',cRVw?R)sKX7d\|]%Ϯ]Wi\tӓJr9MO9۞P˒n{BJ.KNK{;0o*;'J{C}Rt[ú/*' ZJ%1c7uS0rPwCޟ.6YCTZ P-]MO1B]e&]K%kVۋIFE "ep{0Cco[>̐F? $}TƕVlCЋ?,Y5dIg~KE~1uzQ$)j-/%(^ObuٌtJ_:qIϡ]:pK[:oDt<-F騹Iz}Is,sa4IΘ;1^:a`xY =jgruuE<!RDooo #T0 !x,//%WRl aBloX =AXufydY˗/ߏoa<`0p8p8t{hhD(hFXD6E$mx]ed-]b1pIdoo/ IRS9V I&&&l]h(:G|.ëWѣ~?pzzjfEd2: $ ߿G$4L< po߾ N5R)k~ZӘ0==*EQT,Z>fC__}ρkrcxJvgϞ)cGGGkBDQۥ&DQNZ,3VFGGf@?nYAeb ޞ>5!"|CA,brr@$y9yW8|>]X.Ifff "#">}8&1HIk*Oܜ>dR!a^]HWuMjxs޽SfY>|0_6ALфB!|# ugggM:yaSe###*/twwW8kkk<ӊvŸ? JA-Ǐ- DpbQpyK>b(s BR8&Uqj qe /N[vm- RHD677ɋ/`'8Evo޼i8;L+~;c&&&緛BuԺشu$!㸾e -H˗/8??W7cQRׯ_A@<"qyyö?ЉpŪ5㰿wvv:z{{߿ckk ϟ?7$V+p-%a+* D²$hf›}ܢZ|4c cw7VGث;UP Os.BҺ,HAD~Qz2_NִPi>~Q%\cAzZL [ߺ%t%V\-ybxДm`3%ED,R } ϔ-RXn^4^SȞ{  u)^3S kAb[ٵxiiUe%SMvt t15nd瞬*kA}]ׁ6 FhU 'pUOyZw-^T  ONiq6DRxCqᚙZZ I'J}4I4!v#Cr-lʢ_48H9>M"’tI3Luf{YH$bg1NJ͕Љ+k;KҖX$ycQWuKtI EGEճ3HPSx1_{gRbܬ0EpcNͨN{YWngS>k5+i,;W#:W2q 0| h)uW¹}D1 9(JvR|O2=M@\rJ2u)V) 4K vRُ=1.%]Tf2Dx+¤$\F%IENDB` Node-path: trunk/prototype/data/images/coin.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2537 Text-content-md5: 1419b72c7faf7a167d34689f4bc2b484 Content-length: 2547 PROPS-END PNG  IHDRgAMA aPLTEĐttt000ppp```ࠠlll___NNN999MMMԎll$$$ddd\\\///TTT@@@PPP888DDDxxx|||444<<< 䨨hhh""",,,܄ ***&&&KKK666LLL---===sss tqponmlkj~}|{zyxwvusr(((̑HHHmmXXXmmllllllkkWWW kkCSnitRNS@fbKGDH pHYs  d_tIME &IDATx{F+ȎcZJč`2MIVt=Hi_W$e{?zo:g"*A)ϛϕʕ\,[i0 >,{fjNqZ@гn~?Kh91jJR13#7jιTc0\ip!~V \7-@/nܸ ;~Q i[RJt2ڬF?{ZR`,%;~ өܔֳpuA~DkzVKHpRthN\Ϣ2C]ws}?p`Y'b˦"g9ÄAR*[@td+2xJky\?Zy?x-+{pN w*V5n#H o vr `1PI31Opb=tsu5 %|d ǁ~h`!-+MruegmS2]C^RV+.&O0٘t4;Ex2u8@KkNRJv:^&qjupA>XxbiQɘp.|R=#h]DWgL͐]oni }X*#xqoz>O>/ט=qkD%|"{ӗoN뭞WYa/^uOIT iD!z#TҖE$4,-h7ujJ؛0:'v#d=qړnhn](r@ZT=x$uR>;Ut 7DDu#:fd onܘ|1 /gHsʕdr6`[d8odmFh+ymm0\ HBvk  څ$]akft[h~ p+5ңH)^H7o`b.I+|i+CB-/NVWw8C<\`uU@f@fA ^4J|F E@pJ.߬X6Kf( l tԁXe Kk"Z`8=v1Y@[(:nw`N.`O1tt_6RVU kگ:`{mō ,(C5An^Cuжڤg؞@`O4weAVIZٹ id"#`w0vUS6z]w2|@f~[V\~ԗЃk ;hxgFKoib(êw1C_7]ImHvW2mudS@yZe0Ł2x\9VqpHNH9G|O_\IENDB` Node-path: trunk/prototype/data/images/door_closed.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2790 Text-content-md5: 8b4d5bc01bb71ea38a5d2ccd26f8969c Content-length: 2800 PROPS-END PNG  IHDRX:wnWgAMA aPLTE  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~]}bKGDH oFFsuG pHYs  ~tIME 9 YtGIDATx՘OO|j#5iXKL+)K *A !M mN x/}f88&LNHޏGX=y?FF8LzBA {6 3pE~sx>_өժ:rBT:ǣ~PF1 h5555\\ |.wzHX,|R 㛛 TxhhqeĊS(drss]]CJܿ?:ZS'z+W^EDi]Y۷l751LfwXR?f?zT_?4rpX,ssFH"( \6U#(XT*X A0p2˗WV셅gceekaydGG~mv{8|g6+vu1.W:I$--Uvj x䤹xÒI e2*"P(QOh.BA\?[[[0a4˅7qOfYzS\͛BD"P> yV.w:n&')1.$Rm32yh(a ٬\^_d2@6{qM2i6K*"Mf'w#0,O&^YHBөфBL l6/q{{ Rt.71`|y$ T D޽ҫVk &\.x<*.9ӗ.xaxr}ۍFjtbF'~FѧO[Z `Dnw{sҥyDQAz'Oޑ29r1|b@(흚 ,XaJ_s뫪HH5N!x:,U2XׯV8Jo޴Zu:+^o0xrV+JJGYl>;srMNU>1A‚r~&sq͢Z-KbryǓ͆ g+<8@RZD(D@ŧMMd{>N' $lpVQZ1>hF.W$ɔJ=zJtO D9}~m U2Gss~$|-5Re gg_~fO<;۝rh($V@P 돏 y@BT J>SOBL`|LEd'Ӊ7XZlᕕᥥ`E=Shi`QARø\*|bDϑ~?wB|6HVfs2^S0gii}}kku?֔J?>ư@Yy''s@?W?Ǐ'LLw:@ODjB8OO747d Jmkkoc0nݺ}DZZ ғ@v XOpG_͛DpBhZ-dB}BD r{OF;;,/|P_}A"˗~{@OOWWGG{{[>3sVowxmIENDB` Node-path: trunk/prototype/data/images/door_opened.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 6014 Text-content-md5: 3178ec3331ed9cb6f1cbfdb2df0d49ff Content-length: 6024 PROPS-END PNG  IHDRX: 2gAMA abKGD oFFsuG pHYs  ~tIME 5-b&IDATxrՅq'ԭ%w;rUǯwxA RI*[V@Gە EkΑ?AQ;|,뺮~e۶m,nzXeUUUU5M4GU_J~vMǺy]]EQGfi1 ò,˲lzi$I??puuuuuuo۶mYy{ Gu˲vr̲*6M3ϣшgOi0 4{?@a>_\\|着2iҺ#ock&u}4 ú5Mc-ڲ$I~gam?==χÁ4 -fcYVǣш(Bpj([!@ضzEQ4MYyKL_m6Mc۶BӴxv`02ZUU' xkIE1 t:Nq0 4L&Tf).a]k...nnnd=D]ׇp8iiQEQS&yw#0$Iʲ<vw{4M4<۶Y6PE6Kb+ ,}ݧzT=#.ǣ8Fn2I8β N@(4f0 0v}۶̲814ɴ@Sx|>'{eYYjypfEi u]p8 zGm[۶GQYlCQyWU^RǏժ( ˲q~o(eYR0Ͽ˲ ]׷m( 88l6Ana$p۶fلanȷmq|yr<#1n嗻pG83L}4A] (nWeYapniƺ7oް,qb4M2YӴ^8<G)yMD) |Ȁo0O?eYeY&"qlC]yqrT% $I^纮i@^~_.m[}X4秮kuy_43 &fyzz4-IHz<MӜL&(8 PUHl&I~%RH=0n"I UUhEQrX,|7VA0M<؎ %MSɞf3’=m[Uժ#\<ǏiZtIbR #w>ci* EP24d2*I,ymQ)r8ʲ$#l6vayn6(|Β`>(P*H H:kF \'뺺(h%yo6(=[Bjf3tjrZN@~Ņq8q *' _iyPTi,\(>Iq%}Y,5( ~8{8....//WCeYL4\۲,x<&;E a*s@|9)#@xlc$͆@?D54 z1c}rGUU$muвbqOQ6Dm{7~ףitrF#̴d=u]e)(0 Z@z6HijGT6@۶f!jfm۠U8iK]޾}+ina`}E,KR_04?h2,P XS i @%.p ]eˌY%_.ܤiy|nFEo߾eSjЍz=DE#e:J{<0TU}_C1Ф!(/)+&|fDHʻ4A0xr]bvquyyt\&~[ 0+x(4Z lE] 0p8hn$Yi^A'}EUU4$0Ʋ,n{:z۶1݇mۖeY IqES,iҐY @'ɄHKZm|P tEV)!z{>BYylb8MS\F \FhϧRȎl6߽{We~ [1 sQA@A 6+RxKzc=??vjEs\.]8꺎essCA\~ SO"LLm[i#i۶ ݻwAPR")r a&gp!# *aT~}߿@=ĵeYY]XJpSeeٷ~+mѩj#HE!{;NŧOX4 :)hAr0 aa1^g΂ 4b2oHt@I|lm>Xʌvjs(...NUvKqL&_}aҰ:,Uzkt{{{{{+^FwX{SWUM3i8rvn̈=)U>쭰:+3p;R*e1Jg¾:B/K5ȫj[Φ8Ԑ ly LRɘ.%O*y`eYv5R}8yTJGaRMIbc6TlW5 8txi&_ps=,l~eYa)BEqO("{Ca<گ 7U燑boݠ܈~eDq"*x (WC] $&飄e{Iat%_Sl ԻD“.qnR Keǘm7EΟKhgC>VLa3Y<WgJ\z`Y9S84=6ᷜk&Y%ҍ1Ф8Br:wn+\ bvn5? eXduaYFhۖe ;?tu.p 8_2n??h&$yޜ m]%+_#uscN:ή p''^Vǡ3.lM|Wn+*+Οt+9d2.5 .^b̲,',,˲ӻ_C!rASq\=EG wmi14EQ( #28a3ZbeA]f(: Gx\'r,O8B(1 za4%Eke)qb煳@9g FE߿YSE2<xyy!lYeÇ8j&w-y0y(ST>/!@ܛ~+"CA + J@758>$!غAm' |b7?PȋMЩ bw$TYB蚲,I_Vԍ.U(r.-*u\֨g9Ϋ^S8E.t;F?>>>>>rT&qx8u5 RNȩi9}%O9]!%iZA Եm+Wڶe7 Kbbn۫7oް p=o? U&tz%MlۖK57_IENDB` Node-path: trunk/prototype/data/images/font.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 6750 Text-content-md5: de7305e0bff6532e017ac89ddf562860 Content-length: 6760 PROPS-END PNG  IHDRg .PgAMA abKGD pHYs  ~tIME ,GdIDATx};v#9{еƽ ɴgIoO^ly$Zb˽o@7 QY$$? stڒ?<(U>>sn}}I}gKOH#7}d;FwU/K{8QKi:\e>TmK^}~.cWWH#})X9$Wdp:^vB[RN.z}] Wv}7ɖ5CX(aaEҟ5rCdket:=6ާ7SZ?/o-v-_"7hg::}lm;LB.~>uDX.Sl>y}uÃy0b782+/~-@iۮ ٮr |,nbiܓYH)P\p5dد {AbT~X) 0ѧgZ̠:-i0ʹE5B]w0>f,~'אi, ƃ$KC\J=~ɦ8u(K^泆LmW5}uu4}G>){0{`]0Zgkt-n.n|e,D x)v*@n>X`2k x 5nX|xcYax\<?Vɮ1lsxhtr- C_En| :fZ//x4'!ps|2}T{/SΗZk M2>έ6 wS|D/.ӂ3<рS sKZ j@cGgn~?kaY:g_y'^íe5vip#@a4ɿ\Yhʻyr9#\B'p}-͙`~e.*| 3;%Yr<ّ->y]}N0/~ǎG*sԷSzO~_==္8m0v\yݞPTFK<`O~O~vԳ|$?!a1^u <ܞ܆s'٘+c Kp|lM?7][RŶB,Uja b }yRb&=xut _:76bW<`אgC:x ,|hgvx-O~hK^Oxܙ`'X /Vk٫S~sC?36'?ܚw6_C; my0ls&>Ty¿P})xtj !l!l6a[X?`Ȏd_k'D\Z{-pr:9 Z7raˑ/-r :-cnr=?DkF͂r.2v<߿YVFNYMv,sUgpVz'mx³XjW&5b{hk%6?ʁiOO]_/a `k4₿?-v-v[3N/rcx$t5XcW.E< Ƿ܉Хa^=pE|p|4x2&&鸃ӻ~l7?̼/lo *Hyt]$KA'$NM{o_Rvr1ܕxĮkw~+ZWuLb9 $)i>"W.N;/Lr_ߴwUzĄ>ٖ(ĿV>_rpUD#У "l6~)qcag)v%n>}q~Lcpi 3 !3VMؼ{t&vM)c毜'^7hl) 9fjupi?۱j>͌9){_ ݉H_Yx~[<}b[S9%}̞R$K3F@l9YN Gcmye~$M6bAֆ6XK%g}WZm!ǘk?ذbk"=\5>63ע}pǾ+$߄$Z/OHW}6BxFwm v Q`h͸9\qd3s57aWR5翃~%r@tw_|ë?:1OS[!O䑡yY&&rz%u[2DSK=^#ѧn K4:ՕL6hg5^n>^tK,J}orWao!G.\߼&MxW\9V #Iiut{>qqk-n>P8x1?oW4>gv{&uZL?1=) 7>A68c ]M#j.t|JӁٸOps*B}̰dz0vwy~'PL_'JǍa+bʊӽa#S>jV-Nj=^qm(̞rtbaTB]MG7%u<.7kT6to)SG|O`=&y93 [P n #G'}-,gqﳜ";8ߔ 7VUٝQ#~cX_.gѹfW7g >־lEʠ sK;AHrwʼOV>O_v,kþ/a|H ߏNĸ6x1.ϻx7&~N?qp80cg_%Y-K򍾜myؙ =5Ɛ?^ÏlܓR1nXÅ%Fr{.M o_:^3im&.:Lx2TgMqayk^Ll"l$"iX ?qI`8H5ۥ>Nؑ *CÈJW97hްmomRGtZC{4#p7le ~>n56n%|[aL+1S^;P8^/7?f^/iDx6l#)DYx?mؤI.a*IjϦo|֢f$=k9azׂiz1s_)'á1/!֢7F=6Yƒ+uZcp?+^dBdZWXs(VqźPӯB?rC|>f/+(Y4eo=j֫-~n9%DMls _p \4'>] rY$TO}rivz}dKƽvXO5dY& v*Qw}țuYg>ko#w5=u#{P 1o}C/W ߆ϴ?>] BaЗ5շ_[?=9طtߓO Q=7c6Gl<Jnys!ǥ۴ֱޕ1A S}[ɹQQ]2{Xb]Pl׎1{I#.g󓀿ib{ӏYK) Kd Vݻ84|3}218n pԂ"ӵcfM&a:'I>7oL(8v+a唢Wz9HiYuvM:vAi\%?zEoM#jwt6}K~KrGJm,-I>5%->fwRl$tbFv8WD.~G-gu_w Hq1B9R =uGM_GXgߜrcy%r)KlO$qq~)c|Li7YkYvs>jX=1׆5F0.y/9)!`j,3 vc^Y7W^yۖ}Ģ1ܞG?vm6~ jg(05/d[rzr0dc@'K9K Ehı3Ɲɲ)WBWyR\?m>f/@ZaD:-*㸑55ɕQUb3}b'K# zQSz1U-~-QxA5Zl296>ۀg{^c[ -鶩G͜F}}h XHؚ~0WWfQ[ ҭ] k3^Kq=ߜZZyive4'TO &HNߜ n=h:nX9n-:؜NJ$Go ߀rESRyuk߶- ڱLLMZI_.C<0h3 u%}K\A%ڽ&aT}t__s}>6//yA/>zIוǾRl/a'`-¼ls: @܏l5?E/5'7>eC? ~./Gg{KW)el\+7FzKQ>n:Y/%NsKr9 6FƆ\O,:4adZbb6᫾%n ?knĝ #Ϲ0yL]4ɗ_5}Ԝ8֎c`>6Q$uʹ},Ϳt m_S{I|un!c5C{r2w-;[E|+/N*6kr,cb-(Dkㆥ?PF:< ?yXVg>ӟ{bek|(\Ż4^!Ծ.y-X6Zkq5qxY7l1hHt[uk!0+=٨_c?elt=>Dz)AC-\J55纁eiK|{+oa K{Xpnթaso%IW!UaznK}T͙ᛂ_o#lX]asyChFi$]jaG#^ z$vG~͸>GnfXodރ&H#4H#4H#N78Hԏ?^x"<7g>?Iz4H#4H#4H!(=>( x'a<Ѹ9FiFiFiOAңLM>ⱍp{@4ts{Щh>ZFiFiFiċZ}DjLH˚IENDB` Node-path: trunk/prototype/data/images/lmogli_back.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2111 Text-content-md5: f38bc9bd172d5a4a08416e6bd11f5e4b Content-length: 2121 PROPS-END PNG  IHDRVpgAMA aPLTE333 &f&DDDTTTvvv[[[bbbrrrlll7w7>}>yyyJJJ}}}jjjCCCNNN;;;@@@4t4eeeiii\\\|||**;;QQQHHHfffPPP777RRRVVVXXX___;{;""cT.tRNS@fbKGDH pHYs  ~tIME  Ҿ$IDATx휋v8 1@7RhIg3ݝmٱ"fNgHȲf6\lدBl ,X0ZTSty@agk kLPr5QvӠ ɣQci О2Tns c:sP2j4r "9vU!O3hr3hrLz@˄=7W5~ˡW5X :o\ϗ;Y5!BNr`Ělx ;s"CXKBXW[zG\MHUvP1ПWw2F0ueM,Ns,hMU'J%j{g_[D.0پ*d&XoaNȄjhv R KD|vr,%C/R|7sbԧTC);RՄԐc;(>f>'m oGJ6ơ-E qTqPM uͅ>k4M+P%)sJ\qlRMFʚebD^CHtܲ[+F^M[B8?C qkvH_T!pt }K]T/Ԁ <(\(ZUxMC(TmL AW|%\CXzF_+  uFZfAlZI2 xg9zw|f1[LFunޕVwVB+BHZ  ::S.}]_Mjbz?" z:W;ѡfS{4P?J0Oue@гW?AU94j&,1UaQ/A^DE`}T*5~NN * TaKVQC2[щYD5F[w{5 _:{"\9{;aƥ!ا2o+&yОZcCx vȞ+{ lQᎤTk7Kc"xPvc 9Ɓ>{U@Վ@*aY¦&#$2QȞqa~e 2~j=*o8i:#AsOHmQ4Ci4z7)>ʻ(ҧiszbTG-JѴ*'3V`["ݳ34.Gŵ AW>+avxG=s,~8HՒw.S_c}@_;%~_RWn3Ko3ShYJ5ٿB>2.rUbfF'@(gOSm 2PIENDB` Node-path: trunk/prototype/data/images/lmogli_front.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1026 Text-content-md5: c32ec8f88775776d5a4bcd3526275e6d Content-length: 1036 PROPS-END PNG  IHDRV{_gAMA aPLTE333vvvCCCiiiZItRNS@fbKGDH pHYs  @AtIME  $YIDATxѣ0 ݂Zp ++pj19<`Hkp@"$PŐnVEM(:6W (q)pfPYl[N5A`&p9v&empML\!*@ ,9Қ@q|,2\&.X# ċ:7Wx@E\YU.p;]<-Ŷ܌[W6MZr=Ti3Mf],p@[1O# Ǎ*-Pɂ I{&LN^0;|:ò ڼ!K3F $$$t6RטxMLG:xu>㒬H{ @I@o~Mq8iwȪ O+Jp僮2qh@R/a@oѮƴ>8ܔ@maUE; Y &xcWVSc x9Pknt&&Ч;.)uMMYH. P9Ċt7{3i7Laƪ TOVVhRK5p@E`K?Ј5sSv5[Nc+ЁC p|4yT\[_rN@ ]q|1Ժ0 l6$E'm rX=)hQ)F$GQDK#qhl̮LDzLQG:M,v1 Rz7D޺ g8??߿÷oߊJ'uNѶ(SѲNǢ!q E%#A,=u{ ^&xu52E-d?dH6^Ϭ_k,6fd,èdI\u=^0ENgT\++>1j`}8E], P0dU^\(%r,bQIsxQXrԐ][7ᘒNu&s,8k !LI'Xy,8 ...޾xx yjl6e(u,{*s2G̢~I d]'˺X=9h]f5:Zj}mm?%XŲhѱ_(Zt.5dVtjGem ò.eOEUd B?~vl"0 %(Z)<SqJ u&eZ)1Au۽k4rׇ)<SqJ u&HDҠb:ZTǵTVT#Դ--] SN'eLâ Z) ȭM^)j)ɊZPӶzoL8pVVPRK 6%:D"F߇ϴ5(R]ݸ/l'HwݞL8~qbh![o" E_wN:hp܌;I{%Gٖv2m6xµ[H6S7~#IiةQVQP&/ŧeQGu/4k[dOŲkkZusuI!o MYpo5.E͗p(nVYGUZt 'S?.7>}#q6cl* _fw,%W7-\\N(Օʔ'5 \ݒi0@B;̟>}]=)X,&[jS࿨{RnisqqͤfrvҶ5q ެe<@.4"k LB8pwwFK _tL|(>uۚpxL7= pߓTYkӤr_:%ec;D!bQ\?hckϰZގu4P:%4e4#f[eecn4M* d9C3VNuM@kUzZeĺHtmA٬hU5=,d2a_-tO:5V{hYÑ:A,r֚V@Vq w^ҙa{F3nZ39TBU cU ߗV>){,QYOl~>o,w*4nY͍e%bOrQ q#c+TreM ʬz;Fk_~5wm9Z"Vll Vt/Aa߿\ \nVbmRYՓ$KfYo-Em6ݮVjXXMjA98TZ#֣`K1j?*iVN%) >]lB޺=r*՛ZǷVg?]M<~^,Dė~* _qY)=}-\J3/#|ڶGJ꧟''¿O9?$z?zCsn2 [}K WLނfUT4C?ܽqGn ;q< xYJP徯HE4V S|R*P{Zh132~cfº3bcH|>ZkVnv.H7f)[G> !کN5g1T)@Jecֶ:5uH|:Qڶ%|k97ssw}||:k\lH7EnY(ʎ2矦~?nBٞ$.DԘejmhpDCFg'xzz:ׯoܗeCڧvȫ@i2[=A(j26S,rLf83 w26^^^`߿Ш̜ /ncs-:z IZCZzZi}Vcpg&wvh ]h95:{]^Ī**ZC 7󈋶V}Y*=5*(!@ԁgc2XW=\3s:! ɔ{MeE{T @Gh.Kup+!'3G!A!I$5>-i9_!gʢ. kG ɔ{M'+}_[%E[)|UƝ*%1@zKwdT?vԺHHԝsf|{]k!VVIL!huݲi%$r<]%T?1Rv?1]rvK5sw%hJ笧T>twN>]Bi\&_cSN;Lt֨e8]ݱ[*CLV$>{\?5jNnw?S&ZJHK$ [ 7heLGi͙%GF%֬ɹ{NМYCBg*Y*K:YHHy4 p%uܪK͘w>n򱤓tG^em:%eܪ]; I=,)U :IB,UoX-s*96:q4̆O*nH읜-gFOr:W7;\Y`zŪ eN%Nuqfq^dPt=AH#<Ш^ :||Ѫ.$m7|]]]%/ԕӁJe ]j():5ĝAeLJ(6q Ნ`ߵ[* IEsBzko$fNѾk7nK6*Uۂ~B3v-&7KvB֪mA71)δؤ64E~)hRZhoGeha.:-.6W))Uڎ!,LѪÜ 5H-mnMi;ij}X"sZm,7BU6 7#aQfkLjj~ a4dܵgi12 Ԗu @q[1Xyn),a^}m]8,erE?XZ.Y/m L)Y.z/#%fvOS'66x;?m9=YGK#mv q~:D x L`imvMM:ehĐno2);sQS.k3e擖g jdu]ՐK⚴"92Gm+nlڛrI]vU 5`M?EMjUzMZM>Գ% *2ݹ,PCqڃ0vwݲ?G>S(-R3b(ݗܐPVTzZY6Eh zC?@K3g$enc4<'׹}>K U$?.sxj-AKF4flfΔRkP?%)Ϙ^&Yj >LP|UzoYXXXXX&1RJIENDB` Node-path: trunk/prototype/data/images/lmogli_right.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2829 Text-content-md5: 405782a13a79358cd1e961a05292da2b Content-length: 2839 PROPS-END PNG  IHDRVTgAMA a9PLTE333JJJbbbyyyRRREEENNNXXXiii@@@\\\fffjjjWWWqqq$tRNS@fbKGDH pHYs  d_tIME  Mr =IDATx]b( &u6{c4#>RX$ɝN׿kkȗ嶃!y<|0oCy9ʿx+>;m\˻>g ćgǯky׷`9-c2yA8`cNn|xp?|f|vn yٽ2x<|Ǹp;m#vsƅ+Gqswxٿw/UCiXkG b#/n Sb1sZgv+@]aӚҿ@]trzcݨ\i ɖ?@ډsV>9AtbB*$ah}Ϟ4|j;-oW1uOs Ydruhxmϟ=o$c! ]y_v!HXw|ھ^ JEkb̡ Iw[Q&)1ݧ[*Z gD))\w0 gF -"O|~|y:+dzs4Dts.G=f1:(*mCK^>g٧M sܐ[8<@|*tP %uN]g[~S<1M31:(8:Y(SV Qua">g3SθmT/J3vP GTI9>nfN)([A9 B#4BhW V"d~Nl_ mBhHjx~ ah5Sִ^j-]%9ϐ识7DW&"sQ4Oqƫ~kF/;b2\pCEQz TE1Og+#ng ٕNKݰR?Q5|63B,Ba-^09hRfFPP w۔'&d01s&|eOchSkJEܷ?szy򾐆=/gAMA aPLTE  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~bKGDH pHYs  d_tIME  96`YIDATxYс )a:3 8s=%"v&g;`lHL8B r9X dX Pb Zmj2҂XM 2)8}t\` !#'Y@15(iՒipv⌻܎6<gֈ\|e;XDm1p!c /Sǟql^)@khs$N']DgdqT >>[[[mmm~~~SSSdddJJJ %%%ſIIIĴbbb???###!!!222{{{---(((777 vvvooolllzzzsss===qqqAAA___cccyyy񈈈iiieeejjjVVVrrrGGG```UUUKKKl qtRNS@fbKGDH pHYs  #utIME ;gS VIDATxmXE*(E 3Qk '9 iiȠR*˦VLb&V% -ͷssumӓs10x CC(wVo7"ķE4,lǎ_$ʪ#ݹi׮')nn"<|Æ>zyEDPotϞ?$:}͚_'X2 `0'{Y,6{߾> @<=ccEF8~ڵ >vH ֭31IJ[#G`0*un;I ѣ))oBsj*;fc;RtiiǏs<^z3xx,vժ?' P@ 8qdFT.&gJe0J6wv۹z841N F"A"<(.@KJ@ -}H*BE"ZPT**͍J" *3"/߿LNëBCp%!p||j77>?+Knja0{zz{R?///mmE,۵YBahJCBP4X(; ~RUАdӧ|>ՒH4ZN34>$(*|}_XOzz[LF67 ̥HѠiiAABX)TWڦ64 GEUVge-T04pDt`@麻tryF07?8߿?<@,+{BbTomJZmn%Y,N$ӃǏ>.7vZ8ǎ5rVSdR0ѡH$ VW_*x^A-riB!E/^)T*Fŋ =}}iiHdQQj*5J*j5`p8==CC]]!!湹CCh4Ӂ&S` qz\]ч$%Ξ<9;;=HHC$h,tJ ڼst\ddH$66w>maQ]K) 33+92n|\&?JdvuPჂX6K$RAfg~ұc11W#'DbDla -ꂂt ]]0ehhaqL*UyUҿm 8oIENDB` Node-path: trunk/prototype/data/images/takeme.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1823 Text-content-md5: 0f4876ee684ad52d4743e08ee2ee3ccb Content-length: 1833 PROPS-END PNG  IHDR($Q}rLRa~~vM^sv{KT*EP H$,\.뺸K`uu 666jj5.\KxxPuE!ȻOVcvv41ML&8yrxxH^ bTl6vq]mGh]u]r*+Su0DvpH>vR)Μ9C>'i6mBB84I2bdRJL4#q jF#Vrv]&Ad~*(ia6eaYX,F<g2ytEQB033D"q"J+WH @UUfggT*\ZZ:V3-ˢP(h4h4xwLZIF7cXH$aT*._뺌F# 0;;KT޽{X,@>Ƕm8z="R b0:r2BtZ:fYqpp@a<cYH2/^zR(8{,nn˗/_ؐO }Y\\SڒDd N(TU}2*gϞennEQL&i,˒)ux<`0`48NrL>'a&h.K,mc6iH$J%L(q2^^GZZxG^u]> UUB.`. Lb|EQ !l6B,,,yv^G%Rx!!HO~q98;;+ÿ*#9)a(Sd&eQ*( a۶Ի0 t:t]!Wm'ZbHXd4GzDBOKu0d<8iRVO& ]FXDAammVrWNDt:Y⦵ll6q]xd2A!ܹsy)S@v3aH$xO O6 cQ8p8H{~wwBW5tN˗/g<^.woӑBljbj57ӒG&|۷?3ɍ7B۶byo{p(b>>TTTRRRttt]]]cccooojjjǪHHHiiigggUUUeeeJJJlllkkkhhhbbbdddۺՃOOO{{{Ҳppp[[[rrryyywwwnnnzzz|||VVVWWWfffvvvYYYXXX```˿ZZZ^^^aaaܐȅxxx~~~qqq‡}}}===uuu\\\???___CCC黻DDD跷BBBGGG@@@III<<<;;;AAA999666777888mmm555sss444:::---***111///...)))(((000333''',,,222_4tRNS@fbKGDH pHYs  #utIME r IDATx[w+TT FXFF{L^KڴM;93ϝxMձyPRs''gg"q8|lIH$ӹH@{Gr3ݽ[Pb E]  KK;:{:;""nݪ?==>hih lo %^9a\bJLF$ 2Y_@ ãw`)0yyͥ<\N F0JUW18Axxn.74ayyVxFQQ@GZ-.z`$' *ȈZMUVvtL]]fsrrę"#? >@yX7:J_ϑ 2D}`tTh\\ܒL&?3ݺ566>^^xI1+F;9pnnSS~~drwwƙ맧?@ /zȆqT]dVWtH$'z{ H33cgOdJf0.z`ϫδWYu"!Pdg75=yB<}tbZf_Xj%) n˝7o65w @R\ϑ 2auyL&n2H󩩹>>|~[݅AA<K.z`Xf$yz>Mii E0.윝5!!ë[Zڵ5/SS<~"3]J/zMWRL=$()) --ݾ]SS_ݝ| ,^@"++CBi!//@jm][P_PQS`s%1mGvv(Ojk --w/:;*jqhL jj {͛ \y $X/_ CC>>99>> ӧYYAA}PPCCSպsѫ0. V:kdV+` 꼼W}}90p~WTχ}EuE0X]"4T(0.N, ߼aJ`I(v^vˍ9?9IL ''?NK陞V( d285R9:^4U88C T*r::扉"/aHKkk HK˗6 ut}/5zz",FKLa:}YiiHdo$@^T*Y,,8((:6?Bp/^64`0ht_URíHgpҁ>׷$p4? JK3.}E0D%vpj]_ XBBBB\\FG[[Ԡ _۷}}]\7 Á7.@޶a1LB"Y]h;;].W X]5$/@' jeekgz𠬬<6 秧/.;;s86@hx< 2)a__~qQQccEţGyz33-.CeMyݻbݻϟ׷̀MUW!$Dy&;;C5R1[Z M>|qNSSkk͍_ᴴZ,V LmCc0P(_vt89KK))R>>JFOMͭ[kkPD+/ hVV0<~tԆ`H$ss J%V1}ap`fT|fLLt3Hϴ85uL R(|}dxo a0fh6V^~>49A֒ɷoaB80W99\Z:8JmT^^z}Rmp`0 >NW׎?6߾-(~ v,>?+ '`3Q[Y d/Mi@r&NRC5cb_J<ܤR5rh{fr;Z[a}C,~dbbnnf~Da\&*&snnbbppo OL<:7_~ySX.,hՑCCNKKԙI$)MOóOODD-/9iu|"T.}|dDEi(o4NOXomn++hZ᜜,/{yi42gTOW׽{7oQ(p aWW۝m CUU{{L]vJ#1*L^\bs|<1ꚜL --..QQeeCW rWVvvT*0d6-;;moxaACZZܶE" kg>''/[?"D֙`XX,))ZLM{/ZL&82nøHLJe :]=>^]5H->5=ؘHJZY7ZU5;ONBykXZc#grq))$vvUmˆqFG`OHRގ>HHFF=grp(.^BZH$ɤ՚LrlL _};9{zdPwAA6%\hB\^\, ᄆXSS==qqׯeeCOϚADJGܙ '4LMNjwwWɤ۷n bbNOC/,0ΓdBD`I&So4uw sgbc[[F WWjnN98@ 0к:bb *xx@&ږԺ: mo_]Hp8ƕ@]]h&$"*U ?/.6 P^HTzr8,lpN/+Mmzz~^&c2CB='f Z,BS{;fWVwvnlxx,,Ï%,LʂCw@%%MLLeeO8:0:d'.D"SYmQQSSc#wrdBB.,qgІWi4*DB:DFzyxymn.,xO CM>lno7oBB$Re28 Ӫ1ڞ91c3MOCUH~ܜZYjoM`ɉ |s Ʒr¥%ϷaT  w㓓ΩǏ_((} ,yYYyy{`_h  XU% &@\S67BC]]5.]_]a\S\X`~L;8DDhﶵj23KQ΀Exyyc#/O1kow8@loMh }2oo 9;c0 猈+ՅBtCq1卍[[ 0'O>浵3qׯhL$Rl-<|mb40>@'1㺺:=!DNhpofsl,>~l&{ )S19l>:\]KJ꒓;:RS**>S+9Y,.+霜Hk0.xh4*4TBKK]嵸qOG=SP0>G(b0șhp8ryX@m (鎎2Y hoG"OOCBJK[[(jgw?$lvu!bb||bc{z>*e>d~'~-K$"RVKryWxEn݂@yMH8WL?9t J0vt$%i`d͍OI33kk⚚76h4'_T18緹 nQóNO'%q8{{]FYv GGCC1)rLo޽[QejR(WVFF\I&rs Һ: ͍vv޽stlob8:ZP<<3A"xz&'//://"訸xpP(_ $HdH$*Ŏ))?YvO!JvN30.F_4"==x4 z{r緸bc˧L&kޯbU )4T$o}ϔaSSEBt/_g3+TnoC.ҔGGHqT CCp &?( *kj<}1{xD"BI.((X[bdTT@mNN ,voh$RJJWIddNNdgݸ10EaavvNYwq`qvj'& +Ƿnnt mk̜OJX˽p%0޼Re,NH8:2NNz{y>+*7㓒@0H$ 1UZA @0ի"3s`@$JIaxx~ΔӅ<98cc));0 jǸ\<}!@R)o0,,LN"WSCCJ/\[s):چOA`G7EkjIrxPݾ.lf3OONFF`HRpϞeg}IxxCG`8I&ml3攵tv޹ {z*5V+hέ[n6wtX/7]\NNl.hgV@F #mntmh~uQ{{ *LrHj}y~L T=}3? ~K|a0PN۾o򆆍~}嶶ՊǣNtw9TTj6LёP66O{z~+ *D d047xQQ㵵_}UT `${p`08éTtJDtPɟۛ|&%5"÷-&f|߿$!g6˄qx0EvϣR95ї_]]nn ܾ?Bpϟ ..3$gMh(B!⢧h_qm-$U(G."jCCKK G~ Fu5 .nog0(GGB!QHY6== b4PTVKK++?`X,WK$GFȗ/e2:‡Kaavgb[[;;3'&dIɤRMKf?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); takeme = data/images/takeme.png (type=surface, x=0, y=0, width=40, height=36); chest_closed = data/images/chest_closed.png (type=surface, x=0, y=0, width=92, height=64); chest_opened = data/images/chest_opened.png (type=surface, x=0, y=0, width=92, height=64); door_opened = data/images/door_opened.png (type=surface, x=0, y=0, width=88, height=58); door_closed = data/images/door_closed.png (type=surface, x=0, y=0, width=88, height=58); // EOF // Node-path: trunk/prototype/guile Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: trunk/prototype/guile/adventure.scm Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 4536 Text-content-md5: 43994d69c6f6fe789c5db2881fd377a7 Content-length: 4572 K 14 svn:executable V 1 * PROPS-END #!/usr/bin/guile \ --debug -s !# (use-modules (ice-9 getopt-long) (ice-9 string-fun) (ice-9 syncase) (oop goops)) (define *current-scenario* '()) (define (scenario:set scenario) (set! *current-scenario* scenario)) (define (scenario:remove-obj obj) (set! *current-scenario* (filter (lambda (x) (not (equal? obj x))) *current-scenario*))) (define (scenario:add-obj obj) (set! *current-scenario* (cons obj *current-scenario*))) (define-class () (adv:bind #:accessor adv:bind #:init-value #t #:init-keyword #:adv:bind)) (define-method name ((obj )) "") ;;(define (printf fmt . lst) ;; (display (format #f fmt lst))) (define (get-obj nme) (or (get-obj-helper nme *current-scenario*) (get-obj-helper nme *inventory*))) (define (get-obj-helper nme objs) (cond ((null? objs) #f) (else (let ((obj-name (name (car objs)))) (cond ((string=? nme obj-name) (car objs)) (else (get-obj-helper nme (cdr objs)))))))) (define (read-command) (print "Advent> ") (read-line)) (define (advent:help-command args) (cond ((equal? (length args) 1) (cond ((string=? (car args) "look") (println "look object - and here what you see.")) (else (println "Can't help you with " (car args))))) (else (println "Commands: help, look, walk, pickup, open, close")) )) (define (advent:tokenize command-line) (cond ((eof-object? command-line) command-line) (else (filter (lambda (x) (not (or (string=? x "") (string=? x "at") (string=? x "to") (string=? x "with") (string=? x "a") (string=? x "the")))) (separate-fields-discarding-char #\space command-line list))))) ;; Verbs (define (advent:look args) ;; (println "LookAt: " args) (cond ((equal? (length args) 1) ;; (println "Object is a: " (get-obj (car args))) (look (get-obj (car args)))) (else (println "Where should I look at?")))) (define (advent:pickup args) (for-each (lambda (x) (pickup (get-obj x))) args)) (define (advent:walk args) (cond ((equal? (length args) 1) (walk (get-obj (car args)))) (else (println "Don't know where to walk.")))) (define (advent:use args) (cond ((equal? (length args) 1) (use (get-obj (car args)))) ((equal? (length args) 2) (use (get-obj (car args)) (get-obj (cadr args)))) (else (println "Don't know what you mean")))) (define (advent:open args) (cond ((equal? (length args) 1) (gopen (get-obj (car args)))) (else (println "Don't know what you mean.")) )) (define-method walk ((obj )) (println "Don't know what you mean. So I am still here.")) (define-method walk ((obj )) (println "I am already there.")) (define-method gopen ((obj )) (println "Don't know what you mean.")) (define-method gopen ((obj )) (println "I can't open this ")); (name obj))) (define-method gclose ((obj )) (println "Don't know what you mean.")) (define-method gclose ((obj )) (println "I can't close this " (name obj))) (define *inventory* '()) (define-method add-inventory ((obj )) (cond ((not (inventory-has obj)) (set! *inventory* (cons obj *inventory*)) (println "You picked up a " (name obj))) (else (println "You already have this " (name obj))))) (define-method inventory-has ((obj )) (member obj *inventory*)) (define (advent:close args) (cond ((equal? (length args) 1) (gclose (get-obj (car args)))) (else (println "Don't know what you mean." args)) )) (define (advent:eval command-line) (let ((token (advent:tokenize command-line))) (cond ((eof-object? command-line) (println) (exit 0)) ((null? token) '()) (else (let ((command (car token)) (args (cdr token))) (cond ((string=? command "quit") (println "Bye, bye") (exit 0)) ((string=? command "help") (advent:help-command args)) ((string=? command "look") (advent:look args)) ((string=? command "walk") (advent:walk args)) ((string=? command "pickup") (advent:pickup args)) ((string=? command "use") (advent:use args)) ((string=? command "open") (advent:open args)) ((string=? command "inventory") (println "Invectory: ") (println *inventory*)) (else (println "- unknown command: " command)))))))) (load "helper.scm") (load "objects.scm") (println "Adventure V0.0") ;; EOF ;; Node-path: trunk/prototype/guile/dialog.scm Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 1407 Text-content-md5: 6e0e3e2c1f73d7da455954b35cc29870 Content-length: 1443 K 14 svn:executable V 1 * PROPS-END #!/usr/bin/guile \ --debug -e main -s !# (use-modules (ice-9 getopt-long) (ice-9 string-fun) (ice-9 syncase) (oop goops)) (define-class () (dialog #:init-value '() #:accessor dialog #:init-keyword #:dialog) (register #:init-value '() #:accessor register #:init-keyword #:register) (func #:init-value (lambda () (println "Func unset")) #:accessor func #:init-keyword #:func)) (define-method select-dialog ((obj )) ((func obj))) (define-method show-dialog ((obj )) (for-each println (dialog obj))) ;; (println "show-dialog--")) (define *general-topic* (make #:dialog (list "Hallo, wie gehts?" "Wie ist das Wetter heute?" "Einen schoenen Tag noch, ich habe wichtigeres zu tun.") #:func (lambda () (println "Bla selected")))) (define-class () (text #:init-value "[unset]" #:accessor text #:init-keyword #:text) (func #:init-value (lambda () (println "[unset]")) #:accessor func #:init-keyword #:func)) (define *current-topic* *general-topic*) (define (main args) (load "helper.scm") (println "Dialog V0.0") (let loop ((a 5)) (show-dialog *current-topic*) (select-dialog *current-topic*) )) ;;;;;;;;;;;;;;;;;;;;;;; ;; Topic ;; | ;; +-Sentence ;; | +-Topic ;; +-Sentence ;; | +-Topic ;; | +-Sentence ;; | +-Sentence ;; +-Sentence ;;;;;;;;;;;;;;;;;;;;;; ;; EOF ;; Node-path: trunk/prototype/guile/dialog2.scm Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 2846 Text-content-md5: 818d16d1ede2e3ee7f21653a359ce559 Content-length: 2882 K 14 svn:executable V 1 * PROPS-END #!/usr/bin/guile \ --debug -e main -s !# (use-modules (ice-9 getopt-long) (ice-9 string-fun) (ice-9 syncase) (oop goops)) (define-class () (sentences #:accessor sentences #:init-keyword #:sentences #:init-value '())) (define-class () (text #:accessor text #:init-keyword #:text #:init-value "[unset]") (answer-func #:accessor answer #:init-keyword #:answer #:init-value "[unset]") (follow-func #:accessor follow-func #:init-keyword #:follow-func #:init-value #f) (follow-topic #:accessor follow-topic #:init-keyword #:follow-topic #:init-value #f)) (define gesundheit-dialog (make #:sentences (list (make #:text "Habe gehoert du hast dir das bein gebrochen." #:answer-func (lambda () (println "Yepp, ist aber wieder verheilt.")) #:follow-topic 'dialog) (make #:text "Habe gehoert du hast einen unfall mit dem Schlitten gehabt." #:answer "Hab mir dabei das Bein gebrochen." #:follow-topic 'dialog)))) (define wetter-dialog (make #:sentences (list (make #:text "Gestern hasts geregnet." #:answer "Jo, da waren ziemlich grosse Pfuetzen." #:follow-topic 'dialog) (make #:text "Wird wohl morgen wieder die Sonne scheinen?" #:answer "Ich glaub kaum, solch ein Glueck hat man nicht jeden Tag." #:follow-topic 'dialog)))) (define dialog (make #:sentences (list (make #:text "Hi, wie gehts?" #:answer "So weit ganz gut." #:follow-topic 'gesundheit-dialog) (make #:text "Wie ist das Wetter." #:answer "Die Sonne scheint." #:follow-topic 'wetter-dialog) (make #:text "Gibt nichts mehr zu sagen, tschuess." #:answer "Ok, bye." #:follow-func (lambda () (exit 0))) ))) (define-method show-sentence ((obj )) (println (text obj)) ) (define-method show-topic ((topic )) (nfor-each (lambda (num el) (print num ": ") (show-sentence el)) (sentences topic))) (define-method eval-topic ((topic ) (selection )) (let ((sent (list-ref (sentences topic) selection))) (println "< " (text sent)) (println "> " (answer sent)) (if (follow-func sent) ((follow-func sent))) ;; (println "Next Topic: " (eval (follow-topic sent))) (if (follow-topic sent) (show-dialog (eval (follow-topic sent))) (exit 0)) )) (define-method show-dialog ((topic )) (show-topic topic) (print "Question: ") (let ((selection (1- (read)))) (eval-topic topic selection) )) (define (main args) (load "helper.scm") (println "Dialog V0.0") (show-dialog dialog)) ;; EOF ;; Node-path: trunk/prototype/guile/helper.scm Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 922 Text-content-md5: 626775ac6cae3a4d85df2af56c5b9205 Content-length: 932 PROPS-END (define (filter pred? objects) (let loop ((objs objects) (result '())) (cond ((null? objs) (reverse! result)) ((pred? (car objs)) (loop (cdr objs) (cons (car objs) result))) (else (loop (cdr objs) result))))) (define (grep rx strings) (let ((r (make-regexp rx))) (filter (lambda (x) (regexp-exec r x)) strings))) (define (print . str) (for-each (lambda (x) (display x)) str) (force-output) ) (define (println-sep . str) (for-each (lambda (x) (display "\"") (display x) (display "\"")) str) (newline)) (define (println . str) (apply print str) (newline)) (define (seq start end) (if (<= start end) (cons start (seq (1+ start) end)) '())) (define (nfor-each func lst) (define (nfor-each-helper num func lst) (cond ((not (null? lst)) (func num (car lst)) (nfor-each-helper (1+ num) func (cdr lst))))) (nfor-each-helper 1 func lst)) Node-path: trunk/prototype/guile/objects.scm Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 7183 Text-content-md5: 5b6dc70ec4f5118c89766da4e9dfa6d0 Content-length: 7193 PROPS-END (define-class ()) (define-method name ((obj )) "takeme") (define-method use ((obj )) (println "Got takeme")) ;; Defining objects (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class () (broken #:init-value #f #:accessor broken)) (define-class () (closed #:init-value #t #:accessor closed)) (define-class () (state #:init-value 'off #:accessor state) (broken #:init-value #f #:accessor broken)) (define-class () (state #:init-value 'closed #:accessor state)) (define-class ()) (define-class () (closed #:init-value #t #:accessor closed)) (define-method name ((obj )) "chest") (define-method gopen ((obj )) (println "name: " (name obj)) (println "gopen1: " obj) (println "gopen2: " (adv:bind obj)) (cond ((closed obj) (advent:set-surface (adv:bind obj) "chest_opened") (set! (closed obj) #f) (println "Open chest")) (else (advent:set-surface (adv:bind obj) "chest_closed") (println "Closed chest") (set! (closed obj) #t)) )) (define-method name ((obj )) "tree") (define-method name ((obj )) "forest") (define-method name ((obj )) "house") (define-method name ((obj )) "Indy") (define-method name ((obj )) "whip") (define-method name ((obj )) "box") (define-method name ((obj )) "switch") (define-method name ((obj )) "book") (define-method name ((obj )) "window") (define-method name ((obj )) "door") ;; Around (define-class () (light #:init-value #f #:accessor light)) (define-method name ((obj )) "around") (define-method name ((obj )) "around") (define-method look ((obj )) (println "A large mamut tree, wow!")) (define-method look ((obj )) (if (broken obj) (println "You see a broken window, looks like you broke it.") (println "A beatifull large window"))) (define-method look ((obj )) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (define-method look ((obj )) (cond ((light obj) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (else (println "You can't see anything, its dark.")))) (define-method use ((obj )) (println "Unknown object")) (define-method look ((obj )) (println "You read a book full of wisdom.")) (define-method gclose ((obj )) (println "You close the book.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "Don't now how to use this unknown thing with a whip")) (define-method use ((obj1 ) (obj2 )) (cond ((equal? (state obj2) 'closed) (set! (state obj2) 'opened) (println "You slap the box and it openes.")) (else (println "You don't need to slap the box, its already opened.")))) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the switch... and it breaks...") (set! (broken obj2) #t)) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the window and it cracks! Woops...") (set! (broken obj2) #t)) (define-method use ((obj )) (if (broken obj) (println "The switch is broken, you can not use it.") (cond ((equal? (state obj) 'off) (println "You press the switch and the light goes on.") (set! (state obj) 'on) (set! (light (get-obj "around")) #t)) (else (println "You press the switch again and the light goes off.") (set! (state obj) 'off) (set! (light (get-obj "around")) #f) )))) (define-method look ((obj )) (if (broken obj) (println "Looks like the switch is broken and unusable") (cond ((equal? (state obj) 'off) (println "The switch is on state `off'")) (else (println "The switch is on state `on'"))))) (define-method use ((obj )) (println "Don't know what I should do with " (name obj))) (define-method use ((obj1 ) (obj2 )) (println "Don't know how to combine " (name obj1) " and " (name obj2) ".")) (define-method look ((obj )) (println "Don't know what you mean")) (define-method look ((obj )) (println "You see a " (name obj) ", nothing special.")) (define-method look ((house )) (println "You see a cool house.")) (define-method look ((whip )) (println "This is indys cool whip")) (define-method look ((box )) (cond ((equal? 'closed (state box)) (println "The box is closed.")) (else (println "The box is open.")) )) (define-method gopen ((box )) (if ((equal? (state box) 'closed)) (println "You can't openen the box, its looked.") (println "Its already opened."))) (define-method pickup ((obj )) (println "Don't know what you mean")) (define-method pickup ((obj )) (println "Don't know how to pickup this " (name obj))) (define-method pickup ((box )) (println "This box is to heavy to carry it around.")) (define-method pickup ((book )) (scenario:remove-obj book) (add-inventory book)) (define-method pickup ((whip )) (scenario:remove-obj whip) (add-inventory whip)) (define-method walk ((forest )) (println "You walk int the forest.") (scenario:set *forest*) ) (define-method walk ((house )) (println "You walk into the house.") (scenario:set *in-house*)) (define-method gopen ((obj )) (cond ((closed obj) (advent:set-surface (adv:bind obj) "door_opened") (set! (closed obj) #f)) (else (advent:set-surface (adv:bind obj) "door_closed") (set! (closed obj) #t)))) ;;(define-method walk ((obj )) ;; (println "You walk out of the door, you are outsite again.") ;; (scenario:set *before-house*)) (define-method use ((obj )) (println "You use your whip and slap yourself, stupid!")) (define *before-house* (list (make ) (make ) (make ) (make ) (make ) (make ) (make ) (make ) )) (define *in-house* (list (make ) (make ) (make ) )) (define *forest* (list (make )) ) (define *gateway* (list (make ) ; (make #:adv:bind (advent:makeobj "takeme2" "takeme" 320 100 150)) (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)) )) (scenario:set *gateway*) ;; EOF ;; Node-path: trunk/prototype/guile/room.scm Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 665 Text-content-md5: 410ef14cf9ee8ad0930fdb7690757505 Content-length: 675 PROPS-END ;; All classes need to be singletone (scene 'house (background "test.png") (colmap "test_col.png") (has (item 'indy 'controlable (image "indy.png") (item 'whip "whip.png")) (item 'chair (image "chair.png"))) (event ((collision 'indy 'chair) (locate 'indy 'outsite)) ((use 'indy 'chair) (locate 'indy (pos 'chair))))) (scene 'outsite (background "outsite.png") (colmap "outsite_col.png") (item 'indy) (event ((collision 'indy 'hole) (locate 'indy 'house)) )) (object (container) (contains 'treasure) (name ("Open chest")) Node-path: trunk/prototype/guile/singleton.scm Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 299 Text-content-md5: fff2a7410a5f53f268055499e0b362aa Content-length: 309 PROPS-END (use-modules (ice-9 syncase) (oop goops)) (define-syntax define-singleton (syntax-rules () ((_ obj objclass super) (define-class objclass super) (define obj (make objclass)) ))) (define-class ()) (define-singleton box ()) ;; EOF ;; Node-path: trunk/prototype/install-sh Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 5598 Text-content-md5: 5afe8eb5573965dfb58378e4e46f3813 Content-length: 5634 K 14 svn:executable V 1 * PROPS-END #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 Node-path: trunk/prototype/missing Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 6283 Text-content-md5: 393d298125f8e03c13364afe447b308d Content-length: 6319 K 14 svn:executable V 1 * PROPS-END #! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 Node-path: trunk/prototype/mkinstalldirs Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 725 Text-content-md5: b4ef161959c2b46fc65943f062ca46d4 Content-length: 761 K 14 svn:executable V 1 * PROPS-END #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2000/12/28 20:00:48 grumbel Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here Node-path: trunk/prototype/stamp-h.in Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 10 Text-content-md5: 1ded054093de910d9786c62bc4fe8cc6 Content-length: 20 PROPS-END timestamp Revision-number: 2 Prop-content-length: 143 Content-length: 143 K 7 svn:log V 41 Advent - A graphic adventure game engine K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-28T20:00:58.000000Z PROPS-END Node-path: branches Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10 PROPS-END Node-path: branches/grumbel Node-kind: dir Node-action: add Node-copyfrom-rev: 1 Node-copyfrom-path: trunk Revision-number: 3 Prop-content-length: 128 Content-length: 128 K 7 svn:log V 26 *** empty log message *** K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-28T20:02:26.000000Z PROPS-END Node-path: trunk/prototype/autogen.sh Node-kind: file Node-action: add Prop-content-length: 36 Text-content-length: 51 Text-content-md5: 3990af7502227528e1b92ae2be3b6db0 Content-length: 87 K 14 svn:executable V 1 * PROPS-END aclocal autoheader automake --add-missing autoconf Revision-number: 4 Prop-content-length: 157 Content-length: 157 K 7 svn:log V 55 Added the posibility to create new scenarios in guilel K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-29T10:08:16.000000Z PROPS-END Node-path: trunk/prototype/Advent.cc Node-kind: file Node-action: change Text-content-length: 3809 Text-content-md5: b0129e4e07a079e983982a2edd064a59 Content-length: 3809 // $Id: Advent.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Scenario.hh" #include "Coin.hh" #include "Advent.hh" #include "Font.hh" #include "AdventObjSmob.hh" #include "ScenarioSmob.hh" Advent app; Inventory inventory; // Wrapper to call the member func void inner_main (void* closure, int argc, char* argv[]) { app.inner_main (closure, argc, argv); } Advent::Advent () { } char* Advent::get_title () { return "Advent - Prototype"; } int Advent::main (int argc, char* argv[]) { std::cout << "Starting guile..." << std::endl; scm_boot_guile (argc, argv,::inner_main, 0); std::cout << "this should never be reached..." << std::endl; return 0; } void Advent::inner_main (void* closure, int argc, char* argv[]) { bool fullscreen = false; std::cout << "Loading guile code..." << std::endl; AdventObjSmob::init (); ScenarioSmob::init (); std::cout << "Loading guile code...done" << std::endl; if (argc == 2) { if (strcmp (argv[1], "--fullscreen") == 0) { fullscreen = true; } } try { std::cout << "Advent: Init ClanLib..." << std::endl; CL_SetupCore::init (); CL_SetupCore::init_display (); CL_SetupPNG::init (); CL_SetupJPEG::init (); CL_Display::set_videomode (640, 480, 16, fullscreen, false); resource = CL_ResourceManager::create("data/resources.scr", false); //Scenario scenario; Coin coin; std::cout << "Loading guile code..." << std::endl; gh_load ("guile/adventure.scm"); std::cout << "Loading guile code...done" << std::endl; int time = CL_System::get_time (); int count = 0; char str[256] = {"Calculation"}; //gh_eval_str("(let ((obj (advent:makeobj \"testobj\" \"takeme\" 400 100 100))) (println obj))"); assert (Scenario::current); while (CL_Keyboard::get_keycode (CL_KEY_ESCAPE) == 0) { std::cout << "Looping..." << std::endl; //CL_Display::fill_rect (CL_Mouse::get_x (), CL_Mouse::get_y (), //CL_Mouse::get_x () + 16, CL_Mouse::get_y () + 16, //1.0, 1.0, 1.0, 1.0); //CL_Display::clear_display (1.0, 1.0, 0.0, 0.01); Scenario::current->update (); coin.update (); Scenario::current->draw (); coin.draw (); font ("font")->print_left (0, 0, str); if (count > 9) { int time_diff = CL_System::get_time () - time; //std::cout << "fps: " << 10000.0 / time_diff << std::endl; sprintf (str, "fps: %f", 10000.0 / time_diff); //std::cout << "Str: " << str << std::endl; count = 0; time = CL_System::get_time (); } CL_Display::flip_display (); count++; CL_System::keep_alive (); } CL_SetupJPEG::deinit (); CL_SetupPNG::deinit (); CL_SetupCore::deinit_display (); CL_SetupCore::deinit (); } catch (CL_Error err) { std::cout << "CL_Error: " << err.message << std::endl; } } /* EOF */ Node-path: trunk/prototype/Advent.hh Node-kind: file Node-action: change Text-content-length: 1383 Text-content-md5: 1d046306cba6ad6ce34e61c350d7a7f4 Content-length: 1383 // $Id: Advent.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENT_HH #define ADVENT_HH #include #include "Inventory.hh" void inner_main (void* closure, int argc, char* argv[]); class Advent : public CL_ClanApplication { private: CL_ResourceManager* resource; public: Advent (); char* get_title (); CL_ResourceManager* get_resource () { return resource; } void inner_main (void* closure, int argc, char* argv[]); int main (int argc, char* argv[]); }; extern Inventory inventory; extern Advent app; #endif /* EOF */ Node-path: trunk/prototype/AdventObj.cc Node-kind: file Node-action: change Text-content-length: 3468 Text-content-md5: c98c75a0c7f2837bfc8052a3d7b1f785 Content-length: 3468 // $Id: AdventObj.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "Scenario.hh" #include "Advent.hh" #include "AdventObj.hh" SurfaceAdvObj::SurfaceAdvObj (Scenario* s, const CL_Surface& arg_sur, const CL_Vector& arg_pos) : AdventObj (s) { sur = arg_sur; pos = arg_pos; } void SurfaceAdvObj::draw_world () { sur.put_screen (pos.x, pos.y); } Mogli::Mogli () { sur_front = CL_Surface ("mogli_front", app.get_resource ()); sur_back = CL_Surface ("mogli_back", app.get_resource ()); sur_left = CL_Surface ("mogli_left", app.get_resource ()); sur_right = CL_Surface ("mogli_right", app.get_resource ()); counter = 0; pos.x = 320; pos.y = 400; delta = 4.0; on_button_press_slot = CL_Input::sig_button_press.connect (thCreateSlot(this, &Mogli::on_button_press)); } Mogli::~Mogli () { } void Mogli::update () { // update animation if (target != pos) { counter++; if (counter > 7) counter = 0; if (on_target ()) { target = pos; } else { CL_Vector tmp_pos = pos + direction; if (Scenario::current->get_colmap ()->get_pixel (tmp_pos.x, tmp_pos.y) != 0) { pos = tmp_pos; pos.z = Scenario::current->get_colmap ()->get_pixel (pos.x, pos.y); } else { target = pos; } } } else { counter = 0; } } bool Mogli::on_target () { if (pos.x - delta < target.x && pos.x + delta > target.x && pos.y - delta < target.y && pos.y + delta > target.y) { return true; } return false; } void Mogli::draw_world () { float zoom = Scenario::current->get_colmap ()->get_pixel (pos.x, pos.y) / 255.0; CL_Surface* sur; if (fabs(direction.x) < fabs(direction.y)) { if (direction.y > 0) sur = &sur_front; else sur = &sur_back; } else { if (direction.x > 0) sur = &sur_right; else sur = &sur_left; } sur->put_screen (pos.x - (sur->get_width ()/2 * zoom), pos.y - (sur->get_height () * zoom), zoom, zoom, counter % sur->get_num_frames ()); //std::cout << "Zoom: " << zoom << std::endl; } void Mogli::on_button_press(CL_InputDevice *device, const CL_Key &key) { if (key.id == 0) { direction = CL_Vector (key.x - pos.x, key.y - pos.y); direction.normalize (); direction *= 5.0; target = CL_Vector (key.x, key.y); } } bool Mogli::is_at (int x, int y) { if (pos.x - sur_left.get_width()/2 < x && pos.x + sur_left.get_width()/2 > x && pos.y > y && pos.y - sur_left.get_height () < y) { return true; } return false; } /* EOF */ Node-path: trunk/prototype/AdventObj.hh Node-kind: file Node-action: change Text-content-length: 2722 Text-content-md5: 505be8441839fc178dde64c34dca6aea Content-length: 2722 // $Id: AdventObj.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENTOBJ_HH #define ADVENTOBJ_HH #include #include "Position.hh" class Scenario; class AdventObj { protected: //Scenario* scenario; public: /// Empty default constructor AdventObj () {} AdventObj (Scenario* s) { //scenario = s; } /// Empty default destructor virtual ~AdventObj () {} /// Update the status of the object, this function is called once an /// event loop virtual void update () {} /// Draw the object to the world virtual void draw_world () {} /// Draw the object into the inventory virtual void draw_inventory (int x, int y) {} virtual bool is_at (int x, int y) { return false; } virtual std::string get_name () { return "-- unset --"; } virtual float get_z_pos () { return 0.0; } }; // Little helper class for sort() struct AdventObj_less : public binary_function { bool operator() (AdventObj* a, AdventObj* b) const { return a->get_z_pos () < b->get_z_pos (); } }; class SurfaceAdvObj : public AdventObj { private: CL_Vector pos; CL_Surface sur; public: SurfaceAdvObj (Scenario* s, const CL_Surface& arg_sur, const CL_Vector& arg_pos); ~SurfaceAdvObj () {} void draw_world (); float get_z_pos () { return pos.z; } }; class Mogli : public AdventObj { private: CL_Surface sur_left; CL_Surface sur_right; CL_Surface sur_front; CL_Surface sur_back; int counter; thSlot on_button_press_slot; CL_Vector direction; CL_Vector pos; CL_Vector target; float delta; public: Mogli (); ~Mogli (); bool on_target (); void update (); void draw_world (); void on_button_press(CL_InputDevice *device, const CL_Key &key); float get_z_pos () { return pos.z; } bool is_at (int x, int y); std::string get_name () { return "Mogli"; } }; #endif /* EOF */ Node-path: trunk/prototype/AdventObjSmob.cc Node-kind: file Node-action: change Text-content-length: 3418 Text-content-md5: 6f433c61988de4a80f7be26cf0e7b24a Content-length: 3418 // $Id: AdventObjSmob.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Advent.hh" #include "AdventObj.hh" #include "GuileAdventObj.hh" #include "AdventObjSmob.hh" #include "Scenario.hh" long AdventObjSmob::tag; struct AdventObjP { GuileAdventObj* obj; }; void AdventObjSmob::init () { tag = scm_make_smob_type ("AdventObj", sizeof (AdventObjP)); scm_set_smob_mark (tag, &AdventObjSmob::mark_obj); scm_set_smob_free (tag, &AdventObjSmob::free_obj); scm_set_smob_print (tag, &AdventObjSmob::print_obj); gh_new_procedure5_0("advent:makeobj", AdventObjSmob::make_obj); gh_new_procedure2_0("advent:set-surface", AdventObjSmob::set_surface); } SCM AdventObjSmob::mark_obj (SCM smob) { return SCM_UNSPECIFIED; } scm_sizet AdventObjSmob::free_obj (SCM smob) { std::cout << "Freeing object..." << std::endl; //AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); // delete obj; // do nothing return 0; } int AdventObjSmob::print_obj (SCM smob, SCM port, scm_print_state *pstate) { std::cout << "Printing object..." << std::endl; AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); if (obj) { std::cout << "STR: " << obj->obj->get_name () << std::endl; scm_puts ("#", port); } else { scm_puts ("#", port); } /* non-zero means success */ return 1; } SCM AdventObjSmob::make_obj (SCM name, SCM surface, SCM x_pos, SCM y_pos, SCM z_pos) { std::cout << "AdventObjSmob: make_obj()" << std::endl; AdventObjP* obj = (AdventObjP*)scm_must_malloc (sizeof (AdventObjP), "AdventObjP"); obj->obj = new GuileAdventObj (0, SCM_CHARS(name), 1, CL_Surface (SCM_CHARS(surface), app.get_resource ()), CL_Vector (SCM_INUM(x_pos), SCM_INUM(y_pos), SCM_INUM(z_pos))); std::cout << "AdventObjSmob: Makeing object: " << obj << " "<< obj->obj << std::endl; //Scenario::current->add (obj->obj); SCM_RETURN_NEWSMOB (tag, obj); } SCM AdventObjSmob::set_surface (SCM smob, SCM name) { std::cout << "Setting surface" << std::endl; AdventObjP* advobj = reinterpret_cast(SCM_CDR (smob)); if (advobj) { char* str = SCM_CHARS(name); puts ("set_surface..."); puts (str); std::cout << "Pointer: " << advobj << " " << advobj->obj << std::endl; advobj->obj->set_surface (str); } else { std::cout << "KAPUTT" << std::endl; } return SCM_UNSPECIFIED; } /* EOF */ Node-path: trunk/prototype/Background.cc Node-kind: file Node-action: change Text-content-length: 1154 Text-content-md5: a69fb271e2447e4db9be402f6e6cdeec Content-length: 1154 // $Id: Background.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "Position.hh" #include "Background.hh" Background::Background (std::string name) { sur = CL_Surface (name.c_str (), app.get_resource ()); } Background::~Background () { } void Background::draw () { sur.put_screen (0,0); } /* EOF */ Node-path: trunk/prototype/Background.hh Node-kind: file Node-action: change Text-content-length: 1140 Text-content-md5: 71c288ced012696ea6a2198f4f13be18 Content-length: 1140 // $Id: Background.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef BACKGROUND_HH #define BACKGROUND_HH #include class Background { private: CL_Surface sur; public: Background (std::string); virtual ~Background (); virtual void draw (); virtual void update () {} }; #endif /* EOF */ Node-path: trunk/prototype/Coin.cc Node-kind: file Node-action: change Text-content-length: 3764 Text-content-md5: e838ca094800090d1e1436dcc5260669 Content-length: 3764 // $Id: Coin.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "GuileAdventObj.hh" #include "Font.hh" #include "AdventObj.hh" #include "Advent.hh" #include "Coin.hh" Coin::Coin () { visible = false; sur = CL_Surface ("coin", app.get_resource ()); on_button_press_slot = CL_Input::sig_button_press.connect (thCreateSlot(this, &Coin::on_button_press)); on_button_release_slot = CL_Input::sig_button_release.connect (thCreateSlot(this, &Coin::on_button_release)); marked_obj = 0; } void Coin::draw () { if (visible) { //std::cout << "Drawing..." << x_pos << " " << y_pos << std::endl; sur.put_screen (x_pos - sur.get_width ()/2, y_pos - sur.get_height ()/2); } AdventObj* obj = Scenario::current->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (obj) { font ("font")->print_center (320, 460, obj->get_name ().c_str ()); } } void Coin::update () { } void Coin::on_button_press(CL_InputDevice *device, const CL_Key &key) { std::cout << "Coin pressed: " << key.id << std::endl; if (key.id == 1) { std::cout << "Point Color: " << Scenario::current->get_colmap ()->get_pixel (key.x, key.y) << " " << key.x << "x" << key.y << std::endl; } else if (key.id == 2) { marked_obj = Scenario::current->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (marked_obj) { visible = true; x_pos = (int) key.x; y_pos = (int)key.y; } } } void Coin::on_button_release (CL_InputDevice *device, const CL_Key &key) { //std::cout << "Coin released: " << key.id << std::endl; if (key.id == 2) { visible = false; if (marked_obj) { std::cout << "Action on: " << marked_obj->get_name () << std::endl; if (key.x > x_pos - sur.get_width ()/2 && key.x < x_pos + sur.get_width ()/2 && key.y > y_pos - sur.get_height ()/2 && key.y < y_pos + sur.get_height ()/2) { if (key.x < x_pos && key.y < y_pos) { std::cout << "Use" << std::endl; //gh_eval_str ("(advent:eval \"use whip\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("use", obj->get_name ()); } else if (key.x > x_pos && key.y < y_pos) { std::cout << "Open/Close" << std::endl; //gh_eval_str ("(advent:eval \"use whip box\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("open", obj->get_name ()); } else if (key.x < x_pos && key.y > y_pos) { std::cout << "Pickup" << std::endl; //gh_eval_str ("(advent:eval \"pickup whip\")"); GuileAdventObj* obj = dynamic_cast(marked_obj); obj->call ("pickup", obj->get_name ()); } else if (key.x > x_pos && key.y > y_pos) { std::cout << "Inventory" << std::endl; gh_eval_str ("(advent:eval \"inventory\")"); //obj->call ("pickup", obj->get_name ()); } } } } } /* EOF */ Node-path: trunk/prototype/Coin.hh Node-kind: file Node-action: change Text-content-length: 1357 Text-content-md5: 96fa5467bf45da068fac1f37e49c5bfe Content-length: 1357 // $Id: Coin.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef COIN_HH #define COIN_HH #include #include "Scenario.hh" class Coin { private: thSlot on_button_press_slot; thSlot on_button_release_slot; CL_Surface sur; bool visible; int x_pos, y_pos; AdventObj* marked_obj; public: Coin (); ~Coin () {} void draw (); void update (); void on_button_press (CL_InputDevice *device, const CL_Key &key); void on_button_release (CL_InputDevice *device, const CL_Key &key); }; #endif /* EOF */ Node-path: trunk/prototype/CollisionMap.cc Node-kind: file Node-action: change Text-content-length: 1243 Text-content-md5: 890a581413e72b8d9455ee4dab9ee2ac Content-length: 1243 // $Id: CollisionMap.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "CollisionMap.hh" CollisionMap::CollisionMap (std::string colmap) { provider = CL_SurfaceProvider::load (colmap.c_str (), app.get_resource ()); provider->lock (); } CollisionMap::~CollisionMap () { provider->unlock (); } int CollisionMap::get_pixel (int x, int y) { return provider->get_pixel (x, y); } /* EOF */ Node-path: trunk/prototype/CollisionMap.hh Node-kind: file Node-action: change Text-content-length: 1139 Text-content-md5: 444848dafdb4d845bcd2dd77d5586096 Content-length: 1139 // $Id: CollisionMap.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef COLLISIONMAP_HH #define COLLISIONMAP_HH class CollisionMap { private: CL_SurfaceProvider* provider; public: CollisionMap (std::string); virtual ~CollisionMap (); void update () {} int get_pixel (int x, int y); }; #endif /* EOF */ Node-path: trunk/prototype/Makefile.am Node-kind: file Node-action: change Text-content-length: 584 Text-content-md5: 4081d48e5db2bbebdc1b28972d2a33b5 Content-length: 584 bindir=$(prefix)/games bin_PROGRAMS = advent advent_SOURCES = Advent.cc Background.cc Font.cc Position.hh \ Advent.hh Background.hh Font.hh Scenario.cc \ AdventObj.cc Coin.cc GuileAdventObj.cc Scenario.hh \ AdventObj.hh Coin.hh GuileAdventObj.hh \ AdventObjSmob.cc CollisionMap.cc Inventory.cc \ AdventObjSmob.hh CollisionMap.hh Inventory.hh \ ScenarioSmob.hh ScenarioSmob.cc # SUBDIRS = guile data EXTRA_DIST = guile/*.scm data/resources.scr \ data/images/*.png data/images/*.jpg # EOF # Node-path: trunk/prototype/Makefile.in Node-kind: file Node-action: change Text-content-length: 12624 Text-content-md5: 7f03abc98e95f045a2236f3c6e26a09c Content-length: 12624 # Makefile.in generated automatically by automake 1.4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ CXX = @CXX@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ bindir = $(prefix)/games bin_PROGRAMS = advent advent_SOURCES = Advent.cc Background.cc Font.cc Position.hh Advent.hh Background.hh Font.hh Scenario.cc AdventObj.cc Coin.cc GuileAdventObj.cc Scenario.hh AdventObj.hh Coin.hh GuileAdventObj.hh AdventObjSmob.cc CollisionMap.cc Inventory.cc AdventObjSmob.hh CollisionMap.hh Inventory.hh ScenarioSmob.hh ScenarioSmob.cc # SUBDIRS = guile data EXTRA_DIST = guile/*.scm data/resources.scr data/images/*.png data/images/*.jpg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ advent_OBJECTS = Advent.o Background.o Font.o Scenario.o AdventObj.o \ Coin.o GuileAdventObj.o AdventObjSmob.o CollisionMap.o Inventory.o \ ScenarioSmob.o advent_LDADD = $(LDADD) advent_DEPENDENCIES = advent_LDFLAGS = CXXFLAGS = @CXXFLAGS@ CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 config.h.in \ configure configure.in install-sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/Advent.P .deps/AdventObj.P .deps/AdventObjSmob.P \ .deps/Background.P .deps/Coin.P .deps/CollisionMap.P .deps/Font.P \ .deps/GuileAdventObj.P .deps/Inventory.P .deps/Scenario.P \ .deps/ScenarioSmob.P SOURCES = $(advent_SOURCES) OBJECTS = $(advent_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .cc .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) config.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=config.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f config.h maintainer-clean-hdr: mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: advent: $(advent_OBJECTS) $(advent_DEPENDENCIES) @rm -f advent $(CXXLINK) $(advent_LDFLAGS) $(advent_OBJECTS) $(advent_LDADD) $(LIBS) .cc.o: $(CXXCOMPILE) -c $< tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile $(mkinstalldirs) $(distdir)/data $(distdir)/data/images $(distdir)/guile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp %.o: %.cc @echo '$(CXXCOMPILE) -c $<'; \ $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.cc @echo '$(LTCXXCOMPILE) -c $<'; \ $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am all-recursive-am: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-am all-am: Makefile $(PROGRAMS) config.h all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ mostlyclean-compile mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ distclean-tags distclean-depend distclean-generic \ clean-am distclean: distclean-am -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-tags \ maintainer-clean-depend maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # EOF # # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Node-path: trunk/prototype/Scenario.cc Node-kind: file Node-action: change Text-content-length: 3097 Text-content-md5: b4e042a39b62448a21aef3ce7fc7d191 Content-length: 3097 // $Id: Scenario.cc,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "GuileAdventObj.hh" #include "Position.hh" #include "Scenario.hh" /// std::list Scenario::scenario_list; /// Scenario* Scenario::current; void Scenario::set_current_scenario (std::string name) { for (std::list::iterator i = scenario_list.begin (); i != scenario_list.end (); i++) { if ((*i)->get_name () == name) { set_current_scenario (*i); return; } } assert (false); } void Scenario::set_current_scenario (Scenario* scenario) { assert (scenario); current = scenario; } Scenario::Scenario (std::string name, std::string background, std::string colmap, std::list objects) { this->name = name; this->background = new Background (background); this->colmap = new CollisionMap (colmap); this->objects = objects; this->objects.push_back (new Mogli ()); } /* Scenario::Scenario () { objects.push_back (new GuileAdventObj (this, "odd" , 3, CL_Surface ("odd", app.get_resource ()), CL_Vector (340, 216, 230))); objects.push_back (new GuileAdventObj (this, "tree", 2, CL_Surface ("tree", app.get_resource ()), CL_Vector (0, 211, 255))); objects.push_back (new GuileAdventObj (this, "takeme", 1, CL_Surface ("takeme", app.get_resource ()), CL_Vector (236, 300, 240))); } */ Scenario::~Scenario () { } void Scenario::draw () { background->draw (); // CL_Display::clear_display (); objects.sort (AdventObj_less ()); for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->draw_world (); } } void Scenario::update () { for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->update (); } background->update (); colmap->update (); } CollisionMap* Scenario::get_colmap () { return colmap; } AdventObj* Scenario::get_object (int x, int y) { AdventObj* obj = 0; for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { if ((*i)->is_at (x, y)) obj = (*i); } return obj; } void Scenario::add (AdventObj* obj) { objects.push_back (obj); } /* EOF */ Node-path: trunk/prototype/Scenario.hh Node-kind: file Node-action: change Text-content-length: 1766 Text-content-md5: 9848ceaf3a69d797d875d37005ef3286 Content-length: 1766 // $Id: Scenario.hh,v 1.2 2000/12/29 10:08:16 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef SCENARIO_HH #define SCENARIO_HH #include "AdventObj.hh" #include "Background.hh" #include "CollisionMap.hh" #include class AdventObj; class Scenario { protected: std::list objects; Background* background; CollisionMap* colmap; std::string name; public: /// static std::list scenario_list; /// static Scenario* current; Scenario (std::string name, std::string background, std::string colmap, std::list objects); virtual ~Scenario (); static void set_current_scenario (std::string name); static void set_current_scenario (Scenario* scenario); virtual std::string get_name () { return name; } virtual void draw (); virtual void update (); virtual CollisionMap* get_colmap (); virtual AdventObj* get_object (int x, int y); virtual void add (AdventObj* obj); }; #endif /* EOF */ Node-path: trunk/prototype/guile/adventure.scm Node-kind: file Node-action: change Prop-content-length: 36 Text-content-length: 4834 Text-content-md5: 039dc117757f9415285a4c78b0580c5c Content-length: 4870 K 14 svn:executable V 1 * PROPS-END #!/usr/bin/guile \ --debug -s !# (use-modules (ice-9 getopt-long) (ice-9 string-fun) (ice-9 syncase) (oop goops)) (define *current-scenario* '()) (define (scenario:set scenario) (set! *current-scenario* scenario)) (define (scenario:remove-obj obj) (set! *current-scenario* (filter (lambda (x) (not (equal? obj x))) *current-scenario*))) (define (scenario:add-obj obj) (set! *current-scenario* (cons obj *current-scenario*))) (define-class () (adv:bind #:accessor adv:bind #:init-value #t #:init-keyword #:adv:bind)) (define-method name ((obj )) "") (define-class () ;; The bind object contains a pointer back to the C++ Scenario class (adv:bind #:init-value #f #:init-keyword #:adv:bind #:accessor adv:bind) ;; The list of objects in this scenario (adv:objs #:init-value '() #:init-keyword #:adv:objs #:accessor adv:objs)) ;;(define (printf fmt . lst) ;; (display (format #f fmt lst))) (define (get-obj nme) (or (get-obj-helper nme *current-scenario*) (get-obj-helper nme *inventory*))) (define (get-obj-helper nme objs) (cond ((null? objs) #f) (else (let ((obj-name (name (car objs)))) (cond ((string=? nme obj-name) (car objs)) (else (get-obj-helper nme (cdr objs)))))))) (define (read-command) (print "Advent> ") (read-line)) (define (advent:help-command args) (cond ((equal? (length args) 1) (cond ((string=? (car args) "look") (println "look object - and here what you see.")) (else (println "Can't help you with " (car args))))) (else (println "Commands: help, look, walk, pickup, open, close")) )) (define (advent:tokenize command-line) (cond ((eof-object? command-line) command-line) (else (filter (lambda (x) (not (or (string=? x "") (string=? x "at") (string=? x "to") (string=? x "with") (string=? x "a") (string=? x "the")))) (separate-fields-discarding-char #\space command-line list))))) ;; Verbs (define (advent:look args) ;; (println "LookAt: " args) (cond ((equal? (length args) 1) ;; (println "Object is a: " (get-obj (car args))) (look (get-obj (car args)))) (else (println "Where should I look at?")))) (define (advent:pickup args) (for-each (lambda (x) (pickup (get-obj x))) args)) (define (advent:walk args) (cond ((equal? (length args) 1) (walk (get-obj (car args)))) (else (println "Don't know where to walk.")))) (define (advent:use args) (cond ((equal? (length args) 1) (use (get-obj (car args)))) ((equal? (length args) 2) (use (get-obj (car args)) (get-obj (cadr args)))) (else (println "Don't know what you mean")))) (define (advent:open args) (cond ((equal? (length args) 1) (gopen (get-obj (car args)))) (else (println "Don't know what you mean.")) )) (define-method walk ((obj )) (println "Don't know what you mean. So I am still here.")) (define-method walk ((obj )) (println "I am already there.")) (define-method gopen ((obj )) (println "Don't know what you mean.")) (define-method gopen ((obj )) (println "I can't open this ")); (name obj))) (define-method gclose ((obj )) (println "Don't know what you mean.")) (define-method gclose ((obj )) (println "I can't close this " (name obj))) (define *inventory* '()) (define-method add-inventory ((obj )) (cond ((not (inventory-has obj)) (set! *inventory* (cons obj *inventory*)) (println "You picked up a " (name obj))) (else (println "You already have this " (name obj))))) (define-method inventory-has ((obj )) (member obj *inventory*)) (define (advent:close args) (cond ((equal? (length args) 1) (gclose (get-obj (car args)))) (else (println "Don't know what you mean." args)) )) (define (advent:eval command-line) (let ((token (advent:tokenize command-line))) (cond ((eof-object? command-line) (println) (exit 0)) ((null? token) '()) (else (let ((command (car token)) (args (cdr token))) (cond ((string=? command "quit") (println "Bye, bye") (exit 0)) ((string=? command "help") (advent:help-command args)) ((string=? command "look") (advent:look args)) ((string=? command "walk") (advent:walk args)) ((string=? command "pickup") (advent:pickup args)) ((string=? command "use") (advent:use args)) ((string=? command "open") (advent:open args)) ((string=? command "inventory") (println "Invectory: ") (println *inventory*)) (else (println "- unknown command: " command)))))))) (load "helper.scm") (load "objects.scm") (println "Adventure V0.0") ;; EOF ;; Node-path: trunk/prototype/guile/objects.scm Node-kind: file Node-action: change Text-content-length: 7902 Text-content-md5: 307d41a93d3090bda54d67306d1a5f75 Content-length: 7902 (println "Loading objects.scm...") (define-class ()) (define-method name ((obj )) "takeme") (define-method use ((obj )) (println "Got takeme")) ;; Defining objects (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class () (broken #:init-value #f #:accessor broken)) (define-class () (closed #:init-value #t #:accessor closed)) (define-class () (state #:init-value 'off #:accessor state) (broken #:init-value #f #:accessor broken)) (define-class () (state #:init-value 'closed #:accessor state)) (define-class ()) (define-class () (closed #:init-value #t #:accessor closed)) (define-method name ((obj )) "chest") (define-method gopen ((obj )) (println "name: " (name obj)) (println "gopen1: " obj) (println "gopen2: " (adv:bind obj)) (cond ((closed obj) (advent:set-surface (adv:bind obj) "chest_opened") (set! (closed obj) #f) (println "Open chest")) (else (advent:set-surface (adv:bind obj) "chest_closed") (println "Closed chest") (set! (closed obj) #t)) )) (define-method name ((obj )) "tree") (define-method name ((obj )) "forest") (define-method name ((obj )) "house") (define-method name ((obj )) "Indy") (define-method name ((obj )) "whip") (define-method name ((obj )) "box") (define-method name ((obj )) "switch") (define-method name ((obj )) "book") (define-method name ((obj )) "window") (define-method name ((obj )) "door") ;; Around (define-class () (light #:init-value #f #:accessor light)) (define-method name ((obj )) "around") (define-method name ((obj )) "around") (define-method look ((obj )) (println "A large mamut tree, wow!")) (define-method look ((obj )) (if (broken obj) (println "You see a broken window, looks like you broke it.") (println "A beatifull large window"))) (define-method look ((obj )) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (define-method look ((obj )) (cond ((light obj) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (else (println "You can't see anything, its dark.")))) (define-method use ((obj )) (println "Unknown object")) (define-method look ((obj )) (println "You read a book full of wisdom.")) (define-method gclose ((obj )) (println "You close the book.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "Don't now how to use this unknown thing with a whip")) (define-method use ((obj1 ) (obj2 )) (cond ((equal? (state obj2) 'closed) (set! (state obj2) 'opened) (println "You slap the box and it openes.")) (else (println "You don't need to slap the box, its already opened.")))) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the switch... and it breaks...") (set! (broken obj2) #t)) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the window and it cracks! Woops...") (set! (broken obj2) #t)) (define-method use ((obj )) (if (broken obj) (println "The switch is broken, you can not use it.") (cond ((equal? (state obj) 'off) (println "You press the switch and the light goes on.") (set! (state obj) 'on) (set! (light (get-obj "around")) #t)) (else (println "You press the switch again and the light goes off.") (set! (state obj) 'off) (set! (light (get-obj "around")) #f) )))) (define-method look ((obj )) (if (broken obj) (println "Looks like the switch is broken and unusable") (cond ((equal? (state obj) 'off) (println "The switch is on state `off'")) (else (println "The switch is on state `on'"))))) (define-method use ((obj )) (println "Don't know what I should do with " (name obj))) (define-method use ((obj1 ) (obj2 )) (println "Don't know how to combine " (name obj1) " and " (name obj2) ".")) (define-method look ((obj )) (println "Don't know what you mean")) (define-method look ((obj )) (println "You see a " (name obj) ", nothing special.")) (define-method look ((house )) (println "You see a cool house.")) (define-method look ((whip )) (println "This is indys cool whip")) (define-method look ((box )) (cond ((equal? 'closed (state box)) (println "The box is closed.")) (else (println "The box is open.")) )) (define-method gopen ((box )) (if ((equal? (state box) 'closed)) (println "You can't openen the box, its looked.") (println "Its already opened."))) (define-method pickup ((obj )) (println "Don't know what you mean")) (define-method pickup ((obj )) (println "Don't know how to pickup this " (name obj))) (define-method pickup ((box )) (println "This box is to heavy to carry it around.")) (define-method pickup ((book )) (scenario:remove-obj book) (add-inventory book)) (define-method pickup ((whip )) (scenario:remove-obj whip) (add-inventory whip)) (define-method walk ((forest )) (println "You walk int the forest.") (scenario:set *forest*) ) (define-method walk ((house )) (println "You walk into the house.") (scenario:set *in-house*)) (define-method gopen ((obj )) (cond ((closed obj) (advent:set-surface (adv:bind obj) "door_opened") (set! (closed obj) #f)) (else (advent:set-surface (adv:bind obj) "door_closed") (set! (closed obj) #t)))) ;;(define-method walk ((obj )) ;; (println "You walk out of the door, you are outsite again.") ;; (scenario:set *before-house*)) (define-method use ((obj )) (println "You use your whip and slap yourself, stupid!")) (define *before-house* (list (make ) (make ) (make ) (make ) (make ) (make ) (make ) (make ) )) (define *in-house* (list (make ) (make ) (make ) )) (define *forest* (list (make )) ) (define *gateway* (list (make ) ; (make #:adv:bind (advent:makeobj "takeme2" "takeme" 320 100 150)) (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)) )) (println "Creating game-scenario:gateway-objects") (define game-scenario:gateway-objects (list (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)))) (define game-scenario:gateway-bind (scenario:make-bind "game-scenario:gateway" "background" "background_cmap" (map (lambda (x) (adv:bind x)) game-scenario:gateway-objects))) (define game-scenario:gateway (make #:adv:bind game-scenario:gateway-bind #:adv:objs game-scenario:gateway-objects )) (println "Scenario: " game-scenario:gateway) (scenario:set-current game-scenario:gateway-bind) ;; EOF ;; Revision-number: 5 Prop-content-length: 123 Content-length: 123 K 7 svn:log V 21 Added a new scenario K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-29T10:14:22.000000Z PROPS-END Node-path: trunk/prototype/data/images/background2.jpg Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 53812 Text-content-md5: 80904d8239ec224b96f29438c89d2c98 Content-length: 53822 PROPS-END JFIFHHCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"C!1A"Qa2q#BR3br$%4CDS&5c ?-2v?֥ԻaQH7.H<}Xb:Y.9ATp~hSxKh阣e곑2bpUqH7S@El&s+ci%QTq\ܪp9?w" F;NI═EV4I;8שuC2s@p~I+ OH\qP:=ĥOר3t;:ԙA]y=z2@W+VUa;/w@5r76@] K{z[sZz_R@Jg u-[yzņr}Rr`x?&9zVq$Qc9M=jW ɧ5+[hL* 0d7cQ}[]1HCn3Aqꎭv[s;Vo{VJoaq)ɕl.gRX8469Ȏpq;ح*}(!H#TG[Wyx6 Ws[lڤrh3I62L? ǣiKNr& ETXx\D#$d*b) ?F{ RK%Y;y4$v,쑗"#.m_4ӞVp|S`'䰉{{F,m"4KNe jem-L1ށi>M ۷x#rvghhh Pp$~3@h^)Bƨ7`ͥȱbiRjkHU.Σ'>iG\A3@t%pOXR<.kQQ%fҭ w9-MĄpOSLcy?4lKTAf84<&<\LǸ.yjI!ا`n&bO$y0 )Mp\HN];( #zQ3_l~ݜ E[Mƪ 凃8UFOހXztc-4@y)2g>zc9,\6qA$ &U1jkxmȦgӅ4Υ`nn\* H⒒F1YƯhɧ ޵/N$?M779VM~#;/^nzӺ(ˀ %@+j|DEn+fMFX Ɉ_tޟ.nHkH, 3ҺXi'݀yjmҶlo'N4)@!HZ7W~/Q.LaTy. IQ =n*HN#6NFrh; [г:צėh6`zǜ!YDL 7͞K֞B2iu8۞Nh%C I1W8Qۉ]d4wSUF(\!≢1a@⠍v2qNW8Gje!` xϚKJ=s{؅R8_9[y@}lwmXxU$鋍NW{$8PV,襅 <~i)dzfM2ڠqޢ͛FFIA/m Vw _zԬZEU^ri[cSq R-)Ēy:!IUwEXHYwڸCS( .n4eCI31E@JpXx1<1DeO uNh^lFX++A˓x42VSY|}QZ~[6:QXXZI^^0ͨb9:&e@"aރ>Ӻ~C˕ CZ}MWYQ(h)>3]˭-%@N>qUFk)v(r1&:wQQ1.U9Lؠ4{%V vqV.1'Ռ׫S-:pTEeQ՗Evl탥m5y1$\)iebBCZݤ7+rp/w:a.c/$[,3g @7@`aTz+BLZ-Y7Z۴[(`XnFld=)$q`*czt4 Ub؎SI=յ#*BR_Vj;x@OcV ?xmemDkRx,㶸R#c2j)4gh$YӺ:c#wluͼ$(?@"J?vrNsEVwc❜De$RL͆+jomN"UuIJw;Oj݈"B9ұ wTS}UKut^p =k-хN;eSi$]1Z4Jei a4 eP lGrs>gʌDS0~Mm9?1G("Ili)1o!d#WcVn<tyC溳ll$D9#hE9 @`cIו V1pݩTWW"?N!؅yyN3ǵ$✎Ic`n4Z$Ie\{vO#$QQ c WdF8^h'>q88" ء.s4Ra=)S1*1KaܟIGDLȻ>hg($0ac%Ӻar .;p?6{!o|G4M@psջ*`Fʸx-Lʤnctw~RH-ZDM9-jE}3]Đ0^G.7[ GqIom͖ @AliL>Ow$bqQQ]ۥ-2v9[ĖF'CZޥE? >kҒN4|X4d|Wt$Ibģڲ;iP%9z[l!p+#:2LߓX{;fp2}֧R7̖{u*>$Y5#e&|b4eL9b*yIXQMd}uԏjkyprEz./マNw2g$=HQ9.x設mUH6ߺ(4bٖDבu\Jw.%7ߥtKvxTOBi6}is}<@NkE]]暖(a$$LIIKҌ=F mfT˅# nc |Tn9@r;8!ev8ҷLE Lc(`frOqXjsG*j^AVW6*8 B hp; ` Ss[C m @c6}5oګ}8)9Aeb/d`=Ւco,ZK8Ut\dRÙ(|NM"b"vdQPn C$Xu\cxx:A Ž<25>"*G޴(/=4\3.I+NJJ-=>pk:FAd-֭Πxm h#%@i"匃'f ذSjVڦQ"#jQ-68ae sAVhmneٻǚY92d Ղ[BP "O!DeLDւklRA*ԺDse&އKv\C+jͥz9Ilh.:kk[qGVzaVapyQjke;ߥQli%l.[< y]we=tAwP|2YQ&"9vYC*"6x#C!P H1E}<s`G *4'/#_JrZI%c7lI8QՄn)ߢn'Lj^< y,LtS6E*ޱv$(4s< !Ѝ+) bEMsq&d0{} 3YHd2{`x$M cj39)xmr*ţM{;*B9\[u;ꔵyq۹n5Ѩ 'sޢHO }mm5=0A81F8•@w6>1s}KZ 8j^Gu\2#f8n/[ 1?3>h6n9V;憎SG+8ڢӬl~)zΙkn=C)P\UD}IF7ͬ%ީ)-`l'A5mskqףT}ޅS2 ئEf[7{s`8fYxT|u FLMbP6 z WLy&Fis6WN'zꝜ5+p|%#Jb渧qڼ9sAiuǵzAzAzAzAMQH.?Ǟ)VXT#u S b_{Olb;5 t{8"Evh{]@)[e)vℑ`POɠt,6m(7l|R P,wa{x ~)1M/t|2O%w S-)'+ijF-.xS_jonu#S!ե$X\2K>K鞇.I$r;gPY#*I*ԝ?u^ 8~o(ֺM4 ǟGF_>#d(`| ;u u-bkэĨ#AcK#E.5.pX A -5$ԖwNqJm-! \ K8 &Oy>_m4]1;h _?5]Ex&*ޞp]P-@SoZƍAc a|g}A1ZDWTv뚚=:vOuhwln.CA]֗AVu/$cU^j-4٧`b7 Ͻsfֺmg |w5j7!#Q(*u'D.pHy3Jf8;@jG` ϹnPXUBVlvK(cU4dHSRךD`xW"ppbAgO$+;* 8"/.{m25藺$Kq&_9Vh#(3TlaP^βF$!8jv߆7btRlrTI:[@ aMсQ["a%zjyN2kW48PjzOk6];:Oy='dL UZͮ>Ls,2{V?Eiw6i&'MGީ啰;NX65i*-moc)ȌHtWݘނ[YѿjD}1YZΓd|ïZ; ؊a3e,G<`PBk=u? I.?8N|3I$|-v^ J"V(EEm|X8x/LwT}bI_ķt. li"zWH2$^ۻp()ccckin@35dc1YupT{eJPIY':~8Fe HAߎi&arA \(h3H EXJyc\ J~c]s]TžxW7[.}I}"F E2)fa!)'XJ7ª8bSESҞK-N(XX<Ә(_;4S< zhW>MxlgsyS]#4_[Dr[H 8 3P1,yS_kZ}Vdj&-dVG:jkx&T=OsvF I6rWUzfcCp} GuW@F|S^M:5bIb+˴/`G -*эieslw=8|SV<]@ӝdteTFd :~x ҂2bf֦K$nA1ڪP@6OTu2N2rqA!:N$;dֽ[uc ;o$x?hDX"tH}8RmHs]:gNӬQ)r~ǑVM"GFI−I#8Tj SkwXF$`x_N1,G*n;rXO_kEGa\ =3D *Y"ٵ^0{f #)6Mn\owf( HãOƛ?LP3"KԙdiXU+ݼ]oJN1Xi׶PşH6sOGo"FS O9侖4UYA$[8јP|l]K()lɣ#SѬl*rSRiMh2rk_t[Y ˅'9@abft)P q:CA˜@oEsE}89qzcGztUwor͒~٫IVY>qډ;O#k|n첟$(`GK_Tf&fֺ $X zWӭcTϿFb%H6gW1N^ /`*uem_tiNƘ¨S3A0$!''9#Px"UzuWE8ai\Sڧ{Xl|dP;JG +NAjiZtrkgu}N #LK3u캅޷J@?RuP_6nj|f0[5+Y>9WIwcPEO$d>t㶆KEЧɭ`Eo粰)شCPS 8\U?uyN*sպ#II4펑>?VsVkk^C0(.uu3$G=iw+@Q OGtIv*sy,+A]ifY#a$^5 70ۿ*ۂd&ߍ6Zz%q@xd0 ,_h$f\$sAt}JVi. (yux|8 MDEe$D⻲1dVDku tg,F3AVkE9㿚Osz fA䁚5_l#h{exn v@cѰHZw@P&<G`Nq!WABŸH>Ex\-3 }T<^s@ $tj(FB:@}kʿR 8 94'_:UڕēF"kr3Q*(u)pN~֮nX@w[i̤>=y2Tl^[,dWWnj # Pe(tӦ;d!q7/%sdZ[ 7ȼ- nS;pI4diS: cO'((z!Jrщ󃌚 bsSGTI&ܰ>V2& g[7L+<>P 8m?0.@9?i }j{VbVyY|{ 3`qB_j6qUU \G+w$.W^ ^`$ Τ">db}bQ&oU^'NŦzc\m^ f>!Hn*XtN$G~.xlh}W[y" P1( '-Tk>$ J܌֗]%<1f5uK[x$1;KӝS Vua&MvY6;A~hRsgh4nX}$l}9n5v $i(Q |yJs'*IoMgh̄{dekodȠcTg"k[@;na0'.4t*Aa"esvJ(UGF9>k^DӍL6;hyjmtXgzy!Y%q>ڍWS[=E]])${( gg#"mrX]dM %dUl&AvXP3%#~a#HV'iS&lధ%$*h+ȬpLb1<%;E;nfF,riL9O@6턃iK; bb3'柒J'@y`;|Kp ~M#$^ͽW^;3hDGaMz)K|@~gvi \a߽ʱK4> v\ S/gp{@=EOIK1#5%Es|SY>kI^)VM\ё][1l``T _ݼdy,\0H6, r h3\R(,Y)(rS/O{XQjyֆutUovSP\ذ[*eYje"bgj=O\Y+ Qt'QxP5ҳ' Qh 惍0H!M ; 'TZNpЉ-: Y\~^HF#;qH֮&f X@ PpVEb~MvՉ?Ƞh]E\4)?h0?vJ =.W8,F~(%o:zm9p2涎4dt2ݤJr34zIA,9X`h`}EWA{ X  @=V|ׅo5 YTwUPw MWnfXqC7Rطu#&t8Gy;׸¦هz!=FВIUDLslE<%q1Ȭ1 dKFwpõg~-ĎBZɨdhރ]m|F8~)]GnC'OkWf=INҰI#5aR{_M*2ˤV0T "Z(7lK+`sP<^i2OSixt0L3d{9P[]FKV8 8i&˧D\`9ɬ` OQ E4ڌM%w &cBBF7d&1QF\HǓY@"Dm3d Ғ < ?LB2rDy_HAp`Cɸ/.Ɯ.x(4޸K"X}lsvӄN(M& 7x&w1ò8ȤXuUĭ ~995Xe?m9A;gp6j@rXqse,7ɷEyKHNYi7B=BԆ2[<]9i^\ƈ&c~_#2AA_>d=x4+M()M6c69a0o^d9_.3W?Zb nB"^@>M?E6ҥhk$=.=DEHj}OqqFAc5~'.c$oҁ #4?jí΍4JV#~9곡\H&yq^"ʕ'rvNڈqޝ/V.y#⨒GR^}x9?KqdSSrK)e>NEzo|Hm,}< J OsR1[zQ]?}.H ѵޤK@ 2VJNѭo9]1Q@ ExPyF[$ѱ)iruКX!H@  qRNYF\:Qp4S?zj:ƣr>4E9ځdQ0SԈ_h?z WJ1 Oj2H70Kp.U6 =$5iM4oj#HV63G槴CR6D? ƛmrYp]}z:a}R}z˪ tj>ˇ6A51woځ۹ef|Ƿ5Ȧ^fUJcOsSZUrGIfO&df8=պXVD$]C6vae8 GIteU@xUΩ<սE7$'j7M p 7,Q,#ރ'Yd{W]ډs[. D~Eznjkn4ވ-i6n8_id-~{~^[LK=;g$‘/EKgbG[ʵAR#J^9P#i G4U᾵psq (71oNOn歏y1YQ 8(u٧,_bH|RtpD$1Պ\82?ڠ:XF1г ړoqt!8VjDR' yRZ(; 1EOi?k֑> ڀ(t+S¤`>*t'֎ ώzt5 3UKD rh5M;N%DЯwjCw~Z،F4Ns"bsi,$\xM[+v`qgNrcdC!t_RJ{z[iM,q3,`?,v|֜ISo94ZRiZ¬^a6cj%ϞV?={O]lލ:B?Xhs5]YSb@ZEX#ǿ~"=MAj g&:}6EZz/hNhO=QͫGIY&=cVh+楅#;[z Oe4G .hC eG"wZT4'< DG-n6\Zw8|UKR!Z[;75iVPtXqAvImWӒVBc=l,;uv#޻Ut8_42ݴ$㚧*@$ł V{205uμƩ*3#hXpu[6\`z}F1Vnlo_B=hԴe8kKStfX\#ɫzeϦvq<-UGGj3m W4^^p&03()zְm9 gIrthwTdA~'h鷨q|aTqT zlRtտ{Z`u?֮?7Ȳǟc7 HmP КĖW:l{A񓚾\I<#_?jы83[i .أ6oPAٞ{nzain'{Gj:PM#ȃjbu7wWf =.F'zt\i"R>GS:H@NhI/IV߱>Pf}Gxƨee`jt}HpXBK9`;TNA,mH҃m¼#\g#Թ@:3 m(mKԥK &dQ#(=nIK$QNz++˃AOVܜyPǮOJP{ֵֺJ/5\PEG|feJZsIE۝⋜.3Ѝշ mf[k,JL GԐQc@Hԟ G q“i+ma>k+K64Ar;k#1j e(4? {T&ղj-Vnto*ABM1&:B@fl |P\SQa{\Q޴{Y DQ#(&Sݵ̠ ]ucA^HZ5Er:*{;\Iqx'XѲ+#3r QI(*I|PX,2X&䴿[ DVh)PGS9-AfmtIYAUPAk;Cx+O  { q=Ma᷸ ʽU)uwX.:~RSԸysʚLѾPMw;Xr I,!d?qc dʜqJ,g&w~4ٮ2)-t+DJ\],LҺ?XOZ^Y\,eqWJRJei,;M1,Tpv W5QN̑r['G!o?CoIGqR5ַ.֐) ɠ_fqRv};C J{"B.s!yc,E[wqKeuMEk0a欝)B b1r҂:#BKw5|B~vSJ;yTL7_C[GbO mdw y?l$Dr|L,`%s$EAi>gj %[H&5O>vlm=W8-dd(qޯ:uz_OƟr9&"GcE:)/˫ߜZ'qGYiS%biI+pT,0*_ObK)3G0@<^cMΛ@9$|9Eߏ$T ֽ#=I <|'c@TIv2 k\tv7qM[$(ErGwԆ*d\848UwcƦ)hw=4G{ss"d#{kH:~^wA\%̹o}Hc_S"Z|e#~o5ig@C@r]M:ב%Ud\ }Ƹn㵀C{J O&}EfpOw3Zo⵴?%ɼ-/GY"8YǴ%շ d!&լe/%"BYGyScFn8QA.BƟnjWfѵ+]{:QĪ-8"7LJcɠ¤V9?ejK!o.sс,(钶YcP?PD= ySM>$ǜͩ8]*6JC$RA"{ /s 1simxbFqB3<@,A'8_FL*UjriH'}k섑%YpbR=٤;Qv3Ei6QH$tk l]z>`w! @~ h-SKid>v}SR+]WՃ+)>"kFo,`>ji4J1*[{FE&b4M&AfX4g4 ;PV5sT aДqϖjdNVb`oqxVTG[|pznsnAU[nLjmцAit8Q چ{{Gd|Vڣqds5e"Aͧʃu|- sOsnvZh !"p3ڍRۑH[ȍ͕k ˷jI/^#3[q>jYH$Xc{2qU4Mn y5^*ҹ{kl~dRsv-b}QH8TޟCO1~v\CXAkn?j'H^w4w$ @+U;a0(4EH.1>jqy( ]|{sH=%(,fH QZ/NJ -"ϗv(4iO0q*B 6T0&c@%:GRUMs[+Eo$XtQ wҎ5RLV _Ëʙ} ­IsxS[4 F4.frbe`+-HG+Х=melc'ั$IA?<:$PDALVO0_p5@ꅳ=KbcP P3h $.[nF|V-jJH 'YN`!݁ڛ6`'2q@6V H6TV[gXa1mhQO)"@<H`*w9AVkGA@8j[XX1=Ƣ%{$\(+%!>`|c4k6ù!e&XP.W a2[LdsN]Qq-HI =諹᱌ |P1iAc ?i} nǧ) <0?!4I$^BdH{s;EaD޾jF]9fO_f%c ?ګ1Ꚇ+mEnGJ2.Uv8]wPUP琧*BGKf/t~SOѵDߎ8TѴiʬ;&N ĄL$7rB[ߚj `D{(fN!3,s6ӊiPirZ,/Ie!5Uum Ze"59- KvaF1AZkm:U,4kIVzUyWkAѬhfGP{Y*rP5Ξ^ɕbh4/Ha2ܮhį+\ a6ZklW ?Q+j&XBF(4 ~*!-œ S HpZzd$@E;OR m yAꮭ yg=" $Pek +=Eu+''P&$ԑީ?nun߂sAh"8KEvSǑ⼚ZAͽ (ԑ-Y"(474yFw267,} BV x4 ,MUtvvxWg=6 Uu=cu6 +Bp3۵lRvU=ⅵK\]Wocy sj]Qe#gsAZD6vD#?J^"Ŧx"8 p[:^%=`嗎PM+E [5fVEawJĀfչIB)aS(kX$0޸v(a1UA/ϰ`ђ "L>h$nAӡ85)щZQTyom su+{|:G=$s!P*#h M=tѨ#4t云\LW>(1)uMBr$^Wަө "$[ׂ!y?4]O _AFIX@NIh.|}smB()H; ϣGӥR?v;Z$mpX{ M%&?w4Ԛ8Qu*O2y7@ P7sļ.ހyt <ٗqAR]$0[vA'sH(^Eg-y>G"sK<2Qc,5u7 !%w-,&Y_#v'^v5Ϩ䘊(kU x9 -fDH`ѴgR_*\&R.1Z V9~ൌH$RYR};S]Z˱cKOU'☛XgXQ$`'Z;ۑ9HE Wܑanur^Fl(8&2_͍jkco<9UV`pynL/֤-aFp|Rr9_PR5ą%T|}$wO8X ݓL.!AN墴 EVgSo$E܈ Iohđ{;J4~xQ4o7 GlruV{p Eq9AAm{4 8僧U3&-;yb9'.uFPiֿ؅yFeԠFy5+ܐn59Tu; h4c\C,* _gD3>dP% d;| MjKoqofދYlSnHJiiXPԤ &kU4 'URWVOiu8#lAZ垲vŰmǚ *#,1EFd⊷soraPV:iC7;iIUI.ǚt]g+3)caR( L*3({5oz 7Ti67$)0j!xTfob܏W4uqAi}KOk3YC٭P\1s֥mk{k^3l9=z.S'j 66UqkײѨׯX s*XʋuBWT|[][s+2#uh)5?|U^8O En{Rc4=JUxnEA\P h1 ~qڣ5_28]Kqg#B!TXԵL39u\]VD\5a *ۧ&:gԺt6̳  VI#j.v[^Qozn2']8e!hIT$Pox'hvXr(zX]۴m*/)F&&* N KZF4^Q +6)+hs^C@rQ єV^y4}m)FiѠ\^q9PCG3Z+z32RuݓVi4'bʸ21Q׺,!c"2qNOdny"i>7(~;M]HaU7J"6=2[f)!T{0; xiSO8ut˫ḣaQ3RAaF'd>sxgoVj1NGԷ%v$|]:;c4>-N_`:q-C{Y"*5:I!I_/@ǚGYME"sU,Eؼxv>*jiYTPZIIv fIPW#l2G*׫#ypQAq:*ధ]e8У(ɪ[NOaH4i}E $"Ber,~R_IQ]S[L?UhX>@]ѧf畤kv;K =>h':r8[RPu4 򇑷EU1BQ; 5~hQZcukyݎ}Wq G eTd& m]\?=|RǧTJR6"x"-8sZ\_}8Пԉ? lb*%2~8@T~!\2y~h4[CEM%RІwPg}sq53Z-֕sbVU8n{蚼V7Q"[A"ϥ)^qΎ'Uh9Ǯ]GIui6\Km=-SdHqI331)#gWgiĄb[đD 'Uz̛rN-\f7P Ug';TkϥJ8X &OڊZlg$df^;O3rI!Ri8H-ctXc[hseq[.`sFIR[-b&9P99丵ԓIzs&$S^GrF;y- $B-n"M9 c4 ]%q{В T *V/*/5%be<9?Oxʯ?֗%K04$z/ ܓL<jB h3w U W;}9'WScjvDKkY_6N2ąPBqaP;SuǦ$ XpM͠c1p*aTPJ後1.e*7b5c|TF>sZO% cU(-;E{ ?cE.5p屿,񊑏MPibQFqڝk!REI42zqƥry#}66f9C 1'hӕFkP A:>N;H ϶[KPXn3NI8Y(ɮXX5RhP,:HAn%EQog{=AB$9$qAuOHXi0B&]lP/Fh&Q% 84}nm8bzZh. $yM]>#է]\P~PqG5g:u-:,n>5Vp~h(~b59AנF1s 05l]0ҲէzA<8b]Gu 2y'=SwI RUG#`STPdt%Q5uř9#=m @!Iz SVӆH*ipclцؑ!gԡ-#7yeXG?jl] Ku;.`[2ù=%ȷ9۰~LmJY@ªG*V)j:h]-ˈo`-[lz^H1IN VДB'\mXOXhK6hDt͉$8)>%.dD>-UgF@@2Z뷶#djS,NAzAw \UTlncK%TqAu9?4pZgʌjU4{6>Atޝ{ @;&t]n}p5#QjrF;pjmch){8#z u%0vyo.bہ߽s G065j2HLsß2`;%֒4'6PAPփlL&F8Q c=N ʫv}ԍͬn=diNTsa;@&d_feF{WEcf3X^'@8#ѼXY^>h7AD'K Ȑ)Ukk2LU(:lI-4CɺI`U/6T[Cl/Ue vZkPllW}Yzs D<4Π+L1KmıuB"4khEeiFE:mbhck0`w%O-3):U -9[bGokt]NIhcR[L6h,PkW24f;mĕX4b5 |!iJEA=!$q̏ G^>]܂ =1NXʤMS-Z94>Oz*.&N&{}/V9MmO>XgGonW%@xL+#|K*DP.RZ6aәG >~'ck8y|)7ùB9?a@ Nb!e%Z\^˲ȫܩek;@Ŋg"Ajoekm [(5` 4:6{F;TW%:<Җ d59$F8gXt2o9(#:7I\e6kx\EZu3Mrx(:_P'bZK}h$n-d@kH 1@51}GQPw(F=*զ , Jzn]&y-y2HVop'*"MzP0_<ݓ\I޺6/sA5jӺiKDF6cI}>kcFAFKdA,as]a@HƃCFGeAژ:{wޣ"3w(ϊa.96HZh %]_JMxAYnuaeh h2 aq}\Iٿ ǽnvwډ +*C`xНUv ~h+Wh'R]"5m[g(*-bg =xvqɬ~mi%v 62kni ^hF~w|o%`ϊ +#{]3˽bJZۜ$ K@} ,Z4w2){qHU!Ri~g VKYi$x%6_Uʮǰ6Q) `f=!i3`j&kƼTP 0LZT:l$@K ’nVlWSLZ8AnQ쵋X3&8 >(%"HK!n;T|28rƚ#mqPJ$\BjV.ECɭA u7'ڋE;I$~_PmݼvOOV֡Rʖ JtטKt =X5`a1lfK}gKx 6ԊImnV'?5hU/c2eHS$Wji#>m5dLGk$J1T'A!HW9ҮzhCf͟O\8QQJީ*FFg۟Cr18SxFAdRIT-~)kI4b{cbNjVKmcPP9 ?SGRi. ZѵAiSIp@ROA{dh#;AGp_SUo G*{Y"E7i.@gQi D._)'#%i1VVpsqSl=[!YQ]ZťWyCJ$. ]l,wڹ=3@$޴Iu%e\k (Ӝ[z( >U70{ T'퐟Z=C>yuΤ qjҶ5ܗ;c4] k28>H$: ?SvJ" N+l@*$UK`XABLCAfu7ݾǜQw4'v zD0v&mgXeM$vLL_m l&cm9gzk+C7 Oe=pw Bx`Uryd=iq a]i6rGqg "Xfe>r{օiKh&#9 jl6PX$MI}p7)>Mz{E'!;ɩv .ު:" &f$XrIvY,̖뼱%?KTRҜp57ۀX P)зqh)%ڜGi ,lϷ7Lq_P&M ^=>;T~XZ;E:Orp 7-Y'Ǻ5 "uӍI2K飃NBAF[Yꑨumbs\)XG6^lyr| \:LU;(O/[I"+p$k =4[A#}z R[x.0~~6@szTeUw;֧'O]][*\PK[>>h#d#0*{M=W }d0IS@_5W%ݼNTxU8WR8%10$Ln0; R,?o׃ _ F&K9QQ#,QE-r=R=5gGj(N<~ӱx̠4 / tm7TX$ԝ}BoR+)=#)1 /jc]Zds ˯ڂL3+~f^>k=}#m%Vr^Om ђ$MV-../K[M 'ˬcl" [vV7t1di ˠ~A2Y琠jF]#⠛[Eg5u1Vqh,_{ ITHa!E QQkhKX HiMnݷ& ?xL1=mѭf}d rOsN\BEl<枉lë9io| Hٚ⟲{G]Tew6Ѱawd42;fX-1=gT;v+{8Ȧde APiϬhvOPzM8c2U~oL '>iљD|PEB OETJ豌q24ַ|bFbABl^Zj2jq yk(^M؜46vF; N/c(rsQ]%UX65c™H8帩7(uVbe&6 /v㓺;K`-WU䕭xƗG`ߧ4!a g"KRy19Tzj?Dis+t ?HZ(+1GoPI\yn皰?UHLːm9_ Av8f$VޥqX? -̀~P2z(3 1o}X4wVk8;2(W ڼ ix>hqUa;&~NIzcO Nf.B~P~an0:}EwcV UbfsCP֫49$j]#SI:Z{Xuf#EHl^ݵJ299Mu 6&GV&߱# <~-i.ms~3}FjKKc+TP~{%ݪ [W %Xda4ePC&3_CR0IJMhM8YIUEcbgxs2m5%s *[<h$Tks7\! R{f {Aq6sᴉ~O!j\L`x>h&&$ 0>{oꦽ,a^.[+3PWnۋ4VQ BG]tuPwO=#Gsnkm2XAӕQ⃛OvY?c: ˮn|bK;xp t(e:t< ,PRjq$WGzLP3amP{.-m QMK9aL$Nž'=<$wVF8@|b+ig $l9"  ԣ:c 8qA1+nMNilsqy]%O{I>h!t>L^bM"}P'S}-lL"Q'  tW){p|,Ej$/z{Cv6KvD%}zAIb89 d桵w(ltMG:G0h2 Q,Mr4U\Xc6Kjk6xl戋@b=UQ&cd䓟H/V&$7!sIɡ"zR A\ަӣԌTˑ5hnYfD9`O,|^|Iݚp_E8bc= FB7-ޕ ^1Y-m`;GF}4T8"(94#qM|[){,k(ǻ1K7Z;i݁=.=g`(P‡R[-//T!;5"q,;)," K_icq(!ʨSRG%4ZeLHP٘s9NL6юڅ5w5Ď#E;|( G 4@i,cgwu!OjJ,ۡ*0֥g DZSUirD!XQv]+LP2#|cp U_v=2X˖"3q!1[|yc^f؜7 `?jS`B@ |2C N1DZ d$s^; ;tuY3 4U&@(<צ̣fx{+RT>h# -쓛u e̦8%Ls@ mZAgHGpшUGqE# {|w'ֈC N.'@fpiJ)*"[4_jObct+&FiHnT@>)ƲyiO꼶O:e-qexPiZ,ݥRSߥy/jQA_| V%:-+DYcdc'' 4,}+~,+vYk韞h4Msr|f@0ciPc`;Q2?at6 ]2@H">PfrOѨ;$vҕԖ-s1~kDm<)ES" \=gWGɢ@Y$A(`T\srJ6ʸ9١!I$m{iVHXr1vZKh[8A\K s?9ǣ4ᘜެjbά`;,0jW(Q⎷UnLq$@ӵ֐󊋻Py)'.IcCZB 1Gj OH|y m\|um.su,vj b;Pkǹ1XjHRVI{$Iy4#d!T5)e-QMRHX0j{15 GE"q$ d'4p1?)d+1y/\41\]4Io)$.[{L} "Y)QCuvr7{ ^G[tRUko^LFN}ԩkBvo㳶U>At햑d̒<k@Qxebeo Bۄɭ;K+b$ڠm窨ݙA)4#eRIkoWHQMw3,k&"J< 2DI 揊1 O` J@Up>[ n.I]sAJ~(v#@C]6țj4eo Or/Qh 2GJQ**)w$LsmO7w~o.2]? In.- \(Wp?)M[cF *>u w<ʱ(]޳c =簠0M:<Ƈ oJiH}F@g |lN[C$^zD:d02LI-($-#pnsSlٵ8~(HiAKw!ow<‟∴tFfQV) g'p&#^yUitE:tM +([{%1Ě K2>G˷sxdIW楚xDj8TY2\+3/sqO-*=Y_X_h6 αM ΥQGpjqx؎nٙ| -.Ac)otPߠP$>*:WOquZ S>FhYd6{`El|(l~>J.LLIޣm5*|ymQ-ԉ%]{b)yY"_Thp)Vpo# Ѩ !ju- |ѦE^4]ʦڬg,..T4HO#KEo8u < @ɵicϱvw*0ڤ0|s@Xx&K[T13hdFݠq dۜ"5 pP4iW{Ā 9V33z\PT8UKkil(E#$OzbsU\nڲ0iL4+RVWZs[/"^x$t 9?Mlf:sNbdsɺxis,I')FYWw;0m-sڙL>jz1\cځtNqMܼQ)p=iE&NM-k#A@2L=G,OơFHJ)x"*AHb8[6qzv\5)0"1x&b4X\D^Pd>HrqnEH By_4c$vӨB"sR (QH1'_~!Y Rq5ݮ'$)l1{8MT_Mpqmi޷ )jnhZW?OP`)qclc/j"N-*{fx7 $jCxSO &YHɩ( Fy8_&TJ\M7yqo`roKQ!sHO]is#O7qD˨qzV0lAԍ Q,!4H'`P?x3C2K*:+sph,30rbbtSc܌T]4=Rȍ:YR76{WD:$SM< *~ H$!c^#nM1DS`f~Yc.=egg%1cC-C@n|P=N2]3BNNA+7A]H(p='׉GAVu{:[&PusIq^$B!CM] ŗW>5ޫi92 ޵IznQǩ}a!Y?QOWoNcU~h-M6@0w4uLٳ 2?N*I-շFb[Mh}"Wg7gwN!xiS[j˵v 'μ SFu.ԍ#t&K =r^C[4]5Hlc 3(|1"<_~N"N}f fFX[@]a>("QBh{0Qvr94#mR.=qA1?2#Z H$HLqhY22_ݴΉ6ɭk}^ wzPym-, AD6E&>ElIM1;5t:Q$5yKG6zۡGI5,X6ۀ yCaϵ()pN7W5 mOid#ڨ `ҭ B8bHqdQ#;[Hsyj!asj *{ Gֱn܎(G>PH^i?ry.&i\ R6)ydUC|C[ʗGp7SE%+0PE2TڸŲb*(%#rZ8̍Oj !p֮bYO1*C3ޙ}Jfiq'5C,m$Ph-Gx\I;5 iHֻm~z]bQ#v94{bj$g+ơ5q{1'ڀ[G,|)zѠX=r@aāA#"ˋGbyTTC~[E>ij KdXQ5F8Cч(Ys8I 2)A6y&=tXN1.~o-2?ȼ1>oq ׁ A]OilDV¶i}6 z%#.~Euӝ>ӻ8 [ܖdv~w&2}Ɓky\eh#H`4桧F*zD.&q⸖|( `Ӯp|⟇FnB.sJI1$s@:CA#QR#& `Oz@)K' %3޽ERh/%+AeJJ:0QzD#,P%K{X}(C5 HÌBǽBOm{mq.h$P%MfyG,4"A'8(q" y Ao@iHPLr~jƻ˺ނը A${5Oo9i'-F}m WΣ4i!m˸757ks8Y~)VF-̏OLjM6>ݨ$$lQ܊gԖ9}Vڇ,sL[٬Dh+[tfRLJF婸8 v'ɠm+ Uwk82XJ^'v2q a<抑wM4 v؝Al1q^kc&OPCqi;AUX)VlědjX1?aOo'W?zR*ɠk}æ~Ԁ!9URK ^sNifcԌs}3WvgJQ0QXc R&a eu3ŽiY%UP?Jm&q]h1v0񪓽G@qkcw@ lk(=.{TmP;|! b 4C , "ڙ3()J;jIxXFrn'G>ECj  `/`}[͸ +ΐH~]iPDW2gsa|SD̎@11$SMyTpj^Uq p؃>j&{y q(׊r&l 5 yFP$c@5]bBp3Y 8P7⡟OH1'䗌78C[Q>sMZ钺;sdcM66!8푚I%t,(Lw9}6}ݻ#fQ_{7 |!A [W&/,Vȡ731ކ[39Gj8!lq@[}(l@;QiJ%)Hb89튽Kw8 7.99#<(%a^ݼycp<Nk®O.G 1s@p{Ik8&D n+!4ɑP*[ڸcQ3K! "-A6?:D$A #qKހ}HG @Ha9884c]qPtMʛdnSʡiD l@H͐+8g'؀0"EP8;~E`?5ŠÁi Ɏꁌ˰Fm*'VUp00D#\3R2T=l)hӃJ{vH)c5R+TRA|f,Pʹc ۬b9O}fn3U5Ii>*OunX7ޣm:W恛}>%\o"mf) ௴m5\KDb7vnu'r+`c 3:0dq+L([WXHuX)4;tr?~AKtΥzVS5nY HAK*֪+cFA`=Sa :8,(\roj/KK&\񺇗ܸi(#憗..1IdrGli=BϨ4=ơq OSV5$n~>UPu h?Nh]zH3(,}"Lnv1cO)tl݉#=L!UDj:;%Y&o:-9#QMԷqXWr oͭRJ"WQmء>A{7Ϳ`WA40)1T34] n4 ܘیjᵖÐMpC#CYb`8sQr+vbA4x?5/ee .PYaOq)ekҗ`(&yb1Pw!7N߿>854 )'>){}q=mLdӐfZm3@}i't/H`[qbQ9DfUCQJmmI Š=C>h ~QA sy91pOȩ #CHH}G";a[ڂ.IqJsڸ'TZP\S@\ rh:ed׍ֻQxBH pk${4=5jOJwHh4iqi F)I#,NȠ9M{a')QTdJ<1@0;O)7S(Cr(Woxtw⁏|W0'88,iŷ?A+H #E^EQf>+恐ߔbwY6>ԍ!Ž>h=|bXv6&s$D;~iAI@8I9|ҘO_i3dF hORX3&>i[%'89<6#enFxH{a;Tq#s\7C q9- hRlS7Iq٠u{X4 ÎD^kHH@o3nӴ`AEgy&T(^OU%S!>֋oK%bq]-vALKXpVRAحX6x[pM<ۏ01AL6׬D%A-.=w^qklP81Q;h>"1`yasZV"iRMa&d Nҍmh,q[Gt%?Z@l|Aϣټm= G/Niťq?{yd1rF_e ".O")/4 _종:ZMi"$۬53ulNg4o斚-ktfurA/J;?xi&a龴obSR;Vs,wsb*ʨ6R'1uN[3.[ۯ}|k3_FU#O-einW7~f=/eeæ{(h>ߊmcW.,P6eڊO/ :[r<`y D6>(3$.C1]y|}h⁋Œe|s3SOd-!%7|efSylI6}3Ud2chіrY2~\pлfsb";tG?K sOF0|f5g'tO G"D!]||Т7yGR ŐzdHg;!7ɹi.= *Ŀv"$v5+2._ B4pXcn _&yT<$rOoA Node-path: trunk/prototype/data/images/background2_cmap.png Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2584 Text-content-md5: df53ad2ca9ce602ffca49e2353fd3ce9 Content-length: 2594 PROPS-END PNG  IHDR,gAMA aPLTE  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~bKGDH oFFsuG pHYs  ~tIME  !M9? yIDATxڋrUa=Px A+ 2!6=9| l*W难v ݼ/aHSBKs-iAExc,WGTv'֙* M fn sߤod)HS7 8Яmnґ2ag)XL//ΆۡYfKCu,Koۤ)(tafܓؔԧ[9=̚Yfz1 sg[,0g9\L[((>߱2afݤ0mҫKSlj7X,Ku\"06 L)@6%@6e(rJ^K9?Sl*LSl]ؔWaҽb,)@6 ޽P,燙u>s*Y PS&̚0/2S,Ua Pg?:Y8}4gg9%̚Y:IOSeX.|(lg9?Y:5(,>pua\d(@v047afݤ+/>sìI;<(@ P|a8\ۋ&%Ǘ< }r l 0Kny(e0di`/(@ 00e9?̬{/F 0Kd,KYsv.vu(;v^Y7`v }2,(gY*̚Ym`]d(@ PB㳌̺IWbcLlI;(@ sz'X&1|;{E 0KO;zY &\lJ`< 13.2(rm/ƚt{E 0K\,K>Kb%(@ ܳP,+r0(,|yhn̺I;->e:/2e\Lya(YXsu(@f /B㳜f, v[`f¬^d)@f %93&\lɁ-@f -/CY(f,6o|{(@v~16iYz1> PY#aҹX-@f @e,KY&Kbd)@ P O0n˽(,zWu¬I÷)aRx`lnk{1ߤ%םdž>Kb9,(,ͲTe4kl P`3oBs̺IWlbs+e0kne)@ P=wUub̺I%wg\,7K 0K\x,f,6/2a P_ X\=-IENDB` Node-path: trunk/prototype/data/resources.scr Node-kind: file Node-action: change Text-content-length: 1676 Text-content-md5: 5fccec375980ff85ec4bfbde70cc4f52 Content-length: 1676 background = data/images/background.jpg (type=surface, x=0, y=0, width=640, height=480); background_cmap = data/images/background_cmap.png (type=surface, x=0, y=0, width=640, height=480); mogli_back = data/images/lmogli_back.png (type=surface, x=0, y=0, width=52, height=86, array=5x1); mogli_front = data/images/lmogli_front.png (type=surface, x=0, y=0, width=52, height=86, array=8x1); mogli_left = data/images/lmogli_left.png (type=surface, x=0, y=0, width=52, height=86, array=8x1); mogli_right = data/images/lmogli_right.png (type=surface, x=0, y=0, width=52, height=86, array=8x1); tree = data/images/tree.png (type=surface, x=0, y=0, width=198, height=219); odd = data/images/odd.png (type=surface, x=0, y=0, width=84, height=166); coin = data/images/coin.png (type=surface, x=0, y=0, width=128, height=128); font = data/images/font.png (type=font, alphafont=1, spacelen=8, trans_limit=0.25, subtract_width=0,letters="!""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); takeme = data/images/takeme.png (type=surface, x=0, y=0, width=40, height=36); chest_closed = data/images/chest_closed.png (type=surface, x=0, y=0, width=92, height=64); chest_opened = data/images/chest_opened.png (type=surface, x=0, y=0, width=92, height=64); door_opened = data/images/door_opened.png (type=surface, x=0, y=0, width=88, height=58); door_closed = data/images/door_closed.png (type=surface, x=0, y=0, width=88, height=58); background2 = data/images/background2.jpg (type=surface, x=0, y=0, width=640, height=480); background2_cmap = data/images/background2_cmap.png (type=surface, x=0, y=0, width=640, height=480); // EOF // Node-path: trunk/prototype/guile/objects.scm Node-kind: file Node-action: change Text-content-length: 7904 Text-content-md5: 738675367d201c1bd5cf7276be14370f Content-length: 7904 (println "Loading objects.scm...") (define-class ()) (define-method name ((obj )) "takeme") (define-method use ((obj )) (println "Got takeme")) ;; Defining objects (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class () (broken #:init-value #f #:accessor broken)) (define-class () (closed #:init-value #t #:accessor closed)) (define-class () (state #:init-value 'off #:accessor state) (broken #:init-value #f #:accessor broken)) (define-class () (state #:init-value 'closed #:accessor state)) (define-class ()) (define-class () (closed #:init-value #t #:accessor closed)) (define-method name ((obj )) "chest") (define-method gopen ((obj )) (println "name: " (name obj)) (println "gopen1: " obj) (println "gopen2: " (adv:bind obj)) (cond ((closed obj) (advent:set-surface (adv:bind obj) "chest_opened") (set! (closed obj) #f) (println "Open chest")) (else (advent:set-surface (adv:bind obj) "chest_closed") (println "Closed chest") (set! (closed obj) #t)) )) (define-method name ((obj )) "tree") (define-method name ((obj )) "forest") (define-method name ((obj )) "house") (define-method name ((obj )) "Indy") (define-method name ((obj )) "whip") (define-method name ((obj )) "box") (define-method name ((obj )) "switch") (define-method name ((obj )) "book") (define-method name ((obj )) "window") (define-method name ((obj )) "door") ;; Around (define-class () (light #:init-value #f #:accessor light)) (define-method name ((obj )) "around") (define-method name ((obj )) "around") (define-method look ((obj )) (println "A large mamut tree, wow!")) (define-method look ((obj )) (if (broken obj) (println "You see a broken window, looks like you broke it.") (println "A beatifull large window"))) (define-method look ((obj )) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (define-method look ((obj )) (cond ((light obj) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (else (println "You can't see anything, its dark.")))) (define-method use ((obj )) (println "Unknown object")) (define-method look ((obj )) (println "You read a book full of wisdom.")) (define-method gclose ((obj )) (println "You close the book.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "Don't now how to use this unknown thing with a whip")) (define-method use ((obj1 ) (obj2 )) (cond ((equal? (state obj2) 'closed) (set! (state obj2) 'opened) (println "You slap the box and it openes.")) (else (println "You don't need to slap the box, its already opened.")))) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the switch... and it breaks...") (set! (broken obj2) #t)) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the window and it cracks! Woops...") (set! (broken obj2) #t)) (define-method use ((obj )) (if (broken obj) (println "The switch is broken, you can not use it.") (cond ((equal? (state obj) 'off) (println "You press the switch and the light goes on.") (set! (state obj) 'on) (set! (light (get-obj "around")) #t)) (else (println "You press the switch again and the light goes off.") (set! (state obj) 'off) (set! (light (get-obj "around")) #f) )))) (define-method look ((obj )) (if (broken obj) (println "Looks like the switch is broken and unusable") (cond ((equal? (state obj) 'off) (println "The switch is on state `off'")) (else (println "The switch is on state `on'"))))) (define-method use ((obj )) (println "Don't know what I should do with " (name obj))) (define-method use ((obj1 ) (obj2 )) (println "Don't know how to combine " (name obj1) " and " (name obj2) ".")) (define-method look ((obj )) (println "Don't know what you mean")) (define-method look ((obj )) (println "You see a " (name obj) ", nothing special.")) (define-method look ((house )) (println "You see a cool house.")) (define-method look ((whip )) (println "This is indys cool whip")) (define-method look ((box )) (cond ((equal? 'closed (state box)) (println "The box is closed.")) (else (println "The box is open.")) )) (define-method gopen ((box )) (if ((equal? (state box) 'closed)) (println "You can't openen the box, its looked.") (println "Its already opened."))) (define-method pickup ((obj )) (println "Don't know what you mean")) (define-method pickup ((obj )) (println "Don't know how to pickup this " (name obj))) (define-method pickup ((box )) (println "This box is to heavy to carry it around.")) (define-method pickup ((book )) (scenario:remove-obj book) (add-inventory book)) (define-method pickup ((whip )) (scenario:remove-obj whip) (add-inventory whip)) (define-method walk ((forest )) (println "You walk int the forest.") (scenario:set *forest*) ) (define-method walk ((house )) (println "You walk into the house.") (scenario:set *in-house*)) (define-method gopen ((obj )) (cond ((closed obj) (advent:set-surface (adv:bind obj) "door_opened") (set! (closed obj) #f)) (else (advent:set-surface (adv:bind obj) "door_closed") (set! (closed obj) #t)))) ;;(define-method walk ((obj )) ;; (println "You walk out of the door, you are outsite again.") ;; (scenario:set *before-house*)) (define-method use ((obj )) (println "You use your whip and slap yourself, stupid!")) (define *before-house* (list (make ) (make ) (make ) (make ) (make ) (make ) (make ) (make ) )) (define *in-house* (list (make ) (make ) (make ) )) (define *forest* (list (make )) ) (define *gateway* (list (make ) ; (make #:adv:bind (advent:makeobj "takeme2" "takeme" 320 100 150)) (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)) )) (println "Creating game-scenario:gateway-objects") (define game-scenario:gateway-objects (list (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)))) (define game-scenario:gateway-bind (scenario:make-bind "game-scenario:gateway" "background2" "background2_cmap" (map (lambda (x) (adv:bind x)) game-scenario:gateway-objects))) (define game-scenario:gateway (make #:adv:bind game-scenario:gateway-bind #:adv:objs game-scenario:gateway-objects )) (println "Scenario: " game-scenario:gateway) (scenario:set-current game-scenario:gateway-bind) ;; EOF ;; Revision-number: 6 Prop-content-length: 126 Content-length: 126 K 7 svn:log V 24 smobified the sceneario K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-29T10:15:32.000000Z PROPS-END Node-path: trunk/prototype/ScenarioSmob.cc Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 2750 Text-content-md5: 089574980e854bb63014b49acb5c6aba Content-length: 2760 PROPS-END // $Id: ScenarioSmob.cc,v 1.1 2000/12/29 10:15:32 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "Advent.hh" #include "GuileAdventObj.hh" #include "Scenario.hh" #include "ScenarioSmob.hh" long ScenarioSmob::tag; struct ScenarioSmobStruct { int i; Scenario* scenario; }; void ScenarioSmob::init () { tag = scm_make_smob_type ("ScenarioSmob", // How is this used? sizeof (ScenarioSmobStruct)); gh_new_procedure4_0("scenario:make-bind", &ScenarioSmob::make_bind); gh_new_procedure1_0("scenario:set-current", &ScenarioSmob::set_current_scenario); } SCM ScenarioSmob::make_bind (SCM scenario_name, SCM background_surface, SCM colmap_surface, SCM objects) { ScenarioSmobStruct* obj = (ScenarioSmobStruct*)scm_must_malloc (sizeof (ScenarioSmobStruct), "ScenarioSmobStruct"); std::list objs; // FIXME:... while (!scm_null_p(objects)) { GuileAdventObj* obj = reinterpret_cast(SCM_CAR (objects)); std::cout << "ScenarioSmob: adding object" << std::endl; std::cout << "SCenarioSmob: ObjName: " << obj->get_name () << std::endl; objs.push_back (obj); objects = SCM_CDR (objects); } obj->scenario = new Scenario (SCM_CHARS (scenario_name), SCM_CHARS (background_surface), SCM_CHARS (colmap_surface), objs); obj->i = 42; std::cout << "Scenario Pointer: " << obj->scenario << " " << obj->i << std::endl; Scenario::scenario_list.push_back (obj->scenario); Scenario::current = obj->scenario; SCM_RETURN_NEWSMOB (tag, obj); } SCM ScenarioSmob::set_current_scenario (SCM scenario_bind) { //char* str = SCM_CHARS (scenario_name); ScenarioSmobStruct* p = reinterpret_cast(SCM_CDR(scenario_bind)); std::cout << "+++ Scenario Pointer: " << p->scenario << " " << p->i << std::endl; Scenario::set_current_scenario (p->scenario); return SCM_UNSPECIFIED; } /* EOF */ Node-path: trunk/prototype/ScenarioSmob.hh Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 1473 Text-content-md5: 946f00b3c037f8b721e98b33409f082a Content-length: 1483 PROPS-END // $Id: ScenarioSmob.hh,v 1.1 2000/12/29 10:15:32 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef SCENARIOSMOB_HH #define SCENARIOSMOB_HH class ScenarioSmob { private: /// The uniq id of this object type, only used by the guile internals static long tag; public: /// Register the smob to guile static void init (); //static SCM mark_obj (SCM smob); //static scm_sizet free_obj (SCM smob); //static int print_obj (SCM smob, SCM port, scm_print_state *pstate); static SCM set_current_scenario (SCM scenario_bind); static SCM make_bind (SCM scenario_name, SCM background_surface, SCM colmap_surface, SCM objects); }; #endif /* EOF */ Revision-number: 7 Prop-content-length: 128 Content-length: 128 K 7 svn:log V 26 *** empty log message *** K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-29T14:11:00.000000Z PROPS-END Node-path: trunk/prototype/configure Node-action: delete Revision-number: 8 Prop-content-length: 125 Content-length: 125 K 7 svn:log V 23 Added another scenario K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-29T15:57:51.000000Z PROPS-END Node-path: trunk/prototype/Advent.cc Node-kind: file Node-action: change Text-content-length: 3811 Text-content-md5: 1ba5f34b23be2ee1b23531f571cfc03a Content-length: 3811 // $Id: Advent.cc,v 1.3 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Scenario.hh" #include "Coin.hh" #include "Advent.hh" #include "Font.hh" #include "AdventObjSmob.hh" #include "ScenarioSmob.hh" Advent app; Inventory inventory; // Wrapper to call the member func void inner_main (void* closure, int argc, char* argv[]) { app.inner_main (closure, argc, argv); } Advent::Advent () { } char* Advent::get_title () { return "Advent - Prototype"; } int Advent::main (int argc, char* argv[]) { std::cout << "Starting guile..." << std::endl; scm_boot_guile (argc, argv,::inner_main, 0); std::cout << "this should never be reached..." << std::endl; return 0; } void Advent::inner_main (void* closure, int argc, char* argv[]) { bool fullscreen = false; std::cout << "Loading guile code..." << std::endl; AdventObjSmob::init (); ScenarioSmob::init (); std::cout << "Loading guile code...done" << std::endl; if (argc == 2) { if (strcmp (argv[1], "--fullscreen") == 0) { fullscreen = true; } } try { std::cout << "Advent: Init ClanLib..." << std::endl; CL_SetupCore::init (); CL_SetupCore::init_display (); CL_SetupPNG::init (); CL_SetupJPEG::init (); CL_Display::set_videomode (640, 480, 16, fullscreen, false); resource = CL_ResourceManager::create("data/resources.scr", false); //Scenario scenario; Coin coin; std::cout << "Loading guile code..." << std::endl; gh_load ("guile/adventure.scm"); std::cout << "Loading guile code...done" << std::endl; int time = CL_System::get_time (); int count = 0; char str[256] = {"Calculation"}; //gh_eval_str("(let ((obj (advent:makeobj \"testobj\" \"takeme\" 400 100 100))) (println obj))"); assert (Scenario::current); while (CL_Keyboard::get_keycode (CL_KEY_ESCAPE) == 0) { //std::cout << "Looping..." << std::endl; //CL_Display::fill_rect (CL_Mouse::get_x (), CL_Mouse::get_y (), //CL_Mouse::get_x () + 16, CL_Mouse::get_y () + 16, //1.0, 1.0, 1.0, 1.0); //CL_Display::clear_display (1.0, 1.0, 0.0, 0.01); Scenario::current->update (); coin.update (); Scenario::current->draw (); coin.draw (); font ("font")->print_left (0, 0, str); if (count > 9) { int time_diff = CL_System::get_time () - time; //std::cout << "fps: " << 10000.0 / time_diff << std::endl; sprintf (str, "fps: %f", 10000.0 / time_diff); //std::cout << "Str: " << str << std::endl; count = 0; time = CL_System::get_time (); } CL_Display::flip_display (); count++; CL_System::keep_alive (); } CL_SetupJPEG::deinit (); CL_SetupPNG::deinit (); CL_SetupCore::deinit_display (); CL_SetupCore::deinit (); } catch (CL_Error err) { std::cout << "CL_Error: " << err.message << std::endl; } } /* EOF */ Node-path: trunk/prototype/AdventObjSmob.cc Node-kind: file Node-action: change Text-content-length: 3372 Text-content-md5: fe10a06ca7a4456fa5f7031eec918417 Content-length: 3372 // $Id: AdventObjSmob.cc,v 1.3 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include #include "Advent.hh" #include "AdventObj.hh" #include "GuileAdventObj.hh" #include "AdventObjSmob.hh" #include "Scenario.hh" long AdventObjSmob::tag; void AdventObjSmob::init () { tag = scm_make_smob_type ("AdventObj", sizeof (AdventObjP)); scm_set_smob_mark (tag, &AdventObjSmob::mark_obj); scm_set_smob_free (tag, &AdventObjSmob::free_obj); scm_set_smob_print (tag, &AdventObjSmob::print_obj); gh_new_procedure5_0("advent:makeobj", AdventObjSmob::make_obj); gh_new_procedure2_0("advent:set-surface", AdventObjSmob::set_surface); } SCM AdventObjSmob::mark_obj (SCM smob) { return SCM_UNSPECIFIED; } scm_sizet AdventObjSmob::free_obj (SCM smob) { std::cout << "Freeing object..." << std::endl; //AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); // delete obj; // do nothing return 0; } int AdventObjSmob::print_obj (SCM smob, SCM port, scm_print_state *pstate) { std::cout << "Printing object..." << std::endl; AdventObjP* obj = reinterpret_cast(SCM_CDR (smob)); if (obj) { std::cout << "STR: " << obj->obj->get_name () << std::endl; scm_puts ("#", port); } else { scm_puts ("#", port); } /* non-zero means success */ return 1; } SCM AdventObjSmob::make_obj (SCM name, SCM surface, SCM x_pos, SCM y_pos, SCM z_pos) { std::cout << "AdventObjSmob: make_obj()" << std::endl; AdventObjP* obj = (AdventObjP*)scm_must_malloc (sizeof (AdventObjP), "AdventObjP"); obj->obj = new GuileAdventObj (0, SCM_CHARS(name), 1, CL_Surface (SCM_CHARS(surface), app.get_resource ()), CL_Vector (SCM_INUM(x_pos), SCM_INUM(y_pos), SCM_INUM(z_pos))); std::cout << "AdventObjSmob: Makeing object: " << obj << " "<< obj->obj << std::endl; //Scenario::current->add (obj->obj); SCM_RETURN_NEWSMOB (tag, obj); } SCM AdventObjSmob::set_surface (SCM smob, SCM name) { std::cout << "Setting surface" << std::endl; AdventObjP* advobj = reinterpret_cast(SCM_CDR (smob)); if (advobj) { char* str = SCM_CHARS(name); puts ("set_surface..."); puts (str); std::cout << "Pointer: " << advobj << " " << advobj->obj << std::endl; advobj->obj->set_surface (str); } else { std::cout << "KAPUTT" << std::endl; } return SCM_UNSPECIFIED; } /* EOF */ Node-path: trunk/prototype/AdventObjSmob.hh Node-kind: file Node-action: change Text-content-length: 1415 Text-content-md5: b287eb4137f2db98d1221460ac7d985e Content-length: 1415 // $Id: AdventObjSmob.hh,v 1.2 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ADVENTOBJSMOB_HH #define ADVENTOBJSMOB_HH #include "GuileAdventObj.hh" struct AdventObjP { GuileAdventObj* obj; }; class AdventObjSmob { private: static long tag; public: static void init (); static SCM mark_obj (SCM smob); static scm_sizet free_obj (SCM smob); static int print_obj (SCM smob, SCM port, scm_print_state *pstate); static SCM make_obj (SCM name, SCM surface, SCM x_pos, SCM y_pos, SCM z_pos); static SCM set_surface (SCM obj, SCM name); }; #endif /* EOF */ Node-path: trunk/prototype/Coin.cc Node-kind: file Node-action: change Text-content-length: 3556 Text-content-md5: 43d166681d25deabfbe2d7d0c3ad382d Content-length: 3556 // $Id: Coin.cc,v 1.3 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "GuileAdventObj.hh" #include "Font.hh" #include "AdventObj.hh" #include "Advent.hh" #include "Coin.hh" Coin::Coin () { visible = false; sur = CL_Surface ("coin", app.get_resource ()); on_button_press_slot = CL_Input::sig_button_press.connect (thCreateSlot(this, &Coin::on_button_press)); on_button_release_slot = CL_Input::sig_button_release.connect (thCreateSlot(this, &Coin::on_button_release)); marked_obj = 0; } void Coin::draw () { if (visible) { //std::cout << "Drawing..." << x_pos << " " << y_pos << std::endl; sur.put_screen (x_pos - sur.get_width ()/2, y_pos - sur.get_height ()/2); } AdventObj* obj = Scenario::current->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (obj) { font ("font")->print_center (320, 460, obj->get_name ().c_str ()); } } void Coin::update () { } void Coin::on_button_press(CL_InputDevice *device, const CL_Key &key) { std::cout << "Coin pressed: " << key.id << std::endl; if (key.id == 1) { std::cout << "Point Color: " << Scenario::current->get_colmap ()->get_pixel (key.x, key.y) << " " << key.x << "x" << key.y << std::endl; } else if (key.id == 2) { marked_obj = Scenario::current->get_object (CL_Mouse::get_x (), CL_Mouse::get_y ()); if (marked_obj) { visible = true; x_pos = (int) key.x; y_pos = (int)key.y; } } } void Coin::on_button_release (CL_InputDevice *device, const CL_Key &key) { //std::cout << "Coin released: " << key.id << std::endl; if (key.id == 2) { visible = false; GuileAdventObj* obj = dynamic_cast(marked_obj); if (!obj) { std::cout << "Don't know what to do with non GuileObj." << std::endl; } else { std::cout << "Action on: " << marked_obj->get_name () << std::endl; if (key.x > x_pos - sur.get_width ()/2 && key.x < x_pos + sur.get_width ()/2 && key.y > y_pos - sur.get_height ()/2 && key.y < y_pos + sur.get_height ()/2) { if (key.x < x_pos && key.y < y_pos) { std::cout << "Use" << std::endl; obj->call ("use", obj->get_name ()); } else if (key.x > x_pos && key.y < y_pos) { std::cout << "Open/Close" << std::endl; obj->call ("open", obj->get_name ()); } else if (key.x < x_pos && key.y > y_pos) { std::cout << "Pickup" << std::endl; obj->call ("pickup", obj->get_name ()); } else if (key.x > x_pos && key.y > y_pos) { std::cout << "Inventory" << std::endl; gh_eval_str ("(advent:eval \"inventory\")"); //obj->call ("pickup", obj->get_name ()); } } } } } /* EOF */ Node-path: trunk/prototype/Scenario.cc Node-kind: file Node-action: change Text-content-length: 3287 Text-content-md5: 5667d8c9060e6a2cdd3376c93f132f2b Content-length: 3287 // $Id: Scenario.cc,v 1.3 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Advent.hh" #include "GuileAdventObj.hh" #include "Position.hh" #include "Scenario.hh" /// std::list Scenario::scenario_list; /// Scenario* Scenario::current; void Scenario::set_current_scenario (std::string name) { for (std::list::iterator i = scenario_list.begin (); i != scenario_list.end (); i++) { if ((*i)->get_name () == name) { set_current_scenario (*i); return; } } assert (false); } void Scenario::set_current_scenario (Scenario* scenario) { assert (scenario); current = scenario; } Scenario::Scenario (std::string name, std::string background, std::string colmap, std::list objects) { this->name = name; this->background = new Background (background); this->colmap = new CollisionMap (colmap); this->objects = objects; this->objects.push_back (new Mogli ()); std::cout << "Objects: " << objects.size() << std::endl; std::cout << "Objects this: " << this->objects.size() << std::endl; } /* Scenario::Scenario () { objects.push_back (new GuileAdventObj (this, "odd" , 3, CL_Surface ("odd", app.get_resource ()), CL_Vector (340, 216, 230))); objects.push_back (new GuileAdventObj (this, "tree", 2, CL_Surface ("tree", app.get_resource ()), CL_Vector (0, 211, 255))); objects.push_back (new GuileAdventObj (this, "takeme", 1, CL_Surface ("takeme", app.get_resource ()), CL_Vector (236, 300, 240))); } */ Scenario::~Scenario () { } void Scenario::draw () { background->draw (); // CL_Display::clear_display (); objects.sort (AdventObj_less ()); for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->draw_world (); } } void Scenario::update () { for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { (*i)->update (); } background->update (); colmap->update (); } CollisionMap* Scenario::get_colmap () { return colmap; } AdventObj* Scenario::get_object (int x, int y) { //std::cout << "Objects: " << objects.size() << std::endl; AdventObj* obj = 0; for (std::list::iterator i = objects.begin (); i != objects.end (); i++) { if ((*i)->is_at (x, y)) obj = (*i); } return obj; } void Scenario::add (AdventObj* obj) { objects.push_back (obj); } /* EOF */ Node-path: trunk/prototype/ScenarioSmob.cc Node-kind: file Node-action: change Text-content-length: 2986 Text-content-md5: a3596f1094d0cf9759594f9066d2d0fb Content-length: 2986 // $Id: ScenarioSmob.cc,v 1.2 2000/12/29 15:57:50 grumbel Exp $ // // Pingus - A free Lemmings clone // Copyright (C) 2000 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "Advent.hh" #include "GuileAdventObj.hh" #include "Scenario.hh" #include "AdventObjSmob.hh" #include "ScenarioSmob.hh" long ScenarioSmob::tag; struct ScenarioSmobStruct { int i; Scenario* scenario; }; void ScenarioSmob::init () { tag = scm_make_smob_type ("ScenarioSmob", // How is this used? sizeof (ScenarioSmobStruct)); gh_new_procedure4_0("scenario:make-bind", &ScenarioSmob::make_bind); gh_new_procedure1_0("scenario:set-current", &ScenarioSmob::set_current_scenario); } SCM ScenarioSmob::make_bind (SCM scenario_name, SCM background_surface, SCM colmap_surface, SCM objects) { ScenarioSmobStruct* obj = (ScenarioSmobStruct*)scm_must_malloc (sizeof (ScenarioSmobStruct), "ScenarioSmobStruct"); std::list objs; // FIXME:... std::cout << "Objects...: " << std::endl; //scm_display (objects, gh_eval_str("(current-input-port)")); std::cout << "Objects...done " << std::endl; while (objects != SCM_EOL) { std::cout << "Adding object..." << std::endl; GuileAdventObj* obj = reinterpret_cast(SCM_CDAR (objects))->obj; std::cout << "ScenarioSmob: adding object" << std::endl; std::cout << "SCenarioSmob: ObjName: " << obj->get_name () << std::endl; objs.push_back (obj); objects = SCM_CDR (objects); } obj->scenario = new Scenario (SCM_CHARS (scenario_name), SCM_CHARS (background_surface), SCM_CHARS (colmap_surface), objs); obj->i = 42; std::cout << "Scenario Pointer: " << obj->scenario << " " << obj->i << std::endl; Scenario::scenario_list.push_back (obj->scenario); Scenario::current = obj->scenario; SCM_RETURN_NEWSMOB (tag, obj); } SCM ScenarioSmob::set_current_scenario (SCM scenario_bind) { //char* str = SCM_CHARS (scenario_name); ScenarioSmobStruct* p = reinterpret_cast(SCM_CDR(scenario_bind)); std::cout << "+++ Scenario Pointer: " << p->scenario << " " << p->i << std::endl; Scenario::set_current_scenario (p->scenario); return SCM_UNSPECIFIED; } /* EOF */ Node-path: trunk/prototype/guile/objects.scm Node-kind: file Node-action: change Text-content-length: 8507 Text-content-md5: a0f5a4ecb3c7a83fd311bf09c55cb667 Content-length: 8507 (println "Loading objects.scm...") (define-class ()) (define-method name ((obj )) "takeme") (define-method use ((obj )) (println "Got takeme")) ;; Defining objects (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class ()) (define-class () (broken #:init-value #f #:accessor broken)) (define-class () (closed #:init-value #t #:accessor closed)) (define-class () (state #:init-value 'off #:accessor state) (broken #:init-value #f #:accessor broken)) (define-class () (state #:init-value 'closed #:accessor state)) (define-class ()) (define-class () (closed #:init-value #t #:accessor closed)) (define-method name ((obj )) "chest") (define-method gopen ((obj )) (println "name: " (name obj)) (println "gopen1: " obj) (println "gopen2: " (adv:bind obj)) (cond ((closed obj) (advent:set-surface (adv:bind obj) "chest_opened") (set! (closed obj) #f) (println "Open chest")) (else (advent:set-surface (adv:bind obj) "chest_closed") (println "Closed chest") (set! (closed obj) #t)) )) (define-method name ((obj )) "tree") (define-method name ((obj )) "forest") (define-method name ((obj )) "house") (define-method name ((obj )) "Indy") (define-method name ((obj )) "whip") (define-method name ((obj )) "box") (define-method name ((obj )) "switch") (define-method name ((obj )) "book") (define-method name ((obj )) "window") (define-method name ((obj )) "door") ;; Around (define-class () (light #:init-value #f #:accessor light)) (define-method name ((obj )) "around") (define-method name ((obj )) "around") (define-method look ((obj )) (println "A large mamut tree, wow!")) (define-method look ((obj )) (if (broken obj) (println "You see a broken window, looks like you broke it.") (println "A beatifull large window"))) (define-method look ((obj )) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (define-method look ((obj )) (cond ((light obj) (println "You see: ") (for-each (lambda (x) (println (name x))) *current-scenario*)) (else (println "You can't see anything, its dark.")))) (define-method use ((obj )) (println "Unknown object")) (define-method look ((obj )) (println "You read a book full of wisdom.")) (define-method gclose ((obj )) (println "You close the book.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "You don't have the thing you want to use.")) (define-method use ((obj1 ) (obj2 )) (println "Don't now how to use this unknown thing with a whip")) (define-method use ((obj1 ) (obj2 )) (cond ((equal? (state obj2) 'closed) (set! (state obj2) 'opened) (println "You slap the box and it openes.")) (else (println "You don't need to slap the box, its already opened.")))) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the switch... and it breaks...") (set! (broken obj2) #t)) (define-method use ((obj1 ) (obj2 )) (println "You slap your whip onto the window and it cracks! Woops...") (set! (broken obj2) #t)) (define-method use ((obj )) (if (broken obj) (println "The switch is broken, you can not use it.") (cond ((equal? (state obj) 'off) (println "You press the switch and the light goes on.") (set! (state obj) 'on) (set! (light (get-obj "around")) #t)) (else (println "You press the switch again and the light goes off.") (set! (state obj) 'off) (set! (light (get-obj "around")) #f) )))) (define-method look ((obj )) (if (broken obj) (println "Looks like the switch is broken and unusable") (cond ((equal? (state obj) 'off) (println "The switch is on state `off'")) (else (println "The switch is on state `on'"))))) (define-method use ((obj )) (println "Don't know what I should do with " (name obj))) (define-method use ((obj1 ) (obj2 )) (println "Don't know how to combine " (name obj1) " and " (name obj2) ".")) (define-method look ((obj )) (println "Don't know what you mean")) (define-method look ((obj )) (println "You see a " (name obj) ", nothing special.")) (define-method look ((house )) (println "You see a cool house.")) (define-method look ((whip )) (println "This is indys cool whip")) (define-method look ((box )) (cond ((equal? 'closed (state box)) (println "The box is closed.")) (else (println "The box is open.")) )) (define-method gopen ((box )) (if ((equal? (state box) 'closed)) (println "You can't openen the box, its looked.") (println "Its already opened."))) (define-method pickup ((obj )) (println "Don't know what you mean")) (define-method pickup ((obj )) (println "Don't know how to pickup this " (name obj))) (define-method pickup ((box )) (println "This box is to heavy to carry it around.")) (define-method pickup ((book )) (scenario:remove-obj book) (add-inventory book)) (define-method pickup ((whip )) (scenario:remove-obj whip) (add-inventory whip)) (define-method walk ((forest )) (println "You walk int the forest.") (scenario:set *forest*) ) (define-method walk ((house )) (println "You walk into the house.") (scenario:set *in-house*)) (define-method use ((obj )) (cond ((not (closed obj)) (scenario:set-current game-scenario:outdoor-bind) (set! *current-scenario* game-scenario:outdoor-objects)) (else (println "Door is closed.")))) (define-method gopen ((obj )) (cond ((closed obj) (advent:set-surface (adv:bind obj) "door_opened") (set! (closed obj) #f)) (else (advent:set-surface (adv:bind obj) "door_closed") (set! (closed obj) #t)))) ;;(define-method walk ((obj )) ;; (println "You walk out of the door, you are outsite again.") ;; (scenario:set *before-house*)) (define-method use ((obj )) (println "You use your whip and slap yourself, stupid!")) (define *before-house* (list (make ) (make ) (make ) (make ) (make ) (make ) (make ) (make ) )) (define *in-house* (list (make ) (make ) (make ) )) (define *forest* (list (make )) ) (define *gateway* (list (make ) ; (make #:adv:bind (advent:makeobj "takeme2" "takeme" 320 100 150)) (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)) )) (println "Creating game-scenario:gateway-objects") (define game-scenario:gateway-objects (list (make #:adv:bind (advent:makeobj "chest" "chest_closed" 214 331 230)) (make #:adv:bind (advent:makeobj "door" "door_closed" 198 211 0)))) (println game-scenario:gateway-objects) (define game-scenario:outdoor-objects '()) (define game-scenario:outdoor-bind (scenario:make-bind "game-scenario:outdoor" "background2" "background2_cmap" '())) (define game-scenario:outdoor (make #:adv:bind game-scenario:outdoor-bind #:adv:objs '())) (define game-scenario:gateway-bind (scenario:make-bind "game-scenario:gateway" "background" "background_cmap" (map (lambda (x) (adv:bind x)) game-scenario:gateway-objects))) (define game-scenario:gateway (make #:adv:bind game-scenario:gateway-bind #:adv:objs game-scenario:gateway-objects )) (println "Scenario: " game-scenario:gateway) (scenario:set-current game-scenario:gateway-bind) (set! *current-scenario* game-scenario:gateway-objects) ;; EOF ;; Revision-number: 9 Prop-content-length: 116 Content-length: 116 K 7 svn:log V 14 Some more gfx K 10 svn:author V 7 grumbel K 8 svn:date V 27 2000-12-30T13:11:10.000000Z PROPS-END Node-path: trunk/prototype/data/images/background3.jpg Node-kind: file Node-action: add Prop-content-length: 10 Text-content-length: 40412 Text-content-md5: d3f6d1b907e837bac433aad7030e836e Content-length: 40422 PROPS-END JFIFHHCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222">!1A"Qaq2#BRb3r$%CDs ?(Fh;Es&ڃqI2" 9?$S;呰}-l)TqH<zubU)x# 袀( (( (( ( veqghIi|M(;KSf( (( ((9EWOj8t5~Pv(((((((((osϚAbE @7q4WpY!SP7r4E^( (( (( (K8^ tvX InzF|9HhN3ubӃ1@Ak@)y8UW6|@w4\ħAlD(;6nskr8**@U4{j; U((((N(;Ep(惴QEEPQEEPi,IT{"dh;،q4f/Nv((((((((((((8uȥWBA(( ),'C9E7' Lx^(dE(3('Qa\ET^6MeQ̇O( x=ӡv@(pӊr6٥a{WI@v]QEEPQEEPQEEP»MĖځE&\h \ qHm÷4{@+4Pv(((EspnEso9mQusf EPQE\Q@RIQ@f`vHywEQ@QEQ@W2)L}6&H`Mqۊn^]TJDUnw(ky߼PIzbk!4@rX#N@k98VOt(v;o9%m|IEu(9\ߞ1JP6K€/lrd$vCӔP2/mϚz خԪj(`N+עwgy4њdB&q^G$ʀb%H Fi4(ȦŸr)B ;P9EPRN\挏F9${I9]((W 3\P*N|7Z)E)Ah;Es<EQ@QEz("TWkQ@QEQ@QEQ@QE(((((((c5ʹ fA7q]h4i|IF@S=wq]((w"hbPvI4oU7+~itQ@QLym m$op U^Ng2,p6Y9%0p~V'KYz`xMon? Ժ @k5ԗdi7 UZZ7@A=~vP]ź(΋  $gvH (O!URAjMW{ M5>jl~HZ =oxq4G~izXx$_5raODIdV7oH{FG>E!jk!w%NlFJ 1a다VP~#)+У9)gD7mrYqAeFA©2[ȯ -1؏?P5M1J{R4t |V\yՍ{vJ˄l] LN(#PrwFE03]d|r>h (( (( (( +@QEfNh;EGqD_ӡbΊum+T (^c'ż^0=5>?Md&6qApYKSҥ,"(lS}UR_4#X`m](1jhuahEs#W P*ibCˊm] M^u@3i_ӆ8ϬvsH?4v2& !۽2]*MToYJ*}(?n|۰U_X!T~(1Fɶ #`Ob-F )HkgݒH P0Ү996ip .qVfgtF3[x7iː_xiSEu鬷0=5:lPe@ͻPix4ƚvǸ|5Ip0=i*J[*ߨxd5Ț9@WV$嫷aP~DZ%BsY[4g?$hRIBHGm&u=&Eό rʬx\cp*C;:6ANJBȱ?$hx⳺PIzr3Y R.ۢ|m,c!eju H1`ƧƷIs3dҮ4i;wHVm '-};$O$gl%@֯{XJ,SF74%ZBĸX4 ^ A$mǍo%ᑚ=6{' RO@\Tny@;pY#J[{c>zGP՝[q*l^!ȪvDNqzUG4i[WY]Qɯ ӭ>53[27vPѺ?4|unKNqEhaGVU<`a[j@ܞ $SE{({W!{Z%ESOv0VAzHMu4HwTRĎ+'WO$Lc㚥ːfŸ] xאCjXgi[sj}ͼ@{U_q(,96ԴMe@ :cǚ6ql8(=:O@"U ?ȯ";~|ՕT{Ad8b=-aX^x}9#*ݹ5:[яI[n]۳ TVwNҤ=]\3;0`AHS?4!fP)m!Ā}ڤBr209;"baqTK)xml1^h&r#OJK)?;=ȸJFjdzD{dyB}n"PxZ䕟$8l9"Sn?2X&NH4іܱ 74O9*N 0K[VWZ@a,W-G[[wȥC*v@ފE7}wGl `{h+e`=4 MD @5f徘H}LɞyɠrTQ"Xa~FkY I| ,p3-qy[]iLƣ ]=s9O;=ϊA#<޵q$AϴVEڂ f]٣)QM#:88V_r{nZ%Ĭx4Z5XsER# $,/½)粄#Oڃ==3v?0Ċ 5s{Y{dUKO0y-tݎΚ $~✅$]l|AO&5NtYRB&rW"HQcsAy529 jUأ*w65iRXB$*mTlo)Jh#PAuo(*O0 T-5ysd6o +vR'5}<{?-/8z /$Bs3(]G|U)(|M$cₑ4df`Dww47 i*$-PVgl&Bþ|Ԉ4& >;mݽAbYri䓄q`2A^\OK1ipYDdzUdX¨QI|Ԏ0)^$a⏬*n{i6B_'%Wڑd! !(UkrA+䷊1BX%4tQmv%gzհx-$0\W3]!6.l,Y - iw3qA 6+N1QfpՔVI"h,ǡ>IT1qnao_yrDznWP5km (od" Cc]2AH08ي=^2 IqPVOz裰4짾;U)G=CUU{h2A-gtWw*kzt5|\c5Mwţx{ Xǥ8eaBJ<թ4նm,DI&TxAЉ;y >(b%LL` m$|z,w upV \d'+4!pNOڦiULg+=RHc z(X܄cɬ2~'Y1U~:E;4-6\vNPBv דmF4Now4)+ȸ9Gc*N,dy#9,\nImLn? M15 2j<8>jK˦-gC$O+0' vw2 ȪD4˹'qރ@'Gf +5yR4QBUr^4"~ƃR־tG#uGo",8+$c> =+Evu~ RٙrCww=hȠ}6,n{ެ T(2׽MHV7Q*;6w,AVʹxYX.=6G"8OPUCJװ-gwaAѺK` *!i+IfV]c =L Bos>*5GiŽHSs@<%.qԆ9ʅ*lpA=l-(#Mc)% Y陊ԫO>jXӬfvp栎a | A_k ]B B+?<`R):[gPz6YhG>Yި>*8]I|1LBk7~#_&9Gwyuv]\xš+.\ȭEiV+l~h<.A1rJQ$u]sƽw[$x7R@P`<)5gi?T]qkPa 08-SDӞ&d5cܚ ^TrssP-d\(#~k3'IY#t6$ "Ѵ}@E*vjaȾ*F m7Qu1 N8fܫG|)zI$mVJϦܵ]#I!p#>ߊ yH@ˉc@vb>3M[Mir椥[> 5r&ni$#ajn@qJ:=;A&WT8m3Z{5%^#X| X\3n84ɲHv猌;5bT"@rO ;h *tM(\z 20}5 7d1 8R7(+R[hBK#O. BKago^<h*EA)-<~I[-c b$mT>h)sCU Z(/#R j|@ANHVCrb{g2nExeMv%m" _Ph02=A}.ѤԏRV:} ݴ)a{k6HĨy׷6%[vܕ"h)v,3+7֝oQx5AW- z#I%<fiX*dmF2[:a[ױ]lYIV9%f5\jd2҅6͚\ٷx?6}!Gn+0Mj sy8!ƒ"Ak˺L HM3M6yJ}"ߟg40 Dx Ji@dFo3R-[B#)AVM>/W #ԳXvY8U|_Ian1^{}*0&ayVfCuDR0 d{i65m%NҘϚ iYX[+N@G{*G#;$- wIn\5}KVӊ4@½[Mqfnv` ЮI`ި9>jתF#!,t9QE,=6>tEPHWP8'p(@"ۧ >٧OΌ7*ϊx̌]mNOO rhcޱ;r)$>sz {&nY0y5>-$TaOL*8Du}>@?umv(A);U>ĝyZ=Ν>7"mM-%Ȫ+αAˆ#LL/cߨ\I\ւ?-*$~1n(ϫ4t&?ֶvq ?LD4dFAn'(<۩GԦĬrGq_GyqmzUsեK *IVA+/Asv3yN5c2";B°'5-]ɏ=.@4̀$m|ޱǥzDo:%X_bly@N$ۆ;1T0kHA]i_߻C,E_Ɂ@u we3ծ-+,ǍƤ 8,y`)_U=έ2˵ERdklHjʯ]c遴9#L%kؒ! 0gkaoҺdkKb+"!}OsZuՌN(2:LHOz/X>$z8vm§n?˴vj5`5haLTQ4ppꄞ8l}-cYT>+d#^?j-U-9y`0֖D &C7Tw iwnXr~A}%Kv=t*2v 1쌹Qۊ ΉCH!ɭMұ | 휒D[Ph*Nm:hoI l -fz4 YLB{T$C$ {%pRO^Dʹ0mauRe3m)WM_O:HʃڥZi`JqAOږppjU.bR;mBƲĎACP-H-Cp|kkg O},Ŧ4' bt[/:cMώ?4Uw\+SqZWڷw[YmXh= tTRZN chYh,OV5Whdw,x{ݨO&`I^`hҐy4l|^6-pt\>Er9mKX&>j`[r>ӂETZIA9~>34Q~MkHl0HCϗ`rc~I x?4oďNBE?/^`n݅$}o}t)Eh𭾸!<}ҹGBmj80惐٫Iw5)8!) )I ly4uݘ hXD &ģnu4v)VXP1%qI皅qt %6!c5-B3h##nYݔyZTXr8NJvE%AY}CRG+4#X8oHBll~5ZΡ%0ć;"ZFpIٱUؠ2YR> ,ܶzn`1OsZ Ug0,sP>/!=A/xԛs*tۀh*6+6~{^}ǁ^/GPm} ?5#vJ~*,qOȠG `j37|7)$M2;v4!mMV i éS'=ֆ0{ps,0j7"}~F=GVJEpo;8X&cհz(I''gh'"Yⓔ۹r3S2\q `A$:֑F{]W6G|Dw+9҃# 5xpIO 1嵲;w/u$TWRA1 y8(s J۵Z6&R_ wb89O~1n~Mz5#daV/Z1׾{ǧ3f8?D ",*b'ڙ1恹4Pޤ?p+'6Vӗ^`8!kR\~rۼ(<])by>єE';qW׶I#=(Re+{wl>w-5>XEʪǜoۏ:r ٽ$⪺)9q :F1𪹥u}m?*h W=O!> d|֓\TѴA*UOTjr̪[>b dgeQHI!>+Ka︰%;a4זI69y"=]ާMQՠGzjY<%!ASG69י\-ph= OBYfccڙ:"eFXk{ FI^ 9Ewb&MZ_V,Y7b%sNmm7\Yi\aa /G-bFGz6H \4ޔALpLӥt8. "J 6VxϏ]n![`"PλgOFps^Ķ:k$$ WB ,u1c.mfnT*޽:aLb8S^UL]X9Œvk-XIpr/5yhcaTTM@4YZ*TՍ+\u{D@sP׫M0'Y}QԆe"Яax{A?Rk@ޣy3TXvo9Ey eQ}ѷd q x5 svpku#yBA'+.t28'լ "/ gIX¨+<םX OY0GϚT}HLo\s*d #g P{r^4)2d][~{Vv.#doq41LwA"Ux`Y˛t뫇u*iwm%FUVt@fE6h䕚bS=o[ >sZ+H[. ˫)/k@k-N'7]I3@V8$V[NQPh" Uf3¯>( },lg\_̭Jcх#Pg3"±U8ҺR #1C֠ԑ:şw^zzDdug3guaQ5kxehW=0.5On.ڣ]钐@Ti"ۓk{gk'h(5e.adOkmlc''H{y感W|KTc?pX(aoa#(aբ*!6F'C g|o F-!%#W\ JϞh.x&R~MTkYogo]`'ꋅeB=yP1DOF$7('Z$rc=9琢cܦO) |򵤂{6 j70=r1*xZ]ΧGfdsZ)#U6G}uP9>ZLiz~5yh0ґO N#?aY{R[o\WZ;tȴ>|`Pbk"=kzB$P"Y4 wduM@[L솁W\ ϟ;Ud633bÌƛp"l{WZ;X;Lc 8VZT\_ASvȬqwмv\n>Eg:b)X4]C 'BיV^xkUKة='í1Bm#N+/!2j 3j +9fZ{v׌6/kbTSIV0%?>+hmNᏟuDi-lLׂD pP4i.gi&N97* 8"p(LQ Gǚ ȑ nkhW]g /1@횬+uI"|טGg:h%E+T3ldH5In#C[ˍv$ҋl=u23J@{4֩k6ٻTASէe$cڦ[C%Im[9 O~MsZt䴻gC(x9ܣWj}Mw&}!d֪-`rH@#Sn/ `QuH02x @{ՓikF|j X- L/NV"uQ“ޭ#90yT]VS s4ubsM=rJREٷU _w4Q4NAk]4 7gеjvϏ5]gig=X[p*EKշDqjDBipޢjeLeg 5 "Hj'[a=ꨧ8ѼpNk GȀC`Nr fJ;k@ c;xn$4zV䀘_'Vc V&|~vcKbXx ]\F =u^m,s5ҵ+ Oi8,fRTqT2kql8^&_UiȲ8E^jb!^b2Dأ$ףC8%O~qi pH'Q z>qfFS84vWH&HbPvIbU3#|ԹϽyFor݆((:ͦ$as/D0Xz;9,)]Ua?<t8NJѬA+*l9n6fl BCq q|IxA[[:r ^|.}D0\c޻si eZdgey4|ɴ.xZ1aI%pmv'.%CsRk4\P`45פHNx?ַwZqXIc(TOޫrnn&0g_Y\+<YWM@n1cVaxOp'ﺍm5Tb=Qێ6.đ₂7n@ghfkrќ-ۼL$a6 *X#*7+Sle#!G >54w',+1-,Fc9T #2Y衸o 7ڗsUMEfK mZ\tl(<nn# (-th;vr}^iskB6觾$7L>1 ,ǒ.۾k{ehϚtGNYjr\)gZv$FFFkʯzum:eZN&1ыjrj3&>C_h:SBG W~kz(S_jNeAH5ZtE %H~hz< ov)5vͬ&K Q4&oeS1Ogof7.2 ~["7Olԃn[qZ+ Y.x&5 [QceH15umH aA V[+]foe$YID(9oe$$dZqP7Z匑d*ͯ%r TDB@̺1vXOYIVuۆ`*=7R,@ZJ!y jw"ǹMVuoIID/nPd5=e'[ݒ)2GWuPm hE`=dȪ=z'k̇M/l+~i26 nl-]&{XozDU߽Ka[xƹoGq0BvR2H5k_okW&m&Xxaڳ:ջ A *.3NJDr =8^OC+0aPZA gh+,_Uߧ5~k]@@Hn3opĽZM_]z _S޶k;޵:Y(Eny$Ql]LP+SkLr*|rVeR]No-CR+RK}xW_ugnH Yk^TB[#yMsHL@84$V# tN;ˆm"mq|5,]5h%Y*ڟ2,BI. pGy4.x$c=AcL"S .dXAc#A[hs],;< .ҧO>cj5[D&ϞS5&%;zs7Rm%:(o޵ṯ-E@omVz f$P.g5cm눊eoH ƨ{m4[]dfoRTQۥ$1k`:Z5Q<^, r1VM \SAKc,Y*@km!mt4f%88SWhǩoceR?jv!G1922F=}Ix<%W8hM{xլ**78VF ÎkMa(P]irsB҂w`k#7T,F#Ɔm`@=g7>ykQaj'7 i}! _x9\ZNAq*P WK`n#`w>3STgΐOȬ.9 viX_CR5[ukL{9t\as&ݢPN-*.ern;X59fɭDyDK Y'f6m&vs^i]7#꘽p(<5#!@qZIOM~I翂+ 5N*I9V˪-Զ:*8 %[im rK皨fh#0wiaT(PTfuMb:z"D&PHsۛ䲂.J*8tm;OZdqK KS3W4v R6E'* pp( M9"?TAj-\ږ x^DDb $d93indFP Uf#ȏ #H(ƒ~ͿI;09GIJ?kwJ.i PȡOn b>4C#?imE;٠-/4iq4j.0 9d{cLQyy \JASNYfaDHZsǃ1e˸(9?z@- A䊇:DނAȥ`K`;RգOlj 6ܠOS6(ڣ>i< >iyDl;g$DPf\dTc+n(FYL恷\oК\<68G]/;r&bGlf=bkI!c#5KsmcɬX^鉣<L섟{1\pGS*3qAUɐ[A1.|S #6Qh%sTiZrbJw)Èla`[}QZ+E GBq}OpOv N;k1D$c:dZz2Hț8 T}LǢSBAeA%bq !u%f[qyA#.$eLG,k%վڅd_~GK;HgEAVzF,}(H|i2V0i+*9*[9w&rA*CsZC$L`Mɧ[ EH]Yچ` gSەQAHd$;GhRGA詌EJX↉%GA\v֌MAa4,`BH["QF ڭԹfSq6sA] Sbdcl yK avCx^0SEJ2Sz@H"U$>(%s K6F$فړ!7i6gMW\Α2V+aCX­CDM)=5S2ʜj\N 6;. PM"Y<> BU`Ըܾ(I( 9WBU|3\ c,IV ]]oMʻ@(1rj ?}9Xn*gv۞)4  1 r+n\E Ti!)p E;gnitC?zZ'WA WNEazͤsr'OmzYNњLrTq ɒ{SiI9r| }$=5c$*q@ԫ2Dک|S{}2y,1j4VGo mF16` AcsA}W2&lZHL8qk@N 1*{![A0sPcpX!\rkS]>IBStffIf`r,UUB)>,P4-H#UM;TJAZptRHgPCQ+iQY嶆gf1Z@M ypV{娽H!}>*uȣƿu+iK óHppNK֌9߁h\nocǹˋhZzi7mWiѼnx \ :>6;_&*K8R.t]Ԓ|AK-c Y+K#=C~{TF'_Ps~՚*91˦;e؂NN[{}.Q`ہNGǍA 6UE2ǻt礒-hsPNl8(#"rx7w_WQg7>5kaa;q?lӂq2U(SB+v(%2 c(e #EdM2G@ ec^K]N4?2B滾7)b٘mm~V99U"g Hټzdf<ڵ6;sD۱\;PYuI`㹪溎W2Ef}0M8̭h{]:- >~3@نiI#sd[g$5ԞSK lgcAap[Z8UP쾗DĬRсyoT7W>UשtaBiɠFʁw'^g͌٢睾kuM DU׿e/r Hܝ} JӼW TBh[z& ȩ0#/3Nll5[qE{l5iG>ԢS M<[ ̀CH@Ì]􃧸ƒ?Y*f dDǃ[Vɻsڴ?s1hqu RƹHiǚ;Chzi ~*KGRw?\|fI)p14VDԵ@>]ɭY,zIn2[H^~! QEZ5ڃAm%q%r[ VR 0^N'fjw!,ђqOtۨW-FOFKqF8EhcȮ"O<ҝT1&o3B%d#)4qi5VM\ cTĺdxɠݳ4NyV o^\#$'"e'AFh,nuɰgEfzO$QԵib0"K[{[`JAE-'v: }şo3XBHp c"Nݷq(1xYebqE h6Йᑑkv:x+UbrqNij=Qb?ڃA %ަldhcJ$#OU 4Mr{;hcHxU_|\浖)lTh*ouѤz~%]R7B@Ijza%).]iIb w4H^\D5Z'H.*}4H5vB 6 f HUVToN-]b,Pc/7JGnȠ+5Q%AWp+BTqǚh+&#J5"pO yĂ0({7{|ya3@ 'vc3icnTZjOY9A`1;K)E2H>xb|@D ںd"z[,犑]n_h5ñN`2IIKr6@;;E*Aj8&fKhqsA (E$Kiĸt`}1JQ˴qԩFj,T1<]W={S-0Aȩvp2dCI0 z`5eP`$'er9Wfȩ*FHTYo)B'YdkxIɹv;ua>d>a(pN5ȡ ;{K™^`?. rlU$u)d)ǩAyM0r H^Os^ƣlN9sⷒ`1==fKBbG f &PQA䟊ҺL-,|U-nsJ&H.ya\HE*;O4 0 [mGsA\rq9Ȉ{ ƶLoi(y=(A3g)h55:MF '*-t쥇&:Va NRi%oR_r #8}'M{Jc5f @񸼑*;T \cPmR^jI=n"íiXo'+Ҵ @vu׆lzKbBv[dTa" $$T,EH^GڠE#Ju$w'ǻ0FTQb sHkbg847zaS^uVb&cCtq恥bS4iFC8774IY<C!H{OVNN"b }_3nڣG4?ArYO?7_$vLH#UWL _euI5ԼvlzEkՊ+8Eͣyϊ"b?Aaa"16P&iDv9Uq {4hx>|)PRchwq<椦_45*1ȩ"( ^ǣ40-HQj6ZzsfCs)Q3jNXoR5*^ۡ*y#51kQ1 (Rxգ{\eZ[5wioqlcC.8&JZz},GsA3Ibm02qP-- dzDtXz ҪO 4v}aJpC S$k2f^&FchTZ 1o=.Qhڣ=l Ɖr>*M*9 r|a['ykE2*M:8_AQO˦_:`厙 ۆ V f^jlN_A2` PDt*lQ10Pjq2 ; H]EL d/9-Csm=JB8( ԑ'Uiu2 `*Gkl>s@NX;x@1 cm(6Z> 9 ԮJĉpYX6ۊYَѐU'i q慎Y܌W3Ǩot_̑'fih'E3H,gZp}(9$q~|mdd]\c\^4 "Ip䢐HKXN*Hb0"(Euv =̻ JQv&Ge+XHwM3lϊ~(YXS]h)Y gVV/:##!YGgɐ.9bnBXk]CnW Gp)LHQK0%>bvȨVV@$Agk""l˟Ul€XvAU 7=咭lzV1&dž# Ǿh=:ţ@on˴rc< ŢoCqTZ,RiLՠ;o3\ $j2E4@j,Jjk7;(I+X٣*@޳ryjn{ _#4\z002@֭,"%cfZNJr4p*^giN`Wp0}˚cJI;q(+JHEf`Bֳ@ ܨUG}qٽڝSK+c`2$I]Y5k`b%m3/&Ϭ N@H{{ӌ.ܮ>MS24/j=VʞU(ݐy5(*``pN;U]J}F(NO_onI4RH.$Hr*Hbzӓs3rewY佩/~ةphS+f˃xwa!$?~h!uTS>ox.Ρ=Ձ@ȯEncbA>):P+**j2܂n @Ly}0wpcs+UUXs9!G_X9 VPs>ivщ!i'- X N ""@Tں,Irƹ|gq8 8"HT}qOGoߚf!Sc'A5̏LO1xCyD)q<8ۊMpyd愶#CHe4r >*@YƐ5ֱod<}*6]~F05kjYeݎQ7p#4oObTj}yy jZp>jӥ-D#iq悦 VXfvQ. [[%0oxSiL)&;N8˭(6ý$=mCu % a5: رsA#vk!u3܎sLCf6ePv93 r?|}^M^2_ HoJ o OƂk6<Қ `N'vrOziT Wz#«yJ(rʸqO+m@Lu`Olic)'qЕHM\ co PD6rGqLp~-$I'|(#:!+A*3nBnNHA ݍPC#p(Eu"ڡG)J=#,(2ӱȱB}UR\J5UBpN1 U*D:yU}9=IM[3 g!sZdr315dah k: e'njHf^,;3qy A:f }riqR`qVK  \U&IbcUكd殒-rڠ%OYcOq EP&I3XYJ챵*It$SDeyPI ޤJE(JR98ۣ4j (#dRٛkYn,ݏtcWfime+CeCJI >h*Z 3p?5Zv88&7rb"qldFH xQvtq85`.hq<5%,T' UVvK?֮mͪcTڢKG2x4нR@sAlR00*tUi7XY)*ʻ(w4"{Fk o }R%PO>abXLF"nW4Ҫ2O7FVH!A kɤIr}p<щ\p|qAց$$~ƒwK%d9q=q@1o{0cF0Ci{ǎ M8pi39fK#lo!$VH r;B4_fT4heœyj@Ź; 8➆ XӨj6D2 ~I+ ǕAeFja#7qR9Cpib`N( {N)Ij. c YmD#$[q@ 8JP|b2G r~iS4b\F;HA=.$>ܨ}ld@2@6?A j4Jc pz3&HSJP@J3A ݅R?S+w*W}yVés9P|WIY%$|PE/*2MM 5-5|fрQG ?ӛ` =rT;fyb_>6+nԸ",QT"$ xG$F usmިNqM,n5 X<׌2G[Y'axjQU!Yʅ}G.->TV8S!@`1ޣ\zLNs(y#*Y-5,\=Gjl<Q@枲UK;ڡ?-HP %_D"%kG>qy8S@GmG]I3Kf͈ioVgM{8jv{jiءVeބh)-AʅRcdN`4 y4ͫ,I$MN ׷PFOA8O9N)!Fh9Eڿܕ,<7*A9v![sLc>U+Q||T9%y{ R^" 0|D+o4H3'=wNSQœzNIvT-b2h" <[Ԏ@OuO1ǐ@E+}#Ef!L6 /?&:®B/?"1 lPK( \Ń#{SA18A1ngqڸY=5PN3[fǩ!8=m-A= sDFT*2s4 '!2ṅ~8 XAt@@p߷Ue<P1>޾ knۃ0⸏kA?lJrϵ.av*,۔giSH=BG䛖b<ӑ ?54"DHr|@y$l@9LU98S n⃲Q\d][9IHޝڑpWVYw*GO߃P?.r{ShܓHbNf_O1ǁ)&I2*c1i,Qx_RdnvzxS$I< 수_]7!>y] $k=*++; wC3& j$٥B0\p$ ?K#m]|WGHkFe5q)۴)P%?mIxIOށ9;;<q,Hf4Q;6XajBێ9*M$d|2T )AfbH 1:ڿjсo9Ԍ T82IxY.q\Q.!dMMmpGʮ@'+܀"sނ.$9U⥦P}4ȠxiW`@4Du#QVϚko 2n,yIHelq7H_p1ڥ |˅8PaF}e7rþjpۀqi>'aKȷȩ M)"},q@Ɂc\ %g~1@! UwlDq#"`ņK%h>E!vGǏ0TO: ۊN=2|҅6jA !݁¯4a*1v<x*w|WaTy9NFGO/5/;F$8Zn$S*C*2j3Y9E;g՛,C 1\&Ggi 6q1Jۻcq?sXHy*)^y&-q,ڦ,`@0n1AJ&8\13,|TDvAxl;NF %F>1Ϛ(!0pGJAaOzrKp)ŅTMX-nr<ӉlUrjV܌K#;G>(# |SGpr 9*F1]ل@ɅY#G!e}X1D.O;:ɧ J،`|h=ɦD%Kqf\#S]ID3F <=uI v⁚!ps& ı#m?,Dݣ^>i\\03FE9Aϑ]SUS1c!8#@`B3j!HU>R9)T4{Mr3Gn̿G#8|8 K lCj?mȫO<_%mHAH>jZHXln7!c$8Dr$}Wh'F%y0ES,Ws8LG9)%$ K*Opi(''z$[>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~bKGDH pHYs  ~tIME  KIDATxe;e!c1Y#!6cLmB7Ab BLAu)u:ssUU>rv[8HGlyPUl<RJtu鶇% <8evHG#\ KfY-1˂nN~V=V&@\'˳]n 7=H_"OI<)w`) ;ޟ/xo<^pslcҭ~ @BL>ܐLn w={;aV P(ݸG'sn 7;VP>>|,1i'nNw.CnπXmN>|2/ӍIw.Ct;(#@|.lতTNsα{u ("'B$J7'bo;<&&%@ |-jSmp;c,] 6[w. wJ|#int9Ct(@! G갖;wo'77鶷;:W(v{m[cKJN\nNwx}ҝc/(@!$;wI j[|wKnN7s{{Xϓ%? cݶ} 5IПc<] 6v2ESfiV9z|(@W]A |h{簋}|=Np(ϝ;̙/ݡ C/Ep37bo(@`[wƭ j:Ǥ+@w'psg?C^1{kg˟?% Zps(uLL/] P<{_$1ܜn wt^콷N{+\ 6k7tcSbIw.{{v P!-J#Y=>boo|αX/iӍIw.{{bou+@nN*i&L`(@t[&_p{]>_bZ9ߋֹ.DH?ߋ=u  pC`jg@ fy p cx( RdC dC-WLD̐)%@J R)%@J RG?@ZxCZKU&@J RK?֭5 ~X<fۙ!8>!ބtP]tbcV4IרLP)bɠKǸ⡃y⥫H^GdpsY'Tu+>*a-@GF:gEIK` ';vpc[=U;`YG&Pz^Pz^Pz^Pz^Pz^Pz^Pz^'A$:FiTWWWWWWWWWWWWWLDqj5>eccBke< &okhL|4.;fKdY m& qnA?3`D❵VH208՚f,zr@VUl9?T&x;WG;TUѬWi/dPhCB*ɜF4;.YpG;VWLGj: ¶(ʎ& U{[s2TAh2h7AWk7Y `\u;ՅD\[9j:Ų7b@ɍ|75-Ј78;D0hV7t֒&VlOΝ?Fј$$~"0\E<UcX.:o]PGrqW<A|Cw\k:r0F6x Z EeJ~8r9#柎OCo"[Up T̖KxSnLsY{Kl*)4[#ʮxcW(8yԣdr"V֣L`e$SkhHc=Pv72\I6bs>rn94WOi7 QPfBW6g@[Ii\ W vYvѠN"$=lsA"<i@Ʋޟ`m8mPL.v1MI]S jHZ

;{Hc\.B|fO<~ⶩ8==c=y?5̰=ݨD6ln3Rœ(טM'麐zϨ7.{ c 8ehVJ+P^ꋖe'"T!GE;ʩ⥨9)yހ 9cyppr?T~GBsFIP<*I˜9?-A]zFa[*"'j|h3A^}%e|H`e\ՒQKPCZlG꫽3_G2o@2 vwS6Nu e\튗eԩ4%3wWdz9#9ήo`{C]z^z^z^z^z^z^z^z^: <2OT#"0L`sވ@"Wy$d:0׶A&,+1 KYTi6dMO UE\tB9YMV UHP AOS Q5%aF@U<{X⭖+[z ~*٥V[/mK}H^Ek8J:G#43QX_-ߗSVBQE(iCV~h[b# \@nfUCԃMAn֡5v#HÆ~ieq9C只GcFl?'nV$NM^?}>W@uf]ju[,aN;Ris'#?q@ZU]KAՕ _C-;ܚ % KP;C"ٶ k=kQʑAT),i\ 7C4K(%SjIcjYJyYFȬܗdM,o39AvL֖6+9Q3KT{U^;IUOi) ҃H\n}[ܙ"dF-mR!b5-#Pۓx-fP9d(I=f%ʂ q28мVz]3<ԏQb  :Tv?Y@|Ƨ$sϚ scܝr-{Tx(¶hV6v'/1Sa|滛Y.]$R$pEX+Pެ,QAљ>Vketlh5K XrߥYc<`YƝ|4}]XqQ?sdj6PijЮvRyUM)C=a@5H1*UT#ɍ=WVטg U9[A" "ys7GVZ`QWދi6[5Gu' ~H222wɠ#׉%~(U2&p2chgHOb4c#w4r $vY{]:xGF~k ꋧ`Sޫ3~kS:RdRՆk2zzGo4[cUqLpGA`Twn Hjqz r"RB0`KAisRx=Eb1C[xA[`5Ҳ < }~)b;w*Vgj>3jZZ$ {I4Z !Yd8~ !,Xڤ6:˰{S0Y@Vr/TƀuM68(.ZdHHm`j'QZ{~;, q"V(Ωy8_s@GR8UKC @}3񶆳y4`"HȐ@R]y0]zDm9ʻ$^Nk_(UU!"` cS*O(7{ǭPCž(D<5\褣qx7(]qH}4'B̻Fpkݢ;eT1MĠ̫ VLϹ 58P9- D$T=x! T@O9ދJcL^Y$?m:0Ux8jZW$52mSIX㌮iIq~j; qA["VJ8p^&xޣ9 qpŶIdȻ{23m$~JRPOjjAU9$&*\BAv4qɟ~S#\x1*q^=dX7ZfwJsA<$pvd_*ZMf!D\z|}a!5)wpϊ=C|o 1 *ߔHP_4Aj V :ed\sQV%ݐhh+vz<`IpWRHծb+XPhMcTH9MwYhu`H;(,։+4`oi_sqcwcVk(^+xƫPTmPfH.`_ 0b=LeϊN`u 6hPT~P XLFvSaE ,3 X&tH8oY!ldDbY#L֖cT_*2GlZİ1X~nY~f(Lhc5%,Ь~gcFyܞ3ފ"?hZi 4w<J~S$ \#sjFClǜm@Z;oo66棈v D{x0EzTcFʊKtaIzxj6{SaHf]"_=3) n1@2F >f1@`+Gh2V)'+sSvR8hSn(I 7 sZAzpGv`ۈ*b6.E!GMUP=4͕᱆\d+OڼIrOqA*&L|)cqBOPHoր;̤H?4X o,QS׵Z_#=zŽVdT"]2zO)_iYoY jTC%¾8?zrCzȣlr 62{jI.!B2(#4|U&fr[ot \ŋ>*wnnA)t讦blY ԟW7kR$ڛF;Fp4^$-Btkdd Uz8X j"zs<Ñ #w njʍmqL{So3A,xᖾx5@r8k{ݯlVkR 2h-݈hY.#a;m|W .j]n|hmvۜf`cB6%mc &l1?j~Pgc}5ȠxYj,Oom,9>)YَA^Y}4<∥0 J[]k֖qL}V(=Esx}8UKv+`sE2DZF*q `FN8TIR[Eʼn(;}p%4W_GIzp(,v((ݸUpy؟5:80c+֦fd 楋6#sd~s@ v9$}@#C-B~QNR,y惆i}̈́_&nj&e'o֙yBBkq9JG7 OcE;p<ҠO4BpjuٹÊow*{oRV EnZ|tG3vI755  d.;0ѳ Vj@(A'FNRleWP88.N޸ZwCH 0j,oHpOMQAdcs8:33\DŽ To:VɽwnwP]弶~XRw sMJI4{'u%rB5'VVO(Csz\qZh9wcAuԺ><^*:YI ~:8vH;4O@M۪ʌNX /{tObS$.ЪHc({uUP9EVzcYPuDhL  .RQY̦wrIEZeqH#ou, *lu޸ }Q)+%'Pkݰ˜G@y-i@HgE"`w4m-O g☷L4Qԍj=,1û 9h]+b(>$6⨸h*Ekzr[8ڰ@zJ9݇Ad ajr"F@ K-̋FmvA`z P2*}Oe)y$lHS` 惂7Wv(ݏn,00mLH,gq+Ђ*S'Ӂ{:3V#CZCJY|OGǴ9Lb$TԒr%_S恡L~^]mHTP;$\$sWǚUг1_҄DfvR-n34,ޘnP8}GMbW}AQa\(ɶOqqALB>a}@Qq9BԲc+qRbWRdP(~<,[)lWHs+nSPGBP `xRjkN$-Zt# %*r{ qZ}8G1@E<.wyTB ;ј(#D9#9h?DGy;U*{P06 <И s%4RsrLNh:.-=@T|r\ʮ{b+u?([{mh#zӦ\&o˧#19v6#w ao!_N6raQ(,v1 8@mƊ*N㓜.9%GH+NȒ)nm`!aҘE4pPNqsS$ `)\K;mk2xO$2o"mvr5P{ć kp֖kk+\ga7'-ހmԷJC)8a 9lg\IM"ݻn X;rq-WaP[L[Sq^16L>s@*(4GLpSPazH=X1xK${V~=(8>kll+779怵֥!@W榥n!rp{ki'zO?2 ~k{[EYwc"y#YDa\#SǞ9!XOz${*0Ip=qR;XY2L;};DݩS~ms !; WAoq2УHQQ⚈o̓۽J9Y`sǚp&D'McrqޤBїs@ˁ[H)]$FktsR&(#G]G 62#koQdv6 ~3#Dz*\zJ#^b8'P^zL]/IE^GXCkZ#/yPN19*NF'm;Hd,y*Ka/9,Opf1[p 1A54d*H9g#vC2]"hAP%rj:t&)f!Er byDqHX?T. r>jttG cL!L6=#>UJ; /\đCP֬`; !6U+H`nZFcڤ~qM0Oj`yp+ֺUX)FqD"Wԏ94k@s)!_ :t#Ib8ɣzjv#PfnU_y≕P>sPph*v y AX]]H5`A6ݳ0GNdm^ D+vmm_\g;*\S[e-'7H[+Lg<ާ30~)OCA#,PuMr-.f`h$ {Ely[>*{uwnI9T'.i.&*meQI@hؑ~P@vXo#QcR7v0N1ܢ^P6o4H_ށtOkQ? R#)兢>HH=!IѰzDW>ip!XPr~ۋP3A&Wޖ$;fS ^PGK3`r((J2)@' ']0ju4U_ YtDn1>*ߢK6f m#5Fy0ǰKLT=Ap/!C3i/ u[47&`3@R8fQ<2=ˏI*-I+=vw SPd>kdW^8m(8[ݻ#Ee&5N9wq1Z-|Pt?uRԠPy[&*kI=~Jc8&(by4mV4 .U09ibnC1AlH4n9Q$QY 1h92GLs>E2!uwv5:OB`l;젇y 24b&30Ttx-Xtnd\>vEw76{f3˽|4FKr9 IM/r#!HP5d zh2j]k(GXcZt۴!E_ PnSLHR#+|PHN6[#o T.Eu9!Y.d!@GOV5d9]2ώTPzWXnXmݰea\tfV% 0_?&.!`l'# ө% #=#-NEnRp2{R4P{yjשZ&$6He÷zx4qZGAZGOs*$nTY@(H*j|3ݩݼh3& p@/*r[Kyce'OK=M ܇kֆGf Ը}%$f "RNjp6,j)dxu֧{IwcVfI;=\k'2 7$S ~” Bԍ}_=jYib@ff81GrMH70Kcgqǚmʪ&ǹ{ POӻ1(8slg5.4px9K `@ґmS"q$L^iph&]O5n{.)!1UU&HKEAwibњAsR4[>(alf@&(caMi#Jgn8悑e=XFYJ8! X~Xf?x4b$>L\6k"ȮKR2(fpKz$2HB` Zi)g<]}G cEU-n/j*[3sW=F .,乓Nz :tH񭄠yYĖ}6ŷ4~@홴=33Ղ‰ mm%IZ [6fx&Fd  *X,\5 '|"$cv&@AL`(l r*ӝ<(\Fh揠)MCQlma@7SMgLw@4V]mYTd=+LKA E;Nrh*zBD ML QO Vʷ_E85k4N 21A6đ"[I8VY`u.ýuM2ǑI9̞8mH~&8U <-kp&$B"[^F*dq[RNE( <+-D#GV#G$&$xbOQqS f)%XF6%f\~(ME ݬFb7;DҲ#?ngNY Y@SVWW%F1NmJHl,(WgP0z%e>MVNl\s6-jEn[x"'5O)Xlka⃛+)?SRjP[(Mηīp>fk-IXy$RXl+sC~{I#U9[.97O8huRvMS&k5oqJ[ԙD w#c !@ "Q 3N׊Z"Fo oh.LGS%=ßVke .'\g{5Uqh5{ẍoZuӞC1,qTBu;d19jwkXԅv'87ZDF<ޝSlm(VzhS&T3K yaY03Aiqo#Eac<Ӊ*L\=Vt_qzr;i~hAKQ4˖ !qƙr\ 2n[j1x#n4l^4MrG\ F;V40t͹c&қLJƒ8ɠ+j!r|C\O4y%W4>NFB×zͭDs S>l'앭tOy:m#jڥ=п+̗S`iz4sX˳h֋%.@~Q!%"&E7=X2#g {v^uhi.0|Խ:+ mv]G?}^.^(,r|V[-4g-# 3ϚwSv^yTTKU%LdP; $,OY- GBLs@#`3ډBND!ŲGh7!dB w,pN7 7Iz#֗^8[5W$dH %V=BA&6cHMZ;qrOdSPogq,A3Ptx-$\Ā[ Gծt"Ǔ]V=;u@/f#_tIkhHhh)Iܱ|)LŃEÃjiYÜz d"v$txIhK  i#Pe?a8-Dsݰqѵ{!Ge*',{sS-(| o?s(%A`<ԨDy*2n9BHBO*|PIY8ȧܹv9)HR05LAP;SֶwQf 'N67|Puu {d UI2sb PEJinnSF]a@ַmǐM/Yy0D#⬚ө蝈(c$p VUBy!ױC ƫgN۠oDn˻aO޳'u3jરP}CKdUۦKཌྷp U-ux&C`#9=-fnȹ@4#E*>F@х `mWmhg3[''yPI?+'i5.e9"eܟLciDח~8]G/Qǰ 朂f'x|P ׵I4 9 [I_\LLlp*u5M')擣[XHb#װ[B=N 0B>CHCb;T[6qG-h+ͯrAnU🆑ey.0@O'TnǦwY ]݅p\tN CzN +sNZN "njߥI畣j`Ssܣ?D]B;r@;C5!Ge6}Yl cgk;뚮WiB\4X"BjФ:mT(j:gLۖqz}5p-?殺L@骜%_USg(/6˧ $? +ynG,AYc-Og*~ԘWsjl!/*џQ4]0~h+Z=Im{t9UUgMmm/ <6Q5N}FmR7QjT>o%-jEi209pjA}P&kel +7Oi͋i%bΤ怾alaG(loާ}"ZMk=Үm&!LUN;c]J $1#i*tlC:/ڥ< L?1NDdՈ ?4I$v\-'O^JÀ5Z 2BY:OVX315b$G(6@!;weRX"E9x0@'2iþrhPz(Vn9<} X+m c/q #{MQԶsP)VJ,[Ia~ƀ~[}10GڜCf_DbR`8;F޴gޱ25귉ZE2.HUO\<`hԵ፠w#4mSSԸb#qӚvguS>>k@hܲ(A@2JL#IqrP {z!fHϬ3hTnlA7Xine0كݪiZ"# cFtޛjy 5w$UɁ\Uo]#ޡUދMc#I6s/R0Mdg"twJ3`$x8h.F~DA<vEt% xd?Bn'c] q xA|r^=v,(uilJ5 [ZE8'h֊331@mVVlGlޫyY vy2oLH 95X{0Н/R\\ An]^iJfX\nܓTzu1rA.Zb[ XHCq*O?jgʅM/>DdҐ2[4 j6oeqR}9qV>jYVWi/LKIFQ!f#=櫶ɠjgT ;c恔bGġYkqp[TFxm8\jvװNsaԴxm̵K^MԮbE1QegG)8bEwY 4rUg\<2Ah{9]}]B@ݽ&vYLvgaz?l䰞>F99e[NB?:^]h;ISs-."9a= Z9 Xl4IM2;*f3Ad҉[?L8Vq'hM]ڡ%+EXJ[+?njoڬ.B11u3ck 7 ~@'P>1}ޡ#ʱ"FNYԜs\X  {cPM?xz}EU׺6'PB:>٤. Xcx[>` {]Ť#DHnT+߰j2ʞ>`7c@OPc[Z>Uzin 0'KiERy$B{Em{cV m.l{Hf,oq %@T y.HϵG4& >Tc*j:z4* gn0ˎ('G廷h"4Os%cMWʽ4 mL\IG,UlU?%ݥ6Q@뫮.݊%7|VAh 56Q&SDd;s͈74ͮπS<)h˨(֑ds<SڿLV@zh[#$=&+\U+D]>bX?MPh0@A&#q=cNGշ޶O J&/s;/u7ŗ{(A*=Ug[.{۪r;KX'.n̑1GcKoR}.W,Pȕ&8e\PjmdYNzrG(E-A#9?žx~";O8Vt>aVFpOz6?sM0'gb&I+d%c=ż7rmXƒȲL9f^;29?&Qo^$DR+$#"W>M-mTab1qU]:B ػhb?QV4ư2ً %gA>*`"b1rGڀ͓HfPrMCLwHSqFHXA7Esjx#Pp/R-pQ qOn8I8R#QC杚i"vGH9xrJET^5&6!qS֯m4ޅR_W(Q!,ͣ) `Iٴn8fK(YC*/!Z-?6:-94gHSX 68rr`# i9ih t&P9D{P@Ӵ " U<@I~+'`(2X55ĈGEHjg-o][`cvƽ1hi?(GҢ9Ri s]ǠXuV}cGK؉t7\tV^*F S $rXбBZ'> }O-63Jc/SKc,L E&(2sRzoO!₣OJY=NF᥻fFǁޫ}Oq: :~+]p{G K+5F +TӛRꇺo92E]:Myd0|P^cԔH]WE_[v)Cmng`c mש3Hw|PL"LpHܚVޡa@%eb.S7m'i< [q"?vEǑ\ڢ_nglSj:$3e`gҼgݲMBFf@@q8jZvQdO2 S#M0y)lOlbvMofc=fS?k!lS޹O4, d0=gݜrj˥@MҸ ^URwBV\p&!2*4" w1Y[w+-ROILР jSd 2x9fmU pjZBru)ˋ }*,>,#P d&2sϚɩX]ND/MF?~m.+ht Yr|ƣgtB}Ol8\[Z2IK1TGl Q=>1u-j PjVKECYqT 5k+䄲)8޾̇ڋ4x<5Jܔp8:TW[qɂN*.kju{ {<ў^KJh4M.\Nj.x=ciH-PPw\}6;H&~tO}|ͩ^l P{H̪7'jSۊGe\ 䊇 󋸏`}-PF ףs$l{mB(L1{5hb˴1'G*dR{C@}@=v(?ԗVc P:[YwrYǦYŨfC]?q '[ ڪ_Qhf?vD UdT@C-1( /oP]+Л1"&wsSzRlz }&/SkJm 4,O4ibkpܚ=+mEl\Zad{f$o?F;y4;6| xoĺӉبnsD{-# 8D׵&JD