diff --git a/.gitattributes b/.gitattributes index 671dc77..7430b7d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,2 @@ *.mp4 filter=lfs diff=lfs merge=lfs -text *.webm filter=lfs diff=lfs merge=lfs -text -*.MOV filter=lfs diff=lfs merge=lfs -text -*.mov filter=lfs diff=lfs merge=lfs -text -*.mp3 filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index e8d9acd..27aa5e8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ **/.vs **/bin .DS_Store +christmas diff --git a/christmas/AdAstra.atsln b/christmas/AdAstra.atsln deleted file mode 100644 index 14ee877..0000000 --- a/christmas/AdAstra.atsln +++ /dev/null @@ -1,19 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Atmel Studio Solution File, Format Version 11.00 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "AdAstra", "AdAstra\AdAstra.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Release|AVR = Release|AVR - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR - {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/christmas/AdAstra/AdAstra.componentinfo.xml b/christmas/AdAstra/AdAstra.componentinfo.xml deleted file mode 100644 index 52c412d..0000000 --- a/christmas/AdAstra/AdAstra.componentinfo.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/christmas/AdAstra/AdAstra.cproj b/christmas/AdAstra/AdAstra.cproj deleted file mode 100644 index 6553768..0000000 --- a/christmas/AdAstra/AdAstra.cproj +++ /dev/null @@ -1,396 +0,0 @@ - - - - 2.0 - 7.0 - com.Atmel.AVRGCC8.C - dce6c7e3-ee26-4d79-826b-08594b9ad897 - ATtiny85 - none - Executable - C - $(MSBuildProjectName) - .elf - $(MSBuildProjectDirectory)\$(Configuration) - TestProject - TestProject - TestProject - Native - false - false - false - true - 0x20000000 - - false - exception_table - 2 - 0 - 0 - - - - - - - - - - - - - - com.atmel.avrdbg.tool.ispmk2 - 000200212345 - 0x1E930B - ISP - 125000 - - - - 125000 - - ISP - - com.atmel.avrdbg.tool.ispmk2 - 000200212345 - AVRISP mkII - - - - - - - - - com.atmel.avrdbg.tool.simulator - - - Simulator - - - - - - -mmcu=attiny85 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\gcc\dev\attiny85" - True - True - True - True - False - True - True - True - - - NDEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - ../src/macros - - - Optimize for size (-Os) - True - True - True - True - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - - - - - ad_astra - .elf - - - - - -mmcu=attiny85 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\gcc\dev\attiny85" - True - True - True - True - False - True - True - - - DEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - - - Default (-Wa,-g) - - - - - - - -mmcu=attiny85 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\gcc\dev\attiny85" - True - True - True - True - True - False - True - True - - - NDEBUG - UART_ENABLED - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - - - Optimize for size (-Os) - True - True - True - True - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.229\include - - - - - ad_astra - .elf - bin\WithUART\ - - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - compile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/christmas/AdAstra/AdAstra.xml b/christmas/AdAstra/AdAstra.xml deleted file mode 100644 index 121a635..0000000 --- a/christmas/AdAstra/AdAstra.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - Device - Startup - - - Atmel - 1.3.0 - C:/Program Files (x86)\Atmel\Studio\7.0\Packs - - - - - C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\include - - include - C - - - include - - - - - C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\include\avr\iotn85.h - - header - C - RcYmivGpgsCGGCzeWAIjcA== - - include/avr/iotn85.h - - - - - C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\templates\main.c - template - source - C Exe - 9ptzGqB00V1zM0TC00KMag== - - templates/main.c - Main file (.c) - - - - C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\templates\main.cpp - template - source - C Exe - YXFphlh0CtZJU+ebktABgQ== - - templates/main.cpp - Main file (.cpp) - - - - C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\gcc\dev\attiny85 - - libraryPrefix - GCC - - - gcc/dev/attiny85 - - - - - ATtiny_DFP - C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.3.229/Atmel.ATtiny_DFP.pdsc - 1.3.229 - true - ATtiny85 - - - - Resolved - Fixed - true - - - \ No newline at end of file diff --git a/christmas/AdAstra/src/driver/display/display.c b/christmas/AdAstra/src/driver/display/display.c deleted file mode 100644 index a1b6259..0000000 --- a/christmas/AdAstra/src/driver/display/display.c +++ /dev/null @@ -1,137 +0,0 @@ -#include "display.h" - -#include - -#include "bitwise.h" -#include "math.h" -#include "../../hardware_access/hardware_access.h" - - -static uint8_t const configuration[] PROGMEM = { - 0xD5, 0xF0, // set clock frequency - 0x8D, 0x14, // enable charge pump - 0x20, 0x00, // horizontal addressing mode - 0xD6, 0x01, // 2 times vertical zoom - 0x22, 0x00, 0x03, // only draw to the top half of the screen - 0xAF // display on -}; - -static struct { - uint8_t compositingBuffer[DISPLAY_WIDTH_IN_PIXELS]; - Rectangle compositingWindow; - DrawFunction drawEverything; - bool wasIntersection; -} display; - -static inline void commandMode() { - setOutputPin(DISPLAY_DC_OUTPUT_PIN, false); -} - -static inline void dataMode() { - setOutputPin(DISPLAY_DC_OUTPUT_PIN, true); -} - -void setDisplayContrast(uint8_t value) { - commandMode(); - sendByteOnSPI(0x81); - sendByteOnSPI(value); - dataMode(); -} - -void turnDisplayOnOff(bool shouldBeOn) { - commandMode(); - sendByteOnSPI(0x8D | shouldBeOn); // set charge pump on/off - sendByteOnSPI(0x10 | shouldBeOn << 2); // set charge pump on/off - sendByteOnSPI(0xAE | shouldBeOn); // turn display sleep on/off - dataMode(); -} - -void initializeDisplay(DrawFunction drawEverything) { - setOutputPin(DISPLAY_RESET_OUTPUT_PIN, false); - for (volatile uint8_t i = 0; i != 255; i++) - ; - // some time has to elapse before the next line gets called, - // otherwise the display wont turn on - setOutputPin(DISPLAY_RESET_OUTPUT_PIN, true); - - for (uint8_t i = 0; i < sizeof(configuration); i++) { - sendByteOnSPI(pgm_read_byte(configuration + i)); - } - - display.drawEverything = drawEverything; - setDisplayContrast(255); - dataMode(); -} - -void startIntersectionTest(Rectangle compositingWindow) { - display.wasIntersection = false; - display.compositingWindow = compositingWindow; -} - -bool endIntersectionTest() { - for (uint8_t x = 0; x < DISPLAY_WIDTH_IN_PIXELS; x++) { - display.compositingBuffer[x] = 0; - } - return display.wasIntersection; -} - -void drawFrame() { - display.compositingWindow = DEFAULT_COMPOSITING_WINDOW; - for (display.compositingWindow.position.y = 0; display.compositingWindow.position.y < DISPLAY_HEIGHT_IN_PIXELS; display.compositingWindow.position.y += 8) { - display.drawEverything(display.compositingWindow); - - for (uint8_t x = 0; x < DISPLAY_WIDTH_IN_PIXELS; x++) { - sendByteOnSPI(display.compositingBuffer[x]); - sendByteOnSPI(display.compositingBuffer[x]); - display.compositingBuffer[x] = 0; - } - } -} - -static void compositePixelColumn(uint8_t x, uint8_t invertedMask, uint8_t fill) { - if (display.compositingBuffer[x] & fill) { - display.wasIntersection = true; - } - display.compositingBuffer[x] = (display.compositingBuffer[x] & (~invertedMask)) | fill; -} - -void drawBitmapFromProgMem(Rectangle boundingBox, uint16_t const bitmap[boundingBox.size.x][(boundingBox.size.y + 7) / 8], bool isMirrored) { - boundingBox.position = substract(boundingBox.position, display.compositingWindow.position); - - uint8_t spriteY = max(0, -boundingBox.position.y); - uint8_t spriteYByte = spriteY >> 3; - - for (uint8_t x = max(0, -boundingBox.position.x); x < boundingBox.size.x && boundingBox.position.x + x < DISPLAY_WIDTH_IN_PIXELS; x++) { - uint8_t spriteX = isMirrored ? boundingBox.size.x - x - 1 : x; - uint16_t currentPixelColumn = pgm_read_word(&bitmap[spriteX][spriteYByte]); - - uint8_t fill, invertedMask; - if (boundingBox.position.y >= 0) { - fill = (currentPixelColumn & 0x00FF) << boundingBox.position.y; - invertedMask = currentPixelColumn >> 8 << boundingBox.position.y; - } else { - uint16_t lowerPixelColumn = spriteYByte + 1 < (boundingBox.size.y + 7) / 8 ? pgm_read_word(&bitmap[spriteX][spriteYByte + 1]) : 0; - uint8_t shift = spriteY % 8; - uint8_t inverseShift = 8 - shift; - - fill = ((currentPixelColumn & 0x00FF) >> shift) | ((lowerPixelColumn & 0x0FF) << inverseShift); - invertedMask = (currentPixelColumn >> 8 >> shift) | (lowerPixelColumn >> 8 << inverseShift); - } - - compositePixelColumn(boundingBox.position.x + x, invertedMask, fill); - } -} - -void drawFilledRectangle(Rectangle box, uint8_t invertedMask, uint8_t fill) { - box.position = substract(box.position, display.compositingWindow.position); - - uint8_t upperGapHeight = min(8, max(0, box.position.y)); - uint8_t lowerGapHeight = min(8, max(0, 8 - (box.position.y + box.size.y))); - - uint8_t actualFill = (fill >> lowerGapHeight) & (fill << upperGapHeight); - uint8_t actualInvertedMask = (invertedMask >> lowerGapHeight) & (invertedMask << upperGapHeight); - - for (uint8_t x = max(0, box.position.x); x < box.position.x + box.size.x && x < DISPLAY_WIDTH_IN_PIXELS; x++) { - compositePixelColumn(x, actualInvertedMask, actualFill); - } -} diff --git a/christmas/AdAstra/src/driver/display/display.h b/christmas/AdAstra/src/driver/display/display.h deleted file mode 100644 index 37681e1..0000000 --- a/christmas/AdAstra/src/driver/display/display.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef DISPLAY_H -#define DISPLAY_H - -#include -#include - -#include "../../util/rectangle/rectangle.h" - - -/* - SPI driver for D096-12864 -*/ - -#define DISPLAY_RESET_OUTPUT_PIN PB0 -#define DISPLAY_DC_OUTPUT_PIN PB4 - -// A two-times downscaling is used for greater performance -#define DISPLAY_WIDTH_IN_PIXELS 64 -#define DISPLAY_HEIGHT_IN_PIXELS 32 - -// To easily access the window size -#define WINDOW ((Rectangle){(Vec2){0, 0}, (Vec2){DISPLAY_WIDTH_IN_PIXELS, DISPLAY_HEIGHT_IN_PIXELS}}) - -// To conserve RAM, drawing is done in chunks of DEFAULT_COMPOSITING_WINDOW size -// instead of buffering the whole display and writing it out at once -#define DEFAULT_COMPOSITING_WINDOW ((Rectangle){(Vec2){0, 0}, (Vec2){DISPLAY_WIDTH_IN_PIXELS, 8}}) - -typedef void (*DrawFunction)(Rectangle); - -// Call DrawFunction n times after a call to drawFrame has been made -void initializeDisplay(DrawFunction drawEverything); - -// Set a the brightness of the display -// Value can be any number between 0 and 255. -void setDisplayContrast(uint8_t value); - -// To conserve program memory, pixel based intersection test -// is implemented here. -// Calling draw functions after calling startIntersectionTest -// will set a wasIntersection bit appropriately. - -// Clear buffer and wasIntersection bit -void startIntersectionTest(); - -// Make the display go to / return from sleep -void turnDisplayOnOff(bool shouldBeOn); - -// Return wasIntersection bit -bool endIntersectionTest(); - -// Initiate a draw sequence -void drawFrame(); - -// Draw a sprite of size boundingBox.size at boundingBox.position from bitmap -// if isMirrored then mirror around the vertical axis -// Bitmap's data is interpreted the following way: -/* - Each 16 bit word corresponds to an 8 pixel high column. - (These columns are laid out horizontally from left to right. Unfortunately, - the display uses this addressing mode.) The higher 8 bits of the word is the - inverted mask and the lower 8 bits are the fill bits. - newPixelColumn = oldPixelColumn & ~invertedMask | fill; - - This seemingly weird layout is used to take advantage of SIMD operations - and speed up the drawing process significantly. -*/ -void drawBitmapFromProgMem(Rectangle boundingBox, uint16_t const bitmap[boundingBox.size.x][(boundingBox.size.y + 7) / 8], bool isMirrored); - -// Draw a one byte repeated texture covering the parameter box -// for a white rectangle use these arguments: invertedMask: don't care, fill: 0xFF -// for a black rectangle use these arguments: invertedMask: 0xFF, fill: 0x00 -void drawFilledRectangle(Rectangle box, uint8_t invertedMask, uint8_t fill); - -#endif diff --git a/christmas/AdAstra/src/driver/infra/infra.c b/christmas/AdAstra/src/driver/infra/infra.c deleted file mode 100644 index 0459e78..0000000 --- a/christmas/AdAstra/src/driver/infra/infra.c +++ /dev/null @@ -1,144 +0,0 @@ -#include "infra.h" - -#include -#include - -#include "bitwise.h" -#include "../../hardware_access/hardware_access.h" - - -// (0.5625 + (0.5625 + 1.6875) / 2) / 1000 / timer interval -#define MEAN_OF_0_1_BIT_TIMES 53 -// 9 / 2 / 1000 / timer interval -#define MAYBE_ONE_CHECK_TIME 141 -// some large value -#define TIMEOUT 254 - -typedef enum { - idle, maybeLeadingOne, leadingOneConfirmed, activeFirstBit, active, timingOut -} ProtocolState; - -typedef enum { - noMatch, foundStartingByte, significantByte, waitingForEndOfCommand, waitingForRepeat -} CommandState; - -static struct { - uint8_t current; - uint8_t bitPosition; - ProtocolState protocolState; - CommandState commandState; - OnCommandReceived onCommandReceived; -} infra; - - -static void saveCurrentByte() { - uint8_t byte = infra.current; - infra.current = 0; - infra.bitPosition = 0; - - if (byte == INFRA_ADDRESS) { - infra.commandState = foundStartingByte; - return; - } - - switch (infra.commandState) { - case foundStartingByte: - infra.commandState = significantByte; - break; - case significantByte: - infra.onCommandReceived(byte); - infra.commandState = waitingForEndOfCommand; - break; - case waitingForEndOfCommand: - if (byte == 0) { - infra.commandState = waitingForRepeat; - } - break; - case waitingForRepeat: - if (byte == 0) { - infra.onCommandReceived(REPEAT_CODE); - } - break; - default: - break; - } -} - -static void saveBit(uint8_t bit) { - infra.current <<= 1; - infra.current |= bit; - if (++infra.bitPosition == 8) { - saveCurrentByte(); - } -} - -static inline uint8_t isIrOff() { - return getBit(PINB, IR_PIN); -} - -static inline uint8_t isIrOn() { - return !isIrOff(); -} - -ISR(PCINT0_vect) { - switch (infra.protocolState) { - case idle: - if (isIrOn()) { - enableTimerB(MAYBE_ONE_CHECK_TIME); - infra.protocolState = maybeLeadingOne; - } - break; - case maybeLeadingOne: - infra.protocolState = idle; - break; - case leadingOneConfirmed: - if (isIrOff()) { - infra.protocolState = activeFirstBit; - } - break; - case activeFirstBit: - case timingOut: - if (isIrOn()) { - infra.protocolState = active; - enableTimerB(MEAN_OF_0_1_BIT_TIMES); - } - break; - case active: - if (isIrOn()) { - saveBit(1); - enableTimerB(MEAN_OF_0_1_BIT_TIMES); - } - break; - } -} - -ISR(TIM0_COMPB_vect) { - switch (infra.protocolState) { - case maybeLeadingOne: - if (isIrOn()) { - infra.protocolState = leadingOneConfirmed; - } - disableTimerB(); - break; - case active: - saveBit(0); - infra.protocolState = timingOut; - enableTimerB(TIMEOUT); - break; - case timingOut: - infra.protocolState = idle; - saveCurrentByte(); - disableTimerB(); - break; - default: - disableTimerB(); - break; - } -} - -void initializeInfra(OnCommandReceived onCommandReceived) { - setBit(PORTB, IR_PIN); // enable pull-up - setBit(PCMSK, IR_PIN); // specific pin change interrupt enable - setBit(GIMSK, PCIE); // global on pin change interrupt enable; - infra.onCommandReceived = onCommandReceived; -} diff --git a/christmas/AdAstra/src/driver/infra/infra.h b/christmas/AdAstra/src/driver/infra/infra.h deleted file mode 100644 index 312d3e5..0000000 --- a/christmas/AdAstra/src/driver/infra/infra.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef INFRA_H -#define INFRA_H - -#include -#include - - -/* - Custom NEC implementation using a TSOP4838 -*/ - -#define INFRA_ADDRESS 255 -#define IR_PIN PB3 -#define REPEAT_CODE 1 - -typedef void (*OnCommandReceived)(uint8_t); -typedef void (*OnReceiveStarted)(); - -// Initialize infra and call onCommandReceived with every received byte -// Call onCommandReceived with the argument REPEAT_CODE if a repeat code -// has been received. -void initializeInfra(OnCommandReceived onCommandReceived); - -#endif diff --git a/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.c b/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.c deleted file mode 100644 index 6d43090..0000000 --- a/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "redundant_storage.h" - -#include "../../hardware_access/hardware_access.h" - -#define offsetof(type, member) __builtin_offsetof (type, member) - -#define OBJECT_VALIDITY_MASK (0b00111111) -#define IS_USING_PAGE_A_BIT 6 -#define IS_VALID_BIT 7 -#define METADATA_REDUNDANCY 4 - -typedef struct { - uint8_t redundantBufferA[REDUNDANT_BUFFER_SIZE]; - uint8_t redundantBufferB[REDUNDANT_BUFFER_SIZE]; - uint8_t metadata[METADATA_REDUNDANCY]; -} MemoryLayout; - -static volatile struct { - MemoryLayout buffer; - uint8_t saveIndex; - uint8_t* savePointer; - uint8_t loadIndex; - uint8_t* loadPointer; - uint8_t validMetadata; - bool isEEPROMWriting; -} storage; - -static inline bool isUsingPageA() { - return getBit(storage.validMetadata, IS_USING_PAGE_A_BIT); -} - -bool isValid() { - return getBit(storage.validMetadata, IS_VALID_BIT); -} - -static inline void fixMetadata() { - uint8_t a = storage.buffer.metadata[0]; - uint8_t b = storage.buffer.metadata[1]; - uint8_t c = storage.buffer.metadata[2]; - uint8_t d = storage.buffer.metadata[3]; - - if (a == b || a == c || a == d) { - storage.validMetadata = a; - } else if (b == c || b == d) { - storage.validMetadata = b; - } else { - storage.validMetadata = c; - } -} - -void initializeRedundantStorage() { - for (uint8_t i = 0; i < sizeof(MemoryLayout); i++) { - ((uint8_t*)&storage.buffer)[i] = loadSavedByteEEPROM(i); - } - - fixMetadata(); -} - -void invalidateEEPROM() { - for (uint8_t i = 0; i < sizeof(MemoryLayout); i++) { - ((uint8_t*)&storage.buffer)[i] = 0; - } - - storage.validMetadata = 0; -} - -void onEEPROMWriteFinished(__attribute__((unused)) uint8_t* _) { - storage.isEEPROMWriting = false; -} - -bool startSchedulingObjectsForSaving() { - if (storage.isEEPROMWriting) { - return false; - } - - toggleBit(storage.validMetadata, IS_USING_PAGE_A_BIT); - storage.validMetadata &= ~OBJECT_VALIDITY_MASK; - storage.saveIndex = 0; - storage.savePointer = isUsingPageA() ? - storage.buffer.redundantBufferA - : storage.buffer.redundantBufferB; - - return true; -} - -void scheduleNextObjectForSave(uint8_t* object, uint8_t size) { - setBit(storage.validMetadata, storage.saveIndex); - storage.saveIndex++; - for (uint8_t i = 0; i < size; i++) { - *storage.savePointer = object[i]; - storage.savePointer++; - } -} - -void saveScheduledObjects() { - setBit(storage.validMetadata, IS_VALID_BIT); - - for (uint8_t i = 0; i < METADATA_REDUNDANCY; i++) { - storage.buffer.metadata[i] = storage.validMetadata; - } - - storage.isEEPROMWriting = true; - asyncWriteEEPROM((uint8_t*)&storage.buffer, onEEPROMWriteFinished); -} - -bool loadNextObject(uint8_t* holder, uint8_t size) { - if (storage.loadIndex++ == 0) { - storage.loadPointer = isUsingPageA() ? - storage.buffer.redundantBufferA - : storage.buffer.redundantBufferB; - } - - if (getBit(storage.validMetadata, storage.loadIndex - 1)) { - for (uint8_t i = 0; i < size; i++) { - holder[i] = *storage.loadPointer++; - } - return true; - } - return false; -} diff --git a/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.h b/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.h deleted file mode 100644 index 18117a7..0000000 --- a/christmas/AdAstra/src/driver/redundant_storage/redundant_storage.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef REDUNDANT_STORAGE_H -#define REDUNDANT_STORAGE_H - -#include -#include - - -#define REDUNDANT_BUFFER_SIZE 24 - -void initializeRedundantStorage(); - -bool isValid(); -void invalidateEEPROM(); - -bool startSchedulingObjectsForSaving(); -void scheduleNextObjectForSave(uint8_t* object, uint8_t size); -void saveScheduledObjects(); - -// Returns is loaded object valid -bool loadNextObject(uint8_t* holder, uint8_t size); - -#endif diff --git a/christmas/AdAstra/src/driver/sleep/sleep.c b/christmas/AdAstra/src/driver/sleep/sleep.c deleted file mode 100644 index b6f0adf..0000000 --- a/christmas/AdAstra/src/driver/sleep/sleep.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "sleep.h" - -#include -#include -#include - -#include "bitwise.h" -#include "../../hardware_access/hardware_access.h" - - -#define TICKS_IN_MILISECOND 31 - -volatile int8_t milisecondsSinceFrameStart; - -void startFrameLoop(FrameFunction function, uint8_t frameLengthInMilliseconds) { - sleep_enable(); - - uint8_t previousFrameTime = 0; - while (function(previousFrameTime)) { - previousFrameTime = milisecondsSinceFrameStart; - - while (milisecondsSinceFrameStart < frameLengthInMilliseconds) { - clearBit(MCUCR, SM1); // idle mode - sleep_cpu(); - } - - milisecondsSinceFrameStart = 0; - } -} - -void powerOff() { - setBit(MCUCR, SM1); // power-down mode - sleep_cpu(); -} - -ISR(TIM0_COMPA_vect) { - milisecondsSinceFrameStart++; - enableTimerA(TICKS_IN_MILISECOND); -} \ No newline at end of file diff --git a/christmas/AdAstra/src/driver/sleep/sleep.h b/christmas/AdAstra/src/driver/sleep/sleep.h deleted file mode 100644 index fe6a7ea..0000000 --- a/christmas/AdAstra/src/driver/sleep/sleep.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef SLEEP_H -#define SLEEP_H - -#include -#include - -// FrameFunction gets previousFrameTime (in milliseconds) as argument -typedef bool (*FrameFunction)(uint8_t); - -// Shut down the machine -void powerOff(); - -// Call function every frameLengthInMilliseconds while it returns true -void startFrameLoop(FrameFunction function, uint8_t frameLengthInMilliseconds); - -#endif diff --git a/christmas/AdAstra/src/hardware_access/eeprom/eeprom.c b/christmas/AdAstra/src/hardware_access/eeprom/eeprom.c deleted file mode 100644 index dac0795..0000000 --- a/christmas/AdAstra/src/hardware_access/eeprom/eeprom.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "eeprom.h" - -#include -#include -#include - -#include "bitwise.h" - - -uint8_t memory[STORAGE_SIZE] EEMEM; - -static volatile struct { - uint8_t* buffer; - uint8_t positon; - bool isWriting; - OnEEPROMFinished onFinished; -} eeprom; - -uint8_t loadByteEEPROM(uint8_t* address) { - while(getBit(EECR, EEPE)) {} - - EEAR = (uint16_t)address; - setBit(EECR, EERE); - return EEDR; -} - -uint8_t loadSavedByteEEPROM(uint8_t address) { - return loadByteEEPROM(memory + address); -} - -uint16_t loadWordEEPROM(uint16_t const* address) { - uint16_t high = ((uint16_t)loadByteEEPROM((uint8_t*)address + 1)) << 8; - uint16_t low = (uint16_t)loadByteEEPROM((uint8_t*)address); - return high | low; -} - -static inline void saveByteEEPROM(uint8_t* address, uint8_t byte) { - if (byte != loadByteEEPROM(address)) { - EEDR = byte; - setBit(EECR, EEMPE); - setBit(EECR, EEPE); - } -} - -void enableWritingEEPROM() { - modifyBit(EECR, EERIE, eeprom.isWriting); -} - -void disableWritingEEPROM() { - clearBit(EECR, EERIE); // clear eeprom ready interrupt enable -} - -bool asyncWriteEEPROM(uint8_t* buffer, OnEEPROMFinished onFinished) { - if (eeprom.isWriting) { - return false; - } - - eeprom.buffer = buffer; - eeprom.onFinished = onFinished; - eeprom.positon = 0; - eeprom.isWriting = true; - setBit(EECR, EERIE); // set eeprom ready interrupt - - return true; -} - -ISR(EE_RDY_vect) { - saveByteEEPROM(memory + eeprom.positon, eeprom.buffer[eeprom.positon]); - - if (++eeprom.positon == STORAGE_SIZE) { - clearBit(EECR, EERIE); - eeprom.isWriting = false; - eeprom.onFinished(eeprom.buffer); - } -} diff --git a/christmas/AdAstra/src/hardware_access/eeprom/eeprom.h b/christmas/AdAstra/src/hardware_access/eeprom/eeprom.h deleted file mode 100644 index 60627c8..0000000 --- a/christmas/AdAstra/src/hardware_access/eeprom/eeprom.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef EEPROM_H -#define EEPROM_H - -#include - - -#define STORAGE_SIZE 52 - -typedef void (*OnEEPROMFinished)(uint8_t*); - -inline void initializeEEPROM() { - EECR = 0; // atomic write -} - -#endif diff --git a/christmas/AdAstra/src/hardware_access/hardware_access.c b/christmas/AdAstra/src/hardware_access/hardware_access.c deleted file mode 100644 index ebc04ea..0000000 --- a/christmas/AdAstra/src/hardware_access/hardware_access.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "hardware_access.h" - -#include - - -void initializeHardwareAccess() { - sei(); - initializePowerSaving(); - initializeSPI(); - initializeTiming(); - initializeOutputPins(); -} diff --git a/christmas/AdAstra/src/hardware_access/hardware_access.h b/christmas/AdAstra/src/hardware_access/hardware_access.h deleted file mode 100644 index e236e4c..0000000 --- a/christmas/AdAstra/src/hardware_access/hardware_access.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef HARDWARE_ACCESS_H -#define HARDWARE_ACCESS_H - -#include -#include -#include "bitwise.h" - -#include "power_saving/power_saving.h" -#include "spi/spi.h" -#include "timing/timing.h" -#include "output_pins/output_pins.h" - - -/* - This module contains the lowest level functions to manipulate the hardware. - You only have to include this header file which serves as a facade. - The sub-modules' implementation can be freely changed as long as they - still implement these functions. -*/ - -// Initialize every hardware element at once -void initializeHardwareAccess(); - -// Enable interrupt OCCRA for TIMER0 with a modulo of triggerInterruptInXTicks -void enableTimerA(uint8_t triggerInterruptInXTicks); - -// Enable interrupt OCCRB for TIMER0B with a modulo of triggerInterruptInXTicks -void enableTimerB(uint8_t triggerInterruptInXTicks); -void disableTimerB(); - -// Send a single byte on the built-in SPI interface -// The transfer is done in a serial manner to achieve -// greater throughput. -void sendByteOnSPI(uint8_t byte); - -// Set the value of an output pin -void setOutputPin(uint8_t id, bool value); - -#endif diff --git a/christmas/AdAstra/src/hardware_access/output_pins/output_pins.c b/christmas/AdAstra/src/hardware_access/output_pins/output_pins.c deleted file mode 100644 index aa8f07e..0000000 --- a/christmas/AdAstra/src/hardware_access/output_pins/output_pins.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "output_pins.h" -#include "bitwise.h" - -#include -#include - - -void setOutputPin(uint8_t id, bool value) { - setBit(DDRB, id); - modifyBit(PORTB, id, value); -} diff --git a/christmas/AdAstra/src/hardware_access/output_pins/output_pins.h b/christmas/AdAstra/src/hardware_access/output_pins/output_pins.h deleted file mode 100644 index 8d3b8a5..0000000 --- a/christmas/AdAstra/src/hardware_access/output_pins/output_pins.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef GPIO_OUTPUT_PINS_H -#define GPIO_OUTPUT_PINS_H - - -inline void initializeOutputPins() {} - -#endif diff --git a/christmas/AdAstra/src/hardware_access/power_saving/power_saving.h b/christmas/AdAstra/src/hardware_access/power_saving/power_saving.h deleted file mode 100644 index a4abd37..0000000 --- a/christmas/AdAstra/src/hardware_access/power_saving/power_saving.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POWER_SAVING_H -#define POWER_SAVING_H - -#include -#include "bitwise.h" - - -inline void initializePowerSaving() { - setBit(ACSR, ACD); // disable ADC to save power - PRR = BV(PRTIM1) | BV(PRADC); // disable power to timer1 and ADC -} - -#endif diff --git a/christmas/AdAstra/src/hardware_access/spi/spi.c b/christmas/AdAstra/src/hardware_access/spi/spi.c deleted file mode 100644 index 32a31dd..0000000 --- a/christmas/AdAstra/src/hardware_access/spi/spi.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "spi.h" - -#include - -#define SWAP_BIT (BV(USIWM0) | BV(USICLK) | BV(USITC) | BV(USICS1)) - - -void sendByteOnSPI(uint8_t byte) { - USIDR = byte; - - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; - USICR = SWAP_BIT; -} diff --git a/christmas/AdAstra/src/hardware_access/spi/spi.h b/christmas/AdAstra/src/hardware_access/spi/spi.h deleted file mode 100644 index 9eca28a..0000000 --- a/christmas/AdAstra/src/hardware_access/spi/spi.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef SPI_H -#define SPI_H - -#include -#include "bitwise.h" - - -#define DO_PIN PB1 -#define USCK_PIN PB2 - -inline void initializeSPI() { - DDRB |= BV(DO_PIN) | BV(USCK_PIN); // set pin directions for MOSI and SCK -} - -#endif diff --git a/christmas/AdAstra/src/hardware_access/timing/timing.c b/christmas/AdAstra/src/hardware_access/timing/timing.c deleted file mode 100644 index 4069557..0000000 --- a/christmas/AdAstra/src/hardware_access/timing/timing.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "timing.h" -#include "bitwise.h" - - -void enableTimerA(uint8_t triggerInterruptInXTicks) { - OCR0A = TCNT0 + triggerInterruptInXTicks; -} - -void enableTimerB(uint8_t triggerInterruptInXTicks) { - setBit(TIFR, OCF0B); - OCR0B = TCNT0 + triggerInterruptInXTicks; - setBit(TIMSK, OCIE0B); -} - -void disableTimerB() { - clearBit(TIMSK, OCIE0B); -} diff --git a/christmas/AdAstra/src/hardware_access/timing/timing.h b/christmas/AdAstra/src/hardware_access/timing/timing.h deleted file mode 100644 index 758f0c1..0000000 --- a/christmas/AdAstra/src/hardware_access/timing/timing.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef TIMING_H -#define TIMING_H - -#include -#include "bitwise.h" - - -inline void initializeTiming() { - TCCR0B = BV(CS02); // CLK / 256 - setBit(TIMSK, OCIE0A); -} - -#endif diff --git a/christmas/AdAstra/src/macros/bitwise.h b/christmas/AdAstra/src/macros/bitwise.h deleted file mode 100644 index e8eb48a..0000000 --- a/christmas/AdAstra/src/macros/bitwise.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef BITWISE_H -#define BITWISE_H - -#define BV(x) (1 << (x)) -#define modifyBit(P, B, V) ((P) = ((P) & ~BV(B)) | ((V) << B)) -#define setBit(P, B) ((P) |= BV(B)) -#define clearBit(P, B) ((P) &= ~BV(B)) -#define toggleBit(P, B) ((P) ^= BV(B)) -#define getBit(P, B) (((P) & BV(B)) >> (B)) - -#endif diff --git a/christmas/AdAstra/src/macros/math.h b/christmas/AdAstra/src/macros/math.h deleted file mode 100644 index 5347d60..0000000 --- a/christmas/AdAstra/src/macros/math.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef MATH_H -#define MATH_H - - -#define max(a, b) ((a) > (b) ? (a) : (b)) -#define min(a, b) ((a) > (b) ? (b) : (a)) -#define abs(a, b) ((a) > 0 ? (a) : (-a)) - -#endif diff --git a/christmas/AdAstra/src/macros/null.h b/christmas/AdAstra/src/macros/null.h deleted file mode 100644 index 2090ad6..0000000 --- a/christmas/AdAstra/src/macros/null.h +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef NULL -#define NULL ((void*)0) -#endif diff --git a/christmas/AdAstra/src/main.c b/christmas/AdAstra/src/main.c deleted file mode 100644 index 77760e4..0000000 --- a/christmas/AdAstra/src/main.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "mediator/mediator.h" - - -// Stemming from the module oriented nature of the project -// there is a module responsible for setting up and orchestrating -// the other modules. -// -// From the main function we only have to instruct the mediator to -// do its job. - -int main(void) { - setupConnections(); - startGame(); -} diff --git a/christmas/AdAstra/src/mediator/mediator.c b/christmas/AdAstra/src/mediator/mediator.c deleted file mode 100644 index 2ee5689..0000000 --- a/christmas/AdAstra/src/mediator/mediator.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "mediator.h" - -#include - -#include "../hardware_access/hardware_access.h" -#include "../objects/object_container/object_container.h" -#include "../objects/event_generator/event_generator.h" -#include "../objects/commands/commands.h" -#include "../objects/ai/ai.h" -#include "../driver/display/display.h" -#include "../driver/infra/infra.h" -#include "../driver/sleep/sleep.h" - -#define TARGET_FRAME_DURATION 20 // ms -#define DEATH_SCREEN_LENGTH 50 // frames -#define SAVE_INTERVAL 50 // every x frames - -static struct { - uint8_t contrast; - uint8_t framesSinceLastSave; - uint8_t deathDownCounter; - uint8_t receivedWakeUpBitCount; -} state = { - .contrast = 255 -}; - -static inline bool handleDeathAnimation() { - if (isSpaceshipDestroyed()) { - setDisplayContrast(state.contrast * (state.deathDownCounter / DEATH_SCREEN_LENGTH)); - if (state.deathDownCounter-- == 0) { - return false; - }; - } - return true; -} - -static bool frameFunction(uint8_t previousFrameTime) { - tickObjects(previousFrameTime); - handleCommands(); - handleAI(); - generateEvents(); - drawFrame(); - return handleDeathAnimation(); -} - -static inline void initializeGame() { - state.deathDownCounter = DEATH_SCREEN_LENGTH; - setDisplayContrast(state.contrast); - initializeBackground(); - initializeObjectContainer(); -} - -void setupConnections() { - initializeHardwareAccess(); - initializeInfra(addCommand); - initializeDisplay(drawObjects); -} - -void startGame() { - while (true) { - initializeGame(); - startFrameLoop(frameFunction, TARGET_FRAME_DURATION); - } -} - -void changeDisplayContrast(int8_t by) { - if (by < 0) { - state.contrast = (state.contrast < -by) ? 0 : (state.contrast + by); - } else { - state.contrast = (state.contrast > 255 - by) ? 255 : (state.contrast + by); - } - - setDisplayContrast(state.contrast); -} diff --git a/christmas/AdAstra/src/mediator/mediator.h b/christmas/AdAstra/src/mediator/mediator.h deleted file mode 100644 index 5dba541..0000000 --- a/christmas/AdAstra/src/mediator/mediator.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MEDIATOR_H -#define MEDIATOR_H - -#include - - -// Setup the drivers, and business layer objects and their relations -// It is kind of a very basic dependency injection. -void setupConnections(); - -// Start drawing frames and ticking objects -void startGame(); - -// Make the machine go to sleep -void handleOff(); - -// Increase or decrease the contrast (brightness) of the display -// by the given value -// The contrast can be any number between 0 and 255. -// The function automatically clamps the contrast. -void changeDisplayContrast(int8_t by); - -#endif diff --git a/christmas/AdAstra/src/objects/ai/ai.c b/christmas/AdAstra/src/objects/ai/ai.c deleted file mode 100644 index d894545..0000000 --- a/christmas/AdAstra/src/objects/ai/ai.c +++ /dev/null @@ -1,235 +0,0 @@ -#include "ai.h" - -#include -#include - -#include "../object_container/object_container.h" -#include "../types/astronaut/astronaut.h" -#include "../types/spaceship/spaceship.h" -#include "../../util/rectangle/rectangle.h" -#include "../../util/random/random.h" -#include "../../driver/display/display.h" - - -#define AI_ACTION_COUNT 5 - -typedef bool (*Predicate)(Rectangle*, Object*, uint8_t); -typedef void (*Execution)(Object*); - -static uint8_t timeSinceLastAction; - - -typedef struct { - Predicate predicate; - Execution execution; - SpaceshipPart* spaceshipPart; - bool onlyOneAstronautCanDoIt; - Vec2 deltaCenter; - bool isSomeoneDoingThis; -} AIAction; - -static AIAction actions[AI_ACTION_COUNT]; - - -static Vec2 whichDirectionToMove(Object* astronaut, Vec2 position) { - bool const isTargetOnUpperFloor = isOnUpperFloor((Rectangle){position, (Vec2){0, 0}}); // else it's on the lower floor - - Vec2 const ladder = add(LADDER_BOUNDING_BOX.position, spaceshipObject->position); - - Vec2 astronautCenter = getCenter(getBoundingBox(astronaut)); - Vec2 target = astronautCenter; - if (( - isOnUpperFloor(getBoundingBox(astronaut)) && isTargetOnUpperFloor - ) || ( - isOnLowerFloor(getBoundingBox(astronaut)) && !isTargetOnUpperFloor - )) { - target.x = position.x; - } else if (isOnLadder(getBoundingBox(astronaut))){ - target.y = add(position, (Vec2){0, isTargetOnUpperFloor ? -10 : 10}).y; - } else { - target.x = ladder.x; - } - - return clampVec2(substract(target, astronautCenter)); -} - -static void carefullyMoveAstronaut(Object* astronaut, Vec2 target) { - if (getIsControllingSpaceship(astronaut)) { - makeAstronautDoAction(astronaut); - } - if (!getIsControllingSpaceship(astronaut)) { - moveAstronaut(astronaut, whichDirectionToMove(astronaut, target)); - } -} - -static void carefullyMoveSpaceship(Object* astronaut, Vec2 target) { - if (!getIsControllingSpaceship(astronaut)) { - makeAstronautDoAction(astronaut); - } - if (getIsControllingSpaceship(astronaut)) { - Vec2 direction = clampVec2( - substract( - target, - getCenter(getBoundingBox(spaceshipObject)) - ) - ); - - moveAstronaut(astronaut, direction); - } -} - -static void makeAiAstronautDoAction(Object* astronaut) { - if (timeSinceLastAction > AI_ACTION_INTERVAL) { - makeAstronautDoAction(astronaut); - timeSinceLastAction = 0; - } -} - -static bool shouldControlTurret( - __attribute__((unused)) Rectangle* boundingBox, - __attribute__((unused)) Object* astronaut, - __attribute__((unused)) uint8_t astronautId -) { - return getCountOf(&Asteroid) > 0; -} - -static void executeControlTurret(Object* astronaut) { - if (getIntersectingObjectOfType( - (Rectangle){ - add(TURRET_POSITION, spaceshipObject->position), - (Vec2){63, 1} - }, - &Asteroid - )) { - makeAiAstronautDoAction(astronaut); - }; -} - -static bool shouldControlSpaceship( - __attribute__((unused)) Rectangle* boundingBox, - __attribute__((unused)) Object* astronaut, - uint8_t astronautId -) { - return getCountOf(&Asteroid) > 0 - && astronautId == 1 - && spaceshipObject->as.spaceship.healthLoss < MAX_HEALTH / 4 * 3; -} - -static void executeControlSpaceship(Object* astronaut) { - carefullyMoveSpaceship( - astronaut, - add( - getCenter(getBoundingBox(getFirstOfType(&Asteroid))), - (Vec2){-30, 0} - ) - ); -} - -static bool shouldRepairSpaceship(Rectangle* boundingBox, Object* astronaut, __attribute__((unused)) uint8_t astronautId) { - return ( - ( - areIntersecting(*boundingBox, getBoundingBox(astronaut)) && - spaceshipObject->as.spaceship.healthLoss > 0 - ) || - spaceshipObject->as.spaceship.healthLoss >= MAX_HEALTH / 2 - ); -} - -static bool shouldCenterSpaceship(Rectangle* boundingBox, Object* astronaut, __attribute__((unused)) uint8_t astronautId) { - return ( - !actions[1].isSomeoneDoingThis && - ( - areIntersecting(*boundingBox, getBoundingBox(astronaut)) || - getCenter(getBoundingBox(spaceshipObject)).x != getCenter(WINDOW).x || - getCenter(getBoundingBox(spaceshipObject)).y != getCenter(WINDOW).y - ) - ); -} - -static void executeCenterSpaceship(Object* astronaut) { - carefullyMoveSpaceship( - astronaut, - getCenter(WINDOW) - ); -} - -static bool shouldSocialize( - __attribute__((unused)) Rectangle* boundingBox, - __attribute__((unused)) Object* astronaut, - __attribute__((unused)) uint8_t astronautId -) { - return true; -} - -static void executeSocialize(Object* astronaut) {} - -static AIAction actions[AI_ACTION_COUNT] = { - (AIAction) { - .predicate = shouldRepairSpaceship, - .execution = makeAiAstronautDoAction, - .spaceshipPart = spaceshipParts + BEDS_INDEX, - .onlyOneAstronautCanDoIt = true, - .deltaCenter = {2, 0} - }, - (AIAction) { - .predicate = shouldControlSpaceship, - .execution = executeControlSpaceship, - .spaceshipPart = spaceshipParts + COMMAND_PANEL_INDEX, - .onlyOneAstronautCanDoIt = true, - .deltaCenter = {-3, 0} - }, - (AIAction) { - .predicate = shouldControlTurret, - .execution = executeControlTurret, - .spaceshipPart = spaceshipParts + TURRET_CONTROLLER_INDEX, - .onlyOneAstronautCanDoIt = true, - .deltaCenter = {-3, 0} - }, - (AIAction) { - .predicate = shouldCenterSpaceship, - .execution = executeCenterSpaceship, - .spaceshipPart = spaceshipParts + COMMAND_PANEL_INDEX, - .onlyOneAstronautCanDoIt = true, - .deltaCenter = {-3, 0} - }, - (AIAction) { - .predicate = shouldSocialize, - .execution = executeSocialize, - .spaceshipPart = spaceshipParts + TABLE_INDEX, - .onlyOneAstronautCanDoIt = false, - .deltaCenter = {2, 0} - }, -}; - -void handleAI() { - timeSinceLastAction++; - uint8_t astronautCount = 0; - for (uint8_t j = 0; j < ACTION_COUNT; j++) { - actions[j].isSomeoneDoingThis = false; - } - - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == &Astronaut && objects + i != character) { - astronautCount++; - for (uint8_t j = 0; j < ACTION_COUNT; j++) { - AIAction* currentAction = actions + j; - Rectangle boundingBox = getBoundingBoxOfSpaceshipPart(currentAction->spaceshipPart); - - Object* astronautIntersectingBoundingBox = getIntersectingObjectOfType(boundingBox, &Astronaut); - if ( - isSpaceshipPartActivated(currentAction->spaceshipPart) && - (!currentAction->onlyOneAstronautCanDoIt || (!currentAction->isSomeoneDoingThis && astronautIntersectingBoundingBox != character)) && - currentAction->predicate(&boundingBox, objects + i, astronautCount) - ) { - if (!areIntersecting(boundingBox, getBoundingBox(objects + i))) { - carefullyMoveAstronaut(objects + i, add(getCenter(boundingBox), currentAction->deltaCenter)); - } else { - currentAction->execution(objects + i); - } - currentAction->isSomeoneDoingThis = true; - break; - } - } - } - } -} diff --git a/christmas/AdAstra/src/objects/ai/ai.h b/christmas/AdAstra/src/objects/ai/ai.h deleted file mode 100644 index 37c7e6e..0000000 --- a/christmas/AdAstra/src/objects/ai/ai.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef AI_H -#define AI_H - -// Between AI astronauts do actions -// there has to be at least this many frames -#define AI_ACTION_INTERVAL 30 - -// If there are non player controlled astronauts -// control them according to some basic rule set -void handleAI(); - -#endif diff --git a/christmas/AdAstra/src/objects/commands/commands.c b/christmas/AdAstra/src/objects/commands/commands.c deleted file mode 100644 index 8399e6c..0000000 --- a/christmas/AdAstra/src/objects/commands/commands.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "commands.h" - -#include "../../objects/object_container/object_container.h" -#include "../../objects/types/spaceship/spaceship.h" -#include "../../mediator/mediator.h" - - -static struct { - Command received[COMMAND_BUFFER_SIZE]; - uint8_t start; - uint8_t end; - Command previous; -} commands; - - -static inline bool areThereAnyCommandsLeft() { - return commands.start != commands.end; -} - -static inline Command getNextCommand() { - Command top = commands.received[commands.start++]; - commands.start %= COMMAND_BUFFER_SIZE; - return top; -} - -void addCommand(Command command) { - commands.received[commands.end++] = command; - commands.end %= COMMAND_BUFFER_SIZE; -} - -void handleCommands() { - while(areThereAnyCommandsLeft()) { - Command next = getNextCommand(); - if (next == repeat) { - next = commands.previous; - } else { - commands.previous = next; - } - - switch(next) { - case increaseContrast: - changeDisplayContrast(CONTRAST_STEP); - break; - case decreaseContrast: - changeDisplayContrast(-CONTRAST_STEP); - break; - case moveLeft: - moveAstronaut(character, directions[west]); - break; - case moveRight: - moveAstronaut(character, directions[east]); - break; - case moveUp: - moveAstronaut(character, directions[north]); - break; - case moveDown: - moveAstronaut(character, directions[south]); - break; - case reset: - destroySpaceship(); - commands.previous = noAction; - break; - case action: - makeAstronautDoAction(character); - commands.previous = noAction; - break; - default: - break; - } - } -} \ No newline at end of file diff --git a/christmas/AdAstra/src/objects/commands/commands.h b/christmas/AdAstra/src/objects/commands/commands.h deleted file mode 100644 index 5649986..0000000 --- a/christmas/AdAstra/src/objects/commands/commands.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef COMMANDS_H -#define COMMANDS_H - - -#include - -// There can be no more than COMMAND_BUFFER_SIZE commands -// waiting for processing simultaneously -#define COMMAND_BUFFER_SIZE 8 - -// increaseContrast and decreaseContrast changes the contrast -// with this value -#define CONTRAST_STEP 15 - -// The possible inputs of the system -// Coincidentally these are the codes of the IR remote -// controller's buttons. -typedef enum { - noCommand = 0, - repeat = 1, - reset = 157, - increaseContrast = 87, - decreaseContrast = 31, - moveUp = 231, - moveDown = 181, - moveLeft = 239, - moveRight = 165, - action = 199, -} Command; - -// Add a new command to the buffer -// It will not be processed immediately. -void addCommand(Command command); - -// Process every command in the buffer at once in a FIFO manner -void handleCommands(); - -#endif diff --git a/christmas/AdAstra/src/objects/event_generator/event_generator.c b/christmas/AdAstra/src/objects/event_generator/event_generator.c deleted file mode 100644 index e782e9a..0000000 --- a/christmas/AdAstra/src/objects/event_generator/event_generator.c +++ /dev/null @@ -1,80 +0,0 @@ -#include "event_generator.h" - -#include -#include - -#include "null.h" - -#include "../object.h" -#include "../object_container/object_container.h" -#include "../types/spaceship/spaceship.h" -#include "../types/background/background.h" -#include "../types/astronaut/astronaut.h" -#include "../types/asteroid/asteroid.h" -#include "../types/text/text.h" -#include "../../util/random/random.h" -#include "../../driver/display/display.h" - - -typedef bool (*Predicate)(Rectangle*); - - -static inline Vec2 getRandomPosition() { - return (Vec2) { - getRandomNumber() % DISPLAY_WIDTH_IN_PIXELS, - getRandomNumber() % DISPLAY_HEIGHT_IN_PIXELS - }; -} - -static void generate(Prototype const* type, Predicate predicate) { - Object* emptySpace = getEmptyObjectSpace(); - if (emptySpace == NULL || getRandomNumber() != 0) { - return; - } - - for (uint8_t tryCount = 0; tryCount < TRY_COUNT; tryCount++) { - Rectangle proposedBoundingBox = (Rectangle){getRandomPosition(), getSizeFromPrototype(type)}; - - if (predicate(&proposedBoundingBox)) { - createObject(type, emptySpace); - emptySpace->position = proposedBoundingBox.position; - return; - } - } -} - -bool generateAstronautPredicate(Rectangle* proposedBoundingBox) { - return ( - ( - (getCountOf(&Astronaut) == 1 && spaceshipObject->as.spaceship.progress >= hasHalfCrew) || - (getCountOf(&Astronaut) == 2 && spaceshipObject->as.spaceship.progress >= hasTable) - ) && - getIntersectingObjectOfType(*proposedBoundingBox, &Astronaut) == NULL && - isOnboard(*proposedBoundingBox) - ); -} - -bool generateAsteroidPredicate(Rectangle* proposedBoundingBox) { - return ( - getCountOf(&Asteroid) < MAX_ASTEROID_COUNT && - isInside(*proposedBoundingBox, WINDOW) && - getIntersectingObjectOfType(*proposedBoundingBox, &Spaceship) == NULL && - getIntersectingObjectOfType(*proposedBoundingBox, &Asteroid) == NULL - ); -} - -void createObjects() { - createObject(&Background, getEmptyObjectSpace()); - - createObject(&Spaceship, spaceshipObject); - spaceshipObject->position = (Vec2){EXHAUST_BOUNDING_BOX.size.x, DISPLAY_HEIGHT_IN_PIXELS / 2 - getSize(spaceshipObject).y / 2}; - - createObject(&Astronaut, character); - Rectangle upperFloor = translateRectangle(UPPER_FLOOR_BOUNDING_BOX, spaceshipObject->position); - character->position = add(upperFloor.position, (Vec2){10, 1}); -} - -void generateEvents() { - generate(&Astronaut, generateAstronautPredicate); - generate(&Asteroid, generateAsteroidPredicate); -} diff --git a/christmas/AdAstra/src/objects/event_generator/event_generator.h b/christmas/AdAstra/src/objects/event_generator/event_generator.h deleted file mode 100644 index 8c27ea5..0000000 --- a/christmas/AdAstra/src/objects/event_generator/event_generator.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef EVENT_GENERATOR_H -#define EVENT_GENERATOR_H - -#define MAX_ASTEROID_COUNT 2 - -// For minimizing code size the position of generated objects is decided randomly. -// If it fits then it stays. For each generated object can be a maximum of -// TRY_COUNT tries. -#define TRY_COUNT 16 - -void createObjects(); - -// Generate asteroids and astronaut randomly based on a set of conditions -void generateEvents(); - -#endif diff --git a/christmas/AdAstra/src/objects/object.c b/christmas/AdAstra/src/objects/object.c deleted file mode 100644 index 781adef..0000000 --- a/christmas/AdAstra/src/objects/object.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "object.h" -#include "null.h" - - -Object* createObject(Prototype const* prototype, Object* holder) { - Object empty = {0}; - *holder = empty; - holder->prototype = prototype; - return holder; -} - -void tickObject(Object* object, uint8_t previousFrameTime) { - if (object->prototype != NULL) { - ((TickMethod)pgm_read_word(&object->prototype->tick))(object, previousFrameTime); - } -} - -void drawObject(Object* object, Rectangle compositingWindow) { - if (object->prototype != NULL && areIntersecting(getBoundingBox(object), compositingWindow)) { - ((DrawMethod)pgm_read_word(&object->prototype->draw))(object, compositingWindow); - } -} - -Vec2 getSizeFromPrototype(Prototype const* prototype) { - // required for casting - uint16_t read = pgm_read_word(&prototype->size); - Vec2* v = (Vec2*) &read; - return *v; -} - -Vec2 getSize(Object const* object) { - return getSizeFromPrototype(object->prototype); -} - -void move(Object* object, Vec2 value) { - object->position = add(object->position, value); -} - -Rectangle getBoundingBox(Object const* object) { - return (Rectangle){object->position, getSize(object)}; -} diff --git a/christmas/AdAstra/src/objects/object.h b/christmas/AdAstra/src/objects/object.h deleted file mode 100644 index 700afdd..0000000 --- a/christmas/AdAstra/src/objects/object.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef OBJECT_H -#define OBJECT_H - -#include -#include - -#include "../util/rectangle/rectangle.h" - -#include "types/asteroid/asteroid.h" -#include "types/astronaut/astronaut.h" -#include "types/background/background.h" -#include "types/spaceship/spaceship.h" -#include "types/bullet/bullet.h" -#include "types/text/text.h" - -#include "prototype.h" - - -// Objects (they could have been called GameObjects) have a simple -// hierarchy. A prototype/flyweight motivated system is used. -// Each type has some common data and methods which are stored -// in their respective prototype. -// This module provides us with the methods to easily and mostly -// transparently access an object's prototype. - - -typedef union { - struct _background_t background; - struct _spaceship_t spaceship; - struct _astronaut_t astronaut; - struct _asteroid_t asteroid; - struct _bullet_t bullet; - struct _text_t text; -} object_specific_data_t; - - -struct _object_t { - Prototype const* prototype; - Vec2 position; - object_specific_data_t as; -}; - - -// A simplified object intended for persisting its data -// without saving its 16 bit long reference to its prototype -typedef struct { - Vec2 position; - object_specific_data_t as; -} DTO; - - -// Set the prototype of the holder and initialize all the holder's -// vale to zero. Return the freshly updated holder -Object* createObject(Prototype const* prototype, Object* holder); - -// Call the tick function referenced in the object's prototype -// on the object itself -// Object might react to the elapsed time. -// Does nothing when called with NULL. -void tickObject(Object* object, uint8_t previousFrameTime); - -// Call the draw function referenced in the object's prototype -// on the object itself -// Does nothing when called with NULL. -void drawObject(Object* object, Rectangle compositingWindow); - -// Find out the prototype of the object and return the size of that -Vec2 getSize(Object const* object); -Vec2 getSizeFromPrototype(Prototype const* prototype); - -// Move the position of the object by a vector -void move(Object* object, Vec2 value); - -// Get a new rectangle from the objects position and its -// prototype's size -Rectangle getBoundingBox(Object const* object); - -#endif diff --git a/christmas/AdAstra/src/objects/object_container/object_container.c b/christmas/AdAstra/src/objects/object_container/object_container.c deleted file mode 100644 index 65178bb..0000000 --- a/christmas/AdAstra/src/objects/object_container/object_container.c +++ /dev/null @@ -1,61 +0,0 @@ -#include "object_container.h" - -#include "../../driver/redundant_storage/redundant_storage.h" -#include "../event_generator/event_generator.h" - - -Object* getFirstOfType(Prototype const* type) { - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == type) { - return objects + i; - } - } - - return NULL; -} - -uint8_t getCountOf(Prototype const* type) { - uint8_t count = 0; - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == type) { - count++; - } - } - - return count; -} - -Object* getIntersectingObjectOfType(Rectangle boundingBox, Prototype const* type) { - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == type && areIntersecting(boundingBox, getBoundingBox(objects + i))) { - return objects + i; - } - } - - return NULL; -} - -void clearObject(Object* object) { - createObject(NULL, object); -} - -void drawObjects(Rectangle window) { - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - drawObject(objects + i, window); - } -} - -void tickObjects(uint8_t previousFrameTime) { - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - tickObject(objects + i, previousFrameTime); - } -} - - -void initializeObjectContainer() { - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - clearObject(objects + i); - } - - createObjects(); -} diff --git a/christmas/AdAstra/src/objects/object_container/object_container.h b/christmas/AdAstra/src/objects/object_container/object_container.h deleted file mode 100644 index 1d3cac9..0000000 --- a/christmas/AdAstra/src/objects/object_container/object_container.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef OBJECT_HANDLER_H -#define OBJECT_HANDLER_H - -#include -#include - -#include "null.h" - -#include "../object.h" -#include "../../util/rectangle/rectangle.h" -#include "../../util/vec2/vec2.h" - - -// Contain up to OBJECT_COUNT objects. -// Provide the basic functionality to access, search and modify -// these objects. -// For ease of use, there are some convenience global variables for accessing -// objects that are very commonly accessed. - -#define OBJECT_COUNT 10 -#define BACKGROUND_INDEX 0 -#define SPACESHIP_INDEX 1 -#define CHARACTER_INDEX 2 - -#define spaceshipObject (objects + SPACESHIP_INDEX) -#define character (objects + CHARACTER_INDEX) - -// The actual container -Object objects[OBJECT_COUNT]; - -// may return NULL -Object* getFirstOfType(Prototype const* type); -// may return NULL -#define getEmptyObjectSpace() getFirstOfType(NULL) - -// Return the number of objects with a prototype being type -uint8_t getCountOf(Prototype const* type); - -// Return a reference to a random object intersecting boundingBox and having -// a prototype of type -Object* getIntersectingObjectOfType(Rectangle boundingBox, Prototype const* type); - -// Call the tick method of every object -// objects might respond to the elapsed time -void tickObjects(uint8_t previousFrameTime); - -// Call the draw method of every object -void drawObjects(Rectangle window); - -// Delete the object given by its address from objects -// It achieves this by setting the object's prototype to NULL. -void clearObject(Object* object); - -// Delete every object inside of objects -// and create (or load) the starting objects -void initializeObjectContainer(); - -#endif diff --git a/christmas/AdAstra/src/objects/prototype.c b/christmas/AdAstra/src/objects/prototype.c deleted file mode 100644 index 0b64dfa..0000000 --- a/christmas/AdAstra/src/objects/prototype.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "prototype.h" - - -Prototype temp; - -static void loadPrototype(Prototype* prototype) { - /*for (uint8_t i = 0; i < sizeof(prototype); i++) { - ((uint8_t*)(&temp))[i] = pgm_read_byte(prototype + i); - }*/ - - temp = *prototype; -} - -void tickObjectFromPrototype(Object* object) { - loadPrototype(object->prototype); - temp.tick(object); -} - -void drawObjectFromPrototype(Object* object) { - /*loadPrototype(object->prototype); - temp.draw(object);*/ -} diff --git a/christmas/AdAstra/src/objects/prototype.h b/christmas/AdAstra/src/objects/prototype.h deleted file mode 100644 index 50cfdfc..0000000 --- a/christmas/AdAstra/src/objects/prototype.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef PROTOTYPE_H -#define PROTOTYPE_H - -#include - -#include "../util/rectangle/rectangle.h" - - -// See more information in object.h - -struct _object_t; -typedef struct _object_t Object; - -// Update the inner state of the given object -// The first argument is the object itself, the second is the elapsed -// time in milliseconds. -typedef void (*TickMethod)(Object*, uint8_t); - -// Draw the given object if its overlapping with the given rectangle -typedef void (*DrawMethod)(Object*, Rectangle); - -typedef struct { - TickMethod tick; - DrawMethod draw; - Vec2 size; -} Prototype; - -#endif diff --git a/christmas/AdAstra/src/objects/types/asteroid/asteroid.c b/christmas/AdAstra/src/objects/types/asteroid/asteroid.c deleted file mode 100644 index fd16802..0000000 --- a/christmas/AdAstra/src/objects/types/asteroid/asteroid.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "asteroid.h" - -#include - -#include "../sprites.h" -#include "../../object.h" -#include "../../object_container/object_container.h" -#include "../../../util/vec2/vec2.h" -#include "../../../util/random/random.h" -#include "../../../driver/display/display.h" - - -bool mineAsteroid(Object* asteroid) { - return ++asteroid->as.asteroid.animationFrame == IDLE_FRAME_COUNT; -} - -static void tick(Object* asteroid, __attribute__((unused)) uint8_t previousFrameTime) { - if (asteroid->as.asteroid.animationFrame < IDLE_FRAME_COUNT) { - return; - } - - if (++asteroid->as.asteroid.timeSinceLastFrameChange == EXPLODING_FRAME_CHANGE_INTERVAL) { - if (++asteroid->as.asteroid.animationFrame >= IDLE_FRAME_COUNT + EXPLODING_FRAME_COUNT) { - clearObject(asteroid); - } else { - asteroid->as.asteroid.timeSinceLastFrameChange = 0; - } - } -} - -bool isAsteroidIntersectingWithSpaceship(Object* asteroid, Object* spaceship) { - Rectangle bb = getBoundingBox(asteroid); - startIntersectionTest(bb); - drawObject(asteroid, bb); - drawObject(spaceship, bb); - return endIntersectionTest(); -} - -static void draw(Object* asteroid, Rectangle __attribute__((unused)) compositingWindow) { - drawBitmapFromProgMem( - getBoundingBox(asteroid), - small_asteroid[asteroid->as.asteroid.animationFrame], - asteroid->position.x % 2 - ); -} - -const Prototype Asteroid PROGMEM = { - .tick = tick, - .draw = draw, - .size = ASTEROID_SIZE, -}; diff --git a/christmas/AdAstra/src/objects/types/asteroid/asteroid.h b/christmas/AdAstra/src/objects/types/asteroid/asteroid.h deleted file mode 100644 index 176c7f6..0000000 --- a/christmas/AdAstra/src/objects/types/asteroid/asteroid.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef ASTEROID_H -#define ASTEROID_H - -#include -#include - -#include "../../prototype.h" - -#define ASTEROID_SIZE ((Vec2){8, 8}) -#define IDLE_FRAME_COUNT 4 -#define EXPLODING_FRAME_COUNT 3 -#define EXPLODING_FRAME_CHANGE_INTERVAL 3 - -const Prototype Asteroid; - -bool mineAsteroid(Object* asteroid); -bool isAsteroidIntersectingWithSpaceship(Object* asteroid, Object* spaceship); - -struct _asteroid_t { - bool isMirrored; - uint8_t timeSinceLastFrameChange; - uint8_t animationFrame; -}; - -#endif diff --git a/christmas/AdAstra/src/objects/types/astronaut/astronaut.c b/christmas/AdAstra/src/objects/types/astronaut/astronaut.c deleted file mode 100644 index fd69a19..0000000 --- a/christmas/AdAstra/src/objects/types/astronaut/astronaut.c +++ /dev/null @@ -1,137 +0,0 @@ -#include "astronaut.h" - -#include -#include -#include "bitwise.h" -#include "../../../driver/display/display.h" -#include "../../object_container/object_container.h" -#include "../sprites.h" -#include "../../../util/vec2/vec2.h" -#include "../../../util/random/random.h" -#include "../../object.h" - - -#define IS_MIRRORED_BIT 0 -#define IS_CONTROLLING_SPACESHIP_BIT 1 -#define WAS_DOING_ACTION_BIT 2 - -static inline bool getIsMirrored(Object* astronaut) { - return getBit(astronaut->as.astronaut.flags, IS_MIRRORED_BIT); -} - -static inline void setIsMirrored(Object* astronaut, bool value) { - modifyBit(astronaut->as.astronaut.flags, IS_MIRRORED_BIT, value); -} - -static inline bool getWasDoingAction(Object* astronaut) { - return getBit(astronaut->as.astronaut.flags, WAS_DOING_ACTION_BIT); -} - -static inline void setWasDoingAction(Object* astronaut, bool value) { - modifyBit(astronaut->as.astronaut.flags, WAS_DOING_ACTION_BIT, value); -} - - -bool getIsControllingSpaceship(Object* astronaut) { - return getBit(astronaut->as.astronaut.flags, IS_CONTROLLING_SPACESHIP_BIT); -} - -static void setIsControllingSpaceship(Object* astronaut, bool value) { - modifyBit(astronaut->as.astronaut.flags, IS_CONTROLLING_SPACESHIP_BIT, value); -} - -static inline void applyGravity(Object* astronaut) { - if (!isOnLadder(getBoundingBox(astronaut)) && !isBottomOnFloor(getBoundingBox(astronaut))) { - move(astronaut, directions[south]); - } -} - -static void tick(Object* astronaut, uint8_t previousFrameTime) { - if (astronaut->as.astronaut.timeSinceLastAction < TIME_BETWEEN_ACTION_CHANGE) { - astronaut->as.astronaut.timeSinceLastAction += previousFrameTime; - } - - applyGravity(astronaut); -} - -void moveAstronaut(Object* astronaut, Vec2 direction) { - if ( - astronaut->as.astronaut.timeSinceLastAction < TIME_BETWEEN_ACTION_CHANGE - && !getWasDoingAction(astronaut) - ) { - return; - } - astronaut->as.astronaut.timeSinceLastAction = 0; - setWasDoingAction(astronaut, false); - - if (getIsControllingSpaceship(astronaut)) { - moveSpaceship((Vec2){direction.x, 0}); - moveSpaceship((Vec2){0, direction.y}); - } else { - Vec2 proposedPosition = add(astronaut->position, direction); - Rectangle proposedBoundingBox = (Rectangle){proposedPosition, getSize(astronaut)}; - if (isOnboard(proposedBoundingBox)) { - astronaut->position = proposedPosition; - astronaut->as.astronaut.animationFrame = (astronaut->as.astronaut.animationFrame + 1) % MOVE_FRAME_COUNT; - } - - if (direction.x == 0) { - astronaut->as.astronaut.animationFrame = 0; - } - setIsMirrored(astronaut, direction.x < 0); - } -} - -void makeAstronautDoAction(Object* astronaut) { - if ( - astronaut->as.astronaut.timeSinceLastAction < TIME_BETWEEN_ACTION_CHANGE - && getWasDoingAction(astronaut) - ) { - return; - } - astronaut->as.astronaut.timeSinceLastAction = 0; - setWasDoingAction(astronaut, true); - - if (getIsControllingSpaceship(astronaut)) { - setIsControllingSpaceship(astronaut, false); - } else { - Object* text; - switch (getPossibleActionFromSpaceship(astronaut)) { - case shootTurret: - shootTurretOfSpaceship(); - break; - case showLove: - text = getEmptyObjectSpace(); - if (text != NULL) { - if (!createText(text)) { - speedUpText(); - } - } - break; - case repairingSpaceship: - if (spaceshipObject->as.spaceship.healthLoss > 0) { - spaceshipObject->as.spaceship.healthLoss--; - } - break; - case controllingSpaceship: - setIsControllingSpaceship(astronaut, true); - break; - default: - break; - } - } -} - -static void draw(Object* astronaut, __attribute__((unused)) Rectangle compositingWindow) { - drawBitmapFromProgMem( - getBoundingBox(astronaut), - small_character_moving[astronaut->as.astronaut.animationFrame], - getIsMirrored(astronaut) - ); -} - -const Prototype Astronaut PROGMEM = { - .tick = tick, - .draw = draw, - .size = ASTRONAUT_SIZE -}; diff --git a/christmas/AdAstra/src/objects/types/astronaut/astronaut.h b/christmas/AdAstra/src/objects/types/astronaut/astronaut.h deleted file mode 100644 index 0a18852..0000000 --- a/christmas/AdAstra/src/objects/types/astronaut/astronaut.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef ASTRONAUT_H -#define ASTRONAUT_H - -#include "../../prototype.h" -#include - - -#define ASTRONAUT_SIZE ((Vec2){5, 5}) -#define MOVE_FRAME_COUNT 4 - -// Between two consecutive actions (or movements) -// there has to be at least this many milliseconds -#define TIME_BETWEEN_ACTION_CHANGE 50 - -typedef enum { - noAction = 0, - controllingSpaceship, - shootTurret, - showLove, - repairingSpaceship, - ACTION_COUNT -} Action; - - -const Prototype Astronaut; - -struct _astronaut_t { - uint8_t flags; - uint8_t animationFrame; - uint8_t timeSinceLastAction; -}; - -void moveAstronaut(Object* astronaut, Vec2 unitVector); -void makeAstronautDoAction(Object* astronaut); -bool getIsControllingSpaceship(Object* astronaut); - -#endif diff --git a/christmas/AdAstra/src/objects/types/background/background.c b/christmas/AdAstra/src/objects/types/background/background.c deleted file mode 100644 index f7a37dc..0000000 --- a/christmas/AdAstra/src/objects/types/background/background.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "background.h" - -#include -#include - -#include "../../object.h" -#include "../../../util/rectangle/rectangle.h" -#include "../../../util/random/random.h" -#include "../sprites.h" -#include "../../../driver/display/display.h" - - -typedef struct { - Vec2 position; - uint8_t type; -} Star; - -static Star backgroundStars[STAR_COUNT]; - -static Star createStarOnTheRight() { - return (Star){ - (Vec2){DISPLAY_WIDTH_IN_PIXELS, getRandomNumber() % (DISPLAY_HEIGHT_IN_PIXELS - STAR_SIZE)}, - getRandomNumber() % STAR_SHAPE_COUNT - }; -} - -static void tick(Object* background, __attribute__((unused)) uint8_t previousFrameTime) { - background->as.background.movementState++; - for (uint8_t i = 0; i < STAR_COUNT; i++) { - switch (i % 3) { - case 0: - backgroundStars[i].position.x -= 1; - break; - case 1: - backgroundStars[i].position.x -= background->as.background.movementState & 1; - break; - case 2: - backgroundStars[i].position.x -= ~background->as.background.movementState & 1; - break; - } - if (backgroundStars[i].position.x == -STAR_SIZE) { - backgroundStars[i] = createStarOnTheRight(); - } - } -} - -static void draw(__attribute__((unused)) Object* background, Rectangle compositingWindow) { - for (uint8_t i = 0; i < STAR_COUNT; i++) { - Rectangle starBoundingBox = (Rectangle){backgroundStars[i].position, (Vec2){STAR_SIZE, STAR_SIZE}}; - if (areIntersecting(compositingWindow, starBoundingBox)) { - drawBitmapFromProgMem( - starBoundingBox, - stars[backgroundStars[i].type], - false - ); - } - } -} - -void initializeBackground() { - for (uint8_t i = 0; i < STAR_COUNT; i++) { - backgroundStars[i] = createStarOnTheRight(); - backgroundStars[i].position.x = getRandomNumber(); - } -} - -const Prototype Background PROGMEM = { - .tick = tick, - .draw = draw, - .size = (Vec2){DISPLAY_WIDTH_IN_PIXELS, DISPLAY_HEIGHT_IN_PIXELS} // == WINDOW.size -}; diff --git a/christmas/AdAstra/src/objects/types/background/background.h b/christmas/AdAstra/src/objects/types/background/background.h deleted file mode 100644 index a78acef..0000000 --- a/christmas/AdAstra/src/objects/types/background/background.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef BACKGROUND_H -#define BACKGROUND_H - -#include "../../prototype.h" - - -#define STAR_COUNT 8 -#define STAR_SIZE 3 -#define STAR_SHAPE_COUNT 3 - -const Prototype Background; -struct _background_t { - uint8_t movementState; -}; - -void initializeBackground(); - -#endif \ No newline at end of file diff --git a/christmas/AdAstra/src/objects/types/bullet/bullet.c b/christmas/AdAstra/src/objects/types/bullet/bullet.c deleted file mode 100644 index 4237410..0000000 --- a/christmas/AdAstra/src/objects/types/bullet/bullet.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "bullet.h" - -#include "../asteroid/asteroid.h" -#include "../spaceship/spaceship.h" -#include "../../object.h" -#include "../../object_container/object_container.h" -#include "null.h" -#include "../../../driver/display/display.h" - - -static void tick(Object* bullet, __attribute__((unused)) uint8_t previousFrameTime) { - if (bullet->as.bullet.wereIntersectingInThePreviousFrame) { - clearObject(bullet); - return; - } - - move(bullet, directions[east]); - - Object* asteroid = getIntersectingObjectOfType(getBoundingBox(bullet), &Asteroid); - if (asteroid != NULL) { - if (mineAsteroid(asteroid) || mineAsteroid(asteroid)) { - onAsteroidMined(); - } - bullet->as.bullet.wereIntersectingInThePreviousFrame = true; - } - - if (!areIntersecting(getBoundingBox(bullet), WINDOW)) { - bullet->as.bullet.wereIntersectingInThePreviousFrame = true; - } -} - -static void draw(Object* bullet, Rectangle __attribute__((unused)) compositingWindow) { - drawFilledRectangle((Rectangle){bullet->position, BULLET_SIZE}, 0, 0xFF); -} - -const Prototype Bullet PROGMEM = { - .tick = tick, - .draw = draw, - .size = BULLET_SIZE, -}; diff --git a/christmas/AdAstra/src/objects/types/bullet/bullet.h b/christmas/AdAstra/src/objects/types/bullet/bullet.h deleted file mode 100644 index bfed188..0000000 --- a/christmas/AdAstra/src/objects/types/bullet/bullet.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef BULLET_H -#define BULLET_H - -#include "../../prototype.h" -#include - - -#define BULLET_SIZE ((Vec2){5, 1}) - - -const Prototype Bullet; -struct _bullet_t { - bool wereIntersectingInThePreviousFrame; -}; - -#endif diff --git a/christmas/AdAstra/src/objects/types/spaceship/spaceship.c b/christmas/AdAstra/src/objects/types/spaceship/spaceship.c deleted file mode 100644 index 2ce819f..0000000 --- a/christmas/AdAstra/src/objects/types/spaceship/spaceship.c +++ /dev/null @@ -1,225 +0,0 @@ -#include "spaceship.h" - -#include - -#include "../../object.h" -#include "../../../driver/display/display.h" -#include "../astronaut/astronaut.h" -#include "../asteroid/asteroid.h" -#include "../../object_container/object_container.h" -#include "../sprites.h" -#include "../../../util/vec2/vec2.h" -#include "../../../util/random/random.h" -#include "bitwise.h" - - -static uint8_t flickerState; - -SpaceshipPart spaceshipParts[SPACESHIP_PART_COUNT] = { - [TABLE_INDEX] = (SpaceshipPart) { - {{7, 6}, {5, 5}}, - tree[0], - showLove, - false - }, - [BEDS_INDEX] = (SpaceshipPart) { - {{3, 12}, {8, 6}}, - beds[0], - repairingSpaceship, - false - }, - [COMMAND_PANEL_INDEX] = (SpaceshipPart) { - {{26, 7}, {7, 4}}, - NULL, - controllingSpaceship, - true, - }, - [TURRET_CONTROLLER_INDEX] = (SpaceshipPart) { - {{26, 12}, {7, 6}}, - turret_controller[0], - shootTurret, - false - } -}; - - -bool isOnUpperFloor(Rectangle boundingBox) { - return isInside(boundingBox, translateRectangle(UPPER_FLOOR_BOUNDING_BOX, spaceshipObject->position)); -} - -bool isOnLowerFloor(Rectangle boundingBox) { - return isInside(boundingBox, translateRectangle(LOWER_FLOOR_BOUNDING_BOX, spaceshipObject->position)); -} - -bool isBottomOnFloor(Rectangle boundingBox) { - return ( - add(spaceshipObject->position, UPPER_FLOOR_BOUNDING_BOX.position).y + UPPER_FLOOR_BOUNDING_BOX.size.y == boundingBox.position.y + boundingBox.size.y || - add(spaceshipObject->position, LOWER_FLOOR_BOUNDING_BOX.position).y + LOWER_FLOOR_BOUNDING_BOX.size.y == boundingBox.position.y + boundingBox.size.y - ); -} - -bool isOnLadder(Rectangle boundingBox) { - return areIntersecting(boundingBox, translateRectangle(LADDER_BOUNDING_BOX, spaceshipObject->position)); -} - -bool isOnboard(Rectangle boundingBox) { - return isOnLowerFloor(boundingBox) || isOnUpperFloor(boundingBox) || isOnLadder(boundingBox); -} - -Rectangle getBoundingBoxOfSpaceshipPart(SpaceshipPart* part) { - return translateRectangle(part->boundingBox, spaceshipObject->position); -} - -void shootTurretOfSpaceship() { - Object* bullet = getEmptyObjectSpace(); - if (getEmptyObjectSpace() != NULL && spaceshipObject->as.spaceship.healthLoss < MAX_HEALTH - 1) { - createObject(&Bullet, bullet); - bullet->position = add(TURRET_POSITION, spaceshipObject->position); - spaceshipObject->as.spaceship.healthLoss++; - } -} - -void onAsteroidMined() { - switch (++spaceshipObject->as.spaceship.progress) { - case hasBeds: - setBit(spaceshipObject->as.spaceship.activatedParts, BEDS_INDEX); - break; - case hasTurret: - setBit(spaceshipObject->as.spaceship.activatedParts, TURRET_CONTROLLER_INDEX); - break; - case hasTable: - setBit(spaceshipObject->as.spaceship.activatedParts, TABLE_INDEX); - break; - default: - break; - } -} - -void moveSpaceship(Vec2 direction) { - Vec2 proposedPosition = add(spaceshipObject->position, direction); - - if (!isInside(translateRectangle(IN_VIEW_BOUNDING_BOX, proposedPosition), WINDOW)) { - return; - } - - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == &Astronaut) { - move(objects + i, direction); - } - } - - move(spaceshipObject, direction); - - spaceshipObject->position = proposedPosition; - - for (uint8_t i = 0; i < OBJECT_COUNT; i++) { - if (objects[i].prototype == &Asteroid && isAsteroidIntersectingWithSpaceship(objects + i, spaceshipObject)) { - if (mineAsteroid(objects + i)) { - spaceshipObject->as.spaceship.healthLoss += 2; - onAsteroidMined(); - } - } - } -} - -Action getPossibleActionFromSpaceship(Object* astronaut) { - for (uint8_t i = 0; i < SPACESHIP_PART_COUNT; i++) { - SpaceshipPart* part = spaceshipParts + i; - if ( - isSpaceshipPartActivated(part) && areIntersecting(getBoundingBoxOfSpaceshipPart(part), getBoundingBox(astronaut))) { - return part->possibleAction; - } - } - - return noAction; -} - -void tick(Object* spaceship, __attribute__((unused)) uint8_t previousFrameTime) { - flickerState = !flickerState; - if (spaceship->as.spaceship.healthLoss >= MAX_HEALTH) { - spaceship->as.spaceship.healthLoss++; - } -} - -bool isSpaceshipPartActivated(SpaceshipPart* part) { - return part->alwaysActiveDoNotDraw || ((spaceshipObject->as.spaceship.activatedParts >> (part - spaceshipParts)) & 1); -} - -bool isSpaceshipDestroyed() { - return spaceshipObject->as.spaceship.healthLoss >= MAX_HEALTH; -} - -void destroySpaceship() { - spaceshipObject->as.spaceship.healthLoss = MAX_HEALTH; -} - -static inline void drawSpaceshipHealthBar() { - uint8_t actualBarLength = spaceshipObject->as.spaceship.healthLoss * BAR_LENGTH / MAX_HEALTH; - drawFilledRectangle( - (Rectangle){add( - spaceshipObject->position, - (Vec2){BAR_END_POSITION.x - actualBarLength, BAR_END_POSITION.y} - ), (Vec2){actualBarLength, 1}}, 0xFF, 0x00 - ); -} - -static inline void drawSpaceshipParts(Rectangle compositingWindow) { - for (uint8_t i = 0; i < SPACESHIP_PART_COUNT; i++) { - if ( - !(spaceshipParts + i)->alwaysActiveDoNotDraw && - isSpaceshipPartActivated(spaceshipParts + i) && - areIntersecting(compositingWindow, getBoundingBoxOfSpaceshipPart(spaceshipParts + i)) - ) { - drawBitmapFromProgMem( - getBoundingBoxOfSpaceshipPart(spaceshipParts + i), - spaceshipParts[i].sprite, - false - ); - } - } -} - -static inline void drawExhaust(Rectangle compositingWindow) { - Rectangle exhaustRectangle = translateRectangle(EXHAUST_BOUNDING_BOX, spaceshipObject->position); - if ( - areIntersecting(compositingWindow, exhaustRectangle) && - flickerState - ) { - drawBitmapFromProgMem(exhaustRectangle, exhaust[0], false); - } -} - -static inline void drawGlitches() { - for (uint8_t i = 0; i < spaceshipObject->as.spaceship.healthLoss - MAX_HEALTH; i++) { - Rectangle r = translateRectangle( - (Rectangle){(Vec2){getRandomNumber() % SPACESHIP_SIZE.x, getRandomNumber() % SPACESHIP_SIZE.y}, (Vec2){8, 8}}, - spaceshipObject->position - ); - if (areIntersecting(r, WINDOW)) { - drawFilledRectangle(r, 0xFF, 0x00); - } - } -} - -static void draw(Object* spaceship, Rectangle compositingWindow) { - drawBitmapFromProgMem( - getBoundingBox(spaceship), - spaceship_idle[0], - false - ); - - drawSpaceshipParts(compositingWindow); - drawSpaceshipHealthBar(); - - if (spaceship->as.spaceship.healthLoss > MAX_HEALTH) { - drawGlitches(); - } else { - drawExhaust(compositingWindow); - } -} - -const Prototype Spaceship PROGMEM = { - .tick = tick, - .draw = draw, - .size = SPACESHIP_SIZE, -}; diff --git a/christmas/AdAstra/src/objects/types/spaceship/spaceship.h b/christmas/AdAstra/src/objects/types/spaceship/spaceship.h deleted file mode 100644 index 2070914..0000000 --- a/christmas/AdAstra/src/objects/types/spaceship/spaceship.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef SPACESHIP_H -#define SPACESHIP_H - - -#include "../../prototype.h" -#include "../../../util/rectangle/rectangle.h" -#include "../astronaut/astronaut.h" - -#include - -#define SPACESHIP_SIZE ((Vec2){36, 23}) - -#define IN_VIEW_BOUNDING_BOX ((Rectangle){(Vec2){7, 4}, (Vec2){22, 15}}) -#define UPPER_FLOOR_BOUNDING_BOX ((Rectangle){(Vec2){8, 5}, (Vec2){19, 6}}) -#define LOWER_FLOOR_BOUNDING_BOX ((Rectangle){(Vec2){5, 12}, (Vec2){23, 6}}) -#define EXHAUST_BOUNDING_BOX ((Rectangle){(Vec2){-4, 9}, (Vec2){5, 5}}) - -#define TURRET_POSITION ((Vec2){35, 11}) - -#define LADDER_BOUNDING_BOX ((Rectangle){(Vec2){12, 10}, (Vec2){1, 4}}) - -#define BOBBING_INTERVAL 130 -#define SPACESHIP_PART_COUNT 4 - -#define TABLE_INDEX 3 -#define BEDS_INDEX 2 -#define COMMAND_PANEL_INDEX 1 -#define TURRET_CONTROLLER_INDEX 0 - -#define BAR_END_POSITION ((Vec2){33, 11}) -#define BAR_LENGTH 4 -#define MAX_HEALTH 8 - -typedef struct { - Rectangle boundingBox; - uint16_t** sprite; - Action possibleAction; - bool alwaysActiveDoNotDraw; -} SpaceshipPart; - -SpaceshipPart spaceshipParts[SPACESHIP_PART_COUNT]; - -const Prototype Spaceship; - -typedef enum { - hasBeds = 2, - hasTurret = 5, - hasHalfCrew = 8, - hasTable = 12 -} Progress; - -struct _spaceship_t { - uint8_t healthLoss; - uint8_t progress; - uint8_t activatedParts; -}; - -bool isOnboard(Rectangle boundingBox); -void moveSpaceship(Vec2 direction); -Rectangle getBoundingBoxOfSpaceshipPart(SpaceshipPart* part); - -bool isBottomOnFloor(Rectangle boundingBox); -bool isOnUpperFloor(Rectangle boundingBox); -bool isOnLowerFloor(Rectangle boundingBox); -bool isOnLadder(Rectangle boundingBox); -void onAsteroidMined(); -bool isSpaceshipPartActivated(SpaceshipPart* part); - -bool isSpaceshipDestroyed(); -void destroySpaceship(); - -void shootTurretOfSpaceship(); -Action getPossibleActionFromSpaceship(Object* astronaut); - -#endif diff --git a/christmas/AdAstra/src/objects/types/sprites.c b/christmas/AdAstra/src/objects/types/sprites.c deleted file mode 100644 index a64db74..0000000 --- a/christmas/AdAstra/src/objects/types/sprites.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "sprites.h" - -#include - - -// AUTO-GENERATED - -const uint16_t beds[1][8][1] PROGMEM = {{{0x707},{0xc0c},{0x2424},{0x2424},{0x2424},{0x2424},{0x2424},{0x2424}}}; -const uint16_t exhaust[1][5][1] PROGMEM = {{{0x404},{0xe0e},{0xe0e},{0x1f1f},{0x404}}}; -const uint16_t font[50][4][1] PROGMEM = {{{0xff78},{0xff14},{0xff14},{0xff78}},{{0xff78},{0xff14},{0xff14},{0xff79}},{{0xff7c},{0xff54},{0xff54},{0xff28}},{{0xff38},{0xff44},{0xff44},{0xff28}},{{0xff7c},{0xff44},{0xff44},{0xff38}},{{0xff7c},{0xff54},{0xff54},{0xff44}},{{0xff7c},{0xff54},{0xff55},{0xff44}},{{0xff7c},{0xff14},{0xff14},{0xff04}},{{0xff38},{0xff44},{0xff54},{0xff30}},{{0xff7c},{0xff10},{0xff10},{0xff7c}},{{0xff44},{0xff7c},{0xff44},{0xff44}},{{0xff44},{0xff7c},{0xff45},{0xff44}},{{0xff20},{0xff40},{0xff40},{0xff3c}},{{0xff7c},{0xff10},{0xff28},{0xff44}},{{0xff7c},{0xff40},{0xff40},{0xff40}},{{0xff7c},{0xff0c},{0xff1c},{0xff7c}},{{0xff7c},{0xff08},{0xff30},{0xff7c}},{{0xff38},{0xff44},{0xff44},{0xff38}},{{0xff38},{0xff44},{0xff45},{0xff38}},{{0xff39},{0xff44},{0xff44},{0xff39}},{{0xff39},{0xff45},{0xff45},{0xff39}},{{0xff7c},{0xff14},{0xff14},{0xff08}},{{0xff18},{0xff24},{0xff24},{0xff58}},{{0xff7c},{0xff14},{0xff14},{0xff68}},{{0xff48},{0xff54},{0xff54},{0xff24}},{{0xff04},{0xff7c},{0xff04},{0xff04}},{{0xff7c},{0xff40},{0xff40},{0xff7c}},{{0xff7c},{0xff40},{0xff41},{0xff7c}},{{0xff7d},{0xff40},{0xff40},{0xff7d}},{{0xff7d},{0xff41},{0xff41},{0xff7d}},{{0xff3c},{0xff40},{0xff40},{0xff3c}},{{0xff7c},{0xff60},{0xff70},{0xff7c}},{{0xff44},{0xff38},{0xff38},{0xff44}},{{0xff1c},{0xff70},{0xff10},{0xff1c}},{{0xff64},{0xff54},{0xff54},{0xff4c}},{{0xff7c},{0xff44},{0xff44},{0xff7c}},{{0xff08},{0xff44},{0xff7c},{0xff40}},{{0xff4c},{0xff64},{0xff54},{0xff4c}},{{0xff44},{0xff54},{0xff54},{0xff7c}},{{0xff3c},{0xff20},{0xff70},{0xff20}},{{0xff5c},{0xff54},{0xff54},{0xff24}},{{0xff7c},{0xff54},{0xff54},{0xff74}},{{0xff04},{0xff64},{0xff14},{0xff0c}},{{0xff7c},{0xff54},{0xff54},{0xff7c}},{{0xff5c},{0xff54},{0xff54},{0xff7c}},{{0xff00},{0xffc0},{0xff00},{0xff00}},{{0xff40},{0xff00},{0xff00},{0xff00}},{{0xff5c},{0xff00},{0xff00},{0xff00}},{{0xff08},{0xffa4},{0xff14},{0xff08}},{{0xff00},{0xff00},{0xff00},{0xff00}}}; -const uint16_t small_asteroid[7][8][1] PROGMEM = {{{0x1c1c},{0x7e7e},{0xfef2},{0xfffb},{0xffff},{0xffdf},{0x7e7e},{0x3c3c}},{{0x0},{0x3c3c},{0x7e72},{0x7e7a},{0x7e7e},{0x7e5e},{0x3c3c},{0x0}},{{0x0},{0x0},{0x3030},{0x7878},{0x7c7c},{0x7c5c},{0x3838},{0x0}},{{0x0},{0x0},{0x3030},{0x3838},{0x3838},{0x1010},{0x0},{0x0}},{{0x0},{0x3030},{0x4848},{0x4444},{0x4444},{0x2828},{0x1010},{0x0}},{{0x2828},{0x8484},{0x8080},{0x0},{0x8282},{0x4444},{0x2828},{0x0}},{{0x202},{0x0},{0x0},{0x0},{0x0},{0x0},{0x8181},{0x4242}}}; -const uint16_t small_character_moving[4][5][1] PROGMEM = {{{0x606},{0x1f1d},{0xf0b},{0x1f1d},{0x606}},{{0x606},{0x1f1d},{0xf0b},{0xf0d},{0x1616}},{{0x606},{0x1f1d},{0xf0b},{0x1f1d},{0x606}},{{0x606},{0xf0d},{0x1f1b},{0x1f1d},{0x606}}}; -const uint16_t spaceship_idle[1][36][3] PROGMEM = {{{0x404,0x1414,0x1010},{0x404,0x3e3e,0x1010},{0xceca,0xffff,0x3828},{0xee6a,0xff8a,0x3929},{0xff3b,0xff09,0x7f6f},{0xff91,0xff08,0x7f44},{0xff51,0xff08,0x7f44},{0xff31,0xff08,0x7f44},{0xff1f,0xff08,0x7f7c},{0xf111,0xff08,0x4744},{0xf010,0xff08,0x704},{0xf010,0xfff8,0x707},{0xf010,0xff28,0x705},{0xf010,0xfff8,0x707},{0xf010,0xff08,0x704},{0xf010,0xff08,0x704},{0xf010,0xff08,0x704},{0xf010,0xff08,0x704},{0xf414,0xff08,0x1714},{0xf414,0xff08,0x1714},{0xfc1c,0xff08,0x1f1c},{0xfc1c,0xff08,0x1f1c},{0xf818,0xff08,0xf0c},{0xf010,0xff08,0x704},{0xf010,0xff08,0x704},{0xf010,0xff08,0x704},{0xf010,0xff0c,0x704},{0xf010,0xff0a,0x704},{0xf0b0,0xff1f,0x706},{0xe020,0xff1c,0x302},{0xe060,0xff1c,0x303},{0xc0c0,0xff9c,0x101},{0x8080,0xffdd,0x0},{0x0,0x7f7f,0x0},{0x0,0x1c1c,0x0},{0x0,0x808,0x0}}}; -const uint16_t stars[3][3][1] PROGMEM = {{{0x202},{0x707},{0x202}},{{0x505},{0x202},{0x505}},{{0x0},{0x303},{0x303}}}; -const uint16_t tree[1][5][1] PROGMEM = {{{0x808},{0xa0a},{0x1515},{0xa0a},{0x808}}}; -const uint16_t turret_controller[1][7][1] PROGMEM = {{{0x3030},{0x808},{0xf0f},{0x101},{0x101},{0x101},{0x101}}}; diff --git a/christmas/AdAstra/src/objects/types/sprites.h b/christmas/AdAstra/src/objects/types/sprites.h deleted file mode 100644 index 5cbe71d..0000000 --- a/christmas/AdAstra/src/objects/types/sprites.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef SPRITES_H -#define SPRITES_H - -#include - - -// AUTO-GENERATED - -const uint16_t beds[1][8][1]; -const uint16_t exhaust[1][5][1]; -const uint16_t font[50][4][1]; -const uint16_t small_asteroid[7][8][1]; -const uint16_t small_character_moving[4][5][1]; -const uint16_t spaceship_idle[1][36][3]; -const uint16_t stars[3][3][1]; -const uint16_t tree[1][5][1]; -const uint16_t turret_controller[1][7][1]; - -#endif diff --git a/christmas/AdAstra/src/objects/types/text/text.c b/christmas/AdAstra/src/objects/types/text/text.c deleted file mode 100644 index 1a4f05a..0000000 --- a/christmas/AdAstra/src/objects/types/text/text.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "text.h" - -#include - -#include "../asteroid/asteroid.h" -#include "../spaceship/spaceship.h" -#include "../sprites.h" -#include "../../object.h" -#include "../../object_container/object_container.h" -#include "null.h" -#include "math.h" -#include "../../../driver/display/display.h" - -#include -#define STRING_TERMINATOR 255 -#define CHARACTER_WIDTH 4 - -static bool canCreateNext = true; -static int8_t previousTextIndex = -1; -static bool isSpedUp = false; - -bool createText(Object* object) { - if (!canCreateNext) { - return false; - } - - createObject(&Text, object); - object->as.text.xPosition = DISPLAY_WIDTH_IN_PIXELS; - object->as.text.hasSetCanCreate = false; - object->position = (Vec2){0, 0}; - previousTextIndex++; - isSpedUp = false; - uint8_t textCount = 0; - for (uint16_t i = 0; i < 512; i++) { - if (textCount == previousTextIndex) { - if (eeprom_read_byte(i) == STRING_TERMINATOR) { - previousTextIndex = 0; - object->as.text.textStartIndex = 0; - } else { - object->as.text.textStartIndex = i; - } - canCreateNext = false; - return; - } - - if (eeprom_read_byte(i) == STRING_TERMINATOR) { - textCount++; - } - } - - return true; -} - -void speedUpText() { - isSpedUp = true; -} - -static uint8_t getTextLength(Object* text) { - for (uint8_t i = 0; i < 255; i++) { - if (eeprom_read_byte(text->as.text.textStartIndex + i) == STRING_TERMINATOR) { - return i; - } - } - - return 0; -} - -static void tick(Object* text, __attribute__((unused)) uint8_t previousFrameTime) { - if (++text->as.text.timeSinceLastShift > 2 || isSpedUp) { - text->as.text.xPosition--; - text->as.text.timeSinceLastShift = 0; - } - - if ( - !text->as.text.hasSetCanCreate - && getTextLength(text) * (CHARACTER_WIDTH + 1) + text->as.text.xPosition < DISPLAY_WIDTH_IN_PIXELS - CHARACTER_WIDTH - 1 - ) { - canCreateNext = true; - text->as.text.hasSetCanCreate = true; - } - - if (getTextLength(text) * (CHARACTER_WIDTH + 1) < -text->as.text.xPosition) { - clearObject(text); - } -} - -static void draw(Object* text, Rectangle __attribute__((unused)) compositingWindow) { - uint8_t indexOfFirstVisible = max(0, -text->as.text.xPosition / (CHARACTER_WIDTH + 1)); - for (uint8_t i = indexOfFirstVisible; i < indexOfFirstVisible + DISPLAY_WIDTH_IN_PIXELS / (CHARACTER_WIDTH + 1) + 2; i++) { - uint8_t letter = eeprom_read_byte(text->as.text.textStartIndex + i); - if (letter == STRING_TERMINATOR) { - return; - } - - drawBitmapFromProgMem( - (Rectangle){(Vec2){text->as.text.xPosition + i * (CHARACTER_WIDTH + 1), 0}, (Vec2){4, 8}}, - font[letter], - false - ); - - drawFilledRectangle( - (Rectangle){(Vec2){text->as.text.xPosition + i * (CHARACTER_WIDTH + 1) + CHARACTER_WIDTH, 0}, - (Vec2){1, 8}}, - 0xFF, - 0x00 - ); - } -} - -const Prototype Text PROGMEM = { - .tick = tick, - .draw = draw, - .size = TEXT_SIZE, -}; diff --git a/christmas/AdAstra/src/objects/types/text/text.h b/christmas/AdAstra/src/objects/types/text/text.h deleted file mode 100644 index 9847c3c..0000000 --- a/christmas/AdAstra/src/objects/types/text/text.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef TEXT_H -#define TEXT_H - -#include "../../prototype.h" -#include - - -#define TEXT_SIZE ((Vec2){64, 8}) - -const Prototype Text; -struct _text_t { - int16_t xPosition; - uint16_t textStartIndex; - uint8_t timeSinceLastShift; - bool hasSetCanCreate; -}; - -bool createText(Object* position); -void speedUpText(); - -#endif diff --git a/christmas/AdAstra/src/objects/types/text/texts.c b/christmas/AdAstra/src/objects/types/text/texts.c deleted file mode 100644 index f586358..0000000 --- a/christmas/AdAstra/src/objects/types/text/texts.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "texts.h" - -#include - - -// AUTO-GENERATED - -const uint8_t texts[385] EEMEM = {24, 34, 10, 0, 45, 2, 0, 14, 1, 34, 24, 47, 255, 2, 17, 14, 4, 17, 8, 49, 13, 0, 23, 1, 3, 24, 17, 16, 33, 25, 49, 13, 11, 30, 1, 16, 17, 13, 47, 255, 30, 10, 24, 34, 17, 16, 25, 49, 15, 1, 24, 25, 49, 10, 24, 49, 24, 34, 5, 23, 5, 25, 16, 6, 13, 49, 15, 17, 16, 4, 0, 16, 10, 46, 255, 9, 0, 2, 1, 23, 49, 23, 19, 30, 10, 4, 5, 2, 2, 45, 4, 5, 49, 0, 16, 16, 1, 14, 49, 24, 29, 23, 29, 2, 2, 49, 30, 17, 14, 25, 49, 0, 34, 49, 5, 8, 33, 16, 33, 1, 23, 10, 49, 13, 0, 14, 0, 16, 4, 26, 16, 13, 46, 255, 19, 23, 19, 15, 49, 30, 17, 14, 25, 49, 25, 6, 8, 5, 4, 49, 15, 5, 8, 10, 24, 15, 5, 23, 16, 10, 46, 255, 0, 49, 13, 23, 5, 0, 25, 10, 30, 10, 25, 1, 24, 17, 4, 49, 6, 24, 49, 19, 24, 24, 34, 5, 24, 34, 5, 4, 5, 25, 25, 24, 6, 8, 5, 4, 49, 10, 16, 24, 21, 10, 23, 1, 14, 18, 46, 255, 25, 27, 14, 34, 1, 24, 49, 16, 6, 14, 13, 28, 14, 49, 24, 17, 13, 26, 16, 13, 49, 21, 6, 14, 4, 0, 13, 6, 21, 5, 49, 14, 5, 9, 5, 25, 16, 6, 14, 46, 255, 19, 24, 24, 34, 5, 24, 24, 6, 8, 6, 2, 5, 16, 45, 16, 6, 14, 13, 28, 14, 5, 4, 49, 13, 10, 3, 24, 10, 25, 49, 24, 34, 17, 15, 17, 23, 27, 2, 2, 49, 14, 5, 16, 16, 5, 49, 0, 34, 49, 6, 14, 5, 25, 46, 255, 23, 5, 15, 6, 14, 5, 15, 49, 5, 34, 25, 49, 25, 5, 49, 10, 24, 49, 25, 26, 4, 17, 4, 49, 15, 0, 8, 0, 4, 23, 18, 14, 46, 255, 30, 1, 23, 17, 15, 45, 9, 17, 8, 33, 49, 15, 10, 9, 0, 15, 0, 23, 0, 2, 2, 49, 25, 0, 14, 1, 14, 13, 17, 34, 34, 26, 16, 13, 46, 255, 0, 16, 4, 23, 10, 24, 255, 255, 255}; diff --git a/christmas/AdAstra/src/objects/types/text/texts.h b/christmas/AdAstra/src/objects/types/text/texts.h deleted file mode 100644 index 375ffc6..0000000 --- a/christmas/AdAstra/src/objects/types/text/texts.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef TEXTS_H -#define TEXTS_H - -#include - - -// AUTO-GENERATED - -const uint8_t texts[385]; - -#endif diff --git a/christmas/AdAstra/src/util/random/random.c b/christmas/AdAstra/src/util/random/random.c deleted file mode 100644 index 50cce21..0000000 --- a/christmas/AdAstra/src/util/random/random.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "random.h" - - -static uint16_t currentValue = SEED; - -static uint16_t getRandom16bitNumberModuloPrime() { - uint16_t bit = currentValue ^ (currentValue >> 2) ^ (currentValue >> 3) ^ (currentValue >> 5); - currentValue = (currentValue >> 1) | (bit << 15); - return currentValue % 1031; -} - -uint8_t getRandomNumber() { - return (uint8_t)(getRandom16bitNumberModuloPrime() ^ getRandom16bitNumberModuloPrime()); -} diff --git a/christmas/AdAstra/src/util/random/random.h b/christmas/AdAstra/src/util/random/random.h deleted file mode 100644 index ea00ab8..0000000 --- a/christmas/AdAstra/src/util/random/random.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef RANDOM_H -#define RANDOM_H - -#include - - -// Mustn't be zero, should be lower than 65535 -#define SEED 42 - -// Simple LFSR with some improvements to enhance distribution -// while maintaining short execution time -uint8_t getRandomNumber(); - -#endif diff --git a/christmas/AdAstra/src/util/rectangle/rectangle.c b/christmas/AdAstra/src/util/rectangle/rectangle.c deleted file mode 100644 index 552eb03..0000000 --- a/christmas/AdAstra/src/util/rectangle/rectangle.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "rectangle.h" - - -bool areIntersecting(Rectangle r1, Rectangle r2) { - return ( - r1.position.x < r2.position.x + r2.size.x && - r1.position.x + r1.size.x > r2.position.x && - r1.position.y < r2.position.y + r2.size.y && - r1.position.y + r1.size.y > r2.position.y - ); -} - -bool isInside(Rectangle inner, Rectangle outer) { - return ( - outer.position.x <= inner.position.x && - inner.position.x + inner.size.x <= outer.position.x + outer.size.x && - outer.position.y <= inner.position.y && - inner.position.y + inner.size.y <= outer.position.y + outer.size.y - ); -} - -Vec2 getCenter(Rectangle r) { - return (Vec2) { - r.position.x + r.size.x / 2, - r.position.y + r.size.y / 2 - }; -} - -Rectangle translateRectangle(Rectangle r, Vec2 translate) { - return (Rectangle) { - add(r.position, translate), - r.size - }; -} diff --git a/christmas/AdAstra/src/util/rectangle/rectangle.h b/christmas/AdAstra/src/util/rectangle/rectangle.h deleted file mode 100644 index 7e94b07..0000000 --- a/christmas/AdAstra/src/util/rectangle/rectangle.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef RECTANGLE_H -#define RECTANGLE_H - -#include - -#include "../vec2/vec2.h" - - -typedef struct { - Vec2 position; - Vec2 size; -} Rectangle; - - -bool areIntersecting(Rectangle r1, Rectangle r2); - -// Return true only if inner is fully inside of outer -bool isInside(Rectangle inner, Rectangle outer); - -// Return the geometrical middle point of the given rectangle -Vec2 getCenter(Rectangle r); - -// Return a new rectangle shifted by vector translate -Rectangle translateRectangle(Rectangle r, Vec2 translate); - -#endif diff --git a/christmas/AdAstra/src/util/vec2/vec2.c b/christmas/AdAstra/src/util/vec2/vec2.c deleted file mode 100644 index 4a8351b..0000000 --- a/christmas/AdAstra/src/util/vec2/vec2.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "vec2.h" - - -const Vec2 directions[] = { - [north] = (Vec2){0, -1}, - [west] = (Vec2){-1, 0}, - [south] = (Vec2){0, 1}, - [east] = (Vec2){1, 0} -}; - -Vec2 add(Vec2 v1, Vec2 v2) { - return (Vec2){v1.x + v2.x, v1.y + v2.y}; -} - -Vec2 substract(Vec2 v1, Vec2 v2) { - return (Vec2){v1.x - v2.x, v1.y - v2.y}; -} - -Vec2 clampVec2(Vec2 v) { - return (Vec2){ - v.x == 0 ? 0 : (v.x > 0 ? 1 : -1), - v.y == 0 ? 0 : (v.y > 0 ? 1 : -1) - }; -} diff --git a/christmas/AdAstra/src/util/vec2/vec2.h b/christmas/AdAstra/src/util/vec2/vec2.h deleted file mode 100644 index a8cf263..0000000 --- a/christmas/AdAstra/src/util/vec2/vec2.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef VEC2_H -#define VEC2_H - -#include - - -typedef struct { - int8_t x; - int8_t y; -} Vec2; - -typedef enum { - north, west, south, east -} Direction; - -// The array directions can be indexed by a Direction and -// it contains vectors pointing into that direction. -const Vec2 directions[4]; - -Vec2 add(Vec2 v1, Vec2 v2); -Vec2 substract(Vec2 v1, Vec2 v2); - -// Return new vector with ll components between -1 and 1 (inclusive) -Vec2 clampVec2(Vec2 vector); - -#endif diff --git a/christmas/Felhasználói dokumentáció.docx b/christmas/Felhasználói dokumentáció.docx deleted file mode 100644 index 83e1895..0000000 Binary files a/christmas/Felhasználói dokumentáció.docx and /dev/null differ diff --git a/christmas/Felhasználói dokumentáció.pdf b/christmas/Felhasználói dokumentáció.pdf deleted file mode 100644 index df6ec15..0000000 Binary files a/christmas/Felhasználói dokumentáció.pdf and /dev/null differ diff --git a/christmas/text_generator/README.md b/christmas/text_generator/README.md deleted file mode 100644 index 1bbaaa3..0000000 --- a/christmas/text_generator/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Sprite generator - -## Install - -- Install Python 3.5 or later -- Execute `pip install -r requirements.txt` - -## Use - -- Using [Piskel](https://www.piskelapp.com/) - - draw the sprites - - export them in `zip` format (it's a .zip containing .png files) -- Place the files inside the [spritesheets](spritesheets) folder -- Execute `python main.py` -- The output is automatically placed in the [output](output) folder diff --git a/christmas/text_generator/input/.vscode/settings.json b/christmas/text_generator/input/.vscode/settings.json deleted file mode 100644 index 644c232..0000000 --- a/christmas/text_generator/input/.vscode/settings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "spellright.language": [ - "en", - "hu" - ], - "spellright.documentTypes": [ - "markdown", - "latex", - "plaintext" - ], - "cSpell.enableFiletypes": [ - "!plaintext" - ] -} \ No newline at end of file diff --git a/christmas/text_generator/input/adam.txt b/christmas/text_generator/input/adam.txt deleted file mode 100644 index 499e415..0000000 --- a/christmas/text_generator/input/adam.txt +++ /dev/null @@ -1,13 +0,0 @@ -Szia, Ádám! -Boldog karácsonyt kívánok! -Viszont mást is szeretnék mondani. -Most egy kicsit még távolabb fogunk kerülni egymástól. -Persze biztos vagyok benne, hogy ezután is tartani fogjuk a kapcsolatot. -Viszont jó pillanatnak érzem a mostanit arra, hogy köszönetet mondjak. -Köszönöm az együtt töltött időnket. -Köszönöm, hogy más ember lettem melletted. -Ebben neked is részed volt. -Összességében, nélküled kicsit szomorúbb lenne az élet. -Remélem ezt te is tudod magadról. -Várom, hogy mihamarabb találkozzunk. -Andris \ No newline at end of file diff --git a/christmas/text_generator/input/apa.txt b/christmas/text_generator/input/apa.txt deleted file mode 100644 index 6d51cb4..0000000 --- a/christmas/text_generator/input/apa.txt +++ /dev/null @@ -1,11 +0,0 @@ -Szia, Apa! -Boldog karácsonyt kívánok! -Viszont mást is szeretnék mondani. -Szeretném megköszönni azt a számtalan segítséget, amit tőled kaptam. -Köszönöm, hogy mindig támogattál és motiváltál. -Köszönöm, hogy mindig mögöttem álltál. -Nélküled most biztosan nem tartanék itt. -Ha ezt nehezen is fejeztem ki, de mindig fontos voltál nekem. -Összességében, nélküled kicsit szomorúbb lenne az élet. -Remélem ezt te is tudod magadról. -Andris diff --git a/christmas/text_generator/input/balazs.txt b/christmas/text_generator/input/balazs.txt deleted file mode 100644 index 4918b23..0000000 --- a/christmas/text_generator/input/balazs.txt +++ /dev/null @@ -1,11 +0,0 @@ -Szia, Balázs! -Boldog karácsonyt kívánok! -Viszont mást is szeretnék mondani. -Habár rövidebb, de annál sűrűbb volt az egynyári kalandunk. -Öröm volt téged megismerni. -A kreativitásod és összeszedettséged inspiráló. -Túlzás nélkül sokunk példaképe lehetnél. -Összességében, nélküled kicsit szomorúbb lenne az élet. -Remélem ezt te is tudod magadról. -Várom, hogy mihamarabb találkozzunk. -Andris diff --git a/christmas/text_generator/input/oliver.txt b/christmas/text_generator/input/oliver.txt deleted file mode 100644 index e5f20d7..0000000 --- a/christmas/text_generator/input/oliver.txt +++ /dev/null @@ -1,12 +0,0 @@ -Szia, Olivér! -Boldog karácsonyt kívánok! -Viszont mást is szeretnék mondani. -Jó pillanatnak érzem a mostanit arra, hogy köszönetet mondjak. -A barátságod, segítséged és humorod meghatározta az elmúlt éveimet. -Ha nem is gondolod így, de nagy hatással voltál rám. -Az elhivatottságod és kitartásod mindig inspirált. -Te vagy az a barát, akit mindenki szeretne. -Összességében, nélküled kicsit szomorúbb lenne az élet. -Remélem ezt te is tudod magadról. -Várom, hogy mihamarabb találkozzunk. -Andris diff --git a/christmas/text_generator/main.py b/christmas/text_generator/main.py deleted file mode 100644 index 24466a1..0000000 --- a/christmas/text_generator/main.py +++ /dev/null @@ -1,121 +0,0 @@ -import io -import os -import zipfile -from math import ceil -from sys import argv -from typing import Tuple - -from PIL import Image - -c_header = """#include "texts.h" - -#include - - -// AUTO-GENERATED - -""" - -h_header = """#ifndef TEXTS_H -#define TEXTS_H - -#include - - -// AUTO-GENERATED - -""" - -h_footer = """ -#endif -""" - -letters = [ - "a", - "á", - "b", - "c", - "d", - "e", - "é", - "f", - "g", - "h", - "i", - "í", - "j", - "k", - "l", - "m", - "n", - "o", - "ó", - "ö", - "ő", - "p", - "q", - "r", - "s", - "t", - "u", - "ú", - "ü", - "ű", - "v", - "w", - "x", - "y", - "z", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - ",", - ".", - "!", - "?", - " ", -] - - -def generate(input_text: str) -> Tuple[str, str]: - indices = [] - for line in input_text.split("\n"): - for char in line.strip().lower().replace(", ", ","): - indices.append(letters.index(char)) - indices.append(255) - indices.append(255) - - if len(indices) > 512: - print(f"Input is too long ({len(indices)} > 512)") - exit() - - output_h = h_header + f"const uint8_t texts[{len(indices)}];\n" + h_footer - output_c = c_header + f"const uint8_t texts[{len(indices)}] EEMEM = {{" - - output_c += ", ".join(str(i) for i in indices) - output_c += "};\n" - - return output_h, output_c - - -if __name__ == "__main__": - if len(argv) == 1: - print("Specify an input file") - exit() - - with open(argv[1], "r", encoding="utf-8") as f: - input_text = f.read() - - dot_h, dot_c = generate(input_text) - - with open("output/texts.h", "w+") as f: - f.write(dot_h) - with open("output/texts.c", "w+") as f: - f.write(dot_c) diff --git a/christmas/text_generator/requirements.txt b/christmas/text_generator/requirements.txt deleted file mode 100644 index 1c12e1b..0000000 --- a/christmas/text_generator/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Pillow==8.0.1 diff --git a/promo_source/2020-03-22_-_A_Bit_Of_Hope_-_David_Fesliyan.mp3 b/promo_source/2020-03-22_-_A_Bit_Of_Hope_-_David_Fesliyan.mp3 deleted file mode 100644 index b6b1890..0000000 --- a/promo_source/2020-03-22_-_A_Bit_Of_Hope_-_David_Fesliyan.mp3 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4f5ab9a127421ad52e6ce14b51964ca7d1be334f94ff22fb9e81ec5cc4aa6d05 -size 7382549 diff --git a/promo_source/VID_20200213_115319.mp4 b/promo_source/VID_20200213_115319.mp4 deleted file mode 100644 index b7c9634..0000000 --- a/promo_source/VID_20200213_115319.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5c07f6c214e6df2cb4801276a1002f850bccdb61c24a9a79a7b52958c213b75 -size 30251977 diff --git a/promo_source/_DSC3494.MOV b/promo_source/_DSC3494.MOV deleted file mode 100644 index 88761fa..0000000 --- a/promo_source/_DSC3494.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8333c5933830cda955f227d80d4582a20d1645f2e887148d5ea4390b136f7f23 -size 312816029 diff --git a/promo_source/_DSC3494.mp4 b/promo_source/_DSC3494.mp4 deleted file mode 100644 index 0561d77..0000000 --- a/promo_source/_DSC3494.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:522743a234a0104ef50f2be1385e2eebf8efb779a11953458fcf59f98df5fc98 -size 52807356 diff --git a/promo_source/_DSC3498.MOV b/promo_source/_DSC3498.MOV deleted file mode 100644 index f27e3d8..0000000 --- a/promo_source/_DSC3498.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8eac3db355fd1ccd55c5017040293fab8cd48224b50d7943b70f30ccd96fc0b5 -size 287528893 diff --git a/promo_source/_DSC3498.mp4 b/promo_source/_DSC3498.mp4 deleted file mode 100644 index 694c08c..0000000 --- a/promo_source/_DSC3498.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e729f3c35534ec45b4cdbbfce399955f8111eb27fab2c21eec1956985deb94fa -size 5500872 diff --git a/promo_source/_DSC3499.MOV b/promo_source/_DSC3499.MOV deleted file mode 100644 index d0c35d9..0000000 --- a/promo_source/_DSC3499.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8d0a3ded8a79229d79daa3d6a867c280673afa93dc3019ee6fbe3daa8a24a6a -size 664096745 diff --git a/promo_source/_DSC3499.mp4 b/promo_source/_DSC3499.mp4 deleted file mode 100644 index 170eb0d..0000000 --- a/promo_source/_DSC3499.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2801ccbb668f1f8f0e27993dc84990bc0a11f5592d8babf10f3fe644db541300 -size 60895739 diff --git a/promo_source/_DSC3503.MOV b/promo_source/_DSC3503.MOV deleted file mode 100644 index 7d3ae6e..0000000 --- a/promo_source/_DSC3503.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ab99cc36a9eca6e03cf81aa747fd6f124454b5de92887e2d9db87ab4a84d64d8 -size 37031508 diff --git a/promo_source/_DSC3503.mp4 b/promo_source/_DSC3503.mp4 deleted file mode 100644 index 7699193..0000000 --- a/promo_source/_DSC3503.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d013fd771cbdec8058dfe8348ec23526f1beffb2a6c398b486374124fa5103a0 -size 2949233 diff --git a/promo_source/_DSC3504.MOV b/promo_source/_DSC3504.MOV deleted file mode 100644 index 8444f32..0000000 --- a/promo_source/_DSC3504.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0693da644ea22191262ec0c6905f5ebcc8566b5d88ba96d9e068d9d22834f40f -size 72569956 diff --git a/promo_source/_DSC3504.mp4 b/promo_source/_DSC3504.mp4 deleted file mode 100644 index a7ad2f3..0000000 --- a/promo_source/_DSC3504.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53f9564d1717fc0e652271de27155698b94493c4601473809487130d7f489622 -size 6266527 diff --git a/promo_source/easy_eda.MOV b/promo_source/easy_eda.MOV deleted file mode 100644 index a96d823..0000000 --- a/promo_source/easy_eda.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9105a5aef3edeb44ab9abfa34638e25f900f68b64cdf2984d8873cf70e5a7606 -size 21744887 diff --git a/promo_source/hf/IMG_20200516_105522.jpg b/promo_source/hf/IMG_20200516_105522.jpg deleted file mode 100644 index c711966..0000000 Binary files a/promo_source/hf/IMG_20200516_105522.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105551.jpg b/promo_source/hf/IMG_20200516_105551.jpg deleted file mode 100644 index 3bbc0a2..0000000 Binary files a/promo_source/hf/IMG_20200516_105551.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105551.psd b/promo_source/hf/IMG_20200516_105551.psd deleted file mode 100644 index c4414a1..0000000 Binary files a/promo_source/hf/IMG_20200516_105551.psd and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105554.jpg b/promo_source/hf/IMG_20200516_105554.jpg deleted file mode 100644 index 36ae997..0000000 Binary files a/promo_source/hf/IMG_20200516_105554.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105558.jpg b/promo_source/hf/IMG_20200516_105558.jpg deleted file mode 100644 index 9acaf44..0000000 Binary files a/promo_source/hf/IMG_20200516_105558.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105606.jpg b/promo_source/hf/IMG_20200516_105606.jpg deleted file mode 100644 index cea4648..0000000 Binary files a/promo_source/hf/IMG_20200516_105606.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105620.jpg b/promo_source/hf/IMG_20200516_105620.jpg deleted file mode 100644 index 65062fa..0000000 Binary files a/promo_source/hf/IMG_20200516_105620.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105622.jpg b/promo_source/hf/IMG_20200516_105622.jpg deleted file mode 100644 index 87843bf..0000000 Binary files a/promo_source/hf/IMG_20200516_105622.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105631.jpg b/promo_source/hf/IMG_20200516_105631.jpg deleted file mode 100644 index 7f1d8ad..0000000 Binary files a/promo_source/hf/IMG_20200516_105631.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105634.jpg b/promo_source/hf/IMG_20200516_105634.jpg deleted file mode 100644 index 97bf38d..0000000 Binary files a/promo_source/hf/IMG_20200516_105634.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105640.jpg b/promo_source/hf/IMG_20200516_105640.jpg deleted file mode 100644 index 74c107b..0000000 Binary files a/promo_source/hf/IMG_20200516_105640.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105644.jpg b/promo_source/hf/IMG_20200516_105644.jpg deleted file mode 100644 index e00977c..0000000 Binary files a/promo_source/hf/IMG_20200516_105644.jpg and /dev/null differ diff --git a/promo_source/hf/IMG_20200516_105648.jpg b/promo_source/hf/IMG_20200516_105648.jpg deleted file mode 100644 index 7f34e31..0000000 Binary files a/promo_source/hf/IMG_20200516_105648.jpg and /dev/null differ diff --git a/promo_source/hf/hf.jpg b/promo_source/hf/hf.jpg deleted file mode 100644 index ca71793..0000000 Binary files a/promo_source/hf/hf.jpg and /dev/null differ diff --git a/promo_source/ide.MOV b/promo_source/ide.MOV deleted file mode 100644 index 31afe13..0000000 --- a/promo_source/ide.MOV +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6376b631d34190eff1d014c9e0557397dabea7a645459dac83a5ce218973c14 -size 15283226 diff --git a/promo_source/video.psd b/promo_source/video.psd deleted file mode 100644 index c0df8c4..0000000 Binary files a/promo_source/video.psd and /dev/null differ