📄 t_func.c
字号:
sector = §ors[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 = §ors[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 = §ors[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 + -