X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_game.pas;h=6ba4297d6f5b4c4b8e61f4559fd7deb0e9444cba;hb=ba69b47c522858ed70d450d1fec26933472c080b;hp=7f6fa0a5d83573ffd3462fe9be1edf24b3bde545;hpb=c18b1e4c69177c04f30ae57521578fc07d482b11;p=d2df-sdl.git diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 7f6fa0a..6ba4297 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -124,6 +124,7 @@ function g_Game_GetMegaWADInfo(WAD: String): TMegaWADInfo; procedure g_Game_ChatSound(Text: String; Taunt: Boolean = True); procedure g_Game_Announce_GoodShot(SpawnerUID: Word); procedure g_Game_Announce_KillCombo(Param: Integer); +procedure g_Game_Announce_BodyKill(SpawnerUID: Word); procedure g_Game_StartVote(Command, Initiator: string); procedure g_Game_CheckVote; procedure g_TakeScreenShot(); @@ -201,6 +202,7 @@ const DE_GLOBEVENT = 0; DE_BFGHIT = 1; DE_KILLCOMBO = 2; + DE_BODYKILL = 3; ANNOUNCE_NONE = 0; ANNOUNCE_ME = 1; @@ -234,6 +236,8 @@ var gAnnouncer: Byte = ANNOUNCE_NONE; goodsnd: array[0..3] of TPlayableSound; killsnd: array[0..3] of TPlayableSound; + hahasnd: array[0..2] of TPlayableSound; + gBodyKillEvent: Integer = -1; gDefInterTime: ShortInt = -1; gInterEndTime: LongWord = 0; gInterTime: LongWord = 0; @@ -1478,6 +1482,7 @@ function GetRandomSpectMode(Current: Byte): Byte; label retry; begin + Result := Current; retry: case Random(7) of 0: Result := SPECT_STATS; @@ -2183,6 +2188,9 @@ begin if g_Game_IsNet and g_Game_IsServer then MH_SEND_GameEvent(NET_EV_KILLCOMBO, gDelayedEvents[a].DENum); end; + DE_BODYKILL: + if gGameOn then + g_Game_Announce_BodyKill(gDelayedEvents[a].DENum); end; gDelayedEvents[a].Pending := False; end; @@ -2285,6 +2293,7 @@ begin g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_D', GameWAD+':TEXTURES\FLAGHUD_B_DROP'); g_Texture_CreateWADEx('TEXTURE_PLAYER_TALKBUBBLE', GameWAD+':TEXTURES\TALKBUBBLE'); g_Texture_CreateWADEx('TEXTURE_PLAYER_INVULPENTA', GameWAD+':TEXTURES\PENTA'); + g_Texture_CreateWADEx('TEXTURE_PLAYER_INDICATOR', GameWAD+':TEXTURES\PLRIND'); hasPBarGfx := true; if not g_Texture_CreateWADEx('UI_GFX_PBAR_LEFT', GameWAD+':TEXTURES\LLEFT') then hasPBarGfx := false; @@ -2309,7 +2318,12 @@ begin end; g_Frames_CreateWAD(nil, 'FRAMES_TELEPORT', GameWAD+':TEXTURES\TELEPORT', 64, 64, 10, False); - g_Frames_CreateWAD(nil, 'FRAMES_PUNCH', GameWAD+':TEXTURES\PUNCH', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH', GameWAD+':WEAPONS\PUNCH', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_UP', GameWAD+':WEAPONS\PUNCH_UP', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_DN', GameWAD+':WEAPONS\PUNCH_DN', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_BERSERK', GameWAD+':WEAPONS\PUNCHB', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_BERSERK_UP', GameWAD+':WEAPONS\PUNCHB_UP', 64, 64, 4, False); + g_Frames_CreateWAD(nil, 'FRAMES_PUNCH_BERSERK_DN', GameWAD+':WEAPONS\PUNCHB_DN', 64, 64, 4, False); g_Sound_CreateWADEx('SOUND_GAME_TELEPORT', GameWAD+':SOUNDS\TELEPORT'); g_Sound_CreateWADEx('SOUND_GAME_NOTELEPORT', GameWAD+':SOUNDS\NOTELEPORT'); g_Sound_CreateWADEx('SOUND_GAME_DOOROPEN', GameWAD+':SOUNDS\DOOROPEN'); @@ -2329,6 +2343,9 @@ begin g_Sound_CreateWADEx('SOUND_ANNOUNCER_KILL3X', GameWAD+':SOUNDS\KILL3X'); g_Sound_CreateWADEx('SOUND_ANNOUNCER_KILL4X', GameWAD+':SOUNDS\KILL4X'); g_Sound_CreateWADEx('SOUND_ANNOUNCER_KILLMX', GameWAD+':SOUNDS\KILLMX'); + g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA1', GameWAD+':SOUNDS\MUHAHA1'); + g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA2', GameWAD+':SOUNDS\MUHAHA2'); + g_Sound_CreateWADEx('SOUND_ANNOUNCER_MUHAHA3', GameWAD+':SOUNDS\MUHAHA3'); goodsnd[0] := TPlayableSound.Create(); goodsnd[1] := TPlayableSound.Create(); @@ -2350,6 +2367,14 @@ begin killsnd[2].SetByName('SOUND_ANNOUNCER_KILL4X'); killsnd[3].SetByName('SOUND_ANNOUNCER_KILLMX'); + hahasnd[0] := TPlayableSound.Create(); + hahasnd[1] := TPlayableSound.Create(); + hahasnd[2] := TPlayableSound.Create(); + + hahasnd[0].SetByName('SOUND_ANNOUNCER_MUHAHA1'); + hahasnd[1].SetByName('SOUND_ANNOUNCER_MUHAHA2'); + hahasnd[2].SetByName('SOUND_ANNOUNCER_MUHAHA3'); + g_Game_LoadChatSounds(GameWAD+':CHATSND\SNDCFG'); g_Game_SetLoadingText(_lc[I_LOAD_ITEMS_DATA], 0, False); @@ -2387,6 +2412,11 @@ begin g_Texture_Delete('TEXTURE_PLAYER_INVULPENTA'); g_Frames_DeleteByName('FRAMES_TELEPORT'); g_Frames_DeleteByName('FRAMES_PUNCH'); + g_Frames_DeleteByName('FRAMES_PUNCH_UP'); + g_Frames_DeleteByName('FRAMES_PUNCH_DN'); + g_Frames_DeleteByName('FRAMES_PUNCH_BERSERK'); + g_Frames_DeleteByName('FRAMES_PUNCH_BERSERK_UP'); + g_Frames_DeleteByName('FRAMES_PUNCH_BERSERK_DN'); g_Sound_Delete('SOUND_GAME_TELEPORT'); g_Sound_Delete('SOUND_GAME_NOTELEPORT'); g_Sound_Delete('SOUND_GAME_DOOROPEN'); @@ -2418,6 +2448,14 @@ begin g_Sound_Delete('SOUND_ANNOUNCER_KILL4X'); g_Sound_Delete('SOUND_ANNOUNCER_KILLMX'); + hahasnd[0].Free(); + hahasnd[1].Free(); + hahasnd[2].Free(); + + g_Sound_Delete('SOUND_ANNOUNCER_MUHAHA1'); + g_Sound_Delete('SOUND_ANNOUNCER_MUHAHA2'); + g_Sound_Delete('SOUND_ANNOUNCER_MUHAHA3'); + g_Game_FreeChatSounds(); DataLoaded := False; @@ -2996,10 +3034,10 @@ begin aY2 := aY + aY2 - 1; case LiftType of - 0: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 72, 36, 0); - 1: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 124, 96, 0); - 2: e_DrawFillQuad(aX, aY, aX2, aY2, 200, 80, 4, 0); - 3: e_DrawFillQuad(aX, aY, aX2, aY2, 252, 140, 56, 0); + LIFTTYPE_UP: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 72, 36, 0); + LIFTTYPE_DOWN: e_DrawFillQuad(aX, aY, aX2, aY2, 116, 124, 96, 0); + LIFTTYPE_LEFT: e_DrawFillQuad(aX, aY, aX2, aY2, 200, 80, 4, 0); + LIFTTYPE_RIGHT: e_DrawFillQuad(aX, aY, aX2, aY2, 252, 140, 56, 0); end; end; end; @@ -3528,6 +3566,8 @@ begin renderMapInternal(-c, -d, true); + if (gGameSettings.GameMode <> GM_SINGLE) and gPlayerIndicator then + p.DrawIndicator(); if p.FSpectator then e_TextureFontPrintEx(p.GameX + PLAYER_RECT_CX - 4, p.GameY + PLAYER_RECT_CY - 4, @@ -7302,6 +7342,25 @@ begin killsnd[n].Play(); end; +procedure g_Game_Announce_BodyKill(SpawnerUID: Word); +var + a: Integer; +begin + case gAnnouncer of + ANNOUNCE_NONE: + Exit; + ANNOUNCE_ME, + ANNOUNCE_MEPLUS: + if not g_Game_IsWatchedPlayer(SpawnerUID) then + Exit; + end; + for a := 0 to 2 do + if hahasnd[a].IsPlaying() then + Exit; + + hahasnd[Random(3)].Play(); +end; + procedure g_Game_StartVote(Command, Initiator: string); var Need: Integer;