| 45 | } |
| 46 | |
| 47 | void saveHeader(Stream* stream, const char* saveName) |
| 48 | { |
| 49 | // Generate a screenshot. |
| 50 | DisplayInfo displayInfo; |
| 51 | TFE_RenderBackend::getDisplayInfo(&displayInfo); |
| 52 | size_t size = displayInfo.width * displayInfo.height * 4; |
| 53 | if (size > s_imageBufferSize[0]) |
| 54 | { |
| 55 | s_imageBuffer[0] = (u32*)realloc(s_imageBuffer[0], size); |
| 56 | s_imageBufferSize[0] = size; |
| 57 | } |
| 58 | TFE_RenderBackend::captureScreenToMemory(s_imageBuffer[0]); |
| 59 | // Save to memory. |
| 60 | u8* png = (u8*)malloc(SAVE_IMAGE_WIDTH * SAVE_IMAGE_HEIGHT * 4); |
| 61 | u32 pngSize = 0; |
| 62 | if (png) |
| 63 | { |
| 64 | pngSize = (u32)TFE_Image::writeImageToMemory(png, displayInfo.width, displayInfo.height, |
| 65 | SAVE_IMAGE_WIDTH, SAVE_IMAGE_HEIGHT, |
| 66 | s_imageBuffer[0]); |
| 67 | } |
| 68 | else |
| 69 | { |
| 70 | pngSize = 0; |
| 71 | png = (u8*)s_imageBuffer[0]; |
| 72 | } |
| 73 | |
| 74 | // Master version. |
| 75 | u32 version = SVER_CUR; |
| 76 | stream->write(&version); |
| 77 | |
| 78 | // Save Name. |
| 79 | size_t saveNameLen = strlen(saveName); |
| 80 | if (saveNameLen > SAVE_MAX_NAME_LEN - 1) { saveNameLen = SAVE_MAX_NAME_LEN - 1; } |
| 81 | u8 len = (u8)saveNameLen; |
| 82 | stream->write(&len); |
| 83 | stream->writeBuffer(saveName, len); |
| 84 | |
| 85 | // Time and Date of Save. |
| 86 | char timeDate[256]; |
| 87 | TFE_System::getDateTimeString(timeDate); |
| 88 | len = (u8)strlen(timeDate); |
| 89 | stream->write(&len); |
| 90 | stream->writeBuffer(timeDate, len); |
| 91 | |
| 92 | // Level Name |
| 93 | char levelName[256]; |
| 94 | s_game->getLevelName(levelName); |
| 95 | len = (u8)strlen(levelName); |
| 96 | stream->write(&len); |
| 97 | stream->writeBuffer(levelName, len); |
| 98 | |
| 99 | //Level ID |
| 100 | char levelId[256]; |
| 101 | s_game->getLevelId(levelId); |
| 102 | len = (u8)strlen(levelId); |
| 103 | stream->write(&len); |
| 104 | stream->writeBuffer(levelId, len); |
no test coverage detected