mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-25 05:41:42 +00:00
Merge branch 'udmf-lighting' into udmf-linedef-executors
# Conflicts: # src/p_spec.c
This commit is contained in:
commit
863b1e125a
239 changed files with 2050 additions and 1315 deletions
|
@ -1,4 +1,4 @@
|
||||||
version: 2.2.9.{branch}-{build}
|
version: 2.2.10.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -22,8 +22,7 @@ set(SRB2_ASSET_INSTALL ON
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSET_HASHED
|
||||||
"srb2.pk3;\
|
"srb2.pk3;\
|
||||||
player.dta;\
|
player.dta;\
|
||||||
zones.pk3;\
|
zones.pk3"
|
||||||
patch.pk3"
|
|
||||||
CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
|
CACHE STRING "Asset filenames to apply MD5 checks. No spaces between entries!"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,21 @@
|
||||||
SONIC ROBO BLAST 2
|
SONIC ROBO BLAST 2
|
||||||
|
|
||||||
Sonic Robo Blast 2 (SRB2) is a 3D Sonic the Hedgehog fangame based on a
|
Sonic Robo Blast 2 (SRB2) is a 3D Sonic the Hedgehog fangame, based on a modified version of Doom Legacy.
|
||||||
modified version of Doom Legacy.
|
|
||||||
|
https://www.srb2.org
|
||||||
|
|
||||||
LICENSE
|
LICENSE
|
||||||
|
|
||||||
The source code for SRB2 is licensed under the GNU General Public
|
The source code for SRB2 is licensed under the GNU General Public License, Version 2. See LICENSE.txt for the full text of this license.
|
||||||
License, Version 2. See LICENSE.txt for the full text of this license.
|
|
||||||
|
|
||||||
SRB2 uses various third-party libraries, including SDL, SDL Mixer, and
|
SRB2 uses various third-party libraries, including SDL, SDL Mixer, and their dependencies. See LICENSE-3RD-PARTY.txt for the licenses of these libraries.
|
||||||
their dependencies. See LICENSE-3RD-PARTY.txt for the licenses of these
|
|
||||||
libraries.
|
|
||||||
|
|
||||||
SOURCE CODE
|
SOURCE CODE
|
||||||
|
|
||||||
You may obtain the source code for SRB2, including the source code for
|
You may obtain the source code for SRB2, including the source code for specific version releases, at the following web sites:
|
||||||
specific version releases, at the following web sites:
|
|
||||||
|
|
||||||
STJr GitLab:
|
STJr GitLab:
|
||||||
https://git.magicalgirl.moe/STJr/SRB2
|
https://git.do.srb2.org/STJr/SRB2
|
||||||
|
|
||||||
GitHub:
|
GitHub:
|
||||||
https://github.com/STJr/SRB2
|
https://github.com/STJr/SRB2
|
||||||
|
@ -27,25 +24,27 @@ CONTACT
|
||||||
|
|
||||||
You may contact Sonic Team Junior via the following web sites:
|
You may contact Sonic Team Junior via the following web sites:
|
||||||
|
|
||||||
SRB2.ORG:
|
|
||||||
https://www.srb2.org
|
|
||||||
|
|
||||||
SRB2 Message Board:
|
SRB2 Message Board:
|
||||||
https://mb.srb2.org
|
https://mb.srb2.org
|
||||||
|
|
||||||
SRB2 Official Discord:
|
SRB2 Official Discord:
|
||||||
https://discord.gg/pYDXzpX (13+)
|
https://discord.gg/b3BGb8A
|
||||||
|
|
||||||
|
Twitter:
|
||||||
|
https://twitter.com/SonicTeamJr
|
||||||
|
|
||||||
|
Facebook:
|
||||||
|
https://facebook.com/SonicRoboBlast2
|
||||||
|
|
||||||
|
|
||||||
COPYRIGHT AND DISCLAIMER
|
COPYRIGHT AND DISCLAIMER
|
||||||
|
|
||||||
Design and content on SRB2 is copyright 1998-2019 by Sonic Team Junior.
|
Design and content in Sonic Robo Blast 2 is copyright 1998-2022 by Sonic Team Jr.
|
||||||
All non-original material on SRB2.ORG is copyrighted by their
|
|
||||||
respective owners, and no copyright infringement is intended. The owner
|
|
||||||
of the SRB2.ORG domain is only acting as an ISP, and is therefore not
|
|
||||||
responsible for any content on SRB2.ORG under the 1998 DMCA. This
|
|
||||||
site, its webmaster, and its staff make no profit whatsoever (in fact,
|
|
||||||
we lose money). Sonic Team Junior assumes no responsibility for the
|
|
||||||
content on any Sonic Team Junior fan sites.
|
|
||||||
|
|
||||||
Sonic Team Junior is in no way affiliated with SEGA or Sonic Team. We do
|
All original material in this game is copyrighted by their respective owners, and no copyright infringement is intended. Sonic Team Jr. is in no way affiliated with SEGA or Sonic Team, and we do not claim ownership of any of SEGA's intellectual property used in SRB2.
|
||||||
not claim ownership of any of SEGA's intellectual property used in SRB2.
|
|
||||||
|
Sonic Robo Blast 2 is not commercial software. If you purchased this game, you have been scammed! Sonic Team Jr.'s staff makes no profit whatsoever (in fact, we lose money).
|
||||||
|
|
||||||
|
The owner of the srb2.org domain is only acting as an ISP, and is therefore not responsible for any content on srb2.org under the 1998 DMCA. Sonic Team Jr. assumes no responsibility for the content on any Sonic Team Jr. fan sites.
|
||||||
|
|
||||||
|
This software is provided as-is with no warranty whatsoever.
|
||||||
|
|
|
@ -4063,16 +4063,16 @@ thingtypes
|
||||||
{
|
{
|
||||||
title = "Egg Mobile";
|
title = "Egg Mobile";
|
||||||
sprite = "EGGMA1";
|
sprite = "EGGMA1";
|
||||||
width = 24;
|
width = 36;
|
||||||
height = 76;
|
height = 84;
|
||||||
flags4text = "[4] End level on death";
|
flags4text = "[4] End level on death";
|
||||||
}
|
}
|
||||||
201
|
201
|
||||||
{
|
{
|
||||||
title = "Egg Slimer";
|
title = "Egg Slimer";
|
||||||
sprite = "EGGNA1";
|
sprite = "EGGNA1";
|
||||||
width = 24;
|
width = 36;
|
||||||
height = 76;
|
height = 84;
|
||||||
flags4text = "[4] End level on death";
|
flags4text = "[4] End level on death";
|
||||||
flags8text = "[8] Speed up when hit";
|
flags8text = "[8] Speed up when hit";
|
||||||
}
|
}
|
||||||
|
@ -4080,7 +4080,7 @@ thingtypes
|
||||||
{
|
{
|
||||||
title = "Sea Egg";
|
title = "Sea Egg";
|
||||||
sprite = "EGGOA1";
|
sprite = "EGGOA1";
|
||||||
width = 32;
|
width = 36;
|
||||||
height = 116;
|
height = 116;
|
||||||
flags4text = "[4] End level on death";
|
flags4text = "[4] End level on death";
|
||||||
}
|
}
|
||||||
|
@ -4088,8 +4088,8 @@ thingtypes
|
||||||
{
|
{
|
||||||
title = "Egg Colosseum";
|
title = "Egg Colosseum";
|
||||||
sprite = "EGGPA1";
|
sprite = "EGGPA1";
|
||||||
width = 24;
|
width = 36;
|
||||||
height = 76;
|
height = 84;
|
||||||
flags4text = "[4] End level on death";
|
flags4text = "[4] End level on death";
|
||||||
}
|
}
|
||||||
204
|
204
|
||||||
|
@ -6324,10 +6324,10 @@ thingtypes
|
||||||
}
|
}
|
||||||
1602
|
1602
|
||||||
{
|
{
|
||||||
title = "Pian";
|
title = "Nightopian";
|
||||||
sprite = "NTPNALAR";
|
sprite = "NTPNA1";
|
||||||
width = 16;
|
width = 16;
|
||||||
height = 32;
|
height = 40;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6906,6 +6906,20 @@ thingtypes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tutorial
|
||||||
|
{
|
||||||
|
color = 10; // Green
|
||||||
|
title = "Tutorial";
|
||||||
|
|
||||||
|
799
|
||||||
|
{
|
||||||
|
title = "Tutorial Plant";
|
||||||
|
sprite = "TUPFH0";
|
||||||
|
width = 40;
|
||||||
|
height = 144;
|
||||||
|
parametertext = "Start frame";
|
||||||
|
}
|
||||||
|
|
||||||
flickies
|
flickies
|
||||||
{
|
{
|
||||||
color = 10; // Green
|
color = 10; // Green
|
||||||
|
|
|
@ -2528,10 +2528,10 @@ dreamhill
|
||||||
}
|
}
|
||||||
1602
|
1602
|
||||||
{
|
{
|
||||||
title = "Pian";
|
title = "Nightopian";
|
||||||
sprite = "NTPNALAR";
|
sprite = "NTPNA1";
|
||||||
width = 16;
|
width = 16;
|
||||||
height = 32;
|
height = 40;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# the poly3 Makefile adapted over and over...
|
# the poly3 Makefile adapted over and over...
|
||||||
#
|
#
|
||||||
# Copyright 1998-2000 DooM Legacy Team.
|
# Copyright 1998-2000 DooM Legacy Team.
|
||||||
# Copyright 2020-2021 James R.
|
# Copyright 2020-2022 James R.
|
||||||
# Copyright 2003-2021 Sonic Team Junior.
|
# Copyright 2003-2022 Sonic Team Junior.
|
||||||
#
|
#
|
||||||
# This program is free software distributed under the
|
# This program is free software distributed under the
|
||||||
# terms of the GNU General Public License, version 2.
|
# terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -39,7 +39,7 @@ $(eval $(call Configure,PNG,$(PNG_CONFIG) \
|
||||||
$(if $(PNG_STATIC),--static),,--ldflags))
|
$(if $(PNG_STATIC),--static),,--ldflags))
|
||||||
endif
|
endif
|
||||||
ifdef LINUX
|
ifdef LINUX
|
||||||
opts+=-D_LARGFILE64_SOURCE
|
opts+=-D_LARGEFILE64_SOURCE
|
||||||
endif
|
endif
|
||||||
opts+=-DHAVE_PNG
|
opts+=-DHAVE_PNG
|
||||||
sources+=apng.c
|
sources+=apng.c
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019-2021, James R.
|
Copyright 2019-2022, James R.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019-2021, James R.
|
Copyright 2019-2022, James R.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
62
src/b_bot.c
62
src/b_bot.c
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2011-2021 by Sonic Team Junior.
|
// Copyright (C) 2011-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -17,6 +17,7 @@
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
#include "b_bot.h"
|
#include "b_bot.h"
|
||||||
#include "lua_hook.h"
|
#include "lua_hook.h"
|
||||||
|
#include "i_system.h" // I_BaseTiccmd
|
||||||
|
|
||||||
void B_UpdateBotleader(player_t *player)
|
void B_UpdateBotleader(player_t *player)
|
||||||
{
|
{
|
||||||
|
@ -132,17 +133,17 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
// Update catchup_tics
|
// Update catchup_tics
|
||||||
if (mem->thinkstate == AI_SPINFOLLOW)
|
if (mem->thinkstate == AI_SPINFOLLOW)
|
||||||
{
|
{
|
||||||
mem-> catchup_tics = 0;
|
mem->catchup_tics = 0;
|
||||||
}
|
}
|
||||||
else if (dist > followmax || zdist > comfortheight || stalled)
|
else if (dist > followmax || zdist > comfortheight || stalled)
|
||||||
{
|
{
|
||||||
mem-> catchup_tics = min(mem-> catchup_tics + 2, 70);
|
mem->catchup_tics = min(mem->catchup_tics + 2, 70);
|
||||||
if (mem-> catchup_tics >= 70)
|
if (mem->catchup_tics >= 70)
|
||||||
mem->thinkstate = AI_CATCHUP;
|
mem->thinkstate = AI_CATCHUP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mem-> catchup_tics = max(mem-> catchup_tics - 1, 0);
|
mem->catchup_tics = max(mem->catchup_tics - 1, 0);
|
||||||
if (mem->thinkstate == AI_CATCHUP)
|
if (mem->thinkstate == AI_CATCHUP)
|
||||||
mem->thinkstate = AI_FOLLOW;
|
mem->thinkstate = AI_FOLLOW;
|
||||||
}
|
}
|
||||||
|
@ -317,7 +318,6 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
// Copy inputs
|
// Copy inputs
|
||||||
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
cmd->angleturn = (sonic->angle) >> 16; // NOT FRACBITS DAMNIT
|
||||||
bot->drawangle = ang;
|
|
||||||
cmd->forwardmove = 8 * pcmd->forwardmove / 10;
|
cmd->forwardmove = 8 * pcmd->forwardmove / 10;
|
||||||
cmd->sidemove = 8 * pcmd->sidemove / 10;
|
cmd->sidemove = 8 * pcmd->sidemove / 10;
|
||||||
}
|
}
|
||||||
|
@ -344,7 +344,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
else if (!jump_last && !(bot->pflags & PF_JUMPED) //&& !(player->pflags & PF_SPINNING)
|
else if (!jump_last && !(bot->pflags & PF_JUMPED) //&& !(player->pflags & PF_SPINNING)
|
||||||
&& ((zdist > 32*scale && player->pflags & PF_JUMPED) // Following
|
&& ((zdist > 32*scale && player->pflags & PF_JUMPED) // Following
|
||||||
|| (zdist > 64*scale && mem->thinkstate == AI_CATCHUP) // Vertical catch-up
|
|| (zdist > 64*scale && mem->thinkstate == AI_CATCHUP) // Vertical catch-up
|
||||||
|| (stalled && mem-> catchup_tics > 20 && bot->powers[pw_carry] == CR_NONE)
|
|| (stalled && mem->catchup_tics > 20 && bot->powers[pw_carry] == CR_NONE)
|
||||||
//|| (bmom < scale>>3 && dist > followthres && !(bot->powers[pw_carry])) // Stopped & not in carry state
|
//|| (bmom < scale>>3 && dist > followthres && !(bot->powers[pw_carry])) // Stopped & not in carry state
|
||||||
|| (bot->pflags & PF_SPINNING && !(bot->pflags & PF_JUMPED)))) // Spinning
|
|| (bot->pflags & PF_SPINNING && !(bot->pflags & PF_JUMPED)))) // Spinning
|
||||||
jump = true;
|
jump = true;
|
||||||
|
@ -371,6 +371,8 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||||
|
|
||||||
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
|
G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver
|
||||||
|
|
||||||
// Can't build a ticcmd if we aren't spawned...
|
// Can't build a ticcmd if we aren't spawned...
|
||||||
if (!player->mo)
|
if (!player->mo)
|
||||||
return;
|
return;
|
||||||
|
@ -390,7 +392,7 @@ void B_BuildTiccmd(player_t *player, ticcmd_t *cmd)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Make sure we have a valid main character to follow
|
// Make sure we have a valid main character to follow
|
||||||
B_UpdateBotleader(player);
|
B_UpdateBotleader(player);
|
||||||
if (!player->botleader)
|
if (!player->botleader)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -403,7 +405,7 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
|
||||||
{
|
{
|
||||||
player_t *player = mo->player;
|
player_t *player = mo->player;
|
||||||
// don't try to do stuff if your sonic is in a minecart or something
|
// don't try to do stuff if your sonic is in a minecart or something
|
||||||
if (&player->botleader && player->botleader->powers[pw_carry] && player->botleader->powers[pw_carry] != CR_PLAYER)
|
if (player->botleader && player->botleader->powers[pw_carry] && player->botleader->powers[pw_carry] != CR_PLAYER)
|
||||||
return;
|
return;
|
||||||
// Turn the virtual keypresses into ticcmd_t.
|
// Turn the virtual keypresses into ticcmd_t.
|
||||||
if (twodlevel || mo->flags2 & MF2_TWOD) {
|
if (twodlevel || mo->flags2 & MF2_TWOD) {
|
||||||
|
@ -593,25 +595,43 @@ void B_HandleFlightIndicator(player_t *player)
|
||||||
{
|
{
|
||||||
mobj_t *tails = player->mo;
|
mobj_t *tails = player->mo;
|
||||||
botmem_t *mem = &player->botmem;
|
botmem_t *mem = &player->botmem;
|
||||||
|
boolean shouldExist;
|
||||||
|
|
||||||
if (!tails)
|
if (!tails)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mem->thinkstate == AI_THINKFLY && player->bot == BOT_2PAI && tails->health)
|
shouldExist = (mem->thinkstate == AI_THINKFLY) && player->botleader
|
||||||
|
&& player->bot == BOT_2PAI && player->playerstate == PST_LIVE;
|
||||||
|
|
||||||
|
// check whether the indicator doesn't exist
|
||||||
|
if (P_MobjWasRemoved(tails->hnext))
|
||||||
{
|
{
|
||||||
if (!tails->hnext)
|
// if it shouldn't exist, everything is fine
|
||||||
{
|
if (!shouldExist)
|
||||||
P_SetTarget(&tails->hnext, P_SpawnMobjFromMobj(tails, 0, 0, 0, MT_OVERLAY));
|
return;
|
||||||
if (tails->hnext)
|
|
||||||
{
|
// otherwise, spawn it
|
||||||
P_SetTarget(&tails->hnext->target, tails);
|
P_SetTarget(&tails->hnext, P_SpawnMobjFromMobj(tails, 0, 0, 0, MT_OVERLAY));
|
||||||
P_SetTarget(&tails->hnext->hprev, tails);
|
P_SetTarget(&tails->hnext->target, tails);
|
||||||
P_SetMobjState(tails->hnext, S_FLIGHTINDICATOR);
|
P_SetTarget(&tails->hnext->hprev, tails);
|
||||||
}
|
P_SetMobjState(tails->hnext, S_FLIGHTINDICATOR);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (tails->hnext && tails->hnext->type == MT_OVERLAY && tails->hnext->state == states+S_FLIGHTINDICATOR)
|
|
||||||
|
// if the mobj isn't a flight indicator, let's not mess with it
|
||||||
|
if (tails->hnext->type != MT_OVERLAY || (tails->hnext->state != states+S_FLIGHTINDICATOR))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// if it shouldn't exist, remove it
|
||||||
|
if (!shouldExist)
|
||||||
{
|
{
|
||||||
P_RemoveMobj(tails->hnext);
|
P_RemoveMobj(tails->hnext);
|
||||||
P_SetTarget(&tails->hnext, NULL);
|
P_SetTarget(&tails->hnext, NULL);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// otherwise, update its visibility
|
||||||
|
if (P_IsLocalPlayer(player->botleader))
|
||||||
|
tails->hnext->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
tails->hnext->flags2 |= MF2_DONTDRAW;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
// Copyright (C) 2007-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -150,26 +150,78 @@ FUNCINLINE static ATTRINLINE UINT32 readulong(void *ptr)
|
||||||
|
|
||||||
#undef DEALIGNED
|
#undef DEALIGNED
|
||||||
|
|
||||||
#define WRITESTRINGN(p,s,n) do { size_t tmp_i = 0; for (; tmp_i < n && s[tmp_i] != '\0'; tmp_i++) WRITECHAR(p, s[tmp_i]); if (tmp_i < n) WRITECHAR(p, '\0');} while (0)
|
#define WRITESTRINGN(p, s, n) ({ \
|
||||||
#define WRITESTRING(p,s) do { size_t tmp_i = 0; for (; s[tmp_i] != '\0'; tmp_i++) WRITECHAR(p, s[tmp_i]); WRITECHAR(p, '\0');} while (0)
|
size_t tmp_i; \
|
||||||
#define WRITEMEM(p,s,n) do { memcpy(p, s, n); p += n; } while (0)
|
\
|
||||||
|
for (tmp_i = 0; tmp_i < n && s[tmp_i] != '\0'; tmp_i++) \
|
||||||
|
WRITECHAR(p, s[tmp_i]); \
|
||||||
|
\
|
||||||
|
if (tmp_i < n) \
|
||||||
|
WRITECHAR(p, '\0'); \
|
||||||
|
})
|
||||||
|
|
||||||
#define SKIPSTRING(p) while (READCHAR(p) != '\0')
|
#define WRITESTRINGL(p, s, n) ({ \
|
||||||
|
size_t tmp_i; \
|
||||||
|
\
|
||||||
|
for (tmp_i = 0; tmp_i < n - 1 && s[tmp_i] != '\0'; tmp_i++) \
|
||||||
|
WRITECHAR(p, s[tmp_i]); \
|
||||||
|
\
|
||||||
|
WRITECHAR(p, '\0'); \
|
||||||
|
})
|
||||||
|
|
||||||
#define READSTRINGN(p,s,n) ({ size_t tmp_i = 0; for (; tmp_i < n && (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';})
|
#define WRITESTRING(p, s) ({ \
|
||||||
#define READSTRING(p,s) ({ size_t tmp_i = 0; for (; (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';})
|
size_t tmp_i; \
|
||||||
#define READMEM(p,s,n) ({ memcpy(s, p, n); p += n; })
|
\
|
||||||
|
for (tmp_i = 0; s[tmp_i] != '\0'; tmp_i++) \
|
||||||
|
WRITECHAR(p, s[tmp_i]); \
|
||||||
|
\
|
||||||
|
WRITECHAR(p, '\0'); \
|
||||||
|
})
|
||||||
|
|
||||||
#if 0 // old names
|
#define WRITEMEM(p, s, n) ({ \
|
||||||
#define WRITEBYTE(p,b) WRITEUINT8(p,b)
|
memcpy(p, s, n); \
|
||||||
#define WRITESHORT(p,b) WRITEINT16(p,b)
|
p += n; \
|
||||||
#define WRITEUSHORT(p,b) WRITEUINT16(p,b)
|
})
|
||||||
#define WRITELONG(p,b) WRITEINT32(p,b)
|
|
||||||
#define WRITEULONG(p,b) WRITEUINT32(p,b)
|
|
||||||
|
|
||||||
#define READBYTE(p) READUINT8(p)
|
#define SKIPSTRING(p) while (READCHAR(p) != '\0')
|
||||||
#define READSHORT(p) READINT16(p)
|
|
||||||
#define READUSHORT(p) READUINT16(p)
|
#define SKIPSTRINGN(p, n) ({ \
|
||||||
#define READLONG(p) READINT32(p)
|
size_t tmp_i = 0; \
|
||||||
#define READULONG(p) READUINT32(p)
|
\
|
||||||
#endif
|
while (tmp_i < n && READCHAR(p) != '\0') \
|
||||||
|
tmp_i++; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define SKIPSTRINGL(p, n) SKIPSTRINGN(p, n)
|
||||||
|
|
||||||
|
#define READSTRINGN(p, s, n) ({ \
|
||||||
|
size_t tmp_i = 0; \
|
||||||
|
\
|
||||||
|
while (tmp_i < n && (s[tmp_i] = READCHAR(p)) != '\0') \
|
||||||
|
tmp_i++; \
|
||||||
|
\
|
||||||
|
s[tmp_i] = '\0'; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define READSTRINGL(p, s, n) ({ \
|
||||||
|
size_t tmp_i = 0; \
|
||||||
|
\
|
||||||
|
while (tmp_i < n - 1 && (s[tmp_i] = READCHAR(p)) != '\0') \
|
||||||
|
tmp_i++; \
|
||||||
|
\
|
||||||
|
s[tmp_i] = '\0'; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define READSTRING(p, s) ({ \
|
||||||
|
size_t tmp_i = 0; \
|
||||||
|
\
|
||||||
|
while ((s[tmp_i] = READCHAR(p)) != '\0') \
|
||||||
|
tmp_i++; \
|
||||||
|
\
|
||||||
|
s[tmp_i] = '\0'; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define READMEM(p, s, n) ({ \
|
||||||
|
memcpy(s, p, n); \
|
||||||
|
p += n; \
|
||||||
|
})
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -35,10 +35,11 @@
|
||||||
* Last updated 2020 / 09 / 27 - v2.2.7 - patch.pk3
|
* Last updated 2020 / 09 / 27 - v2.2.7 - patch.pk3
|
||||||
* Last updated 2020 / 10 / 02 - v2.2.8 - patch.pk3
|
* Last updated 2020 / 10 / 02 - v2.2.8 - patch.pk3
|
||||||
* Last updated 2021 / 05 / 06 - v2.2.9 - patch.pk3 & zones.pk3
|
* Last updated 2021 / 05 / 06 - v2.2.9 - patch.pk3 & zones.pk3
|
||||||
|
* Last updated 2022 / 03 / 06 - v2.2.10 - main assets
|
||||||
*/
|
*/
|
||||||
#define ASSET_HASH_SRB2_PK3 "0277c9416756627004e83cbb5b2e3e28"
|
#define ASSET_HASH_SRB2_PK3 "ad911f29a28a18968ee5b2d11c2acb39"
|
||||||
#define ASSET_HASH_ZONES_PK3 "f8f3e2b5deacf40f14e36686a07d44bb"
|
#define ASSET_HASH_ZONES_PK3 "86ae55cae4e0a93ceda868635706a093"
|
||||||
#define ASSET_HASH_PLAYER_DTA "49dad7b24634c89728cc3e0b689e12bb"
|
#define ASSET_HASH_PLAYER_DTA "2e7aaae8a6b1b77d90ffe7606ceadb6c"
|
||||||
#ifdef USE_PATCH_DTA
|
#ifdef USE_PATCH_DTA
|
||||||
#define ASSET_HASH_PATCH_PK3 "7d467a883f7887b3c311798ee2f56b6a"
|
#define ASSET_HASH_PATCH_PK3 "7d467a883f7887b3c311798ee2f56b6a"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -2077,6 +2077,7 @@ static boolean CL_FinishedFileList(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NONET
|
||||||
static const char * InvalidServerReason (serverinfo_pak *info)
|
static const char * InvalidServerReason (serverinfo_pak *info)
|
||||||
{
|
{
|
||||||
#define EOT "\nPress ESC\n"
|
#define EOT "\nPress ESC\n"
|
||||||
|
@ -2140,6 +2141,7 @@ static const char * InvalidServerReason (serverinfo_pak *info)
|
||||||
|
|
||||||
#undef EOT
|
#undef EOT
|
||||||
}
|
}
|
||||||
|
#endif // ifndef NONET
|
||||||
|
|
||||||
/** Called by CL_ServerConnectionTicker
|
/** Called by CL_ServerConnectionTicker
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -1102,10 +1102,7 @@ static void IdentifyVersion(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
MUSICTEST("music.dta")
|
MUSICTEST("music.dta")
|
||||||
MUSICTEST("patch_music.pk3")
|
//MUSICTEST("patch_music.pk3")
|
||||||
#ifdef DEVELOP // remove when music_new.dta is merged into music.dta
|
|
||||||
MUSICTEST("music_new.dta")
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1141,7 +1138,7 @@ void D_SRB2Main(void)
|
||||||
// Print GPL notice for our console users (Linux)
|
// Print GPL notice for our console users (Linux)
|
||||||
CONS_Printf(
|
CONS_Printf(
|
||||||
"\n\nSonic Robo Blast 2\n"
|
"\n\nSonic Robo Blast 2\n"
|
||||||
"Copyright (C) 1998-2021 by Sonic Team Junior\n\n"
|
"Copyright (C) 1998-2022 by Sonic Team Junior\n\n"
|
||||||
"This program comes with ABSOLUTELY NO WARRANTY.\n\n"
|
"This program comes with ABSOLUTELY NO WARRANTY.\n\n"
|
||||||
"This is free software, and you are welcome to redistribute it\n"
|
"This is free software, and you are welcome to redistribute it\n"
|
||||||
"and/or modify it under the terms of the GNU General Public License\n"
|
"and/or modify it under the terms of the GNU General Public License\n"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -1144,8 +1144,9 @@ boolean HGetPacket(void)
|
||||||
if (netbuffer->checksum != NetbufferChecksum())
|
if (netbuffer->checksum != NetbufferChecksum())
|
||||||
{
|
{
|
||||||
DEBFILE("Bad packet checksum\n");
|
DEBFILE("Bad packet checksum\n");
|
||||||
//Net_CloseConnection(nodejustjoined ? (doomcom->remotenode | FORCECLOSE) : doomcom->remotenode);
|
// Do not disconnect or anything, just ignore the packet.
|
||||||
Net_CloseConnection(doomcom->remotenode);
|
// Bad checksums with UDP tend to happen very scarcely
|
||||||
|
// so they are not normally an issue.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -91,6 +91,8 @@ actionpointer_t actionpointers[] =
|
||||||
{{A_FaceTracer}, "A_FACETRACER"},
|
{{A_FaceTracer}, "A_FACETRACER"},
|
||||||
{{A_Scream}, "A_SCREAM"},
|
{{A_Scream}, "A_SCREAM"},
|
||||||
{{A_BossDeath}, "A_BOSSDEATH"},
|
{{A_BossDeath}, "A_BOSSDEATH"},
|
||||||
|
{{A_SetShadowScale}, "A_SETSHADOWSCALE"},
|
||||||
|
{{A_ShadowScream}, "A_SHADOWSCREAM"},
|
||||||
{{A_CustomPower}, "A_CUSTOMPOWER"},
|
{{A_CustomPower}, "A_CUSTOMPOWER"},
|
||||||
{{A_GiveWeapon}, "A_GIVEWEAPON"},
|
{{A_GiveWeapon}, "A_GIVEWEAPON"},
|
||||||
{{A_RingBox}, "A_RINGBOX"},
|
{{A_RingBox}, "A_RINGBOX"},
|
||||||
|
@ -224,6 +226,8 @@ actionpointer_t actionpointers[] =
|
||||||
{{A_SetObjectFlags2}, "A_SETOBJECTFLAGS2"},
|
{{A_SetObjectFlags2}, "A_SETOBJECTFLAGS2"},
|
||||||
{{A_RandomState}, "A_RANDOMSTATE"},
|
{{A_RandomState}, "A_RANDOMSTATE"},
|
||||||
{{A_RandomStateRange}, "A_RANDOMSTATERANGE"},
|
{{A_RandomStateRange}, "A_RANDOMSTATERANGE"},
|
||||||
|
{{A_StateRangeByAngle}, "A_STATERANGEBYANGLE"},
|
||||||
|
{{A_StateRangeByParameter}, "A_STATERANGEBYPARAMETER"},
|
||||||
{{A_DualAction}, "A_DUALACTION"},
|
{{A_DualAction}, "A_DUALACTION"},
|
||||||
{{A_RemoteAction}, "A_REMOTEACTION"},
|
{{A_RemoteAction}, "A_REMOTEACTION"},
|
||||||
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
|
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
|
||||||
|
@ -1751,6 +1755,56 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
// The letter
|
// The letter
|
||||||
"S_LETTER",
|
"S_LETTER",
|
||||||
|
|
||||||
|
// Tutorial Scenery
|
||||||
|
"S_TUTORIALLEAF1",
|
||||||
|
"S_TUTORIALLEAF2",
|
||||||
|
"S_TUTORIALLEAF3",
|
||||||
|
"S_TUTORIALLEAF4",
|
||||||
|
"S_TUTORIALLEAF5",
|
||||||
|
"S_TUTORIALLEAF6",
|
||||||
|
"S_TUTORIALLEAF7",
|
||||||
|
"S_TUTORIALLEAF8",
|
||||||
|
"S_TUTORIALLEAF9",
|
||||||
|
"S_TUTORIALLEAF10",
|
||||||
|
"S_TUTORIALLEAF11",
|
||||||
|
"S_TUTORIALLEAF12",
|
||||||
|
"S_TUTORIALLEAF13",
|
||||||
|
"S_TUTORIALLEAF14",
|
||||||
|
"S_TUTORIALLEAF15",
|
||||||
|
"S_TUTORIALLEAF16",
|
||||||
|
"S_TUTORIALFLOWER1",
|
||||||
|
"S_TUTORIALFLOWER2",
|
||||||
|
"S_TUTORIALFLOWER3",
|
||||||
|
"S_TUTORIALFLOWER4",
|
||||||
|
"S_TUTORIALFLOWER5",
|
||||||
|
"S_TUTORIALFLOWER6",
|
||||||
|
"S_TUTORIALFLOWER7",
|
||||||
|
"S_TUTORIALFLOWER8",
|
||||||
|
"S_TUTORIALFLOWER9",
|
||||||
|
"S_TUTORIALFLOWER10",
|
||||||
|
"S_TUTORIALFLOWER11",
|
||||||
|
"S_TUTORIALFLOWER12",
|
||||||
|
"S_TUTORIALFLOWER13",
|
||||||
|
"S_TUTORIALFLOWER14",
|
||||||
|
"S_TUTORIALFLOWER15",
|
||||||
|
"S_TUTORIALFLOWER16",
|
||||||
|
"S_TUTORIALFLOWERF1",
|
||||||
|
"S_TUTORIALFLOWERF2",
|
||||||
|
"S_TUTORIALFLOWERF3",
|
||||||
|
"S_TUTORIALFLOWERF4",
|
||||||
|
"S_TUTORIALFLOWERF5",
|
||||||
|
"S_TUTORIALFLOWERF6",
|
||||||
|
"S_TUTORIALFLOWERF7",
|
||||||
|
"S_TUTORIALFLOWERF8",
|
||||||
|
"S_TUTORIALFLOWERF9",
|
||||||
|
"S_TUTORIALFLOWERF10",
|
||||||
|
"S_TUTORIALFLOWERF11",
|
||||||
|
"S_TUTORIALFLOWERF12",
|
||||||
|
"S_TUTORIALFLOWERF13",
|
||||||
|
"S_TUTORIALFLOWERF14",
|
||||||
|
"S_TUTORIALFLOWERF15",
|
||||||
|
"S_TUTORIALFLOWERF16",
|
||||||
|
|
||||||
// GFZ flowers
|
// GFZ flowers
|
||||||
"S_GFZFLOWERA",
|
"S_GFZFLOWERA",
|
||||||
"S_GFZFLOWERB",
|
"S_GFZFLOWERB",
|
||||||
|
@ -3293,14 +3347,13 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_NIGHTOPIANHELPER9",
|
"S_NIGHTOPIANHELPER9",
|
||||||
|
|
||||||
// Nightopian
|
// Nightopian
|
||||||
"S_PIAN0",
|
"S_PIAN_LOOK1",
|
||||||
"S_PIAN1",
|
"S_PIAN_LOOK2",
|
||||||
"S_PIAN2",
|
"S_PIAN_LOOK3",
|
||||||
"S_PIAN3",
|
"S_PIAN_FLY1",
|
||||||
"S_PIAN4",
|
"S_PIAN_FLY2",
|
||||||
"S_PIAN5",
|
"S_PIAN_FLY3",
|
||||||
"S_PIAN6",
|
"S_PIAN_SING",
|
||||||
"S_PIANSING",
|
|
||||||
|
|
||||||
// Shleep
|
// Shleep
|
||||||
"S_SHLEEP1",
|
"S_SHLEEP1",
|
||||||
|
@ -3763,6 +3816,12 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
// The letter
|
// The letter
|
||||||
"MT_LETTER",
|
"MT_LETTER",
|
||||||
|
|
||||||
|
// Tutorial Scenery
|
||||||
|
"MT_TUTORIALPLANT",
|
||||||
|
"MT_TUTORIALLEAF",
|
||||||
|
"MT_TUTORIALFLOWER",
|
||||||
|
"MT_TUTORIALFLOWERF",
|
||||||
|
|
||||||
// Greenflower Scenery
|
// Greenflower Scenery
|
||||||
"MT_GFZFLOWER1",
|
"MT_GFZFLOWER1",
|
||||||
"MT_GFZFLOWER2",
|
"MT_GFZFLOWER2",
|
||||||
|
@ -4269,6 +4328,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_YELLOWBRICKDEBRIS",
|
"MT_YELLOWBRICKDEBRIS",
|
||||||
|
|
||||||
"MT_NAMECHECK",
|
"MT_NAMECHECK",
|
||||||
|
"MT_RAY",
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *const MOBJFLAG_LIST[] = {
|
const char *const MOBJFLAG_LIST[] = {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -150,7 +150,7 @@ extern char logfilename[1024];
|
||||||
|
|
||||||
// Does this version require an added patch file?
|
// Does this version require an added patch file?
|
||||||
// Comment or uncomment this as necessary.
|
// Comment or uncomment this as necessary.
|
||||||
#define USE_PATCH_DTA
|
// #define USE_PATCH_DTA
|
||||||
|
|
||||||
// Enforce a limit of loaded WAD files.
|
// Enforce a limit of loaded WAD files.
|
||||||
//#define ENFORCE_WAD_LIMIT
|
//#define ENFORCE_WAD_LIMIT
|
||||||
|
@ -530,6 +530,22 @@ extern boolean capslock;
|
||||||
// i_system.c, replace getchar() once the keyboard has been appropriated
|
// i_system.c, replace getchar() once the keyboard has been appropriated
|
||||||
INT32 I_GetKey(void);
|
INT32 I_GetKey(void);
|
||||||
|
|
||||||
|
/* http://www.cse.yorku.ca/~oz/hash.html */
|
||||||
|
static inline
|
||||||
|
UINT32 quickncasehash (const char *p, size_t n)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
UINT32 x = 5381;
|
||||||
|
|
||||||
|
while (i < n && p[i])
|
||||||
|
{
|
||||||
|
x = (x * 33) ^ tolower(p[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef min // Double-Check with WATTCP-32's cdefs.h
|
#ifndef min // Double-Check with WATTCP-32's cdefs.h
|
||||||
#define min(x, y) (((x) < (y)) ? (x) : (y))
|
#define min(x, y) (((x) < (y)) ? (x) : (y))
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2014-2021 by Sonic Team Junior.
|
// Copyright (C) 2014-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 2013-2016 by Matthew "Kaito Sinclaire" Walsh.
|
// Copyright (C) 2013-2016 by Matthew "Kaito Sinclaire" Walsh.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
64
src/g_demo.c
64
src/g_demo.c
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -94,7 +94,7 @@ demoghost *ghosts = NULL;
|
||||||
// DEMO RECORDING
|
// DEMO RECORDING
|
||||||
//
|
//
|
||||||
|
|
||||||
#define DEMOVERSION 0x000e
|
#define DEMOVERSION 0x000f
|
||||||
#define DEMOHEADER "\xF0" "SRB2Replay" "\x0F"
|
#define DEMOHEADER "\xF0" "SRB2Replay" "\x0F"
|
||||||
|
|
||||||
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
||||||
|
@ -1029,7 +1029,11 @@ void G_ReadMetalTic(mobj_t *metal)
|
||||||
if (ziptic & GZT_ANGLE)
|
if (ziptic & GZT_ANGLE)
|
||||||
metal->angle = READUINT8(metal_p)<<24;
|
metal->angle = READUINT8(metal_p)<<24;
|
||||||
if (ziptic & GZT_FRAME)
|
if (ziptic & GZT_FRAME)
|
||||||
|
{
|
||||||
oldmetal.frame = READUINT32(metal_p);
|
oldmetal.frame = READUINT32(metal_p);
|
||||||
|
if (metalversion < 0x000f)
|
||||||
|
oldmetal.frame = G_ConvertOldFrameFlags(oldmetal.frame);
|
||||||
|
}
|
||||||
if (ziptic & GZT_SPR2)
|
if (ziptic & GZT_SPR2)
|
||||||
oldmetal.sprite2 = READUINT8(metal_p);
|
oldmetal.sprite2 = READUINT8(metal_p);
|
||||||
|
|
||||||
|
@ -1169,6 +1173,8 @@ void G_ReadMetalTic(mobj_t *metal)
|
||||||
follow->sprite2 = 0;
|
follow->sprite2 = 0;
|
||||||
follow->sprite = READUINT16(metal_p);
|
follow->sprite = READUINT16(metal_p);
|
||||||
follow->frame = READUINT32(metal_p); // NOT & FF_FRAMEMASK here, so 32 bits
|
follow->frame = READUINT32(metal_p); // NOT & FF_FRAMEMASK here, so 32 bits
|
||||||
|
if (metalversion < 0x000f)
|
||||||
|
follow->frame = G_ConvertOldFrameFlags(follow->frame);
|
||||||
follow->angle = metal->angle;
|
follow->angle = metal->angle;
|
||||||
follow->color = (metalversion==0x000c) ? READUINT8(metal_p) : READUINT16(metal_p);
|
follow->color = (metalversion==0x000c) ? READUINT8(metal_p) : READUINT16(metal_p);
|
||||||
|
|
||||||
|
@ -1680,8 +1686,9 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
switch(oldversion) // demoversion
|
switch(oldversion) // demoversion
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
case 0x000d: // The previous demoversion also supported
|
case 0x000e: // The previous demoversions also supported
|
||||||
case 0x000c: // all that changed between then and now was longer color name
|
case 0x000d: // all that changed between then and now was longer color name
|
||||||
|
case 0x000c:
|
||||||
break;
|
break;
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -1824,6 +1831,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
switch(demoversion)
|
switch(demoversion)
|
||||||
{
|
{
|
||||||
case 0x000d:
|
case 0x000d:
|
||||||
|
case 0x000e:
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
cnamelen = MAXCOLORNAME;
|
cnamelen = MAXCOLORNAME;
|
||||||
break;
|
break;
|
||||||
|
@ -2077,6 +2085,7 @@ void G_AddGhost(char *defdemoname)
|
||||||
switch(ghostversion)
|
switch(ghostversion)
|
||||||
{
|
{
|
||||||
case 0x000d:
|
case 0x000d:
|
||||||
|
case 0x000e:
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
cnamelen = MAXCOLORNAME;
|
cnamelen = MAXCOLORNAME;
|
||||||
break;
|
break;
|
||||||
|
@ -2337,8 +2346,9 @@ void G_DoPlayMetal(void)
|
||||||
switch(metalversion)
|
switch(metalversion)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
case 0x000d: // There are checks wheter the momentum is from older demo versions or not
|
case 0x000e: // There are checks wheter the momentum is from older demo versions or not
|
||||||
case 0x000c: // all that changed between then and now was longer color name
|
case 0x000d: // all that changed between then and now was longer color name
|
||||||
|
case 0x000c:
|
||||||
break;
|
break;
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -2554,3 +2564,45 @@ boolean G_CheckDemoStatus(void)
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2.2.10 shifted some frame flags around, this function converts frame flags from older versions to their 2.2.10 equivalents.
|
||||||
|
INT32 G_ConvertOldFrameFlags(INT32 frame)
|
||||||
|
{
|
||||||
|
if (frame & 0x01000000) // was FF_ANIMATE, is now FF_VERTICALFLIP
|
||||||
|
{
|
||||||
|
frame &= ~0x01000000;
|
||||||
|
frame |= FF_ANIMATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame & 0x02000000) // was FF_RANDOMANIM, is now FF_HORIZONTALFLIP
|
||||||
|
{
|
||||||
|
frame &= ~0x02000000;
|
||||||
|
frame |= FF_RANDOMANIM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame & 0x04000000) // was FF_GLOBALANIM, is now empty
|
||||||
|
{
|
||||||
|
frame &= ~0x04000000;
|
||||||
|
frame |= FF_GLOBALANIM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame & 0x00200000) // was FF_VERTICALFLIP, is now FF_FULLDARK
|
||||||
|
{
|
||||||
|
frame &= ~0x00200000;
|
||||||
|
frame |= FF_VERTICALFLIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame & 0x00400000) // was FF_HORIZONTALFLIP, is now FF_PAPERSPRITE
|
||||||
|
{
|
||||||
|
frame &= ~0x00400000;
|
||||||
|
frame |= FF_HORIZONTALFLIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame & 0x00800000) // was FF_PAPERSPRITE, is now FF_FLOORSPRITE
|
||||||
|
{
|
||||||
|
frame &= ~0x00800000;
|
||||||
|
frame |= FF_PAPERSPRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -82,5 +82,6 @@ void G_StopMetalDemo(void);
|
||||||
ATTRNORETURN void FUNCNORETURN G_StopMetalRecording(boolean kill);
|
ATTRNORETURN void FUNCNORETURN G_StopMetalRecording(boolean kill);
|
||||||
void G_StopDemo(void);
|
void G_StopDemo(void);
|
||||||
boolean G_CheckDemoStatus(void);
|
boolean G_CheckDemoStatus(void);
|
||||||
|
INT32 G_ConvertOldFrameFlags(INT32 frame);
|
||||||
|
|
||||||
#endif // __G_DEMO__
|
#endif // __G_DEMO__
|
||||||
|
|
100
src/g_game.c
100
src/g_game.c
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -1411,7 +1411,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
newtarget = P_SpawnMobj(ticcmd_ztargetfocus[forplayer]->x, ticcmd_ztargetfocus[forplayer]->y, ticcmd_ztargetfocus[forplayer]->z, MT_LOCKON); // positioning, flip handled in P_SceneryThinker
|
newtarget = P_SpawnMobj(ticcmd_ztargetfocus[forplayer]->x, ticcmd_ztargetfocus[forplayer]->y, ticcmd_ztargetfocus[forplayer]->z, MT_LOCKON); // positioning, flip handled in P_SceneryThinker
|
||||||
P_SetTarget(&newtarget->target, ticcmd_ztargetfocus[forplayer]);
|
P_SetTarget(&newtarget->target, ticcmd_ztargetfocus[forplayer]);
|
||||||
|
|
||||||
if (P_AproxDistance(
|
if (player->mo && P_AproxDistance(
|
||||||
player->mo->x - ticcmd_ztargetfocus[forplayer]->x,
|
player->mo->x - ticcmd_ztargetfocus[forplayer]->x,
|
||||||
player->mo->y - ticcmd_ztargetfocus[forplayer]->y
|
player->mo->y - ticcmd_ztargetfocus[forplayer]->y
|
||||||
) > 50*player->mo->scale)
|
) > 50*player->mo->scale)
|
||||||
|
@ -1547,12 +1547,17 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
||||||
cmd->sidemove = (SINT8)(cmd->sidemove + side);
|
cmd->sidemove = (SINT8)(cmd->sidemove + side);
|
||||||
|
|
||||||
// Note: Majority of botstuffs are handled in G_Ticker now.
|
// Note: Majority of botstuffs are handled in G_Ticker now.
|
||||||
if (player->bot == BOT_2PHUMAN) //Player-controlled bot
|
if (player->bot == BOT_2PAI
|
||||||
|
&& !player->powers[pw_tailsfly]
|
||||||
|
&& (cmd->forwardmove || cmd->sidemove || cmd->buttons))
|
||||||
{
|
{
|
||||||
// Fix offset angle for P2-controlled Tailsbot when P2's controls are set to non-Strafe
|
player->bot = BOT_2PHUMAN; // A player-controlled bot. Returns to AI when it respawns.
|
||||||
cmd->angleturn = (INT16)((localangle - *myangle) >> 16);
|
CV_SetValue(&cv_analog[1], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player->bot == BOT_2PHUMAN)
|
||||||
|
cmd->angleturn = (INT16)((localangle - *myangle) >> 16);
|
||||||
|
|
||||||
*myangle += (cmd->angleturn<<16);
|
*myangle += (cmd->angleturn<<16);
|
||||||
|
|
||||||
if (controlstyle == CS_LMAOGALOG) {
|
if (controlstyle == CS_LMAOGALOG) {
|
||||||
|
@ -2307,66 +2312,45 @@ void G_Ticker(boolean run)
|
||||||
|
|
||||||
buf = gametic % BACKUPTICS;
|
buf = gametic % BACKUPTICS;
|
||||||
|
|
||||||
|
// Generate ticcmds for bots FIRST, then copy received ticcmds for players.
|
||||||
|
// This emulates pre-2.2.10 behaviour where the bot referenced their leader's last copied ticcmd,
|
||||||
|
// which is desirable because P_PlayerThink can override inputs (e.g. while PF_STASIS is applied or in a waterslide),
|
||||||
|
// and the bot AI needs to respect that.
|
||||||
|
#define ISHUMAN (players[i].bot == BOT_NONE || players[i].bot == BOT_2PHUMAN)
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (playeringame[i])
|
if (playeringame[i] && !ISHUMAN) // Less work is required if we're building a bot ticcmd.
|
||||||
{
|
{
|
||||||
INT16 received;
|
players[i].lastbuttons = players[i].cmd.buttons; // Save last frame's button readings
|
||||||
// Save last frame's button readings
|
B_BuildTiccmd(&players[i], &players[i].cmd);
|
||||||
players[i].lastbuttons = players[i].cmd.buttons;
|
|
||||||
|
|
||||||
G_CopyTiccmd(&players[i].cmd, &netcmds[buf][i], 1);
|
// Since bot TicCmd is pre-determined for both the client and server, the latency and packet checks are simplified.
|
||||||
// Bot ticcmd handling
|
players[i].cmd.latency = 0;
|
||||||
// Yes, ordinarily this would be handled in G_BuildTiccmd...
|
P_SetPlayerAngle(&players[i], players[i].cmd.angleturn << 16);
|
||||||
// ...however, bot players won't have a corresponding consoleplayer or splitscreen player 2 to send that information.
|
|
||||||
// Therefore, this has to be done after ticcmd sends are received.
|
|
||||||
if (players[i].bot == BOT_2PAI) { // Tailsbot for P2
|
|
||||||
if (!players[i].powers[pw_tailsfly] && (players[i].cmd.forwardmove || players[i].cmd.sidemove || players[i].cmd.buttons))
|
|
||||||
{
|
|
||||||
players[i].bot = BOT_2PHUMAN; // A player-controlled bot. Returns to AI when it respawns.
|
|
||||||
CV_SetValue(&cv_analog[1], true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
B_BuildTiccmd(&players[i], &players[i].cmd);
|
|
||||||
}
|
|
||||||
B_HandleFlightIndicator(&players[i]);
|
|
||||||
}
|
|
||||||
else if (players[i].bot == BOT_MPAI) {
|
|
||||||
B_BuildTiccmd(&players[i], &players[i].cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do angle adjustments.
|
|
||||||
if (players[i].bot == BOT_NONE || players[i].bot == BOT_2PHUMAN)
|
|
||||||
{
|
|
||||||
received = (players[i].cmd.angleturn & TICCMD_RECEIVED);
|
|
||||||
players[i].angleturn += players[i].cmd.angleturn - players[i].oldrelangleturn;
|
|
||||||
players[i].oldrelangleturn = players[i].cmd.angleturn;
|
|
||||||
if (P_ControlStyle(&players[i]) == CS_LMAOGALOG)
|
|
||||||
P_ForceLocalAngle(&players[i], players[i].angleturn << 16);
|
|
||||||
else
|
|
||||||
players[i].cmd.angleturn = players[i].angleturn;
|
|
||||||
if (P_ControlStyle(&players[i]) == CS_LMAOGALOG)
|
|
||||||
P_ForceLocalAngle(&players[i], players[i].angleturn << 16);
|
|
||||||
else
|
|
||||||
players[i].cmd.angleturn = players[i].angleturn;
|
|
||||||
|
|
||||||
players[i].cmd.angleturn &= ~TICCMD_RECEIVED;
|
|
||||||
// Use the leveltime sent in the player's ticcmd to determine control lag
|
|
||||||
players[i].cmd.latency = min(((leveltime & 0xFF) - players[i].cmd.latency) & 0xFF, MAXPREDICTTICS-1);
|
|
||||||
}
|
|
||||||
else // Less work is required if we're building a bot ticcmd.
|
|
||||||
{
|
|
||||||
// Since bot TicCmd is pre-determined for both the client and server, the latency and packet checks are simplified.
|
|
||||||
received = 1;
|
|
||||||
players[i].cmd.latency = 0;
|
|
||||||
players[i].angleturn = players[i].cmd.angleturn;
|
|
||||||
players[i].oldrelangleturn = players[i].cmd.angleturn;
|
|
||||||
}
|
|
||||||
players[i].cmd.angleturn |= received;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (playeringame[i] && ISHUMAN)
|
||||||
|
{
|
||||||
|
players[i].lastbuttons = players[i].cmd.buttons; // Save last frame's button readings
|
||||||
|
G_CopyTiccmd(&players[i].cmd, &netcmds[buf][i], 1);
|
||||||
|
|
||||||
|
// Use the leveltime sent in the player's ticcmd to determine control lag
|
||||||
|
players[i].cmd.latency = min(((leveltime & 0xFF) - players[i].cmd.latency) & 0xFF, MAXPREDICTTICS-1);
|
||||||
|
|
||||||
|
// Do angle adjustments.
|
||||||
|
players[i].angleturn += players[i].cmd.angleturn - players[i].oldrelangleturn;
|
||||||
|
players[i].oldrelangleturn = players[i].cmd.angleturn;
|
||||||
|
if (P_ControlStyle(&players[i]) == CS_LMAOGALOG)
|
||||||
|
P_ForceLocalAngle(&players[i], players[i].angleturn << 16);
|
||||||
|
else
|
||||||
|
players[i].cmd.angleturn = (players[i].angleturn & ~TICCMD_RECEIVED) | (players[i].cmd.angleturn & TICCMD_RECEIVED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#undef ISHUMAN
|
||||||
|
|
||||||
// do main actions
|
// do main actions
|
||||||
switch (gamestate)
|
switch (gamestate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2020-2021 by Sonic Team Junior.
|
// Copyright (C) 2020-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2020-2021 by Sonic Team Junior.
|
// Copyright (C) 2020-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -347,19 +347,16 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||||
v[2].t = v[3].t = hwrPatch->max_t;
|
v[2].t = v[3].t = hwrPatch->max_t;
|
||||||
|
|
||||||
// clip it since it is used for bunny scroll in doom I
|
// clip it since it is used for bunny scroll in doom I
|
||||||
if (blendmode)
|
flags = HWR_GetBlendModeFlag(blendmode+1)|PF_NoDepthTest;
|
||||||
flags = HWR_GetBlendModeFlag(blendmode+1)|PF_NoDepthTest;
|
|
||||||
else
|
|
||||||
flags = PF_Translucent|PF_NoDepthTest;
|
|
||||||
|
|
||||||
if (alphalevel)
|
if (alphalevel)
|
||||||
{
|
{
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
||||||
|
|
||||||
if (alphalevel == 10) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency];
|
if (alphalevel == 10) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency]; // V_HUDTRANSHALF
|
||||||
else if (alphalevel == 11) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency];
|
else if (alphalevel == 11) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency]; // V_HUDTRANS
|
||||||
else if (alphalevel == 12) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency];
|
else if (alphalevel == 12) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency]; // V_HUDTRANSDOUBLE
|
||||||
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
||||||
flags |= PF_Modulated;
|
flags |= PF_Modulated;
|
||||||
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
HWD.pfnDrawPolygon(&Surf, v, 4, flags);
|
||||||
|
@ -644,19 +641,16 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||||
}
|
}
|
||||||
|
|
||||||
// clip it since it is used for bunny scroll in doom I
|
// clip it since it is used for bunny scroll in doom I
|
||||||
if (blendmode)
|
flags = HWR_GetBlendModeFlag(blendmode+1)|PF_NoDepthTest;
|
||||||
flags = HWR_GetBlendModeFlag(blendmode+1)|PF_NoDepthTest;
|
|
||||||
else
|
|
||||||
flags = PF_Translucent|PF_NoDepthTest;
|
|
||||||
|
|
||||||
if (alphalevel)
|
if (alphalevel)
|
||||||
{
|
{
|
||||||
FSurfaceInfo Surf;
|
FSurfaceInfo Surf;
|
||||||
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff;
|
||||||
|
|
||||||
if (alphalevel == 10) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency];
|
if (alphalevel == 10) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency]; // V_HUDTRANSHALF
|
||||||
else if (alphalevel == 11) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency];
|
else if (alphalevel == 11) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency]; // V_HUDTRANS
|
||||||
else if (alphalevel == 12) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency];
|
else if (alphalevel == 12) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency]; // V_HUDTRANSDOUBLE
|
||||||
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
else Surf.PolyColor.s.alpha = softwaretranstogl[10-alphalevel];
|
||||||
|
|
||||||
flags |= PF_Modulated;
|
flags |= PF_Modulated;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -3605,6 +3605,7 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
FBITFIELD blendmode = PF_Translucent|PF_Modulated;
|
FBITFIELD blendmode = PF_Translucent|PF_Modulated;
|
||||||
INT32 shader = SHADER_DEFAULT;
|
INT32 shader = SHADER_DEFAULT;
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
INT32 heightsec, phs;
|
||||||
SINT8 flip = P_MobjFlip(thing);
|
SINT8 flip = P_MobjFlip(thing);
|
||||||
|
|
||||||
INT32 light;
|
INT32 light;
|
||||||
|
@ -3617,7 +3618,23 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
|
|
||||||
groundz = R_GetShadowZ(thing, &groundslope);
|
groundz = R_GetShadowZ(thing, &groundslope);
|
||||||
|
|
||||||
//if (abs(groundz - gl_viewz) / tz > 4) return; // Prevent stretchy shadows and possible crashes
|
heightsec = thing->subsector->sector->heightsec;
|
||||||
|
if (viewplayer->mo && viewplayer->mo->subsector)
|
||||||
|
phs = viewplayer->mo->subsector->sector->heightsec;
|
||||||
|
else
|
||||||
|
phs = -1;
|
||||||
|
|
||||||
|
if (heightsec != -1 && phs != -1) // only clip things which are in special sectors
|
||||||
|
{
|
||||||
|
if (gl_viewz < FIXED_TO_FLOAT(sectors[phs].floorheight) ?
|
||||||
|
thing->z >= sectors[heightsec].floorheight :
|
||||||
|
thing->z < sectors[heightsec].floorheight)
|
||||||
|
return;
|
||||||
|
if (gl_viewz > FIXED_TO_FLOAT(sectors[phs].ceilingheight) ?
|
||||||
|
thing->z < sectors[heightsec].ceilingheight && gl_viewz >= FIXED_TO_FLOAT(sectors[heightsec].ceilingheight) :
|
||||||
|
thing->z >= sectors[heightsec].ceilingheight)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
floordiff = abs((flip < 0 ? thing->height : 0) + thing->z - groundz);
|
floordiff = abs((flip < 0 ? thing->height : 0) + thing->z - groundz);
|
||||||
|
|
||||||
|
@ -5274,13 +5291,19 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
if (heightsec != -1 && phs != -1) // only clip things which are in special sectors
|
if (heightsec != -1 && phs != -1) // only clip things which are in special sectors
|
||||||
{
|
{
|
||||||
|
float top = gzt;
|
||||||
|
float bottom = FIXED_TO_FLOAT(thing->z);
|
||||||
|
|
||||||
|
if (R_ThingIsFloorSprite(thing))
|
||||||
|
top = bottom;
|
||||||
|
|
||||||
if (gl_viewz < FIXED_TO_FLOAT(sectors[phs].floorheight) ?
|
if (gl_viewz < FIXED_TO_FLOAT(sectors[phs].floorheight) ?
|
||||||
FIXED_TO_FLOAT(thing->z) >= FIXED_TO_FLOAT(sectors[heightsec].floorheight) :
|
bottom >= FIXED_TO_FLOAT(sectors[heightsec].floorheight) :
|
||||||
gzt < FIXED_TO_FLOAT(sectors[heightsec].floorheight))
|
top < FIXED_TO_FLOAT(sectors[heightsec].floorheight))
|
||||||
return;
|
return;
|
||||||
if (gl_viewz > FIXED_TO_FLOAT(sectors[phs].ceilingheight) ?
|
if (gl_viewz > FIXED_TO_FLOAT(sectors[phs].ceilingheight) ?
|
||||||
gzt < FIXED_TO_FLOAT(sectors[heightsec].ceilingheight) && gl_viewz >= FIXED_TO_FLOAT(sectors[heightsec].ceilingheight) :
|
top < FIXED_TO_FLOAT(sectors[heightsec].ceilingheight) && gl_viewz >= FIXED_TO_FLOAT(sectors[heightsec].ceilingheight) :
|
||||||
FIXED_TO_FLOAT(thing->z) >= FIXED_TO_FLOAT(sectors[heightsec].ceilingheight))
|
bottom >= FIXED_TO_FLOAT(sectors[heightsec].ceilingheight))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -1346,12 +1346,18 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
//if (tics > durs)
|
//if (tics > durs)
|
||||||
//durs = tics;
|
//durs = tics;
|
||||||
|
|
||||||
|
INT32 blendmode;
|
||||||
|
if (spr->mobj->frame & FF_BLENDMASK)
|
||||||
|
blendmode = ((spr->mobj->frame & FF_BLENDMASK) >> FF_BLENDSHIFT) + 1;
|
||||||
|
else
|
||||||
|
blendmode = spr->mobj->blendmode;
|
||||||
|
|
||||||
if (spr->mobj->frame & FF_TRANSMASK)
|
if (spr->mobj->frame & FF_TRANSMASK)
|
||||||
Surf.PolyFlags = HWR_SurfaceBlend(spr->mobj->blendmode, (spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
Surf.PolyFlags = HWR_SurfaceBlend(blendmode, (spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Surf.PolyColor.s.alpha = (spr->mobj->flags2 & MF2_SHADOW) ? 0x40 : 0xff;
|
Surf.PolyColor.s.alpha = (spr->mobj->flags2 & MF2_SHADOW) ? 0x40 : 0xff;
|
||||||
Surf.PolyFlags = HWR_GetBlendModeFlag(spr->mobj->blendmode);
|
Surf.PolyFlags = HWR_GetBlendModeFlag(blendmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't forget to enable the depth test because we can't do this
|
// don't forget to enable the depth test because we can't do this
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2021 by Sonic Team Junior.
|
// Copyright (C) 1998-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2020-2021 by James R.
|
// Copyright (C) 2020-2022 by James R.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
417
src/hu_stuff.c
417
src/hu_stuff.c
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -76,7 +76,7 @@ patch_t *nto_font[NT_FONTSIZE];
|
||||||
|
|
||||||
static player_t *plr;
|
static player_t *plr;
|
||||||
boolean chat_on; // entering a chat message?
|
boolean chat_on; // entering a chat message?
|
||||||
static char w_chat[HU_MAXMSGLEN];
|
static char w_chat[HU_MAXMSGLEN + 1];
|
||||||
static size_t c_input = 0; // let's try to make the chat input less shitty.
|
static size_t c_input = 0; // let's try to make the chat input less shitty.
|
||||||
static boolean headsupactive = false;
|
static boolean headsupactive = false;
|
||||||
boolean hu_showscores; // draw rankings
|
boolean hu_showscores; // draw rankings
|
||||||
|
@ -461,7 +461,7 @@ void HU_AddChatText(const char *text, boolean playsound)
|
||||||
|
|
||||||
static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
|
static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
|
||||||
{
|
{
|
||||||
char buf[254];
|
char buf[2 + HU_MAXMSGLEN + 1];
|
||||||
size_t numwords, ix;
|
size_t numwords, ix;
|
||||||
char *msg = &buf[2];
|
char *msg = &buf[2];
|
||||||
const size_t msgspace = sizeof buf - 2;
|
const size_t msgspace = sizeof buf - 2;
|
||||||
|
@ -537,7 +537,7 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
|
||||||
}
|
}
|
||||||
buf[0] = target;
|
buf[0] = target;
|
||||||
newmsg = msg+5+spc;
|
newmsg = msg+5+spc;
|
||||||
strlcpy(msg, newmsg, 252);
|
strlcpy(msg, newmsg, HU_MAXMSGLEN + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendNetXCmd(XD_SAY, buf, strlen(msg) + 1 + msg-buf);
|
SendNetXCmd(XD_SAY, buf, strlen(msg) + 1 + msg-buf);
|
||||||
|
@ -644,7 +644,7 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
|
||||||
target = READSINT8(*p);
|
target = READSINT8(*p);
|
||||||
flags = READUINT8(*p);
|
flags = READUINT8(*p);
|
||||||
msg = (char *)*p;
|
msg = (char *)*p;
|
||||||
SKIPSTRING(*p);
|
SKIPSTRINGL(*p, HU_MAXMSGLEN + 1);
|
||||||
|
|
||||||
if ((cv_mute.value || flags & (HU_CSAY|HU_SERVER_SAY)) && playernum != serverplayer && !(IsPlayerAdmin(playernum)))
|
if ((cv_mute.value || flags & (HU_CSAY|HU_SERVER_SAY)) && playernum != serverplayer && !(IsPlayerAdmin(playernum)))
|
||||||
{
|
{
|
||||||
|
@ -858,72 +858,6 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handles key input and string input
|
|
||||||
//
|
|
||||||
static inline boolean HU_keyInChatString(char *s, char ch)
|
|
||||||
{
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
if ((ch >= HU_FONTSTART && ch <= HU_FONTEND && hu_font[ch-HU_FONTSTART])
|
|
||||||
|| ch == ' ') // Allow spaces, of course
|
|
||||||
{
|
|
||||||
l = strlen(s);
|
|
||||||
if (l < HU_MAXMSGLEN - 1)
|
|
||||||
{
|
|
||||||
if (c_input >= strlen(s)) // don't do anything complicated
|
|
||||||
{
|
|
||||||
s[l++] = ch;
|
|
||||||
s[l]=0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
// move everything past c_input for new characters:
|
|
||||||
size_t m = HU_MAXMSGLEN-1;
|
|
||||||
while (m>=c_input)
|
|
||||||
{
|
|
||||||
if (s[m])
|
|
||||||
s[m+1] = (s[m]);
|
|
||||||
if (m == 0) // prevent overflow
|
|
||||||
break;
|
|
||||||
m--;
|
|
||||||
}
|
|
||||||
s[c_input] = ch; // and replace this.
|
|
||||||
}
|
|
||||||
c_input++;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (ch == KEY_BACKSPACE)
|
|
||||||
{
|
|
||||||
size_t i = c_input;
|
|
||||||
|
|
||||||
if (c_input <= 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!s[i-1])
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (i >= strlen(s)-1)
|
|
||||||
{
|
|
||||||
s[strlen(s)-1] = 0;
|
|
||||||
c_input--;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; (i < HU_MAXMSGLEN); i++)
|
|
||||||
{
|
|
||||||
s[i-1] = s[i];
|
|
||||||
}
|
|
||||||
c_input--;
|
|
||||||
}
|
|
||||||
else if (ch != KEY_ENTER)
|
|
||||||
return false; // did not eat key
|
|
||||||
|
|
||||||
return true; // ate the key
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -945,151 +879,123 @@ void HU_Ticker(void)
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
|
|
||||||
static boolean teamtalk = false;
|
static boolean teamtalk = false;
|
||||||
|
static boolean justscrolleddown;
|
||||||
|
static boolean justscrolledup;
|
||||||
|
static INT16 typelines = 1; // number of drawfill lines we need when drawing the chat. it's some weird hack and might be one frame off but I'm lazy to make another loop.
|
||||||
|
// It's up here since it has to be reset when we open the chat.
|
||||||
|
|
||||||
// Clear spaces so we don't end up with messages only made out of emptiness
|
static boolean HU_chatboxContainsOnlySpaces(void)
|
||||||
static boolean HU_clearChatSpaces(void)
|
|
||||||
{
|
{
|
||||||
size_t i = 0; // Used to just check our message
|
size_t i;
|
||||||
char c; // current character we're iterating.
|
|
||||||
boolean nothingbutspaces = true;
|
|
||||||
|
|
||||||
for (; i < strlen(w_chat); i++) // iterate through message and eradicate all spaces that don't belong.
|
for (i = 0; w_chat[i]; i++)
|
||||||
{
|
if (w_chat[i] != ' ')
|
||||||
c = w_chat[i];
|
return false;
|
||||||
if (!c)
|
|
||||||
break; // if there's nothing, it's safe to assume our message has ended, so let's not waste any more time here.
|
|
||||||
|
|
||||||
if (c != ' ') // Isn't a space
|
return true;
|
||||||
{
|
|
||||||
nothingbutspaces = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nothingbutspaces;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
static void HU_sendChatMessage(void)
|
||||||
//
|
|
||||||
static void HU_queueChatChar(char c)
|
|
||||||
{
|
{
|
||||||
// send automaticly the message (no more chat char)
|
char buf[2 + HU_MAXMSGLEN + 1];
|
||||||
if (c == KEY_ENTER)
|
char *msg = &buf[2];
|
||||||
|
size_t ci;
|
||||||
|
INT32 target = 0;
|
||||||
|
|
||||||
|
// if our message was nothing but spaces, don't send it.
|
||||||
|
if (HU_chatboxContainsOnlySpaces())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// copy printable characters and terminating '\0' only.
|
||||||
|
for (ci = 2; w_chat[ci-2]; ci++)
|
||||||
{
|
{
|
||||||
char buf[2+256];
|
char c = w_chat[ci-2];
|
||||||
char *msg = &buf[2];
|
if (c >= ' ' && !(c & 0x80))
|
||||||
size_t i = 0;
|
buf[ci] = c;
|
||||||
size_t ci = 2;
|
};
|
||||||
INT32 target = 0;
|
buf[ci] = '\0';
|
||||||
|
|
||||||
if (HU_clearChatSpaces()) // Avoids being able to send empty messages, or something.
|
memset(w_chat, '\0', sizeof(w_chat));
|
||||||
return; // If this returns true, that means our message was NOTHING but spaces, so don't send it period.
|
c_input = 0;
|
||||||
|
|
||||||
do {
|
// last minute mute check
|
||||||
c = w_chat[-2+ci++];
|
if (CHAT_MUTE)
|
||||||
if (!c || (c >= ' ' && !(c & 0x80))) // copy printable characters and terminating '\0' only.
|
{
|
||||||
buf[ci-1]=c;
|
HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85"), false);
|
||||||
} while (c);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (;(i<HU_MAXMSGLEN);i++)
|
if (strlen(msg) > 4 && strnicmp(msg, "/pm", 3) == 0) // used /pm
|
||||||
w_chat[i] = 0; // reset this.
|
{
|
||||||
|
INT32 spc = 1; // used if playernum[1] is a space.
|
||||||
|
char playernum[3];
|
||||||
|
const char *newmsg;
|
||||||
|
|
||||||
c_input = 0;
|
// what we're gonna do now is check if the player exists
|
||||||
|
// with that logic, characters 4 and 5 are our numbers:
|
||||||
|
|
||||||
// last minute mute check
|
// teamtalk can't send PMs, just don't send it, else everyone would be able to see it, and no one wants to see your sex RP sicko.
|
||||||
if (CHAT_MUTE)
|
if (teamtalk)
|
||||||
{
|
{
|
||||||
HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85"), false);
|
HU_AddChatText(va("%sCannot send sayto in Say-Team.", "\x85"), false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(msg) > 4 && strnicmp(msg, "/pm", 3) == 0) // used /pm
|
strncpy(playernum, msg+3, 3);
|
||||||
|
// check for undesirable characters in our "number"
|
||||||
|
if (!(isdigit(playernum[0]) && isdigit(playernum[1])))
|
||||||
{
|
{
|
||||||
INT32 spc = 1; // used if playernum[1] is a space.
|
// check if playernum[1] is a space
|
||||||
char playernum[3];
|
if (playernum[1] == ' ')
|
||||||
const char *newmsg;
|
spc = 0;
|
||||||
|
// let it slide
|
||||||
// what we're gonna do now is check if the player exists
|
|
||||||
// with that logic, characters 4 and 5 are our numbers:
|
|
||||||
|
|
||||||
// teamtalk can't send PMs, just don't send it, else everyone would be able to see it, and no one wants to see your sex RP sicko.
|
|
||||||
if (teamtalk)
|
|
||||||
{
|
|
||||||
HU_AddChatText(va("%sCannot send sayto in Say-Team.", "\x85"), false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(playernum, msg+3, 3);
|
|
||||||
// check for undesirable characters in our "number"
|
|
||||||
if (((playernum[0] < '0') || (playernum[0] > '9')) || ((playernum[1] < '0') || (playernum[1] > '9')))
|
|
||||||
{
|
|
||||||
// check if playernum[1] is a space
|
|
||||||
if (playernum[1] == ' ')
|
|
||||||
spc = 0;
|
|
||||||
// let it slide
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HU_AddChatText("\x82NOTICE: \x80Invalid command format. Correct format is \'/pm<player num> \'.", false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// I'm very bad at C, I swear I am, additional checks eww!
|
|
||||||
if (spc != 0)
|
|
||||||
{
|
|
||||||
if (msg[5] != ' ')
|
|
||||||
{
|
|
||||||
HU_AddChatText("\x82NOTICE: \x80Invalid command format. Correct format is \'/pm<player num> \'.", false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
target = atoi(playernum); // turn that into a number
|
|
||||||
//CONS_Printf("%d\n", target);
|
|
||||||
|
|
||||||
// check for target player, if it doesn't exist then we can't send the message!
|
|
||||||
if (target < MAXPLAYERS && playeringame[target]) // player exists
|
|
||||||
target++; // even though playernums are from 0 to 31, target is 1 to 32, so up that by 1 to have it work!
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HU_AddChatText(va("\x82NOTICE: \x80Player %d does not exist.", target), false); // same
|
HU_AddChatText("\x82NOTICE: \x80Invalid command format. Correct format is \'/pm<player num> \'.", false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we need to get rid of the /pm<player num>
|
|
||||||
newmsg = msg+5+spc;
|
|
||||||
strlcpy(msg, newmsg, 255);
|
|
||||||
}
|
}
|
||||||
if (ci > 3) // don't send target+flags+empty message.
|
// I'm very bad at C, I swear I am, additional checks eww!
|
||||||
|
if (spc != 0 && msg[5] != ' ')
|
||||||
{
|
{
|
||||||
if (teamtalk)
|
HU_AddChatText("\x82NOTICE: \x80Invalid command format. Correct format is \'/pm<player num> \'.", false);
|
||||||
buf[0] = -1; // target
|
return;
|
||||||
else
|
|
||||||
buf[0] = target;
|
|
||||||
|
|
||||||
buf[1] = 0; // flags
|
|
||||||
SendNetXCmd(XD_SAY, buf, 2 + strlen(&buf[2]) + 1);
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
target = atoi(playernum); // turn that into a number
|
||||||
|
|
||||||
|
// check for target player, if it doesn't exist then we can't send the message!
|
||||||
|
if (target < MAXPLAYERS && playeringame[target]) // player exists
|
||||||
|
target++; // even though playernums are from 0 to 31, target is 1 to 32, so up that by 1 to have it work!
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HU_AddChatText(va("\x82NOTICE: \x80Player %d does not exist.", target), false); // same
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we need to get rid of the /pm<player num>
|
||||||
|
newmsg = msg+5+spc;
|
||||||
|
strlcpy(msg, newmsg, HU_MAXMSGLEN + 1);
|
||||||
|
}
|
||||||
|
if (ci > 2) // don't send target+flags+empty message.
|
||||||
|
{
|
||||||
|
buf[0] = teamtalk ? -1 : target; // target
|
||||||
|
buf[1] = 0; // flags
|
||||||
|
SendNetXCmd(XD_SAY, buf, 2 + strlen(&buf[2]) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void HU_clearChatChars(void)
|
void HU_clearChatChars(void)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
memset(w_chat, '\0', sizeof(w_chat));
|
||||||
for (;i<HU_MAXMSGLEN;i++)
|
|
||||||
w_chat[i] = 0; // reset this.
|
|
||||||
chat_on = false;
|
chat_on = false;
|
||||||
c_input = 0;
|
c_input = 0;
|
||||||
|
|
||||||
I_UpdateMouseGrab();
|
I_UpdateMouseGrab();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NONET
|
|
||||||
static boolean justscrolleddown;
|
|
||||||
static boolean justscrolledup;
|
|
||||||
static INT16 typelines = 1; // number of drawfill lines we need when drawing the chat. it's some weird hack and might be one frame off but I'm lazy to make another loop.
|
|
||||||
// It's up here since it has to be reset when we open the chat.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Returns true if key eaten
|
// Returns true if key eaten
|
||||||
//
|
//
|
||||||
|
@ -1171,21 +1077,23 @@ boolean HU_Responder(event_t *ev)
|
||||||
if (shiftdown ^ capslock)
|
if (shiftdown ^ capslock)
|
||||||
c = shiftxform[c];
|
c = shiftxform[c];
|
||||||
}
|
}
|
||||||
else // if we're holding shift we should still shift non letter symbols
|
else // if we're holding shift we should still shift non letter symbols
|
||||||
{
|
{
|
||||||
if (shiftdown)
|
if (shiftdown)
|
||||||
c = shiftxform[c];
|
c = shiftxform[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
// pasting. pasting is cool. chat is a bit limited, though :(
|
// pasting. pasting is cool. chat is a bit limited, though :(
|
||||||
if (((c == 'v' || c == 'V') && ctrldown) && !CHAT_MUTE)
|
if ((c == 'v' || c == 'V') && ctrldown)
|
||||||
{
|
{
|
||||||
const char *paste = I_ClipboardPaste();
|
const char *paste;
|
||||||
size_t chatlen;
|
size_t chatlen;
|
||||||
size_t pastelen;
|
size_t pastelen;
|
||||||
|
|
||||||
// create a dummy string real quickly
|
if (CHAT_MUTE)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
paste = I_ClipboardPaste();
|
||||||
if (paste == NULL)
|
if (paste == NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1194,40 +1102,16 @@ boolean HU_Responder(event_t *ev)
|
||||||
if (chatlen+pastelen > HU_MAXMSGLEN)
|
if (chatlen+pastelen > HU_MAXMSGLEN)
|
||||||
return true; // we can't paste this!!
|
return true; // we can't paste this!!
|
||||||
|
|
||||||
if (c_input >= strlen(w_chat)) // add it at the end of the string.
|
memmove(&w_chat[c_input + pastelen], &w_chat[c_input], pastelen);
|
||||||
{
|
memcpy(&w_chat[c_input], paste, pastelen); // copy all of that.
|
||||||
memcpy(&w_chat[chatlen], paste, pastelen); // copy all of that.
|
c_input += pastelen;
|
||||||
c_input += pastelen;
|
return true;
|
||||||
/*size_t i = 0;
|
|
||||||
for (;i<pastelen;i++)
|
|
||||||
{
|
|
||||||
HU_queueChatChar(paste[i]); // queue it so that it's actually sent. (this chat write thing is REALLY messy.)
|
|
||||||
}*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else // otherwise, we need to shift everything and make space, etc etc
|
|
||||||
{
|
|
||||||
size_t i = HU_MAXMSGLEN-1;
|
|
||||||
while (i >= c_input)
|
|
||||||
{
|
|
||||||
if (w_chat[i])
|
|
||||||
w_chat[i+pastelen] = w_chat[i];
|
|
||||||
if (i == 0) // prevent overflow
|
|
||||||
break;
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
memcpy(&w_chat[c_input], paste, pastelen); // copy all of that.
|
|
||||||
c_input += pastelen;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (c == KEY_ENTER)
|
||||||
|
{
|
||||||
|
if (!CHAT_MUTE)
|
||||||
|
HU_sendChatMessage();
|
||||||
|
|
||||||
if (!CHAT_MUTE && HU_keyInChatString(w_chat,c))
|
|
||||||
{
|
|
||||||
HU_queueChatChar(c);
|
|
||||||
}
|
|
||||||
if (c == KEY_ENTER)
|
|
||||||
{
|
|
||||||
chat_on = false;
|
chat_on = false;
|
||||||
c_input = 0; // reset input cursor
|
c_input = 0; // reset input cursor
|
||||||
chat_scrollmedown = true; // you hit enter, so you might wanna autoscroll to see what you just sent. :)
|
chat_scrollmedown = true; // you hit enter, so you might wanna autoscroll to see what you just sent. :)
|
||||||
|
@ -1268,6 +1152,32 @@ boolean HU_Responder(event_t *ev)
|
||||||
else
|
else
|
||||||
c_input++;
|
c_input++;
|
||||||
}
|
}
|
||||||
|
else if ((c >= HU_FONTSTART && c <= HU_FONTEND && hu_font[c-HU_FONTSTART])
|
||||||
|
|| c == ' ') // Allow spaces, of course
|
||||||
|
{
|
||||||
|
if (CHAT_MUTE || strlen(w_chat) >= HU_MAXMSGLEN)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
memmove(&w_chat[c_input + 1], &w_chat[c_input], strlen(w_chat) - c_input + 1);
|
||||||
|
w_chat[c_input] = c;
|
||||||
|
c_input++;
|
||||||
|
}
|
||||||
|
else if (c == KEY_BACKSPACE)
|
||||||
|
{
|
||||||
|
if (CHAT_MUTE || c_input <= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
memmove(&w_chat[c_input - 1], &w_chat[c_input], strlen(w_chat) - c_input + 1);
|
||||||
|
c_input--;
|
||||||
|
}
|
||||||
|
else if (c == KEY_DEL)
|
||||||
|
{
|
||||||
|
if (CHAT_MUTE || c_input >= strlen(w_chat))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
memmove(&w_chat[c_input], &w_chat[c_input + 1], strlen(w_chat) - c_input);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1863,64 +1773,25 @@ static void HU_DrawChat_Old(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// draw the Crosshair, at the exact center of the view.
|
// Draw crosshairs at the exact center of the view.
|
||||||
//
|
// In splitscreen, crosshairs are stretched vertically to compensate for V_PERPLAYER squishing them.
|
||||||
// Crosshairs are pre-cached at HU_Init
|
// Crosshairs are pre-cached at HU_Init
|
||||||
|
|
||||||
static inline void HU_DrawCrosshair(void)
|
static inline void HU_DrawCrosshairs(void)
|
||||||
{
|
{
|
||||||
INT32 i, y, dupz;
|
INT32 cross1 = cv_crosshair.value & 3;
|
||||||
|
INT32 cross2 = cv_crosshair2.value & 3;
|
||||||
|
|
||||||
i = cv_crosshair.value & 3;
|
if (automapactive || demoplayback)
|
||||||
if (!i)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((netgame || multiplayer) && players[displayplayer].spectator)
|
stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]);
|
||||||
return;
|
if (!players[displayplayer].spectator && (!camera.chase || ticcmd_ztargetfocus[0]) && cross1)
|
||||||
|
V_DrawStretchyFixedPatch((BASEVIDWIDTH/2)<<FRACBITS, (BASEVIDHEIGHT/2)<<FRACBITS, FRACUNIT, splitscreen ? 2*FRACUNIT : FRACUNIT, V_TRANSLUCENT|V_PERPLAYER, crosshair[cross1 - 1], NULL);
|
||||||
|
|
||||||
#ifdef HWRENDER
|
stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]);
|
||||||
if (rendermode != render_soft)
|
if (!players[secondarydisplayplayer].spectator && (!camera2.chase || ticcmd_ztargetfocus[1]) && cross2 && splitscreen)
|
||||||
y = (INT32)gl_basewindowcentery;
|
V_DrawStretchyFixedPatch((BASEVIDWIDTH/2)<<FRACBITS, (BASEVIDHEIGHT/2)<<FRACBITS, FRACUNIT, 2*FRACUNIT, V_TRANSLUCENT|V_PERPLAYER, crosshair[cross2 - 1], NULL);
|
||||||
else
|
|
||||||
#endif
|
|
||||||
y = viewwindowy + (viewheight>>1);
|
|
||||||
|
|
||||||
dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
|
|
||||||
V_DrawFixedPatch(vid.width<<(FRACBITS-1), y<<FRACBITS, FRACUNIT/dupz, V_TRANSLUCENT, crosshair[i - 1], NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void HU_DrawCrosshair2(void)
|
|
||||||
{
|
|
||||||
INT32 i, y, dupz;
|
|
||||||
|
|
||||||
i = cv_crosshair2.value & 3;
|
|
||||||
if (!i)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((netgame || multiplayer) && players[secondarydisplayplayer].spectator)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef HWRENDER
|
|
||||||
if (rendermode != render_soft)
|
|
||||||
y = (INT32)gl_basewindowcentery;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
y = viewwindowy + (viewheight>>1);
|
|
||||||
|
|
||||||
if (!splitscreen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef HWRENDER
|
|
||||||
if (rendermode != render_soft)
|
|
||||||
y += (INT32)gl_viewheight;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
y += viewheight;
|
|
||||||
|
|
||||||
dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
|
||||||
|
|
||||||
V_DrawFixedPatch(vid.width<<(FRACBITS-1), y<<FRACBITS, FRACUNIT/dupz, V_TRANSLUCENT, crosshair[i - 1], NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HU_DrawCEcho(void)
|
static void HU_DrawCEcho(void)
|
||||||
|
@ -2114,19 +1985,9 @@ void HU_Drawer(void)
|
||||||
if (gamestate != GS_LEVEL)
|
if (gamestate != GS_LEVEL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// draw the crosshair, not when viewing demos nor with chasecam
|
// draw the crosshair
|
||||||
if (LUA_HudEnabled(hud_crosshair))
|
if (LUA_HudEnabled(hud_crosshair))
|
||||||
{
|
HU_DrawCrosshairs();
|
||||||
if (!automapactive && cv_crosshair.value && !demoplayback &&
|
|
||||||
(!camera.chase || ticcmd_ztargetfocus[0])
|
|
||||||
&& !players[displayplayer].spectator)
|
|
||||||
HU_DrawCrosshair();
|
|
||||||
|
|
||||||
if (!automapactive && cv_crosshair2.value && !demoplayback &&
|
|
||||||
(!camera2.chase || ticcmd_ztargetfocus[1])
|
|
||||||
&& !players[secondarydisplayplayer].spectator)
|
|
||||||
HU_DrawCrosshair2();
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw desynch text
|
// draw desynch text
|
||||||
if (hu_redownloadinggamestate)
|
if (hu_redownloadinggamestate)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -62,7 +62,7 @@ typedef struct
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
// chat stuff
|
// chat stuff
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
#define HU_MAXMSGLEN 224
|
#define HU_MAXMSGLEN 223
|
||||||
#define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand.
|
#define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand.
|
||||||
#ifdef NETSPLITSCREEN
|
#ifdef NETSPLITSCREEN
|
||||||
#define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640)
|
#define OLDCHAT (cv_consolechat.value == 1 || dedicated || vid.width < 640)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2011-2021 by Sonic Team Junior.
|
// Copyright (C) 2011-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2011-2021 by Sonic Team Junior.
|
// Copyright (C) 2011-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2020-2021 by James R.
|
// Copyright (C) 2020-2022 by James R.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
276
src/info.c
276
src/info.c
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -203,6 +203,10 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
// The letter
|
// The letter
|
||||||
"LETR",
|
"LETR",
|
||||||
|
|
||||||
|
// Tutorial Scenery
|
||||||
|
"TUPL",
|
||||||
|
"TUPF",
|
||||||
|
|
||||||
// Greenflower Scenery
|
// Greenflower Scenery
|
||||||
"FWR1",
|
"FWR1",
|
||||||
"FWR2", // GFZ Sunflower
|
"FWR2", // GFZ Sunflower
|
||||||
|
@ -2117,6 +2121,56 @@ state_t states[NUMSTATES] =
|
||||||
|
|
||||||
{SPR_LETR, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_LETTER
|
{SPR_LETR, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_LETTER
|
||||||
|
|
||||||
|
// Tutorial scenery
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALLEAF2}, // S_TUTORIALLEAF1
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALLEAF3}, // S_TUTORIALLEAF2
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALLEAF4}, // S_TUTORIALLEAF3
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALLEAF5}, // S_TUTORIALLEAF4
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALLEAF6}, // S_TUTORIALLEAF5
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALLEAF7}, // S_TUTORIALLEAF6
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALLEAF8}, // S_TUTORIALLEAF7
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALLEAF9}, // S_TUTORIALLEAF8
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALLEAF10}, // S_TUTORIALLEAF9
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALLEAF11}, // S_TUTORIALLEAF10
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALLEAF12}, // S_TUTORIALLEAF11
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALLEAF13}, // S_TUTORIALLEAF12
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALLEAF14}, // S_TUTORIALLEAF13
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALLEAF15}, // S_TUTORIALLEAF14
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALLEAF16}, // S_TUTORIALLEAF15
|
||||||
|
{SPR_TUPL, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALLEAF1}, // S_TUTORIALLEAF16
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWER2}, // S_TUTORIALFLOWER1
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWER3}, // S_TUTORIALFLOWER2
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWER4}, // S_TUTORIALFLOWER3
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWER5}, // S_TUTORIALFLOWER4
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWER6}, // S_TUTORIALFLOWER5
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWER7}, // S_TUTORIALFLOWER6
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWER8}, // S_TUTORIALFLOWER7
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWER9}, // S_TUTORIALFLOWER8
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWER10}, // S_TUTORIALFLOWER9
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWER11}, // S_TUTORIALFLOWER10
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWER12}, // S_TUTORIALFLOWER11
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWER13}, // S_TUTORIALFLOWER12
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWER14}, // S_TUTORIALFLOWER13
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWER15}, // S_TUTORIALFLOWER14
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWER16}, // S_TUTORIALFLOWER15
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_PAPERSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWER1}, // S_TUTORIALFLOWER16
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF2}, // S_TUTORIALFLOWERF1
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF3}, // S_TUTORIALFLOWERF2
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF4}, // S_TUTORIALFLOWERF3
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF5}, // S_TUTORIALFLOWERF4
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF6}, // S_TUTORIALFLOWERF5
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF7}, // S_TUTORIALFLOWERF6
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF8}, // S_TUTORIALFLOWERF7
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF9}, // S_TUTORIALFLOWERF8
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|7, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF10}, // S_TUTORIALFLOWERF9
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|6, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF11}, // S_TUTORIALFLOWERF10
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|5, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF12}, // S_TUTORIALFLOWERF11
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|4, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF13}, // S_TUTORIALFLOWERF12
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|3, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF14}, // S_TUTORIALFLOWERF13
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|2, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF15}, // S_TUTORIALFLOWERF14
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|1, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF16}, // S_TUTORIALFLOWERF15
|
||||||
|
{SPR_TUPF, FF_SEMIBRIGHT|FF_ADD|FF_FLOORSPRITE|0, 3, {NULL}, 0, 0, S_TUTORIALFLOWERF1}, // S_TUTORIALFLOWERF16
|
||||||
|
|
||||||
// GFZ flowers
|
// GFZ flowers
|
||||||
{SPR_FWR1, FF_ANIMATE, -1, {NULL}, 7, 3, S_NULL}, // S_GFZFLOWERA
|
{SPR_FWR1, FF_ANIMATE, -1, {NULL}, 7, 3, S_NULL}, // S_GFZFLOWERA
|
||||||
{SPR_FWR2, FF_ANIMATE, -1, {NULL}, 19, 3, S_NULL}, // S_GFZFLOWERB
|
{SPR_FWR2, FF_ANIMATE, -1, {NULL}, 19, 3, S_NULL}, // S_GFZFLOWERB
|
||||||
|
@ -2168,7 +2222,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_GARG, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BIGGARGOYLE
|
{SPR_GARG, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BIGGARGOYLE
|
||||||
|
|
||||||
// DSZ Seaweed
|
// DSZ Seaweed
|
||||||
{SPR_SEWE, 0, -1, {NULL}, 0, 0, S_SEAWEED2}, // S_SEAWEED1
|
{SPR_SEWE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 26, 3, S_SEAWEED1}, // S_SEAWEED1
|
||||||
{SPR_SEWE, 1, 5, {NULL}, 0, 0, S_SEAWEED3}, // S_SEAWEED2
|
{SPR_SEWE, 1, 5, {NULL}, 0, 0, S_SEAWEED3}, // S_SEAWEED2
|
||||||
{SPR_SEWE, 2, 5, {NULL}, 0, 0, S_SEAWEED4}, // S_SEAWEED3
|
{SPR_SEWE, 2, 5, {NULL}, 0, 0, S_SEAWEED4}, // S_SEAWEED3
|
||||||
{SPR_SEWE, 3, 5, {NULL}, 0, 0, S_SEAWEED5}, // S_SEAWEED4
|
{SPR_SEWE, 3, 5, {NULL}, 0, 0, S_SEAWEED5}, // S_SEAWEED4
|
||||||
|
@ -2938,10 +2992,10 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_NULL, 0, 15*2, {NULL}, 0, 0, S_ZAPSB2 }, // S_ZAPSB11
|
{SPR_NULL, 0, 15*2, {NULL}, 0, 0, S_ZAPSB2 }, // S_ZAPSB11
|
||||||
|
|
||||||
// Thunder spark
|
// Thunder spark
|
||||||
{SPR_SSPK, FF_ANIMATE, -1, {NULL}, 1, 2, S_NULL}, // S_THUNDERCOIN_SPARK
|
{SPR_SSPK, FF_ANIMATE|FF_FULLBRIGHT, -1, {NULL}, 1, 2, S_NULL}, // S_THUNDERCOIN_SPARK
|
||||||
|
|
||||||
// Invincibility Sparkles
|
// Invincibility Sparkles
|
||||||
{SPR_IVSP, FF_ANIMATE, 32, {NULL}, 31, 1, S_NULL}, // S_IVSP
|
{SPR_IVSP, FF_ANIMATE|FF_FULLBRIGHT, 32, {NULL}, 31, 1, S_NULL}, // S_IVSP
|
||||||
|
|
||||||
// Super Sonic Spark
|
// Super Sonic Spark
|
||||||
{SPR_SSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK2}, // S_SSPK1
|
{SPR_SSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK2}, // S_SSPK1
|
||||||
|
@ -3736,14 +3790,13 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_FL01, 3, 1, {A_OrbitNights}, ANG2*2, 180 | 0x10000, S_NIGHTOPIANHELPER1}, // S_NIGHTOPIANHELPER9
|
{SPR_FL01, 3, 1, {A_OrbitNights}, ANG2*2, 180 | 0x10000, S_NIGHTOPIANHELPER1}, // S_NIGHTOPIANHELPER9
|
||||||
|
|
||||||
// Nightopian
|
// Nightopian
|
||||||
{SPR_NTPN, 0, 4, {A_Look}, 0, 0, S_PIAN0}, // S_PIAN0
|
{SPR_NTPN, 0, 2, {A_Look}, 1, 1, S_PIAN_LOOK2}, // S_PIAN_LOOK1
|
||||||
{SPR_NTPN, 0, 4, {A_JetgThink}, 0, 0, S_PIAN2}, // S_PIAN1
|
{SPR_NTPN, 1, 2, {A_Look}, 1, 1, S_PIAN_LOOK3}, // S_PIAN_LOOK2
|
||||||
{SPR_NTPN, 1, 4, {NULL}, 0, 0, S_PIAN3}, // S_PIAN2
|
{SPR_NTPN, 2, 2, {A_Look}, 1, 1, S_PIAN_LOOK1}, // S_PIAN_LOOK3
|
||||||
{SPR_NTPN, 2, 4, {NULL}, 0, 0, S_PIAN4}, // S_PIAN3
|
{SPR_NTPN, 0, 2, {A_JetgThink}, 0, 0, S_PIAN_FLY2}, // S_PIAN_FLY1
|
||||||
{SPR_NTPN, 3, 4, {NULL}, 0, 0, S_PIAN5}, // S_PIAN4
|
{SPR_NTPN, 1, 2, {NULL}, 0, 0, S_PIAN_FLY3}, // S_PIAN_FLY2
|
||||||
{SPR_NTPN, 2, 4, {NULL}, 0, 0, S_PIAN6}, // S_PIAN5
|
{SPR_NTPN, 2, 2, {NULL}, 0, 0, S_PIAN_FLY1}, // S_PIAN_FLY3
|
||||||
{SPR_NTPN, 1, 4, {NULL}, 0, 0, S_PIAN1}, // S_PIAN6
|
{SPR_NTPN, 3|FF_ANIMATE, 24, {NULL}, 2, 2, S_PIAN_FLY1}, // S_PIAN_SING
|
||||||
{SPR_NTPN, 5|FF_ANIMATE, 4, {NULL}, 1, 4, S_PIAN1}, // S_PIANSING
|
|
||||||
|
|
||||||
// Shleep
|
// Shleep
|
||||||
{SPR_SHLP, 0, 15, {NULL}, 0, 0, S_SHLEEP2}, // S_SHLEEP1
|
{SPR_SHLP, 0, 15, {NULL}, 0, 0, S_SHLEEP2}, // S_SHLEEP1
|
||||||
|
@ -3883,23 +3936,23 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_SPRK, FF_TRANS20|FF_ANIMATE|9, 18, {NULL}, 8, 2, S_NULL}, // S_SPRK3
|
{SPR_SPRK, FF_TRANS20|FF_ANIMATE|9, 18, {NULL}, 8, 2, S_NULL}, // S_SPRK3
|
||||||
|
|
||||||
// Robot Explosion
|
// Robot Explosion
|
||||||
{SPR_BOM1, 0, 0, {A_FlickySpawn}, 0, 0, S_XPLD1}, // S_XPLD_FLICKY
|
{SPR_BOM1, 0, 0, {A_FlickySpawn}, 0, 0, S_XPLD1}, // S_XPLD_FLICKY
|
||||||
{SPR_BOM1, 0, 2, {A_Scream}, 0, 0, S_XPLD2}, // S_XPLD1
|
{SPR_BOM1, 0, 2, {A_ShadowScream}, 0, 0, S_XPLD2}, // S_XPLD1
|
||||||
{SPR_BOM1, 1, 2, {NULL}, 0, 0, S_XPLD3}, // S_XPLD2
|
{SPR_BOM1, 1, 2, {NULL}, 0, 0, S_XPLD3}, // S_XPLD2
|
||||||
{SPR_BOM1, 2, 3, {NULL}, 0, 0, S_XPLD4}, // S_XPLD3
|
{SPR_BOM1, 2, 3, {NULL}, 0, 0, S_XPLD4}, // S_XPLD3
|
||||||
{SPR_BOM1, 3, 3, {NULL}, 0, 0, S_XPLD5}, // S_XPLD4
|
{SPR_BOM1, 3, 3, {NULL}, 0, 0, S_XPLD5}, // S_XPLD4
|
||||||
{SPR_BOM1, 4, 4, {NULL}, 0, 0, S_XPLD6}, // S_XPLD5
|
{SPR_BOM1, 4, 4, {NULL}, 0, 0, S_XPLD6}, // S_XPLD5
|
||||||
{SPR_BOM1, 5, 4, {NULL}, 0, 0, S_NULL}, // S_XPLD6
|
{SPR_BOM1, 5, 4, {NULL}, 0, 0, S_NULL}, // S_XPLD6
|
||||||
|
|
||||||
{SPR_BOM1, FF_ANIMATE, 21, {NULL}, 5, 4, S_INVISIBLE}, // S_XPLD_EGGTRAP
|
{SPR_BOM1, FF_ANIMATE, 21, {NULL}, 5, 4, S_INVISIBLE}, // S_XPLD_EGGTRAP
|
||||||
|
|
||||||
// Underwater Explosion
|
// Underwater Explosion
|
||||||
{SPR_BOM4, 0, 3, {A_Scream}, 0, 0, S_WPLD2}, // S_WPLD1
|
{SPR_BOM4, 0, 3, {A_ShadowScream}, 0, 0, S_WPLD2}, // S_WPLD1
|
||||||
{SPR_BOM4, 1, 3, {NULL}, 0, 0, S_WPLD3}, // S_WPLD2
|
{SPR_BOM4, 1, 3, {NULL}, 0, 0, S_WPLD3}, // S_WPLD2
|
||||||
{SPR_BOM4, 2, 3, {NULL}, 0, 0, S_WPLD4}, // S_WPLD3
|
{SPR_BOM4, 2, 3, {NULL}, 0, 0, S_WPLD4}, // S_WPLD3
|
||||||
{SPR_BOM4, 3, 3, {NULL}, 0, 0, S_WPLD5}, // S_WPLD4
|
{SPR_BOM4, 3, 3, {NULL}, 0, 0, S_WPLD5}, // S_WPLD4
|
||||||
{SPR_BOM4, 4, 3, {NULL}, 0, 0, S_WPLD6}, // S_WPLD5
|
{SPR_BOM4, 4, 3, {NULL}, 0, 0, S_WPLD6}, // S_WPLD5
|
||||||
{SPR_BOM4, 5, 3, {NULL}, 0, 0, S_NULL}, // S_WPLD6
|
{SPR_BOM4, 5, 3, {NULL}, 0, 0, S_NULL}, // S_WPLD6
|
||||||
|
|
||||||
{SPR_DUST, FF_TRANS40, 4, {NULL}, 0, 0, S_DUST2}, // S_DUST1
|
{SPR_DUST, FF_TRANS40, 4, {NULL}, 0, 0, S_DUST2}, // S_DUST1
|
||||||
{SPR_DUST, 1|FF_TRANS50, 5, {NULL}, 0, 0, S_DUST3}, // S_DUST2
|
{SPR_DUST, 1|FF_TRANS50, 5, {NULL}, 0, 0, S_DUST3}, // S_DUST2
|
||||||
|
@ -5601,8 +5654,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_EGGMOBILE_FLEE1, // xdeathstate
|
S_EGGMOBILE_FLEE1, // xdeathstate
|
||||||
sfx_s3kb4, // deathsound
|
sfx_s3kb4, // deathsound
|
||||||
4, // speed
|
4, // speed
|
||||||
24*FRACUNIT, // radius
|
36*FRACUNIT, // radius
|
||||||
76*FRACUNIT, // height
|
84*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
sfx_None, // mass
|
sfx_None, // mass
|
||||||
3, // damage
|
3, // damage
|
||||||
|
@ -5736,8 +5789,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_EGGMOBILE2_FLEE1,// xdeathstate
|
S_EGGMOBILE2_FLEE1,// xdeathstate
|
||||||
sfx_s3kb4, // deathsound
|
sfx_s3kb4, // deathsound
|
||||||
2*FRACUNIT, // speed
|
2*FRACUNIT, // speed
|
||||||
24*FRACUNIT, // radius
|
36*FRACUNIT, // radius
|
||||||
76*FRACUNIT, // height
|
84*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
0, // mass
|
0, // mass
|
||||||
3, // damage
|
3, // damage
|
||||||
|
@ -5844,7 +5897,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_EGGMOBILE3_FLEE1, // xdeathstate
|
S_EGGMOBILE3_FLEE1, // xdeathstate
|
||||||
sfx_s3kb4, // deathsound
|
sfx_s3kb4, // deathsound
|
||||||
8*FRACUNIT, // speed
|
8*FRACUNIT, // speed
|
||||||
32*FRACUNIT, // radius
|
36*FRACUNIT, // radius
|
||||||
116*FRACUNIT, // height
|
116*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
MT_FAKEMOBILE, // mass
|
MT_FAKEMOBILE, // mass
|
||||||
|
@ -5871,7 +5924,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_mswarp, // deathsound
|
sfx_mswarp, // deathsound
|
||||||
8*FRACUNIT, // speed
|
8*FRACUNIT, // speed
|
||||||
32*FRACUNIT, // radius
|
36*FRACUNIT, // radius
|
||||||
116*FRACUNIT, // height
|
116*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
0, // mass
|
0, // mass
|
||||||
|
@ -5925,8 +5978,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_EGGMOBILE4_FLEE1,// xdeathstate
|
S_EGGMOBILE4_FLEE1,// xdeathstate
|
||||||
sfx_s3kb4, // deathsound
|
sfx_s3kb4, // deathsound
|
||||||
0, // speed
|
0, // speed
|
||||||
24*FRACUNIT, // radius
|
36*FRACUNIT, // radius
|
||||||
76*FRACUNIT, // height
|
84*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
0, // mass
|
0, // mass
|
||||||
3, // damage
|
3, // damage
|
||||||
|
@ -7977,7 +8030,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
DMG_SPIKE, // mass
|
DMG_SPIKE, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_SOLID|MF_SCENERY, // flags
|
MF_NOBLOCKMAP|MF_SCENERY|MF_NOCLIPHEIGHT, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -8004,7 +8057,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
DMG_SPIKE, // mass
|
DMG_SPIKE, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_SOLID|MF_NOGRAVITY|MF_SCENERY|MF_PAPERCOLLISION, // flags
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY|MF_NOCLIPHEIGHT|MF_PAPERCOLLISION, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -8031,7 +8084,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
4, // mass
|
4, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY|MF_NOCLIP|MF_NOCLIPTHING, // flags
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -9776,8 +9829,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
sfx_None, // painsound
|
sfx_None, // painsound
|
||||||
S_NULL, // meleestate
|
S_NULL, // meleestate
|
||||||
S_NULL, // missilestate
|
S_NULL, // missilestate
|
||||||
S_MINE_BOOM1, // deathstate
|
S_XPLD1, // deathstate
|
||||||
S_MINE_BOOM1, // xdeathstate
|
S_XPLD1, // xdeathstate
|
||||||
sfx_cybdth, // deathsound
|
sfx_cybdth, // deathsound
|
||||||
0, // speed
|
0, // speed
|
||||||
8*FRACUNIT, // radius
|
8*FRACUNIT, // radius
|
||||||
|
@ -9979,6 +10032,114 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_TUTORIALPLANT
|
||||||
|
799, // doomednum
|
||||||
|
S_NULL, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
32*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_TUTORIALLEAF
|
||||||
|
-1, // doomednum
|
||||||
|
S_TUTORIALLEAF1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
32*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_TUTORIALFLOWER
|
||||||
|
-1, // doomednum
|
||||||
|
S_TUTORIALFLOWER1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
32*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_TUTORIALFLOWERF
|
||||||
|
-1, // doomednum
|
||||||
|
S_TUTORIALFLOWERF1, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
32*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_GFZFLOWER1
|
{ // MT_GFZFLOWER1
|
||||||
800, // doomednum
|
800, // doomednum
|
||||||
S_GFZFLOWERA, // spawnstate
|
S_GFZFLOWERA, // spawnstate
|
||||||
|
@ -20119,28 +20280,28 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_PIAN
|
{ // MT_PIAN
|
||||||
1602, // doomednum
|
1602, // doomednum
|
||||||
S_PIAN0, // spawnstate
|
S_PIAN_LOOK1, // spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
S_PIAN1, // seestate
|
S_PIAN_FLY1, // seestate
|
||||||
sfx_None, // seesound
|
sfx_None, // seesound
|
||||||
0, // reactiontime
|
0, // reactiontime
|
||||||
sfx_None, // attacksound
|
sfx_None, // attacksound
|
||||||
S_NULL, // painstate
|
S_NULL, // painstate
|
||||||
200, // painchance
|
200, // painchance
|
||||||
sfx_None, // painsound
|
sfx_None, // painsound
|
||||||
S_PIANSING, // meleestate
|
S_NULL, // meleestate
|
||||||
S_NULL, // missilestate
|
S_PIAN_SING, // missilestate
|
||||||
S_NULL, // deathstate
|
S_NULL, // deathstate
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
FRACUNIT, // speed
|
FRACUNIT, // speed
|
||||||
16*FRACUNIT, // radius
|
16*FRACUNIT, // radius
|
||||||
32*FRACUNIT, // height
|
40*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
16, // mass
|
16, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_SLIDEME|MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY, // flags
|
MF_SLIDEME|MF_NOGRAVITY, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -21685,6 +21846,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
MF_NOBLOCKMAP|MF_MISSILE|MF_NOGRAVITY|MF_NOSECTOR, // flags
|
MF_NOBLOCKMAP|MF_MISSILE|MF_NOGRAVITY|MF_NOSECTOR, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_RAY
|
||||||
|
-1, // doomednum
|
||||||
|
S_NULL, // spawnstate
|
||||||
|
0, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
0, // radius
|
||||||
|
0, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOSECTOR|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
skincolor_t skincolors[MAXSKINCOLORS] = {
|
skincolor_t skincolors[MAXSKINCOLORS] = {
|
||||||
|
|
86
src/info.h
86
src/info.h
|
@ -2,7 +2,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -44,6 +44,8 @@ enum actionnum
|
||||||
A_FACETRACER,
|
A_FACETRACER,
|
||||||
A_SCREAM,
|
A_SCREAM,
|
||||||
A_BOSSDEATH,
|
A_BOSSDEATH,
|
||||||
|
A_SETSHADOWSCALE,
|
||||||
|
A_SHADOWSCREAM,
|
||||||
A_CUSTOMPOWER,
|
A_CUSTOMPOWER,
|
||||||
A_GIVEWEAPON,
|
A_GIVEWEAPON,
|
||||||
A_RINGBOX,
|
A_RINGBOX,
|
||||||
|
@ -177,6 +179,8 @@ enum actionnum
|
||||||
A_SETOBJECTFLAGS2,
|
A_SETOBJECTFLAGS2,
|
||||||
A_RANDOMSTATE,
|
A_RANDOMSTATE,
|
||||||
A_RANDOMSTATERANGE,
|
A_RANDOMSTATERANGE,
|
||||||
|
A_STATERANGEBYANGLE,
|
||||||
|
A_STATERANGEBYPARAMETER,
|
||||||
A_DUALACTION,
|
A_DUALACTION,
|
||||||
A_REMOTEACTION,
|
A_REMOTEACTION,
|
||||||
A_TOGGLEFLAMEJET,
|
A_TOGGLEFLAMEJET,
|
||||||
|
@ -310,6 +314,8 @@ void A_FaceTarget();
|
||||||
void A_FaceTracer();
|
void A_FaceTracer();
|
||||||
void A_Scream();
|
void A_Scream();
|
||||||
void A_BossDeath();
|
void A_BossDeath();
|
||||||
|
void A_SetShadowScale();
|
||||||
|
void A_ShadowScream(); // MARIA!!!!!!
|
||||||
void A_CustomPower(); // Use this for a custom power
|
void A_CustomPower(); // Use this for a custom power
|
||||||
void A_GiveWeapon(); // Gives the player weapon(s)
|
void A_GiveWeapon(); // Gives the player weapon(s)
|
||||||
void A_RingBox(); // Obtained Ring Box Tails
|
void A_RingBox(); // Obtained Ring Box Tails
|
||||||
|
@ -443,6 +449,8 @@ void A_SetObjectFlags();
|
||||||
void A_SetObjectFlags2();
|
void A_SetObjectFlags2();
|
||||||
void A_RandomState();
|
void A_RandomState();
|
||||||
void A_RandomStateRange();
|
void A_RandomStateRange();
|
||||||
|
void A_StateRangeByAngle();
|
||||||
|
void A_StateRangeByParameter();
|
||||||
void A_DualAction();
|
void A_DualAction();
|
||||||
void A_RemoteAction();
|
void A_RemoteAction();
|
||||||
void A_ToggleFlameJet();
|
void A_ToggleFlameJet();
|
||||||
|
@ -737,6 +745,10 @@ typedef enum sprite
|
||||||
// The letter
|
// The letter
|
||||||
SPR_LETR,
|
SPR_LETR,
|
||||||
|
|
||||||
|
// Tutorial scenery
|
||||||
|
SPR_TUPL,
|
||||||
|
SPR_TUPF,
|
||||||
|
|
||||||
// Greenflower Scenery
|
// Greenflower Scenery
|
||||||
SPR_FWR1,
|
SPR_FWR1,
|
||||||
SPR_FWR2, // GFZ Sunflower
|
SPR_FWR2, // GFZ Sunflower
|
||||||
|
@ -2551,6 +2563,56 @@ typedef enum state
|
||||||
// The letter
|
// The letter
|
||||||
S_LETTER,
|
S_LETTER,
|
||||||
|
|
||||||
|
// Tutorial scenery
|
||||||
|
S_TUTORIALLEAF1,
|
||||||
|
S_TUTORIALLEAF2,
|
||||||
|
S_TUTORIALLEAF3,
|
||||||
|
S_TUTORIALLEAF4,
|
||||||
|
S_TUTORIALLEAF5,
|
||||||
|
S_TUTORIALLEAF6,
|
||||||
|
S_TUTORIALLEAF7,
|
||||||
|
S_TUTORIALLEAF8,
|
||||||
|
S_TUTORIALLEAF9,
|
||||||
|
S_TUTORIALLEAF10,
|
||||||
|
S_TUTORIALLEAF11,
|
||||||
|
S_TUTORIALLEAF12,
|
||||||
|
S_TUTORIALLEAF13,
|
||||||
|
S_TUTORIALLEAF14,
|
||||||
|
S_TUTORIALLEAF15,
|
||||||
|
S_TUTORIALLEAF16,
|
||||||
|
S_TUTORIALFLOWER1,
|
||||||
|
S_TUTORIALFLOWER2,
|
||||||
|
S_TUTORIALFLOWER3,
|
||||||
|
S_TUTORIALFLOWER4,
|
||||||
|
S_TUTORIALFLOWER5,
|
||||||
|
S_TUTORIALFLOWER6,
|
||||||
|
S_TUTORIALFLOWER7,
|
||||||
|
S_TUTORIALFLOWER8,
|
||||||
|
S_TUTORIALFLOWER9,
|
||||||
|
S_TUTORIALFLOWER10,
|
||||||
|
S_TUTORIALFLOWER11,
|
||||||
|
S_TUTORIALFLOWER12,
|
||||||
|
S_TUTORIALFLOWER13,
|
||||||
|
S_TUTORIALFLOWER14,
|
||||||
|
S_TUTORIALFLOWER15,
|
||||||
|
S_TUTORIALFLOWER16,
|
||||||
|
S_TUTORIALFLOWERF1,
|
||||||
|
S_TUTORIALFLOWERF2,
|
||||||
|
S_TUTORIALFLOWERF3,
|
||||||
|
S_TUTORIALFLOWERF4,
|
||||||
|
S_TUTORIALFLOWERF5,
|
||||||
|
S_TUTORIALFLOWERF6,
|
||||||
|
S_TUTORIALFLOWERF7,
|
||||||
|
S_TUTORIALFLOWERF8,
|
||||||
|
S_TUTORIALFLOWERF9,
|
||||||
|
S_TUTORIALFLOWERF10,
|
||||||
|
S_TUTORIALFLOWERF11,
|
||||||
|
S_TUTORIALFLOWERF12,
|
||||||
|
S_TUTORIALFLOWERF13,
|
||||||
|
S_TUTORIALFLOWERF14,
|
||||||
|
S_TUTORIALFLOWERF15,
|
||||||
|
S_TUTORIALFLOWERF16,
|
||||||
|
|
||||||
// GFZ flowers
|
// GFZ flowers
|
||||||
S_GFZFLOWERA,
|
S_GFZFLOWERA,
|
||||||
S_GFZFLOWERB,
|
S_GFZFLOWERB,
|
||||||
|
@ -4093,14 +4155,13 @@ typedef enum state
|
||||||
S_NIGHTOPIANHELPER9,
|
S_NIGHTOPIANHELPER9,
|
||||||
|
|
||||||
// Nightopian
|
// Nightopian
|
||||||
S_PIAN0,
|
S_PIAN_LOOK1,
|
||||||
S_PIAN1,
|
S_PIAN_LOOK2,
|
||||||
S_PIAN2,
|
S_PIAN_LOOK3,
|
||||||
S_PIAN3,
|
S_PIAN_FLY1,
|
||||||
S_PIAN4,
|
S_PIAN_FLY2,
|
||||||
S_PIAN5,
|
S_PIAN_FLY3,
|
||||||
S_PIAN6,
|
S_PIAN_SING,
|
||||||
S_PIANSING,
|
|
||||||
|
|
||||||
// Shleep
|
// Shleep
|
||||||
S_SHLEEP1,
|
S_SHLEEP1,
|
||||||
|
@ -4583,6 +4644,12 @@ typedef enum mobj_type
|
||||||
// The letter
|
// The letter
|
||||||
MT_LETTER,
|
MT_LETTER,
|
||||||
|
|
||||||
|
// Tutorial Scenery
|
||||||
|
MT_TUTORIALPLANT,
|
||||||
|
MT_TUTORIALLEAF,
|
||||||
|
MT_TUTORIALFLOWER,
|
||||||
|
MT_TUTORIALFLOWERF,
|
||||||
|
|
||||||
// Greenflower Scenery
|
// Greenflower Scenery
|
||||||
MT_GFZFLOWER1,
|
MT_GFZFLOWER1,
|
||||||
MT_GFZFLOWER2,
|
MT_GFZFLOWER2,
|
||||||
|
@ -5089,6 +5156,7 @@ typedef enum mobj_type
|
||||||
MT_YELLOWBRICKDEBRIS, // for CEZ3
|
MT_YELLOWBRICKDEBRIS, // for CEZ3
|
||||||
|
|
||||||
MT_NAMECHECK,
|
MT_NAMECHECK,
|
||||||
|
MT_RAY, // General purpose mobj
|
||||||
|
|
||||||
MT_FIRSTFREESLOT,
|
MT_FIRSTFREESLOT,
|
||||||
MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1,
|
MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||||||
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
// Copyright (C) 1999-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -3487,7 +3487,7 @@ static int lib_gAddPlayer(lua_State *L)
|
||||||
|
|
||||||
// Read the bot name, if given
|
// Read the bot name, if given
|
||||||
if (!lua_isnoneornil(L, 3))
|
if (!lua_isnoneornil(L, 3))
|
||||||
strcpy(player_names[newplayernum], luaL_checkstring(L, 3));
|
strlcpy(player_names[newplayernum], luaL_checkstring(L, 3), sizeof(*player_names));
|
||||||
|
|
||||||
bot = luaL_optinteger(L, 4, 3);
|
bot = luaL_optinteger(L, 4, 3);
|
||||||
newplayer->bot = (bot >= BOT_NONE && bot <= BOT_MPAI) ? bot : BOT_MPAI;
|
newplayer->bot = (bot >= BOT_NONE && bot <= BOT_MPAI) ? bot : BOT_MPAI;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2016-2021 by Iestyn "Monster Iestyn" Jealous.
|
// Copyright (C) 2016-2022 by Iestyn "Monster Iestyn" Jealous.
|
||||||
// Copyright (C) 2016-2021 by Sonic Team Junior.
|
// Copyright (C) 2016-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -246,7 +246,6 @@ int LUA_HookLib(lua_State *L)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: remove in next backwards incompatible release */
|
/* TODO: remove in next backwards incompatible release */
|
||||||
#if MODID == 18
|
|
||||||
int lib_hudadd(lua_State *L);/* yeah compiler */
|
int lib_hudadd(lua_State *L);/* yeah compiler */
|
||||||
int lib_hudadd(lua_State *L)
|
int lib_hudadd(lua_State *L)
|
||||||
{
|
{
|
||||||
|
@ -260,7 +259,6 @@ int lib_hudadd(lua_State *L)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct Hook_State Hook_State;
|
typedef struct Hook_State Hook_State;
|
||||||
typedef void (*Hook_Callback)(Hook_State *);
|
typedef void (*Hook_Callback)(Hook_State *);
|
||||||
|
@ -347,6 +345,10 @@ static boolean prepare_mobj_hook
|
||||||
int hook_type,
|
int hook_type,
|
||||||
mobjtype_t mobj_type
|
mobjtype_t mobj_type
|
||||||
){
|
){
|
||||||
|
#ifdef PARANOIA
|
||||||
|
if (mobj_type == MT_NULL)
|
||||||
|
I_Error("MT_NULL has been passed to a mobj hook\n");
|
||||||
|
#endif
|
||||||
return init_hook_type(hook, default_status,
|
return init_hook_type(hook, default_status,
|
||||||
hook_type, mobj_type, NULL,
|
hook_type, mobj_type, NULL,
|
||||||
mobj_hook_available(hook_type, mobj_type));
|
mobj_hook_available(hook_type, mobj_type));
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2014-2016 by John "JTE" Muniz.
|
// Copyright (C) 2014-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2014-2021 by Sonic Team Junior.
|
// Copyright (C) 2014-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2014-2016 by John "JTE" Muniz.
|
// Copyright (C) 2014-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2014-2021 by Sonic Team Junior.
|
// Copyright (C) 2014-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2021 by Sonic Team Junior.
|
// Copyright (C) 2021-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
@ -96,6 +96,7 @@ enum line_e {
|
||||||
line_v2,
|
line_v2,
|
||||||
line_dx,
|
line_dx,
|
||||||
line_dy,
|
line_dy,
|
||||||
|
line_angle,
|
||||||
line_flags,
|
line_flags,
|
||||||
line_special,
|
line_special,
|
||||||
line_tag,
|
line_tag,
|
||||||
|
@ -121,6 +122,7 @@ static const char *const line_opt[] = {
|
||||||
"v2",
|
"v2",
|
||||||
"dx",
|
"dx",
|
||||||
"dy",
|
"dy",
|
||||||
|
"angle",
|
||||||
"flags",
|
"flags",
|
||||||
"special",
|
"special",
|
||||||
"tag",
|
"tag",
|
||||||
|
@ -867,6 +869,9 @@ static int line_get(lua_State *L)
|
||||||
case line_dy:
|
case line_dy:
|
||||||
lua_pushfixed(L, line->dy);
|
lua_pushfixed(L, line->dy);
|
||||||
return 1;
|
return 1;
|
||||||
|
case line_angle:
|
||||||
|
lua_pushangle(L, line->angle);
|
||||||
|
return 1;
|
||||||
case line_flags:
|
case line_flags:
|
||||||
lua_pushinteger(L, line->flags);
|
lua_pushinteger(L, line->flags);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SONIC ROBO BLAST 2
|
// SONIC ROBO BLAST 2
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
// Copyright (C) 2012-2016 by John "JTE" Muniz.
|
||||||
// Copyright (C) 2012-2021 by Sonic Team Junior.
|
// Copyright (C) 2012-2022 by Sonic Team Junior.
|
||||||
//
|
//
|
||||||
// This program is free software distributed under the
|
// This program is free software distributed under the
|
||||||
// terms of the GNU General Public License, version 2.
|
// terms of the GNU General Public License, version 2.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue