diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index fd54bfaaea..bf8ef559cc 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1472,6 +1472,7 @@ CPU=CPU Clear Errors=Clear Errors Clear Profile Stats=Clear Profile Scores CoinMode=CoinMode +Convert XML=Convert XML Debug Menu=Debug Menu Fill Profile Stats=Fill Profile Stats Flush Log=Flush Log diff --git a/src/Actor.cpp b/src/Actor.cpp index c289717eaa..51fc2b7e9f 100644 --- a/src/Actor.cpp +++ b/src/Actor.cpp @@ -2022,6 +2022,7 @@ public: ADD_METHOD( effectcolor2 ); ADD_METHOD( effectperiod ); ADD_METHOD( effecttiming ); + ADD_METHOD(effect_hold_at_full); ADD_METHOD( effectoffset ); ADD_METHOD( effectclock ); ADD_METHOD( effectmagnitude ); diff --git a/src/ScreenDebugOverlay.cpp b/src/ScreenDebugOverlay.cpp index 95f520b910..f145f654d1 100644 --- a/src/ScreenDebugOverlay.cpp +++ b/src/ScreenDebugOverlay.cpp @@ -564,6 +564,7 @@ static LocalizedString SCREEN_OFF ( "ScreenDebugOverlay", "Send Off To Screen" static LocalizedString RELOAD_OVERLAY_SCREENS( "ScreenDebugOverlay", "Reload Overlay Screens" ); static LocalizedString TOGGLE_ERRORS( "ScreenDebugOverlay", "Toggle Errors" ); static LocalizedString CLEAR_ERRORS( "ScreenDebugOverlay", "Clear Errors" ); +static LocalizedString CONVERT_XML( "ScreenDebugOverlay", "Convert XML" ); static LocalizedString RELOAD_THEME_AND_TEXTURES( "ScreenDebugOverlay", "Reload Theme and Textures" ); static LocalizedString WRITE_PROFILES ( "ScreenDebugOverlay", "Write Profiles" ); static LocalizedString WRITE_PREFERENCES ( "ScreenDebugOverlay", "Write Preferences" ); @@ -1115,6 +1116,24 @@ class DebugLineClearErrors : public IDebugLine } }; +void convert_xmls_in_dir(RString const& dirname); +class DebugLineConvrtXML : public IDebugLine +{ + virtual RString GetDisplayTitle() { return CONVERT_XML.GetValue(); } + virtual RString GetDisplayValue() { return RString(); } + virtual bool IsEnabled() { return true; } + virtual RString GetPageName() const { return "Theme"; } + virtual void DoAndLog( RString &sMessageOut ) + { + Song* cur_song= GAMESTATE->m_pCurSong; + if(cur_song) + { + convert_xmls_in_dir(cur_song->GetSongDir() + "/"); + IDebugLine::DoAndLog(sMessageOut); + } + } +}; + class DebugLineWriteProfiles : public IDebugLine { virtual RString GetDisplayTitle() { return WRITE_PROFILES.GetValue(); } @@ -1300,6 +1319,7 @@ DECLARE_ONE( DebugLineReloadTheme ); DECLARE_ONE( DebugLineReloadOverlayScreens ); DECLARE_ONE( DebugLineToggleErrors ); DECLARE_ONE( DebugLineClearErrors ); +DECLARE_ONE( DebugLineConvrtXML ); DECLARE_ONE( DebugLineWriteProfiles ); DECLARE_ONE( DebugLineWritePreferences ); DECLARE_ONE( DebugLineMenuTimer ); diff --git a/src/XmlToLua.cpp b/src/XmlToLua.cpp index 4eb8843596..d9a1cf405c 100644 --- a/src/XmlToLua.cpp +++ b/src/XmlToLua.cpp @@ -492,6 +492,7 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond { type= node.GetName(); bool type_set_by_automagic= false; +#define set_type(auto_type) type_set_by_automagic= true; type= auto_type; FOREACH_CONST_Attr(&node, attr) { if(attr->first == "Name") @@ -525,6 +526,11 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond // Ignore. This attribute seems to be put in by the xml parser, and // not part of the actual xml code. } + else if(attr->first == "Text") + { + set_type("BitmapText"); + store_field(attr->first, attr->second, true); + } else if(attr->first == "File") { RString relative_path; @@ -532,7 +538,7 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond RString sfname= dirname + relative_path; if(FILEMAN->IsADirectory(sfname)) { - type= "LoadActor"; + set_type("LoadActor"); store_field("File", attr->second, false); } else @@ -553,7 +559,7 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond case FT_Xml: this_relative= SetExtension(this_relative, "lua"); case FT_Lua: - type= "LoadActor"; + set_type("LoadActor"); store_field("File", this_relative, false); handled_level= 2; break; @@ -563,23 +569,23 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond case FT_Movie: if(handled_level < 2) { - type= "Sprite"; + set_type("Sprite"); store_field("File", this_relative, false); handled_level= 1; } break; case FT_Sound: - type= "ActorSound"; + set_type("ActorSound"); store_field("File", this_relative, false); handled_level= 1; break; case FT_Sprite: - type= "Sprite"; + set_type("Sprite"); load_frames_from_file(dirname + this_relative, Dirname(relative_path)); handled_level= 2; break; case FT_Model: - type= "Model"; + set_type("Model"); store_field("Meshes", this_relative, false); store_field("Materials", this_relative, false); store_field("Bones", this_relative, false); @@ -590,7 +596,7 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond { if(extension == "model") { - type= "Model"; + set_type("Model"); load_model_from_file(dirname + this_relative, Dirname(relative_path)); handled_level= 2; } @@ -611,16 +617,6 @@ void actor_template_t::load_node(XNode const& node, RString const& dirname, cond } } } - // else if(attr->first.Right(1) == "X") - // { - // attr->second->GetValue(x); - // x= maybe_conv_pos(x, convert_xpos); - // } - // else if(attr->first.Right(1) == "Y") - // { - // attr->second->GetValue(y); - // y= maybe_conv_pos(y, convert_ypos); - // } else { store_field(attr->first, attr->second, true);