Advertisement
Guest User

WindowCaster: M_LoadScript()

a guest
Jan 9th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///M_LoadScript(lumpname);
  2. // loads a binary script and handles all the translation to internal triggers.
  3.  
  4.     var lumpname = argument0;
  5.     var lumpnum  = CA_CheckNumForName(filename);
  6.     var info     = global.shadowlib_info[lumpnum];
  7.    
  8.     if(info.size == 0) exit;
  9.    
  10.     var i=0;    //loop iterator
  11.     var j=0;    //script collection iterator
  12.    
  13.     var action = 0;     //u16
  14.     var condition = 0;  //u8
  15.     var paramtmp = 0;   //u32
  16.    
  17.     var newdata = 0;    //scriptdata object
  18.     var prev = 0;       //previously created scriptdata (for linked list)
  19.    
  20.     buffer_seek(global.shadowlib,buffer_seek_start,info.offset);
  21.    
  22.     for(j=0;buffer_tell(global.shadowlib) < info.offset+info.size;j++) {
  23.     if(j) buffer_seek(global.shadowlib,buffer_seek_relative,1); //skip script block delimiter
  24.     prev = 0;   //drop reference to previous scriptdata
  25.    
  26.     if(buffer_tell(global.shadowlib) == info.offset+info.size) exit;
  27.  
  28.         for(i=0;buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u8) != $ff;i++) {
  29.  
  30.             ///////////////////////////////////////////////////////////////////
  31.             //hack to try to skip leading byte in some triggers (?)////////////
  32.             if(buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u8) == $00 &&
  33.                 buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u32) == $00000084)
  34.                     buffer_seek(global.shadowlib,buffer_seek_relative,1);
  35.            
  36.             else if(buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u8) == $00 &&
  37.                     buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u16) != $0000)
  38.                         buffer_seek(global.shadowlib,buffer_seek_relative,1);
  39.             else if(buffer_peek(global.shadowlib,buffer_tell(global.shadowlib),buffer_u16) == $3408)    //???
  40.                 buffer_seek(global.shadowlib,buffer_seek_relative,1);
  41.             ///////////////////////////////////////////////////////////////////
  42.             ///////////////////////////////////////////////////////////////////
  43.  
  44.             newdata = instance_create(0,0,scriptdata);
  45.             newdata.action = buffer_read(global.shadowlib,buffer_u16);
  46.             newdata.condition = buffer_read(global.shadowlib,buffer_u8);
  47.             newdata.triggerlist = j;
  48.            
  49.             if(prev) prev.next = newdata;
  50.  
  51.             switch(newdata.action) {
  52.                 default:
  53.                     show_message("M_LoadScript: unmapped sc action "+string(action)+" at "+string(i)+" of "+string(j));
  54.                     break;
  55.                
  56.                 //1 parameter
  57.                 case trigger.unk_0000:
  58.                 case trigger.unk_0200:
  59.                 case trigger.unk_0300:
  60.                 case trigger.unk_0400:
  61.                 case trigger.unk_0500:
  62.                 case trigger.unk_0680:
  63.                 case trigger.unk_0780:
  64.                 case trigger.unk_0f80:
  65.                 case trigger.unk_1080:
  66.                 case trigger.unk_1380:
  67.                 case trigger.unk_1580:
  68.                 case trigger.unk_1a80:
  69.                 case trigger.unk_2280:
  70.                 case trigger.unk_2480:
  71.                 case trigger.unk_2880:
  72.                 case trigger.unk_3c00:
  73.                 case trigger.unk_3d00:
  74.                 case trigger.unk_3e00:
  75.                 case trigger.unk_3f00:
  76.                 case trigger.unk_4200:
  77.                 case trigger.unk_4900:
  78.                 case trigger.unk_4a00:
  79.                 case trigger.unk_4f00:
  80.                 case trigger.unk_5800:
  81.                     show_message("M_LoadScript: "+string(newdata.action)+" (1p) at "+string(i)+" in trigger group "+string(j));
  82.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  83.                     break;
  84.                
  85.                 //2 parameters
  86.                 case trigger.unk_0080:
  87.                 case trigger.unk_1b80:
  88.                 case trigger.unk_1e80:
  89.                 case trigger.unk_0280:
  90.                     show_message("M_LoadScript: "+string(newdata.action)+" (2p) at "+string(i)+" in trigger group "+string(j));
  91.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  92.                     newdata.parameters[1] = buffer_read(global.shadowlib,buffer_u32);
  93.                     break;
  94.                
  95.                 //4 parameters
  96.                 case trigger.unk_0a80:
  97.                 case trigger.unk_0580:
  98.                 case trigger.unk_0880:
  99.                 case trigger.unk_0980:
  100.                 case trigger.teleport:
  101.                     show_message("M_LoadScript: "+string(newdata.action)+" (4p) at "+string(i)+" in trigger group "+string(j));
  102.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  103.                     newdata.parameters[1] = buffer_read(global.shadowlib,buffer_u32);
  104.                     newdata.parameters[2] = buffer_read(global.shadowlib,buffer_u32);
  105.                     newdata.parameters[3] = buffer_read(global.shadowlib,buffer_u32);
  106.                     break;
  107.  
  108.                 //5 parameters
  109.                 case trigger.unk_2380:
  110.                     show_message("M_LoadScript: "+string(newdata.action)+" (5p) at "+string(i)+" in trigger group "+string(j));
  111.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  112.                     newdata.parameters[1] = buffer_read(global.shadowlib,buffer_u32);
  113.                     newdata.parameters[2] = buffer_read(global.shadowlib,buffer_u32);
  114.                     newdata.parameters[3] = buffer_read(global.shadowlib,buffer_u32);
  115.                     newdata.parameters[4] = buffer_read(global.shadowlib,buffer_u32);
  116.                     break;
  117.  
  118.                 //8 parameters
  119.                 case trigger.unk_1480:
  120.                     show_message("M_LoadScript: "+string(newdata.action)+" (8p) at "+string(i)+" in trigger group "+string(j));
  121.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  122.                     newdata.parameters[1] = buffer_read(global.shadowlib,buffer_u32);
  123.                     newdata.parameters[2] = buffer_read(global.shadowlib,buffer_u32);
  124.                     newdata.parameters[3] = buffer_read(global.shadowlib,buffer_u32);
  125.                     newdata.parameters[4] = buffer_read(global.shadowlib,buffer_u32);
  126.                     newdata.parameters[5] = buffer_read(global.shadowlib,buffer_u32);
  127.                     newdata.parameters[6] = buffer_read(global.shadowlib,buffer_u32);
  128.                     newdata.parameters[7] = buffer_read(global.shadowlib,buffer_u32);
  129.                     break;
  130.                 //14 parameters!!!!!!! WTF!!!
  131.                 case trigger.unk_0800:
  132.                     show_message("M_LoadScript: "+string(newdata.action)+" (14p) short circuit at "+string(i)+" in trigger group "+string(j));
  133.                     newdata.parameters[0] = buffer_read(global.shadowlib,buffer_u32);
  134.                     newdata.parameters[1] = buffer_read(global.shadowlib,buffer_u32);
  135.                     newdata.parameters[2] = buffer_read(global.shadowlib,buffer_u32);
  136.                     newdata.parameters[3] = buffer_read(global.shadowlib,buffer_u32);
  137.                     newdata.parameters[4] = buffer_read(global.shadowlib,buffer_u32);
  138.                     newdata.parameters[5] = buffer_read(global.shadowlib,buffer_u32);
  139.                     newdata.parameters[6] = buffer_read(global.shadowlib,buffer_u32);
  140.                     newdata.parameters[7] = buffer_read(global.shadowlib,buffer_u32);
  141.                     newdata.parameters[8] = buffer_read(global.shadowlib,buffer_u32);
  142.                     newdata.parameters[9] = buffer_read(global.shadowlib,buffer_u32);
  143.                     newdata.parameters[10] = buffer_read(global.shadowlib,buffer_u32);
  144.                     newdata.parameters[11] = buffer_read(global.shadowlib,buffer_u32);
  145.                     newdata.parameters[12] = buffer_read(global.shadowlib,buffer_u32);
  146.                     newdata.parameters[13] = buffer_read(global.shadowlib,buffer_u32);
  147.                     break;
  148.             }
  149.            
  150.             prev = newdata;
  151.         }
  152.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement