@@ -228,5 +228,82 @@ private void importJSONToolStripMenuItem_Click(object sender, EventArgs e)
228228 UpdateMap ( ) ;
229229 }
230230 }
231+
232+ private void exportCToolStripMenuItem_Click ( object sender , EventArgs e )
233+ {
234+ saveFileDialog1 . FileName = "" ;
235+ saveFileDialog1 . Filter = Filters . C ;
236+ if ( saveFileDialog1 . ShowDialog ( ) == DialogResult . OK )
237+ {
238+ StringWriter sw = new StringWriter ( ) ;
239+ foreach ( var entry in _obj . Entries )
240+ {
241+ int entryOff = _obj . OffsetOf ( entry ) ;
242+ switch ( entry . GetEntryType ( ) )
243+ {
244+ case Z64Object . EntryType . DList :
245+ {
246+ sw . WriteLine ( $ "Gfx dlist_{ entryOff : X8} [] = \r \n {{") ;
247+ bool oldStatic = RDPDisassembler . Configuration . Static ;
248+
249+ RDPDisassembler . Configuration . Static = true ;
250+ RDPDisassembler dis = new RDPDisassembler ( entry . GetData ( ) , new SegmentedAddress ( _segment , _obj . OffsetOf ( entry ) ) . VAddr ) ;
251+ dis . Disassemble ( ) . ForEach ( l => sw . WriteLine ( $ " { l } ") ) ; ;
252+
253+ RDPDisassembler . Configuration . Static = oldStatic ;
254+ sw . WriteLine ( "};" ) ;
255+ break ;
256+ }
257+ case Z64Object . EntryType . Vertex :
258+ {
259+ sw . WriteLine ( $ "Vtx_t vertices_{ entryOff : X8} [] = \r \n {{") ;
260+
261+ var vtx = ( Z64Object . VertexHolder ) entry ;
262+ vtx . Vertices . ForEach ( v => sw . WriteLine ( $ " {{ { v . X } , { v . Y } , { v . Z } , 0x{ v . Flag : X4} , { v . TexX } , { v . TexY } , { v . R } , { v . G } , { v . B } , { v . A } }},") ) ;
263+
264+ sw . WriteLine ( "};" ) ;
265+ break ;
266+ }
267+ case Z64Object . EntryType . Texture :
268+ {
269+ sw . WriteLine ( $ "u8 tex_{ entryOff : X8} [] = \r \n {{") ;
270+
271+ var tex = entry . GetData ( ) ;
272+ for ( int i = 0 ; i < tex . Length ; i += 16 )
273+ {
274+ sw . Write ( " " ) ;
275+ for ( int j = 0 ; j < 16 && i + j < tex . Length ; j ++ )
276+ sw . Write ( $ "0x{ tex [ i + j ] : X2} , ") ;
277+ sw . Write ( "\r \n " ) ;
278+ }
279+
280+ sw . WriteLine ( "};" ) ;
281+ break ;
282+ }
283+ case Z64Object . EntryType . Unknown :
284+ {
285+ sw . WriteLine ( $ "u8 unk_{ entryOff : X8} [] = \r \n {{") ;
286+
287+ var bytes = entry . GetData ( ) ;
288+ for ( int i = 0 ; i < bytes . Length ; i += 16 )
289+ {
290+ sw . Write ( " " ) ;
291+ for ( int j = 0 ; j < 16 && i + j < bytes . Length ; j ++ )
292+ sw . Write ( $ "0x{ bytes [ i + j ] : X2} , ") ;
293+ sw . Write ( "\r \n " ) ;
294+ }
295+
296+ sw . WriteLine ( "};" ) ;
297+ break ;
298+ }
299+ default : throw new Exception ( "Invalid Entry Type" ) ;
300+ }
301+
302+ sw . Write ( "\r \n " ) ;
303+ }
304+
305+ File . WriteAllText ( saveFileDialog1 . FileName , sw . ToString ( ) ) ;
306+ }
307+ }
231308 }
232309}
0 commit comments