⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_func.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 4 页
字号:
  sector = &sectors[secnum];  if(t_argc > 1)    {      int i = -1;      int picnum = R_FlatNumForName(t_argv[1].value.s);      // set all sectors with tag      while ((i = P_FindSectorFromTag(tagnum, i)) >= 0)        {          sectors[i].floorpic = picnum;        }    }  t_return.type = svt_string;  t_return.value.s = P_FlatNameForNum(sectors[secnum].floorpic);}void SF_SectorColormap(){  int tagnum, secnum;  sector_t *sector;  if(!t_argc)    { script_error("insufficient arguments to function\n"); return; }  tagnum = intvalue(t_argv[0]);  // argv is sector tag  secnum = P_FindSectorFromTag(tagnum, -1);  if(secnum < 0)    { script_error("sector not found with tagnum %i\n", tagnum); return;}  sector = &sectors[secnum];  if(t_argc > 1)    {      int i = -1;      int mapnum = R_ColormapNumForName(t_argv[1].value.s);      // set all sectors with tag      while ((i = P_FindSectorFromTag(tagnum, i)) >= 0)        {          if(mapnum == -1)            {              sectors[i].midmap = 0;              sectors[i].altheightsec = 0;              sectors[i].heightsec = 0;            }          else            {              sectors[i].midmap = mapnum;              sectors[i].altheightsec = 2;              sectors[i].heightsec = 0;            }        }    }  t_return.type = svt_string;  t_return.value.s = R_ColormapNameForNum(sector->midmap);}void SF_CeilingTexture(){  int tagnum, secnum;  sector_t *sector;  if(!t_argc)    { script_error("insufficient arguments to function\n"); return; }  tagnum = intvalue(t_argv[0]);  // argv is sector tag  secnum = P_FindSectorFromTag(tagnum, -1);  if(secnum < 0)    { script_error("sector not found with tagnum %i\n", tagnum); return;}  sector = &sectors[secnum];  if(t_argc > 1)    {      int i = -1;      int picnum = R_FlatNumForName(t_argv[1].value.s);      // set all sectors with tag      while ((i = P_FindSectorFromTag(tagnum, i)) >= 0)        {          sectors[i].ceilingpic = picnum;        }    }  t_return.type = svt_string;  t_return.value.s = P_FlatNameForNum(sectors[secnum].ceilingpic);}void SF_ChangeHubLevel(){/*  int tagnum;  if(!t_argc)    {      script_error("hub level to go to not specified!\n");      return;    }  if(t_argv[0].type != svt_string)    {      script_error("level argument is not a string!\n");      return;    }  // second argument is tag num for 'seamless' travel  if(t_argc > 1)    tagnum = intvalue(t_argv[1]);  else    tagnum = -1;  P_SavePlayerPosition(current_script->trigger->player, tagnum);  P_ChangeHubLevel(t_argv[0].value.s);*/}// for start map: start new game on a particular skillvoid SF_StartSkill(){  int skill;  if(t_argc < 1)    { script_error("need skill level to start on\n"); return;}  // -1: 1-5 is how we normally see skills  // 0-4 is how doom sees them  skill = intvalue(t_argv[0]) - 1;  G_DeferedInitNew(skill, G_BuildMapName(1,1), false);}////////////////////////////////////////////////////////////////////////////// Doors//// opendoor(sectag, [delay], [speed])void SF_OpenDoor(){  int speed, wait_time;  int sectag;  if(t_argc < 1)    {      script_error("need sector tag for door to open\n");      return;    }  // got sector tag  sectag = intvalue(t_argv[0]);  // door wait time  if(t_argc > 1)    // door wait time    wait_time = (intvalue(t_argv[1]) * 35) / 100;  else    wait_time = 0;  // 0= stay open  // door speed  if(t_argc > 2)    speed = intvalue(t_argv[2]);  else    speed = 1;    // 1= normal speed  EV_OpenDoor(sectag, speed, wait_time);}void SF_CloseDoor(){  int speed;  int sectag;  if(t_argc < 1)    {      script_error("need sector tag for door to open\n");      return;    }  // got sector tag  sectag = intvalue(t_argv[0]);  // door speed  if(t_argc > 1)    speed = intvalue(t_argv[1]);  else    speed = 1;    // 1= normal speed  EV_CloseDoor(sectag, speed);}// run console cmdvoid SF_RunCommand(){  int     i;  char    *tempstr;  int     strsize = 0;  for(i = 0; i < t_argc; i++)    strsize += strlen(stringvalue(t_argv[i]));  tempstr = Z_Malloc(strsize + 1, PU_STATIC, 0);  tempstr[0] = '\0';  for(i=0; i<t_argc; i++)    sprintf(tempstr,"%s%s", tempstr, stringvalue(t_argv[i]));  COM_BufAddText(tempstr);  Z_Free(tempstr);}// any linedef typevoid SF_LineTrigger(){  line_t junk;  if(!t_argc)    {      script_error("need line trigger type\n");      return;    }  junk.special = intvalue(t_argv[0]);  junk.tag = t_argc < 2 ? 0 : intvalue(t_argv[1]);  P_UseSpecialLine(t_trigger, &junk, 0);    // Try using it  P_ActivateCrossedLine(&junk, 0, t_trigger);   // Try crossing it}void SF_LineFlag(){  line_t*  line;  int      linenum;  int      flagnum;  if(t_argc < 2)  {    script_error("LineFlag: missing parameters\n");    return;  }  linenum = intvalue(t_argv[0]);  if(linenum < 0 || linenum > numlines)  {    script_error("LineFlag: Invalid line number.\n");    return;  }  line = lines + linenum;  flagnum = intvalue(t_argv[1]);  if(flagnum < 0 || flagnum > 32)  {    script_error("LineFlag: Invalid flag number.\n");    return;  }  if(t_argc > 2)  {    line->flags &= ~(1 << flagnum);    if(intvalue(t_argv[2]))      line->flags |= (1 << flagnum);  }  t_return.type = svt_int;  t_return.value.i = line->flags & (1 << flagnum);}void SF_ChangeMusic(){  if(!t_argc)    {      script_error("need new music name\n");      return;    }  if(t_argv[0].type != svt_string)    { script_error("incorrect argument to function\n"); return;}  S_ChangeMusicName(t_argv[0].value.s, 1);}// SoM: Max and Min math functions.void SF_Max(){  fixed_t   n1, n2;  if(t_argc != 2)  {    script_error("invalid number of arguments\n");    return;  }  n1 = fixedvalue(t_argv[0]);  n2 = fixedvalue(t_argv[1]);  t_return.type = svt_fixed;  t_return.value.f = n1 > n2 ? n1 : n2;}void SF_Min(){  fixed_t   n1, n2;  if(t_argc != 2)  {    script_error("invalid number of arguments\n");    return;  }  n1 = fixedvalue(t_argv[0]);  n2 = fixedvalue(t_argv[1]);  t_return.type = svt_fixed;  t_return.value.f = n1 < n2 ? n1 : n2;}void SF_Abs(){  fixed_t   n1;  if(t_argc != 1)  {    script_error("invalid number of arguments\n");    return;  }  n1 = fixedvalue(t_argv[0]);  t_return.type = svt_fixed;  t_return.value.f = n1 < 0 ? n1 * -1 : n1;}//////////////////////////////////////////////////////////////////////////// FraggleScript HUD graphics//////////////////////////////////////////////////////////////////////////int  HU_GetFSPic(int lumpnum, int xpos, int ypos);int  HU_DeleteFSPic(int handle);int  HU_ModifyFSPic(int handle, int lumpnum, int xpos, int ypos);int  HU_FSDisplay(int handle, boolean newval);void SF_NewHUPic(){  if(t_argc != 3)  {    script_error("newhupic: invalid number of arguments\n");    return;  }  t_return.type = svt_int;  t_return.value.i = HU_GetFSPic(W_GetNumForName(stringvalue(t_argv[0])), intvalue(t_argv[1]), intvalue(t_argv[2]));  return;}void SF_DeleteHUPic(){  if(t_argc != 1)  {    script_error("deletehupic: Invalid number if arguments\n");    return;  }  if(HU_DeleteFSPic(intvalue(t_argv[0])) == -1)    script_error("deletehupic: Invalid sfpic handle: %i\n", intvalue(t_argv[0]));  return;}void SF_ModifyHUPic(){  if(t_argc != 4)  {    script_error("modifyhupic: invalid number of arguments\n");    return;  }  if(HU_ModifyFSPic(intvalue(t_argv[0]), W_GetNumForName(stringvalue(t_argv[1])), intvalue(t_argv[2]), intvalue(t_argv[3])) == -1)    script_error("modifyhypic: invalid sfpic handle %i\n", intvalue(t_argv[0]));  return;}void SF_SetHUPicDisplay(){  if(t_argc != 2)  {    script_error("sethupicdisplay: invalud number of arguments\n");    return;  }  if(HU_FSDisplay(intvalue(t_argv[0]), intvalue(t_argv[1]) > 0 ? 1 : 0) == -1)    script_error("sethupicdisplay: invalid pic handle %i\n", intvalue(t_argv[0]));}////////////////////////////////////////////////////////////////////////////// Init Functions////extern int fov; // r_main.cint fov;void init_functions(){  // add all the functions  add_game_int("consoleplayer", &consoleplayer);  add_game_int("displayplayer", &displayplayer);  add_game_int("fov", &fov);  add_game_int("zoom", &fov); //SoM: BAKWARDS COMPATABILITY!  add_game_mobj("trigger", &trigger_obj);  // important C-emulating stuff  new_function("break", SF_Break);  new_function("continue", SF_Continue);  new_function("return", SF_Return);  new_function("goto", SF_Goto);  new_function("include", SF_Include);  // standard FraggleScript functions  new_function("print", SF_Print);  new_function("rnd", SF_Rnd);  new_function("input", SF_Input);  new_function("beep", SF_Beep);  new_function("clock", SF_Clock);  new_function("wait", SF_Wait);  new_function("tagwait", SF_TagWait);  new_function("scriptwait", SF_ScriptWait);  new_function("startscript", SF_StartScript);  new_function("scriptrunning", SF_ScriptRunning);  // doom stuff  new_function("startskill", SF_StartSkill);  new_function("exitlevel", SF_ExitLevel);  new_function("tip", SF_Tip);  new_function("timedtip", SF_TimedTip);  new_function("message", SF_Message);  // player stuff  new_function("playermsg", SF_PlayerMsg);  new_function("playertip", SF_PlayerTip);  new_function("playeringame", SF_PlayerInGame);  new_function("playername", SF_PlayerName);  new_function("playerobj", SF_PlayerObj);  new_function("isobjplayer", SF_MobjIsPlayer);  new_function("playerkeys", SF_PlayerKeys);  new_function("playerammo", SF_PlayerAmmo);  new_function("maxplayerammo", SF_MaxPlayerAmmo);  // mobj stuff  new_function("spawn", SF_Spawn);  new_function("spawnexplosion", SF_SpawnExplosion);  new_function("kill", SF_KillObj);  new_function("removeobj", SF_RemoveObj);  new_function("objx", SF_ObjX);  new_function("objy", SF_ObjY);  new_function("objz", SF_ObjZ);  new_function("teleport", SF_Teleport);  new_function("silentteleport", SF_SilentTeleport);  new_function("damageobj", SF_DamageObj);  new_function("player", SF_Player);  new_function("objsector", SF_ObjSector);  new_function("objflag", SF_ObjFlag);  new_function("pushobj", SF_PushThing);  new_function("objangle", SF_ObjAngle);  new_function("objhealth", SF_ObjHealth);  new_function("objdead", SF_ObjDead);  new_function("objreactiontime", SF_ReactionTime);  new_function("objtarget", SF_MobjTarget);  new_function("objmomx", SF_MobjMomx);  new_function("objmomy", SF_MobjMomy);  new_function("objmomz", SF_MobjMomz);  // sector stuff  new_function("floorheight", SF_FloorHeight);  new_function("floortext", SF_FloorTexture);  new_function("movefloor", SF_MoveFloor);  new_function("ceilheight", SF_CeilingHeight);  new_function("moveceil", SF_MoveCeiling);  new_function("ceiltext", SF_CeilingTexture);  new_function("lightlevel", SF_LightLevel);  new_function("fadelight", SF_FadeLight);  new_function("colormap", SF_SectorColormap);  // cameras!  new_function("setcamera", SF_SetCamera);  new_function("clearcamera", SF_ClearCamera);  new_function("movecamera", SF_MoveCamera);  // trig functions  new_function("pointtoangle", SF_PointToAngle);  new_function("pointtodist", SF_PointToDist);  // sound functions  new_function("startsound", SF_StartSound);  new_function("startsectorsound", SF_StartSectorSound);  new_function("startambiantsound", SF_AmbiantSound);  new_function("changemusic", SF_ChangeMusic);  // hubs!  new_function("changehublevel", SF_ChangeHubLevel);  // doors  new_function("opendoor", SF_OpenDoor);  new_function("closedoor", SF_CloseDoor);  new_function("runcommand", SF_RunCommand);  new_function("linetrigger", SF_LineTrigger);  new_function("lineflag", SF_LineFlag);  new_function("max", SF_Max);  new_function("min", SF_Min);  new_function("abs", SF_Abs);  // HU Graphics  new_function("newhupic", SF_NewHUPic);  new_function("deletehupic", SF_DeleteHUPic);  new_function("modifyhupic", SF_ModifyHUPic);  new_function("sethupicdisplay", SF_SetHUPicDisplay);}//---------------------------------------------------------------------------//// $Log: t_func.c,v $// Revision 1.6  2001/04/30 17:19:24  stroggonmeth// HW fix and misc. changes//// Revision 1.5  2001/03/21 18:24:56  stroggonmeth// Misc changes and fixes. Code cleanup//// Revision 1.4  2001/03/13 22:14:20  stroggonmeth// Long time no commit. 3D floors, FraggleScript, portals, ect.//// Revision 1.3  2000/11/09 17:56:20  stroggonmeth// Hopefully fixed a few bugs and did a few optimizations.//// Revision 1.2  2000/11/04 16:23:44  bpereira// no message//// Revision 1.1  2000/11/02 17:57:28  stroggonmeth// FraggleScript files...//// Revision 1.1.1.1  2000/04/30 19:12:08  fraggle// initial import//////---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -