From 5d71bee0771f4b42e67bd74d8b21145e89c13124 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sat, 7 Feb 2009 12:53:53 +0000 Subject: [PATCH] Sound effects for menus --- COPYRIGHT.sounds | 218 +++++++++++++++++----------------------- data/Makefile.am | 2 +- data/sounds/bleep.wav | Bin 0 -> 3952 bytes data/sounds/select.wav | Bin 0 -> 63484 bytes src/ConfigFile.cpp | 7 ++ src/ConfigFile.hpp | 5 +- src/ElectricGate.cpp | 2 + src/ElectricGate.hpp | 3 +- src/Game.cpp | 6 +- src/HighScores.cpp | 5 +- src/Input.cpp | 2 + src/Input.hpp | 6 +- src/InterfaceSounds.cpp | 35 +++++++ src/InterfaceSounds.hpp | 30 ++++++ src/Main.cpp | 4 +- src/Makefile.am | 3 +- src/Menu.cpp | 6 +- src/Menu.hpp | 4 +- src/Mine.cpp | 15 +-- src/Mine.hpp | 2 +- src/Options.cpp | 29 +++++- src/Ship.hpp | 1 + src/SoundEffect.hpp | 1 + 23 files changed, 234 insertions(+), 152 deletions(-) create mode 100644 data/sounds/bleep.wav create mode 100644 data/sounds/select.wav create mode 100644 src/InterfaceSounds.cpp create mode 100644 src/InterfaceSounds.hpp diff --git a/COPYRIGHT.sounds b/COPYRIGHT.sounds index 711b9b3..3fcf7b8 100644 --- a/COPYRIGHT.sounds +++ b/COPYRIGHT.sounds @@ -1,143 +1,105 @@ The sound effects in the data/sounds directory are freely redistributable under -the following license: (http://www.soundsnap.com/licence) +the following Creative Commons license: ------------------------------ -You are Free: +License -- To remix or transform the sounds in any way +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. -- To copy, distribute and transmit the sounds +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. -- To use the sounds in any music, film, video game, website etc. whether - commercial or not, without paying royalties or other fees +1. Definitions -You Cannot: + 1. -- Make commercial distribution of these sounds 'as they are'. For example, you - cannot download and sell them as part of a CD library + "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. -Soundsnap License- Full legal document + "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. + 3. -This licence is the basis under which all Works that appear in the SoundSnap -website are distributed and used. The SoundSnap Licence is largely based on the -Creative Commons Public Licence. + "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. -By uploading a Work or by exercising any rights to the Work provided here, you -accept and agree to be bound by the terms of this Licence. Any use of the Work -other than as authorized under this Licence or Copyright Law is prohibited. The -Licencor grants the Licencee (You) a worldwide, royalty-free, non-exclusive, -perpetual licence to exercise the rights that are contained herein in -consideration of your acceptance of the following terms and conditions. + "Original Author" means the individual or entity who created the Work. + 5. -You (the Licencee) are strongly encouraged by SoundSnap to attribute the -creators of the Works that you use in your projects or the SoundSnap community -where possible, but this remains entirely up to your discretion. + "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. -1. Definitions + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant & Restrictions. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below on the conditions as stated below: + + 1. Re-creativity permitted. You may create and reproduce Derivative Works, provided that: + 1. + + the Derivative Work(s) constitute a good-faith partial or recombined usage employing "sampling," "collage," "mash-up," or other comparable artistic technique, whether now known or hereafter devised, that is highly transformative of the original, as appropriate to the medium, genre, and market niche; and + 2. + + Your Derivative Work(s) must only make a partial use of the original Work, or if You choose to use the original Work as a whole, You must either use the Work as an insubstantial portion of Your Derivative Work(s) or transform it into something substantially different from the original Work. In the case of a musical Work and/or audio recording, the mere synchronization ("synching") of the Work with a moving image shall not be considered a transformation of the Work into something substantially different. + 2. + + You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission, any Derivative Work(s) authorized under this License. + 3. + + Prohibition on advertising. All advertising and promotional uses are excluded from the above rights, except for advertisement and promotion of the Derivative Work(s) that You are creating from the Work and Yourself as the author thereof. + 4. + + Noncommercial sharing of verbatim copies permitted. + 1. + + You may reproduce the Work, incorporate the Work into one or more Collective Works, and reproduce the Work as incorporated in the Collective Works. You may distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including or incorporated in Collective Works. + 2. + + You may not exercise any of the rights granted to You in the paragraph immediately above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + 5. + + Attribution and Notice. + 1. + + If You distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, provide the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work or a Derivative Work, unless such Uniform Resource Identifier does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, provide a credit identifying the use of the Work in the Derivative Work (e.g., "Remix of the Work by Original Author," or "Inclusion of a portion of the Work by Original Author in collage"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + 2. + + You may distribute, publicly display, publicly perform or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work or Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access of use of the Work in a manner inconsistent with the terms of this License. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. Upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work or Collective Work any reference to such Licensor or the Original Author, as requested. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Disclaimer + +UNLESS SPECIFIED OTHERWISE BY THE PARTIES IN A SEPARATE WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. + +5. Limitation on Liability. + +IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +6. Termination + + 1. + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 4, 5, 6, and 7 will survive any termination of this License. + 2. + + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +7. Miscellaneous + + 1. + + Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. + + Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. + + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. + + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. + + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements, or representations with respect to the Work, and with respect to the subject matter hereof, not specified above. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -a. "Collective Work" means a work, such as an audio compilation or anthology, in -which the Work in its entirety in unmodified form, along with a number of other -contributions, constituting separate and independent works in themselves, are -assembled into a collective whole. A work that constitutes a Collective Work -will not be considered a Derivative Work (as defined below) for the purposes of -this Licence. b. "Derivative Work" means a work based upon the Work or upon the -Work and other pre-existing works, such as a remix, musical arrangement, -dramatization, sound recording, art reproduction, synchronization with moving -image, condensation, or any other form in which the Work may be recast, -transformed, or adapted, except that a work that constitutes a Collective Work -will not be considered a Derivative Work for the purpose of this Licence. -c. "Licencor" means the individual or entity that offers the Work under the -terms of this Licence and in particular, the SoundSnap member who has uploaded -the Work. d. "Original Author" means the individual or entity who created the -Work. e. "Work" means the copyrightable work of authorship offered under the -terms of this Licence. f. "You" means an individual or entity exercising rights -under this Licence who has not previously violated the terms of this Licence -with respect to the Work, or who has received express permission from the -Licencor to exercise rights under this Licence despite a previous violation. -2. Fair Use Rights. Nothing in this licence is intended to reduce, limit, or -restrict any rights arising from fair use, first sale or other limitations on -the exclusive rights of the copyright owner under copyright law or other -applicable laws. 3. Licence Grant. Subject to the terms and conditions of this -Licence, Licencor hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) licence to exercise the -rights in the Work as stated below: a. to reproduce the Work, to incorporate the -Work into one or more Collective Works, and to reproduce the Work as -incorporated in the Collective Works; b. to create and reproduce Derivative -Works; c. to distribute copies or phonorecords of, perform publicly, and perform -publicly by means of a digital audio transmission the Work including as -incorporated in Collective Works; d. to distribute copies or phonorecords of, -perform publicly, and perform publicly by means of a digital audio transmission -Derivative Works; The above rights may be exercised in all media and formats -whether now known or hereafter devised. The above rights include the right to -make such modifications as are technically necessary to exercise the rights in -other media and formats. All rights not expressly granted by Licencor are hereby -reserved. - -4. Restrictions - -The licence granted in Section 3 above is expressly made subject to and limited -by the following restrictions: You may distribute, publicly display, publicly -perform, or publicly digitally perform the Work only under the terms of this -Licence. You may not offer or impose any terms on the Work that alter or -restrict the terms of this Licence or the recipients' exercise of the rights -granted hereunder. You may not sublicence the Work. You may not distribute, -publicly display, publicly perform, or publicly digitally perform the Work with -any technological measures that control access or use of the Work in a manner -inconsistent with the terms of this Licence Agreement. If You create a -Collective Work, You may not exercise any of the rights granted to You in -Section 3 above in any manner that is primarily intended for or directed toward -commercial advantage or private monetary compensation. In no circumstances -whatsoever, may you copy all or a significant part of the Works in the SoundSnap -website with the purpose of redistributing them for profit. - -5. Representations, Warranties and Disclaimer - -Unless otherwise mutually agreed to by the parties in writing, Licencor offers -the Work as is and makes no representations or warranties of any kind concerning -the Work, express, implied, statutory or otherwise, including, without -limitation, warranties of title, merchantibility, fitness for a particular -purpose, noninfringement, or the absence of latent or other defects, accuracy, -or the presence of absence of errors, whether or not discoverable. - -6. Limitation on Liability - -Except to the extent required by applicable Law, in no event will the Licencor -be liable to you on any legal theory for any special, incidental, consequential, -punitive or exemplary damages arising out of this Licence or the use of the -Work, even if the Licencor has been advised of the possibility of such damages. - -7. Termination - -This Licence and the rights granted hereunder will terminate automatically upon -any breach by You of the terms of this Licence. Individuals or entities who have -received Derivative Works or Collective Works from You under this Licence, -however, will not have their licences terminated provided such individuals or -entities remain in full compliance with those licences. Sections 1, 2, 5, 6, 7, -and 8 will survive any termination of this Licence. Subject to the above terms -and conditions, the licence granted here is perpetual (for the duration of the -applicable copyright in the Work). Notwithstanding the above, Licencor reserves -the right to release the Work under different licence terms or to stop -distributing the Work at any time; provided, however that any such election will -not serve to withdraw this Licence (or any other licence that has been, or is -required to be, granted under the terms of this Licence), and this Licence will -continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - -Each time You distribute or publicly digitally perform a Derivative Work, -Licencor offers to the recipient a licence to the original Work on the same -terms and conditions as the licence granted to You under this Licence. If any -provision of this Licence is invalid or unenforceable under applicable law, it -shall not affect the validity or enforceability of the remainder of the terms of -this Licence, and without further action by the parties to this agreement, such -provision shall be reformed to the minimum extent necessary to make such -provision valid and enforceable. No term or provision of this Licence shall be -deemed waived and no breach consented to unless such waiver or consent shall be -in writing and signed by the party to be charged with such waiver or consent. -This Licence constitutes the entire agreement between the parties with respect -to the Work licenced here. There are no understandings, agreements or -representations with respect to the Work not specified here. Licencor shall not -be bound by any additional provisions that may appear in any communication from -You. This Licence may not be modified without the mutual written agreement of -the Licencor and You. diff --git a/data/Makefile.am b/data/Makefile.am index 66a2926..e2e7bf5 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -15,7 +15,7 @@ EXTRA_DIST = images/ship.png images/star.png images/start_option.png \ images/landingpad.png images/landingpadred.png images/title.png \ images/gameover.png \ sounds/firework_1.wav sounds/bomb_explosion.wav \ - sounds/boing1.wav \ + sounds/boing1.wav sounds/bleep.wav sounds/select.wav \ Default_Font.ttf nobase_dist_pkgdata_DATA = $(EXTRA_DIST) diff --git a/data/sounds/bleep.wav b/data/sounds/bleep.wav new file mode 100644 index 0000000000000000000000000000000000000000..dfd95769fcc59e2012131542fbf84c473251b64d GIT binary patch literal 3952 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 Xbrw*!sl0kPvF5q1g23Cvr&s+yt_CuU literal 0 HcmV?d00001 diff --git a/src/ConfigFile.cpp b/src/ConfigFile.cpp index 19a44e7..e3d7332 100644 --- a/src/ConfigFile.cpp +++ b/src/ConfigFile.cpp @@ -37,6 +37,11 @@ ConfigFile::ConfigFile(string filename) } ConfigFile::~ConfigFile() +{ + Flush(); +} + +void ConfigFile::Flush() { if (dirty) { ofstream of((GetConfigDir() + filename).c_str()); @@ -49,6 +54,8 @@ ConfigFile::~ConfigFile() of << (*it).second; of << endl; } + + dirty = false; } } diff --git a/src/ConfigFile.hpp b/src/ConfigFile.hpp index 60f8423..bf7df28 100644 --- a/src/ConfigFile.hpp +++ b/src/ConfigFile.hpp @@ -1,5 +1,6 @@ +// // ConfigFile.hpp -- Settings persistence. -// Copyright (C) 2008 Nick Gasson +// Copyright (C) 2008-2009 Nick Gasson // // 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 @@ -25,6 +26,8 @@ public: ConfigFile(string filename = ".lander.config"); ~ConfigFile(); + void Flush(); + bool has(const string& key) const; const string& get(const string& key); diff --git a/src/ElectricGate.cpp b/src/ElectricGate.cpp index 7cec0ce..854c6bb 100644 --- a/src/ElectricGate.cpp +++ b/src/ElectricGate.cpp @@ -1,3 +1,4 @@ +// // ElectricGate.cpp -- Electric gateway thingys. // Copyright (C) 2008 Nick Gasson // @@ -16,6 +17,7 @@ // #include "ElectricGate.hpp" +#include "Ship.hpp" #include "LoadOnce.hpp" Image* ElectricGate::gateImage = NULL; diff --git a/src/ElectricGate.hpp b/src/ElectricGate.hpp index a8289b9..8a38be1 100644 --- a/src/ElectricGate.hpp +++ b/src/ElectricGate.hpp @@ -1,3 +1,4 @@ +// // ElectricGate.hpp -- Electric gateway thingys. // Copyright (C) 2008 Nick Gasson // @@ -19,9 +20,9 @@ #define INC_ELECTRICGATE_HPP #include "ObjectGrid.hpp" -#include "Ship.hpp" #include "Viewport.hpp" #include "Image.hpp" +#include "GameObjFwd.hpp" // // A line strip used for rendering lightning. diff --git a/src/Game.cpp b/src/Game.cpp index d6a4c20..883ffff 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -22,6 +22,7 @@ #include "HighScores.hpp" #include "LoadOnce.hpp" #include "Input.hpp" +#include "ConfigFile.hpp" // // Constants affecting level generation. @@ -97,7 +98,10 @@ void Game::NewGame() lives = 3; // Start the game - level = 1; + { + ConfigFile cfile; + level = cfile.get_int("level", 1); + } nextnewlife = 1000; StartLevel(); } diff --git a/src/HighScores.cpp b/src/HighScores.cpp index d5595ac..2797508 100644 --- a/src/HighScores.cpp +++ b/src/HighScores.cpp @@ -1,6 +1,6 @@ // // HighScores.cpp - Implementation of high scores screen. -// Copyright (C) 2006 Nick Gasson +// Copyright (C) 2006-2009 Nick Gasson // // 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 @@ -19,6 +19,7 @@ #include "HighScores.hpp" #include "Input.hpp" +#include "InterfaceSounds.hpp" HighScores::HighScores() : hscoreImage("images/hscore.png"), @@ -68,6 +69,7 @@ void HighScores::Process() input.ResetAction(Input::SKIP); input.ResetAction(Input::FIRE); input.ResetAction(Input::ABORT); + InterfaceSounds::PlaySelect(); } } else if (state == hssEnterName) { @@ -83,6 +85,7 @@ void HighScores::Process() fade = HS_FADE_IN_SPEED; input.ResetAction(Input::FIRE); + InterfaceSounds::PlaySelect(); } } diff --git a/src/Input.cpp b/src/Input.cpp index 50fc2d3..80b7ef1 100644 --- a/src/Input.cpp +++ b/src/Input.cpp @@ -20,6 +20,8 @@ #include "Input.hpp" #include "OpenGL.hpp" +const int Input::RESET_TIMEOUT(7); + // // Create a new input manager. Never call this directly: use GetInstance. // diff --git a/src/Input.hpp b/src/Input.hpp index 7c14cf8..5ee7ce6 100644 --- a/src/Input.hpp +++ b/src/Input.hpp @@ -31,7 +31,8 @@ public: enum Action { UP, DOWN, LEFT, RIGHT, FIRE, SKIP, ABORT, DEBUG, PAUSE, THRUST, - SCREENSHOT + SCREENSHOT, + NUM_ACTIONS // Must be last }; static Input& GetInstance(); @@ -49,8 +50,7 @@ private: Input(); ~Input(); - static const int NUM_ACTIONS = 11; - static const int RESET_TIMEOUT = 7; // Frames between key presses + static const int RESET_TIMEOUT; // Frames between key presses SDL_Joystick* joystick; diff --git a/src/InterfaceSounds.cpp b/src/InterfaceSounds.cpp new file mode 100644 index 0000000..1db011b --- /dev/null +++ b/src/InterfaceSounds.cpp @@ -0,0 +1,35 @@ +// +// InterfaceSounds.cpp -- User interface sound effects. +// Copyright (C) 2009 Nick Gasson +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// + +#include "InterfaceSounds.hpp" +#include "SoundEffect.hpp" + +void InterfaceSounds::PlayBleep() +{ + static SoundEffect bleepSound(LocateResource("sounds/bleep.wav")); + + bleepSound.Play(); +} + +void InterfaceSounds::PlaySelect() +{ + static SoundEffect selectSound(LocateResource("sounds/select.wav")); + + selectSound.Play(); +} diff --git a/src/InterfaceSounds.hpp b/src/InterfaceSounds.hpp new file mode 100644 index 0000000..160487f --- /dev/null +++ b/src/InterfaceSounds.hpp @@ -0,0 +1,30 @@ +// +// InterfaceSounds.hpp -- User interface sound effects. +// Copyright (C) 2009 Nick Gasson +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// + +#ifndef INC_INTERFACE_SOUNDS_HPP +#define INC_INTERFACE_SOUNDS_HPP + +#include "Platform.hpp" + +namespace InterfaceSounds { + void PlayBleep(); + void PlaySelect(); +} + +#endif diff --git a/src/Main.cpp b/src/Main.cpp index 0d6a3e9..32693a6 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -1,6 +1,6 @@ // // Main.cpp - Program entry point. -// Copyright (C) 2006 Nick Gasson +// Copyright (C) 2006-2009 Nick Gasson // // 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 @@ -88,7 +88,7 @@ int main(int argc, char **argv) const int DEFAULT_SOUND = true; cout << "Lunar Lander " << VERSION << endl << endl - << "Copyright (C) 2008 Nick Gasson" << endl + << "Copyright (C) 2006-2009 Nick Gasson" << endl << "This program comes with ABSOLUTELY NO WARRANTY. This is free software, and" << endl << "you are welcome to redistribute it under certain conditions. See the GNU" << endl << "General Public Licence for details." << endl << endl; diff --git a/src/Makefile.am b/src/Makefile.am index 2e1ac72..ae5b4c2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,7 +16,8 @@ lander_SOURCES = Main.cpp Game.hpp Game.cpp \ Image.cpp AnimatedImage.hpp AnimatedImage.cpp \ Texture.hpp Texture.cpp Options.hpp Options.cpp \ ConfigFile.hpp ConfigFile.cpp SoundEffect.hpp \ - SoundEffect.cpp Fade.hpp Fade.cpp GameObjFwd.hpp + SoundEffect.cpp Fade.hpp Fade.cpp GameObjFwd.hpp \ + InterfaceSounds.hpp InterfaceSounds.cpp localedir = $(datadir)/locale diff --git a/src/Menu.cpp b/src/Menu.cpp index 434499a..dcfc23d 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -1,6 +1,6 @@ // // Menu.cpp -- Implementation of main menu screen. -// Copyright (C) 2006 Nick Gasson +// Copyright (C) 2006-2009 Nick Gasson // // 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 @@ -22,6 +22,7 @@ #include "OpenGL.hpp" #include "Game.hpp" #include "HighScores.hpp" +#include "InterfaceSounds.hpp" const double MenuStar::ROTATE_SPEED(0.005); const double MenuStar::ENLARGE_RATE(0.001); @@ -88,6 +89,7 @@ void MainMenu::Process() break; } + InterfaceSounds::PlayBleep(); input.ResetAction(Input::DOWN); } else if (input.QueryAction(Input::UP)) { @@ -106,6 +108,7 @@ void MainMenu::Process() break; } + InterfaceSounds::PlayBleep(); input.ResetAction(Input::UP); } else if (input.QueryAction(Input::FIRE)) { @@ -125,6 +128,7 @@ void MainMenu::Process() break; } + InterfaceSounds::PlaySelect(); input.ResetAction(Input::FIRE); } else if (input.QueryResetAction(Input::SCREENSHOT)) diff --git a/src/Menu.hpp b/src/Menu.hpp index c1386d0..9a47623 100644 --- a/src/Menu.hpp +++ b/src/Menu.hpp @@ -1,6 +1,6 @@ // // Menu.hpp -- Defintition of main menu screen. -// Copyright (C) 2006 Nick Gasson +// Copyright (C) 2006-2009 Nick Gasson // // 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 @@ -23,7 +23,7 @@ #include "ScreenManager.hpp" #include "Image.hpp" #include "Font.hpp" - +#include "SoundEffect.hpp" class MenuStar { public: diff --git a/src/Mine.cpp b/src/Mine.cpp index 143b804..66f42ae 100644 --- a/src/Mine.cpp +++ b/src/Mine.cpp @@ -1,3 +1,4 @@ +// // Mine.cpp -- Floating space mine things. // Copyright (C) 2008 Nick Gasson // @@ -18,6 +19,7 @@ #include "Mine.hpp" #include "OpenGL.hpp" #include "LoadOnce.hpp" +#include "Ship.hpp" AnimatedImage* Mine::image = NULL; @@ -107,13 +109,12 @@ void Mine::Move() } // Check if this is ok - ok = nextx >= objgrid->GetWidth() || nextx < 0 - || nexty > objgrid->GetHeight() || nexty < 0 - || objgrid->IsFilled(nextx, nexty) - || objgrid->IsFilled(nextx + 1, nexty) - || objgrid->IsFilled(nextx + 1, nexty + 1) - || objgrid->IsFilled(nextx, nexty + 1); - ok = !ok; + ok = !(nextx + 1 >= objgrid->GetWidth() || nextx < 0 + || nexty + 1 >= objgrid->GetHeight() || nexty < 0 + || objgrid->IsFilled(nextx, nexty) + || objgrid->IsFilled(nextx + 1, nexty) + || objgrid->IsFilled(nextx + 1, nexty + 1) + || objgrid->IsFilled(nextx, nexty + 1)); timeout--; } while (!ok && timeout > 0); diff --git a/src/Mine.hpp b/src/Mine.hpp index 0ad0c48..a46705b 100644 --- a/src/Mine.hpp +++ b/src/Mine.hpp @@ -19,9 +19,9 @@ #define INC_MINE_HPP #include "ObjectGrid.hpp" -#include "Ship.hpp" #include "Viewport.hpp" #include "AnimatedImage.hpp" +#include "GameObjFwd.hpp" class Mine : public StaticObject { public: diff --git a/src/Options.cpp b/src/Options.cpp index 228430f..8346224 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -1,5 +1,6 @@ +// // Options.cpp -- The options screen. -// Copyright (C) 2008 Nick Gasson +// Copyright (C) 2008-2009 Nick Gasson // // 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 @@ -20,6 +21,7 @@ #include "OpenGL.hpp" #include "Input.hpp" #include "SoundEffect.hpp" +#include "InterfaceSounds.hpp" const double Options::FADE_SPEED = 0.1; @@ -59,9 +61,18 @@ Options::Options() sound.values.push_back("Off"); sound.active = (cfile.get_bool("sound") ? 0 : 1); + Item startLevel = { "Start Level" }; + for (int i = 1; i <= 20; i++) { + ostringstream ss; + ss << i; + startLevel.values.push_back(ss.str()); + } + startLevel.active = cfile.get_int("level", 1) - 1; + items.push_back(fullscreen); items.push_back(resolution); items.push_back(sound); + items.push_back(startLevel); } void Options::Load() @@ -87,16 +98,19 @@ void Options::ProcessMain() if (input.QueryAction(Input::FIRE)) { state = optFadeOut; + InterfaceSounds::PlaySelect(); } else if (input.QueryAction(Input::UP)) { if (selected > 0) selected--; input.ResetAction(Input::UP); + InterfaceSounds::PlayBleep(); } else if (input.QueryAction(Input::DOWN)) { if (selected + 1 < items.size()) selected++; input.ResetAction(Input::DOWN); + InterfaceSounds::PlayBleep(); } else if (input.QueryAction(Input::LEFT)) { Item& item = items[selected]; @@ -105,11 +119,13 @@ void Options::ProcessMain() else item.active = (item.active - 1) % item.values.size(); input.ResetAction(Input::LEFT); + InterfaceSounds::PlayBleep(); } else if (input.QueryAction(Input::RIGHT)) { Item& item = items[selected]; item.active = (item.active + 1) % item.values.size(); input.ResetAction(Input::RIGHT); + InterfaceSounds::PlayBleep(); } } @@ -136,12 +152,21 @@ void Options::Apply() cfile.put("sound", sound); } + else if ((*it).name == "Start Level") { + istringstream ss((*it).values[(*it).active]); + int level; + ss >> level; + + cfile.put("level", level); + } } + cfile.Flush(); + assert(hres > 0 && vres > 0); if (OpenGL::GetInstance().SetVideoMode(fullscreen, hres, vres)) { - // This* must* be the very last thing that is done! + // This *must* be the very last thing that is done! RecreateScreens(); } } diff --git a/src/Ship.hpp b/src/Ship.hpp index a7acb3b..f56b894 100644 --- a/src/Ship.hpp +++ b/src/Ship.hpp @@ -1,3 +1,4 @@ +// // Ship.hpp -- The player's ship. // Copyright (C) 2008 Nick Gasson // diff --git a/src/SoundEffect.hpp b/src/SoundEffect.hpp index 51c2d7b..c31f5f9 100644 --- a/src/SoundEffect.hpp +++ b/src/SoundEffect.hpp @@ -1,3 +1,4 @@ +// // SoundEffect.hpp -- SDL Mixer wrapper. // Copyright (C) 2008 Nick Gasson // -- 2.39.2