From 5bde0155f5c394ba246aa415337dd30855ddca72 Mon Sep 17 00:00:00 2001 From: Ghabry Date: Wed, 1 Sep 2021 15:48:00 +0200 Subject: [PATCH] SavePicture: Add chunks for Flip, Blend Mode and Fixed Angle Flip & Blend: Maniac Patch uses the upper bits of finish_bot_trans for this which is ugly Fixed Angle: This is a new value for the effect parameter. Had to put this in the normal enums.csv due to generator limitations --- generator/csv/enums.csv | 1 + generator/csv/enums_easyrpg.csv | 4 ++++ generator/csv/fields_easyrpg.csv | 2 ++ src/generated/lcf/lsd/chunks.h | 6 +++++- src/generated/lcf/rpg/savepicture.h | 28 +++++++++++++++++++++++++--- src/generated/lsd_savepicture.cpp | 16 ++++++++++++++++ src/generated/rpg_enums.cpp | 1 + src/generated/rpg_savepicture.cpp | 2 ++ 8 files changed, 56 insertions(+), 4 deletions(-) diff --git a/generator/csv/enums.csv b/generator/csv/enums.csv index e8aec073..3cd1a8be 100644 --- a/generator/csv/enums.csv +++ b/generator/csv/enums.csv @@ -133,6 +133,7 @@ SavePartyLocation,PanState,follow,1 SavePicture,Effect,none,0 SavePicture,Effect,rotation,1 SavePicture,Effect,wave,2 +SavePicture,Effect,maniac_fixed_angle,3 SavePicture,MapLayer,none,0 SavePicture,MapLayer,parallax,1 SavePicture,MapLayer,tilemap_below,2 diff --git a/generator/csv/enums_easyrpg.csv b/generator/csv/enums_easyrpg.csv index 830c46db..e1d22cf4 100644 --- a/generator/csv/enums_easyrpg.csv +++ b/generator/csv/enums_easyrpg.csv @@ -29,3 +29,7 @@ EventPage,ManiacEventInfo,battle_parallel,7 EventPage,ManiacEventInfo,map_event,16 EventPage,ManiacEventInfo,common_event,32 EventPage,ManiacEventInfo,battle_event,64 +SavePicture,EasyRpgFlip,none,0 +SavePicture,EasyRpgFlip,x,1 +SavePicture,EasyRpgFlip,y,2 +SavePicture,EasyRpgFlip,both,3 diff --git a/generator/csv/fields_easyrpg.csv b/generator/csv/fields_easyrpg.csv index 398d9cb2..bc7e1565 100644 --- a/generator/csv/fields_easyrpg.csv +++ b/generator/csv/fields_easyrpg.csv @@ -7,6 +7,8 @@ SaveEventExecFrame,maniac_event_id,f,Int32,0x0F,0,0,0,Event ID SaveEventExecFrame,maniac_event_page_id,f,Int32,0x10,0,0,0,Page ID when it is a map event SaveEventExecFrame,maniac_loop_info_size,f,Int32,0x11,0,0,0,Amount of loop info groups SaveEventExecFrame,maniac_loop_info,f,Vector,0x12,,0,0,"One group of (Current loop count, end loop value) for each identation" +SavePicture,easyrpg_flip,f,Enum,0xC8,0,0,1,How to flip the picture +SavePicture,easyrpg_blend_mode,f,Int32,0xC9,0,0,1,Blend mode to use for blit. See Bitmap::BlendMode SaveSystem,maniac_frameskip,,Int32,0x88,0,0,0,"FatalMix Frameskip (0=None, 1=1/5, 2=1/3, 3=1/2)" SaveSystem,maniac_picture_limit,,Int32,0x89,0,0,0,FatalMix Picture Limit SaveSystem,maniac_options,,Vector,0x8A,,0,0,"Various FatalMix options (XX XA XB XC). A: MsgSkip OFF/RShift (0/4) B: TestPlay Keep/ON/OFF (0/2/4), C: Pause focus lost Wait/Run (0/1)" diff --git a/src/generated/lcf/lsd/chunks.h b/src/generated/lcf/lsd/chunks.h index 5a4ce010..0dd1936a 100644 --- a/src/generated/lcf/lsd/chunks.h +++ b/src/generated/lcf/lsd/chunks.h @@ -313,7 +313,11 @@ namespace LSD_Reader { /** How much the picture is currently rotated. */ current_rotation = 0x34, /** Current wave effect for picture. */ - current_waver = 0x35 + current_waver = 0x35, + /** How to flip the picture */ + easyrpg_flip = 0xC8, + /** Blend mode to use for blit. See Bitmap::BlendMode */ + easyrpg_blend_mode = 0xC9 }; }; struct ChunkSavePartyLocation { diff --git a/src/generated/lcf/rpg/savepicture.h b/src/generated/lcf/rpg/savepicture.h index 17abc3da..d4d5996b 100644 --- a/src/generated/lcf/rpg/savepicture.h +++ b/src/generated/lcf/rpg/savepicture.h @@ -31,12 +31,14 @@ namespace rpg { enum Effect { Effect_none = 0, Effect_rotation = 1, - Effect_wave = 2 + Effect_wave = 2, + Effect_maniac_fixed_angle = 3 }; static constexpr auto kEffectTags = lcf::makeEnumTags( "none", "rotation", - "wave" + "wave", + "maniac_fixed_angle" ); enum MapLayer { MapLayer_none = 0, @@ -80,6 +82,18 @@ namespace rpg { "windows_and_status", "timers" ); + enum EasyRpgFlip { + EasyRpgFlip_none = 0, + EasyRpgFlip_x = 1, + EasyRpgFlip_y = 2, + EasyRpgFlip_both = 3 + }; + static constexpr auto kEasyRpgFlipTags = lcf::makeEnumTags( + "none", + "x", + "y", + "both" + ); int ID = 0; std::string name; @@ -136,6 +150,8 @@ namespace rpg { int32_t time_left = 0; double current_rotation = 0.0; int32_t current_waver = 0; + int32_t easyrpg_flip = 0; + int32_t easyrpg_blend_mode = 0; }; inline std::ostream& operator<<(std::ostream& os, SavePicture::Effect code) { os << static_cast>(code); @@ -149,6 +165,10 @@ namespace rpg { os << static_cast>(code); return os; } + inline std::ostream& operator<<(std::ostream& os, SavePicture::EasyRpgFlip code) { + os << static_cast>(code); + return os; + } inline bool operator==(const SavePicture::Flags& l, const SavePicture::Flags& r) { return l.flags == r.flags; @@ -198,7 +218,9 @@ namespace rpg { && l.finish_effect_power == r.finish_effect_power && l.time_left == r.time_left && l.current_rotation == r.current_rotation - && l.current_waver == r.current_waver; + && l.current_waver == r.current_waver + && l.easyrpg_flip == r.easyrpg_flip + && l.easyrpg_blend_mode == r.easyrpg_blend_mode; } inline bool operator!=(const SavePicture& l, const SavePicture& r) { diff --git a/src/generated/lsd_savepicture.cpp b/src/generated/lsd_savepicture.cpp index f8badf28..59813c93 100644 --- a/src/generated/lsd_savepicture.cpp +++ b/src/generated/lsd_savepicture.cpp @@ -286,6 +286,20 @@ static TypedField static_current_waver( 0, 0 ); +static TypedField static_easyrpg_flip( + &rpg::SavePicture::easyrpg_flip, + LSD_Reader::ChunkSavePicture::easyrpg_flip, + "easyrpg_flip", + 0, + 1 +); +static TypedField static_easyrpg_blend_mode( + &rpg::SavePicture::easyrpg_blend_mode, + LSD_Reader::ChunkSavePicture::easyrpg_blend_mode, + "easyrpg_blend_mode", + 0, + 1 +); template <> @@ -328,6 +342,8 @@ Field const* Struct::fields[] = { &static_time_left, &static_current_rotation, &static_current_waver, + &static_easyrpg_flip, + &static_easyrpg_blend_mode, NULL }; diff --git a/src/generated/rpg_enums.cpp b/src/generated/rpg_enums.cpp index 40e47e35..5cf07928 100644 --- a/src/generated/rpg_enums.cpp +++ b/src/generated/rpg_enums.cpp @@ -97,6 +97,7 @@ constexpr decltype(SaveSystem::kAtbModeTags) SaveSystem::kAtbModeTags; constexpr decltype(SavePicture::kEffectTags) SavePicture::kEffectTags; constexpr decltype(SavePicture::kMapLayerTags) SavePicture::kMapLayerTags; constexpr decltype(SavePicture::kBattleLayerTags) SavePicture::kBattleLayerTags; +constexpr decltype(SavePicture::kEasyRpgFlipTags) SavePicture::kEasyRpgFlipTags; constexpr decltype(SavePartyLocation::kVehicleTypeTags) SavePartyLocation::kVehicleTypeTags; constexpr decltype(SavePartyLocation::kPanStateTags) SavePartyLocation::kPanStateTags; constexpr decltype(SaveVehicleLocation::kVehicleTypeTags) SaveVehicleLocation::kVehicleTypeTags; diff --git a/src/generated/rpg_savepicture.cpp b/src/generated/rpg_savepicture.cpp index 2a844558..7988ee51 100644 --- a/src/generated/rpg_savepicture.cpp +++ b/src/generated/rpg_savepicture.cpp @@ -63,6 +63,8 @@ std::ostream& operator<<(std::ostream& os, const SavePicture& obj) { os << ", time_left="<< obj.time_left; os << ", current_rotation="<< obj.current_rotation; os << ", current_waver="<< obj.current_waver; + os << ", easyrpg_flip="<< obj.easyrpg_flip; + os << ", easyrpg_blend_mode="<< obj.easyrpg_blend_mode; os << "}"; return os; }