Advertisement
Guest User

Windowcaster: M_LoadDoors(lumpname)

a guest
Oct 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///M_LoadDoors(filename);
  2. // loads doors from a filename.
  3. {
  4.     var filename = argument0;
  5.     var firstwall = CA_CheckNumForNameDat("startwalls")+1;
  6.  
  7.     //door properties
  8.     var garbage;        //always junk-filled
  9.     var cx=0;
  10.     var cy=0;         //cell coords
  11.     var facing;
  12.     var gname=0;
  13.     var flags;
  14.    
  15.     //temp variables
  16.     var rx, ry;
  17.     var num, tmp;
  18.     var numdoors;
  19.     var tmpobj;
  20.     var i=0;
  21.     var iofs=0;
  22.     var hackofs = 0;
  23.     var glump=0;        //the graphic's lumpnum
  24.     var tid=0;          //the final texture id
  25.     var tstr="";        //final texture string, use this as reference in ds_map
  26.     var ostr="";        //intermediary string to pass into tstr
  27.  
  28.     num = CA_CheckNumForName(filename);
  29.     tmp = global.shadowlib_info[num];
  30.     numdoors = tmp.size / 52;
  31.    
  32.     buffer_seek(global.shadowlib, buffer_seek_start, tmp.offset);
  33.    
  34.     //this loop contains hacks to get around data i have not figured out yet
  35.     for(i = 0;i < numdoors; i++) {
  36.         iofs = (i * 52) + tmp.offset;
  37.         buffer_seek(global.shadowlib, buffer_seek_start, iofs);
  38.        
  39.         //garbage reads
  40.         garbage = buffer_read(global.shadowlib,buffer_u32);
  41.         garbage = buffer_read(global.shadowlib,buffer_u32);
  42.         garbage = buffer_read(global.shadowlib,buffer_u32);
  43.        
  44.         //direction
  45.         facing = buffer_read(global.shadowlib,buffer_u8);
  46.        
  47.         //gfx name and texture id reference
  48.         gname = buffer_read(global.shadowlib,buffer_string);
  49.         if(gname == "door1") gname = "firstdoor";               //necessary hack :(
  50.        
  51.         glump = CA_CheckNumForNameDat(gname)+1;
  52.         tid = glump - firstwall;
  53.         ostr = "wall"+string(tid);
  54.        
  55.         if(ds_map_exists(global.TextureReference,ostr)) {
  56.             tstr = ds_map_find_value(global.TextureReference,ostr);
  57.         }
  58.         else {
  59.             tstr = BADFLAT;
  60.         }
  61.        
  62.         //go to next value, skipping the remainder of the string field -- HACK!
  63.         hackofs = iofs + 40;
  64.         buffer_seek(global.shadowlib, buffer_seek_start, hackofs);
  65.        
  66.         cx = buffer_read(global.shadowlib, buffer_u8);
  67.         garbage = buffer_read(global.shadowlib, buffer_u8);
  68.         garbage = buffer_read(global.shadowlib, buffer_u8);
  69.         garbage = buffer_read(global.shadowlib, buffer_u8);
  70.  
  71.         cy = buffer_read(global.shadowlib, buffer_u8);
  72.         garbage = buffer_read(global.shadowlib, buffer_u8);
  73.         garbage = buffer_read(global.shadowlib, buffer_u8);
  74.         garbage = buffer_read(global.shadowlib, buffer_u8);
  75.        
  76.         rx = (cx * 64) + 64;    //fudged for collision
  77.         ry = (cy * 64) + 64;    //reverse the subtractions below to revert behavior
  78.        
  79.         flags = buffer_read(global.shadowlib, buffer_u32);
  80.        
  81.         tmpobj = instance_create(rx,ry,door_primitive);
  82.        
  83.         tmpobj.texture = tstr;
  84.         tmpobj.tz = background_get_height(tstr);
  85.         tmpobj.doorstate = 0;
  86.         tmpobj.doorlen = 0;
  87.         tmpobj.collision = 1;
  88.         tmpobj.height = 65536;
  89.        
  90.         //door is vert?
  91.         if(facing) {
  92.             tmpobj.y -= 32;
  93.             tmpobj.x1 = tmpobj.x - 64;
  94.             tmpobj.x2 = tmpobj.x;
  95.             tmpobj.y1 = tmpobj.y;
  96.             tmpobj.y2 = tmpobj.y;
  97.             tmpobj.mask_index = horiz_mask;
  98.             tmpobj.doordir = 2;
  99.         }
  100.        
  101.         //door is horz?
  102.         else if(!facing) {
  103.             tmpobj.x -= 32;
  104.             tmpobj.x1 = tmpobj.x;
  105.             tmpobj.x2 = tmpobj.x;
  106.             tmpobj.y1 = tmpobj.y - 64;
  107.             tmpobj.y2 = tmpobj.y;
  108.             tmpobj.mask_index = vert_mask;
  109.             tmpobj.doordir = 1;
  110.         }
  111.        
  112.     }
  113.    
  114.     //debug
  115.     //global.systemmsg = "M_loaddoors: "+gname+"?";
  116.    
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement