@@ -98,7 +98,7 @@ pub struct TagView {
9898 hexview_referenced : Option < TagHexView > ,
9999 mode : TagViewMode ,
100100
101- decompiled_shader : Result < String , String > ,
101+ decompiled_shader : Option < Result < String , String > > ,
102102}
103103
104104#[ macro_export]
@@ -275,13 +275,26 @@ impl TagView {
275275 } ;
276276
277277 let decompiled_shader = if tag_type. is_shader ( ) && tag_type. is_header ( ) {
278- package_manager ( )
279- . read_tag ( tag_entry. reference )
280- . ok ( )
281- . map ( |d| decompile_shader ( & d) )
282- . unwrap_or ( Err ( "Failed to read shader data" . to_string ( ) ) )
278+ Some (
279+ package_manager ( )
280+ . read_tag ( tag_entry. reference )
281+ . ok ( )
282+ . map ( |d| decompile_shader ( & d) )
283+ . unwrap_or ( Err ( "Failed to read shader data" . to_string ( ) ) ) ,
284+ )
285+ } else if matches ! ( tag_entry. reference, 0x80801AB4 | 0x80801B7C )
286+ && package_manager ( ) . platform == PackagePlatform :: XboxOne
287+ && package_manager ( ) . version == GameVersion :: Destiny ( DestinyVersion :: DestinyRiseOfIron )
288+ {
289+ Some (
290+ package_manager ( )
291+ . read_tag ( tag)
292+ . ok ( )
293+ . map ( |d| decompile_shader ( & d[ 0x30 ..] ) )
294+ . unwrap_or ( Err ( "Failed to read shader data" . to_string ( ) ) ) ,
295+ )
283296 } else {
284- Err ( "Not a shader" . to_string ( ) )
297+ None
285298 } ;
286299
287300 let mut string_hashes_hexview = string_hashes
@@ -462,7 +475,26 @@ impl TagView {
462475 ui. heading ( RichText :: new ( "⚠ Tag data failed to read" ) . color ( Color32 :: YELLOW ) ) ;
463476 }
464477
465- if self . tag_type . is_tag ( ) {
478+ if let Some ( decompiled_shader) = & self . decompiled_shader {
479+ match & decompiled_shader {
480+ Ok ( d) => {
481+ egui:: ScrollArea :: vertical ( )
482+ . auto_shrink ( [ false ; 2 ] )
483+ . show ( ui, |ui| {
484+ // ui.monospace(d);
485+ egui_extras:: syntax_highlighting:: code_view_ui (
486+ ui,
487+ & CodeTheme :: dark ( ) ,
488+ d,
489+ "cpp" ,
490+ )
491+ } ) ;
492+ }
493+ Err ( e) => {
494+ ui. label ( format ! ( "Decompiled shader output not available: {e}" ) ) ;
495+ }
496+ }
497+ } else if self . tag_type . is_tag ( ) {
466498 ui. horizontal_wrapped ( |ui| {
467499 if ui
468500 . add_enabled (
@@ -615,25 +647,6 @@ impl TagView {
615647 ui. colored_label ( Color32 :: RED , strip_ansi_codes ( & format ! ( "{e:?}" ) ) ) ;
616648 }
617649 }
618- } else if self . tag_type . is_shader ( ) && self . tag_type . is_header ( ) {
619- match & self . decompiled_shader {
620- Ok ( d) => {
621- egui:: ScrollArea :: vertical ( )
622- . auto_shrink ( [ false ; 2 ] )
623- . show ( ui, |ui| {
624- // ui.monospace(d);
625- egui_extras:: syntax_highlighting:: code_view_ui (
626- ui,
627- & CodeTheme :: dark ( ) ,
628- d,
629- "cpp" ,
630- )
631- } ) ;
632- }
633- Err ( e) => {
634- ui. label ( format ! ( "Decompiled shader output not available: {e}" ) ) ;
635- }
636- }
637650 } else {
638651 ui. label ( RichText :: new ( "Traversal not available for non-8080 tags" ) . italics ( ) ) ;
639652 }
0 commit comments