/* * MIT License * * Copyright (c) 2024 Klingon Jane * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef LANDER_FACE_H_ #define LANDER_FACE_H_ #include "movement.h" /* My remake of a classic planet landing game. Objective: Safely land the Cringeworthy. Use your limited fuel supply to achieve a soft touch-down. End scenarios and ship's health: Hero They name this planet after you. 8 Life is very cozy. 7 6 5 Life is tolerable, plus some creature comforts 4 3 Marooned. 2 1 0 Ship destroyed. Life is harsh, no shelter. Giant hamsters are cute. ** Bug As in squished. Crater They name this crater after you. Gone As in vapourized. Landing display format is: Ship's health, intact crewmen, injured crewmen. Additional data: Crew's compliment: 13. Low fuel warning icons: activates when 3 seconds of full thrust remains. ** Yes, hamsters are very cute. However; some eating of astronauts may occur. Starting velocity, height and gravity are randomized each scenario. Fuel levels randomly assigned from 1 to 4 (hardest) to match starting parameters. A safe landing is always possible. End of game icons: LAP - Fantastic budgeting of fuel supply ( Required for heroic landing status. ) 24H - Great budgeting of fuel supply PM - Good budgeting of fuel supply SIGNAL - The combination coffee and tea maker survived Landings get progressively harder with the number of heroic landings made. Number of heroic landings are remembered. Heroic Landings Status 0 Normal 3 Hard ( first difficulty increase ) 6 Harder ( final difficulty increase ) 8 Ace 11 ?????? Save yourself. Save the coffee maker. END of standard training manual */ /* What is really going on here? The fleet is lost. You are a newbie pilot making a name for yourself. Objective: Find Earth. After reaching ?????? status, future heroic sorties will have 'some' chance in 200 of finding Earth. Your chances improve by 1 chance in 200 for each subsequent Heroic Landing (HL). Completing HL 12 will give you 1 chance in 200, for that landing. HL 13 will give you 2 chances in 200, for that landing. HL 14 will give you 3 chances in 200, for that landing. HL 20 will give you 9 chances in 200, for that landing, and so on. At these higher levels, your chances in 200 are displayed in the upper right corner on a heroic landing. For wannabe pilots only: The HL counter can be reset by crashing three consecutive missions without touching the thrust button. ( 6 to reset Earth-found counter ) Find Earth. Save Humanity. */ typedef struct { int32_t height; int16_t speed; // Positive is up uint16_t tick_counter; // For minimum delays uint16_t fuel_start; uint16_t fuel_remaining; uint16_t fuel_tpl; // Fuel required for theoretical perfect landing uint16_t fuel_score; // 100 is perfect; higher is less perfect int8_t gravity; // negative downwards value bool led_enabled; // Can the led be turned on? bool led_active; // Did we use it this scenario? uint8_t mode; // 0 Pre-launch waiting, 1 show level, 2 playing, 3 touchdown blank, 4 final display, 5 monster uint8_t skill_level; // 1 thru 4. Dictates fuel alloted int8_t ships_health; // 0 thru 8. -1 = major crash uint8_t hero_counter; // Total heroic landings ever uint8_t legend_counter; // Historic events counter ( Earth ) uint8_t difficulty_level; // Based on hero_counter uint8_t reset_counter; // Can reset hero_counter by crashing using zero fuel several consecutive scenarios uint8_t monster_type; // Which monster is hungry? uint8_t uninjured; // OK survivors uint8_t injured; // Hurt survivors } lander_state_t; void lander_face_setup(uint8_t watch_face_index, void ** context_ptr); void lander_face_activate(void *context); bool lander_face_loop(movement_event_t event, void *context); void lander_face_resign(void *context); #define lander_face ((const watch_face_t){ \ lander_face_setup, \ lander_face_activate, \ lander_face_loop, \ lander_face_resign, \ NULL, \ }) #endif // LANDER_FACE_H_