From 59f7e71450c89e1cc127e0cd71eeb0a62cb689c7 Mon Sep 17 00:00:00 2001 From: James Monroe Date: Thu, 4 Apr 2013 18:21:13 -0500 Subject: [PATCH] Jedi Academy Patch 1.01 --- base/default.cfg | 109 ++ base/ext_data/MP/netf_overrides.txt | 155 ++ base/ext_data/MP/psf_overrides.txt | 181 ++ base/ext_data/MP/vssver.scc | Bin 0 -> 64 bytes base/ext_data/dms.dat | 1757 +++++++++++++++++ base/ext_data/items.dat | 782 ++++++++ base/ext_data/npcs/Bartender.npc | 25 + base/ext_data/npcs/BespinCop.npc | 57 + base/ext_data/npcs/Desann.npc | 53 + base/ext_data/npcs/Elder.npc | 55 + base/ext_data/npcs/Galak.npc | 22 + base/ext_data/npcs/Galak_Mech.npc | 36 + base/ext_data/npcs/Glider.npc | 21 + base/ext_data/npcs/Gran.npc | 125 ++ base/ext_data/npcs/HazardTrooper.npc | 92 + base/ext_data/npcs/Howler.npc | 23 + base/ext_data/npcs/ImpCommander.npc | 34 + base/ext_data/npcs/ImpOfficer.npc | 30 + base/ext_data/npcs/ImpWorker.npc | 101 + base/ext_data/npcs/Imperial.npc | 29 + base/ext_data/npcs/Jan.npc | 30 + base/ext_data/npcs/Jedi.npc | 102 + base/ext_data/npcs/JediF.npc | 49 + base/ext_data/npcs/JediMaster.npc | 47 + base/ext_data/npcs/JediTrainer.npc | 48 + base/ext_data/npcs/Kyle.npc | 91 + base/ext_data/npcs/Lando.npc | 62 + base/ext_data/npcs/Luke.npc | 49 + base/ext_data/npcs/Merchant.npc | 27 + base/ext_data/npcs/Minemonster.npc | 24 + base/ext_data/npcs/MonMothma.npc | 25 + base/ext_data/npcs/MorganKatarn.npc | 25 + base/ext_data/npcs/Noghri.npc | 27 + base/ext_data/npcs/Prisoner.npc | 54 + base/ext_data/npcs/Ragnos.npc | 20 + base/ext_data/npcs/Rax.npc | 25 + base/ext_data/npcs/Rebel.npc | 61 + base/ext_data/npcs/Rebel2.npc | 27 + base/ext_data/npcs/Reborn.npc | 50 + base/ext_data/npcs/RebornAcrobat.npc | 51 + base/ext_data/npcs/RebornBoss.npc | 51 + base/ext_data/npcs/RebornChiss.npc | 54 + base/ext_data/npcs/RebornFencer.npc | 52 + base/ext_data/npcs/RebornForceUser.npc | 51 + base/ext_data/npcs/RebornRodian.npc | 52 + base/ext_data/npcs/RebornTrandoshan.npc | 50 + base/ext_data/npcs/RebornWeequay.npc | 49 + base/ext_data/npcs/Reborn_dual.npc | 103 + base/ext_data/npcs/Reborn_new.npc | 104 + base/ext_data/npcs/Reborn_staff.npc | 103 + base/ext_data/npcs/Reborn_twin.npc | 275 +++ base/ext_data/npcs/Reelo.npc | 30 + base/ext_data/npcs/RocketTrooper.npc | 37 + base/ext_data/npcs/Rodian.npc | 66 + base/ext_data/npcs/STCommander.npc | 37 + base/ext_data/npcs/STOfficer.npc | 74 + base/ext_data/npcs/STOfficerAlt.npc | 37 + base/ext_data/npcs/ShadowTrooper.npc | 100 + base/ext_data/npcs/StormPilot.npc | 35 + base/ext_data/npcs/StormTrooper.npc | 67 + base/ext_data/npcs/SwampTrooper.npc | 63 + base/ext_data/npcs/Tavion.npc | 50 + base/ext_data/npcs/Tavion_new.npc | 152 ++ base/ext_data/npcs/Trandoshan.npc | 30 + base/ext_data/npcs/Ugnaught.npc | 55 + base/ext_data/npcs/alora.npc | 103 + base/ext_data/npcs/assassin_droid.npc | 32 + base/ext_data/npcs/atst.npc | 36 + base/ext_data/npcs/atst_vehicle.npc | 13 + base/ext_data/npcs/boba_fett.npc | 44 + base/ext_data/npcs/chewie.npc | 86 + base/ext_data/npcs/cultist.npc | 38 + base/ext_data/npcs/cultist_destroyer.npc | 31 + base/ext_data/npcs/cultist_drain.npc | 37 + base/ext_data/npcs/cultist_grip.npc | 38 + base/ext_data/npcs/cultist_lightning.npc | 37 + base/ext_data/npcs/cultist_saber.npc | 294 +++ base/ext_data/npcs/cultist_saber_powers.npc | 305 +++ base/ext_data/npcs/cultistcommando.npc | 31 + base/ext_data/npcs/gonk.npc | 23 + base/ext_data/npcs/human_merc.npc | 372 ++++ base/ext_data/npcs/interrogator.npc | 24 + base/ext_data/npcs/jawa.npc | 54 + base/ext_data/npcs/jedi_random.npc | 648 +++++++ base/ext_data/npcs/lambdashuttle.npc | 12 + base/ext_data/npcs/mark1.npc | 24 + base/ext_data/npcs/mark2.npc | 21 + base/ext_data/npcs/mouse.npc | 25 + base/ext_data/npcs/nullDriver.npc | 10 + base/ext_data/npcs/player.npc | 7 + base/ext_data/npcs/probe.npc | 33 + base/ext_data/npcs/protocol.npc | 24 + base/ext_data/npcs/protocol_imp.npc | 27 + base/ext_data/npcs/r2d2.npc | 31 + base/ext_data/npcs/r2d2_imp.npc | 32 + base/ext_data/npcs/r5d2.npc | 31 + base/ext_data/npcs/r5d2_imp.npc | 33 + base/ext_data/npcs/rancor.npc | 70 + base/ext_data/npcs/rancor_vehicle.npc | 14 + base/ext_data/npcs/remote.npc | 53 + base/ext_data/npcs/rockettrooper2.npc | 71 + base/ext_data/npcs/rockettrooper_w.npc | 35 + base/ext_data/npcs/rocks.npc | 28 + base/ext_data/npcs/rosh_penin.npc | 124 ++ base/ext_data/npcs/saber_droid.npc | 66 + base/ext_data/npcs/saboteur.npc | 61 + base/ext_data/npcs/saboteurpistol.npc | 29 + base/ext_data/npcs/saboteursniper.npc | 30 + base/ext_data/npcs/sand_creature.npc | 48 + base/ext_data/npcs/seeker.npc | 26 + base/ext_data/npcs/sentry.npc | 25 + base/ext_data/npcs/snowtrooper.npc | 33 + base/ext_data/npcs/swoop.npc | 115 ++ base/ext_data/npcs/tauntaun.npc | 11 + base/ext_data/npcs/test.npc | 8 + base/ext_data/npcs/tie-bomber.npc | 19 + base/ext_data/npcs/tie-fighter.npc | 11 + base/ext_data/npcs/tusken.npc | 27 + base/ext_data/npcs/tuskensniper.npc | 29 + base/ext_data/npcs/vssver.scc | Bin 0 -> 1840 bytes base/ext_data/vssver.scc | Bin 0 -> 80 bytes base/ext_data/weapons.dat | 744 ++++++++ base/high.cfg | 18 + base/low.cfg | 22 + base/med.cfg | 18 + base/mpdefault.cfg | 141 ++ base/noMotion.cfg | 5 + base/productid.txt | 1 + base/restoreMotion.cfg | 5 + base/vssver.scc | Bin 0 -> 160 bytes code/0_compiled_first/vssver.scc | Bin 48 -> 48 bytes code/RMG/vssver.scc | Bin 432 -> 432 bytes code/Ragl/vssver.scc | Bin 112 -> 112 bytes code/Ratl/vssver.scc | Bin 288 -> 288 bytes code/Ravl/vssver.scc | Bin 112 -> 112 bytes code/Rufl/vssver.scc | Bin 128 -> 128 bytes code/SHDebug/vssver.scc | Bin 64 -> 64 bytes code/cgame/FxScheduler.cpp | 42 +- code/cgame/cg_ents.cpp | 42 +- code/cgame/cg_info.cpp | 71 +- code/cgame/cg_local.h | 2 +- code/cgame/cg_main.cpp | 38 +- code/cgame/cg_players.cpp | 646 +++++-- code/cgame/cg_weapons.cpp | 13 +- code/cgame/vssver.scc | Bin 944 -> 944 bytes code/client/OpenAL/vssver.scc | Bin 128 -> 128 bytes code/client/cl_input.cpp | 2 + code/client/cl_main.cpp | 4 +- code/client/eax/vssver.scc | Bin 64 -> 64 bytes code/client/snd_dma.cpp | 30 +- code/client/vssver.scc | Bin 608 -> 608 bytes code/ff/IFC/vssver.scc | Bin 480 -> 480 bytes code/ff/cl_ff.cpp | 2 +- code/ff/ff.cpp | 2 +- code/ff/vssver.scc | Bin 496 -> 496 bytes code/game/AI_BobaFett.cpp | 24 +- code/game/AI_Jedi.cpp | 174 +- code/game/AI_Rancor.cpp | 6 +- code/game/AI_Wampa.cpp | 8 +- code/game/NPC.cpp | 11 +- code/game/NPC_stats.cpp | 90 +- code/game/Q3_Interface.cpp | 2 +- code/game/b_local.h | 2 +- code/game/bg_misc.cpp | 53 +- code/game/bg_panimate.cpp | 825 ++++++-- code/game/bg_pmove.cpp | 597 ++++-- code/game/bg_public.h | 10 + code/game/bg_vehicleLoad.c | 6 +- code/game/g_active.cpp | 23 + code/game/g_client.cpp | 99 +- code/game/g_cmds.cpp | 241 ++- code/game/g_combat.cpp | 113 +- code/game/g_items.cpp | 389 +++- code/game/g_local.h | 6 +- code/game/g_main.cpp | 10 +- code/game/g_savegame.cpp | 100 +- code/game/g_spawn.cpp | 6 +- code/game/g_svcmds.cpp | 140 +- code/game/g_utils.cpp | 14 + code/game/g_vehicles.h | 3 +- code/game/game.zip | Bin 0 -> 896134 bytes code/game/mssccprj.scc | 2 +- code/game/q_shared.h | 299 ++- code/game/vssver.scc | Bin 2272 -> 2272 bytes code/game/wp_saber.cpp | 1467 +++++++++++--- code/game/wp_saber.h | 4 + code/game/wp_saberLoad.cpp | 1795 +++++++++++++++++- code/ghoul2/G2.h | 4 +- code/ghoul2/G2_API.cpp | 6 +- code/ghoul2/G2_misc.cpp | 70 +- code/ghoul2/vssver.scc | Bin 144 -> 144 bytes code/goblib/mssccprj.scc | 2 +- code/goblib/vssver.scc | Bin 96 -> 96 bytes code/icarus/vssver.scc | Bin 224 -> 224 bytes code/ja_melee_code.zip | Bin 0 -> 875150 bytes code/jpeg-6/vssver.scc | Bin 784 -> 784 bytes code/mac/vssver.scc | Bin 256 -> 256 bytes code/mp3code/vssver.scc | Bin 528 -> 528 bytes code/mssccprj.scc | 4 +- code/null/vssver.scc | Bin 112 -> 112 bytes code/png/vssver.scc | Bin 64 -> 64 bytes code/qcommon/files_pc.cpp | 4 +- code/qcommon/vssver.scc | Bin 848 -> 848 bytes code/renderer/tr_init.cpp | 13 +- code/renderer/tr_stl.cpp | 8 +- code/renderer/vssver.scc | Bin 864 -> 864 bytes code/server/sv_ccmds.cpp | 33 +- code/server/vssver.scc | Bin 208 -> 208 bytes code/smartheap/vssver.scc | Bin 112 -> 112 bytes code/ui/ui_atoms.cpp | 2 +- code/ui/ui_local.h | 2 + code/ui/ui_main.cpp | 417 +++- code/ui/ui_saber.cpp | 40 +- code/ui/ui_shared.cpp | 77 +- code/ui/vssver.scc | Bin 288 -> 288 bytes code/unix/vssver.scc | Bin 272 -> 272 bytes code/vssver.scc | Bin 240 -> 240 bytes code/win32/AutoVersion.h | 14 +- code/win32/FeelIt/vssver.scc | Bin 528 -> 528 bytes code/win32/vssver.scc | Bin 704 -> 704 bytes code/win32/win_glimp.cpp | 12 +- code/win32/win_main.cpp | 6 +- code/x_exe/mssccprj.scc | 2 +- code/x_exe/vssver.scc | Bin 48 -> 48 bytes code/x_game/mssccprj.scc | 2 +- code/x_game/vssver.scc | Bin 48 -> 48 bytes code/zlib32/vssver.scc | Bin 128 -> 128 bytes codemp/Debug/vssver.scc | Bin 64 -> 64 bytes codemp/RMG/vssver.scc | Bin 432 -> 432 bytes codemp/Ratl/vssver.scc | Bin 80 -> 80 bytes codemp/Ravl/vssver.scc | Bin 48 -> 48 bytes codemp/Splines/mssccprj.scc | 2 +- codemp/Splines/vssver.scc | Bin 304 -> 304 bytes codemp/WinDed.vcproj | 5 +- codemp/botlib/mssccprj.scc | 2 +- codemp/botlib/vssver.scc | Bin 912 -> 912 bytes codemp/cgame/cg_draw.c | 129 +- codemp/cgame/cg_ents.c | 38 +- codemp/cgame/cg_event.c | 577 ++++-- codemp/cgame/cg_info.c | 2 +- codemp/cgame/cg_local.h | 24 +- codemp/cgame/cg_main.c | 48 +- codemp/cgame/cg_players.c | 484 ++++- codemp/cgame/cg_predict.c | 2 +- codemp/cgame/cg_public.h | 3 + codemp/cgame/cg_servercmds.c | 10 +- codemp/cgame/cg_syscalls.c | 18 + codemp/cgame/cg_view.c | 49 +- codemp/cgame/mssccprj.scc | 2 +- codemp/cgame/vssver.scc | Bin 816 -> 816 bytes codemp/client/FxSystem.cpp | 3 +- codemp/client/OpenAL/vssver.scc | Bin 128 -> 128 bytes codemp/client/cl_cgame.cpp | 15 + codemp/client/cl_input.cpp | 5 + codemp/client/cl_keys.cpp | 4 - codemp/client/cl_main.cpp | 14 +- codemp/client/cl_scrn.cpp | 4 +- codemp/client/cl_ui.cpp | 1 + codemp/client/eax/vssver.scc | Bin 64 -> 64 bytes codemp/client/snd_dma.cpp | 29 +- codemp/client/vssver.scc | Bin 720 -> 720 bytes codemp/encryption/vssver.scc | Bin 48 -> 48 bytes codemp/ff/vssver.scc | Bin 48 -> 48 bytes codemp/game/FighterNPC.c | 184 +- codemp/game/NPC_AI_Jedi.c | 178 +- codemp/game/NPC_combat.c | 1 + codemp/game/NPC_spawn.c | 42 +- codemp/game/NPC_stats.c | 33 +- codemp/game/bg_misc.c | 17 +- codemp/game/bg_panimate.c | 93 +- codemp/game/bg_pmove.c | 643 +++++-- codemp/game/bg_public.h | 20 +- codemp/game/bg_saber.c | 692 +++++-- codemp/game/bg_saberLoad.c | 1889 ++++++++++++++++++- codemp/game/bg_saga.c | 3 +- codemp/game/bg_slidemove.c | 77 +- codemp/game/bg_vehicleLoad.c | 6 +- codemp/game/bg_vehicles.h | 3 +- codemp/game/g_ICARUScb.c | 308 ++- codemp/game/g_active.c | 275 ++- codemp/game/g_bot.c | 3 + codemp/game/g_client.c | 231 ++- codemp/game/g_cmds.c | 284 ++- codemp/game/g_combat.c | 570 ++++-- codemp/game/g_local.h | 28 +- codemp/game/g_log.c | 1 + codemp/game/g_main.c | 99 +- codemp/game/g_missile.c | 18 +- codemp/game/g_mover.c | 22 +- codemp/game/g_nav.c | 4 + codemp/game/g_public.h | 5 + codemp/game/g_saga.c | 2 + codemp/game/g_spawn.c | 13 +- codemp/game/g_svcmds.c | 110 +- codemp/game/g_syscalls.c | 24 + codemp/game/g_target.c | 37 +- codemp/game/g_team.c | 13 +- codemp/game/g_trigger.c | 222 ++- codemp/game/g_turret.c | 12 + codemp/game/g_turret_G2.c | 20 + codemp/game/g_utils.c | 6 +- codemp/game/g_vehicleTurret.c | 13 +- codemp/game/g_vehicles.c | 39 +- codemp/game/g_weapon.c | 128 +- codemp/game/mssccprj.scc | 2 +- codemp/game/q_math.c | 11 +- codemp/game/q_shared.c | 8 - codemp/game/q_shared.h | 151 +- codemp/game/vssver.scc | Bin 2144 -> 2144 bytes codemp/game/w_force.c | 22 +- codemp/game/w_saber.c | 650 ++++++- codemp/ghoul2/G2.h | 4 + codemp/ghoul2/G2_API.cpp | 133 +- codemp/ghoul2/G2_bones.cpp | 3 + codemp/ghoul2/G2_local.h | 4 +- codemp/ghoul2/G2_misc.cpp | 72 +- codemp/ghoul2/ghoul2_shared.h | 3 + codemp/ghoul2/vssver.scc | Bin 176 -> 176 bytes codemp/goblib/mssccprj.scc | 2 +- codemp/goblib/vssver.scc | Bin 80 -> 80 bytes codemp/icarus/Q3_Interface.cpp | 8 +- codemp/icarus/vssver.scc | Bin 432 -> 432 bytes codemp/jpeg-6/vssver.scc | Bin 784 -> 784 bytes codemp/mp3code/vssver.scc | Bin 528 -> 528 bytes codemp/mssccprj.scc | 8 +- codemp/null/vssver.scc | Bin 176 -> 176 bytes codemp/null/win_main.cpp | 70 +- codemp/png/vssver.scc | Bin 64 -> 64 bytes codemp/qcommon/common.cpp | 4 + codemp/qcommon/files_pc.cpp | 11 +- codemp/qcommon/qcommon.h | 4 +- codemp/qcommon/vssver.scc | Bin 1184 -> 1184 bytes codemp/renderer/tr_WorldEffects.cpp | 9 +- codemp/renderer/tr_image.cpp | 8 + codemp/renderer/tr_init.cpp | 12 +- codemp/renderer/vssver.scc | Bin 752 -> 752 bytes codemp/server/NPCNav/vssver.scc | Bin 80 -> 80 bytes codemp/server/server.h | 5 +- codemp/server/sv_ccmds.cpp | 2 +- codemp/server/sv_game.cpp | 17 +- codemp/server/sv_init.cpp | 4 +- codemp/server/sv_main.cpp | 7 +- codemp/server/sv_world.cpp | 13 +- codemp/server/vssver.scc | Bin 208 -> 208 bytes codemp/smartheap/vssver.scc | Bin 144 -> 144 bytes codemp/strings/vssver.scc | Bin 48 -> 48 bytes codemp/ui/mssccprj.scc | 2 +- codemp/ui/ui_gameinfo.c | 3 + codemp/ui/ui_local.h | 20 - codemp/ui/ui_main.c | 98 +- codemp/ui/ui_public.h | 1 + codemp/ui/ui_saber.c | 40 +- codemp/ui/ui_shared.c | 18 +- codemp/ui/ui_shared.h | 2 + codemp/ui/ui_syscalls.c | 18 + codemp/ui/vssver.scc | Bin 352 -> 352 bytes codemp/unix/makefile | 173 +- codemp/unix/unix_main.c | 17 +- codemp/unix/unix_shared.cpp | 2 +- codemp/unix/vssver.scc | Bin 256 -> 240 bytes codemp/vssver.scc | Bin 384 -> 384 bytes codemp/win32/AutoVersion.h | 11 +- codemp/win32/vssver.scc | Bin 640 -> 640 bytes codemp/win32/win_glimp.cpp | 12 +- codemp/win32/win_main.cpp | 8 +- codemp/win32/win_net.cpp | 4 +- codemp/x_botlib/mssccprj.scc | 2 +- codemp/x_botlib/vssver.scc | Bin 48 -> 48 bytes codemp/x_exe/mssccprj.scc | 2 +- codemp/x_exe/vssver.scc | Bin 48 -> 48 bytes codemp/x_jk2cgame/mssccprj.scc | 2 +- codemp/x_jk2cgame/vssver.scc | Bin 48 -> 48 bytes codemp/x_jk2game/mssccprj.scc | 2 +- codemp/x_jk2game/vssver.scc | Bin 48 -> 48 bytes codemp/x_ui/mssccprj.scc | 2 +- codemp/x_ui/vssver.scc | Bin 48 -> 48 bytes codemp/zlib32/vssver.scc | Bin 128 -> 128 bytes 377 files changed, 25629 insertions(+), 2827 deletions(-) create mode 100644 base/default.cfg create mode 100644 base/ext_data/MP/netf_overrides.txt create mode 100644 base/ext_data/MP/psf_overrides.txt create mode 100644 base/ext_data/MP/vssver.scc create mode 100644 base/ext_data/dms.dat create mode 100644 base/ext_data/items.dat create mode 100644 base/ext_data/npcs/Bartender.npc create mode 100644 base/ext_data/npcs/BespinCop.npc create mode 100644 base/ext_data/npcs/Desann.npc create mode 100644 base/ext_data/npcs/Elder.npc create mode 100644 base/ext_data/npcs/Galak.npc create mode 100644 base/ext_data/npcs/Galak_Mech.npc create mode 100644 base/ext_data/npcs/Glider.npc create mode 100644 base/ext_data/npcs/Gran.npc create mode 100644 base/ext_data/npcs/HazardTrooper.npc create mode 100644 base/ext_data/npcs/Howler.npc create mode 100644 base/ext_data/npcs/ImpCommander.npc create mode 100644 base/ext_data/npcs/ImpOfficer.npc create mode 100644 base/ext_data/npcs/ImpWorker.npc create mode 100644 base/ext_data/npcs/Imperial.npc create mode 100644 base/ext_data/npcs/Jan.npc create mode 100644 base/ext_data/npcs/Jedi.npc create mode 100644 base/ext_data/npcs/JediF.npc create mode 100644 base/ext_data/npcs/JediMaster.npc create mode 100644 base/ext_data/npcs/JediTrainer.npc create mode 100644 base/ext_data/npcs/Kyle.npc create mode 100644 base/ext_data/npcs/Lando.npc create mode 100644 base/ext_data/npcs/Luke.npc create mode 100644 base/ext_data/npcs/Merchant.npc create mode 100644 base/ext_data/npcs/Minemonster.npc create mode 100644 base/ext_data/npcs/MonMothma.npc create mode 100644 base/ext_data/npcs/MorganKatarn.npc create mode 100644 base/ext_data/npcs/Noghri.npc create mode 100644 base/ext_data/npcs/Prisoner.npc create mode 100644 base/ext_data/npcs/Ragnos.npc create mode 100644 base/ext_data/npcs/Rax.npc create mode 100644 base/ext_data/npcs/Rebel.npc create mode 100644 base/ext_data/npcs/Rebel2.npc create mode 100644 base/ext_data/npcs/Reborn.npc create mode 100644 base/ext_data/npcs/RebornAcrobat.npc create mode 100644 base/ext_data/npcs/RebornBoss.npc create mode 100644 base/ext_data/npcs/RebornChiss.npc create mode 100644 base/ext_data/npcs/RebornFencer.npc create mode 100644 base/ext_data/npcs/RebornForceUser.npc create mode 100644 base/ext_data/npcs/RebornRodian.npc create mode 100644 base/ext_data/npcs/RebornTrandoshan.npc create mode 100644 base/ext_data/npcs/RebornWeequay.npc create mode 100644 base/ext_data/npcs/Reborn_dual.npc create mode 100644 base/ext_data/npcs/Reborn_new.npc create mode 100644 base/ext_data/npcs/Reborn_staff.npc create mode 100644 base/ext_data/npcs/Reborn_twin.npc create mode 100644 base/ext_data/npcs/Reelo.npc create mode 100644 base/ext_data/npcs/RocketTrooper.npc create mode 100644 base/ext_data/npcs/Rodian.npc create mode 100644 base/ext_data/npcs/STCommander.npc create mode 100644 base/ext_data/npcs/STOfficer.npc create mode 100644 base/ext_data/npcs/STOfficerAlt.npc create mode 100644 base/ext_data/npcs/ShadowTrooper.npc create mode 100644 base/ext_data/npcs/StormPilot.npc create mode 100644 base/ext_data/npcs/StormTrooper.npc create mode 100644 base/ext_data/npcs/SwampTrooper.npc create mode 100644 base/ext_data/npcs/Tavion.npc create mode 100644 base/ext_data/npcs/Tavion_new.npc create mode 100644 base/ext_data/npcs/Trandoshan.npc create mode 100644 base/ext_data/npcs/Ugnaught.npc create mode 100644 base/ext_data/npcs/alora.npc create mode 100644 base/ext_data/npcs/assassin_droid.npc create mode 100644 base/ext_data/npcs/atst.npc create mode 100644 base/ext_data/npcs/atst_vehicle.npc create mode 100644 base/ext_data/npcs/boba_fett.npc create mode 100644 base/ext_data/npcs/chewie.npc create mode 100644 base/ext_data/npcs/cultist.npc create mode 100644 base/ext_data/npcs/cultist_destroyer.npc create mode 100644 base/ext_data/npcs/cultist_drain.npc create mode 100644 base/ext_data/npcs/cultist_grip.npc create mode 100644 base/ext_data/npcs/cultist_lightning.npc create mode 100644 base/ext_data/npcs/cultist_saber.npc create mode 100644 base/ext_data/npcs/cultist_saber_powers.npc create mode 100644 base/ext_data/npcs/cultistcommando.npc create mode 100644 base/ext_data/npcs/gonk.npc create mode 100644 base/ext_data/npcs/human_merc.npc create mode 100644 base/ext_data/npcs/interrogator.npc create mode 100644 base/ext_data/npcs/jawa.npc create mode 100644 base/ext_data/npcs/jedi_random.npc create mode 100644 base/ext_data/npcs/lambdashuttle.npc create mode 100644 base/ext_data/npcs/mark1.npc create mode 100644 base/ext_data/npcs/mark2.npc create mode 100644 base/ext_data/npcs/mouse.npc create mode 100644 base/ext_data/npcs/nullDriver.npc create mode 100644 base/ext_data/npcs/player.npc create mode 100644 base/ext_data/npcs/probe.npc create mode 100644 base/ext_data/npcs/protocol.npc create mode 100644 base/ext_data/npcs/protocol_imp.npc create mode 100644 base/ext_data/npcs/r2d2.npc create mode 100644 base/ext_data/npcs/r2d2_imp.npc create mode 100644 base/ext_data/npcs/r5d2.npc create mode 100644 base/ext_data/npcs/r5d2_imp.npc create mode 100644 base/ext_data/npcs/rancor.npc create mode 100644 base/ext_data/npcs/rancor_vehicle.npc create mode 100644 base/ext_data/npcs/remote.npc create mode 100644 base/ext_data/npcs/rockettrooper2.npc create mode 100644 base/ext_data/npcs/rockettrooper_w.npc create mode 100644 base/ext_data/npcs/rocks.npc create mode 100644 base/ext_data/npcs/rosh_penin.npc create mode 100644 base/ext_data/npcs/saber_droid.npc create mode 100644 base/ext_data/npcs/saboteur.npc create mode 100644 base/ext_data/npcs/saboteurpistol.npc create mode 100644 base/ext_data/npcs/saboteursniper.npc create mode 100644 base/ext_data/npcs/sand_creature.npc create mode 100644 base/ext_data/npcs/seeker.npc create mode 100644 base/ext_data/npcs/sentry.npc create mode 100644 base/ext_data/npcs/snowtrooper.npc create mode 100644 base/ext_data/npcs/swoop.npc create mode 100644 base/ext_data/npcs/tauntaun.npc create mode 100644 base/ext_data/npcs/test.npc create mode 100644 base/ext_data/npcs/tie-bomber.npc create mode 100644 base/ext_data/npcs/tie-fighter.npc create mode 100644 base/ext_data/npcs/tusken.npc create mode 100644 base/ext_data/npcs/tuskensniper.npc create mode 100644 base/ext_data/npcs/vssver.scc create mode 100644 base/ext_data/vssver.scc create mode 100644 base/ext_data/weapons.dat create mode 100644 base/high.cfg create mode 100644 base/low.cfg create mode 100644 base/med.cfg create mode 100644 base/mpdefault.cfg create mode 100644 base/noMotion.cfg create mode 100644 base/productid.txt create mode 100644 base/restoreMotion.cfg create mode 100644 base/vssver.scc create mode 100644 code/game/game.zip create mode 100644 code/ja_melee_code.zip diff --git a/base/default.cfg b/base/default.cfg new file mode 100644 index 0000000..b8fa8b4 --- /dev/null +++ b/base/default.cfg @@ -0,0 +1,109 @@ +// +// SP JEDI ACADEMY DEFAULT CONFIG +// + +unbindall + +// +// WEAPONS +// +bind 1 "weapon 1" +bind 2 "weapon 2" +bind 3 "weapon 3" +bind 4 "weapon 4" +bind 5 "weapon 5" +bind 6 "weapon 6" +bind 7 "weapon 7" +bind 8 "weapon 8" +bind 9 "weapon 13" +bind 0 "weapon 9" +bind - "weapon 10" +bind = "weapon 0" + +bind \ weapongrabbed +bind [ weapprev +bind ] weapnext +bind mwheelup weapprev +bind mwheeldown weapnext + +// +// CHARACTER CONTROLS +// +bind CTRL +attack +bind ALT +altattack +bind SHIFT +speed +bind v +strafe +bind PGUP +lookup +bind PGDN +lookdown +bind END centerview +bind c +movedown +bind SPACE +moveup +bind ENTER +use +bind r +use + + +bind UPARROW +forward +bind DOWNARROW +back +bind LEFTARROW +left +bind RIGHTARROW +right +bind w +forward +bind a +moveleft +bind s +back +bind d +moveright +bind , +moveleft +bind . +moveright + +// +// FORCE POWERS +// + +bind F1 force_throw +bind F2 force_pull +bind F3 force_speed +bind F4 force_sight + +bind f +useforce +bind e forcenext +bind q forceprev + +bind TAB datapad +bind m datapad +bind p "cg_thirdperson !" +bind l saberAttackCycle + +// +// INVENTORY +// + +// +// QUICK KEYS +// + +//single only +bind F9 "load quick" +bind F10 "uimenu ingameloadmenu" +bind F11 "uimenu ingamesavemenu" +bind F12 "save quick" + +// +// MOUSE OPTIONS +// + +bind / +mlook + +// +// MOUSE BUTTONS +// + +bind MOUSE1 +attack +bind MOUSE2 +altattack +bind MOUSE3 saberAttackCycle + + +// +// CLIENT ENVIRONMENT COMMANDS +// + +bind ~ "toggleconsole" +bind ` "toggleconsole" + diff --git a/base/ext_data/MP/netf_overrides.txt b/base/ext_data/MP/netf_overrides.txt new file mode 100644 index 0000000..79d689f --- /dev/null +++ b/base/ext_data/MP/netf_overrides.txt @@ -0,0 +1,155 @@ +;rww - this file will allow you to override the number of bits any given +;entityState value is sent across the network in for your mod. Do not +;mess with this unless you know what you're doing as it's easily possible +;to mess something up terribly. Just remove the ; in front of any of the +;values that you want to override and use the desired bit num. 0 is a +;special-case value, it means to send across as a float. GENTITYNUM_BITS +;means to send in as many bits as it takes to send the highest possible +;entity number. +; +;pos.trTime, 32 +;pos.trBase[0], 0 +;pos.trBase[1], 0 +;pos.trDelta[0], 0 +;pos.trDelta[1], 0 +;pos.trBase[2], 0 +;apos.trBase[1], 0 +;pos.trDelta[2], 0 +;apos.trBase[0], 0 +;event, 10 +;angles2[1], 0 +;eType, 8 +;torsoAnim, 16 +;forceFrame, 16 +;eventParm, 8 +;legsAnim, 16 +;torsoFlip, 1 +;legsFlip, 1 +;groundEntityNum, GENTITYNUM_BITS +;pos.trType, 8 +;eFlags, 32 +;bolt1, 8 +;bolt2, GENTITYNUM_BITS +;trickedentindex, 16 +;trickedentindex2, 16 +;trickedentindex3, 16 +;trickedentindex4, 16 +;speed, 0 +;fireflag, 2 +;genericenemyindex, 32 +;activeForcePass, 6 +;emplacedOwner, 32 +;otherEntityNum, GENTITYNUM_BITS +;weapon, 32 +;clientNum, GENTITYNUM_BITS +;angles[1], 0 +;pos.trDuration, 32 +;apos.trType, 8 +;origin[0], 0 +;origin[1], 0 +;origin[2], 0 +;solid, 24 +;owner, GENTITYNUM_BITS +;teamowner, 8 +;shouldtarget, 1 +;powerups, 16 +;modelGhoul2, 8 +;g2radius, 8 +;modelindex, -16 +;otherEntityNum2, GENTITYNUM_BITS +;loopSound, 8 +;loopIsSoundset, 1 +;soundSetIndex, 8 +;generic1, 8 +;origin2[2], 0 +;origin2[0], 0 +;origin2[1], 0 +;modelindex2, 8 +;angles[0], 0 +;time, 32 +;apos.trTime, 32 +;apos.trDuration, 32 +;apos.trBase[2], 0 +;apos.trDelta[0], 0 +;apos.trDelta[1], 0 +;apos.trDelta[2], 0 +;time2, 32 +;angles[2], 0 +;angles2[0], 0 +;angles2[2], 0 +;constantLight, 32 +;frame, 16 +;saberInFlight, 1 +;saberEntityNum, GENTITYNUM_BITS +;saberMove, 8 +;forcePowersActive, 32 +;isJediMaster, 1 +;isPortalEnt, 1 +;heldByClient, 6 +;ragAttach, GENTITYNUM_BITS +;iModelScale, 10 +;brokenLimbs, 8 +;boltToPlayer, 6 +;hasLookTarget, 1 +;lookTarget, GENTITYNUM_BITS +; +;customRGBA[0], 8 +;customRGBA[1], 8 +;customRGBA[2], 8 +;customRGBA[3], 8 +; +;health, 10 +;maxhealth, 10 +; +;npcSaber1, 9 +;npcSaber2, 9 +; +;csSounds_Std, 8 +;csSounds_Combat, 8 +;csSounds_Extra, 8 +;csSounds_Jedi, 8 +; +;surfacesOn, 32 +;surfacesOff, 32 +; +;boneIndex1, 6 +;boneIndex2, 6 +;boneIndex3, 6 +;boneIndex4, 6 +; +;boneOrient, 9 +; +;boneAngles1[0], 0 +;boneAngles1[1], 0 +;boneAngles1[2], 0 +; +;boneAngles2[0], 0 +;boneAngles2[1], 0 +;boneAngles2[2], 0 +; +;boneAngles3[0], 0 +;boneAngles3[1], 0 +;boneAngles3[2], 0 +; +;boneAngles4[0], 0 +;boneAngles4[1], 0 +;boneAngles4[2], 0 +; +;NPC_class, 8 +; +;m_iVehicleNum, 10 +; +;eFlags2,10 +; +;userInt1, 1 +;userInt2, 1 +;userInt3, 1 +;userFloat1, 1 +;userFloat2, 1 +;userFloat3, 1 +;userVec1[0], 1 +;userVec1[1], 1 +;userVec1[2], 1 +;userVec2[0], 1 +;userVec2[1], 1 +;userVec2[2], 1 diff --git a/base/ext_data/MP/psf_overrides.txt b/base/ext_data/MP/psf_overrides.txt new file mode 100644 index 0000000..d1d2bb2 --- /dev/null +++ b/base/ext_data/MP/psf_overrides.txt @@ -0,0 +1,181 @@ +;rww - this file will allow you to override the number of bits any given +;playerState value is sent across the network in for your mod. Do not +;mess with this unless you know what you're doing as it's easily possible +;to mess something up terribly. Just remove the ; in front of any of the +;values that you want to override and use the desired bit num. 0 is a +;special-case value, it means to send across as a float. GENTITYNUM_BITS +;means to send in as many bits as it takes to send the highest possible +;entity number. +; +;commandTime, 32 +;origin[0], 0 +;origin[1], 0 +;bobCycle, 8 +;velocity[0], 0 +;velocity[1], 0 +;viewangles[1], 0 +;viewangles[0], 0 +; +;weaponTime, -16 +;weaponChargeTime, 32 +;weaponChargeSubtractTime, 32 +;origin[2], 0 +;velocity[2], 0 +;pm_time, -16 +;eventSequence, 16 +;torsoAnim, 16 +;torsoTimer, 16 +;legsAnim, 16 +;legsTimer, 16 +;legsFlip, 1 +;torsoFlip, 1 +;movementDir, 4 +;events[0], 10 +;events[1], 10 +;pm_flags, 16 +;groundEntityNum, GENTITYNUM_BITS +;weaponstate, 4 +;eFlags, 32 +;externalEvent, 10 +;gravity, 16 +;speed, -16 +;basespeed, -16 +;delta_angles[1], 16 +;externalEventParm, 8 +;viewheight, -8 +;damageEvent, 8 +;damageYaw, 8 +;damagePitch, 8 +;damageCount, 8 +;damageType, 2 +;generic1, 8 +;pm_type, 8 +;delta_angles[0], 16 +;delta_angles[2], 16 +;eventParms[0], -16 +;eventParms[1], 8 +;clientNum, GENTITYNUM_BITS +;weapon, 8 +;viewangles[2], 0 +; +;jumppad_ent, 10 +;loopSound, 16 +;loopIsSoundset, 1 +; +;zoomMode, 2 +;zoomTime, 32 +;zoomLocked, 1 +;zoomFov, 0 +; +;fd.forcePowersActive, 32 +;fd.forceMindtrickTargetIndex, 16 +;fd.forceMindtrickTargetIndex2, 16 +;fd.forceMindtrickTargetIndex3, 16 +;fd.forceMindtrickTargetIndex4, 16 +;fd.forceJumpZStart, 0 +;fd.forcePowerSelected, 8 +;fd.forcePowersKnown, 32 +;fd.forcePower, 8 +;fd.forceSide, 2 +;fd.sentryDeployed, 1 +;fd.forcePowerLevel[FP_LEVITATION], 2 +;fd.forcePowerLevel[FP_SEE], 2 +;fd.forceGripCripple, 1 +;genericEnemyIndex, 32 +;activeForcePass, 6 +;hasDetPackPlanted, 1 +;emplacedIndex, GENTITYNUM_BITS +;fd.forceRageRecoveryTime, 32 +;rocketLockIndex, GENTITYNUM_BITS +;rocketLockTime, 32 +;rocketTargetTime, 32 +;holocronBits, 32 +;isJediMaster, 1 +;forceRestricted, 1 +;trueJedi, 1 +;trueNonJedi, 1 +;fallingToDeath, 32 +;electrifyTime, 32 +; +;fd.forcePowerDebounce[FP_LEVITATION], 32 +; +;saberMove, 32 +;saberActive, 1 +;saberInFlight, 1 +;saberBlocked, 8 +;saberEntityNum, GENTITYNUM_BITS +;saberCanThrow, 1 +;forceHandExtend, 8 +;forceDodgeAnim, 16 +;fd.saberAnimLevel, 4 +;fd.saberDrawAnimLevel, 4 +;saberAttackChainCount, 4 +;saberHolstered, 1 +; +;jetpackFuel, 8 +;cloakFuel, 8 +; +;duelIndex, GENTITYNUM_BITS +;duelTime, 32 +;duelInProgress, 1 +; +;saberLockTime, 32 +;saberLockEnemy, GENTITYNUM_BITS +;saberLockFrame, 16 +;saberLockAdvance, 1 +; +;inAirAnim, 1 +; +;lastHitLoc[2], 0 +;lastHitLoc[0], 0 +;lastHitLoc[1], 0 +; +;heldByClient, 6 +;ragAttach, GENTITYNUM_BITS +;iModelScale, 10 +;brokenLimbs, 8 +;hasLookTarget, 1 +;lookTarget, GENTITYNUM_BITS +; +;customRGBA[0], 8 +;customRGBA[1], 8 +;customRGBA[2], 8 +;customRGBA[3], 8 +; +;standheight, 10 +;crouchheight, 10 +; +;m_iVehicleNum, GENTITYNUM_BITS +; +;vehOrientation[0], 0 +;vehOrientation[1], 0 +;vehOrientation[2], 0 +; +;vehSurfaces, 16 +; +;vehTurnaroundIndex, GENTITYNUM_BITS +;vehTurnaroundTime, 32 +; +;moveDir[0], 0 +;moveDir[1], 0 +;moveDir[2], 0 +; +;vehBoarding, 1 +; +;hackingTime, 32 +;hackingBaseTime, 16 +; +;eFlags2,10 +; +;userInt1, 1 +;userInt2, 1 +;userInt3, 1 +;userFloat1, 1 +;userFloat2, 1 +;userFloat3, 1 +;userVec1[0], 1 +;userVec1[1], 1 +;userVec1[2], 1 +;userVec2[0], 1 +;userVec2[1], 1 +;userVec2[2], 1 diff --git a/base/ext_data/MP/vssver.scc b/base/ext_data/MP/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..fa23a9e4a9a94e1f40bb98846f071945630b3b68 GIT binary patch literal 64 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXfFEXg+5@7%XZXo^Peww0c-|wf)KoK4wf3c91 MXQ|MPr<_1O0GhHAYybcN literal 0 HcmV?d00001 diff --git a/base/ext_data/dms.dat b/base/ext_data/dms.dat new file mode 100644 index 0000000..fc5cc9b --- /dev/null +++ b/base/ext_data/dms.dat @@ -0,0 +1,1757 @@ +musicfiles +{ + kejimbase_explore + { + entry + { + marker0 0.000 + marker1 22.070 + marker2 53.723 + marker3 90.926 + } + exit + { + nextfile kejimbase_etr00 + time00 3.337 + time01 5.668 + time02 22.040 + time03 29.889 + time04 50.124 + time05 37.168 + time06 53.473 + time07 65.923 + time08 90.478 + time09 143.233 + time10 156.166 + time11 176.608 + time12 193.505 + } + exit + { + nextfile kejimbase_etr01 + time00 45.555 + time01 81.525 + time02 106.406 + time03 128.648 + time04 185.168 + time05 209.309 + } + } + kejimbase_action + { + entry + { + marker0 0.00 + marker1 42.585 + marker2 87.664 + } + exit + { + nextfile kejimbase_atr00 + nextmark marker0 + time00 69.347 + time01 72.142 + time02 80.444 + time03 87.608 + time04 90.185 + } + exit + { + nextfile kejimbase_atr01 + nextmark marker1 + time00 2.434 + time01 5.667 + time02 20.281 + } + exit + { + nextfile kejimbase_atr02 + nextmark marker2 + time00 62.894 + } + exit + { + nextfile kejimbase_atr03 + nextmark marker3 + time00 12.397 + time01 28.679 + time02 35.492 + time03 45.328 + } + } + ImpBaseB_Explore + { + entry + { + marker0 0 + marker1 37 + marker2 69.81 + marker3 119.97 + } + exit + { + nextfile ImpBaseB_Etr00 + time0 37 + time1 54.0 + time2 62.35 + time3 69.81 + time4 79.85 + time5 119.97 + time6 132.75 + time7 146.88 + } + exit + { + nextfile ImpBaseB_Etr01 + time0 13.67 + time1 26.96 + time2 89.42 + time3 96.92 + time4 107.77 + } + + } + ImpBaseB_Action + { + entry + { + marker0 0 + marker1 30.23 + marker2 45.45 + marker3 104.48 + } + exit + { + nextfile ImpBaseB_Atr00 + nextmark marker3 + time0 38.22 + time1 50.31 + time2 59.23 + time3 64.47 + time4 80.41 + time5 87.69 + time6 92.01 + time7 98.07 + time8 104.48 + } + exit + { + nextfile ImpBaseB_Atr01 + nextmark marker2 + time0 8.91 + time1 20.89 + } + exit + { + nextfile ImpBaseB_Atr02 + nextmark marker1 + time0 25.45 + time1 30.23 + } + exit + { + nextfile ImpBaseB_Atr03 + nextmark marker0 + time0 4.97 + time1 11.33 + time2 16.11 + time3 45.45 + time4 70.61 + time5 74.66 + } + } + ImpBaseC_explore + { + entry + { + marker0 0.000 + marker1 55.831 + marker2 11.160 + marker3 11.160 + + } + exit + { + nextfile ImpBaseC_etr00 + time00 42.904 + time01 71.172 + time02 127.721 + time03 150.290 + time04 171.618 + + } + exit + { + nextfile ImpBaseC_etr01 + time00 19.096 + time01 26.412 + time02 88.211 + time03 101.169 + + } + } + ImpBaseC_action + { + entry + { + marker0 0.00 + marker1 19.468 + marker2 33.480 + } + exit + { + nextfile ImpBaseC_atr00 + nextmark marker0 + time00 2.542 + time01 5.440 + time02 9.470 + time03 19.366 + } + exit + { + nextfile ImpBaseC_atr01 + nextmark marker1 + time00 25.544 + time01 29.140 + } + exit + { + nextfile ImpBaseC_atr02 + nextmark marker2 + time00 44.888 + } + exit + { + nextfile ImpBaseC_atr03 + nextmark marker3 + time00 34.272 + time01 65.224 + } + } + BespinA_Explore + { + entry + { + marker0 6.74 + marker1 17.51 + marker2 95.95 + marker3 149.87 + } + exit + { + nextfile BespinA_Etr00 + time00 42.01 + } + exit + { + nextfile BespinA_Etr01 + time00 165.65 + } + exit + { + nextfile BespinA_Etr02 + time00 17.51 + time01 29.50 + time02 54.80 + time03 70.21 + time04 90.25 + time05 106.40 + time06 120.53 + time07 149.87 + time08 178.36 + } + } + BespinA_Action + { + entry + { + marker0 0.00 + marker1 42.585 + marker2 87.664 + } + exit + { + nextfile BespinA_Atr00 + nextmark marker0 + time00 3.08 + time01 6.19 + time02 35.26 + } + exit + { + nextfile BespinA_Atr01 + nextmark marker1 + time00 8.98 + time01 14.76 + time02 20.65 + time03 44.34 + time04 47.28 + } + exit + { + nextfile BespinA_Atr02 + nextmark marker2 + time00 51.82 + time01 58.00 + } + exit + { + nextfile BespinA_Atr03 + nextmark marker3 + time00 28.90 + time01 64.78 + } + } + + besplat_explore + { + entry + { + marker0 46.78 + marker1 69.05 + marker2 85.85 + } + exit + { + nextfile besplat_etr00 + time0 6.89 + time1 21.26 + time3 55.52 + time4 69.75 + time5 85.87 + time6 98.12 + time7 119.44 + time8 131.95 + time9 157.58 + } + exit + { + nextfile besplat_etr01 + time0 34.15 + time1 141.84 + time2 174.72 + time3 183.05 + } + } + + besplat_action + { + entry + { + marker0 0 + marker1 16.56 + marker2 24.86 + marker3 62.37 + } + exit + { + nextfile besplat_atr00 + nextmark marker1 + time0 2.82 + time1 68.46 + } + exit + { + nextfile besplat_atr01 + nextmark marker2 + time0 41.23 + time1 54.20 + time2 59.31 + time3 76.51 + } + exit + { + nextfile besplat_atr02 + nextmark marker0 + time0 13.47 + time1 21.19 + time2 24.65 + time3 28.82 + time4 83.53 + } + } + + besplat_boss + { + } + + yavtrial_explore + { + entry + { + marker0 124.126 + marker1 102.326 + marker2 24.853 + marker3 0.00 + } + exit + { + nextfile yavtrial_etr00 + time00 3.095 + time01 23.931 + time02 24.937 + time03 46.905 + time04 61.268 + time05 79.042 + time06 101.750 + time07 118.136 + time08 147.951 + } + exit + { + nextfile yavtrial_etr01 + time00 161.783 + } + } + yavtrial_action + { + entry + { + marker0 0.00 + marker1 60.145 + marker2 85.922 + } + exit + { + nextfile yavtrial_atr00 + nextmark marker0 + time00 3.553 + time01 6.118 + time02 8.718 + time03 41.152 + time04 103.559 + } + exit + { + nextfile yavtrial_atr01 + nextmark marker1 + time00 9.307 + time01 12.310 + time02 16.719 + time03 20.045 + time04 26.229 + time05 35.160 + } + exit + { + nextfile yavtrial_atr02 + nextmark marker2 + time00 59.302 + time01 65.837 + time02 74.429 + } + exit + { + nextfile yavtrial_atr03 + nextmark marker3 + time00 38.325 + time01 49.857 + } + } + alienha_explore + { + entry + { + marker0 0 + marker1 65.84 + marker2 93.63 + } + exit + { + nextfile alienha_etr00 + time0 5.80 + time1 33.04 + time3 67.61 + } + exit + { + nextfile alienha_etr01 + time0 94.47 + time1 103.06 + time2 115.75 + time3 127.32 + time4 138.36 + time5 152.10 + time6 166.11 + time7 180.29 + } + } + alienha_action + { + entry + { + marker0 0 + marker1 40.96 + marker2 63.33 + } + exit + { + nextfile alienha_atr00 + nextmark marker2 + time0 3.35 + time1 6.85 + time3 15.70 + time4 22.61 + } + exit + { + nextfile alienha_atr01 + nextmark marker0 + time0 31.85 + time1 41.42 + time2 47.06 + } + exit + { + nextfile alienha_atr03 + nextmark marker1 + time0 53.01 + time1 58.57 + time2 62.87 + time3 72.03 + time4 89.64 + time5 96.94 + } + } + tunnels_explore + { + entry + { + marker0 0 + marker1 64.20 + marker2 96.47 + } + exit + { + nextfile tunnels_etr00 + time0 6.06 + time1 18.26 + time3 35.01 + time4 42.98 + time5 69.73 + time6 84.16 + } + exit + { + nextfile tunnels_etr01 + time0 94.81 + time1 111.25 + time2 121.77 + time3 134.68 + } + } + tunnels_action + { + entry + { + marker0 0 + marker1 22.39 + } + exit + { + nextfile tunnels_atr00 + nextmark marker0 + time0 0.29 + } + exit + { + nextfile tunnels_atr01 + nextmark marker2 + time0 15.62 + time1 22.94 + } + exit + { + nextfile tunnels_atr02 + nextmark marker2 + time0 29.14 + time1 35.63 + time2 45.33 + time3 51.78 + time4 58.67 + } + exit + { + nextfile tunnels_atr03 + nextmark marker1 + time0 64.81 + time1 68.53 + time2 72.28 + time3 75.89 + } + } + IMPBaseD_explore + { + entry + { + marker0 0.000 + marker1 66.790 + marker2 102.874 + marker3 150.554 + } + exit + { + nextfile IMPBaseD_etr00 + time00 7.997 + time01 16.678 + time02 44.664 + time03 70.836 + + } + exit + { + nextfile IMPBaseD_etr01 + time00 89.986 + time01 111.971 + time02 130.629 + time03 166.389 + time04 172.530 + } + } + IMPBaseD_action + { + entry + { + marker0 6.607 + marker1 60.118 + marker2 140.053 + } + exit + { + nextfile IMPBaseD_atr00 + nextmark marker0 + time00 6.457 + time01 13.265 + time02 18.757 + time03 25.194 + time04 152.772 + } + exit + { + nextfile IMPBaseD_atr01 + nextmark marker1 + time00 30.336 + time01 37.883 + time02 46.802 + time03 61.122 + } + exit + { + nextfile IMPBaseD_atr02 + nextmark marker2 + time00 78.257 + time01 85.312 + time02 92.170 + time03 140.866 + time04 149.597 + } + exit + { + nextfile IMPBaseD_atr03 + nextmark marker3 + time00 105.982 + time01 115.569 + time02 128.476 + } + } + swamp_explore + { + entry + { + marker0 0.000 + marker1 16.916 + marker2 80.714 + marker3 31.761 + + } + exit + { + nextfile swamp_etr00 + time00 11.185 + time01 20.989 + time02 51.408 + time03 63.196 + time04 71.293 + + } + exit + { + nextfile swamp_etr01 + time00 42.044 + time01 78.362 + time02 95.485 + time03 113.023 + + } + } + swamp_action + { + entry + { + marker0 0.00 + marker1 36.318 + marker2 45.982 + } + exit + { + nextfile swamp_atr00 + nextmark marker0 + time00 1.035 + } + exit + { + nextfile swamp_atr01 + nextmark marker1 + time00 6.835 + time01 11.323 + time02 18.592 + time03 36.230 + time04 59.793 + } + exit + { + nextfile swamp_atr02 + nextmark marker2 + time00 34.108 + time01 79.955 + time02 89.847 + time03 126.994 + + } + exit + { + nextfile swamp_atr03 + nextmark marker3 + time00 102.414 + time01 115.382 + time02 120.039 + } + } + yavtemp2_explore + { + entry + { + marker0 88.28 + marker1 48.10 + marker2 117.47 + marker3 0 + } + exit + { + nextfile yavtemp2_etr00 + time0 46.23 + time1 53.44 + time2 62.08 + time3 69.09 + time4 77.08 + time5 87.03 + time6 96.49 + } + exit + { + nextfile yavtemp2_etr01 + time0 15.24 + time1 31.79 + time2 42.78 + time3 114.18 + time4 134.25 + time5 144.89 + time6 160.03 + time7 168.03 + } + } + yavtemp2_action + { + entry + { + marker0 0 + marker1 17.35 + marker2 43.31 + marker3 60.39 + } + exit + { + nextfile yavtemp2_atr00 + nextmark marker0 + time0 0 + time1 8.78 + time2 13.47 + } + exit + { + nextfile yavtemp2_atr01 + nextmark marker1 + time0 23.89 + time1 28.62 + time2 41.11 + time3 46.73 + } + exit + { + nextfile yavtemp2_atr02 + nextmark marker2 + time0 48.95 + time1 60.59 + time2 69.13 + time3 97.63 + } + exit + { + nextfile yavtemp2_atr03 + nextmark marker3 + time0 91.11 + } + } + ImpBaseE_explore + { + entry + { + marker0 0.000 + marker1 13.805 + marker2 29.265 + marker3 137.915 + + } + exit + { + nextfile ImpBaseE_etr00 + time00 13.712 + time01 37.872 + time02 52.541 + time03 131.875 + time04 232.256 + + } + exit + { + nextfile ImpBaseE_etr01 + time00 120.057 + time01 157.080 + time02 176.388 + + } + } + ImpBaseE_action + { + entry + { + marker0 0.00 + marker1 18.336 + marker2 52.491 + } + exit + { + nextfile ImpBaseE_atr00 + nextmark marker0 + time00 22.012 + time01 32.861 + time02 73.853 + time03 77.808 + } + exit + { + nextfile ImpBaseE_atr01 + nextmark marker1 + time00 5.824 + time01 18.457 + time02 81.088 + time03 114.805 + } + exit + { + nextfile ImpBaseE_atr02 + nextmark marker2 + time00 1.923 + time01 26.892 + time02 30.703 + time03 59.294 + time04 65.331 + time05 88.803 + time06 91.876 + + } + exit + { + nextfile ImpBaseE_atr03 + nextmark marker3 + time00 11.958 + time01 43.027 + time02 48.014 + time04 96.757 + time05 107.858 + time06 130.437 + } + } + alienhb_explore + { + entry + { + marker0 127.71 + marker1 36.56 + marker2 89.94 + } + exit + { + nextfile alienhb_etr00 + time0 13.60 + time1 22.58 + time3 31.69 + time4 41.08 + time5 53.08 + time6 67.91 + time7 89.29 + time8 181.41 + } + exit + { + nextfile alienhb_etr01 + time0 109.08 + time1 123.18 + time2 134.76 + time3 149.54 + time4 160.53 + time5 174.10 + } + } + alienhb_action + { + entry + { + marker0 0 + marker1 6.85 + marker2 31.84 + marker3 66.77 + } + exit + { + nextfile alienhb_atr00 + nextmark marker0 + time0 5.29 + time1 21.54 + time3 26.21 + time4 120.30 + } + exit + { + nextfile alienhb_atr01 + nextmark marker1 + time0 10.35 + time1 17.03 + } + exit + { + nextfile alienhb_atr02 + nextmark marker2 + time0 60.27 + time1 70.21 + time2 80.36 + time3 93.55 + time4 100.47 + time5 111.75 + } + } + yavfinal_explore + { + entry + { + marker0 0.000 + marker1 18.664 + marker2 53.390 + marker3 97.161 + + } + exit + { + nextfile yavfinal_etr00 + time00 53.434 + time01 83.935 + + } + exit + { + nextfile yavfinal_etr01 + time00 9.852 + time01 94.171 + time02 104.106 + + } + } + yavfinal_action + { + entry + { + marker0 0.00 + marker1 43.094 + marker2 73.785 + } + exit + { + nextfile yavfinal_atr00 + nextmark marker0 + time00 53.502 + time01 61.386 + } + exit + { + nextfile yavfinal_atr01 + nextmark marker1 + time00 3.623 + time01 96.341 + } + exit + { + nextfile yavfinal_atr02 + nextmark marker2 + time00 9.019 + time01 11.707 + time02 15.535 + time03 29.107 + time04 35.847 + time05 75.327 + time06 101.992 + + } + exit + { + nextfile yavfinal_atr03 + nextmark marker3 + time00 21.257 + time01 25.167 + time02 43.800 + time03 106.249 + time04 113.638 + + } + } + yavfinal_boss + { + } + narshaada_explore + { + entry + { + marker0 123.18 + marker1 0 + marker2 43.30 + marker3 12.27 + } + exit + { + nextfile narshaada_etr00 + time0 55.86 + time1 70.17 + time2 78.63 + time3 88.61 + time4 106.57 + + } + exit + { + nextfile narshaada_etr01 + time0 13.75 + time1 31.29 + time2 43.84 + time4 123.91 + time5 134.92 + time6 149.29 + time7 168.16 + time8 184.19 + } + } + narshaada_action + { + entry + { + marker0 0 + marker1 15.65 + marker2 47.07 + } + exit + { + nextfile narshaada_atr00 + nextmark marker0 + time0 2.72 + time1 59.84 + time2 63.90 + time3 74.16 + time4 82.37 + } + exit + { + nextfile narshaada_atr01 + nextmark marker1 + time0 10.89 + time1 20.59 + time2 28.15 + time3 39.65 + time4 46.35 + } + exit + { + nextfile narshaada_atr02 + nextmark marker2 + time0 48.98 + time1 69.05 + } + exit + { + nextfile narshaada_atr03 + nextmark marker3 + time0 86.14 + time1 90.73 + time2 96.40 + time3 101.09 + } + } + tusken_explore + { + entry + { + marker0 0.000 + marker1 10.583 + marker2 71.039 + marker3 135.541 + } + exit + { + nextfile tusken_etr00 + time00 10.861 + time01 71.150 + time02 90.767 + time03 120.357 + } + exit + { + nextfile tusken_etr01 + time00 37.902 + time01 54.526 + time02 83.563 + } + } + tusken_action + { + entry + { + marker0 0.00 + marker1 12.897 + marker2 43.0 + marker3 91.709 + } + exit + { + nextfile tusken_atr00 + nextmark marker0 + time00 6.123 + time01 8.034 + time02 16.540 + time03 23.633 + time04 104.980 + } + exit + { + nextfile tusken_atr01 + nextmark marker1 + time00 57.368 + time01 63.503 + time02 66.717 + time03 77.926 + time04 90.472 + time05 93.797 + time06 98.102 + time07 108.327 + } + exit + { + nextfile tusken_atr02 + nextmark marker2 + time00 32.583 + } + exit + { + nextfile tusken_atr03 + nextmark marker3 + time00 31.374 + time01 40.811 + time02 43.581 + time03 46.745 + time04 53.173 + time05 71.815 + time06 74.780 + time07 82.316 + time08 87.553 + } + } + hoth2_explore + { + entry + { + marker0 0 + marker1 43.374 + marker2 101.295 + marker3 128 + } + exit + { + nextfile hoth2_etr00 + time00 0.6 + time01 68.013 + time02 102.813 + time03 140.937 + } + exit + { + nextfile hoth2_etr01 + time00 39.663 + time01 53.196 + time02 96.547 + time03 119.562 + time04 142.523 + } + + } + hoth2_action + { + entry + { + marker0 0 + marker1 27.263 + marker2 87.276 + marker3 117.919 + } + exit + { + nextfile hoth2_atr00 + nextmark marker0 + time00 7.092 + time01 14.241 + time02 20.347 + time03 67.703 + time04 69.517 + time05 71.844 + time06 75.125 + time07 78 + time08 82.965 + time09 129.589 + time10 158.426 + } + exit + { + nextfile hoth2_atr01 + nextmark marker1 + time00 25.993 + time01 29.983 + time02 35.6 + time03 38.318 + time04 40.995 + time05 42.335 + time06 52.587 + time07 57.297 + time08 60.622 + time09 62.617 + time10 84.422 + time11 96.308 + time12 98.358 + time13 102.459 + time14 104.409 + time15 109.8 + time16 118.721 + time17 141.128 + time18 145.861 + time19 150.9 + } + exit + { + nextfile hoth2_atr02 + nextmark marker2 + time00 32.915 + + } + exit + { + nextfile hoth2_atr03 + nextmark marker3 + time00 42.924 + time01 46.027 + time02 48.611 + time03 50.384 + time04 52.047 + time05 86.486 + time06 90.032 + time07 94.786 + time08 124.69 + time09 153.883 + } + } + dealsour_explore + { + entry + { + marker0 0.000 + marker1 100.492 + marker2 126.154 + + } + exit + { + nextfile dealsour_etr00 + time00 5.153 + time01 26.487 + time02 64.556 + time03 93.205 + time04 108.166 + time05 138.145 + } + exit + { + nextfile dealsour_etr01 + time00 9.143 + time01 21.223 + time02 43.388 + time03 87.830 + time04 116.589 + } + } + dealsour_action + { + entry + { + marker0 0.00 + marker1 65.166 + marker2 100.575 + } + exit + { + nextfile dealsour_atr00 + nextmark marker0 + time00 4.765 + time01 17.278 + time02 26.365 + time03 53.352 + time04 57.175 + time05 82.776 + } + exit + { + nextfile dealsour_atr01 + nextmark marker1 + time00 13.321 + time01 91.953 + time02 104.975 + } + exit + { + nextfile dealsour_atr02 + nextmark marker2 + time00 36.351 + time01 44.386 + time02 59.624 + time03 70.075 + time04 79.435 + time05 95.511 + } + } + rancor_explore + { + entry + { + marker0 0 + marker1 46.103 + marker2 88.328 + + } + exit + { + nextfile rancor_etr00 + time00 0.775 + time01 5.319 + time02 16.291 + time03 43.222 + time04 49.539 + time05 63.725 + time06 84.0 + time07 103.623 + + + } + exit + { + nextfile rancor_etr01 + time00 10.08 + time01 26.820 + time02 51.645 + time03 68.213 + time04 129.279 + } + + } + rancor_action + { + entry + { + marker0 0 + marker1 54.928 + marker2 88.315 + } + exit + { + nextfile rancor_atr00 + nextmark marker0 + time00 0.05 + time01 2.737 + time02 7.918 + time03 10.079 + time04 84.256 + time05 90.440 + time06 95.759 + time07 105.562 + time08 105.562 + time09 111.159 + time10 113.985 + time11 118.03 + } + exit + { + nextfile rancor_atr01 + nextmark marker1 + time00 8.921 + time01 24.975 + time02 31.458 + time03 35.586 + time04 38.523 + time05 56.3 + time06 60 + time07 65.549 + time08 73.223 + time09 77.467 + time10 102.791 + time11 123.9 + time12 141.193 + time13 144.02 + time14 146.296 + time15 151.234 + time16 155.057 + time17 157.329 + } + exit + { + nextfile rancor_atr02 + nextmark marker2 + time00 5.098 + time01 9.309 + time02 19.508 + time03 74.323 + time04 80.898 + time05 86.123 + time06 99.754 + time07 132.448 + time08 136.504 + time09 148.230 + time10 161.263 + } + } + korrib_lite_explore + { + entry + { + marker0 0.000 + marker1 20.170 + marker2 51.645 + marker3 73.201 + } + exit + { + nextfile korrib_lite_etr00 + time00 40.866 + time01 55.635 + time02 68.222 + } + exit + { + nextfile korrib_lite_etr01 + time00 0.200 + time01 15.472 + time02 77.914 + time03 80.977 + } + } + korrib_dark_explore + { + entry + { + marker0 0.000 + marker1 56.300 + marker2 81.901 + marker3 97.970 + } + exit + { + nextfile korrib_dark_etr00 + time00 0.100 + time01 55.719 + time02 69.607 + time03 105.397 + } + exit + { + nextfile korrib_dark_etr01 + time00 29.202 + time01 82.004 + } + } + korrib_action + { + entry + { + marker0 0.00 + marker1 41.495 + marker2 63.586 + marker3 96.124 + } + exit + { + nextfile korrib_atr00 + nextmark marker0 + time00 0.100 + time01 2.769 + time02 7.929 + time03 35.142 + time04 41.429 + time05 66.838 + time06 101.731 + time07 115.125 + } + exit + { + nextfile korrib_atr01 + nextmark marker1 + time00 10.161 + time01 31.271 + time02 33.499 + time03 45.925 + time04 48.117 + time05 53.043 + time06 63.397 + time07 105.512 + time08 108.174 + } + exit + { + nextfile korrib_atr02 + nextmark marker2 + time00 6.125 + time01 15.027 + time02 18.225 + time03 38.181 + time04 59.245 + time05 76.386 + time06 80.120 + time07 92.516 + } + exit + { + nextfile korrib_atr03 + nextmark marker3 + time00 20.844 + time01 24.075 + time02 74.372 + time03 85.475 + time04 89.990 + time05 117.480 + } + } + final_battle + { + } + vjun3_explore + { + + entry + { + marker0 0.000 + marker1 41.670 + marker2 146.402 + } + exit + { + nextfile vjun3_etr00 + time00 132.271 + time01 144.739 + } + exit + { + nextfile vjun3_etr01 + time00 13.138 + time01 25.994 + time02 85.175 + } + } + vjun3_action + { + entry + { + marker0 0.00 + marker1 8.256 + marker2 65.554 + } + exit + { + nextfile vjun3_atr00 + nextmark marker0 + time00 7.785 + time01 32.66 + time02 47.516 + time03 51.710 + time04 65.674 + time05 87.719 + time06 105.684 + time07 119.798 + time08 125.561 + time09 128.004 + } + exit + { + nextfile vjun3_atr01 + nextmark marker1 + time00 13.243 + time01 20.037 + time02 23.944 + time03 36.96 + time04 39.62 + time05 54.14 + time06 57.372 + time07 81.623 + time08 99.91 + } + exit + { + nextfile vjun3_atr02 + nextmark marker2 + time00 2.271 + time01 15.017 + time02 28.210 + time03 42.557 + time04 45.80 + time05 69.571 + time06 73.505 + time07 93.482 + time08 115.814 + } + } +} +levelmusic +{ + yavin1 + { + explore swamp_explore + action swamp_action + } + yavin1b + { + uses yavin1 + } + yavin2 + { + explore yavtemp2_explore + action yavtemp2_action + } + t1_fatal + { + explore tunnels_explore + action tunnels_action + } + t1_sour + { + explore dealsour_explore + action dealsour_action + } + t1_surprise + { + explore tusken_explore + action tusken_action + } + t1_danger + { + uses t1_surprise + } + hoth2 + { + explore hoth2_explore + action hoth2_action + } + hoth3 + { + uses hoth2 + } + t2_dpred + { + explore ImpBaseB_Explore + action ImpBaseB_Action + } + t2_wedge + { + explore besplat_explore + action besplat_action + boss besplat_boss + } + t2_rancor + { + explore rancor_explore + action rancor_action + } + t2_rogue + { + explore narshaada_explore + action narshaada_action + } + vjun1 + { + uses yavin2 + } + vjun2 + { + explore ImpBaseE_explore + action ImpBaseE_action + } + vjun3 + { + explore vjun3_explore + action vjun3_action + } + t3_bounty + { + uses t1_sour + } + t3_byss + { + explore alienhb_explore + action alienhb_action + } + t3_hevil + { + uses t2_wedge + } + t3_rift + { + uses yavin2 + } + taspir1 + { + uses vjun2 + } + taspir2 + { + uses vjun2 + } + kor_lite + { + explore korrib_lite_explore + action korrib_action + boss final_battle + } + kor_dark + { + explore korrib_dark_explore + action korrib_action + boss final_battle + } +} diff --git a/base/ext_data/items.dat b/base/ext_data/items.dat new file mode 100644 index 0000000..0b28718 --- /dev/null +++ b/base/ext_data/items.dat @@ -0,0 +1,782 @@ +// EXTERNAL ITEM DATA +// + +//Fields +//pickupsound STRING; DEFAULT = sound/weapons/w_pkup.wav +//itemname STRING; +//classname STRING; +//count INT; ammount of ammo or health given with item +//icon STRING; +//min VECTOR; item bounds min, DEFAULT = -16 -16 -2 +//max VECTOR; item bounds max, DEFAULT = 16 16 16 +//pickupname STRING; name to show in inventory +//tag ENUM; WP_, or AMMO_ +//type ENUM; IT_WEAPON, IT_AMMO, IT_ARMOR, IT_HEALTH +//worldmodel STRING; model to show on ground or in hand + +{ +itemname ITM_SABER_PICKUP + +classname weapon_saber +worldmodel models/weapons2/saber/saber_w.md3 +icon gfx/hud/w_icon_lightsaber +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_SABER +min -16 -16 -8 +max 16 16 16 +} + + +{ +itemname ITM_BRYAR_PISTOL_PICKUP + +classname weapon_bryar_pistol +worldmodel models/weapons2/briar_pistol/briar_pistol_w.glm +icon gfx/hud/w_icon_briar +// Amount of ammo given with weapon +count 10 +type IT_WEAPON +tag WP_BRYAR_PISTOL +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_BLASTER_PISTOL_PICKUP + +classname weapon_blaster_pistol +worldmodel models/weapons2/blaster_pistol/blaster_pistol_w.glm +icon gfx/hud/w_icon_blaster_pistol +// Amount of ammo given with weapon +count 10 +type IT_WEAPON +tag WP_BLASTER_PISTOL +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_BLASTER_PICKUP + +classname weapon_blaster +worldmodel models/weapons2/blaster_r/blaster_w.glm +icon gfx/hud/w_icon_blaster +// Amount of ammo given with weapon +count 10 +type IT_WEAPON +tag WP_BLASTER +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_DISRUPTOR_PICKUP + +classname weapon_disruptor +worldmodel models/weapons2/disruptor/disruptor_w.glm +icon gfx/hud/w_icon_disruptor +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_DISRUPTOR +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_BOWCASTER_PICKUP + +classname weapon_bowcaster +worldmodel models/weapons2/bowcaster/bowcaster_w.glm +icon gfx/hud/w_icon_bowcaster +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_BOWCASTER +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_REPEATER_PICKUP + +classname weapon_repeater +worldmodel models/weapons2/heavy_repeater/heavy_repeater_w.glm +icon gfx/hud/w_icon_repeater +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_REPEATER +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_DEMP2_PICKUP + +classname weapon_demp2 +worldmodel models/weapons2/demp2/demp2_w.glm +icon gfx/hud/w_icon_demp2 +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_DEMP2 +min -10 -10 -2 +max 10 10 12 +} + + +{ +itemname ITM_FLECHETTE_PICKUP + +classname weapon_flechette +worldmodel models/weapons2/golan_arms/golan_arms_w.glm +icon gfx/hud/w_icon_flechette +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_FLECHETTE +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_CONCUSSION_RIFLE_PICKUP + +classname weapon_concussion_rifle +worldmodel models/weapons2/concussion/c_rifle_w.glm +icon gfx/hud/w_icon_c_rifle +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_CONCUSSION +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_ROCKET_LAUNCHER_PICKUP + +classname weapon_rocket_launcher +worldmodel models/weapons2/merr_sonn/merr_sonn_w.glm +icon gfx/hud/w_icon_merrsonn +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_ROCKET_LAUNCHER +min -10 -10 -2 +max 10 10 12 +} + + +{ +itemname ITM_THERMAL_DET_PICKUP + +classname weapon_thermal +worldmodel models/weapons2/thermal/thermal_pu.md3 +icon gfx/hud/w_icon_thermal +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_THERMAL +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_TRIP_MINE_PICKUP + +classname weapon_trip_mine +worldmodel models/weapons2/laser_trap/laser_trap_pu.md3 +icon gfx/hud/w_icon_tripmine +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_TRIP_MINE +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_DET_PACK_PICKUP + +classname weapon_det_pack +worldmodel models/weapons2/detpack/det_pack_pu.md3 +icon gfx/hud/w_icon_detpack +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_DET_PACK +min -10 -10 -2 +max 10 10 12 +} + +{ +itemname ITM_STUN_BATON_PICKUP + +classname weapon_stun_baton +worldmodel models/weapons2/stun_baton/stunbaton_w.glm +icon gfx/hud/w_icon_stunbaton +// Amount of ammo given with weapon +count 50 +type IT_WEAPON +tag WP_STUN_BATON +} + + +{ +itemname ITM_BOT_LASER_PICKUP + +classname weapon_botwelder +worldmodel models/weapons2/noweap/noweap.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_BOT_LASER +} + +{ +itemname ITM_MELEE + +classname weapon_melee +worldmodel models/weapons2/noweap/noweap.md3 +icon gfx/hud/w_icon_melee +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_MELEE +min -16 -16 -2 +max 16 16 16 +} + +{ +itemname ITM_EMPLACED_GUN_PICKUP + +classname weapon_emplaced_gun +worldmodel models/weapons2/noweap/noweap.md3 +// Amount of ammo given with weapon +count 800 +type IT_WEAPON +tag WP_EMPLACED_GUN +} + +{ +itemname ITM_TURRET_PICKUP + +classname weapon_turret +worldmodel models/weapons2/noweap/noweap.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_TURRET +} + +{ +itemname ITM_ATST_MAIN_PICKUP + +classname weapon_atst_main +worldmodel models/weapons2/noweap/noweap.md3 +icon gfx/hud/w_icon_atst +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_ATST_MAIN +} + +{ +itemname ITM_ATST_SIDE_PICKUP + +classname weapon_atst_side +worldmodel models/weapons2/noweap/noweap.md3 +icon gfx/hud/w_icon_atstside +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_ATST_SIDE +} + +{ +itemname ITM_TIE_FIGHTER_PICKUP + +classname weapon_tie_fighter +worldmodel models/weapons2/noweap/noweap.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_TIE_FIGHTER +} + +{ +itemname ITM_RAPID_FIRE_CONC_PICKUP + +classname weapon_rapid_concussion +worldmodel models/weapons2/noweap/noweap.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_RAPID_FIRE_CONC +} + +{ +itemname ITM_JAWA_PICKUP + +classname weapon_jawa +worldmodel models/weapons2/jawa/jawa_gun.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_JAWA +} + +{ +itemname ITM_TUSKEN_RIFLE_PICKUP + +classname weapon_tusken_rifle +worldmodel models/weapons2/tusken_rifle/tusken_rifle.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_TUSKEN_RIFLE +} + +{ +itemname ITM_TUSKEN_STAFF_PICKUP + +classname weapon_tusken_staff +worldmodel models/weapons2/tusken_staff/tusken_staff.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_TUSKEN_STAFF +} + +{ +itemname ITM_SCEPTER_PICKUP + +classname weapon_scepter +worldmodel models/weapons2/sith_scepter/sith_scepter.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_SCEPTER +} + +{ +itemname ITM_NOGHRI_STICK_PICKUP + +classname weapon_noghri_stick +worldmodel models/weapons2/noghri_stick/noghri_stick.md3 +// Amount of ammo given with weapon +count 400 +type IT_WEAPON +tag WP_NOGHRI_STICK +} +// +//Items +// + +// AMMO Items +//------------- +{ +itemname ITM_AMMO_FORCE_PICKUP + +classname ammo_force +worldmodel models/items/forcegem.md3 +pickupsound sound/player/enlightenment.wav +icon gfx/hud/forcegem_icon2 +count 100 +type IT_AMMO +tag AMMO_FORCE +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_BLASTER_PICKUP + +classname ammo_blaster +worldmodel models/items/energy_cell.md3 +icon gfx/hud/energy_cell +count 25 +type IT_AMMO +tag AMMO_BLASTER +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_POWERCELL_PICKUP + +classname ammo_powercell +worldmodel models/items/power_cell.md3 +icon gfx/hud/power_cell +count 100 +type IT_AMMO +tag AMMO_POWERCELL +max 8 8 16 +min -8 -8 -0 +} + + +{ +itemname ITM_AMMO_METAL_BOLTS_PICKUP + +classname ammo_metallic_bolts +worldmodel models/items/metallic_bolts.md3 +icon gfx/hud/metallic_bolts +count 100 +type IT_AMMO +tag AMMO_METAL_BOLTS +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_ROCKETS_PICKUP + +classname ammo_rockets +worldmodel models/items/rockets.md3 +icon gfx/hud/rockets +count 3 +type IT_AMMO +tag AMMO_ROCKETS +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_EMPLACED_PICKUP + +classname ammo_emplaced +worldmodel models/weapons2/noweap/noweap.md3 +count 100 +type IT_AMMO +tag AMMO_EMPLACED +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_THERMAL_PICKUP + +classname ammo_thermal +worldmodel models/weapons2/thermal/thermal_pu.md3 +icon gfx/hud/w_icon_thermal +count 4 +type IT_AMMO +tag AMMO_THERMAL +max 16 16 16 +min -16 -16 -0 +} + +{ +itemname ITM_AMMO_TRIPMINE_PICKUP + +classname ammo_tripmine +worldmodel models/weapons2/laser_trap/laser_trap_pu.md3 +icon gfx/hud/w_icon_tripmine +count 3 +type IT_AMMO +tag AMMO_TRIPMINE +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_AMMO_DETPACK_PICKUP + +classname ammo_detpack +worldmodel models/weapons2/detpack/det_pack_pu.md3 +icon gfx/hud/w_icon_detpack +count 3 +type IT_AMMO +tag AMMO_DETPACK +max 8 8 16 +min -8 -8 -0 +} + + + +{ +itemname ITM_BATTERY_PICKUP + +classname item_battery +worldmodel models/items/battery.md3 +icon gfx/hud/battery +count 1000 +type IT_BATTERY +tag ITM_BATTERY_PICKUP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_SEEKER_PICKUP +classname item_seeker +worldmodel models/items/remote.md3 +icon gfx/hud/i_icon_seeker +count 120 +type IT_HOLDABLE +tag INV_SEEKER +max 8 8 16 +min -8 -8 -4 +} + +{ +itemname ITM_SHIELD_PICKUP +classname item_enviro +worldmodel models/items/shield.md3 +icon gfx/hud/i_icon_shieldwall +count 100 +type IT_HOLDABLE +tag ITM_SHIELD_PICKUP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_BACTA_PICKUP +classname item_bacta +worldmodel models/items/bacta.md3 +icon gfx/hud/i_icon_bacta +count 25 +type IT_HEALTH +tag ITM_MEDPAK_PICKUP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_DATAPAD_PICKUP +classname item_datapad +worldmodel models/items/datapad.md3 +count 1 +type IT_HOLDABLE +tag ITM_DATAPAD_PICKUP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_BINOCULARS_PICKUP +classname item_binoculars +worldmodel models/items/binoculars.md3 +icon gfx/hud/i_icon_zoom +count 1 +type IT_HOLDABLE +tag INV_ELECTROBINOCULARS +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_SENTRY_GUN_PICKUP +classname item_sentry_gun +worldmodel models/items/psgun.glm +icon gfx/hud/i_icon_sentrygun +count 120 +type IT_HOLDABLE +tag INV_SENTRY +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_LA_GOGGLES_PICKUP +classname item_la_goggles +worldmodel models/items/binoculars.md3 +icon gfx/hud/i_icon_goggles +count 30 +type IT_HOLDABLE +tag INV_LIGHTAMP_GOGGLES +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_MEDPAK_PICKUP +classname item_medpak_instant +worldmodel models/items/medpac.md3 +icon gfx/hud/i_icon_medkit +count 20 +type IT_HEALTH +tag ITM_MEDPAK_PICKUP +max 8 8 16 +min -8 -8 -3 +} + +{ +itemname ITM_SHIELD_SM_PICKUP +classname item_shield_sm_instant +worldmodel models/items/psd_sm.md3 +icon gfx/hud/psd_small +count 25 +type IT_ARMOR +tag ITM_SHIELD_SM_PICKUP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_SHIELD_LRG_PICKUP +classname item_shield_lrg_instant +worldmodel models/items/psd.md3 +icon gfx/hud/psd_medium +count 50 +type IT_ARMOR +tag ITM_SHIELD_LRG_PICKUP +max 8 8 16 +min -8 -8 -4 +} + + +{ +itemname ITM_GOODIE_KEY_PICKUP +classname item_goodie_key +worldmodel models/items/key.md3 +icon gfx/hud/i_icon_goodie_key +type IT_HOLDABLE +tag INV_GOODIE_KEY +max 8 8 16 +min -8 -8 -0 +} + + +{ +itemname ITM_SECURITY_KEY_PICKUP +classname item_security_key +worldmodel models/items/key.md3 +icon gfx/hud/i_icon_security_key +type IT_HOLDABLE +tag INV_SECURITY_KEY +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_HEAL_PICKUP + +classname holocron_force_heal +worldmodel models/map_objects/force_holocrons/heal.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_heal +count 1 +type IT_HOLOCRON +tag FP_HEAL +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_LEVITATION_PICKUP + +classname holocron_force_levitation +worldmodel models/map_objects/force_holocrons/jump.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_levitation +count 1 +type IT_HOLOCRON +tag FP_LEVITATION +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_SPEED_PICKUP + +classname holocron_force_speed +worldmodel models/map_objects/force_holocrons/speed.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_speed +count 1 +type IT_HOLOCRON +tag FP_SPEED +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_PUSH_PICKUP + +classname holocron_force_push +worldmodel models/map_objects/force_holocrons/push.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_push +count 1 +type IT_HOLOCRON +tag FP_PUSH +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_PULL_PICKUP + +classname holocron_force_pull +worldmodel models/map_objects/force_holocrons/pull.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_pull +count 1 +type IT_HOLOCRON +tag FP_PULL +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_TELEPATHY_PICKUP + +classname holocron_force_telepathy +worldmodel models/map_objects/force_holocrons/telepathy.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_telepathy +count 1 +type IT_HOLOCRON +tag FP_TELEPATHY +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_GRIP_PICKUP + +classname holocron_force_grip +worldmodel models/map_objects/force_holocrons/grip.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_grip +count 1 +type IT_HOLOCRON +tag FP_GRIP +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_LIGHTNING_PICKUP + +classname holocron_force_lightning +worldmodel models/map_objects/force_holocrons/lightning.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_lightning +count 1 +type IT_HOLOCRON +tag FP_LIGHTNING +max 8 8 16 +min -8 -8 -0 +} + +{ +itemname ITM_FORCE_SABERTHROW_PICKUP + +classname holocron_force_saberthrow +worldmodel models/map_objects/force_holocrons/saberthrow.md3 +pickupsound sound/player/holocron.wav +icon gfx/hud/f_icon_saberthrow +count 1 +type IT_HOLOCRON +tag FP_SABERTHROW +max 8 8 16 +min -8 -8 -0 +} diff --git a/base/ext_data/npcs/Bartender.npc b/base/ext_data/npcs/Bartender.npc new file mode 100644 index 0000000..4b0db4a --- /dev/null +++ b/base/ext_data/npcs/Bartender.npc @@ -0,0 +1,25 @@ +Bartender +{ + playerModel chiss + weapon WP_NONE + snd bartender + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race human + class CLASS_BARTENDER + walkSpeed 55 + runSpeed 200 + yawspeed 90 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/BespinCop.npc b/base/ext_data/npcs/BespinCop.npc new file mode 100644 index 0000000..f022f1c --- /dev/null +++ b/base/ext_data/npcs/BespinCop.npc @@ -0,0 +1,57 @@ +BespinCop +{ + playerModel bespin_cop + weapon WP_BLASTER_PISTOL + health 40 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + walkSpeed 55 + runSpeed 200 + yawspeed 120 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +// race bespincop + class CLASS_BESPIN_COP + snd bespincop1 + sndcombat bespincop1 + sndextra bespincop1 +} + +BespinCop2 +{ + playerModel bespin_cop + weapon WP_BLASTER_PISTOL + health 40 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + walkSpeed 55 + runSpeed 200 + yawspeed 120 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +// race bespincop + class CLASS_BESPIN_COP + snd bespincop2 + sndcombat bespincop2 + sndextra bespincop2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Desann.npc b/base/ext_data/npcs/Desann.npc new file mode 100644 index 0000000..646ea2f --- /dev/null +++ b/base/ext_data/npcs/Desann.npc @@ -0,0 +1,53 @@ +Desann +{ + playerModel desann + saber desann + weapon WP_SABER + saberStyle 4 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 3 + FP_RAGE 3 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 3 + FP_SEE 3 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 50 + rank captain + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + scale 135 + height 78 + crouchheight 42 + width 18 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_DESANN + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + snd desann + sndcombat desann + sndjedi desann + health 500 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Elder.npc b/base/ext_data/npcs/Elder.npc new file mode 100644 index 0000000..0c0fd3c --- /dev/null +++ b/base/ext_data/npcs/Elder.npc @@ -0,0 +1,55 @@ +Elder +{ + playerModel prisoner + weapon WP_NONE + customSkin elder + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_PRISONER + snd prisoner1 + sndcombat prisoner1 + sndextra prisoner1 + walkSpeed 55 + runSpeed 200 + yawspeed 110 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +Elder2 +{ + playerModel prisoner + weapon WP_NONE + customSkin elder2 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_PRISONER + snd prisoner2 + sndcombat prisoner2 + sndextra prisoner2 + walkSpeed 55 + runSpeed 200 + yawspeed 110 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Galak.npc b/base/ext_data/npcs/Galak.npc new file mode 100644 index 0000000..4b5ab60 --- /dev/null +++ b/base/ext_data/npcs/Galak.npc @@ -0,0 +1,22 @@ +Galak +{ + playerModel galak + weapon WP_BLASTER + altFire 1 + rank commander + snd galak + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank captain + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_IMPERIAL + yawspeed 90 + walkSpeed 55 + runSpeed 200 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Galak_Mech.npc b/base/ext_data/npcs/Galak_Mech.npc new file mode 100644 index 0000000..76d00f8 --- /dev/null +++ b/base/ext_data/npcs/Galak_Mech.npc @@ -0,0 +1,36 @@ +Galak_Mech +{ + playerModel galak_mech + weapon WP_REPEATER + health 1000 + width 20 + height 88 + crouchheight 88 + snd galak_mech + reactions 3 + aim 5 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_GALAK_MECH + snd galak + sndcombat galak + sndextra galak + yawSpeed 50 + walkSpeed 45 + runSpeed 150 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 + headPitchRangeUp 60 + headPitchRangeDown 60 + torsoPitchRangeUp 60 + torsoPitchRangeDown 60 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Glider.npc b/base/ext_data/npcs/Glider.npc new file mode 100644 index 0000000..f133bb7 --- /dev/null +++ b/base/ext_data/npcs/Glider.npc @@ -0,0 +1,21 @@ +Glider +{ + playerModel glider + weapon WP_MELEE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race harvester + class CLASS_GLIDER + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + hFOV 120 + vfov 45 + snd glider +} \ No newline at end of file diff --git a/base/ext_data/npcs/Gran.npc b/base/ext_data/npcs/Gran.npc new file mode 100644 index 0000000..52ca56c --- /dev/null +++ b/base/ext_data/npcs/Gran.npc @@ -0,0 +1,125 @@ +Gran +{ + playerModel gran + customSkin sp + customRGBA random1 + weapon WP_THERMAL + weapon WP_MELEE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + health 30 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_GRAN + snd gran1 + sndcombat gran1 + sndextra gran1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +Gran2 +{ + playerModel gran + customSkin sp + customRGBA random1 + weapon WP_THERMAL + weapon WP_MELEE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + health 30 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_GRAN + snd gran2 + sndcombat gran2 + sndextra gran2 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +GranBoxer +{ + playerModel gran + customSkin sp + customRGBA random1 + weapon WP_MELEE + surfOff "l_leg_kneeguard r_leg_kneeguard" + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 50 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_GRAN + snd gran2 + sndcombat gran2 + sndextra gran2 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +GranShooter +{ + playerModel gran + customSkin sp + customRGBA random1 + weapon WP_BLASTER + surfOff "l_leg_kneeguard" + reactions 3 + aim 5 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 40 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_GRAN + snd gran1 + sndcombat gran1 + sndextra gran1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/HazardTrooper.npc b/base/ext_data/npcs/HazardTrooper.npc new file mode 100644 index 0000000..45a307a --- /dev/null +++ b/base/ext_data/npcs/HazardTrooper.npc @@ -0,0 +1,92 @@ +hazardtrooper +{ + playerModel hazardtrooper + weapon WP_REPEATER + health 150 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_HAZARD_TROOPER + height 80 + crouchheight 48 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 100 + walkSpeed 55 + runSpeed 65 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +hazardtrooperconcussion +{ + playerModel hazardtrooper + weapon WP_CONCUSSION + health 150 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_HAZARD_TROOPER + height 80 + crouchheight 48 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 100 + walkSpeed 55 + runSpeed 65 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +hazardtrooperofficer +{ + playerModel hazardtrooper + weapon WP_FLECHETTE + health 150 + headPitchRangeDown 30 + reactions 4 + aim 3 + move 4 + aggression 5 + evasion 2 + intelligence 5 + rank lt + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_HAZARD_TROOPER + height 64 + crouchheight 48 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 100 + walkSpeed 55 + runSpeed 65 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Howler.npc b/base/ext_data/npcs/Howler.npc new file mode 100644 index 0000000..eb03c94 --- /dev/null +++ b/base/ext_data/npcs/Howler.npc @@ -0,0 +1,23 @@ +Howler +{ + playerModel howler + weapon WP_MELEE + height 32 + crouchheight 32 + reactions 4 + aim 1 + move 5 + aggression 3 + evasion 5 + intelligence 2 + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_HOWLER + yawSpeed 60 + runSpeed 300 + walkSpeed 100 + hFOV 120 + vfov 45 + snd howler + health 60 +} \ No newline at end of file diff --git a/base/ext_data/npcs/ImpCommander.npc b/base/ext_data/npcs/ImpCommander.npc new file mode 100644 index 0000000..585f3f0 --- /dev/null +++ b/base/ext_data/npcs/ImpCommander.npc @@ -0,0 +1,34 @@ +ImpCommander +{ + playerModel imperial + weapon WP_BLASTER + altFire 1 + surfOff l_arm_key + customSkin commander + health 80 + reactions 4 + aim 4 + move 4 + aggression 4 + evasion 4 + intelligence 4 + rank commander + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_IMPERIAL +// snd io3 +// sndcombat io3 +// sndextra io3 + snd io1 + sndcombat io1 + sndextra io1 + yawspeed 110 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/ImpOfficer.npc b/base/ext_data/npcs/ImpOfficer.npc new file mode 100644 index 0000000..dd408f0 --- /dev/null +++ b/base/ext_data/npcs/ImpOfficer.npc @@ -0,0 +1,30 @@ +ImpOfficer +{ + playerModel imperial + weapon WP_BLASTER + surfOff l_arm_key + customSkin officer + health 40 + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 3 + intelligence 3 + rank ltcomm + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_IMPERIAL + snd io1 + sndcombat io1 + sndextra io1 + yawspeed 110 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/ImpWorker.npc b/base/ext_data/npcs/ImpWorker.npc new file mode 100644 index 0000000..7b9ad15 --- /dev/null +++ b/base/ext_data/npcs/ImpWorker.npc @@ -0,0 +1,101 @@ +ImpWorker +{ + playerModel imperial_worker + weapon WP_BLASTER_PISTOL + headPitchRangeDown 30 + health 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race imperial + class CLASS_IMPWORKER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd worker1 + sndcombat worker1 + sndextra worker1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +ImpWorker2 +{ + playerModel imperial_worker + weapon WP_BLASTER_PISTOL + headPitchRangeDown 30 + health 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race imperial + class CLASS_IMPWORKER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd worker2 + sndcombat worker2 + sndextra worker2 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +ImpWorker3 +{ + playerModel imperial_worker + weapon WP_BLASTER_PISTOL + headPitchRangeDown 30 + health 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race imperial + class CLASS_IMPWORKER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd worker3 + sndcombat worker3 + sndextra worker3 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Imperial.npc b/base/ext_data/npcs/Imperial.npc new file mode 100644 index 0000000..2e1ea9e --- /dev/null +++ b/base/ext_data/npcs/Imperial.npc @@ -0,0 +1,29 @@ +Imperial +{ + playerModel imperial + weapon WP_BLASTER_PISTOL + surfOff l_arm_key + health 20 + reactions 2 + aim 2 + move 2 + aggression 2 + evasion 2 + intelligence 2 + rank lt + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_IMPERIAL + snd io2 + sndcombat io2 + sndextra io2 + yawspeed 110 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Jan.npc b/base/ext_data/npcs/Jan.npc new file mode 100644 index 0000000..ceb7499 --- /dev/null +++ b/base/ext_data/npcs/Jan.npc @@ -0,0 +1,30 @@ +Jan +{ + playerModel jan + weapon WP_BLASTER + altFire 1 + rank lt + reactions 3 + aim 5 + move 3 + aggression 3 + evasion 3 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JAN + sex female + snd jan + sndcombat jan + sndextra jan + yawSpeed 140 + walkSpeed 55 + runSpeed 200 +// race human + snd jan + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 1 + dismemberProbLegs 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Jedi.npc b/base/ext_data/npcs/Jedi.npc new file mode 100644 index 0000000..41a62dc --- /dev/null +++ b/base/ext_data/npcs/Jedi.npc @@ -0,0 +1,102 @@ +Jedi +{ + playerModel jedi + saber single_2 + saberColor yellow + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi1 + sndcombat jedi1 + sndjedi jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +Jedi2 +{ + playerModel jedi + saber single_7 + saberColor orange + weapon WP_SABER + saberStyle 1 + saberStyle 2 + saberStyle 3 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 200 + forcePowerMax 75 + rank lt + customSkin j2 + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/JediF.npc b/base/ext_data/npcs/JediF.npc new file mode 100644 index 0000000..673b974 --- /dev/null +++ b/base/ext_data/npcs/JediF.npc @@ -0,0 +1,49 @@ +JediF +{ + playerModel jan + surfOff "torso_vest hips_chaps torso_computer head_goggles torso_comp hips_belt" + surfOn "torso_augment hips_augment hips_torso" + saber dual_3 + saberColor random + weapon WP_SABER + saberStyle 7 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd jan + sndcombat jan + sndjedi jan + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/JediMaster.npc b/base/ext_data/npcs/JediMaster.npc new file mode 100644 index 0000000..10dabd7 --- /dev/null +++ b/base/ext_data/npcs/JediMaster.npc @@ -0,0 +1,47 @@ +JediMaster +{ + playerModel jedi + customSkin master + saber dual_3 + saberColor green + weapon WP_SABER + saberStyle 7 + FP_HEAL 2 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 2 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 0 + FP_SEE 2 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank commander + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 400 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/JediTrainer.npc b/base/ext_data/npcs/JediTrainer.npc new file mode 100644 index 0000000..0fd02f6 --- /dev/null +++ b/base/ext_data/npcs/JediTrainer.npc @@ -0,0 +1,48 @@ +JediTrainer +{ + playerModel jeditrainer + saber jedi + saber2 jedi + saberColor purple + saber2Color purple + weapon WP_SABER + saberStyle 6 + FP_HEAL 2 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 2 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 0 + FP_SEE 2 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank commander + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 400 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Kyle.npc b/base/ext_data/npcs/Kyle.npc new file mode 100644 index 0000000..c522636 --- /dev/null +++ b/base/ext_data/npcs/Kyle.npc @@ -0,0 +1,91 @@ +Kyle +{ + playerModel kyle + saber kyle + rank commander + health 1000 + weapon WP_BRYAR_PISTOL + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 3 + FP_GRIP 3 + FP_LIGHTNING 2 + FP_SABERTHROW 3 + FP_RAGE 0 + FP_PROTECT 3 + FP_ABSORB 3 + FP_DRAIN 0 + FP_SEE 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forcePowerMax 200 + reactions 4 + aim 5 + move 3 + aggression 5 + evasion 5 + intelligence 5 + playerTeam TEAM_PLAYER + class CLASS_KYLE + snd kyle + sndcombat kyle + sndjedi kyle + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} + +Kyle_boss +{ + playerModel kyle + saber kyle_boss + rank captain + health 300 + weapon WP_SABER + saberStyle 1 + saberStyle 2 + saberStyle 3 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 3 + FP_GRIP 3 + FP_LIGHTNING 0 +// FP_SABERTHROW 3 + FP_SABERTHROW 0 + FP_RAGE 0 + FP_PROTECT 3 + FP_ABSORB 3 + FP_DRAIN 0 + FP_SEE 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 4 + aim 5 + move 3 + aggression 5 + evasion 5 + intelligence 5 + playerTeam TEAM_PLAYER + class CLASS_KYLE + snd kyle_boss + sndcombat kyle_boss + sndjedi kyle_boss + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/Lando.npc b/base/ext_data/npcs/Lando.npc new file mode 100644 index 0000000..360aa72 --- /dev/null +++ b/base/ext_data/npcs/Lando.npc @@ -0,0 +1,62 @@ +Lando +{ + playerModel lando + weapon WP_BLASTER + rank captain + altFire 1 + snd lando + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_LANDO + snd lando + sndcombat lando + sndextra lando + sndjedi lando + walkSpeed 55 + runSpeed 200 + yawspeed 120 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} + +Lando_cin +{ + playerModel lando + rank captain + altFire 1 + snd lando + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_LANDO + snd lando + sndcombat lando + sndextra lando + sndjedi lando + walkSpeed 52 + runSpeed 200 + yawspeed 120 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Luke.npc b/base/ext_data/npcs/Luke.npc new file mode 100644 index 0000000..b6c1176 --- /dev/null +++ b/base/ext_data/npcs/Luke.npc @@ -0,0 +1,49 @@ +Luke +{ + playerModel luke + saber luke + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 3 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_SABERTHROW 3 + FP_RAGE 0 + FP_PROTECT 3 + FP_ABSORB 3 + FP_DRAIN 0 + FP_SEE 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forcePowerMax 200 + rank captain + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 5 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_LUKE + yawSpeed 140 + walkSpeed 55 + runSpeed 200 +// race human + snd luke + sndcombat luke + sndjedi luke + health 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Merchant.npc b/base/ext_data/npcs/Merchant.npc new file mode 100644 index 0000000..ec2a7f5 --- /dev/null +++ b/base/ext_data/npcs/Merchant.npc @@ -0,0 +1,27 @@ +Merchant +{ + playerModel prisoner + weapon WP_NONE + customSkin merchant + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_PRISONER + snd prisoner2 + sndcombat prisoner2 + sndextra prisoner2 + walkSpeed 55 + runSpeed 200 + yawspeed 110 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Minemonster.npc b/base/ext_data/npcs/Minemonster.npc new file mode 100644 index 0000000..6782dfe --- /dev/null +++ b/base/ext_data/npcs/Minemonster.npc @@ -0,0 +1,24 @@ +Minemonster +{ + playerModel minemonster + weapon WP_MELEE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_MINEMONSTER + snd mine + yawSpeed 160 + runSpeed 210 + walkSpeed 50 + hFOV 120 + vfov 45 + height 30 + width 9 + snd mine + health 40 +} \ No newline at end of file diff --git a/base/ext_data/npcs/MonMothma.npc b/base/ext_data/npcs/MonMothma.npc new file mode 100644 index 0000000..a8ab731 --- /dev/null +++ b/base/ext_data/npcs/MonMothma.npc @@ -0,0 +1,25 @@ +MonMothma +{ + playerModel monmothma + weapon WP_NONE + snd monmothma + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_MONMOTHMA + walkSpeed 55 + runSpeed 200 + yawspeed 90 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/MorganKatarn.npc b/base/ext_data/npcs/MorganKatarn.npc new file mode 100644 index 0000000..13e025b --- /dev/null +++ b/base/ext_data/npcs/MorganKatarn.npc @@ -0,0 +1,25 @@ +MorganKatarn +{ + playerModel morgan + weapon WP_NONE + snd morgan + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race human + class CLASS_MORGAN + walkSpeed 55 + runSpeed 200 + yawspeed 90 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Noghri.npc b/base/ext_data/npcs/Noghri.npc new file mode 100644 index 0000000..5306e84 --- /dev/null +++ b/base/ext_data/npcs/Noghri.npc @@ -0,0 +1,27 @@ +Noghri +{ + playerModel noghri + weapon WP_NOGHRI_STICK + reactions 4 + aim 2 + move 5 + aggression 3 + evasion 5 + intelligence 3 + rank crewman + health 100 + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_NOGHRI + snd noghri1 + sndcombat noghri1 + sndextra noghri1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Prisoner.npc b/base/ext_data/npcs/Prisoner.npc new file mode 100644 index 0000000..1ff30d6 --- /dev/null +++ b/base/ext_data/npcs/Prisoner.npc @@ -0,0 +1,54 @@ +Prisoner +{ + playerModel prisoner + weapon WP_NONE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_PRISONER + snd prisoner1 + sndcombat prisoner1 + sndextra prisoner1 + walkSpeed 55 + runSpeed 200 + yawspeed 110 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +Prisoner2 +{ + playerModel prisoner + weapon WP_NONE + customSkin prisoner2 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_PRISONER + snd prisoner2 + sndcombat prisoner2 + sndextra prisoner2 + walkSpeed 55 + runSpeed 200 + yawspeed 110 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Ragnos.npc b/base/ext_data/npcs/Ragnos.npc new file mode 100644 index 0000000..16709ca --- /dev/null +++ b/base/ext_data/npcs/Ragnos.npc @@ -0,0 +1,20 @@ +Ragnos +{ + playerModel marka_ragnos + weapon WP_NONE + rank captain + snd ragnos + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank captain + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_GRAN + yawspeed 90 + walkSpeed 55 + runSpeed 200 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Rax.npc b/base/ext_data/npcs/Rax.npc new file mode 100644 index 0000000..b6d4231 --- /dev/null +++ b/base/ext_data/npcs/Rax.npc @@ -0,0 +1,25 @@ +Rax +{ + playerModel rax_joris + weapon WP_CONCUSSION + altFire 1 + rank commander + snd rax + sndcombat rax + sndextra rax + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 4 + rank captain + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_IMPERIAL + yawspeed 90 + walkSpeed 55 + runSpeed 200 + health 300 + visrange 3000 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Rebel.npc b/base/ext_data/npcs/Rebel.npc new file mode 100644 index 0000000..3ecc94a --- /dev/null +++ b/base/ext_data/npcs/Rebel.npc @@ -0,0 +1,61 @@ +Rebel +{ + playerModel rebel + weapon WP_BLASTER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_REBEL +// snd rebel1 +// sndcombat rebel1 +// sndextra rebel1 + snd rebel_pilot1 + sndcombat rebel_pilot1 + sndextra rebel_pilot1 + yawspeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +Rebel2 +{ + playerModel rebel + weapon WP_BLASTER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_REBEL +// snd rebel2 +// sndcombat rebel2 +// sndextra rebel2 + snd rebel_pilot1 + sndcombat rebel_pilot1 + sndextra rebel_pilot1 + yawspeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Rebel2.npc b/base/ext_data/npcs/Rebel2.npc new file mode 100644 index 0000000..c163ffa --- /dev/null +++ b/base/ext_data/npcs/Rebel2.npc @@ -0,0 +1,27 @@ +Rebel2 +{ + playerModel rebel + weapon WP_BLASTER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race human + class CLASS_REBEL + snd rebel_pilot1 + sndcombat rebel_pilot1 + sndextra rebel_pilot1 + yawspeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Reborn.npc b/base/ext_data/npcs/Reborn.npc new file mode 100644 index 0000000..b29fc1f --- /dev/null +++ b/base/ext_data/npcs/Reborn.npc @@ -0,0 +1,50 @@ +Reborn +{ + playerModel reborn + saber reborn + weapon WP_SABER + saberStyle 1 + FP_HEAL 0 + FP_LEVITATION 1 + FP_SPEED 1 + FP_PUSH 0 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 1 + forcePowerMax 50 + forceRegenRate 200 + reactions 1 + aim 1 + move 1 + aggression 1 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + scale 94 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd reborn1 + sndcombat reborn1 + sndjedi reborn1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 40 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornAcrobat.npc b/base/ext_data/npcs/RebornAcrobat.npc new file mode 100644 index 0000000..1f82848 --- /dev/null +++ b/base/ext_data/npcs/RebornAcrobat.npc @@ -0,0 +1,51 @@ +RebornAcrobat +{ + playerModel reborn + customSkin acrobat + saber reborn + saberColor red + weapon WP_SABER + saberStyle 2 + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 1 + FP_PUSH 0 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 1 + rank crewman + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 3 + intelligence 5 + hfov 160 + vfov 160 + scale 96 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd reborn1 + sndcombat reborn1 + sndjedi reborn1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornBoss.npc b/base/ext_data/npcs/RebornBoss.npc new file mode 100644 index 0000000..61488eb --- /dev/null +++ b/base/ext_data/npcs/RebornBoss.npc @@ -0,0 +1,51 @@ +RebornBoss +{ + playerModel reborn + customSkin boss + saber shadowtrooper + weapon WP_SABER + saberStyle 1 + saberStyle 2 + saberStyle 3 + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 1 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank lt + reactions 3 + aim 3 + move 5 + aggression 4 + evasion 3 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd reborn3 + sndcombat reborn3 + sndjedi reborn3 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornChiss.npc b/base/ext_data/npcs/RebornChiss.npc new file mode 100644 index 0000000..dbc1c2e --- /dev/null +++ b/base/ext_data/npcs/RebornChiss.npc @@ -0,0 +1,54 @@ +RebornChiss +{ + playerModel chiss + saber reborn + saber2 sabersai + saber2color red + weapon WP_SABER + saberStyle 6 + FP_HEAL 0 + FP_LEVITATION 0 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + rank ltjg + reactions 3 + aim 3 + move 5 + aggression 4 + evasion 2 + intelligence 5 + hfov 160 + vfov 160 + scale 96 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd bartender + sndcombat bartender + sndjedi bartender +// snd reborn2 +// sndcombat reborn2 +// sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornFencer.npc b/base/ext_data/npcs/RebornFencer.npc new file mode 100644 index 0000000..9d49e8e --- /dev/null +++ b/base/ext_data/npcs/RebornFencer.npc @@ -0,0 +1,52 @@ +RebornFencer +{ + playerModel reborn + customSkin fencer + saber reborn + weapon WP_SABER + saberStyle 1 + FP_HEAL 0 + FP_LEVITATION 0 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + forcePowerMax 75 + forceRegenRate 200 + rank ltjg + reactions 3 + aim 3 + move 5 + aggression 4 + evasion 2 + intelligence 5 + hfov 160 + vfov 160 + scale 96 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornForceUser.npc b/base/ext_data/npcs/RebornForceUser.npc new file mode 100644 index 0000000..76859ce --- /dev/null +++ b/base/ext_data/npcs/RebornForceUser.npc @@ -0,0 +1,51 @@ +RebornForceUser +{ + playerModel reborn + customSkin forceuser + saber reborn + weapon WP_SABER + saberStyle 2 + FP_HEAL 0 + FP_LEVITATION 1 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 1 + forceRegenRate 150 + rank ensign + reactions 3 + aim 3 + move 5 + aggression 2 + evasion 2 + intelligence 5 + hfov 160 + vfov 160 + scale 96 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 80 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornRodian.npc b/base/ext_data/npcs/RebornRodian.npc new file mode 100644 index 0000000..13e7127 --- /dev/null +++ b/base/ext_data/npcs/RebornRodian.npc @@ -0,0 +1,52 @@ +RebornRodian +{ + playerModel rodian + weapon WP_SABER + saber saberstar2 + saber2 saberstar2 + saberColor red + saber2Color red + saberStyle 6 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 2 + FP_PUSH 1 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + rank lt + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 3 + intelligence 5 + hfov 160 + vfov 160 + scale 96 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd rodian1 + sndcombat rodian1 + sndjedi rodian1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornTrandoshan.npc b/base/ext_data/npcs/RebornTrandoshan.npc new file mode 100644 index 0000000..cdc99e5 --- /dev/null +++ b/base/ext_data/npcs/RebornTrandoshan.npc @@ -0,0 +1,50 @@ +RebornTrandoshan +{ + playerModel trandoshan + weapon WP_SABER + saber sabertrident + saberColor red + saberColor2 red + saberColor3 red + saberColor4 red + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 0 + FP_PUSH 2 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 1 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 1 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + rank lt + reactions 3 + aim 3 + move 5 + aggression 4 + evasion 3 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd trandoshan1 + sndcombat trandoshan1 + sndjedi trandoshan1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RebornWeequay.npc b/base/ext_data/npcs/RebornWeequay.npc new file mode 100644 index 0000000..cf4e5b4 --- /dev/null +++ b/base/ext_data/npcs/RebornWeequay.npc @@ -0,0 +1,49 @@ +RebornWeequay +{ + playerModel weequay + weapon WP_SABER + saber saberbroad + saberColor red + saberColor2 red + saberStyle 3 + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 0 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 1 + FP_LIGHTNING 0 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 1 + FP_SEE 0 + FP_SABERTHROW 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + rank lt + reactions 3 + aim 3 + move 5 + aggression 4 + evasion 3 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd weequay + sndcombat weequay + sndjedi weequay + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Reborn_dual.npc b/base/ext_data/npcs/Reborn_dual.npc new file mode 100644 index 0000000..95b5330 --- /dev/null +++ b/base/ext_data/npcs/Reborn_dual.npc @@ -0,0 +1,103 @@ +reborn_dual +{ + playerModel reborn_new + customSkin red + saber reborn + saber2 reborn + weapon WP_SABER + saberStyle 6 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 1 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank ltcomm + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 300 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +reborn_dual2 +{ + playerModel reborn_new + customSkin blue + saber reborn + saber2 reborn + weapon WP_SABER + saberStyle 6 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + rank lt + reactions 5 + aim 5 + move 5 + aggression 4 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 175 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Reborn_new.npc b/base/ext_data/npcs/Reborn_new.npc new file mode 100644 index 0000000..901a6a3 --- /dev/null +++ b/base/ext_data/npcs/Reborn_new.npc @@ -0,0 +1,104 @@ +reborn_new +{ + playerModel reborn_new + saber reborn_new + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 1 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank ltcomm + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 300 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +reborn_new2 +{ + playerModel reborn_new + customSkin blue + saber shadowtrooper + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + rank lt + reactions 5 + aim 5 + move 5 + aggression 4 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 175 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Reborn_staff.npc b/base/ext_data/npcs/Reborn_staff.npc new file mode 100644 index 0000000..4413232 --- /dev/null +++ b/base/ext_data/npcs/Reborn_staff.npc @@ -0,0 +1,103 @@ +reborn_staff +{ + playerModel reborn_new + customSkin red + saber dual_1 + saberColor red + weapon WP_SABER + saberStyle 7 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 1 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank ltcomm + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn1 + sndcombat reborn1 + sndjedi reborn1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 300 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +reborn_staff2 +{ + playerModel reborn_new + customSkin blue + saber dual_1 + saberColor red + weapon WP_SABER + saberStyle 7 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 1 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + rank lt + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd reborn1 + sndcombat reborn1 + sndjedi reborn1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 175 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/Reborn_twin.npc b/base/ext_data/npcs/Reborn_twin.npc new file mode 100644 index 0000000..781110b --- /dev/null +++ b/base/ext_data/npcs/Reborn_twin.npc @@ -0,0 +1,275 @@ +DKothos +{ + playerModel reborn_twin +// customSkin ? + weapon WP_MELEE + health 500 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 2 + FP_PUSH 3 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 2 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 2 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 5 + aim 5 + move 5 + aggression 1 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd kothos + sndcombat kothos + sndjedi kothos + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +VKothos +{ + playerModel reborn_twin +// customSkin ? + weapon WP_MELEE + health 500 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 2 + FP_PUSH 3 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 2 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 2 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + scale 100 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd kothos + sndcombat kothos + sndjedi kothos + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +RebornMaster +{ + playerModel reborn_twin + customSkin boss + saber rebornmaster + weapon WP_SABER + saberStyle 1 + saberStyle 2 + saberStyle 3 + health 200 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 3 + FP_RAGE 3 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 2 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + scale 100 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SHADOWTROOPER + snd reborn1 + sndcombat reborn1 + sndjedi reborn1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +RebornMasterDual +{ + playerModel reborn_twin + customSkin boss + saber shadowtrooper + saber2 shadowtrooper + weapon WP_SABER + saberStyle 6 + health 200 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 3 + FP_RAGE 3 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 2 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + scale 100 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SHADOWTROOPER + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + + +RebornMasterStaff +{ + playerModel reborn_twin + customSkin boss + saber dual_1 + saberColor red + weapon WP_SABER + saberStyle 7 + health 200 + FP_HEAL 3 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 3 + FP_RAGE 3 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 2 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + hfov 120 + vfov 120 + scale 100 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SHADOWTROOPER + snd reborn2 + sndcombat reborn2 + sndjedi reborn2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/Reelo.npc b/base/ext_data/npcs/Reelo.npc new file mode 100644 index 0000000..f27c47d --- /dev/null +++ b/base/ext_data/npcs/Reelo.npc @@ -0,0 +1,30 @@ +Reelo +{ + playerModel reelo + weapon WP_BLASTER + rank commander + altFire 1 + snd reelo + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_REELO + snd reelo + sndcombat reelo + sndextra reelo + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/RocketTrooper.npc b/base/ext_data/npcs/RocketTrooper.npc new file mode 100644 index 0000000..8dad542 --- /dev/null +++ b/base/ext_data/npcs/RocketTrooper.npc @@ -0,0 +1,37 @@ +RocketTrooper +{ + playerModel stormtrooper +// surfOn torso_pauldron +// surfOff "torso_armor_neck_augment torso_body_neck_augment" + customSkin officer + weapon WP_ROCKET_LAUNCHER + health 60 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank ensign + scale 110 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_STORMTROOPER + height 68 + crouchheight 52 + walkSpeed 51 + runSpeed 200 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 100 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Rodian.npc b/base/ext_data/npcs/Rodian.npc new file mode 100644 index 0000000..c20d435 --- /dev/null +++ b/base/ext_data/npcs/Rodian.npc @@ -0,0 +1,66 @@ +Rodian +{ + playerModel rodian + customSkin sp + customRGBA random1 + weapon WP_DISRUPTOR + altFire 1 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 25 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_RODIAN + snd rodian1 + sndcombat rodian1 + sndextra rodian1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + visrange 8192 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +Rodian2 +{ + playerModel rodian + customSkin sp + customRGBA random1 + weapon WP_BLASTER + altFire 1 + surfOff "hips_belt torso_vest" + surfOn "torso_augment" + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 20 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_RODIAN + snd rodian2 + sndcombat rodian2 + sndextra rodian2 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/STCommander.npc b/base/ext_data/npcs/STCommander.npc new file mode 100644 index 0000000..788081a --- /dev/null +++ b/base/ext_data/npcs/STCommander.npc @@ -0,0 +1,37 @@ +STCommander +{ + playerModel stormtrooper +// surfOn torso_pauldron +// surfOff "torso_armor_neck_augment torso_body_neck_augment" + customSkin officer + weapon WP_REPEATER + health 60 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank ensign + scale 105 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_STORMTROOPER + height 68 + crouchheight 52 + walkSpeed 51 + runSpeed 200 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 110 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/STOfficer.npc b/base/ext_data/npcs/STOfficer.npc new file mode 100644 index 0000000..822e5ae --- /dev/null +++ b/base/ext_data/npcs/STOfficer.npc @@ -0,0 +1,74 @@ +STOfficer +{ + playerModel stormtrooper +// surfOn torso_pauldron +// surfOff "torso_armor_neck_augment torso_body_neck_augment" + customSkin officer + weapon WP_FLECHETTE + health 60 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank ensign + scale 105 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 68 + crouchheight 52 + walkSpeed 51 + runSpeed 200 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +STOfficerAlt +{ + playerModel stormtrooper +// surfOn torso_pauldron +// surfOff "torso_armor_neck_augment torso_body_neck_augment" + customSkin officer + weapon WP_FLECHETTE + altFire 1 + health 60 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank ensign + scale 105 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 68 + crouchheight 52 + walkSpeed 51 + runSpeed 200 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/STOfficerAlt.npc b/base/ext_data/npcs/STOfficerAlt.npc new file mode 100644 index 0000000..6524cb4 --- /dev/null +++ b/base/ext_data/npcs/STOfficerAlt.npc @@ -0,0 +1,37 @@ +STOfficerAlt +{ + playerModel stormtrooper + weapon WP_FLECHETTE + altFire 1 + surfOn torso_pauldron + surfOff "torso_armor_neck_augment torso_body_neck_augment" + health 60 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank ensign + scale 105 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_STORMTROOPER + height 68 + crouchheight 52 + walkSpeed 51 + runSpeed 200 + snd stofficer1 + sndcombat stofficer1 + sndextra stofficer1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/ShadowTrooper.npc b/base/ext_data/npcs/ShadowTrooper.npc new file mode 100644 index 0000000..5c99019 --- /dev/null +++ b/base/ext_data/npcs/ShadowTrooper.npc @@ -0,0 +1,100 @@ +ShadowTrooper +{ + playerModel shadowtrooper + saber shadowtrooper + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 1 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank ltcomm + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_SHADOWTROOPER + snd shadow1 + sndcombat shadow1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +ShadowTrooper2 +{ + playerModel shadowtrooper + saber shadowtrooper + saberColor red + weapon WP_SABER + saberStyle 3 + saberStyle 2 + saberStyle 1 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 1 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 2 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank lt + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_SHADOWTROOPER + snd shadow2 + sndcombat shadow2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/StormPilot.npc b/base/ext_data/npcs/StormPilot.npc new file mode 100644 index 0000000..463abe7 --- /dev/null +++ b/base/ext_data/npcs/StormPilot.npc @@ -0,0 +1,35 @@ +StormPilot +{ + playerModel stormpilot + weapon WP_BLASTER_PISTOL + health 30 + headPitchRangeDown 30 + reactions 3 + aim 5 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 +// snd stofficer1 +// sndcombat stofficer1 +// sndextra stofficer1 + snd worker2 + sndcombat worker2 + sndextra worker2 + yawspeed 80 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/StormTrooper.npc b/base/ext_data/npcs/StormTrooper.npc new file mode 100644 index 0000000..efa850d --- /dev/null +++ b/base/ext_data/npcs/StormTrooper.npc @@ -0,0 +1,67 @@ +StormTrooper +{ + playerModel stormtrooper + weapon WP_BLASTER + health 30 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_STORMTROOPER + height 64 + crouchheight 38 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +StormTrooper2 +{ + playerModel stormtrooper + weapon WP_BLASTER + health 30 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_STORMTROOPER + height 64 + crouchheight 38 + walkSpeed 51 + runSpeed 200 + snd st2 + sndcombat st2 + sndextra st2 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/SwampTrooper.npc b/base/ext_data/npcs/SwampTrooper.npc new file mode 100644 index 0000000..763336e --- /dev/null +++ b/base/ext_data/npcs/SwampTrooper.npc @@ -0,0 +1,63 @@ +SwampTrooper +{ + playerModel swamptrooper + weapon WP_FLECHETTE + headPitchRangeDown 30 + health 70 + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 3 + intelligence 3 + scale 110 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_SWAMPTROOPER + height 68 + crouchheight 52 + snd swamp1 + sndcombat swamp1 + sndextra swamp1 + yawspeed 100 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +SwampTrooper2 +{ + playerModel swamptrooper + weapon WP_REPEATER + headPitchRangeDown 30 + health 70 + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 3 + intelligence 3 + scale 110 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_SWAMPTROOPER + height 68 + crouchheight 52 + snd swamp2 + sndcombat swamp2 + sndextra swamp2 + yawspeed 100 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Tavion.npc b/base/ext_data/npcs/Tavion.npc new file mode 100644 index 0000000..f0f3c9e --- /dev/null +++ b/base/ext_data/npcs/Tavion.npc @@ -0,0 +1,50 @@ +Tavion +{ + playerModel tavion + rank commander + saber tavion + saberColor red + weapon WP_SABER + saberStyle 5 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 2 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 1 + FP_SEE 1 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_TAVION + sex female + snd tavion + sndcombat tavion + sndjedi tavion + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + health 300 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Tavion_new.npc b/base/ext_data/npcs/Tavion_new.npc new file mode 100644 index 0000000..91233ea --- /dev/null +++ b/base/ext_data/npcs/Tavion_new.npc @@ -0,0 +1,152 @@ +Tavion_new +{ + playerModel tavion_new + rank commander + saber tavion + saberColor red + weapon WP_SABER + saberStyle 5 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 2 + FP_RAGE 2 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 2 + FP_SEE 1 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_TAVION + sex female + snd tavion + sndcombat tavion + sndjedi tavion + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + health 300 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + +Tavion_scepter +{ + playerModel tavion_new + rank commander + saber tavion + saberColor red + weapon WP_SCEPTER + weapon WP_SABER + saberStyle 6 + health 400 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + sex female + snd tavion + sndcombat tavion + sndjedi tavion + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + +Tavion_sith_sword +{ + playerModel tavion_new + customSkin possessed + rank captain + weapon WP_SABER + saber sith_sword + saberStyle 4 + health 250 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 3 + FP_LIGHTNING 3 + FP_RAGE 3 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 3 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_DESANN + sex female + snd tavion + sndcombat tavion + sndjedi tavion + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/Trandoshan.npc b/base/ext_data/npcs/Trandoshan.npc new file mode 100644 index 0000000..8065257 --- /dev/null +++ b/base/ext_data/npcs/Trandoshan.npc @@ -0,0 +1,30 @@ +Trandoshan +{ + playerModel trandoshan + customSkin sp + customRGBA random1 + weapon WP_REPEATER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 40 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race klingon + class CLASS_TRANDOSHAN + snd trandoshan1 + sndcombat trandoshan1 + sndextra trandoshan1 + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/Ugnaught.npc b/base/ext_data/npcs/Ugnaught.npc new file mode 100644 index 0000000..855c228 --- /dev/null +++ b/base/ext_data/npcs/Ugnaught.npc @@ -0,0 +1,55 @@ +Ugnaught +{ + playerModel ugnaught + weapon WP_NONE + scale 75 + health 10 + snd ugnaught + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_PLAYER + class CLASS_UGNAUGHT + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +Ugnaught2 +{ + playerModel ugnaught + weapon WP_NONE + surfOff "l_hand_purse" + surfOn "r_hand_tool" + scale 75 + health 10 + snd ugnaught + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_PLAYER + class CLASS_UGNAUGHT + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/alora.npc b/base/ext_data/npcs/alora.npc new file mode 100644 index 0000000..a599c9d --- /dev/null +++ b/base/ext_data/npcs/alora.npc @@ -0,0 +1,103 @@ +alora +{ + playerModel alora + rank lt + saber single_4 + saberColor red + weapon WP_SABER + saberStyle 2 + saberStyle 1 + health 300 + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 2 + reactions 3 + aim 3 + move 5 + aggression 3 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + sex female + snd alora + sndcombat alora + sndjedi alora + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + +alora_dual +{ +// playerModel alora2 + playerModel alora + rank commander + saber single_4 + saberColor red + saber2 single_4 + saber2Color red + weapon WP_SABER + saberStyle 6 + health 500 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 3 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 2 + FP_RAGE 3 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 3 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_ALORA + sex female + snd alora + sndcombat alora + sndjedi alora + yawSpeed 120 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/assassin_droid.npc b/base/ext_data/npcs/assassin_droid.npc new file mode 100644 index 0000000..5996821 --- /dev/null +++ b/base/ext_data/npcs/assassin_droid.npc @@ -0,0 +1,32 @@ +assassin_droid +{ + playerModel assassin_droid + weapon WP_BLASTER + health 150 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_ASSASSIN_DROID + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd shadowtrooper1 + sndcombat shadowtrooper1 + sndextra shadowtrooper1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 100 + dismemberProbArms 100 + dismemberProbLegs 100 + dismemberProbHands 100 + dismemberProbWaist 100 +} \ No newline at end of file diff --git a/base/ext_data/npcs/atst.npc b/base/ext_data/npcs/atst.npc new file mode 100644 index 0000000..ecb1273 --- /dev/null +++ b/base/ext_data/npcs/atst.npc @@ -0,0 +1,36 @@ +atst +{ + playerModel atst + weapon WP_ATST_MAIN + weapon WP_ATST_SIDE +// headModel atst + //torsoModel atst + //legsModel atst + headYawRangeLeft 80 + headYawRangeRight 80 + headPitchRangeUp 30 + headPitchRangeDown 30 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 0 + torsoPitchRangeDown 0 + health 200 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + height 272 + width 80 +// race bot + class CLASS_ATST + yawSpeed 60 + runSpeed 150 + walkSpeed 150 + hFOV 120 + vfov 45 + snd atst +} \ No newline at end of file diff --git a/base/ext_data/npcs/atst_vehicle.npc b/base/ext_data/npcs/atst_vehicle.npc new file mode 100644 index 0000000..ba9998b --- /dev/null +++ b/base/ext_data/npcs/atst_vehicle.npc @@ -0,0 +1,13 @@ +ATST_vehicle +{ + weapon WP_BOWCASTER + weapon WP_ROCKET_LAUNCHER + weapon WP_EMPLACED_GUN + playerModel atst + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_VEHICLE + height 272 + width 80 + health 3000 +} \ No newline at end of file diff --git a/base/ext_data/npcs/boba_fett.npc b/base/ext_data/npcs/boba_fett.npc new file mode 100644 index 0000000..36d6257 --- /dev/null +++ b/base/ext_data/npcs/boba_fett.npc @@ -0,0 +1,44 @@ + +boba_fett +{ + playerModel boba_fett + altFire 1 + weapon WP_MELEE + weapon WP_DISRUPTOR + weapon WP_ROCKET_LAUNCHER + weapon WP_BLASTER + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 0 + FP_PUSH 0 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + health 400 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + earshot 2048 + visrange 4096 + hfov 120 + vfov 100 + rank captain + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_BOBAFETT + walkSpeed 80 + runSpeed 250 + snd boba + sndcombat boba + sndextra boba + yawspeed 180 +} + diff --git a/base/ext_data/npcs/chewie.npc b/base/ext_data/npcs/chewie.npc new file mode 100644 index 0000000..52a9d2d --- /dev/null +++ b/base/ext_data/npcs/chewie.npc @@ -0,0 +1,86 @@ +chewie +{ + playerModel chewbacca + altFire 0 + weapon WP_BOWCASTER + FP_HEAL 0 + FP_LEVITATION 0 + FP_SPEED 0 + FP_PUSH 0 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + health 400 + scale 122 + width 18 + height 78 + crouchheight 42 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + earshot 1024 + visrange 2048 + hfov 120 + vfov 100 + rank captain + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_REBEL + walkSpeed 60 + runSpeed 160 + snd chewbacca + sndcombat chewbacca + sndextra chewbacca + yawspeed 90 +} + +chewie_cin +{ + playerModel chewbacca + altFire 0 + FP_HEAL 0 + FP_LEVITATION 0 + FP_SPEED 0 + FP_PUSH 0 + FP_PULL 0 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + health 400 + scale 122 + width 18 + height 78 + crouchheight 42 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + earshot 1024 + visrange 2048 + hfov 120 + vfov 100 + rank captain + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_REBEL + walkSpeed 60 + runSpeed 160 + snd chewbacca + sndcombat chewbacca + sndextra chewbacca + yawspeed 90 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist.npc b/base/ext_data/npcs/cultist.npc new file mode 100644 index 0000000..e269d7e --- /dev/null +++ b/base/ext_data/npcs/cultist.npc @@ -0,0 +1,38 @@ +cultist +{ + playerModel cultist + weapon WP_BLASTER + altfire 1 + FP_LEVITATION 3 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 2 + FP_GRIP 1 + FP_LIGHTNING 1 + FP_DRAIN 1 + rank ltcomm + reactions 1 + aim 1 + move 1 + aggression 1 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 50 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist_destroyer.npc b/base/ext_data/npcs/cultist_destroyer.npc new file mode 100644 index 0000000..4e2fd66 --- /dev/null +++ b/base/ext_data/npcs/cultist_destroyer.npc @@ -0,0 +1,31 @@ +cultist_destroyer +{ + playerModel cultist + customSkin red + weapon WP_MELEE + FP_LEVITATION 3 + rank ltcomm + reactions 1 + aim 1 + move 1 + aggression 5 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist3 + sndcombat cultist3 + sndjedi cultist3 + yawSpeed 60 + walkSpeed 72 + runSpeed 230 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist_drain.npc b/base/ext_data/npcs/cultist_drain.npc new file mode 100644 index 0000000..4b39936 --- /dev/null +++ b/base/ext_data/npcs/cultist_drain.npc @@ -0,0 +1,37 @@ +cultist_drain +{ + playerModel cultist + customSkin red + weapon WP_MELEE + FP_LEVITATION 1 + FP_PUSH 3 + FP_DRAIN 3 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 1 + aim 1 + move 1 + aggression 5 + evasion 3 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd cultist3 + sndcombat cultist3 + sndjedi cultist3 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist_grip.npc b/base/ext_data/npcs/cultist_grip.npc new file mode 100644 index 0000000..ad77d26 --- /dev/null +++ b/base/ext_data/npcs/cultist_grip.npc @@ -0,0 +1,38 @@ +cultist_grip +{ + playerModel cultist + weapon WP_MELEE + FP_LEVITATION 1 + FP_PUSH 3 + FP_PULL 2 +// FP_GRIP 3 + FP_GRIP 2 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 1 + aim 1 + move 1 + aggression 5 + evasion 3 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd cultist3 + sndcombat cultist3 + sndjedi cultist3 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist_lightning.npc b/base/ext_data/npcs/cultist_lightning.npc new file mode 100644 index 0000000..4f5283d --- /dev/null +++ b/base/ext_data/npcs/cultist_lightning.npc @@ -0,0 +1,37 @@ +cultist_lightning +{ + playerModel cultist + customSkin blue + weapon WP_MELEE + FP_LEVITATION 1 + FP_PUSH 3 + FP_LIGHTNING 3 + forcePowerMax 200 + forceRegenRate 50 + forceRegenAmount 2 + rank captain + reactions 1 + aim 1 + move 1 + aggression 5 + evasion 3 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race human + class CLASS_REBORN + snd cultist3 + sndcombat cultist3 + sndjedi cultist3 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/cultist_saber.npc b/base/ext_data/npcs/cultist_saber.npc new file mode 100644 index 0000000..fcce37e --- /dev/null +++ b/base/ext_data/npcs/cultist_saber.npc @@ -0,0 +1,294 @@ +cultist_saber +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 1 + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_throw +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 1 + FP_SABERTHROW 1 + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_med +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 2 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 2 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_med_throw +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 2 + FP_LEVITATION 1 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 2 + FP_SABERTHROW 2 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_strong +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 3 + FP_LEVITATION 1 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 3 + rank ensign + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_strong_throw +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 3 + FP_LEVITATION 1 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 3 + FP_SABERTHROW 2 + rank ensign + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_all +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_LEVITATION 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 4 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_all_throw +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + FP_SABERTHROW 2 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 100 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/cultist_saber_powers.npc b/base/ext_data/npcs/cultist_saber_powers.npc new file mode 100644 index 0000000..41f7182 --- /dev/null +++ b/base/ext_data/npcs/cultist_saber_powers.npc @@ -0,0 +1,305 @@ +cultist_saber2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 2 + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_throw2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 2 + FP_SABERTHROW 1 + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_med2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 2 + rank ensign + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_med_throw2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 2 + rank ensign + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 2 + FP_SABERTHROW 2 + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_strong2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 3 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_strong_throw2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 3 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + FP_SABERTHROW 2 + reactions 1 + aim 1 + move 1 + aggression 2 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_all2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 4 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + +cultist_saber_all_throw2 +{ + playerModel cultist + customSkin brown + saber reborn + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + rank ltjg + FP_PUSH 1 + FP_LEVITATION 1 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 3 + FP_SABERTHROW 2 + reactions 1 + aim 1 + move 1 + aggression 3 + evasion 2 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd cultist1 + sndcombat cultist1 + sndjedi cultist1 + yawSpeed 60 + walkSpeed 45 + runSpeed 180 + health 150 + dismemberProbHead 0 + dismemberProbArms 20 + dismemberProbLegs 0 + dismemberProbHands 30 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/cultistcommando.npc b/base/ext_data/npcs/cultistcommando.npc new file mode 100644 index 0000000..dee5f3b --- /dev/null +++ b/base/ext_data/npcs/cultistcommando.npc @@ -0,0 +1,31 @@ +cultistcommando +{ + playerModel cultist + weapon WP_BLASTER_PISTOL + FP_LEVITATION 2 + rank ltcomm + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// class CLASS_COMMANDO + class CLASS_REBORN + snd cultist3 + sndcombat cultist3 + sndextra cultist3 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 250 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/gonk.npc b/base/ext_data/npcs/gonk.npc new file mode 100644 index 0000000..42f224a --- /dev/null +++ b/base/ext_data/npcs/gonk.npc @@ -0,0 +1,23 @@ +gonk +{ + playerModel gonk + weapon WP_NONE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_GONK + yawSpeed 60 + runSpeed 40 + walkSpeed 30 + height 32 + width 12 + hFOV 120 + vfov 45 + snd gonk +} \ No newline at end of file diff --git a/base/ext_data/npcs/human_merc.npc b/base/ext_data/npcs/human_merc.npc new file mode 100644 index 0000000..19ba1a7 --- /dev/null +++ b/base/ext_data/npcs/human_merc.npc @@ -0,0 +1,372 @@ +human_merc +{ + playerModel human_merc + weapon WP_BLASTER + surfOff "l_arm_pocket l_arm_key" + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd humanmerc1 + sndcombat humanmerc1 + sndextra humanmerc1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_bow +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_BOWCASTER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd humanmerc2 + sndcombat humanmerc2 + sndextra humanmerc2 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_rep +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_REPEATER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd humanmerc2 + sndcombat humanmerc2 + sndextra humanmerc2 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_flc +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_FLECHETTE + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd humanmerc1 + sndcombat humanmerc1 + sndextra humanmerc1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_cnc +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_CONCUSSION + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd humanmerc2 + sndcombat humanmerc2 + sndextra humanmerc2 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_BLASTER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_bow +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_BOWCASTER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_rep +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_REPEATER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_flc +{ + playerModel human_merc + surfOff "l_arm_pocket l_arm_key" + weapon WP_FLECHETTE + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +lannik_racto +{ + playerModel human_merc + customSkin racto + surfOff "l_arm_pocket l_arm_key" + weapon WP_CONCUSSION + health 300 + headPitchRangeDown 30 + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 5 + intelligence 5 + rank captain + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + snd lannik + sndcombat lannik + sndextra lannik + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +human_merc_key +{ + playerModel human_merc + customSkin key_carrier + weapon WP_BLASTER + health 100 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/interrogator.npc b/base/ext_data/npcs/interrogator.npc new file mode 100644 index 0000000..5d98daf --- /dev/null +++ b/base/ext_data/npcs/interrogator.npc @@ -0,0 +1,24 @@ +interrogator +{ + playermodel interrogator + weapon WP_NONE + health 100 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race bot + class CLASS_INTERROGATOR + yawSpeed 120 + runSpeed 150 + walkSpeed 50 + height 24 + width 12 + hFOV 120 + vfov 45 + snd interrogator +} \ No newline at end of file diff --git a/base/ext_data/npcs/jawa.npc b/base/ext_data/npcs/jawa.npc new file mode 100644 index 0000000..2264294 --- /dev/null +++ b/base/ext_data/npcs/jawa.npc @@ -0,0 +1,54 @@ +jawa +{ + playerModel jawa + weapon WP_NONE + scale 75 + health 10 + snd jawa + sndcombat jawa + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_FREE + class CLASS_JAWA + yawspeed 90 + walkSpeed 55 + runSpeed 150 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +jawa_armed +{ + playerModel jawa + weapon WP_JAWA + scale 75 + health 10 + snd jawa + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_FREE + class CLASS_JAWA + yawspeed 90 + walkSpeed 55 + runSpeed 100 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/jedi_random.npc b/base/ext_data/npcs/jedi_random.npc new file mode 100644 index 0000000..582a3f8 --- /dev/null +++ b/base/ext_data/npcs/jedi_random.npc @@ -0,0 +1,648 @@ + +jedi_hf1 +{ + playerModel jedi_hf + customSkin head_B1|torso_C1|lower_D1 +// customRGBA 255 157 114 + customRGBA jedi_hf + saber single_1 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi1 + sndcombat female_jedi1 + sndjedi female_jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_hf2 +{ + playerModel jedi_hf + customSkin head_C1|torso_A1|lower_B1 +// customRGBA 233 183 208 + customRGBA jedi_hf + saber single_2 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi1 + sndcombat female_jedi1 + sndjedi female_jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_hm1 +{ + playerModel jedi_hm + customSkin head_A1|torso_A1|lower_B1 +// customRGBA 112 153 161 + customRGBA jedi_hm + saber single_3 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi1 + sndcombat jedi1 + sndjedi jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_hm2 +{ + playerModel jedi_hm + customSkin head_B1|torso_C1|lower_A1 +// customRGBA 254 197 73 + customRGBA jedi_hm + saber single_4 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_kdm1 +{ + playerModel jedi_kdm + customSkin head_B1|torso_D1|lower_C1 +// customRGBA 138 83 0 + customRGBA jedi_kdm + saber dual_3 + saberColor random + weapon WP_SABER + saberStyle 7 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 1 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_kdm2 +{ + playerModel jedi_kdm + customSkin head_C1|torso_B1|lower_B1 +// customRGBA 225 226 144 + customRGBA jedi_kdm + saber single_5 + saberColor random + weapon WP_SABER + saberStyle 2 + saberStyle 3 + FP_HEAL 2 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 3 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 2 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi2 + sndcombat jedi2 + sndjedi jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_rm1 +{ + playerModel jedi_rm + customSkin head_A1|torso_A1|lower_A1 +// customRGBA 163 79 17 + customRGBA jedi_rm + saber single_6 + saberColor random + weapon WP_SABER + saberStyle 2 + saberStyle 1 + FP_HEAL 1 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 2 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi1 + sndcombat jedi1 + sndjedi jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_rm2 +{ + playerModel jedi_rm + customSkin head_B1|torso_B1|lower_C1 +// customRGBA 49 155 131 + customRGBA jedi_rm + saber single_7 + saberColor random + weapon WP_SABER + saberStyle 2 + saberStyle 1 + FP_HEAL 2 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + snd jedi1 + sndcombat jedi1 + sndjedi jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_tf1 +{ + playerModel jedi_tf + customSkin head_A1|torso_A1|lower_D1 +// customRGBA 255 200 212 + customRGBA jedi_tf + saber dual_5 + saberColor random + weapon WP_SABER + saberStyle 7 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi2 + sndcombat female_jedi2 + sndjedi female_jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_tf2 +{ + playerModel jedi_tf + customSkin head_B2|torso_C1|lower_C1 +// customRGBA 255 255 255 + customRGBA jedi_tf + saber single_8 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 2 + FP_HEAL 2 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 2 + FP_PULL 2 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 2 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi2 + sndcombat female_jedi2 + sndjedi female_jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_zf1 +{ + playerModel jedi_zf + customSkin head_B1|torso_A1|lower_D1 +// customRGBA 255 164 59 + customRGBA jedi_zf + saber single_9 + saberColor random + weapon WP_SABER + saberStyle 1 + saberStyle 3 + saberStyle 2 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi2 + sndcombat female_jedi2 + sndjedi female_jedi2 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + +jedi_zf2 +{ + playerModel jedi_zf + customSkin head_C1|torso_C1|lower_B1 +// customRGBA 161 226 240 + customRGBA jedi_zf + saber single_9 + saber2 single_1 + saberColor random + saber2Color random + weapon WP_SABER + saberStyle 6 + FP_HEAL 1 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 1 + FP_TELEPATHY 1 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 1 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + forceRegenRate 150 + forcePowerMax 90 + rank lt + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 2 + intelligence 3 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + sex female + snd female_jedi1 + sndcombat female_jedi1 + sndjedi female_jedi1 + health 200 + dismemberProbHead 0 + dismemberProbArms 5 + dismemberProbLegs 0 + dismemberProbHands 10 + dismemberProbWaist 0 +} + + diff --git a/base/ext_data/npcs/lambdashuttle.npc b/base/ext_data/npcs/lambdashuttle.npc new file mode 100644 index 0000000..12cfa65 --- /dev/null +++ b/base/ext_data/npcs/lambdashuttle.npc @@ -0,0 +1,12 @@ + +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +LambdaShuttle +{ + weapon WP_NONE + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 250 + height 248 +} diff --git a/base/ext_data/npcs/mark1.npc b/base/ext_data/npcs/mark1.npc new file mode 100644 index 0000000..8dbdfea --- /dev/null +++ b/base/ext_data/npcs/mark1.npc @@ -0,0 +1,24 @@ +mark1 +{ + playerModel mark1 + weapon WP_BOT_LASER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + height 120 + width 36 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + health 300 +// race bot + class CLASS_MARK1 + yawSpeed 60 + runSpeed 150 + walkSpeed 70 + hFOV 120 + vfov 45 + snd mark1 +} \ No newline at end of file diff --git a/base/ext_data/npcs/mark2.npc b/base/ext_data/npcs/mark2.npc new file mode 100644 index 0000000..3d84444 --- /dev/null +++ b/base/ext_data/npcs/mark2.npc @@ -0,0 +1,21 @@ +mark2 +{ + playerModel mark2 + weapon WP_BOT_LASER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race bot + class CLASS_MARK2 + yawSpeed 60 + runSpeed 150 + walkSpeed 75 + hFOV 120 + vfov 45 + snd mark2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/mouse.npc b/base/ext_data/npcs/mouse.npc new file mode 100644 index 0000000..9e2d696 --- /dev/null +++ b/base/ext_data/npcs/mouse.npc @@ -0,0 +1,25 @@ +mouse +{ + headmodel none + torsomodel none + legsmodel mouse + weapon WP_NONE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_MOUSE + yawSpeed 120 + runSpeed 500 + walkSpeed 150 + height 16 + width 8 + hFOV 120 + vfov 45 + snd mouse +} \ No newline at end of file diff --git a/base/ext_data/npcs/nullDriver.npc b/base/ext_data/npcs/nullDriver.npc new file mode 100644 index 0000000..417e1e8 --- /dev/null +++ b/base/ext_data/npcs/nullDriver.npc @@ -0,0 +1,10 @@ + +nullDriver +{ + playerModel kyle + weapon WP_NONE + playerTeam neutral + enemyTeam neutral + class kyle +} + diff --git a/base/ext_data/npcs/player.npc b/base/ext_data/npcs/player.npc new file mode 100644 index 0000000..f89aae7 --- /dev/null +++ b/base/ext_data/npcs/player.npc @@ -0,0 +1,7 @@ + +Player +{ + playerModel player + class CLASS_PLAYER +} + diff --git a/base/ext_data/npcs/probe.npc b/base/ext_data/npcs/probe.npc new file mode 100644 index 0000000..9e2e686 --- /dev/null +++ b/base/ext_data/npcs/probe.npc @@ -0,0 +1,33 @@ +probe +{ + playerModel probe + weapon WP_BOT_LASER + health 200 + headYawRangeLeft 180 + headYawRangeRight 180 + headPitchRangeUp 0 + headPitchRangeDown 0 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 10 + torsoPitchRangeDown 10 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race bot + class CLASS_PROBE + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + height 110 + width 24 + hFOV 120 + vfov 45 + snd probe + moveType "flyswim" +} \ No newline at end of file diff --git a/base/ext_data/npcs/protocol.npc b/base/ext_data/npcs/protocol.npc new file mode 100644 index 0000000..efbd072 --- /dev/null +++ b/base/ext_data/npcs/protocol.npc @@ -0,0 +1,24 @@ +protocol +{ + playerModel protocol + weapon WP_NONE + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_PROTOCOL + snd protocol + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + height 65 + width 12 + hFOV 120 + vfov 45 + snd protocol +} \ No newline at end of file diff --git a/base/ext_data/npcs/protocol_imp.npc b/base/ext_data/npcs/protocol_imp.npc new file mode 100644 index 0000000..2244423 --- /dev/null +++ b/base/ext_data/npcs/protocol_imp.npc @@ -0,0 +1,27 @@ +protocol_imp +{ + playerModel protocol + weapon WP_NONE + surfOn head_off + surfOff head + customSkin imp + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_PROTOCOL + snd protocol + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + height 65 + width 12 + hFOV 120 + vfov 45 + snd protocol +} \ No newline at end of file diff --git a/base/ext_data/npcs/r2d2.npc b/base/ext_data/npcs/r2d2.npc new file mode 100644 index 0000000..018298c --- /dev/null +++ b/base/ext_data/npcs/r2d2.npc @@ -0,0 +1,31 @@ +r2d2 +{ + playermodel r2d2 + weapon WP_NONE + headYawRangeLeft 180 + headYawRangeRight 180 + headPitchRangeUp 0 + headPitchRangeDown 0 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 10 + torsoPitchRangeDown 10 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_R2D2 + yawSpeed 120 + runSpeed 150 + walkSpeed 50 + height 40 + width 12 + hFOV 120 + vfov 45 + snd r2d2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/r2d2_imp.npc b/base/ext_data/npcs/r2d2_imp.npc new file mode 100644 index 0000000..07076b2 --- /dev/null +++ b/base/ext_data/npcs/r2d2_imp.npc @@ -0,0 +1,32 @@ +r2d2_imp +{ + playermodel r2d2 + weapon WP_NONE + customSkin imp + headYawRangeLeft 180 + headYawRangeRight 180 + headPitchRangeUp 0 + headPitchRangeDown 0 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 10 + torsoPitchRangeDown 10 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_R2D2 + yawSpeed 120 + runSpeed 150 + walkSpeed 50 + height 40 + width 12 + hFOV 120 + vfov 45 + snd r2d2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/r5d2.npc b/base/ext_data/npcs/r5d2.npc new file mode 100644 index 0000000..1c484c2 --- /dev/null +++ b/base/ext_data/npcs/r5d2.npc @@ -0,0 +1,31 @@ +r5d2 +{ + playerModel r5d2 + weapon WP_NONE + headYawRangeLeft 180 + headYawRangeRight 180 + headPitchRangeUp 0 + headPitchRangeDown 0 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 10 + torsoPitchRangeDown 10 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_R5D2 + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + height 40 + width 12 + hFOV 120 + vfov 45 + snd r5d2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/r5d2_imp.npc b/base/ext_data/npcs/r5d2_imp.npc new file mode 100644 index 0000000..cf20703 --- /dev/null +++ b/base/ext_data/npcs/r5d2_imp.npc @@ -0,0 +1,33 @@ +r5d2_imp +{ + playerModel r5d2 + weapon WP_NONE +//oops, guess they never made this skin... +// customSkin imp + headYawRangeLeft 180 + headYawRangeRight 180 + headPitchRangeUp 0 + headPitchRangeDown 0 + torsoYawRangeLeft 0 + torsoYawRangeRight 0 + torsoPitchRangeUp 10 + torsoPitchRangeDown 10 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL +// race bot + class CLASS_R5D2 + yawSpeed 60 + runSpeed 150 + walkSpeed 50 + height 40 + width 12 + hFOV 120 + vfov 45 + snd r5d2 +} \ No newline at end of file diff --git a/base/ext_data/npcs/rancor.npc b/base/ext_data/npcs/rancor.npc new file mode 100644 index 0000000..c96dd7e --- /dev/null +++ b/base/ext_data/npcs/rancor.npc @@ -0,0 +1,70 @@ + +rancor +{ + playerModel rancor + weapon WP_MELEE + health 2000 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_RANCOR + height 160 + crouchheight 128 + width 60 + snd rancor + sndcombat rancor + sndextra rancor + yawspeed 40 +// walkSpeed 173 +// runSpeed 173 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + +mutant_rancor +{ + playerModel mutant_rancor + weapon WP_MELEE + health 10000 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_RANCOR + scale 200 + height 350 + crouchheight 350 + width 120 + snd mutant_rancor + sndcombat mutant_rancor + sndextra mutant_rancor + yawspeed 40 +// walkSpeed 173 +// runSpeed 173 + walkSpeed 110 + runSpeed 400 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/rancor_vehicle.npc b/base/ext_data/npcs/rancor_vehicle.npc new file mode 100644 index 0000000..3f172ca --- /dev/null +++ b/base/ext_data/npcs/rancor_vehicle.npc @@ -0,0 +1,14 @@ + +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +Rancor_vehicle +{ + weapon WP_NONE + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + snd rancor + height 128 + crouchheight 128 + width 60 +} diff --git a/base/ext_data/npcs/remote.npc b/base/ext_data/npcs/remote.npc new file mode 100644 index 0000000..312aa67 --- /dev/null +++ b/base/ext_data/npcs/remote.npc @@ -0,0 +1,53 @@ +remote +{ +// headmodel none +// torsomodel none +// legsmodel remote + playerModel remote + weapon WP_BOT_LASER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 3 + intelligence 5 + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_SEEKER + yawSpeed 120 + runSpeed 500 + walkSpeed 150 + height 32 + width 8 + hFOV 160 + vfov 45 + snd remote + moveType "flyswim" +} + +remote_sp +{ + headmodel none + torsomodel none + legsmodel remote_sp + weapon WP_BOT_LASER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 3 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race bot + class CLASS_REMOTE + yawSpeed 120 + runSpeed 500 + walkSpeed 150 + height 32 + width 8 + hFOV 160 + vfov 45 + snd remote + moveType "flyswim" +} diff --git a/base/ext_data/npcs/rockettrooper2.npc b/base/ext_data/npcs/rockettrooper2.npc new file mode 100644 index 0000000..103264e --- /dev/null +++ b/base/ext_data/npcs/rockettrooper2.npc @@ -0,0 +1,71 @@ +RocketTrooper2 +{ + playerModel rockettrooper + weapon WP_ROCKET_LAUNCHER + health 200 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_ROCKETTROOPER + height 72 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + walkSpeed 55 + runSpeed 150 + yawspeed 50 + visrange 2048 + earshot 2048 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +RocketTrooper2Officer +{ + playerModel rockettrooper + weapon WP_REPEATER + health 400 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank lt + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_ROCKETTROOPER + height 72 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + walkSpeed 55 + runSpeed 200 + yawspeed 50 + hfov 60 + vfov 80 + visrange 2048 + earshot 2048 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/rockettrooper_w.npc b/base/ext_data/npcs/rockettrooper_w.npc new file mode 100644 index 0000000..d2deb6b --- /dev/null +++ b/base/ext_data/npcs/rockettrooper_w.npc @@ -0,0 +1,35 @@ + +RocketTrooper_ver1 +{ + playerModel stormtrooper + weapon WP_BLASTER + health 30 + headPitchRangeDown 30 + reactions 3 + aim 5 + move 3 + aggression 3 + scaley 130 + scalex 120 + evasion 1 + intelligence 5 + rank crewman + playerTeam enemy + enemyTeam player + class stormtrooper + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/rocks.npc b/base/ext_data/npcs/rocks.npc new file mode 100644 index 0000000..236d4e6 --- /dev/null +++ b/base/ext_data/npcs/rocks.npc @@ -0,0 +1,28 @@ +rocks +{ + playerModel rocks + weapon WP_NONE + scale 100 + health 100 + snd jawa + sndcombat jawa + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_FREE + class CLASS_KYLE + yawspeed 90 + walkSpeed 55 + runSpeed 150 + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbLegs 0 + dismemberProbHands 0 + dismemberProbWaist 0 +} + diff --git a/base/ext_data/npcs/rosh_penin.npc b/base/ext_data/npcs/rosh_penin.npc new file mode 100644 index 0000000..bf35238 --- /dev/null +++ b/base/ext_data/npcs/rosh_penin.npc @@ -0,0 +1,124 @@ +rosh_penin_noforce +{ + playerModel rosh_penin + weapon WP_MELEE + FP_HEAL 0 + FP_LEVITATION 0 + FP_SPEED 0 + FP_PUSH 0 + FP_PULL 1 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 0 + FP_SABER_DEFENSE 0 + FP_SABER_OFFENSE 0 + rank crewman + reactions 1 + aim 1 + move 1 + aggression 1 + evasion 1 + intelligence 1 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_REBEL + snd rosh + sndcombat rosh + sndjedi rosh + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} + +rosh_penin +{ + playerModel rosh_penin + saber training + weapon WP_SABER + saberStyle 3 + FP_HEAL 0 + FP_LEVITATION 3 + FP_SPEED 3 + FP_PUSH 2 + FP_PULL 3 + FP_TELEPATHY 0 + FP_GRIP 0 + FP_LIGHTNING 0 + FP_RAGE 0 + FP_PROTECT 0 + FP_ABSORB 0 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank lt + reactions 2 + aim 2 + move 3 + aggression 5 + evasion 3 + intelligence 2 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY + class CLASS_JEDI + snd rosh + sndcombat rosh + sndjedi rosh + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} + +rosh_dark +{ + playerModel rosh_penin + saber shadowtrooper + weapon WP_SABER + saberStyle 3 + health 500 + FP_HEAL 0 + FP_LEVITATION 2 + FP_SPEED 2 + FP_PUSH 2 + FP_PULL 2 + FP_TELEPATHY 0 + FP_GRIP 2 + FP_LIGHTNING 1 + FP_RAGE 1 + FP_PROTECT 1 + FP_ABSORB 1 + FP_DRAIN 0 + FP_SEE 0 + FP_SABERTHROW 2 + FP_SABER_DEFENSE 2 + FP_SABER_OFFENSE 2 + rank lt + reactions 2 + aim 2 + move 3 + aggression 5 + evasion 3 + intelligence 2 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_REBORN + snd rosh_boss + sndcombat rosh_boss + sndjedi rosh_boss + dismemberProbHead 0 + dismemberProbArms 0 + dismemberProbHands 0 + dismemberProbLegs 0 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/saber_droid.npc b/base/ext_data/npcs/saber_droid.npc new file mode 100644 index 0000000..a567be5 --- /dev/null +++ b/base/ext_data/npcs/saber_droid.npc @@ -0,0 +1,66 @@ +saber_droid_training +{ + playerModel saber_droid + saber droid + weapon WP_SABER + saberStyle 1 + FP_SABER_DEFENSE 1 + FP_SABER_OFFENSE 1 + reactions 1 + aim 1 + move 1 + aggression 1 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABER_DROID + snd saber_droid + sndcombat saber_droid + sndjedi saber_droid + yawSpeed 100 + walkSpeed 60 + runSpeed 200 + health 50 + dismemberProbHead 100 + dismemberProbArms 100 + dismemberProbLegs 100 + dismemberProbHands 100 + dismemberProbWaist 100 +} + +saber_droid +{ + playerModel saber_droid + saber droid + weapon WP_SABER + saberStyle 1 + FP_SABER_DEFENSE 3 + FP_SABER_OFFENSE 3 + rank ensign + reactions 1 + aim 1 + move 1 + aggression 1 + evasion 1 + intelligence 1 + hfov 120 + vfov 120 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABER_DROID + snd saber_droid + sndcombat saber_droid + sndjedi saber_droid + yawSpeed 100 + walkSpeed 60 + runSpeed 200 + health 300 + dismemberProbHead 100 + dismemberProbArms 100 + dismemberProbLegs 100 + dismemberProbHands 100 + dismemberProbWaist 100 +} diff --git a/base/ext_data/npcs/saboteur.npc b/base/ext_data/npcs/saboteur.npc new file mode 100644 index 0000000..0a8bc00 --- /dev/null +++ b/base/ext_data/npcs/saboteur.npc @@ -0,0 +1,61 @@ +saboteur +{ + playerModel saboteur + weapon WP_BLASTER_RIFLE + altFire 1 + rank crewman + reactions 5 + aim 3 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABOTEUR + snd sab1 + sndcombat sab1 + sndextra sab1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} + +saboteurcommando +{ + playerModel saboteur + weapon WP_BLASTER_RIFLE + altFire 1 + rank crewman + reactions 5 + aim 3 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABOTEUR + snd sab2 + sndcombat sab2 + sndextra sab2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/saboteurpistol.npc b/base/ext_data/npcs/saboteurpistol.npc new file mode 100644 index 0000000..27be4ff --- /dev/null +++ b/base/ext_data/npcs/saboteurpistol.npc @@ -0,0 +1,29 @@ +saboteurpistol +{ + playerModel saboteur + weapon WP_BLASTER_PISTOL + rank ltjg + reactions 5 + aim 4 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABOTEUR + snd sab1 + sndcombat sab1 + sndextra sab1 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/saboteursniper.npc b/base/ext_data/npcs/saboteursniper.npc new file mode 100644 index 0000000..3ad8891 --- /dev/null +++ b/base/ext_data/npcs/saboteursniper.npc @@ -0,0 +1,30 @@ +saboteursniper +{ + playerModel saboteur + weapon WP_DISRUPTOR + altFire 1 + rank crewman + reactions 5 + aim 5 + move 5 + aggression 5 + evasion 4 + intelligence 5 + hfov 160 + vfov 160 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_SABOTEUR + snd sab2 + sndcombat sab2 + sndextra sab2 + yawSpeed 140 + walkSpeed 55 + runSpeed 200 + health 100 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/sand_creature.npc b/base/ext_data/npcs/sand_creature.npc new file mode 100644 index 0000000..e55b83f --- /dev/null +++ b/base/ext_data/npcs/sand_creature.npc @@ -0,0 +1,48 @@ +sand_creature +{ + playermodel sand_creature + weapon WP_NONE +// health 500 + health 150 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_SAND_CREATURE + yawSpeed 120 + runSpeed 300 + walkSpeed 125 + height 24 + width 48 + hFOV 120 + vfov 45 + snd sand_creature +} + +sand_creature_fast +{ + playermodel sand_creature + weapon WP_NONE + health 500 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_SAND_CREATURE + yawSpeed 120 + runSpeed 400 + walkSpeed 400 + height 24 + width 48 + hFOV 120 + vfov 45 + snd sand_creature +} diff --git a/base/ext_data/npcs/seeker.npc b/base/ext_data/npcs/seeker.npc new file mode 100644 index 0000000..dd8b25c --- /dev/null +++ b/base/ext_data/npcs/seeker.npc @@ -0,0 +1,26 @@ +seeker +{ + headmodel none + torsomodel none + legsmodel remote + weapon WP_BOT_LASER + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 3 + intelligence 5 + playerTeam TEAM_PLAYER + enemyTeam TEAM_ENEMY +// race bot + class CLASS_SEEKER + yawSpeed 120 + runSpeed 500 + walkSpeed 150 + height 32 + width 8 + hFOV 160 + vfov 45 + snd remote + moveType "flyswim" +} \ No newline at end of file diff --git a/base/ext_data/npcs/sentry.npc b/base/ext_data/npcs/sentry.npc new file mode 100644 index 0000000..f999092 --- /dev/null +++ b/base/ext_data/npcs/sentry.npc @@ -0,0 +1,25 @@ +sentry +{ + playermodel sentry + weapon WP_NONE + health 100 + reactions 3 + aim 3 + move 3 + aggression 3 + evasion 1 + intelligence 5 + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER +// race bot + class CLASS_SENTRY + health 150 + yawSpeed 120 + runSpeed 400 + walkSpeed 250 + height 48 + width 24 + hFOV 120 + vfov 160 + snd sentry +} \ No newline at end of file diff --git a/base/ext_data/npcs/snowtrooper.npc b/base/ext_data/npcs/snowtrooper.npc new file mode 100644 index 0000000..ebdad7b --- /dev/null +++ b/base/ext_data/npcs/snowtrooper.npc @@ -0,0 +1,33 @@ + +SnowTrooper +{ + playerModel snowtrooper + weapon WP_BLASTER + health 30 + headPitchRangeDown 30 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_STORMTROOPER + height 64 + crouchheight 48 + walkSpeed 51 + runSpeed 200 + snd st1 + sndcombat st1 + sndextra st1 + yawspeed 70 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 0 + dismemberProbHands 20 + dismemberProbWaist 0 +} diff --git a/base/ext_data/npcs/swoop.npc b/base/ext_data/npcs/swoop.npc new file mode 100644 index 0000000..37058e3 --- /dev/null +++ b/base/ext_data/npcs/swoop.npc @@ -0,0 +1,115 @@ + +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +Swoop +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_black +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_blue +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_gold +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_green +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_purple +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_red +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_silver +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +Swoop_cin +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +swoop_mp +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + +swoop_mp2 +{ + weapon WP_BLASTER + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 24 + height 32 +} + + + diff --git a/base/ext_data/npcs/tauntaun.npc b/base/ext_data/npcs/tauntaun.npc new file mode 100644 index 0000000..55a1a13 --- /dev/null +++ b/base/ext_data/npcs/tauntaun.npc @@ -0,0 +1,11 @@ + +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +Tauntaun +{ + weapon WP_NONE + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + snd tauntaun +} diff --git a/base/ext_data/npcs/test.npc b/base/ext_data/npcs/test.npc new file mode 100644 index 0000000..47b491f --- /dev/null +++ b/base/ext_data/npcs/test.npc @@ -0,0 +1,8 @@ +test +{ + playerModel test + weapon WP_NONE + playerTeam TEAM_PLAYER + enemyTeam TEAM_NEUTRAL + class CLASS_KYLE +} \ No newline at end of file diff --git a/base/ext_data/npcs/tie-bomber.npc b/base/ext_data/npcs/tie-bomber.npc new file mode 100644 index 0000000..549e519 --- /dev/null +++ b/base/ext_data/npcs/tie-bomber.npc @@ -0,0 +1,19 @@ +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +tie-bomber +{ + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 200 + height 256 +} + +tie-bomber2 +{ + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 200 + height 256 +} diff --git a/base/ext_data/npcs/tie-fighter.npc b/base/ext_data/npcs/tie-fighter.npc new file mode 100644 index 0000000..ed9585a --- /dev/null +++ b/base/ext_data/npcs/tie-fighter.npc @@ -0,0 +1,11 @@ + +//NOTE: for vehicle-class NPCs, the playerModel key is actually their entry in the vehicles.dat + +tie-fighter +{ + playerTeam TEAM_NEUTRAL + enemyTeam TEAM_NEUTRAL + class CLASS_VEHICLE + width 140 + height 300 +} diff --git a/base/ext_data/npcs/tusken.npc b/base/ext_data/npcs/tusken.npc new file mode 100644 index 0000000..1102616 --- /dev/null +++ b/base/ext_data/npcs/tusken.npc @@ -0,0 +1,27 @@ +tusken +{ + playerModel tusken + weapon WP_TUSKEN_STAFF + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 50 + rank crewman + playerTeam TEAM_FREE + enemyTeam TEAM_FREE + class CLASS_TUSKEN + snd tusken + sndcombat tusken + sndextra tusken + yawspeed 90 + walkSpeed 55 + runSpeed 200 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/tuskensniper.npc b/base/ext_data/npcs/tuskensniper.npc new file mode 100644 index 0000000..13cf30f --- /dev/null +++ b/base/ext_data/npcs/tuskensniper.npc @@ -0,0 +1,29 @@ +tuskensniper +{ + playerModel tusken + weapon WP_TUSKEN_RIFLE + altFire 1 + reactions 3 + aim 1 + move 3 + aggression 3 + evasion 1 + intelligence 5 + health 50 + rank crewman + playerTeam TEAM_ENEMY + enemyTeam TEAM_PLAYER + class CLASS_TUSKEN + snd tusken + sndcombat tusken + sndextra tusken + yawspeed 90 + walkSpeed 55 + runSpeed 200 + visRange 3000 + dismemberProbHead 0 + dismemberProbArms 10 + dismemberProbLegs 1 + dismemberProbHands 20 + dismemberProbWaist 0 +} \ No newline at end of file diff --git a/base/ext_data/npcs/vssver.scc b/base/ext_data/npcs/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..0f9234b2169e318d75170fcba9f5dd665209889b GIT binary patch literal 1840 zcmW;Nc~I147zgm>Sl9(Ym&1jW`v_DJP!3T7L>P_3pwL+p17!sSiZv}f7|>8e-4O}Q z0_4u1NSU#bkz;C<6b)F!l@P&@-(K7x0?VO&-Qdtjd|dk^u@5r&O;ADq3;P#ri%@7IJ_cu4#ygcCil*^#c=zIsmpt_W+Rp_1{^jE{4o`*D zlW=Lu>teRQhjaR+04@!+)^ruBr?ZX}$^EaDJ_;AX`Lj3VS9Mg^Hf* z(t1AJRhO1ISjVMtGx$G~+>14dt7(7ca7Fs$tob`DI{q4%3EK?ch!&5$jiUdxHo(# z>V4n_PKP?u%Zz#pyz}kR7UwGpg&yL*@V?8&Loxm>DlWVg=AR1VY&lu2B>V3N8wGg& z)GCdoaew$Drc@CA>2FFhegHfb;>eRdil*y70EfxPwNfY9%nHQ6fbWk~_116?%1C}J ze7kNpjNvS8#Z8*iBFA07IMxpZPm4N?<5wNWKWR7jf)NZHF1M{-f~H zamO1q`3nr0FB`rb-Z<*q9Z1)60nVFIp0)Vy5kvYLfo(WxN2GT$W#qh!OjxYk=|pwL z(+U;oZxW94O|(0)v{pgZI|cuB@EE_>a*2L_4&jk2*Zbjmu(!7S1H=!*Mi#@aSEIyq zzYAf$cxvy|!zB8Cw8IZWdrrnV7SQ@$l0O_ACAG+-@43rr?D1@F%a-s8`X0H$M^^qm zJl0fC-|vlZmUDW>^8Eq@=|2;WZA-2zcdw%Ljc~$D-72ZxC3^oweB57gqP9zqBfY<0 a!^O=L!_JPo>F-ZEoKy56U)<6}`}rTfr!@Wm literal 0 HcmV?d00001 diff --git a/base/ext_data/vssver.scc b/base/ext_data/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..aaa219a257427900590e023adfed558328c0616c GIT binary patch literal 80 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYeXJvS##?Jr->MRTltcwDE{@t(jhzBU50p!n) b;g9iUI{y^J*8=kGI$f9iWO?^g8psC#1(z4* literal 0 HcmV?d00001 diff --git a/base/ext_data/weapons.dat b/base/ext_data/weapons.dat new file mode 100644 index 0000000..944dd0f --- /dev/null +++ b/base/ext_data/weapons.dat @@ -0,0 +1,744 @@ +// EXTERNAL WEAPON & AMMO DATA +// +// NOTE!!!!!!!!! Weapontype must start the block of weapon data. +// NOTE!!!!!!!!! Ammo must start the block of ammo data. +// +// Weapontype - weapon data is associated with which weapon (must be first) +// WP_SABER, // player and NPC weapon +// WP_BLASTER_PISTOL, // player and NPC weapon +// WP_BLASTER, // player and NPC weapon +// WP_DISRUPTOR, // player and NPC weapon +// WP_BOWCASTER, // NPC weapon - player can pick this up, but never starts with them +// WP_REPEATER, // NPC weapon - player can pick this up, but never starts with them +// WP_DEMP2, // NPC weapon - player can pick this up, but never starts with them +// WP_FLECHETTE, // NPC weapon - player can pick this up, but never starts with them +// WP_ROCKET_LAUNCHER, // NPC weapon - player can pick this up, but never starts with them +// WP_THERMAL, // player and NPC weapon +// WP_TRIP_MINE, // NPC weapon - player can pick this up, but never starts with them +// WP_DET_PACK, // NPC weapon - player can pick this up, but never starts with them +// WP_CONCUSSION, // NPC weapon - player can pick this up, but never starts with them +//extras +// WP_STUN_BATON, // NPC weapon - player can pick this up, but never starts with them +// WP_MELEE, // player and NPC weapon - Any ol' melee attack +// These can never be gotten directly by the player +//NPC weapons +// WP_BRYAR_PISTOL, // NPC weapon - player can pick this up, but never starts with them +// WP_EMPLACED_GUN, +// WP_BOT_LASER, // Probe droid - Laser blast +// WP_TURRET, // turret guns +// WP_ATST_MAIN, +// WP_ATST_SIDE, +// WP_TIE_FIGHTER, +// WP_RAPID_FIRE_CONC, +// WP_JAWA, +// WP_TUSKEN_RIFLE, +// WP_TUSKEN_STAFF, +// WP_SCEPTER, +// WP_NOGHRI_STICK, +// +// Weaponclass - weapon name +// Weaponmodel - weapon model used in game +// weaponicon - interface image +// Ammotype - type of power weapon needs to fire +// 0 - No power +// 1 - Star Fleet power +// 2 - Alien Crystal power +// 3 - Phaser power +// Ammolowcount - amount when "Low ammo" warning appears on screen +// Flashcolor - color generate by weapon flash (R,G,B) +// Firingsound - sound file used when _idling_! +// altfiringsound - sound file used when alt-firing +// flashsound - sound file used by flash +// altflashsound - sound file used by an alt-fire flash +// stopsound - sound file used when a firing sound stops +// Firetime - amount of time between firings +// altfireTime - for alt fire +// Range - range of weapon +// energyPerShot - amount of energy used per shot +// altenergypershot- for alt fire +// barrelcount - number of barrels the model has (weaponname_b?.md3) +// missileModel - missile .md3 +// altmissileModel - alternate missile .md3 +// missileSound - played while flying +// altmissileSound - alternate missile launch sound +// missileLight - intensity of lightsource for missile - if 0.0 then none (float) +// altmissileLight - alternate missile light +// missileLightColor - color in three float style R, G, B (0.0 to 1.0) - NOTE - if you have a light, you MUST HAVE THESE +// altmissileLightColor - alternate color in three float style R, G, B (0.0 to 1.0) +// missileHitSound - played on impact +// altmissileHitSound - for alt fire +// missileFuncName - missile fly function +// altmissileFuncName - for alt fire +// +// FUNCTION NAMES +// borgfunc +// scavengerfunc +// altscavengerfunc +// stasisfunc +// grenadefunc +// altgrenadefunc +// tetrionfunc +// dreadnoughtfunc +// quantumfunc +// quantumaltfunc +// botrocketfunc +// forgeprojfunc +// forgeprojfunc2 +// forgepsychfunc +// parasiteacidfunc +// stasisattackfunc +// loaderlaserfunc +// botprojfunc + +// +// For AMMO Types +// ammoicon - STRING +// ammomax - INT + + +// WP_NULL +{ +WEAPONTYPE WP_NONE +} + +// WP_STUN_BATON +{ +weapontype WP_STUN_BATON +weaponclass weapon_stun_baton +weaponmodel models/weapons2/stun_baton/baton.md3 +weaponIcon gfx/hud/w_icon_stunbaton +firingsound sound/weapons/baton/idle.wav +firingforce fffx/weapons/baton/idle +barrelcount 3 +ammotype 1 +ammolowcount 5 +energypershot 0 +firetime 400 +range 8192 +altenergypershot 0 +altfiretime 400 +altrange 8192 +} + +// WP_SABER +{ +weapontype WP_SABER +weaponclass weapon_saber +weaponmodel models/weapons2/saber/saber_w.md3 +weaponIcon gfx/hud/w_icon_lightsaber +firingsound sound/weapons/saber/saberhum1.wav +ammotype 1 +ammolowcount 5 +energypershot 1 +firetime 100 +range 8192 +altenergypershot 3 +altfiretime 100 +altrange 8192 +missilemodel models/weapons2/saber/saber_w.md3 +} + + +// WP_BRYAR_PISTOL +{ +weapontype WP_BRYAR_PISTOL +weaponclass weapon_bryar_pistol +weaponmodel models/weapons2/briar_pistol/briar_pistol.md3 +weaponIcon gfx/hud/w_icon_briar +missileFuncName bryar_func +altmissileFuncName bryar_alt_func +ammotype 2 +ammolowcount 15 +energypershot 1 +firetime 400 +range 8192 +altenergypershot 1 +altfiretime 400 +altrange 8192 +muzzleEffect bryar/muzzle_flash +altmuzzleEffect bryar/altmuzzle_flash +altchargesound sound/weapons/bryar/altcharge.wav +altchargeforce fffx/weapons/bryar/altcharge +selectSound sound/weapons/bryar/select.wav +selectforce fffx/weapons/bryar/select +} + +// WP_BLASTER +{ +weapontype WP_BLASTER +weaponclass weapon_blaster +weaponmodel models/weapons2/blaster_r/blaster.md3 +weaponIcon gfx/hud/w_icon_blaster +ammotype 2 +ammolowcount 15 +energypershot 1 +firetime 350 +range 8192 +altenergypershot 2 +altfiretime 150 +altrange 8192 +missileFuncName blaster_func +altmissileFuncName blaster_alt_func +muzzleEffect blaster/muzzle_flash +altmuzzleEffect blaster/altmuzzle_flash +selectSound sound/weapons/blaster/select.wav +selectforce fffx/weapons/blaster/select +} + +// WP_DISRUPTOR +{ +weapontype WP_DISRUPTOR +weaponclass weapon_disruptor +weaponmodel models/weapons2/disruptor/disruptor.md3 +weaponIcon gfx/hud/w_icon_disruptor +ammotype 3 +ammolowcount 15 +energypershot 3 +barrelcount 1 +firetime 600 +range 8192 +altenergypershot 3 +altfiretime 1300 +altrange 8192 +muzzleEffect disruptor/muzzle_flash +altmuzzleEffect disruptor/altmuzzle_flash +selectSound sound/weapons/disruptor/select.wav +selectforce fffx/weapons/disruptor/select +altchargesound sound/weapons/disruptor/altCharge.wav +altchargeforce fffx/weapons/disruptor/altcharge +} + +// WP_BOWCASTER +{ +weapontype WP_BOWCASTER +weaponclass weapon_bowcaster +weaponmodel models/weapons2/bowcaster/bowcaster.md3 +weaponIcon gfx/hud/w_icon_bowcaster +altchargesound sound/weapons/bowcaster/altcharge.wav +altchargeforce fffx/weapons/bowcaster/altcharge +ammotype 3 +ammolowcount 15 +energypershot 5 +firetime 750 +range 8192 +altenergypershot 5 +altfiretime 400 +altrange 8192 +missileFuncName bowcaster_func +altmissileFuncName bowcaster_func +muzzleEffect bowcaster/muzzle_flash +altmuzzleEffect bowcaster/altmuzzle_flash +selectSound sound/weapons/bowcaster/select.wav +selectforce fffx/weapons/bowcaster/select +chargesound sound/weapons/bowcaster/altcharge.wav +chargeforce fffx/weapons/bowcaster/altcharge +} + +// WP_REPEATER +{ +weapontype WP_REPEATER +weaponclass weapon_repeater +weaponmodel models/weapons2/heavy_repeater/heavy_repeater.md3 +weaponIcon gfx/hud/w_icon_repeater +ammotype 4 +ammolowcount 25 +energypershot 1 +firetime 50 +range 8192 +altenergypershot 8 +altfiretime 800 +altrange 8192 +barrelcount 1 +missileFuncName repeater_func +altmissileFuncName repeater_alt_func +muzzleEffect repeater/muzzle_flash +altmuzzleEffect repeater/altmuzzle_flash +selectSound sound/weapons/repeater/select.wav +selectforce fffx/weapons/repeater/select +} + +// WP_DEMP2 +{ +weapontype WP_DEMP2 +weaponclass weapon_demp2 +weaponmodel models/weapons2/demp2/demp2.md3 +weaponIcon gfx/hud/w_icon_demp2 +ammotype 3 +ammolowcount 15 +energypershot 8 +firetime 450 +range 8192 +altenergypershot 10 +altfiretime 1200 +altrange 8192 +missileFuncName demp2_func +muzzleEffect demp2/muzzle_flash +altmissileFuncName demp2_alt_func +altmuzzleEffect demp2/altmuzzle_flash +selectSound sound/weapons/demp2/select.wav +selectforce fffx/weapons/demp2/select +altchargesound sound/weapons/demp2/altCharge.wav +altchargeforce fffx/weapons/demp2/altcharge +} + + +// WP_FLECHETTE +{ +weapontype WP_FLECHETTE +weaponclass weapon_flechette +weaponmodel models/weapons2/golan_arms/golan_arms.md3 +barrelcount 1 +ammotype 4 +ammolowcount 15 +firetime 550 +energypershot 8 +range 8192 +weaponIcon gfx/hud/w_icon_flechette +altenergypershot 8 +altfiretime 400 +altrange 8192 +missileFuncName flechette_func +missileModel models/weapons2/golan_arms/projectileMain.md3 +altmissileFuncName flechette_alt_func +muzzleEffect flechette/muzzle_flash +altmuzzleEffect flechette/altmuzzle_flash +altmissileModel models/weapons2/golan_arms/projectile.md3 +selectSound sound/weapons/flechette/select.wav +selectforce fffx/weapons/flechette/select +} + +// WP_ROCKET_LAUNCHER +{ +weapontype WP_ROCKET_LAUNCHER +weaponclass weapon_rocket_launcher +weaponmodel models/weapons2/merr_sonn/merr_sonn.md3 +ammotype 5 +ammolowcount 1 +firetime 600 +energypershot 1 +range 8192 +weaponIcon gfx/hud/w_icon_merrsonn +barrelcount 1 +altenergypershot 1 +altfiretime 1000 +altrange 8192 +missileLight 125 +missileLightColor 1.0 1.0 0.5 +altmissileLight 125 +altmissileLightColor 1.0 1.0 0.5 +missileFuncName rocket_func +altmissileFuncName rocket_alt_func +muzzleEffect rocket/muzzle_flash2 +altmuzzleEffect rocket/altmuzzle_flash +missileModel models/weapons2/merr_sonn/projectile.md3 +altmissileModel models/weapons2/merr_sonn/projectile.md3 +missilesound sound/weapons/rocket/missleloop.wav +altmissilesound sound/weapons/rocket/missleloop.wav +selectSound sound/weapons/rocket/select.wav +selectforce fffx/weapons/rocket/select +} + +// WP_CONCUSSION +{ +weapontype WP_CONCUSSION +weaponclass weapon_concussion_rifle +weaponmodel models/weapons2/concussion/c_rifle.md3 +weaponIcon gfx/hud/w_icon_c_rifle +ammotype 4 +ammolowcount 120 +energypershot 40 +firingsound sound/weapons/concussion/idle_lp.wav +firetime 800 +range 8192 +missileFuncName conc_func +muzzleEffect concussion/muzzle_flash +missileLight 125 +missileLightColor 0.75 0.25 1.0 +missilesound sound/weapons/concussion/missleloop.wav +altenergypershot 50 +altfiretime 1200 +altrange 8192 +barrelcount 1 +altmuzzleEffect concussion/altmuzzle_flash +selectSound sound/weapons/concussion/select.wav +selectforce fffx/weapons/concussion/select +} + +// WP_THERMAL +{ +weapontype WP_THERMAL +weaponclass weapon_thermal +weaponmodel models/weapons2/thermal/thermal.md3 +weaponIcon gfx/hud/w_icon_thermal +ammotype 7 +ammolowcount 1 +energypershot 1 +firetime 800 +range 8192 +altenergypershot 1 +altfiretime 400 +altrange 8192 +missileModel models/weapons2/thermal/thermal_proj.md3 +altmissileModel models/weapons2/thermal/thermal_proj.md3 +barrelcount 0 +chargesound sound/weapons/thermal/charge.wav +chargeforce fffx/weapons/thermal/charge +altchargesound sound/weapons/thermal/charge.wav +altchargeforce fffx/weapons/thermal/charge +selectSound sound/weapons/thermal/select.wav +selectforce fffx/weapons/thermal/select +muzzleEffect thermal/muzzle_flash +} + +// WP_TRIP_MINE +{ +weapontype WP_TRIP_MINE +weaponclass weapon_trip_mine +weaponmodel models/weapons2/laser_trap/laser_trap.md3 +weaponIcon gfx/hud/w_icon_tripmine +ammotype 8 +ammolowcount 1 +energypershot 1 +firetime 800 +range 8192 +altenergypershot 1 +altfiretime 400 +altrange 8192 +missileModel models/weapons2/laser_trap/laser_trap_w.glm +altmissileModel models/weapons2/laser_trap/laser_trap_w.glm +selectSound sound/weapons/detpack/select.wav +selectforce fffx/weapons/detpack/select +muzzleEffect tripmine/muzzle_flash + +} + +// WP_DET_PACK +{ +weapontype WP_DET_PACK +weaponclass weapon_det_pack +weaponmodel models/weapons2/detpack/det_pack.md3 +weaponIcon gfx/hud/w_icon_detpack +ammotype 9 +ammolowcount 1 +energypershot 1 +firetime 800 +range 8192 +altenergypershot 0 +altfiretime 400 +altrange 8192 +missileModel models/weapons2/detpack/det_pack_proj.glm +selectSound sound/weapons/detpack/select.wav +selectforce fffx/weapons/detpack/select +muzzleEffect detpack/muzzle_flash +} + +// WP_EMPLACED_GUN +{ +weapontype WP_EMPLACED_GUN +weaponclass weapon_emplaced_gun +weaponmodel models/weapons2/noweap/noweap.md3 + +altenergypershot 1 +altrange 8192 +missileFuncName emplaced_func +altmissileFuncName emplaced_func +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 150 +altfiretime 150 +range 8192 +muzzleEffect emplaced/muzzle_flash +muzzleEffect eweb/muzzle_flash +} + +// WP_BOT_LASER +{ +weapontype WP_BOT_LASER +weaponclass weapon_bryar_pistol +weaponmodel models/weapons2/noweap/noweap.md3 + +//flashsound sound/weapons/probe/fire.wav +//altflashsound sound/weapons/probe/alt_fire.wav +altenergypershot 0 +altrange 8192 +missileFuncName bryar_func +ammotype 1 +ammolowcount 15 +energypershot 2 +firetime 1600 +range 8192 +} + +// WP_MELEE +{ +weapontype WP_MELEE +weaponclass weapon_melee +weaponmodel models/weapons2/noweap/noweap.md3 +weaponIcon gfx/hud/w_icon_melee +ammotype 3 +ammolowcount 5 +energypershot 0 +firetime 1000 +range 1024 +} + +// WP_ATST_MAIN +{ +weapontype WP_ATST_MAIN +weaponclass weapon_atst_main +weaponmodel models/weapons2/noweap/noweap.md3 +weaponIcon gfx/hud/w_icon_atst +//flashsound sound/weapons/atst/ATSTfire1.wav +//altflashsound sound/weapons/atst/ATSTfire2.wav +altenergypershot 1 +altrange 8192 +missileFuncName atstmain_func +altmissileFuncName atstmain_func +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 200 +altfiretime 150 +range 8192 +muzzleEffect emplaced/muzzle_flash +} + +// WP_ATST_SIDE +{ +weapontype WP_ATST_SIDE +weaponclass weapon_atst_side +weaponmodel models/weapons2/noweap/noweap.md3 +weaponIcon gfx/hud/w_icon_atstside +altenergypershot 1 +altrange 8192 + +altmissileModel models/weapons2/merr_sonn/projectile.md3 + +missileFuncName atst_side_main_func +altmissileFuncName atst_side_alt_func +muzzleEffect emplaced/muzzle_flash +altmuzzleEffect emplaced/muzzle_flash + +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 400 +altfiretime 1000 +range 8192 +} + +// WP_TIE_FIGHTER +{ +weapontype WP_TIE_FIGHTER +weaponclass weapon_tie_fighter +weaponmodel models/weapons2/noweap/noweap.md3 +altenergypershot 1 +altrange 8192 +missileFuncName emplaced_func +altmissileFuncName emplaced_func +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 400 +altfiretime 400 +range 8192 +muzzleEffect emplaced/muzzle_flash +} + +// WP_RAPID_FIRE_CONC +{ +weapontype WP_RAPID_FIRE_CONC +weaponclass weapon_radid_concussion +weaponmodel models/weapons2/noweap/noweap.md3 +altenergypershot 1 +altrange 8192 +missileFuncName emplaced_func +altmissileFuncName repeater_alt_func +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 400 +altfiretime 1000 +range 8192 +muzzleEffect emplaced/muzzle_flash +} + +// WP_BLASTER_PISTOL +{ +weapontype WP_BLASTER_PISTOL +weaponclass weapon_blaster_pistol +weaponmodel models/weapons2/blaster_pistol/blaster_pistol.md3 +weaponIcon gfx/hud/w_icon_blaster_pistol +missileFuncName bryar_func +altmissileFuncName bryar_alt_func +ammotype 2 +ammolowcount 15 +energypershot 1 +firetime 400 +range 8192 +altenergypershot 1 +altfiretime 400 +altrange 8192 +muzzleEffect bryar/muzzle_flash +altmuzzleEffect bryar/altmuzzle_flash +altchargesound sound/weapons/bryar/altcharge.wav +selectSound sound/weapons/bryar/select.wav +selectforce fffx/weapons/bryar/select +} + +// WP_TURRET +{ +weapontype WP_TURRET +weaponclass weapon_turret +weaponmodel models/weapons2/noweap/noweap.md3 +altenergypershot 1 +altrange 8192 +missileFuncName turret_func +ammotype 6 +ammolowcount 15 +energypershot 1 +firetime 400 +altfiretime 400 +range 8192 +muzzleEffect turret/muzzle_flash +} + +// WP_JAWA +{ +weapontype WP_JAWA +weaponclass weapon_jawa +weaponmodel models/weapons2/jawa/jawa_gun.md3 +missileFuncName bryar_func +altmissileFuncName bryar_alt_func +ammotype 2 +ammolowcount 15 +energypershot 2 +firetime 400 +range 8192 +altenergypershot 2 +altfiretime 400 +altrange 8192 +muzzleEffect bryar/muzzle_flash +} + +// WP_TUSKEN_RIFLE +{ +weapontype WP_TUSKEN_RIFLE +weaponclass weapon_tusken_rifle +weaponmodel models/weapons2/tusken_rifle/tusken_rifle.md3 +ammotype 3 +ammolowcount 15 +firetime 1000 +energypershot 3 +firetime 600 +missileFuncName tusk_shot_func +missileLight 50 +missileLightColor 1.0 0.75 0.25 +muzzleEffect tusken/muzzle_flash +altenergypershot 3 +altfiretime 1000 +altmissileFuncName tusk_shot_func +altmissileLight 50 +altmissileLightColor 1.0 0.75 0.25 +altmuzzleEffect tusken/muzzle_flash +selectSound sound/weapons/disruptor/select.wav +selectforce fffx/weapons/disruptor/select +} + +// WP_TUSKEN_STAFF +{ +weapontype WP_TUSKEN_STAFF +weaponclass weapon_tusken_staff +weaponmodel models/weapons2/tusken_staff/tusken_staff.md3 +ammotype 3 +ammolowcount 5 +energypershot 0 +firetime 1000 +range 1024 +} + +//WP_SCEPTER +{ +weapontype WP_SCEPTER +weaponclass weapon_scepter +weaponmodel models/weapons2/sith_scepter/sith_scepter.md3 +ammotype 3 +ammolowcount 5 +energypershot 0 +firetime 1000 +range 1024 +} + +//WP_NOGHRI_STICK +{ +weapontype WP_NOGHRI_STICK +weaponclass weapon_noghri_stick +weaponmodel models/weapons2/noghri_stick/noghri_stick.md3 +ammotype 3 +ammolowcount 5 +energypershot 1 +firetime 600 +missileFuncName noghri_shot_func +muzzleEffect noghri_stick/muzzle_flash +} + +// AMMO_NONE +{ +AMMO AMMO_NONE +AMMOMAX 0 +} + +// AMMO_FORCE +{ +AMMO AMMO_FORCE +AMMOMAX 100 +} + +// AMMO_BLASTER +{ +AMMO AMMO_BLASTER +AMMOMAX 300 +} + +// AMMO_POWERCELL +{ +AMMO AMMO_POWERCELL +AMMOMAX 300 +} + +// AMMO_METAL_BOLTS +{ +AMMO AMMO_METAL_BOLTS +AMMOMAX 400 +} + +// AMMO_ROCKETS +{ +AMMO AMMO_ROCKETS +AMMOMAX 10 +} + +// AMMO_EMPLACED +{ +AMMO AMMO_EMPLACED +AMMOMAX 999 +} + +// AMMO_THERMAL +{ +AMMO AMMO_THERMAL +AMMOMAX 10 +} + +// AMMO_TRIPMINE +{ +AMMO AMMO_TRIPMINE +AMMOMAX 5 +} + +// AMMO_DETPACK +{ +AMMO AMMO_DETPACK +AMMOMAX 5 +} \ No newline at end of file diff --git a/base/high.cfg b/base/high.cfg new file mode 100644 index 0000000..9e899b8 --- /dev/null +++ b/base/high.cfg @@ -0,0 +1,18 @@ +set r_picmip 0 +set r_lodbias 0 +set r_detailtextures 1 +set r_dynamiclight 1 +set r_flares 1 +set r_subdivisions 4 +set r_lodcurveError 250 +set r_lodscale 10 +set cg_shadows 2 +set r_texturebitslm 32 +set r_texturebits 32 +set r_colorbits 32 +set r_depthbits 32 + +set r_surfaceSprites 1 +set r_weatherScale 1 + +set r_noportals 0 \ No newline at end of file diff --git a/base/low.cfg b/base/low.cfg new file mode 100644 index 0000000..9fc46d8 --- /dev/null +++ b/base/low.cfg @@ -0,0 +1,22 @@ +set s_khz 11 +set cg_VariantSoundCap 2 + +set r_picmip 2 +set r_lodbias 2 +set r_detailtextures 0 +set r_dynamiclight 0 +set r_flares 0 +set r_subdivisions 20 +set r_lodcurveError 500 +set r_lodscale 4 +set cg_shadows 0 +set cg_marks 0 + +set r_texturebits 16 +set r_colorbits 16 +set r_depthbits 16 + +set r_surfaceSprites 0 +set r_weatherScale 0 + +set r_noportals 1 \ No newline at end of file diff --git a/base/med.cfg b/base/med.cfg new file mode 100644 index 0000000..35bbba4 --- /dev/null +++ b/base/med.cfg @@ -0,0 +1,18 @@ +set sys_lowmem 0 +set r_picmip 1 +set r_lodbias 1 +set r_detailtextures 1 +set r_dynamiclight 1 +set r_flares 1 +set r_subdivisions 12 +set r_lodcurveError 250 +set r_lodscale 6 +set cg_shadows 1 +set r_texturebits 0 +set r_colorbits 0 +set r_depthbits 0 + +set r_surfaceSprites 1 +set r_weatherScale 1 + +set r_noportals 0 diff --git a/base/mpdefault.cfg b/base/mpdefault.cfg new file mode 100644 index 0000000..d10938b --- /dev/null +++ b/base/mpdefault.cfg @@ -0,0 +1,141 @@ +// +// MP JEDI ACADEMY DEFAULT CONFIG +// + +unbindall + +// +// weapons +// +bind 1 "weapon 1" +bind 2 "weapon 2" +bind 3 "weapon 3" +bind 4 "weapon 4" +bind 5 "weapon 5" +bind 6 "weapon 6" +bind 7 "weapon 7" +bind 8 "weapon 8" +bind 9 "weapon 13" +bind 0 "weapon 9" +bind - "weapon 10" +bind = "weapon 0" + + +// +// CHARACTER CONTROLS +// + +bind CTRL +attack +bind ALT +altattack +bind SHIFT +speed +bind z +strafe +bind PGUP +lookup +bind PGDN +lookdown +bind END centerview +bind c +movedown +bind SPACE +moveup +bind ENTER +use +bind r +use + + +bind UPARROW +forward +bind DOWNARROW +back +bind LEFTARROW +left +bind RIGHTARROW +right +bind w +forward +bind a +moveleft +bind s +back +bind d +moveright +bind , +moveleft +bind . +moveright + +// +// FORCE POWERS +// + +bind F1 force_throw +bind F2 force_pull +bind F3 force_speed +bind F4 force_seeing +bind F5 force_heal +bind F6 force_protect +bind F7 force_absorb +bind F8 force_distract +bind F9 +force_grip +bind F10 +force_lightning +bind F11 force_rage +bind F12 +force_drain +bind \ force_forcepowerother +bind ] force_healother + + +bind f +useforce +bind e forcenext +bind q forceprev + +bind TAB +scores +bind INS scoresUp +bind DEL scoresDown +bind p "cg_thirdperson !" +bind l saberAttackCycle + +// +// QUICK KEYS +// + + +//multi only +bind KP_HOME use_field + +//bind KP_RIGHTARROW use_field +//bind KP_UPARROW use_field +//bind KP_DOWNARROW use_field +//bind KP_END use_field +//bind KP_PGDN use_field +//bind KP_INS use_field +//bind KP_DEL use_field +//bind KP_ENTER use_field +// + + +// +// MOUSE OPTIONS +// + +bind / +mlook + +// +// MOUSE BUTTONS +// + +bind MOUSE1 +attack +bind MOUSE2 +altattack +bind MOUSE3 saberAttackCycle +bind mwheelup weapprev +bind mwheeldown weapnext + +// +// CLIENT ENVIRONMENT COMMANDS +// + +bind ~ "toggleconsole" +bind ` "toggleconsole" + + +//yell to all +bind y messagemode +//team talk +bind t messagemode2 +//target +bind u messagemode3 +//attacker +bind i messagemode4 +//voicechat +bind v voicechat +//Automap toggle +bind m automap_toggle +//Objectives menu +bind o "ui_opensiegemenu ingame_objectives" + +// Saber Challenge +bind k engage_duel diff --git a/base/noMotion.cfg b/base/noMotion.cfg new file mode 100644 index 0000000..b9c92df --- /dev/null +++ b/base/noMotion.cfg @@ -0,0 +1,5 @@ +cg_runpitch 0 +cg_runroll 0 +cg_bobup 0 +cg_bobpitch 0 +cg_bobroll 0 \ No newline at end of file diff --git a/base/productid.txt b/base/productid.txt new file mode 100644 index 0000000..9e1663b --- /dev/null +++ b/base/productid.txt @@ -0,0 +1 @@ +This file is copyright 2003 Raven Software, and may not be duplicated except during a licensed installation of the full commercial version of Star Wars: Jedi Academy \ No newline at end of file diff --git a/base/restoreMotion.cfg b/base/restoreMotion.cfg new file mode 100644 index 0000000..b786388 --- /dev/null +++ b/base/restoreMotion.cfg @@ -0,0 +1,5 @@ +reset cg_runpitch +reset cg_runroll +reset cg_bobup +reset cg_bobpitch +reset cg_bobroll \ No newline at end of file diff --git a/base/vssver.scc b/base/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..95c651a12359be17b7eb8f8c4b642243dfe30638 GIT binary patch literal 160 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWky%#k#VPXJ-4nYQnbJ{7>TK}zl#19nNBFezP zw{OS!+N`uk>_GlAaR!E)d$vdKHQ4cp5y*cI?p?n(z2kDH5(@(uCgDwNv&Y=_H|yDBkqiQiY`vjtTx6OitCJxggt+7vNHpolY&AF`%+ z&4C@Wzott z0(KJun8Ex&ApdkC*TM%T3S!Ja_XPp@P3sQ*T5(WIc>uSFZXEys literal 432 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWQ?3fqq$i@H$PC&Zn^(>{i9)+@uKoMskKV(hu z8p*|6V7?2GzeR7(S$!`dFy9r(pIf+j<@67dV7?oWA9HV8(9+pTV7@z$e=j>nE7k3- z3=_~i4x(4^H}aSy-PonLmv1^vv*to^ZkJQ60VyPqQN)7e19OnXv^k%(p3+^`~V<- z;co%E@cmE0{6HZ8bRyTn){N;g%s}@90r^eq4*lvjo&lB*2J(A5UVGeDTMKr72$26J z$no>bliR@Zp+G*%NvG|BWqZK0GL&6mjD0& diff --git a/code/Ragl/vssver.scc b/code/Ragl/vssver.scc index 45055c31dee481fa23f69f66d334733ce67a79ae..2677bd4d561520746108b2ac254a68141d7f2305 100644 GIT binary patch delta 97 zcmXRYm>?3fYd3qYjSvGEumb4?MVGdEJY^6T1d6Z$`S&ah>uj{8h1r38b|7Ejy@1A% mFGj+$Kt2bMpK{>Lxfi-t!c0KEIFR3v$x)Xx=adjDkPiSzrWMKn delta 97 zcmXRYm>?2ka&@`1jSvGEumb4?MVGclE~pk01d6Z$`S&ah>z>XK7GnqU*@1k8_W~NG meF|c-Kt2bMpK{>Lxw$5KVoX53IFR3v$x*lQnS~fDkPiS}X%)8s diff --git a/code/Ratl/vssver.scc b/code/Ratl/vssver.scc index 715da8119711c34515c0a21688e825e43d495524..9e2d7138221527f43254716356fe354614105324 100644 GIT binary patch literal 288 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYW)=N*Z7h(VdMIc?Ne>2_Zj3%dJ-O!Oq$Ue-0r|Q>{*}X@Zx+O5fz|5)`D&Awmb7dy f1oQQQ{H)^+pI1z%0P_ui{E!2pOerlqVE+IBS))n9 literal 288 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXv8X7v;3o(F!B9N}sznLBya8i;HD53=9Pq@^| zztsI6n6C`vzg>EGG4GkDl59YE6(Iln1@p$QRiDA~szCk%t#yLtj{hZ@fbwcUzW+;3 znVYvKf#ubK{2OzgbN+3e1LkW0`KN-4H``BG0p@E0`F^h)g)Teq1oO3k{2!V<8M5o# zzeeehk{m$ub%6Z!o?LTsW1}RwfP7sb|H|RdH?N*f1gqBr^3^6UEfK$# f3+C$s`B}#uKL3xY2J;Po{E!2pOr>wQ!TtdN?l4M@ diff --git a/code/Ravl/vssver.scc b/code/Ravl/vssver.scc index e182a3e699c15e447f76c3e380f139ac27a6da3d..fad942c28fa0d29b431f039fcd86056050ba089b 100644 GIT binary patch delta 97 zcmXRYm>?3<`SQtZ2O$P9Fapwt_Eq}-D3KLn1d12~`3rjE6Sib13NZosCP2PPhKuzL jM-8yNDUk2F;OnOy>#T)XfbwQQ{vIK5Aq|zYq98s1*ftiv delta 97 zcmXRYm>?3vbAL~$gAfB47y;=+`zrl)In*Q>fg;90{(|241mgDwNv&Y=_H|yDBkqiQiXbC_WZ-6k-4a3n1;7_uFkngsUVIP{b0*@7G*Z zA))6l$pYkCLDlK7heo`)y5b@)wt)2m E0O_|J&;S4c literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYa`TctCD8v8;7C_oD@3-4rQ3V+$pok@q->VFk)h1M*+a(G@p+F9p^Q E0B(65_5c6? diff --git a/code/SHDebug/vssver.scc b/code/SHDebug/vssver.scc index 1209876d2f892d8deff310eec53d1fa9f458522f..6cb010259a164372f0bab742e987d589462f7ec4 100644 GIT binary patch delta 49 ucmZ>8m>{CF?c83DbT$Ss$NkvwF{a6 delta 49 ucmZ>8m>{B)WW2&7os9tuGJv$oz7vPG-{h2M1d3z=`Dv|ep-;O^zmMediaHandles.GetHandle(), fx->mSizeStart.GetVal(), tr.endpos, tr.plane.normal, - tr.entityNum, ent->client->ps.origin, ent->client->ps.viewangles[YAW], - ent->ghoul2, ent->s.modelScale, Q_irand(40000, 60000)); + if ( ent != NULL ) + { + vec3_t entOrg, hitDir; + float entYaw; + float firstModel = 0; + if ( !(ent->s.eFlags&EF_NODRAW) ) + {//not drawn, no marks + if ( ent->client ) + { + VectorCopy( ent->client->ps.origin, entOrg ); + } + else + { + VectorCopy( ent->currentOrigin, entOrg ); + } + if ( ent->client ) + { + entYaw = ent->client->ps.viewangles[YAW]; + } + else + { + entYaw = ent->currentAngles[YAW]; + } + //if ( VectorCompare( tr.plane.normal, vec3_origin ) ) + {//hunh, no plane? Use trace dir + VectorCopy( ax[0], hitDir ); + } + /* + else + { + VectorCopy( tr.plane.normal, hitDir ); + } + */ + + CG_AddGhoul2Mark(fx->mMediaHandles.GetHandle(), fx->mSizeStart.GetVal(), tr.endpos, tr.plane.normal, + tr.entityNum, entOrg, entYaw, + ent->ghoul2, ent->s.modelScale, Q_irand(40000, 60000), firstModel); + } + } } } break; diff --git a/code/cgame/cg_ents.cpp b/code/cgame/cg_ents.cpp index 026e753..0d1463b 100644 --- a/code/cgame/cg_ents.cpp +++ b/code/cgame/cg_ents.cpp @@ -12,10 +12,11 @@ #include "..\game\g_vehicles.h" extern void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, int renderfx, int modelIndex, vec3_t origin, vec3_t angles); -extern void CG_CheckSaberInWater( centity_t *cent, centity_t *scent, int modelIndex, vec3_t origin, vec3_t angles ); +extern void CG_CheckSaberInWater( centity_t *cent, centity_t *scent, int saberNum, int modelIndex, vec3_t origin, vec3_t angles ); extern void CG_ForcePushBlur( const vec3_t org, qboolean darkSide = qfalse ); extern void CG_AddForceSightShell( refEntity_t *ent, centity_t *cent ); extern qboolean CG_PlayerCanSeeCent( centity_t *cent ); +extern cvar_t *debug_subdivision; /* ====================== @@ -562,7 +563,7 @@ const weaponData_t *wData = NULL; else if ( cent->gent->owner->client->ps.saberEventFlags & SEF_INWATER ) { CG_CheckSaberInWater( &cg_entities[cent->gent->owner->s.number], - &cg_entities[cent->gent->s.number], cent->gent->weaponModel[0], + &cg_entities[cent->gent->s.number], 0, cent->gent->weaponModel[0], cent->lerpOrigin, cent->lerpAngles ); } } @@ -582,7 +583,12 @@ const weaponData_t *wData = NULL; else { int spinSound; - if ( cent->gent->owner->client->ps.saber[0].type == SABER_SITH_SWORD ) + if ( cent->gent->owner->client->ps.saber[0].spinSound + && cgs.sound_precache[cent->gent->owner->client->ps.saber[0].spinSound] ) + { + spinSound = cgs.sound_precache[cent->gent->owner->client->ps.saber[0].spinSound]; + } + else if ( cent->gent->owner->client->ps.saber[0].type == SABER_SITH_SWORD ) { spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspinoff.wav" ); } @@ -623,7 +629,7 @@ const weaponData_t *wData = NULL; else if ( cent->gent->owner->client->ps.saberEventFlags & SEF_INWATER ) { CG_CheckSaberInWater( &cg_entities[cent->gent->owner->s.number], - &cg_entities[cent->gent->s.number], 0, cent->lerpOrigin, + &cg_entities[cent->gent->s.number], 0, 0, cent->lerpOrigin, cent->lerpAngles ); } } @@ -654,7 +660,12 @@ const weaponData_t *wData = NULL; else { int spinSound; - if ( cent->gent->owner->client->ps.saber[0].type == SABER_SITH_SWORD ) + if ( cent->gent->owner->client->ps.saber[0].spinSound + && cgs.sound_precache[cent->gent->owner->client->ps.saber[0].spinSound] ) + { + spinSound = cgs.sound_precache[cent->gent->owner->client->ps.saber[0].spinSound]; + } + else if ( cent->gent->owner->client->ps.saber[0].type == SABER_SITH_SWORD ) { spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspinoff.wav" ); } @@ -986,7 +997,22 @@ Ghoul2 Insert End // lovely...this is for weapons that should be oriented vertically. For weapons lockers and such. if ( cent->gent->spawnflags & 16 ) { //VectorClear( spinAngles ); - spinAngles[PITCH] -= 75; + if ( item->giType == IT_WEAPON + && item->giTag == WP_SABER ) + { + if ( cent->gent->random ) + {//pitch specified + spinAngles[PITCH] += cent->gent->random; + } + else + { + spinAngles[PITCH] -= 20; + } + } + else + { + spinAngles[PITCH] -= 75; + } } if( item->giType != IT_HOLOCRON ) @@ -1997,7 +2023,7 @@ extern cvar_t *g_saberRealisticCombat; if ( newBolt != -1 ) { cent->gent->delay = cg.time + 50; - CG_PlayEffectBolted( "blaster/smoke_bolton", owner->playerModel, newBolt, owner->s.number, owner->s.origin ); //ent origin used to make FX culling work + CG_PlayEffectBolted( "saber/limb_bolton", owner->playerModel, newBolt, owner->s.number, owner->s.origin ); //ent origin used to make FX culling work } } } @@ -2019,7 +2045,7 @@ extern cvar_t *g_saberRealisticCombat; } } if ( owner->client->NPC_class == CLASS_PROTOCOL - || g_dismemberment->integer == 113811381138 + || debug_subdivision->integer || g_saberRealisticCombat->integer ) { //wait 100ms before allowing owner to be dismembered again diff --git a/code/cgame/cg_info.cpp b/code/cgame/cg_info.cpp index 911b737..0be77c1 100644 --- a/code/cgame/cg_info.cpp +++ b/code/cgame/cg_info.cpp @@ -52,8 +52,14 @@ static void ObjectivePrint_Line(const int color, const int objectIndex, int &mis int iYPixelsPerLine = cgi_R_Font_HeightPixels(cgs.media.qhFontMedium, 1.0f); - cgi_SP_GetStringTextString( va("OBJECTIVES_%s",objectiveTable[objectIndex].name) , finalText, sizeof(finalText) ); - + if( gi.Cvar_VariableIntegerValue("com_demo") ) + { + cgi_SP_GetStringTextString( va("OBJECTIVES_DEMO_%s",objectiveTable[objectIndex].name) , finalText, sizeof(finalText) ); + } + else + { + cgi_SP_GetStringTextString( va("OBJECTIVES_%s",objectiveTable[objectIndex].name) , finalText, sizeof(finalText) ); + } // A hack to be able to count prisoners if (objectIndex==T2_RANCOR_OBJ5) { @@ -672,18 +678,57 @@ static void CG_GetLoadScreenInfo(int *weaponBits,int *forceBits) ); } - - // the new JK2 stuff - force powers, etc... - // - gi.Cvar_VariableStringBuffer( "playerfplvl", s, sizeof(s) ); - i=0; - var = strtok( s, " " ); - while( var != NULL ) + else { - /* While there are tokens in "s" */ - loadForcePowerLevel[i++] = atoi(var); - /* Get next token: */ - var = strtok( NULL, " " ); + // will also need to do this for weapons + if( gi.Cvar_VariableIntegerValue("com_demo") ) + { + gi.Cvar_VariableStringBuffer( "demo_playerwpns", s, sizeof(s) ); + + *weaponBits = atoi(s); + + } + + } + + if( gi.Cvar_VariableIntegerValue("com_demo") ) + { + // le Demo stuff... + // the new JK2 stuff - force powers, etc... + // + *forceBits = 0; // need to zero it out it might have already been set above if coming from a true + // map transition in the demo + gi.Cvar_VariableStringBuffer( "demo_playerfplvl", s, sizeof(s) ); + int j=0; + var = strtok( s, " " ); + while( var != NULL ) + { + /* While there are tokens in "s" */ + loadForcePowerLevel[j] = atoi(var); + if( loadForcePowerLevel[j] ) + { + *forceBits |= (1<ps.weapon ); + if ( g_entities[i].client->ps.saber[0].g2MarksShader[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[0].g2MarksShader ); + } + if ( g_entities[i].client->ps.saber[0].g2MarksShader2[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[0].g2MarksShader2 ); + } + if ( g_entities[i].client->ps.saber[0].g2WeaponMarkShader[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[0].g2WeaponMarkShader ); + } + if ( g_entities[i].client->ps.saber[0].g2WeaponMarkShader2[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[0].g2WeaponMarkShader2 ); + } + if ( g_entities[i].client->ps.saber[1].g2MarksShader[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[1].g2MarksShader ); + } + if ( g_entities[i].client->ps.saber[1].g2MarksShader2[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[1].g2MarksShader2 ); + } + if ( g_entities[i].client->ps.saber[1].g2WeaponMarkShader[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[1].g2WeaponMarkShader ); + } + if ( g_entities[i].client->ps.saber[1].g2WeaponMarkShader2[0] ) + { + cgi_R_RegisterShader( g_entities[i].client->ps.saber[1].g2WeaponMarkShader2 ); + } CG_RegisterNPCCustomSounds( &g_entities[i].client->clientInfo ); //CG_RegisterNPCEffects( g_entities[i].client->playerTeam ); } @@ -1768,7 +1800,7 @@ Ghoul2 Insert End else */ { - NPC_Precache( &g_entities[i] ); + CG_NPC_Precache( &g_entities[i] ); } } } diff --git a/code/cgame/cg_players.cpp b/code/cgame/cg_players.cpp index 3187121..4c231fe 100644 --- a/code/cgame/cg_players.cpp +++ b/code/cgame/cg_players.cpp @@ -17,6 +17,9 @@ #include "animtable.h" +extern qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); +extern void WP_SaberSwingSound( gentity_t *ent, int saberNum, swingType_t swingType ); + extern vmCvar_t cg_debugHealthBars; /* @@ -28,7 +31,7 @@ taken from the entityState_t //rww - generic function for applying a shader to the skin. extern vmCvar_t cg_g2Marks; void CG_AddGhoul2Mark(int type, float size, vec3_t hitloc, vec3_t hitdirection, - int entnum, vec3_t entposition, float entangle, CGhoul2Info_v &ghoul2, vec3_t modelScale, int lifeTime, vec3_t uaxis ) + int entnum, vec3_t entposition, float entangle, CGhoul2Info_v &ghoul2, vec3_t modelScale, int lifeTime, int firstModel, vec3_t uaxis ) { if ( !cg_g2Marks.integer ) {//don't want these @@ -44,11 +47,15 @@ void CG_AddGhoul2Mark(int type, float size, vec3_t hitloc, vec3_t hitdirection, goreSkin.frontFaces = true; // yes front goreSkin.backFaces = false; // no back goreSkin.lifeTime = lifeTime; + goreSkin.firstModel = firstModel; + /* + //NOTE: sorry, have to disable fade-out of marks, causes sorting issues if (lifeTime > 0) { goreSkin.fadeOutTime = lifeTime*0.1; //use whatever you want here -rww } goreSkin.fadeRGB = true; //fade on RGB and alpha instead of just alpha (not needed for all shaders, but whatever) + */ goreSkin.currentTime = cg.time; goreSkin.entNum = entnum; @@ -79,7 +86,15 @@ void CG_AddGhoul2Mark(int type, float size, vec3_t hitloc, vec3_t hitdirection, } VectorCopy(modelScale, goreSkin.scale); - VectorCopy ( hitdirection, goreSkin.rayDirection); + if ( VectorCompare( hitdirection, vec3_origin ) ) + {//wtf, no dir? Make one up + VectorSubtract( entposition, hitloc, goreSkin.rayDirection); + VectorNormalize( goreSkin.rayDirection ); + } + else + {//use passed in value + VectorCopy ( hitdirection, goreSkin.rayDirection); + } VectorCopy ( hitloc, goreSkin.hitLocation ); VectorCopy ( entposition, goreSkin.position ); @@ -982,6 +997,56 @@ static void CG_PlayerAnimEventDo( centity_t *cent, animevent_t *animEvent ) } } break; + case AEV_SABER_SWING: + if ( cent->gent ) + {//cheat over to game side and play sound from there... + WP_SaberSwingSound( cent->gent, animEvent->eventData[AED_SABER_SWING_SABERNUM], (swingType_t)animEvent->eventData[AED_SABER_SWING_TYPE] ); + } + break; + case AEV_SABER_SPIN: + if ( cent->gent + && cent->gent->client ) + { + saberInfo_t *saber = ¢->gent->client->ps.saber[animEvent->eventData[AED_SABER_SPIN_SABERNUM]]; + if ( saber ) + { + int spinSound = 0; + if ( saber->spinSound + && cgs.sound_precache[saber->spinSound] ) + {//use override + spinSound = cgs.sound_precache[saber->spinSound]; + } + else + { + switch ( animEvent->eventData[AED_SABER_SPIN_TYPE] ) + { + case 0://saberspinoff + spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspinoff.wav" ); + break; + case 1://saberspin + spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspin.wav" ); + break; + case 2://saberspin1 + spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspin1.wav" ); + break; + case 3://saberspin2 + spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspin2.wav" ); + break; + case 4://saberspin3 + spinSound = cgi_S_RegisterSound( "sound/weapons/saber/saberspin3.wav" ); + break; + default://random saberspin1-3 + spinSound = cgi_S_RegisterSound( va( "sound/weapons/saber/saberspin%d.wav", Q_irand(1,3)) ); + break; + } + } + if ( spinSound ) + { + cgi_S_StartSound( NULL, cent->currentState.clientNum, CHAN_AUTO, spinSound ); + } + } + } + break; case AEV_FOOTSTEP: CG_PlayerFootsteps( cent, (footstepType_t)animEvent->eventData[AED_FOOTSTEP_TYPE] ); break; @@ -1251,6 +1316,28 @@ static void CG_PlayerAnimEvents( int animFileIndex, qboolean torso, int oldFrame doEvent = qtrue; } break; + case AEV_SABER_SWING: + // Determine probability of playing sound + if (!animEvents[i].eventData[AED_SABER_SWING_PROBABILITY]) // 100% + { + doEvent = qtrue; + } + else if (animEvents[i].eventData[AED_SABER_SWING_PROBABILITY] > Q_irand(0, 99) ) + { + doEvent = qtrue; + } + break; + case AEV_SABER_SPIN: + // Determine probability of playing sound + if (!animEvents[i].eventData[AED_SABER_SPIN_PROBABILITY]) // 100% + { + doEvent = qtrue; + } + else if (animEvents[i].eventData[AED_SABER_SPIN_PROBABILITY] > Q_irand(0, 99) ) + { + doEvent = qtrue; + } + break; case AEV_FOOTSTEP: // Determine probability of playing sound //Com_Printf( "Footstep event on frame %d, even should be on frame %d, off by %d\n", frame, animEvents[i].keyFrame, frame-animEvents[i].keyFrame ); @@ -5490,6 +5577,90 @@ static void CG_StopWeaponSounds( centity_t *cent ) //--------------- SABER STUFF -------- extern void CG_Smoke( vec3_t origin, vec3_t dir, float radius, float speed, qhandle_t shader, int flags); +void CG_SaberDoWeaponHitMarks( gclient_t *client, gentity_t *saberEnt, gentity_t *hitEnt, int saberNum, int bladeNum, vec3_t hitPos, vec3_t hitDir, vec3_t uaxis, vec3_t splashBackDir, float sizeTimeScale ) +{ + if ( client + && sizeTimeScale > 0.0f + && hitEnt + && hitEnt->client + && hitEnt->ghoul2.size() ) + {//burn mark with glow + //FIXME: set the correct angle based on direction of swing + //FIXME: keep a count of these on the ent and don't add too many + int lifeTime = (1.01-(float)(hitEnt->health)/hitEnt->max_health) * (float)Q_irand( 5000, 10000 ); + float size = 0.0f; + int weaponMarkShader = 0, markShader = cgs.media.bdecal_saberglowmark; + + //First: do mark decal on hitEnt + if ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) ) + { + if ( client->ps.saber[saberNum].g2MarksShader2[0] ) + {//we have a shader to use instead of the standard mark shader + markShader = cgi_R_RegisterShader( client->ps.saber[saberNum].g2MarksShader2 ); + lifeTime = Q_irand( 20000, 30000 );//last longer if overridden + } + } + else + { + if ( client->ps.saber[saberNum].g2MarksShader[0] ) + {//we have a shader to use instead of the standard mark shader + markShader = cgi_R_RegisterShader( client->ps.saber[saberNum].g2MarksShader ); + lifeTime = Q_irand( 20000, 30000 );//last longer if overridden + } + } + + if ( markShader ) + { + lifeTime = ceil( (float)lifeTime * sizeTimeScale ); + size = Q_flrand( 2.0f, 3.0f ) * sizeTimeScale; + CG_AddGhoul2Mark( markShader, size, hitPos, hitDir, hitEnt->s.number, + hitEnt->client->ps.origin, hitEnt->client->renderInfo.legsYaw, hitEnt->ghoul2, hitEnt->s.modelScale, + lifeTime, 0, uaxis ); + } + + //now do weaponMarkShader - splashback decal on weapon + if ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) ) + { + if ( client->ps.saber[saberNum].g2WeaponMarkShader2[0] ) + {//we have a shader to use instead of the standard mark shader + weaponMarkShader = cgi_R_RegisterShader( client->ps.saber[saberNum].g2WeaponMarkShader2 ); + lifeTime = Q_irand( 7000, 12000 );//last longer if overridden + } + } + else + { + if ( client->ps.saber[saberNum].g2WeaponMarkShader[0] ) + {//we have a shader to use instead of the standard mark shader + weaponMarkShader = cgi_R_RegisterShader( client->ps.saber[saberNum].g2WeaponMarkShader ); + lifeTime = Q_irand( 7000, 12000 );//last longer if overridden + } + } + + if ( weaponMarkShader ) + { + centity_t *splatterOnCent = (saberEnt&&client->ps.saberInFlight?&cg_entities[saberEnt->s.number]:&cg_entities[client->ps.clientNum]); + float yawAngle = 0; + vec3_t backDir; + VectorScale( hitDir, -1, backDir ); + if ( !splatterOnCent->gent->client ) + { + yawAngle = splatterOnCent->lerpAngles[YAW]; + } + else + { + yawAngle = splatterOnCent->gent->client->renderInfo.legsYaw; + } + lifeTime = ceil( (float)lifeTime * sizeTimeScale ); + size = Q_flrand( 1.0f, 3.0f ) * sizeTimeScale; + if ( splatterOnCent->gent->ghoul2.size() > saberNum+1 ) + { + CG_AddGhoul2Mark( weaponMarkShader, size, hitPos, backDir, splatterOnCent->currentState.number, + splatterOnCent->lerpOrigin, yawAngle, splatterOnCent->gent->ghoul2, splatterOnCent->currentState.modelScale, + lifeTime, saberNum+1, uaxis/*splashBackDir*/ ); + } + } + } +} static void CG_RGBForSaberColor( saber_colors_t color, vec3_t rgb ) { @@ -5518,19 +5689,49 @@ static void CG_RGBForSaberColor( saber_colors_t color, vec3_t rgb ) static void CG_DoSaberLight( saberInfo_t *saber ) { + int firstBlade = 0; + int lastBlade; //RGB combine all the colors of the sabers you're using into one averaged color! if ( !saber ) { return; } + lastBlade = saber->numBlades - 1; + + if ( (saber->saberFlags2&SFL2_NO_DLIGHT) ) + { + if ( saber->bladeStyle2Start > 0 ) + { + if ( (saber->saberFlags2&SFL2_NO_DLIGHT2) ) + { + return; + } + else + { + firstBlade = saber->bladeStyle2Start; + } + } + else + { + return; + } + } + else if ( saber->bladeStyle2Start > 0 ) + { + if ( (saber->saberFlags2&SFL2_NO_DLIGHT2) ) + { + lastBlade = saber->bladeStyle2Start; + } + } + vec3_t positions[MAX_BLADES*2], mid={0}, rgbs[MAX_BLADES*2], rgb={0}; float lengths[MAX_BLADES*2]={0}, totallength = 0, numpositions = 0, dist, diameter = 0; int i, j; if ( saber ) { - for ( i = 0; i < saber->numBlades; i++ ) + for ( i = firstBlade; i <= lastBlade; i++ ) { if ( saber->blade[i].length >= MIN_SABERBLADE_DRAW_LENGTH ) { @@ -5787,7 +5988,7 @@ static void CG_CreateSaberMarks( vec3_t start, vec3_t end, vec3_t normal ) extern void FX_AddPrimitive( CEffect **effect, int killTime ); //------------------------------------------------------- -void CG_CheckSaberInWater( centity_t *cent, centity_t *scent, int modelIndex, vec3_t origin, vec3_t angles ) +void CG_CheckSaberInWater( centity_t *cent, centity_t *scent, int saberNum, int modelIndex, vec3_t origin, vec3_t angles ) { gclient_s *client = cent->gent->client; if ( !client ) @@ -5802,7 +6003,11 @@ void CG_CheckSaberInWater( centity_t *cent, centity_t *scent, int modelIndex, ve { return; } - + if ( cent && cent->gent && cent->gent->client + && (cent->gent->client->ps.saber[saberNum].saberFlags&SFL_ON_IN_WATER) ) + {//saber can stay on underwater + return; + } if (gi.totalMapContents() & (CONTENTS_WATER|CONTENTS_SLIME)) { vec3_t saberOrg; @@ -5855,6 +6060,7 @@ Ghoul2 Insert Start return; } + /* if ( cent->gent->client->ps.saber[saberNum].type == SABER_CLAW ) {//hack - come off the forearm int fwdAxis = POSITIVE_Y; @@ -5892,6 +6098,7 @@ Ghoul2 Insert Start gi.G2API_GiveMeVectorFromMatrix(boltMatrix, (Eorientations)upAxis, axis_[2]);//up } else + */ { // figure out where the actual model muzzle is @@ -5912,6 +6119,19 @@ Ghoul2 Insert Start bolt = 0; } } + + //if there is an effect on this blade, play it + if ( !WP_SaberBladeUseSecondBladeStyle( ¢->gent->client->ps.saber[saberNum], bladeNum ) + && cent->gent->client->ps.saber[saberNum].bladeEffect ) + { + CG_PlayEffectIDBolted( cent->gent->client->ps.saber[saberNum].bladeEffect, modelIndex, bolt, scent->currentState.clientNum, scent->lerpOrigin, -1, qfalse ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( ¢->gent->client->ps.saber[saberNum], bladeNum ) + && cent->gent->client->ps.saber[saberNum].bladeEffect2 ) + { + CG_PlayEffectIDBolted( cent->gent->client->ps.saber[saberNum].bladeEffect2, modelIndex, bolt, scent->currentState.clientNum, scent->lerpOrigin, -1, qfalse ); + } + //get the boltMatrix gi.G2API_GetBoltMatrix(scent->gent->ghoul2, modelIndex, bolt, &boltMatrix, angles, origin, cg.time, cgs.model_draw, scent->currentState.modelScale); // work the matrix axis stuff into the original axis and origins used. @@ -6232,7 +6452,22 @@ Ghoul2 Insert End { extern vmCvar_t cg_saberEntMarks; int traceMask = MASK_SOLID; + qboolean noMarks = qfalse; + if ( (!WP_SaberBladeUseSecondBladeStyle( ¢->gent->client->ps.saber[saberNum], bladeNum ) + && (cent->gent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + || ( WP_SaberBladeUseSecondBladeStyle( ¢->gent->client->ps.saber[saberNum], bladeNum ) + && (cent->gent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT2) ) + ) + {//do no effects when idle + if ( !cent->gent->client->ps.saberInFlight + && !PM_SaberInAttack( cent->gent->client->ps.saberMove ) + && !PM_SaberInTransitionAny( cent->gent->client->ps.saberMove ) + && !PM_SaberInSpecialAttack( cent->gent->client->ps.torsoAnim ) ) + {//idle, do no marks + noMarks = qtrue; + } + } if ( cg_saberEntMarks.integer ) { if ( cent->gent->client->ps.saberInFlight @@ -6259,92 +6494,104 @@ Ghoul2 Insert End { if ( (trace.contents&CONTENTS_WATER) || (trace.contents&CONTENTS_SLIME) ) { - /* - if ( !(cent->gent->client->ps.saberEventFlags&SEF_INWATER) ) + if ( !noMarks ) { - } - */ - if ( !Q_irand( 0, 10 ) ) - {//FIXME: don't do this this way.... :) + /* + if ( !(cent->gent->client->ps.saberEventFlags&SEF_INWATER) ) + { + } + */ + if ( !Q_irand( 0, 10 ) ) + {//FIXME: don't do this this way.... :) #ifdef _IMMERSION - if ( !cent->gent->client->ps.saberInFlight || saberNum != 0 ) - { - cgi_FF_Start( cgi_FF_Register( "fffx/weapons/saber/hitwater", FF_CHANNEL_WEAPON ), cent->currentState.number ); - } + if ( !cent->gent->client->ps.saberInFlight || saberNum != 0 ) + { + cgi_FF_Start( cgi_FF_Register( "fffx/weapons/saber/hitwater", FF_CHANNEL_WEAPON ), cent->currentState.number ); + } #endif // _IMMERSION - vec3_t spot; - VectorCopy( trace.endpos, spot ); - spot[2] += 4; - if ( Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) - { - theFxScheduler.PlayEffect( "saber/boil", spot ); - cgi_S_StartSound ( spot, -1, CHAN_AUTO, cgi_S_RegisterSound( "sound/weapons/saber/hitwater.wav" ) ); + vec3_t spot; + VectorCopy( trace.endpos, spot ); + spot[2] += 4; + if ( Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) + { + theFxScheduler.PlayEffect( "saber/boil", spot ); + cgi_S_StartSound ( spot, -1, CHAN_AUTO, cgi_S_RegisterSound( "sound/weapons/saber/hitwater.wav" ) ); + } } + //cent->gent->client->ps.saberEventFlags |= SEF_INWATER; + //don't do other trace } - //cent->gent->client->ps.saberEventFlags |= SEF_INWATER; - //don't do other trace i = 1; } else { - if ( !(trace.surfaceFlags & SURF_NOIMPACT) // never spark on sky - && (trace.entityNum == ENTITYNUM_WORLD || cg_entities[trace.entityNum].currentState.solid == SOLID_BMODEL) - && Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) + if ( !noMarks ) { - //was "sparks/spark" - theFxScheduler.PlayEffect( "sparks/spark_nosnd", trace.endpos, trace.plane.normal ); - } - // All I need is a bool to mark whether I have a previous point to work with. - //....come up with something better.. - if ( client->ps.saber[saberNum].blade[bladeNum].trail.haveOldPos[i] ) - { - if ( trace.entityNum == ENTITYNUM_WORLD || (cg_entities[trace.entityNum].currentState.eFlags & EF_PERMANENT) || cg_entities[trace.entityNum].currentState.eType == ET_TERRAIN ) - {//only put marks on architecture - // Let's do some cool burn/glowing mark bits!!! - CG_CreateSaberMarks( client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], trace.endpos, trace.plane.normal ); - - if ( Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) + if ( ( !WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS) ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS2) ) ) + { + if ( !(trace.surfaceFlags & SURF_NOIMPACT) // never spark on sky + && (trace.entityNum == ENTITYNUM_WORLD || cg_entities[trace.entityNum].currentState.solid == SOLID_BMODEL) + && Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) { - //make a sound - if ( cg.time - cent->gent->client->ps.saberHitWallSoundDebounceTime >= 100 ) - {//ugh, need to have a real sound debouncer... or do this game-side - cent->gent->client->ps.saberHitWallSoundDebounceTime = cg.time; - #ifdef _IMMERSION - int index = Q_irand( 1, 3 ); - cgi_S_StartSound ( cent->lerpOrigin, cent->currentState.clientNum, CHAN_WEAPON, cgi_S_RegisterSound( va ( "sound/weapons/saber/saberhitwall%d.wav", index ) ) ); - if ( !cent->gent->client->ps.saberInFlight || saberNum == 1 ) + //was "sparks/spark" + theFxScheduler.PlayEffect( "sparks/spark_nosnd", trace.endpos, trace.plane.normal ); + } + } + // All I need is a bool to mark whether I have a previous point to work with. + //....come up with something better.. + if ( client->ps.saber[saberNum].blade[bladeNum].trail.haveOldPos[i] ) + { + if ( trace.entityNum == ENTITYNUM_WORLD || (cg_entities[trace.entityNum].currentState.eFlags & EF_PERMANENT) || cg_entities[trace.entityNum].currentState.eType == ET_TERRAIN ) + {//only put marks on architecture + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS)) + || (WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS2)) ) + { + // Let's do some cool burn/glowing mark bits!!! + CG_CreateSaberMarks( client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], trace.endpos, trace.plane.normal ); + + if ( Q_irand( 1, client->ps.saber[saberNum].numBlades ) == 1 ) { - cgi_FF_Start( cgi_FF_Register( va( "fffx/weapons/saber/saberhitwall%d", index ), FF_CHANNEL_WEAPON ), cent->currentState.clientNum ); + //make a sound + if ( cg.time - cent->gent->client->ps.saberHitWallSoundDebounceTime >= 100 ) + {//ugh, need to have a real sound debouncer... or do this game-side + cent->gent->client->ps.saberHitWallSoundDebounceTime = cg.time; +#ifdef _IMMERSION + int index = Q_irand( 1, 3 ); + cgi_S_StartSound ( cent->lerpOrigin, cent->currentState.clientNum, CHAN_WEAPON, cgi_S_RegisterSound( va ( "sound/weapons/saber/saberhitwall%d.wav", index ) ) ); + if ( !cent->gent->client->ps.saberInFlight || saberNum == 1 ) + { + cgi_FF_Start( cgi_FF_Register( va( "fffx/weapons/saber/saberhitwall%d", index ), FF_CHANNEL_WEAPON ), cent->currentState.clientNum ); + } +#else + cgi_S_StartSound ( cent->lerpOrigin, cent->currentState.clientNum, CHAN_ITEM, cgi_S_RegisterSound( va ( "sound/weapons/saber/saberhitwall%d.wav", Q_irand( 1, 3 ) ) ) ); +#endif // _IMMERSION + } } - #else - cgi_S_StartSound ( cent->lerpOrigin, cent->currentState.clientNum, CHAN_ITEM, cgi_S_RegisterSound( va ( "sound/weapons/saber/saberhitwall%d.wav", Q_irand( 1, 3 ) ) ) ); - #endif // _IMMERSION } } - } - else if ( !i ) - {//can put marks on G2 clients (but only on base to tip trace) - gentity_t *hitEnt = &g_entities[trace.entityNum]; - if ( hitEnt && hitEnt->client && hitEnt->ghoul2.size() ) - {//burn mark with glow - //FIXME: set the correct angle based on direction of swing - //FIXME: keep a count of these on the ent and don't add too many - int lifeTime = (1.01-(float)(hitEnt->health)/hitEnt->max_health) * (float)Q_irand( 5000, 10000 ); - vec3_t uaxis; + else if ( !i ) + {//can put marks on G2 clients (but only on base to tip trace) + gentity_t *hitEnt = &g_entities[trace.entityNum]; + vec3_t uaxis, splashBackDir; VectorSubtract(client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], trace.endpos, uaxis); - CG_AddGhoul2Mark( cgs.media.bdecal_saberglowmark, Q_flrand(3.0, 4.0), trace.endpos, axis_[0], hitEnt->s.number, - hitEnt->client->ps.origin, hitEnt->client->renderInfo.legsYaw, hitEnt->ghoul2, hitEnt->s.modelScale, - lifeTime, uaxis ); + VectorScale( axis_[0], -1, splashBackDir ); + //FIXME: if not hitting the first model on the enemy, don't do this! + CG_SaberDoWeaponHitMarks( client, (scent!=NULL?scent->gent:NULL), hitEnt, saberNum, bladeNum, trace.endpos, axis_[0], uaxis, splashBackDir, 0.25f ); + } + } + else + { + // if we impact next frame, we'll mark a slash mark + client->ps.saber[saberNum].blade[bladeNum].trail.haveOldPos[i] = qtrue; + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS)) + || (WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS2)) ) + { + CG_ImpactMark( cgs.media.rivetMarkShader, client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], client->ps.saber[saberNum].blade[bladeNum].trail.oldNormal[i], + 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); } } } - else - { - // if we impact next frame, we'll mark a slash mark - client->ps.saber[saberNum].blade[bladeNum].trail.haveOldPos[i] = qtrue; - CG_ImpactMark( cgs.media.rivetMarkShader, client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], client->ps.saber[saberNum].blade[bladeNum].trail.oldNormal[i], - 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); - } } // stash point so we can connect-the-dots later @@ -6366,11 +6613,18 @@ Ghoul2 Insert End cent->gent->client->ps.saberEventFlags &= ~SEF_INWATER; if ( client->ps.saber[saberNum].blade[bladeNum].trail.haveOldPos[i] ) { - // Hmmm, no impact this frame, but we have an old point - // Let's put the mark there, we should use an endcap mark to close the line, but we - // can probably just get away with a round mark - CG_ImpactMark( cgs.media.rivetMarkShader, client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], client->ps.saber[saberNum].blade[bladeNum].trail.oldNormal[i], - 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); + if ( !noMarks ) + { + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS)) + || (WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && !(client->ps.saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS2)) ) + { + // Hmmm, no impact this frame, but we have an old point + // Let's put the mark there, we should use an endcap mark to close the line, but we + // can probably just get away with a round mark + CG_ImpactMark( cgs.media.rivetMarkShader, client->ps.saber[saberNum].blade[bladeNum].trail.oldPos[i], client->ps.saber[saberNum].blade[bladeNum].trail.oldNormal[i], + 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); + } + } } // we aren't impacting, so turn off our mark tracking mechanism @@ -6392,127 +6646,137 @@ Ghoul2 Insert End return; } - saberTrail_t *saberTrail = &client->ps.saber[saberNum].blade[bladeNum].trail; + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && client->ps.saber[saberNum].trailStyle < 2 ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && client->ps.saber[saberNum].trailStyle2 < 2 ) ) + {//okay to draw the trail + saberTrail_t *saberTrail = &client->ps.saber[saberNum].blade[bladeNum].trail; #define SABER_TRAIL_TIME 40.0f - // if we happen to be timescaled or running in a high framerate situation, we don't want to flood - // the system with very small trail slices...but perhaps doing it by distance would yield better results? - if ( saberTrail->lastTime > cg.time ) - {//after a pause, cg.time jumps ahead in time for one frame - //and lastTime gets set to that and will freak out, so, since - //it's never valid for saberTrail->lastTime to be > cg.time, - //cap it to cg.time here - saberTrail->lastTime = cg.time; - } - if ( cg.time > saberTrail->lastTime + 2 && saberTrail->inAction ) // 2ms - { - if ( saberTrail->inAction && cg.time < saberTrail->lastTime + 300 ) // if we have a stale segment, don't draw until we have a fresh one + // if we happen to be timescaled or running in a high framerate situation, we don't want to flood + // the system with very small trail slices...but perhaps doing it by distance would yield better results? + if ( saberTrail->lastTime > cg.time ) + {//after a pause, cg.time jumps ahead in time for one frame + //and lastTime gets set to that and will freak out, so, since + //it's never valid for saberTrail->lastTime to be > cg.time, + //cap it to cg.time here + saberTrail->lastTime = cg.time; + } + if ( cg.time > saberTrail->lastTime + 2 && saberTrail->inAction ) // 2ms { - vec3_t rgb1={255,255,255}; - - if ( cent->gent->client->ps.saber[saberNum].type != SABER_SITH_SWORD ) + if ( saberTrail->inAction && cg.time < saberTrail->lastTime + 300 ) // if we have a stale segment, don't draw until we have a fresh one { - switch( client->ps.saber[saberNum].blade[bladeNum].color ) - { - case SABER_RED: - VectorSet( rgb1, 255.0f, 0.0f, 0.0f ); - break; - case SABER_ORANGE: - VectorSet( rgb1, 255.0f, 64.0f, 0.0f ); - break; - case SABER_YELLOW: - VectorSet( rgb1, 255.0f, 255.0f, 0.0f ); - break; - case SABER_GREEN: - VectorSet( rgb1, 0.0f, 255.0f, 0.0f ); - break; - case SABER_BLUE: - VectorSet( rgb1, 0.0f, 64.0f, 255.0f ); - break; - case SABER_PURPLE: - VectorSet( rgb1, 220.0f, 0.0f, 255.0f ); - break; - } - } + vec3_t rgb1={255,255,255}; - float diff = cg.time - saberTrail->lastTime; - - // I'm not sure that clipping this is really the best idea - if ( diff <= SABER_TRAIL_TIME * 2 ) - { - // build a quad - CTrail *fx = new CTrail; - - float duration; - - if ( cent->gent->client->ps.saber[saberNum].type == SABER_SITH_SWORD) + if ( cent->gent->client->ps.saber[saberNum].type != SABER_SITH_SWORD + && ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) || client->ps.saber[saberNum].trailStyle != 1 ) + && ( !WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) || client->ps.saber[saberNum].trailStyle2 != 1 ) + ) { - fx->mShader = cgs.media.swordTrailShader; - duration = saberTrail->duration/2.0f; // stay around twice as long - VectorSet( rgb1, 32.0f, 32.0f, 32.0f ); // make the sith sword trail pretty faint - } - else - { - fx->mShader = cgs.media.saberBlurShader; - duration = saberTrail->duration/5.0f; + switch( client->ps.saber[saberNum].blade[bladeNum].color ) + { + case SABER_RED: + VectorSet( rgb1, 255.0f, 0.0f, 0.0f ); + break; + case SABER_ORANGE: + VectorSet( rgb1, 255.0f, 64.0f, 0.0f ); + break; + case SABER_YELLOW: + VectorSet( rgb1, 255.0f, 255.0f, 0.0f ); + break; + case SABER_GREEN: + VectorSet( rgb1, 0.0f, 255.0f, 0.0f ); + break; + case SABER_BLUE: + VectorSet( rgb1, 0.0f, 64.0f, 255.0f ); + break; + case SABER_PURPLE: + VectorSet( rgb1, 220.0f, 0.0f, 255.0f ); + break; + } } - float oldAlpha = 1.0f - ( diff / duration ); + float diff = cg.time - saberTrail->lastTime; - // Go from new muzzle to new end...then to old end...back down to old muzzle...finally - // connect back to the new muzzle...this is our trail quad - VectorCopy( org_, fx->mVerts[0].origin ); - VectorMA( end, 3.0f, axis_[0], fx->mVerts[1].origin ); + // I'm not sure that clipping this is really the best idea + if ( diff <= SABER_TRAIL_TIME * 2 ) + { + // build a quad + CTrail *fx = new CTrail; - VectorCopy( saberTrail->tip, fx->mVerts[2].origin ); - VectorCopy( saberTrail->base, fx->mVerts[3].origin ); + float duration; - // New muzzle - VectorCopy( rgb1, fx->mVerts[0].rgb ); - fx->mVerts[0].alpha = 255.0f; + if ( cent->gent->client->ps.saber[saberNum].type == SABER_SITH_SWORD + || (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && client->ps.saber[saberNum].trailStyle == 1 ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && client->ps.saber[saberNum].trailStyle2 == 1 ) + ) + { + fx->mShader = cgs.media.swordTrailShader; + duration = saberTrail->duration/2.0f; // stay around twice as long + VectorSet( rgb1, 32.0f, 32.0f, 32.0f ); // make the sith sword trail pretty faint + } + else + { + fx->mShader = cgs.media.saberBlurShader; + duration = saberTrail->duration/5.0f; + } - fx->mVerts[0].ST[0] = 0.0f; - fx->mVerts[0].ST[1] = 0.99f; - fx->mVerts[0].destST[0] = 0.99f; - fx->mVerts[0].destST[1] = 0.99f; + float oldAlpha = 1.0f - ( diff / duration ); - // new tip - VectorCopy( rgb1, fx->mVerts[1].rgb ); - fx->mVerts[1].alpha = 255.0f; - - fx->mVerts[1].ST[0] = 0.0f; - fx->mVerts[1].ST[1] = 0.0f; - fx->mVerts[1].destST[0] = 0.99f; - fx->mVerts[1].destST[1] = 0.0f; + // Go from new muzzle to new end...then to old end...back down to old muzzle...finally + // connect back to the new muzzle...this is our trail quad + VectorCopy( org_, fx->mVerts[0].origin ); + VectorMA( end, 3.0f, axis_[0], fx->mVerts[1].origin ); - // old tip - VectorCopy( rgb1, fx->mVerts[2].rgb ); - fx->mVerts[2].alpha = 255.0f; + VectorCopy( saberTrail->tip, fx->mVerts[2].origin ); + VectorCopy( saberTrail->base, fx->mVerts[3].origin ); - fx->mVerts[2].ST[0] = 0.99f - oldAlpha; // NOTE: this just happens to contain the value I want - fx->mVerts[2].ST[1] = 0.0f; - fx->mVerts[2].destST[0] = 0.99f + fx->mVerts[2].ST[0]; - fx->mVerts[2].destST[1] = 0.0f; + // New muzzle + VectorCopy( rgb1, fx->mVerts[0].rgb ); + fx->mVerts[0].alpha = 255.0f; - // old muzzle - VectorCopy( rgb1, fx->mVerts[3].rgb ); - fx->mVerts[3].alpha = 255.0f; + fx->mVerts[0].ST[0] = 0.0f; + fx->mVerts[0].ST[1] = 0.99f; + fx->mVerts[0].destST[0] = 0.99f; + fx->mVerts[0].destST[1] = 0.99f; - fx->mVerts[3].ST[0] = 0.99f - oldAlpha; // NOTE: this just happens to contain the value I want - fx->mVerts[3].ST[1] = 0.99f; - fx->mVerts[3].destST[0] = 0.99f + fx->mVerts[2].ST[0]; - fx->mVerts[3].destST[1] = 0.99f; - -// fx->SetFlags( FX_USE_ALPHA ); - FX_AddPrimitive( (CEffect**)&fx, duration );//SABER_TRAIL_TIME ); - } - } + // new tip + VectorCopy( rgb1, fx->mVerts[1].rgb ); + fx->mVerts[1].alpha = 255.0f; + + fx->mVerts[1].ST[0] = 0.0f; + fx->mVerts[1].ST[1] = 0.0f; + fx->mVerts[1].destST[0] = 0.99f; + fx->mVerts[1].destST[1] = 0.0f; - // we must always do this, even if we aren't active..otherwise we won't know where to pick up from - VectorCopy( org_, saberTrail->base ); - VectorMA( end, 3.0f, axis_[0], saberTrail->tip ); - saberTrail->lastTime = cg.time; + // old tip + VectorCopy( rgb1, fx->mVerts[2].rgb ); + fx->mVerts[2].alpha = 255.0f; + + fx->mVerts[2].ST[0] = 0.99f - oldAlpha; // NOTE: this just happens to contain the value I want + fx->mVerts[2].ST[1] = 0.0f; + fx->mVerts[2].destST[0] = 0.99f + fx->mVerts[2].ST[0]; + fx->mVerts[2].destST[1] = 0.0f; + + // old muzzle + VectorCopy( rgb1, fx->mVerts[3].rgb ); + fx->mVerts[3].alpha = 255.0f; + + fx->mVerts[3].ST[0] = 0.99f - oldAlpha; // NOTE: this just happens to contain the value I want + fx->mVerts[3].ST[1] = 0.99f; + fx->mVerts[3].destST[0] = 0.99f + fx->mVerts[2].ST[0]; + fx->mVerts[3].destST[1] = 0.99f; + + // fx->SetFlags( FX_USE_ALPHA ); + FX_AddPrimitive( (CEffect**)&fx, duration );//SABER_TRAIL_TIME ); + } + } + + // we must always do this, even if we aren't active..otherwise we won't know where to pick up from + VectorCopy( org_, saberTrail->base ); + VectorMA( end, 3.0f, axis_[0], saberTrail->tip ); + saberTrail->lastTime = cg.time; + } } if ( cent->gent->client->ps.saber[saberNum].type == SABER_SITH_SWORD) @@ -6521,9 +6785,27 @@ Ghoul2 Insert End return; } + qboolean noDlight = qfalse; + if ( client->ps.saber[saberNum].numBlades >= 3 + || (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && (client->ps.saber[saberNum].saberFlags2&SFL2_NO_DLIGHT) ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && (client->ps.saber[saberNum].saberFlags2&SFL2_NO_DLIGHT2) ) + ) + { + noDlight = qtrue; + } + + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && (client->ps.saber[saberNum].saberFlags2&SFL2_NO_BLADE) ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->ps.saber[saberNum], bladeNum ) && (client->ps.saber[saberNum].saberFlags2&SFL2_NO_BLADE2) ) ) + {//don't draw a blade + if ( !noDlight ) + {//but still do dlight + CG_DoSaberLight( &client->ps.saber[saberNum] ); + } + return; + } // Pass in the renderfx flags attached to the saber weapon model...this is done so that saber glows // will get rendered properly in a mirror...not sure if this is necessary?? - CG_DoSaber( org_, axis_[0], length, client->ps.saber[saberNum].blade[bladeNum].lengthMax, client->ps.saber[saberNum].blade[bladeNum].radius, client->ps.saber[saberNum].blade[bladeNum].color, renderfx, (qboolean)(client->ps.saber[saberNum].numBlades<3) ); + CG_DoSaber( org_, axis_[0], length, client->ps.saber[saberNum].blade[bladeNum].lengthMax, client->ps.saber[saberNum].blade[bladeNum].radius, client->ps.saber[saberNum].blade[bladeNum].color, renderfx, (noDlight==qfalse) ); } void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, int renderfx, int modelIndex, vec3_t origin, vec3_t angles ) @@ -7230,7 +7512,7 @@ extern vmCvar_t cg_thirdPersonAlpha; } //if ( cent->gent->client->ps.saberEventFlags&SEF_INWATER ) { - CG_CheckSaberInWater( cent, cent, cent->gent->weaponModel[saberNum], ent.origin, tempAngles ); + CG_CheckSaberInWater( cent, cent, saberNum, cent->gent->weaponModel[saberNum], ent.origin, tempAngles ); } } if ( cent->currentState.weapon == WP_SABER @@ -8050,7 +8332,7 @@ Ghoul2 Insert End { //if ( cent->gent->client->ps.saberEventFlags&SEF_INWATER ) { - CG_CheckSaberInWater( cent, cent, 0, NULL, NULL ); + CG_CheckSaberInWater( cent, cent, 0, 0, NULL, NULL ); } } } diff --git a/code/cgame/cg_weapons.cpp b/code/cgame/cg_weapons.cpp index 6b36a94..8b7d87a 100644 --- a/code/cgame/cg_weapons.cpp +++ b/code/cgame/cg_weapons.cpp @@ -242,9 +242,10 @@ void CG_RegisterWeapon( int weaponNum ) { theFxScheduler.RegisterEffect( "force/force_touch" ); theFxScheduler.RegisterEffect( "saber/saber_block" ); theFxScheduler.RegisterEffect( "saber/saber_cut" ); - theFxScheduler.RegisterEffect( "blaster/smoke_bolton" ); + theFxScheduler.RegisterEffect( "saber/limb_bolton" ); theFxScheduler.RegisterEffect( "saber/fizz" ); theFxScheduler.RegisterEffect( "saber/boil" ); + theFxScheduler.RegisterEffect( "saber/fire" );//was "sparks/spark" cgs.effects.forceHeal = theFxScheduler.RegisterEffect( "force/heal" ); //cgs.effects.forceInvincibility = theFxScheduler.RegisterEffect( "force/invin" ); @@ -2609,11 +2610,6 @@ void CG_Weapon_f( void ) return; } - if (!CG_WeaponSelectable(num, cg.snap->ps.weapon, qfalse)) - { - return; - } - if ( num == WP_SABER ) {//lightsaber if ( ! ( cg.snap->ps.stats[STAT_WEAPONS] & ( 1 << num ) ) ) @@ -2700,8 +2696,9 @@ void CG_Weapon_f( void ) } } - if ( ! ( cg.snap->ps.stats[STAT_WEAPONS] & ( 1 << num ) ) ) { - return; // don't have the weapon + if (!CG_WeaponSelectable(num, cg.snap->ps.weapon, qfalse)) + { + return; } SetWeaponSelectTime(); diff --git a/code/cgame/vssver.scc b/code/cgame/vssver.scc index f161c9ef1f7db089db9f16b7d9d744d6dda928dc..5be511a0138dfc7c5a4dfaf9b95ff628852a2816 100644 GIT binary patch literal 944 zcmW;LeJoXR7zglkBUfSNqLNg1QuFT0^_Gh+(amdaSKhf>TG-0gE>>8Qh1QGdmQ5OB zOuO{56s2fhW{bMf3)QeSMk?$&=bn}HJ-_qE?>wLLJbTWwXXkhdcvNn`Amhr+vyjGb zdy;o5nU=eq->aMqDRMdEo^M%kOPEjT;_<`;*rrUo;t-f57lyZ&kdTAJ|PUe$-5?K0M zuacbD#grl+02}fhz6x7KBp(QCul?#s_&Z4NKt2c#x)|}iT*J^p40sTJIQcI0(7``6 zLQ0Cm=zd9{x#~K-2@Zx6oWe)d_SM88@L*kEwsQO)&F%9L+#pD+lng(m*TbRkR9nui z$_hDc1c$**{WVUdiz<2>d>B^s`1o1BG9q~yJiR+Z&t5gB9g#l*w_AyI_TFxE92^c? zJUVSA+w4Vi`;36CelB&Zx5`+~k?>x}FPl4aVu+*Q?0@Kn!(3`+=Sd^19nyDJo^WkG~Ij=Ff z`0|9F`@R(Lanm*Vu*ag_432|?&)ZE%%2-l=96shcvyvi{kon_bp1f(D)^~*E_LBe? zo$PAVxV$IxC&HO6gSq0BIpQRE*|)9B>h&e!WO(ns$*O6ljOE^+0teS=3%Y;YAx?#R zPSt+u?W-a6X|TaUKr8i literal 944 zcmW;Kdn}b<90&0CNk=uQ)Q3=Jg2kZk&JrmZ8QUYla>ApN`H4}-dePK~R?{;*vA_jIS`GV6o>065{5FqvL%A^Qcw zt|b^CoHfLNp>W5{aO6!J zZ5AaJhDGP$nP8JPbJiG^!uwofNAq)>iNoOmWnYod*q`OkGXlON%DeLGxth_2BjImt zCC%#68Ab<=f?NArT(jdD#uDBGm-R|^Kgz#E@@RP0wtz`nQ8F&bW8m-0PvVU>N*Ng( z3!6SIHnf(6GyHkR!RGTzJ(z1Dp(>sP*xXHyz;gVHxaMQZi~}e~i^=c-gP5yHX$`&W0Vg&s<$hvt#)8=fG0s$SJQLF>x;3 zd+65Z-UwgPp9gFGivN^fJi(!)^0B-;bJa7_fhOm*AKoH=7#-H-NX(c~)Ff*<-lPzc e{k$wF%3$p9sg$8Lk|)7KV_IQfU(a#;|NI{r*%`|K diff --git a/code/client/OpenAL/vssver.scc b/code/client/OpenAL/vssver.scc index ad643b9b9febc9c5b71be9b27937e64e7a879b30..ab392e3b6b1f7e76f8ee37b521ea322095eae512 100644 GIT binary patch literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXrUl-b2&cXl&6+oJQSKFSaFA{z+0Yxf-{6+8I zKRNof7|gE%@-++7W|?}kg89`z{tP+JM8gDwNv&Y=_H|yDBkqiQiWwUN~J{&cXl&6+oJQSKFQiS_}U$0Yxf-{6+8I zKiMY}1?E=)`I?1kvwmcxf%(-y{tP+J#Ds~tV15mdf9CL4r4#bie;9%KYk_?8n|$mn I&UIiu0Pk2RKL7v# diff --git a/code/client/cl_input.cpp b/code/client/cl_input.cpp index 57bdec4..b17b227 100644 --- a/code/client/cl_input.cpp +++ b/code/client/cl_input.cpp @@ -1079,6 +1079,8 @@ void CL_InitInput( void ) { Cmd_AddCommand ("-altattack", IN_Button7Up); Cmd_AddCommand ("+forcefocus", IN_Button8Down);//special saber attacks Cmd_AddCommand ("-forcefocus", IN_Button8Up); + Cmd_AddCommand ("+block", IN_Button8Down);//manual blocking + Cmd_AddCommand ("-block", IN_Button8Up); //end buttons Cmd_AddCommand ("+mlook", IN_MLookDown); Cmd_AddCommand ("-mlook", IN_MLookUp); diff --git a/code/client/cl_main.cpp b/code/client/cl_main.cpp index 1de19da..62e1ec3 100644 --- a/code/client/cl_main.cpp +++ b/code/client/cl_main.cpp @@ -1269,9 +1269,9 @@ void CL_Init( void ) { Cvar_Get ("name", "Jaden", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("snaps", "20", CVAR_USERINFO | CVAR_ARCHIVE ); - Cvar_Get ("sex", "f", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_SAVEGAME ); + Cvar_Get ("sex", "f", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_SAVEGAME | CVAR_NORESTART ); Cvar_Get ("snd", "jaden_fmle", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_SAVEGAME | CVAR_NORESTART );//UI_SetSexandSoundForModel changes to match sounds.cfg for model - Cvar_Get ("handicap", "100", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_SAVEGAME ); + Cvar_Get ("handicap", "100", CVAR_USERINFO | CVAR_SAVEGAME | CVAR_NORESTART); // // register our commands diff --git a/code/client/eax/vssver.scc b/code/client/eax/vssver.scc index aab29e72250b3f766bbb70e9be4c394434ea508a..67b2a05105548dae7b0f449c4e2f639d5bb12229 100644 GIT binary patch delta 49 wcmZ>8m>{Ba@~di6AqxW-)QK}Nye-VD5e(V8m>{C#>Z;;e$ie^yb>a*RZwvEk)-C$=hZ!i+2;{2-NdD29Itk1N05|{*Pyhe` diff --git a/code/client/snd_dma.cpp b/code/client/snd_dma.cpp index 2975307..c009f91 100644 --- a/code/client/snd_dma.cpp +++ b/code/client/snd_dma.cpp @@ -531,6 +531,20 @@ void S_Init( void ) { // Sources / Channels are not sending to any Slots (other than the Listener / Primary FX Slot) s_channels[i].lSlotID = -1; + if (s_bEAX) + { + // Remove the RoomAuto flag from each Source (to remove Reverb Engine Statistical + // model that is assuming units are in metres) + // Without this call reverb sends from the sources will attenuate too quickly + // with distance, especially for the non-primary reverb zones. + + unsigned long ulFlags = 0; + + if (s_eaxSet(&EAXPROPERTYID_EAX40_Source, EAXSOURCE_FLAGS, + s_channels[i].alSource, &ulFlags, sizeof(ulFlags))!=AL_NO_ERROR) + OutputDebugString("Failed to to remove Source flags\n"); + } + s_numChannels++; } @@ -6110,21 +6124,11 @@ static void UpdateEAXListener() } } + lVolume = 0; for (i = 0; i < s_NumFXSlots; i++) { - if (s_FXSlotInfo[i].lEnvID == s_EnvironmentID) - { - lVolume = 0; - if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) - OutputDebugString("Failed to set Listener's FX Slot Volume to 0\n"); - } - else - { - // This will change to lower the volume based on distance from aperture ... - lVolume = -600; - if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) - OutputDebugString("Failed to set FX Slot Volume to 0\n"); - } + if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) + OutputDebugString("Failed to set FX Slot Volume to 0\n"); } } diff --git a/code/client/vssver.scc b/code/client/vssver.scc index a1696a0a4eb94d5329a25bb608162732c7b88e23..445e5614fbf132ea77e41e7a210c89f04c0fe60e 100644 GIT binary patch literal 608 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWw>k6|cu`qx^GKhZPeD`APir+jyW(trm^J&4O zr`xvwW(4w6f&8%kO;HEULVrjD`Ds9YgHogFLgs`YtU!J`kU#msrT-tFvw-;-K)%nJ zNgqqYM1KeavId{5<1{9*(0n}Pg4&-;G;-S_er$bT(B{>-c1k)r4S|KbMnTY-GJ1uTJ<8tuP8 z;oS!0Z?*iP;mg?f3uIn9kl(F0_ru;9)4}>XfP97BA7*v-%m&N92L`gXg1WA%iqdb8 zc^`oMu;24+Sq*K$?)eDhUs|2>Ua|8jSbdfV1H=60;)JF9)_~(H8_1uwY0sR8n!A30 u?8^c2F9#NGQ~gx%gB{4P6lGvITAAq^x>(@{$o*A7zUlL`cYD8@f%yPvb;Y3o literal 608 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXbE{}Sc#KHgu$sqcD^W6oKpZ@XynJGZN%%=s9 zTkf&9r2F8vRgu@2170P+Rj zh|4VLcm5>=l+Oh6LzZrRw&`KXFCdd43rKwH`RbQa#rI1d$j=7yoo+bpxzsK9iwVfj z0rI`(?p!7_P3srP{#+pc(4v_ZagWTv{5&8(Me>YJ(V7E)LH6eZ`M>Jt)V}z8{VxZQ zUjXEL{ug}Nv;N^j(7{Q*0;nEx^Z z`AtCn!^Aaw1nZSeZL$+jlud`fc%+Py(3fDZU1ru5;r1_o^fb=^9< za>O`2k(X`c5k@B8UpzORTuO6qkm1e4E}YE6*S!fK1^5^wGTLrM~k z@qfQlGks6*aT3H0urEK_C2WqNH^H*n^7%`;2E7GVsnf;%3@dsYJpD2%E~eC@P2lhx z(Mc+8LYu){+FEb0paZ=F_TGy`A*vW{0n3XkavK-=(7WK)z_Migij3X^|Fl@u-`Whc z6+DtRqoT){@nq<`52hRSyc~jqcN=(2)P1JVanT20VtwnCTv>>=gNFzC13jh^^dZfTu*ez*Y94JKyar`V8zms$|VxuqJK#QR26w&%xKh Ki&(_KNB;r4K&62I literal 480 zcmW;ITPVW;6b5h`$<|UPg=QitnU$i{rcu0DYLSvHQWIe-i#>=$6S>roR!nVKXkxRu z%*M>+Ki6WJJ&Z||+?M8H(;mjzIWOn?bzZ(s5uFqxC+IEXua*j(FGs{|4z08X`D{a6 z4306nzY~&EA9;Tyh#TO$f>76yz!izw1fHzo&Wmb(&}Oh&lPEQ{jiNWf)9(st`jiU2 z1^$|IwGU-3ptr$n%BozMyM*2WUq4ACj5Isi0#+86<|{@j(YxSA@8V!5trl$shebAx z+uDG(frnT#>Njymgbe-mz)8lnGJ#))_kHlNM0Pge=|S7Uu66TAcT+6-06frF-upmM z(GKvwi$heUq@fSN%LXH}o|}z60*hz=;vM=t^fCB((;f6w7otzVD(V1}2f zuhm_UqW^P($1(z1PQeZO6wEv5zh4wSqR+t2Lw=Tj`4fE(CMzj{I#vLE0oKu`UxcAB O`VxHWyZRl_D$xJ`v6|EX diff --git a/code/ff/cl_ff.cpp b/code/ff/cl_ff.cpp index 6becc34..6eadb64 100644 --- a/code/ff/cl_ff.cpp +++ b/code/ff/cl_ff.cpp @@ -11,7 +11,7 @@ extern clientActive_t cl; void CL_InitFF( void ) { - cvar_t *use_ff = Cvar_Get( "use_ff", "1", CVAR_ARCHIVE ); + cvar_t *use_ff = Cvar_Get( "use_ff", "0", CVAR_ARCHIVE ); if (!use_ff || !use_ff->integer diff --git a/code/ff/ff.cpp b/code/ff/ff.cpp index fefab0a..e672df6 100644 --- a/code/ff/ff.cpp +++ b/code/ff/ff.cpp @@ -113,7 +113,7 @@ qboolean FF_Init( void ) Cmd_AddCommand( "ff_stopall", CMD_FF_StopAll ); Cmd_AddCommand( "ff_info", CMD_FF_Info ); #endif - use_ff = Cvar_Get( "use_ff", "1", CVAR_ARCHIVE /*| CVAR_LATCH*/); + use_ff = Cvar_Get( "use_ff", "0", CVAR_ARCHIVE /*| CVAR_LATCH*/); ensureShake = Cvar_Get( "ff_ensureShake", "1", CVAR_TEMP); ff_developer = Cvar_Get( "ff_developer", "0", CVAR_TEMP); ff_channels = Cvar_Get( "ff_channels", FF_CHANNEL, CVAR_ARCHIVE); diff --git a/code/ff/vssver.scc b/code/ff/vssver.scc index 5fadef8e619f00ef3bf4dbbe076408d0f34b8f3a..4a498e475a9a8c79eb8ccfb0505136a701fd6426 100644 GIT binary patch literal 496 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXj{?*7ZiG=|SCIe}f%M+KS+L-=g0*Xul^6z|@ zdUvj$^)E&se=3kK&pS7g_sE&QApSHUKjXyhIknN({({s`2l9`{w!ZcBzXg_`0pznw zvrUa%@es_P3FKQX&0^7v`3mOG0`d=Taz0_Z^$(ao8^~Atk>@Mh)DPy*0qJk@Tdeqd z8kj#9$iMdeSz2NIYOsCtfc&{LPk6WP*aViJ59EKbT)6)$zYCbZ0LZVGc3QpnlmnQ* z5XgUeVAX0}2QM&x5s?31ZC3ox(l{`GF_8aU^h6Br+Eg%q36S4YQzufZk`K0TDUhFR zAQ$9$qX;a&49NEg^q&xGSOu0}4&+Z3_1$o`gBdKp0?0q>+>~_jAs3jx5~TkJms@Cn zG?>2%$anhx?U|yBKA686$oDIpaDC!!12BILkYDjsTyLp~1(?4U$dA5huP)kk@DC{b g*8%yP`8@x%GM)zWb43^!@~S2`EM2|)FHnjB0Ig}A2mk;8 literal 496 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXDy0K1U5(@(uOa{`ikyoCFlnMV~1d2=n^6z|@ zdiPMfGMGOV$d~7x8+l=!3Yb3)$k&&SJN~Rt2h5)i{w!_RyRQFCK>hQ8{JAqvczbM|43?h{O^{2-N5!O1@e;( z@++Q->jll02J_bf`O!D+)e{!Ufcfiy d{LOrx|H@od!2Dbh28O(<$qf}v|NaA|7y!UDo=^Y) diff --git a/code/game/AI_BobaFett.cpp b/code/game/AI_BobaFett.cpp index b462a5e..443a0a2 100644 --- a/code/game/AI_BobaFett.cpp +++ b/code/game/AI_BobaFett.cpp @@ -345,7 +345,7 @@ qboolean Boba_StopKnockdown( gentity_t *self, gentity_t *pusher, const vec3_t pu //////////////////////////////////////////////////////////////////////////////////////// qboolean Boba_Flying( gentity_t *self ) { - assert(self && self->NPC && self->client && self->client->NPC_class==CLASS_BOBAFETT); + assert(self && self->client && self->client->NPC_class==CLASS_BOBAFETT);//self->NPC && return ((qboolean)(self->client->moveType==MT_FLYSWIM)); } @@ -482,6 +482,12 @@ void Boba_FireFlameThrower( gentity_t *self ) //////////////////////////////////////////////////////////////////////////////////////// void Boba_StopFlameThrower( gentity_t *self ) { + if ( self->s.number < MAX_CLIENTS ) + { + self->client->ps.torsoAnimTimer = 0; + G_StopEffect( G_EffectIndex("boba/fthrw"), self->playerModel, self->genericBolt3, self->s.number); + return; + } if ((NPCInfo->aiFlags&NPCAI_FLAMETHROW)) { self->NPC->aiFlags &= ~NPCAI_FLAMETHROW; @@ -527,6 +533,22 @@ void Boba_StartFlameThrower( gentity_t *self ) //////////////////////////////////////////////////////////////////////////////////////// void Boba_DoFlameThrower( gentity_t *self ) { + if ( self->s.number < MAX_CLIENTS ) + { + if ( self->client ) + { + if ( !self->client->ps.forcePowerDuration[FP_LIGHTNING] ) + { + NPC_SetAnim( self, SETANIM_TORSO, BOTH_FORCELIGHTNING_HOLD, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + self->client->ps.torsoAnimTimer = BOBA_FLAMEDURATION; + G_SoundOnEnt( self, CHAN_WEAPON, "sound/weapons/boba/bf_flame.mp3" ); + G_PlayEffect( G_EffectIndex("boba/fthrw"), self->playerModel, self->genericBolt3, self->s.number, self->s.origin, 1 ); + self->client->ps.forcePowerDuration[FP_LIGHTNING] = 1; + } + Boba_FireFlameThrower( self ); + } + return; + } if (!(NPCInfo->aiFlags&NPCAI_FLAMETHROW) && TIMER_Done(self, "nextAttackDelay")) { Boba_StartFlameThrower( self ); diff --git a/code/game/AI_Jedi.cpp b/code/game/AI_Jedi.cpp index ec59a0b..b7eccd2 100644 --- a/code/game/AI_Jedi.cpp +++ b/code/game/AI_Jedi.cpp @@ -1258,6 +1258,18 @@ static qboolean Jedi_DecideKick( void ) {//just did one return qfalse; } + if ( NPC->client->ps.weapon == WP_SABER ) + { + if ( (NPC->client->ps.saber[0].saberFlags&SFL_NO_KICKS) ) + { + return qfalse; + } + else if ( NPC->client->ps.dualSabers + && (NPC->client->ps.saber[1].saberFlags&SFL_NO_KICKS) ) + { + return qfalse; + } + } //go for it! return qtrue; } @@ -2373,6 +2385,20 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi int parts = SETANIM_BOTH, anim; float speed, checkDist; + qboolean allowCartWheels = qtrue; + + if ( self->client->ps.weapon == WP_SABER ) + { + if ( (self->client->ps.saber[0].saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartWheels = qfalse; + } + else if ( self->client->ps.dualSabers + && (self->client->ps.saber[1].saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartWheels = qfalse; + } + } if ( PM_SaberInAttack( self->client->ps.saberMove ) || PM_SaberInStart( self->client->ps.saberMove ) ) @@ -2408,7 +2434,7 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi //trace in the dir that we want to go VectorMA( self->currentOrigin, checkDist, right, traceto ); gi.trace( &trace, self->currentOrigin, mins, maxs, traceto, self->s.number, CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BOTCLIP ); - if ( trace.fraction >= 1.0f ) + if ( trace.fraction >= 1.0f && allowCartWheels ) {//it's clear, let's do it //FIXME: check for drops? NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); @@ -2459,40 +2485,56 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi gi.trace( &trace, self->currentOrigin, mins, maxs, traceto, self->s.number, CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BOTCLIP ); if ( trace.fraction >= 1.0f ) {//it's clear, let's do it - //FIXME: check for drops? - //turn the cartwheel into a wallflip in the other dir - if ( rightdot > 0 ) + qboolean allowWallFlips = qtrue; + if ( self->client->ps.weapon == WP_SABER ) { - anim = BOTH_WALL_FLIP_LEFT; - self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; - VectorMA( self->client->ps.velocity, 150, right, self->client->ps.velocity ); + if ( (self->client->ps.saber[0].saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } + else if ( self->client->ps.dualSabers + && (self->client->ps.saber[1].saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } } - else - { - anim = BOTH_WALL_FLIP_RIGHT; - self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; - VectorMA( self->client->ps.velocity, -150, right, self->client->ps.velocity ); + if ( allowWallFlips ) + {//okay to do wall-flips with this saber + //FIXME: check for drops? + //turn the cartwheel into a wallflip in the other dir + if ( rightdot > 0 ) + { + anim = BOTH_WALL_FLIP_LEFT; + self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; + VectorMA( self->client->ps.velocity, 150, right, self->client->ps.velocity ); + } + else + { + anim = BOTH_WALL_FLIP_RIGHT; + self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; + VectorMA( self->client->ps.velocity, -150, right, self->client->ps.velocity ); + } + self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + //animate me + int parts = SETANIM_LEGS; + if ( !self->client->ps.weaponTime ) + { + parts = SETANIM_BOTH; + } + NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + self->client->ps.forceJumpZStart = self->currentOrigin[2];//so we don't take damage if we land at same height + self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); + if ( self->client->NPC_class == CLASS_BOBAFETT + || (self->client->NPC_class == CLASS_REBORN && self->s.weapon != WP_SABER)) + { + G_AddEvent( self, EV_JUMP, 0 ); + } + else + { + G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); + } + return EVASION_OTHER; } - self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - //animate me - int parts = SETANIM_LEGS; - if ( !self->client->ps.weaponTime ) - { - parts = SETANIM_BOTH; - } - NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); - self->client->ps.forceJumpZStart = self->currentOrigin[2];//so we don't take damage if we land at same height - self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); - if ( self->client->NPC_class == CLASS_BOBAFETT - || (self->client->NPC_class == CLASS_REBORN && self->s.weapon != WP_SABER)) - { - G_AddEvent( self, EV_JUMP, 0 ); - } - else - { - G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); - } - return EVASION_OTHER; } else {//boxed in on both sides @@ -2525,35 +2567,51 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi //Try wall run? if ( bestCheckDist ) {//one of the walls was close enough to wall-run on - //FIXME: check for long enough wall and a drop at the end? - if ( bestCheckDist > 0 ) - {//it was to the right - anim = BOTH_WALL_RUN_RIGHT; - } - else - {//it was to the left - anim = BOTH_WALL_RUN_LEFT; - } - self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - //animate me - int parts = SETANIM_LEGS; - if ( !self->client->ps.weaponTime ) + qboolean allowWallRuns = qtrue; + if ( self->client->ps.weapon == WP_SABER ) { - parts = SETANIM_BOTH; + if ( (self->client->ps.saber[0].saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } + else if ( self->client->ps.dualSabers + && (self->client->ps.saber[1].saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } } - NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); - self->client->ps.forceJumpZStart = self->currentOrigin[2];//so we don't take damage if we land at same height - self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); - if ( self->client->NPC_class == CLASS_BOBAFETT - || (self->client->NPC_class == CLASS_REBORN && self->s.weapon != WP_SABER)) - { - G_AddEvent( self, EV_JUMP, 0 ); + if ( allowWallRuns ) + {//okay to do wallruns with this saber + //FIXME: check for long enough wall and a drop at the end? + if ( bestCheckDist > 0 ) + {//it was to the right + anim = BOTH_WALL_RUN_RIGHT; + } + else + {//it was to the left + anim = BOTH_WALL_RUN_LEFT; + } + self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + //animate me + int parts = SETANIM_LEGS; + if ( !self->client->ps.weaponTime ) + { + parts = SETANIM_BOTH; + } + NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + self->client->ps.forceJumpZStart = self->currentOrigin[2];//so we don't take damage if we land at same height + self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); + if ( self->client->NPC_class == CLASS_BOBAFETT + || (self->client->NPC_class == CLASS_REBORN && self->s.weapon != WP_SABER)) + { + G_AddEvent( self, EV_JUMP, 0 ); + } + else + { + G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); + } + return EVASION_OTHER; } - else - { - G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); - } - return EVASION_OTHER; } //else check for wall in front, do backflip off wall } diff --git a/code/game/AI_Rancor.cpp b/code/game/AI_Rancor.cpp index fea3c4f..075ee2e 100644 --- a/code/game/AI_Rancor.cpp +++ b/code/game/AI_Rancor.cpp @@ -715,9 +715,9 @@ void Rancor_Bite( void ) if ( !Q_irand( 0, 1 ) ) {//bite something off int hitLoc = HL_WAIST; - if ( g_dismemberment->integer != 113811381138 ) + if ( g_dismemberment->integer < 3 ) { - hitLoc = Q_irand( HL_WAIST, HL_HAND_LT ); + hitLoc = Q_irand( HL_BACK_RT, HL_HAND_LT ); } else { @@ -961,7 +961,7 @@ void Rancor_Attack( float distance, qboolean doCharge, qboolean aimAtBlockedEnti } if ( NPC->activator->health <= 0 ) {//killed him - if ( g_dismemberment->integer == 113811381138 ) + if ( g_dismemberment->integer >= 3 ) {//make it look like we bit his head off NPC->activator->client->dismembered = false; G_DoDismemberment( NPC->activator, NPC->activator->currentOrigin, MOD_SABER, 1000, HL_HEAD, qtrue ); diff --git a/code/game/AI_Wampa.cpp b/code/game/AI_Wampa.cpp index 1c2b1a1..eab70de 100644 --- a/code/game/AI_Wampa.cpp +++ b/code/game/AI_Wampa.cpp @@ -224,9 +224,9 @@ void Wampa_Slash( int boltIndex, qboolean backhand ) if ( !Q_irand( 0, 1 ) ) {//bite something off int hitLoc = HL_WAIST; - if ( g_dismemberment->integer != 113811381138 ) + if ( g_dismemberment->integer < 4 ) { - hitLoc = Q_irand( HL_WAIST, HL_HAND_LT ); + hitLoc = Q_irand( HL_BACK_RT, HL_HAND_LT ); } else { @@ -763,9 +763,9 @@ void NPC_BSWampa_Default( void ) if ( NPC->activator->health <= 0 ) {//killed them, chance of dismembering int hitLoc = HL_WAIST; - if ( g_dismemberment->integer != 113811381138 ) + if ( g_dismemberment->integer < 4 ) { - hitLoc = Q_irand( HL_WAIST, HL_HAND_LT ); + hitLoc = Q_irand( HL_BACK_RT, HL_HAND_LT ); } else { diff --git a/code/game/NPC.cpp b/code/game/NPC.cpp index a51a1f2..29be6be 100644 --- a/code/game/NPC.cpp +++ b/code/game/NPC.cpp @@ -44,6 +44,7 @@ extern qboolean PM_LockedAnim( int anim ); extern cvar_t *g_dismemberment; extern cvar_t *g_saberRealisticCombat; extern cvar_t *g_corpseRemovalTime; +extern cvar_t *debug_subdivision; //Local Variables // ai debug cvars @@ -93,7 +94,7 @@ void CorpsePhysics( gentity_t *self ) if ( level.time - self->s.time > 3000 ) {//been dead for 3 seconds - if ( g_dismemberment->integer != 113811381138 && !g_saberRealisticCombat->integer ) + if ( !debug_subdivision->integer && !g_saberRealisticCombat->integer ) {//can't be dismembered once dead if ( self->client->NPC_class != CLASS_PROTOCOL ) { @@ -463,7 +464,7 @@ and returns. ==================================================================== */ -void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope, vec3_t storeAngles ) +void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope, vec3_t storeAngles, qboolean keepPitch ) { vec3_t slope; vec3_t nvf, ovf, ovr, startspot, endspot, new_angles = { 0, 0, 0 }; @@ -498,6 +499,7 @@ void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope, vec3_t storeAn VectorCopy( pass_slope, slope ); } + float oldPitch = 0; if ( forwhom->client && forwhom->client->NPC_class == CLASS_VEHICLE ) {//special code for vehicles Vehicle_t *pVeh = forwhom->m_pVehicle; @@ -509,11 +511,16 @@ void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope, vec3_t storeAn } else { + oldPitch = forwhom->currentAngles[PITCH]; AngleVectors( forwhom->currentAngles, ovf, ovr, NULL ); } vectoangles( slope, new_angles ); pitch = new_angles[PITCH] + 90; + if ( keepPitch ) + { + pitch += oldPitch; + } new_angles[ROLL] = new_angles[PITCH] = 0; AngleVectors( new_angles, nvf, NULL, NULL ); diff --git a/code/game/NPC_stats.cpp b/code/game/NPC_stats.cpp index 47e8c2e..9abbe27 100644 --- a/code/game/NPC_stats.cpp +++ b/code/game/NPC_stats.cpp @@ -36,6 +36,8 @@ stringID_table_t animEventTypeTable[] = ENUM2STRING(AEV_FIRE), //# animID AEV_FIRE framenum altfire chancetofire ENUM2STRING(AEV_MOVE), //# animID AEV_MOVE framenum forwardpush rightpush uppush ENUM2STRING(AEV_SOUNDCHAN), //# animID AEV_SOUNDCHAN framenum CHANNEL soundpath randomlow randomhi chancetoplay + ENUM2STRING(AEV_SABER_SWING), //# animID AEV_SABER_SWING framenum CHANNEL randomlow randomhi chancetoplay + ENUM2STRING(AEV_SABER_SPIN), //# animID AEV_SABER_SPIN framenum CHANNEL chancetoplay //must be terminated NULL,-1 }; @@ -600,6 +602,56 @@ static void ParseAnimationEvtBlock(int glaIndex, unsigned short modelIndex, cons break; } animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY] = atoi( token ); + + //last part - cheat and check and see if it's a special overridable saber sound we know of... + if ( !Q_stricmpn( "sound/weapons/saber/saberhup", stringData, 28 ) ) + {//a saber swing + animEvents[curAnimEvent].eventType = AEV_SABER_SWING; + animEvents[curAnimEvent].eventData[AED_SABER_SWING_SABERNUM] = 0;//since we don't know which one they meant if we're hacking this, always use first saber + animEvents[curAnimEvent].eventData[AED_SABER_SWING_PROBABILITY] = animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY]; + if ( lowestVal < 4 ) + {//fast swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = SWING_FAST; + } + else if ( lowestVal < 7 ) + {//medium swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = SWING_MEDIUM; + } + else + {//strong swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = SWING_STRONG; + } + } + else if ( !Q_stricmpn( "sound/weapons/saber/saberspin", stringData, 29 ) ) + {//a saber spin + animEvents[curAnimEvent].eventType = AEV_SABER_SPIN; + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_SABERNUM] = 0;//since we don't know which one they meant if we're hacking this, always use first saber + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_PROBABILITY] = animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY]; + if ( stringData[29] == 'o' ) + {//saberspinoff + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 0; + } + else if ( stringData[29] == '1' ) + {//saberspin1 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 2; + } + else if ( stringData[29] == '2' ) + {//saberspin2 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 3; + } + else if ( stringData[29] == '3' ) + {//saberspin3 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 4; + } + else if ( stringData[29] == '%' ) + {//saberspin%d + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 5; + } + else + {//just plain saberspin + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 1; + } + } break; case AEV_FOOTSTEP: //# animID AEV_FOOTSTEP framenum footstepType //get footstep type @@ -1509,7 +1561,7 @@ void NPC_Precache ( char *NPCName ) Precaches NPC skins, tgas and md3s. */ -void NPC_Precache ( gentity_t *spawner ) +void CG_NPC_Precache ( gentity_t *spawner ) { clientInfo_t ci={0}; renderInfo_t ri={0}; @@ -1771,6 +1823,22 @@ void NPC_Precache ( gentity_t *spawner ) gi.RE_RegisterSkin( saber.skin ); G_SkinIndex( saber.skin ); } + if ( saber.g2MarksShader[0] ) + { + cgi_R_RegisterShader( saber.g2MarksShader ); + } + if ( saber.g2MarksShader2[0] ) + { + cgi_R_RegisterShader( saber.g2MarksShader2 ); + } + if ( saber.g2WeaponMarkShader[0] ) + { + cgi_R_RegisterShader( saber.g2WeaponMarkShader ); + } + if ( saber.g2WeaponMarkShader2[0] ) + { + cgi_R_RegisterShader( saber.g2WeaponMarkShader2 ); + } continue; } @@ -3530,9 +3598,13 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) char *saberName = G_NewString( value ); WP_SaberParseParms( saberName, &NPC->client->ps.saber[0] ); //if it requires a specific style, make sure we know how to use it - if ( NPC->client->ps.saber[0].style ) + if ( NPC->client->ps.saber[0].stylesLearned ) { - NPC->client->ps.saberStylesKnown |= (1<client->ps.saber[0].style); + NPC->client->ps.saberStylesKnown |= NPC->client->ps.saber[0].stylesLearned; + } + if ( NPC->client->ps.saber[0].singleBladeStyle ) + { + NPC->client->ps.saberStylesKnown |= NPC->client->ps.saber[0].singleBladeStyle; } continue; } @@ -3545,15 +3617,19 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) continue; } - if ( !NPC->client->ps.saber[0].twoHanded ) + if ( !(NPC->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) {//can't use a second saber if first one is a two-handed saber...? char *saberName = G_NewString( value ); WP_SaberParseParms( saberName, &NPC->client->ps.saber[1] ); - if ( NPC->client->ps.saber[1].style ) + if ( NPC->client->ps.saber[1].stylesLearned ) { - NPC->client->ps.saberStylesKnown |= (1<client->ps.saber[1].style); + NPC->client->ps.saberStylesKnown |= NPC->client->ps.saber[1].stylesLearned; } - if ( NPC->client->ps.saber[1].twoHanded ) + if ( NPC->client->ps.saber[1].singleBladeStyle ) + { + NPC->client->ps.saberStylesKnown |= NPC->client->ps.saber[1].singleBladeStyle; + } + if ( (NPC->client->ps.saber[1].saberFlags&SFL_TWO_HANDED) ) {//tsk tsk, can't use a twoHanded saber as second saber WP_RemoveSaber( NPC, 1 ); } diff --git a/code/game/Q3_Interface.cpp b/code/game/Q3_Interface.cpp index a153a03..fd4d000 100644 --- a/code/game/Q3_Interface.cpp +++ b/code/game/Q3_Interface.cpp @@ -803,7 +803,7 @@ static void Q3_SetMissionFailed(const char *TextEnum) { gentity_t *ent = &g_entities[0]; - if ( ent->health >= 0 ) + if ( ent->health > 0 ) { G_PlayerGuiltDeath(); } diff --git a/code/game/b_local.h b/code/game/b_local.h index 4adec3b..ef7f4d8 100644 --- a/code/game/b_local.h +++ b/code/game/b_local.h @@ -41,7 +41,7 @@ extern cvar_t *debugNPCName; extern cvar_t *d_JediAI; extern cvar_t *d_saberCombat; extern void NPC_Think ( gentity_t *self); -extern void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope = NULL, vec3_t storeAngles = NULL ); +extern void pitch_roll_for_slope( gentity_t *forwhom, vec3_t pass_slope = NULL, vec3_t storeAngles = NULL, qboolean keepPitch = qfalse ); //NPC_reactions.cpp extern void NPC_Pain( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, vec3_t point, int damage, int mod ,int hitLoc); diff --git a/code/game/bg_misc.cpp b/code/game/bg_misc.cpp index 6f52773..03380ba 100644 --- a/code/game/bg_misc.cpp +++ b/code/game/bg_misc.cpp @@ -16,11 +16,13 @@ extern ammoData_t ammoData[AMMO_MAX]; #define PICKUPSOUND "sound/weapons/w_pkup.wav" -/*QUAKED weapon_***** ( 0 0 0 ) (-16 -16 -16) (16 16 16) suspended +/*QUAKED weapon_***** ( 0 0 0 ) (-16 -16 -16) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY DO NOT USE THIS CLASS, IT JUST HOLDS GENERAL INFORMATION for weapons, ammo, and item pickups. The suspended flag will allow items to hang in the air, otherwise they are dropped to the next surface. The NOPLAYER flag makes it so player cannot pick it up. The ALLOWNPC flag allows only NPCs to pick it up, too +USEPICKUP - Player must be holding "use" to pick it up +STATIONARY - Cannot be moved around by force push/pull, radius damage, knockback, etc... If an item is the target of another entity, it will spawn as normal, use INVISIBLE to hide it. @@ -35,58 +37,69 @@ An item fires all of its targets when it is picked up. If the toucher can't car "enemy" */ -/*QUAKED weapon_stun_baton (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_stun_baton (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY NOGLOW USEPICKUP STATIONARY model="/models/weapons2/stun_baton/baton.md3" */ -/*QUAKED weapon_saber (.3 .3 1) (-16 -16 -8) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW +/*QUAKED weapon_saber (.3 .3 1) (-16 -16 -8) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID LEANING INVISIBLE NOGLOW USEPICKUP STATIONARY +SUSPENDED - allow items to hang in the air, otherwise they are dropped to the next surface. +NOPLAYER - makes it so player cannot pick it up. +ALLOWNPC - allows only NPCs to pick it up, too +LEANING - lean back against wall +NOGLOW - No Glow +USEPICKUP - Player must be holding "use" to pick it up +STATIONARY - Cannot be moved around by force push/pull, radius damage, knockback, etc... + model="/models/weapons2/saber/saber_w.md3" When picked up, will be used as a second saber unless: 1) It's a two-handed saber 2) The old saber was two-handed - OR 3) You set "saberSolo" to "1" + 4) You have 2 sabers and the saber pickup is on your right when you touch it saberType - entry name from sabers.cfg - which kind of saber this is - use "player" to make it so that the saber will be whatever saber the player is configured to use saberColor - red, orange, yellow, green, blue, and purple +saberLeftHand - always be added as a left-hand saber saberSolo - set to "1" and this will be the only saber the person who picks this up will be holding +saberPitch - if set "LEANING" flag, you can specify the exact pitch to lean forward/back +count - how many you can pick up before it's removed (default is 1, -1 is infinite) */ -/*QUAKED weapon_bryar_pistol (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_bryar_pistol (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/briar_pistol/briar_pistol.md3" */ -/*QUAKED weapon_blaster_pistol (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_blaster_pistol (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/blaster_pistol/blaster_pistol.md3" */ -/*QUAKED weapon_blaster (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_blaster (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/blaster_r/blaster.md3" */ -/*QUAKED weapon_disruptor (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_disruptor (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/disruptor/disruptor.md3" */ -/*QUAKED weapon_bowcaster (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_bowcaster (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/bowcaster/bowcaster.md3" */ -/*QUAKED weapon_repeater (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_repeater (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/heavy_repeater/heavy_repeater.md3" */ -/*QUAKED weapon_demp2 (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_demp2 (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/demp2/demp2.md3" */ -/*QUAKED weapon_flechette (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_flechette (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/golan_arms/golan_arms.md3" */ -/*QUAKED weapon_concussion_rifle (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_concussion_rifle (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/c_rifle/c_rifle.md3" */ -/*QUAKED weapon_rocket_launcher (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_rocket_launcher (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/merr_sonn/merr_sonn.md3" */ -/*QUAKED weapon_thermal (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_thermal (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/thermal/thermal.md3" */ -/*QUAKED weapon_trip_mine (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_trip_mine (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/laser_trap/laser_trap.md3" */ -/*QUAKED weapon_det_pack (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED weapon_det_pack (.3 .3 1) (-16 -16 -2) (16 16 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY model="/models/weapons2/detpack/det_pack.md3" */ @@ -131,13 +144,13 @@ Belt of thermal detonators 3 pack of detpacks */ -/*QUAKED item_medpak_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED item_medpak_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY */ -/*QUAKED item_shield_sm_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED item_shield_sm_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY */ -/*QUAKED item_shield_lrg_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE +/*QUAKED item_shield_lrg_instant (.3 .3 1) (-8 -8 -4) (8 8 16) SUSPEND NOPLAYER ALLOWNPC NOTSOLID VERTICAL INVISIBLE NOGLOW USEPICKUP STATIONARY */ /*QUAKED item_goodie_key (.3 .3 1) (-8 -8 0) (8 8 16) suspended */ diff --git a/code/game/bg_panimate.cpp b/code/game/bg_panimate.cpp index 266101a..0f9dd88 100644 --- a/code/game/bg_panimate.cpp +++ b/code/game/bg_panimate.cpp @@ -1251,6 +1251,14 @@ qboolean PM_SaberInSpecialAttack( int anim ) return qfalse; } +qboolean PM_SaberInAttackPure( int move ) +{ + if ( move >= LS_A_TL2BR && move <= LS_A_T2B ) + { + return qtrue; + } + return qfalse; +} qboolean PM_SaberInAttack( int move ) { if ( move >= LS_A_TL2BR && move <= LS_A_T2B ) @@ -1493,6 +1501,160 @@ qboolean PM_KickMove( int move ) return qfalse; } +qboolean PM_SaberCanInterruptMove( int move, int anim ) +{ + if ( PM_InAnimForSaberMove( anim, move ) ) + { + switch( move ) + { + case LS_A_BACK: + case LS_A_BACK_CR: + case LS_A_BACKSTAB: + case LS_ROLL_STAB: + case LS_A_LUNGE: + case LS_A_JUMP_T__B_: + case LS_A_FLIP_STAB: + case LS_A_FLIP_SLASH: + case LS_JUMPATTACK_DUAL: + case LS_JUMPATTACK_CART_LEFT: + case LS_JUMPATTACK_CART_RIGHT: + case LS_JUMPATTACK_STAFF_LEFT: + case LS_JUMPATTACK_STAFF_RIGHT: + case LS_BUTTERFLY_LEFT: + case LS_BUTTERFLY_RIGHT: + case LS_A_BACKFLIP_ATK: + case LS_SPINATTACK_DUAL: + case LS_SPINATTACK: + case LS_LEAP_ATTACK: + case LS_SWOOP_ATTACK_RIGHT: + case LS_SWOOP_ATTACK_LEFT: + case LS_TAUNTAUN_ATTACK_RIGHT: + case LS_TAUNTAUN_ATTACK_LEFT: + case LS_KICK_S: + case LS_KICK_BF: + case LS_KICK_RL: + case LS_STABDOWN: + case LS_STABDOWN_STAFF: + case LS_STABDOWN_DUAL: + case LS_DUAL_SPIN_PROTECT: + case LS_STAFF_SOULCAL: + case LS_A1_SPECIAL: + case LS_A2_SPECIAL: + case LS_A3_SPECIAL: + case LS_UPSIDE_DOWN_ATTACK: + case LS_PULL_ATTACK_STAB: + case LS_PULL_ATTACK_SWING: + case LS_SPINATTACK_ALORA: + case LS_DUAL_FB: + case LS_DUAL_LR: + case LS_HILT_BASH: + return qfalse; + } + + if ( PM_SaberInAttackPure( move ) ) + { + return qfalse; + } + if ( PM_SaberInStart( move ) ) + { + return qfalse; + } + if ( PM_SaberInTransition( move ) ) + { + return qfalse; + } + if ( PM_SaberInBounce( move ) ) + { + return qfalse; + } + if ( PM_SaberInBrokenParry( move ) ) + { + return qfalse; + } + if ( PM_SaberInDeflect( move ) ) + { + return qfalse; + } + if ( PM_SaberInParry( move ) ) + { + return qfalse; + } + if ( PM_SaberInKnockaway( move ) ) + { + return qfalse; + } + if ( PM_SaberInReflect( move ) ) + { + return qfalse; + } + } + switch ( anim ) + { + case BOTH_A2_STABBACK1: + case BOTH_ATTACK_BACK: + case BOTH_CROUCHATTACKBACK1: + case BOTH_ROLL_STAB: + case BOTH_BUTTERFLY_LEFT: + case BOTH_BUTTERFLY_RIGHT: + case BOTH_BUTTERFLY_FL1: + case BOTH_BUTTERFLY_FR1: + case BOTH_FJSS_TR_BL: + case BOTH_FJSS_TL_BR: + case BOTH_LUNGE2_B__T_: + case BOTH_FORCELEAP2_T__B_: + case BOTH_JUMPFLIPSLASHDOWN1://# + case BOTH_JUMPFLIPSTABDOWN://# + case BOTH_JUMPATTACK6: + case BOTH_JUMPATTACK7: + case BOTH_SPINATTACK6: + case BOTH_SPINATTACK7: + case BOTH_FORCELONGLEAP_ATTACK: + case BOTH_VS_ATR_S: + case BOTH_VS_ATL_S: + case BOTH_VT_ATR_S: + case BOTH_VT_ATL_S: + case BOTH_A7_KICK_S: + case BOTH_A7_KICK_BF: + case BOTH_A7_KICK_RL: + case BOTH_STABDOWN: + case BOTH_STABDOWN_STAFF: + case BOTH_STABDOWN_DUAL: + case BOTH_A6_SABERPROTECT: + case BOTH_A7_SOULCAL: + case BOTH_A1_SPECIAL: + case BOTH_A2_SPECIAL: + case BOTH_A3_SPECIAL: + case BOTH_FLIP_ATTACK7: + case BOTH_PULL_IMPALE_STAB: + case BOTH_PULL_IMPALE_SWING: + case BOTH_ALORA_SPIN_SLASH: + case BOTH_A6_FB: + case BOTH_A6_LR: + case BOTH_A7_HILT: + case BOTH_LK_S_DL_S_SB_1_W: + case BOTH_LK_S_DL_T_SB_1_W: + case BOTH_LK_S_ST_S_SB_1_W: + case BOTH_LK_S_ST_T_SB_1_W: + case BOTH_LK_S_S_S_SB_1_W: + case BOTH_LK_S_S_T_SB_1_W: + case BOTH_LK_DL_DL_S_SB_1_W: + case BOTH_LK_DL_DL_T_SB_1_W: + case BOTH_LK_DL_ST_S_SB_1_W: + case BOTH_LK_DL_ST_T_SB_1_W: + case BOTH_LK_DL_S_S_SB_1_W: + case BOTH_LK_DL_S_T_SB_1_W: + case BOTH_LK_ST_DL_S_SB_1_W: + case BOTH_LK_ST_DL_T_SB_1_W: + case BOTH_LK_ST_ST_S_SB_1_W: + case BOTH_LK_ST_ST_T_SB_1_W: + case BOTH_LK_ST_S_S_SB_1_W: + case BOTH_LK_ST_S_T_SB_1_W: + case BOTH_HANG_ATTACK: + return qfalse; + } + return qtrue; +} + saberMoveName_t PM_BrokenParryForAttack( int move ) { //Our attack was knocked away by a knockaway parry @@ -1961,6 +2123,15 @@ saberMoveName_t PM_CheckStabDown( void ) { return LS_NONE; } + if ( (pm->ps->saber[0].saberFlags&SFL_NO_STABDOWN) ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers + && (pm->ps->saber[1].saberFlags&SFL_NO_STABDOWN) ) + { + return LS_NONE; + } if ( pm->ps->clientNum < MAX_CLIENTS || PM_ControlledByPlayer() ) //PLAYER ONLY {//player if ( G_TryingKataAttack( pm->gent, &pm->cmd ) )//(pm->cmd.buttons&BUTTON_FORCE_FOCUS) )//Holding focus @@ -2118,17 +2289,21 @@ saberMoveName_t PM_AttackForEnemyPos( qboolean allowFB, qboolean allowStabDown ) } if ( allowFB ) {//directly in front anim allowed - if ( enemyDist > 200 || pm->gent->enemy->health <= 0 ) - {//hmm, look in back for an enemy - if ( pm->ps->clientNum && !PM_ControlledByPlayer() ) - {//player should never do this automatically - if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) - {//only when on ground - if ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) - {//only fencers and higher can do this, higher rank does it more - if ( PM_CheckEnemyInBack( 100 ) ) - { - return PM_PickBackStab(); + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_BACK_ATTACK) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_BACK_ATTACK)) ) + {//okay to do backstabs with this saber + if ( enemyDist > 200 || pm->gent->enemy->health <= 0 ) + {//hmm, look in back for an enemy + if ( pm->ps->clientNum && !PM_ControlledByPlayer() ) + {//player should never do this automatically + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) + {//only when on ground + if ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) + {//only fencers and higher can do this, higher rank does it more + if ( PM_CheckEnemyInBack( 100 ) ) + { + return PM_PickBackStab(); + } } } } @@ -2195,34 +2370,38 @@ saberMoveName_t PM_AttackForEnemyPos( qboolean allowFB, qboolean allowStabDown ) else if ( allowFB ) {//back attack allowed //if ( !PM_InKnockDown( pm->ps ) ) - if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) - {//only when on ground - if ( !pm->gent->enemy->client || pm->gent->enemy->client->ps.groundEntityNum != ENTITYNUM_NONE ) - {//enemy not a client or is a client and on ground - if ( dot < -0.75f - && enemyDist < 128 - && (pm->ps->saberAnimLevel == SS_FAST || pm->ps->saberAnimLevel == SS_STAFF || (pm->gent->client &&(pm->gent->client->NPC_class == CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA)&&Q_irand(0,2))) ) - {//fast back-stab - if ( !(pm->ps->pm_flags&PMF_DUCKED) && pm->cmd.upmove >= 0 ) - {//can't do it while ducked? - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || (pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG) ) - {//only fencers and above can do this - autoMove = LS_A_BACKSTAB; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_BACK_ATTACK) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_BACK_ATTACK)) ) + {//okay to do backstabs with this saber + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) + {//only when on ground + if ( !pm->gent->enemy->client || pm->gent->enemy->client->ps.groundEntityNum != ENTITYNUM_NONE ) + {//enemy not a client or is a client and on ground + if ( dot < -0.75f + && enemyDist < 128 + && (pm->ps->saberAnimLevel == SS_FAST || pm->ps->saberAnimLevel == SS_STAFF || (pm->gent->client &&(pm->gent->client->NPC_class == CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA)&&Q_irand(0,2))) ) + {//fast back-stab + if ( !(pm->ps->pm_flags&PMF_DUCKED) && pm->cmd.upmove >= 0 ) + {//can't do it while ducked? + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || (pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG) ) + {//only fencers and above can do this + autoMove = LS_A_BACKSTAB; + } } } - } - else if ( pm->ps->saberAnimLevel != SS_FAST - && pm->ps->saberAnimLevel != SS_STAFF ) - {//higher level back spin-attacks - if ( (pm->ps->clientNum&&!PM_ControlledByPlayer()) || ((pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) && cg.renderingThirdPerson && !cg.zoomMode) ) - { - if ( (pm->ps->pm_flags&PMF_DUCKED) || pm->cmd.upmove < 0 ) + else if ( pm->ps->saberAnimLevel != SS_FAST + && pm->ps->saberAnimLevel != SS_STAFF ) + {//higher level back spin-attacks + if ( (pm->ps->clientNum&&!PM_ControlledByPlayer()) || ((pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) && cg.renderingThirdPerson && !cg.zoomMode) ) { - autoMove = LS_A_BACK_CR; - } - else - { - autoMove = LS_A_BACK; + if ( (pm->ps->pm_flags&PMF_DUCKED) || pm->cmd.upmove < 0 ) + { + autoMove = LS_A_BACK_CR; + } + else + { + autoMove = LS_A_BACK; + } } } } @@ -2236,7 +2415,7 @@ qboolean PM_InSecondaryStyle( void ) { if ( pm->ps->saber[0].numBlades > 1 && pm->ps->saber[0].singleBladeStyle - && pm->ps->saber[0].singleBladeStyle != pm->ps->saber[0].style + && (pm->ps->saber[0].stylesForbidden&(1<ps->saber[0].singleBladeStyle)) && pm->ps->saberAnimLevel == pm->ps->saber[0].singleBladeStyle ) { return qtrue; @@ -2253,6 +2432,38 @@ qboolean PM_InSecondaryStyle( void ) saberMoveName_t PM_SaberLungeAttackMove( qboolean fallbackToNormalLunge ) { G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER_FB ); + + //see if we have an overridden (or cancelled) lunge move + if ( pm->ps->saber[0].lungeAtkMove != LS_INVALID ) + { + if ( pm->ps->saber[0].lungeAtkMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].lungeAtkMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].lungeAtkMove != LS_INVALID ) + { + if ( pm->ps->saber[1].lungeAtkMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].lungeAtkMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].lungeAtkMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].lungeAtkMove == LS_NONE ) + { + return LS_NONE; + } + } + //do normal checks if ( pm->gent->client->NPC_class == CLASS_ALORA && !Q_irand( 0, 3 ) ) {//alora NPC return LS_SPINATTACK_ALORA; @@ -2294,6 +2505,34 @@ saberMoveName_t PM_SaberLungeAttackMove( qboolean fallbackToNormalLunge ) qboolean PM_CheckLungeAttackMove( void ) { + //check to see if it's cancelled? + if ( pm->ps->saber[0].lungeAtkMove == LS_NONE ) + { + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].lungeAtkMove == LS_NONE + || pm->ps->saber[1].lungeAtkMove == LS_INVALID ) + { + return qfalse; + } + } + else + { + return qfalse; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].lungeAtkMove == LS_NONE ) + { + if ( pm->ps->saber[0].lungeAtkMove == LS_NONE + || pm->ps->saber[0].lungeAtkMove == LS_INVALID ) + { + return qfalse; + } + } + } + //do normal checks if ( pm->ps->saberAnimLevel == SS_FAST//fast || pm->ps->saberAnimLevel == SS_DUAL//dual || pm->ps->saberAnimLevel == SS_STAFF //staff @@ -2349,6 +2588,36 @@ saberMoveName_t PM_SaberJumpForwardAttackMove( void ) { G_DrainPowerForSpecialMove( pm->gent, FP_LEVITATION, SABER_ALT_ATTACK_POWER_FB ); + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].jumpAtkFwdMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].jumpAtkFwdMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove != LS_INVALID ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].jumpAtkFwdMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE ) + { + return LS_NONE; + } + } if ( pm->ps->saberAnimLevel == SS_DUAL || pm->ps->saberAnimLevel == SS_STAFF ) { @@ -2397,6 +2666,35 @@ qboolean PM_CheckJumpForwardAttackMove( void ) return qfalse; } + //check to see if it's cancelled? + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE ) + { + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE + || pm->ps->saber[1].jumpAtkFwdMove == LS_INVALID ) + { + return qfalse; + } + } + else + { + return qfalse; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE ) + { + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE + || pm->ps->saber[0].jumpAtkFwdMove == LS_INVALID ) + { + return qfalse; + } + } + } + //do normal checks + if ( pm->cmd.forwardmove > 0 //going forward && pm->ps->forceRageRecoveryTime < pm->cmd.serverTime //not in a force Rage recovery period && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 //can force jump @@ -2494,6 +2792,36 @@ qboolean PM_CheckJumpForwardAttackMove( void ) saberMoveName_t PM_SaberFlipOverAttackMove( void ) { + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].jumpAtkFwdMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].jumpAtkFwdMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove != LS_INVALID ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].jumpAtkFwdMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE ) + { + return LS_NONE; + } + } //FIXME: check above for room enough to jump! //FIXME: while in this jump, keep velocity[2] at a minimum until the end of the anim vec3_t fwdAngles, jumpFwd; @@ -2555,6 +2883,34 @@ qboolean PM_CheckFlipOverAttackMove( qboolean checkEnemy ) { return qfalse; } + //check to see if it's cancelled? + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE ) + { + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE + || pm->ps->saber[1].jumpAtkFwdMove == LS_INVALID ) + { + return qfalse; + } + } + else + { + return qfalse; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkFwdMove == LS_NONE ) + { + if ( pm->ps->saber[0].jumpAtkFwdMove == LS_NONE + || pm->ps->saber[0].jumpAtkFwdMove == LS_INVALID ) + { + return qfalse; + } + } + } + //do normal checks if ( (pm->ps->saberAnimLevel == SS_MEDIUM //medium || pm->ps->saberAnimLevel == SS_TAVION )//tavion @@ -2625,6 +2981,36 @@ qboolean PM_CheckFlipOverAttackMove( qboolean checkEnemy ) saberMoveName_t PM_SaberBackflipAttackMove( void ) { + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].jumpAtkBackMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkBackMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].jumpAtkBackMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkBackMove != LS_INVALID ) + { + if ( pm->ps->saber[1].jumpAtkBackMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].jumpAtkBackMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].jumpAtkBackMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkBackMove == LS_NONE ) + { + return LS_NONE; + } + } pm->cmd.upmove = 0;//no jump just yet return LS_A_BACKFLIP_ATK; } @@ -2637,6 +3023,35 @@ qboolean PM_CheckBackflipAttackMove( void ) return qfalse; } + //check to see if it's cancelled? + if ( pm->ps->saber[0].jumpAtkBackMove == LS_NONE ) + { + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkBackMove == LS_NONE + || pm->ps->saber[1].jumpAtkBackMove == LS_INVALID ) + { + return qfalse; + } + } + else + { + return qfalse; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].jumpAtkBackMove == LS_NONE ) + { + if ( pm->ps->saber[0].jumpAtkBackMove == LS_NONE + || pm->ps->saber[0].jumpAtkBackMove == LS_INVALID ) + { + return qfalse; + } + } + } + //do normal checks + if ( pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 //can force jump && pm->ps->forceRageRecoveryTime < pm->cmd.serverTime //not in a force Rage recovery period && pm->gent && !(pm->gent->flags&FL_LOCK_PLAYER_WEAPONS) // yes this locked weapons check also includes force powers, if we need a separate check later I'll make one @@ -2679,6 +3094,37 @@ saberMoveName_t PM_CheckDualSpinProtect( void ) return LS_NONE; } + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].kataMove != LS_INVALID ) + { + if ( pm->ps->saber[0].kataMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].kataMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove != LS_INVALID ) + { + if ( pm->ps->saber[1].kataMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].kataMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].kataMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove == LS_NONE ) + { + return LS_NONE; + } + } + //do normal checks if ( pm->ps->saberMove == LS_READY//ready //&& (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer())//PLAYER ONLY...? //&& pm->ps->viewangles[0] > 30 //looking down @@ -2714,6 +3160,37 @@ saberMoveName_t PM_CheckStaffKata( void ) return LS_NONE; } + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].kataMove != LS_INVALID ) + { + if ( pm->ps->saber[0].kataMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[0].kataMove; + } + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove != LS_INVALID ) + { + if ( pm->ps->saber[1].kataMove != LS_NONE ) + { + return (saberMoveName_t)pm->ps->saber[1].kataMove; + } + } + } + //no overrides, cancelled? + if ( pm->ps->saber[0].kataMove == LS_NONE ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove == LS_NONE ) + { + return LS_NONE; + } + } + //do normal checks if ( pm->ps->saberMove == LS_READY//ready //&& (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer())//PLAYER ONLY...? //&& pm->ps->viewangles[0] > 30 //looking down @@ -2750,6 +3227,16 @@ saberMoveName_t PM_CheckPullAttack( void ) return LS_NONE; } + if ( (pm->ps->saber[0].saberFlags&SFL_NO_PULL_ATTACK) ) + { + return LS_NONE; + } + if ( pm->ps->dualSabers + && (pm->ps->saber[1].saberFlags&SFL_NO_PULL_ATTACK) ) + { + return LS_NONE; + } + if ( (pm->ps->saberMove == LS_READY||PM_SaberInReturn(pm->ps->saberMove)||PM_SaberInReflect(pm->ps->saberMove))//ready //&& (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer())//PLAYER ONLY && pm->ps->saberAnimLevel >= SS_FAST//single saber styles - FIXME: Tavion? @@ -2891,6 +3378,51 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c noSpecials = qtrue; } + saberMoveName_t overrideJumpRightAttackMove = LS_INVALID; + if ( pm->ps->saber[0].jumpAtkRightMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkRightMove != LS_NONE ) + {//actually overriding + overrideJumpRightAttackMove = (saberMoveName_t)pm->ps->saber[0].jumpAtkRightMove; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkRightMove > LS_NONE ) + {//would be cancelling it, but check the second saber, too + overrideJumpRightAttackMove = (saberMoveName_t)pm->ps->saber[1].jumpAtkRightMove; + } + else + {//nope, just cancel it + overrideJumpRightAttackMove = LS_NONE; + } + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkRightMove != LS_INVALID ) + {//first saber not overridden, check second + overrideJumpRightAttackMove = (saberMoveName_t)pm->ps->saber[1].jumpAtkRightMove; + } + + saberMoveName_t overrideJumpLeftAttackMove = LS_INVALID; + if ( pm->ps->saber[0].jumpAtkLeftMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkLeftMove != LS_NONE ) + {//actually overriding + overrideJumpLeftAttackMove = (saberMoveName_t)pm->ps->saber[0].jumpAtkLeftMove; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkLeftMove > LS_NONE ) + {//would be cancelling it, but check the second saber, too + overrideJumpLeftAttackMove = (saberMoveName_t)pm->ps->saber[1].jumpAtkLeftMove; + } + else + {//nope, just cancel it + overrideJumpLeftAttackMove = LS_NONE; + } + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkLeftMove != LS_INVALID ) + {//first saber not overridden, check second + overrideJumpLeftAttackMove = (saberMoveName_t)pm->ps->saber[1].jumpAtkLeftMove; + } #ifdef _XBOX if ( rightmove > 64 ) #else @@ -2898,6 +3430,7 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c #endif // _XBOX {//moving right if ( !noSpecials + && overrideJumpRightAttackMove != LS_NONE && (pm->ps->groundEntityNum != ENTITYNUM_NONE||level.time-pm->ps->lastOnGround<=250) //on ground or just jumped && (pm->cmd.buttons&BUTTON_ATTACK)//hitting attack && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_0//have force jump 1 at least @@ -2911,7 +3444,11 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c G_DrainPowerForSpecialMove( pm->gent, FP_LEVITATION, SABER_ALT_ATTACK_POWER_LR ); } pm->cmd.upmove = 0; - if ( pm->ps->saberAnimLevel == SS_STAFF ) + if ( overrideJumpRightAttackMove != LS_INVALID ) + {//overridden with another move + return overrideJumpRightAttackMove; + } + else if ( pm->ps->saberAnimLevel == SS_STAFF ) { AngleVectors( fwdAngles, NULL, right, NULL ); pm->ps->velocity[0] = pm->ps->velocity[1] = 0; @@ -2920,20 +3457,24 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c } else { - /* - if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) - {//still on ground - VectorClear( pm->ps->velocity ); - return LS_JUMPATTACK_CART_RIGHT; - } - else - */ - {//in air - AngleVectors( fwdAngles, NULL, right, NULL ); - pm->ps->velocity[0] = pm->ps->velocity[1] = 0; - VectorMA( pm->ps->velocity, 190, right, pm->ps->velocity ); - PM_SetJumped( JUMP_VELOCITY, qtrue ); - return LS_JUMPATTACK_ARIAL_RIGHT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_CARTWHEELS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_CARTWHEELS)) ) + {//okay to do cartwheels with this saber + /* + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) + {//still on ground + VectorClear( pm->ps->velocity ); + return LS_JUMPATTACK_CART_RIGHT; + } + else + */ + {//in air + AngleVectors( fwdAngles, NULL, right, NULL ); + pm->ps->velocity[0] = pm->ps->velocity[1] = 0; + VectorMA( pm->ps->velocity, 190, right, pm->ps->velocity ); + PM_SetJumped( JUMP_VELOCITY, qtrue ); + return LS_JUMPATTACK_ARIAL_RIGHT; + } } } } @@ -2975,6 +3516,7 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c #endif // _XBOX {//moving left if ( !noSpecials + && overrideJumpLeftAttackMove != LS_NONE && (pm->ps->groundEntityNum != ENTITYNUM_NONE||level.time-pm->ps->lastOnGround<=250) //on ground or just jumped && (pm->cmd.buttons&BUTTON_ATTACK)//hitting attack && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_0//have force jump 1 at least @@ -2988,7 +3530,11 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c G_DrainPowerForSpecialMove( pm->gent, FP_LEVITATION, SABER_ALT_ATTACK_POWER_LR ); } pm->cmd.upmove = 0; - if ( pm->ps->saberAnimLevel == SS_STAFF ) + if ( overrideJumpRightAttackMove != LS_INVALID ) + {//overridden with another move + return overrideJumpRightAttackMove; + } + else if ( pm->ps->saberAnimLevel == SS_STAFF ) { AngleVectors( fwdAngles, NULL, right, NULL ); pm->ps->velocity[0] = pm->ps->velocity[1] = 0; @@ -2997,20 +3543,24 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c } else { - /* - if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) - {//still on ground - VectorClear( pm->ps->velocity ); - return LS_JUMPATTACK_ARIAL_LEFT; - } - else - */ - { - AngleVectors( fwdAngles, NULL, right, NULL ); - pm->ps->velocity[0] = pm->ps->velocity[1] = 0; - VectorMA( pm->ps->velocity, -190, right, pm->ps->velocity ); - PM_SetJumped( JUMP_VELOCITY, qtrue ); - return LS_JUMPATTACK_CART_LEFT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_CARTWHEELS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_CARTWHEELS)) ) + {//okay to do cartwheels with this saber + /* + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) + {//still on ground + VectorClear( pm->ps->velocity ); + return LS_JUMPATTACK_ARIAL_LEFT; + } + else + */ + { + AngleVectors( fwdAngles, NULL, right, NULL ); + pm->ps->velocity[0] = pm->ps->velocity[1] = 0; + VectorMA( pm->ps->velocity, -190, right, pm->ps->velocity ); + PM_SetJumped( JUMP_VELOCITY, qtrue ); + return LS_JUMPATTACK_CART_LEFT; + } } } } @@ -3182,76 +3732,81 @@ saberMoveName_t PM_SaberAttackForMovement( int forwardmove, int rightmove, int c } } //if ( !PM_InKnockDown( pm->ps ) ) - if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) - {//only when on ground - if ( pm->gent && pm->gent->enemy ) - {//FIXME: or just trace for a valid enemy standing behind me? And no enemy in front? - vec3_t enemyDir, faceFwd, facingAngles = {0, pm->ps->viewangles[YAW], 0}; - AngleVectors( facingAngles, faceFwd, NULL, NULL ); - VectorSubtract( pm->gent->enemy->currentOrigin, pm->ps->origin, enemyDir ); - float dot = DotProduct( enemyDir, faceFwd ); - if ( dot < 0 ) - {//enemy is behind me - if ( dot < -0.75f - && DistanceSquared( pm->gent->currentOrigin, pm->gent->enemy->currentOrigin ) < 16384//128 squared - && (pm->ps->saberAnimLevel == SS_FAST || pm->ps->saberAnimLevel == SS_STAFF || (pm->gent->client &&(pm->gent->client->NPC_class == CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA)&&Q_irand(0,1))) ) - {//fast attacks and Tavion - if ( !(pm->ps->pm_flags&PMF_DUCKED) && pm->cmd.upmove >= 0 ) - {//can't do it while ducked? - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || (pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG) ) - {//only fencers and above can do this - return LS_A_BACKSTAB; + //check backstabs + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_BACK_ATTACK) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_BACK_ATTACK)) ) + {//okay to do backstabs with this saber + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) + {//only when on ground + if ( pm->gent && pm->gent->enemy ) + {//FIXME: or just trace for a valid enemy standing behind me? And no enemy in front? + vec3_t enemyDir, faceFwd, facingAngles = {0, pm->ps->viewangles[YAW], 0}; + AngleVectors( facingAngles, faceFwd, NULL, NULL ); + VectorSubtract( pm->gent->enemy->currentOrigin, pm->ps->origin, enemyDir ); + float dot = DotProduct( enemyDir, faceFwd ); + if ( dot < 0 ) + {//enemy is behind me + if ( dot < -0.75f + && DistanceSquared( pm->gent->currentOrigin, pm->gent->enemy->currentOrigin ) < 16384//128 squared + && (pm->ps->saberAnimLevel == SS_FAST || pm->ps->saberAnimLevel == SS_STAFF || (pm->gent->client &&(pm->gent->client->NPC_class == CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA)&&Q_irand(0,1))) ) + {//fast attacks and Tavion + if ( !(pm->ps->pm_flags&PMF_DUCKED) && pm->cmd.upmove >= 0 ) + {//can't do it while ducked? + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || (pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG) ) + {//only fencers and above can do this + return LS_A_BACKSTAB; + } + } + } + else if ( pm->ps->saberAnimLevel != SS_FAST + && pm->ps->saberAnimLevel != SS_STAFF ) + {//medium and higher attacks + if ( (pm->ps->pm_flags&PMF_DUCKED) || pm->cmd.upmove < 0 ) + { + return LS_A_BACK_CR; + } + else + { + return LS_A_BACK; } } } - else if ( pm->ps->saberAnimLevel != SS_FAST - && pm->ps->saberAnimLevel != SS_STAFF ) - {//medium and higher attacks - if ( (pm->ps->pm_flags&PMF_DUCKED) || pm->cmd.upmove < 0 ) - { - return LS_A_BACK_CR; + else + {//enemy in front + float enemyDistSq = DistanceSquared( pm->gent->currentOrigin, pm->gent->enemy->currentOrigin ); + if ( (pm->ps->saberAnimLevel == FORCE_LEVEL_1||pm->ps->saberAnimLevel == SS_STAFF||pm->gent->client->NPC_class==CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA||(pm->gent->client->NPC_class==CLASS_DESANN&&!Q_irand(0,3))) && enemyDistSq > 16384 || pm->gent->enemy->health <= 0 )//128 squared + {//my enemy is pretty far in front of me and I'm using fast attacks + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || + ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) ) + {//only fencers and higher can do this, higher rank does it more + if ( PM_CheckEnemyInBack( 128 ) ) + { + return PM_PickBackStab(); + } + } } - else - { - return LS_A_BACK; + else if ( (pm->ps->saberAnimLevel >= FORCE_LEVEL_2 || pm->gent->client->NPC_class == CLASS_DESANN) && enemyDistSq > 40000 || pm->gent->enemy->health <= 0 )//200 squared + {//enemy is very faw away and I'm using medium/strong attacks + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || + ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) ) + {//only fencers and higher can do this, higher rank does it more + if ( PM_CheckEnemyInBack( 164 ) ) + { + return PM_PickBackStab(); + } + } } } } else - {//enemy in front - float enemyDistSq = DistanceSquared( pm->gent->currentOrigin, pm->gent->enemy->currentOrigin ); - if ( (pm->ps->saberAnimLevel == FORCE_LEVEL_1||pm->ps->saberAnimLevel == SS_STAFF||pm->gent->client->NPC_class==CLASS_TAVION||pm->gent->client->NPC_class == CLASS_ALORA||(pm->gent->client->NPC_class==CLASS_DESANN&&!Q_irand(0,3))) && enemyDistSq > 16384 || pm->gent->enemy->health <= 0 )//128 squared - {//my enemy is pretty far in front of me and I'm using fast attacks - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || - ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) ) - {//only fencers and higher can do this, higher rank does it more - if ( PM_CheckEnemyInBack( 128 ) ) - { - return PM_PickBackStab(); - } + {//no current enemy + if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) && pm->gent && pm->gent->client ) + {//only player + if ( PM_CheckEnemyInBack( 128 ) ) + { + return PM_PickBackStab(); } } - else if ( (pm->ps->saberAnimLevel >= FORCE_LEVEL_2 || pm->gent->client->NPC_class == CLASS_DESANN) && enemyDistSq > 40000 || pm->gent->enemy->health <= 0 )//200 squared - {//enemy is very faw away and I'm using medium/strong attacks - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) || - ( pm->gent && pm->gent->client && pm->gent->NPC && pm->gent->NPC->rank >= RANK_LT_JG && Q_irand( 0, pm->gent->NPC->rank ) > RANK_ENSIGN ) ) - {//only fencers and higher can do this, higher rank does it more - if ( PM_CheckEnemyInBack( 164 ) ) - { - return PM_PickBackStab(); - } - } - } - } - } - else - {//no current enemy - if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) && pm->gent && pm->gent->client ) - {//only player - if ( PM_CheckEnemyInBack( 128 ) ) - { - return PM_PickBackStab(); - } } } } @@ -3844,12 +4399,24 @@ extern qboolean PM_SpinningSaberAnim( int anim ); extern float saberAnimSpeedMod[NUM_FORCE_POWER_LEVELS]; void PM_SaberStartTransAnim( int saberAnimLevel, int anim, float *animSpeed, gentity_t *gent ) { - if ( g_saberAnimSpeed->value != 1.0f ) + if ( anim >= BOTH_A1_T__B_ && anim <= BOTH_ROLL_STAB ) { - if ( anim >= BOTH_A1_T__B_ && anim <= BOTH_CROUCHATTACKBACK1 ) + if ( g_saberAnimSpeed->value != 1.0f ) { *animSpeed *= g_saberAnimSpeed->value; } + else if ( gent && gent->client && gent->client->ps.weapon == WP_SABER ) + { + if ( gent->client->ps.saber[0].animSpeedScale != 1.0f ) + { + *animSpeed *= gent->client->ps.saber[0].animSpeedScale; + } + if ( gent->client->ps.dualSabers + && gent->client->ps.saber[1].animSpeedScale != 1.0f ) + { + *animSpeed *= gent->client->ps.saber[1].animSpeedScale; + } + } } if ( gent && gent->client diff --git a/code/game/bg_pmove.cpp b/code/game/bg_pmove.cpp index 34d8335..97323ea 100644 --- a/code/game/bg_pmove.cpp +++ b/code/game/bg_pmove.cpp @@ -98,6 +98,8 @@ extern qboolean G_TryingSpecial( gentity_t *self, usercmd_t *cmd ); extern qboolean G_TryingJumpAttack( gentity_t *self, usercmd_t *cmd ); extern qboolean G_TryingJumpForwardAttack( gentity_t *self, usercmd_t *cmd ); extern void WP_SaberSwingSound( gentity_t *ent, int saberNum, swingType_t swingType ); +extern qboolean WP_UseFirstValidSaberStyle( gentity_t *ent, int *saberAnimLevel ); +extern qboolean WP_SaberStyleValidForSaber( gentity_t *ent, int saberAnimLevel ); qboolean PM_InKnockDown( playerState_t *ps ); qboolean PM_InKnockDownOnGround( playerState_t *ps ); @@ -125,6 +127,7 @@ extern cvar_t *d_slowmodeath; extern cvar_t *g_debugMelee; extern cvar_t *g_saberNewControlScheme; extern cvar_t *g_stepSlideFix; +extern cvar_t *g_saberAutoBlocking; static void PM_SetWaterLevelAtPoint( vec3_t org, int *waterlevel, int *watertype ); @@ -262,6 +265,15 @@ qboolean PM_CheckGrabWall( trace_t *trace ) {//player must have force jump 3 return qfalse; } + if ( (pm->ps->saber[0].saberFlags&SFL_NO_WALL_GRAB) ) + { + return qfalse; + } + if ( pm->ps->dualSabers + && (pm->ps->saber[1].saberFlags&SFL_NO_WALL_GRAB) ) + { + return qfalse; + } if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) ) {//player //only if we were in a longjump @@ -1241,7 +1253,10 @@ static qboolean PM_CheckJump( void ) pm->ps->legsAnim != BOTH_ALORA_FLIP_2 && pm->ps->legsAnim != BOTH_ALORA_FLIP_3 && cg.renderingThirdPerson//third person only - && !cg.zoomMode )//not zoomed in + && !cg.zoomMode //not zoomed in + && !(pm->ps->saber[0].saberFlags&SFL_NO_FLIPS)//okay to do flips with this saber + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_FLIPS) )//okay to do flips with this saber + ) {//FIXME: this could end up playing twice if the jump is very long... int anim = BOTH_FORCEINAIR1; int parts = SETANIM_BOTH; @@ -1487,25 +1502,29 @@ static qboolean PM_CheckJump( void ) else if ( (pm->ps->clientNum >= MAX_CLIENTS&&!PM_ControlledByPlayer()) || pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 ) { - if ( pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer() ) - {//player: since we're on the ground, always do a cartwheel - /* - anim = BOTH_CARTWHEEL_RIGHT; - forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); - */ - } - else - { - vertPush = JUMP_VELOCITY; - if ( Q_irand( 0, 1 ) ) - { - anim = BOTH_ARIAL_RIGHT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_CARTWHEELS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_CARTWHEELS)) ) + {//okay to do cartwheels with this saber + if ( pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer() ) + {//player: since we're on the ground, always do a cartwheel + /* + anim = BOTH_CARTWHEEL_RIGHT; forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + */ } else { - anim = BOTH_CARTWHEEL_RIGHT; - forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + vertPush = JUMP_VELOCITY; + if ( Q_irand( 0, 1 ) ) + { + anim = BOTH_ARIAL_RIGHT; + forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + } + else + { + anim = BOTH_CARTWHEEL_RIGHT; + forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + } } } } @@ -1526,25 +1545,29 @@ static qboolean PM_CheckJump( void ) else if ( (pm->ps->clientNum >= MAX_CLIENTS&&!PM_ControlledByPlayer()) || pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 ) { - if ( pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer() ) - {//player: since we're on the ground, always do a cartwheel - /* - anim = BOTH_CARTWHEEL_LEFT; - forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); - */ - } - else - { - vertPush = JUMP_VELOCITY; - if ( Q_irand( 0, 1 ) ) - { - anim = BOTH_ARIAL_LEFT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_CARTWHEELS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_CARTWHEELS)) ) + {//okay to do cartwheels with this saber + if ( pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer() ) + {//player: since we're on the ground, always do a cartwheel + /* + anim = BOTH_CARTWHEEL_LEFT; forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + */ } else { - anim = BOTH_CARTWHEEL_LEFT; - forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + vertPush = JUMP_VELOCITY; + if ( Q_irand( 0, 1 ) ) + { + anim = BOTH_ARIAL_LEFT; + forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + } + else + { + anim = BOTH_CARTWHEEL_LEFT; + forcePowerCostOverride = G_CostForSpecialMove( SABER_ALT_ATTACK_POWER_LR ); + } } } } @@ -1554,26 +1577,42 @@ static qboolean PM_CheckJump( void ) {//strafing right if ( pm->cmd.forwardmove > 0 ) {//wall-run - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; - anim = BOTH_WALL_RUN_RIGHT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_RUNS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_RUNS)) ) + {//okay to do wall-runs with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; + anim = BOTH_WALL_RUN_RIGHT; + } } else if ( pm->cmd.forwardmove == 0 ) {//wall-flip - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - anim = BOTH_WALL_FLIP_RIGHT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_FLIPS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_FLIPS)) ) + {//okay to do wall-flips with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + anim = BOTH_WALL_FLIP_RIGHT; + } } } else if ( pm->cmd.rightmove < 0 && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 ) {//strafing left if ( pm->cmd.forwardmove > 0 ) {//wall-run - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; - anim = BOTH_WALL_RUN_LEFT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_RUNS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_RUNS)) ) + {//okay to do wall-runs with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; + anim = BOTH_WALL_RUN_LEFT; + } } else if ( pm->cmd.forwardmove == 0 ) {//wall-flip - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - anim = BOTH_WALL_FLIP_LEFT; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_FLIPS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_FLIPS)) ) + {//okay to do wall-flips with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + anim = BOTH_WALL_FLIP_LEFT; + } } } else if ( /*pm->ps->clientNum >= MAX_CLIENTS//not the player @@ -1585,13 +1624,21 @@ static qboolean PM_CheckJump( void ) {//have to be moving... FIXME: make sure it's opposite the wall... or at least forward? if ( pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_2 ) {//run all the way up wwall - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; - anim = BOTH_FORCEWALLRUNFLIP_START; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_RUNS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_RUNS)) ) + {//okay to do wall-runs with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; + anim = BOTH_FORCEWALLRUNFLIP_START; + } } else {//run just a couple steps up - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - anim = BOTH_WALL_FLIP_BACK1; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_FLIPS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_FLIPS)) ) + {//okay to do wall-flips with this saber + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + anim = BOTH_WALL_FLIP_BACK1; + } } } } @@ -1601,46 +1648,82 @@ static qboolean PM_CheckJump( void ) {//back-jump does backflip... FIXME: always?! What about just doing a normal jump backwards? if ( pm->ps->velocity[2] >= 0 ) {//must be going up already - vertPush = JUMP_VELOCITY; - if ( pm->gent->client && pm->gent->client->NPC_class == CLASS_ALORA && !Q_irand( 0, 2 ) ) - { - anim = BOTH_ALORA_FLIP_B; - } - else - { - anim = PM_PickAnim( pm->gent, BOTH_FLIP_BACK1, BOTH_FLIP_BACK3 ); + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_FLIPS) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_FLIPS)) ) + {//okay to do backstabs with this saber + vertPush = JUMP_VELOCITY; + if ( pm->gent->client && pm->gent->client->NPC_class == CLASS_ALORA && !Q_irand( 0, 2 ) ) + { + anim = BOTH_ALORA_FLIP_B; + } + else + { + anim = PM_PickAnim( pm->gent, BOTH_FLIP_BACK1, BOTH_FLIP_BACK3 ); + } } } } else if ( VectorLengthSquared( pm->ps->velocity ) < 256 /*16 squared*/) {//not moving - if ( pm->ps->weapon == WP_SABER && (pm->cmd.buttons & BUTTON_ATTACK) && pm->ps->saberAnimLevel == SS_MEDIUM ) + if ( pm->ps->weapon == WP_SABER && (pm->cmd.buttons & BUTTON_ATTACK) ) { - /* - //Only tavion does these now - if ( pm->ps->clientNum && Q_irand( 0, 1 ) ) - {//butterfly... FIXME: does direction matter? - vertPush = JUMP_VELOCITY; - if ( Q_irand( 0, 1 ) ) - { - anim = BOTH_BUTTERFLY_LEFT; + saberMoveName_t overrideJumpAttackUpMove = LS_INVALID; + if ( pm->ps->saber[0].jumpAtkUpMove != LS_INVALID ) + { + if ( pm->ps->saber[0].jumpAtkUpMove != LS_NONE ) + {//actually overriding + overrideJumpAttackUpMove = (saberMoveName_t)pm->ps->saber[0].jumpAtkUpMove; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkUpMove > LS_NONE ) + {//would be cancelling it, but check the second saber, too + overrideJumpAttackUpMove = (saberMoveName_t)pm->ps->saber[1].jumpAtkUpMove; } else - { - anim = BOTH_BUTTERFLY_RIGHT; + {//nope, just cancel it + overrideJumpAttackUpMove = LS_NONE; } } - else - */if ( pm->ps->clientNum >= MAX_CLIENTS && !PM_ControlledByPlayer() )//NOTE: pretty much useless, so player never does these - {//jump-spin FIXME: does direction matter? - vertPush = forceJumpStrength[FORCE_LEVEL_2]/1.5f; - if ( pm->gent->client && pm->gent->client->NPC_class == CLASS_ALORA ) + else if ( pm->ps->dualSabers + && pm->ps->saber[1].jumpAtkUpMove != LS_INVALID ) + {//first saber not overridden, check second + overrideJumpAttackUpMove = (saberMoveName_t)pm->ps->saber[0].jumpAtkUpMove; + } + if ( overrideJumpAttackUpMove != LS_INVALID ) + {//do this move instead + if ( overrideJumpAttackUpMove != LS_NONE ) { - anim = BOTH_ALORA_SPIN; + anim = saberMoveData[overrideJumpAttackUpMove].animToUse; } - else - { - anim = Q_irand( BOTH_FJSS_TR_BL, BOTH_FJSS_TL_BR ); + } + else if ( pm->ps->saberAnimLevel == SS_MEDIUM ) + { + /* + //Only tavion does these now + if ( pm->ps->clientNum && Q_irand( 0, 1 ) ) + {//butterfly... FIXME: does direction matter? + vertPush = JUMP_VELOCITY; + if ( Q_irand( 0, 1 ) ) + { + anim = BOTH_BUTTERFLY_LEFT; + } + else + { + anim = BOTH_BUTTERFLY_RIGHT; + } + } + else + */if ( pm->ps->clientNum >= MAX_CLIENTS && !PM_ControlledByPlayer() )//NOTE: pretty much useless, so player never does these + {//jump-spin FIXME: does direction matter? + vertPush = forceJumpStrength[FORCE_LEVEL_2]/1.5f; + if ( pm->gent->client && pm->gent->client->NPC_class == CLASS_ALORA ) + { + anim = BOTH_ALORA_SPIN; + } + else + { + anim = Q_irand( BOTH_FJSS_TR_BL, BOTH_FJSS_TL_BR ); + } } } } @@ -2189,57 +2272,61 @@ static qboolean PM_CheckJump( void ) //&& (pm->ps->legsAnim == BOTH_JUMP1 || pm->ps->legsAnim == BOTH_INAIR1 ) )//not in a flip or spin or anything ) {//see if we're pushing at a wall and jump off it if so - //FIXME: make sure we have enough force power - //FIXME: check to see if we can go any higher - //FIXME: limit to a certain number of these in a row? - //FIXME: maybe don't require a ucmd direction, just check all 4? - //FIXME: should stick to the wall for a second, then push off... - vec3_t checkDir, traceto, mins = {pm->mins[0],pm->mins[1],0}, maxs = {pm->maxs[0],pm->maxs[1],24}, fwdAngles = {0, pm->ps->viewangles[YAW], 0}; - trace_t trace; - vec3_t idealNormal; - int anim = -1; + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_WALL_GRAB) + && ( !pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_WALL_GRAB) ) ) + {//okay to do wall-grabs with this saber + //FIXME: make sure we have enough force power + //FIXME: check to see if we can go any higher + //FIXME: limit to a certain number of these in a row? + //FIXME: maybe don't require a ucmd direction, just check all 4? + //FIXME: should stick to the wall for a second, then push off... + vec3_t checkDir, traceto, mins = {pm->mins[0],pm->mins[1],0}, maxs = {pm->maxs[0],pm->maxs[1],24}, fwdAngles = {0, pm->ps->viewangles[YAW], 0}; + trace_t trace; + vec3_t idealNormal; + int anim = -1; - if ( pm->cmd.rightmove ) - { - if ( pm->cmd.rightmove > 0 ) + if ( pm->cmd.rightmove ) { - anim = BOTH_FORCEWALLREBOUND_RIGHT; - AngleVectors( fwdAngles, NULL, checkDir, NULL ); + if ( pm->cmd.rightmove > 0 ) + { + anim = BOTH_FORCEWALLREBOUND_RIGHT; + AngleVectors( fwdAngles, NULL, checkDir, NULL ); + } + else if ( pm->cmd.rightmove < 0 ) + { + anim = BOTH_FORCEWALLREBOUND_LEFT; + AngleVectors( fwdAngles, NULL, checkDir, NULL ); + VectorScale( checkDir, -1, checkDir ); + } } - else if ( pm->cmd.rightmove < 0 ) + else if ( pm->cmd.forwardmove > 0 ) { - anim = BOTH_FORCEWALLREBOUND_LEFT; - AngleVectors( fwdAngles, NULL, checkDir, NULL ); + anim = BOTH_FORCEWALLREBOUND_FORWARD; + AngleVectors( fwdAngles, checkDir, NULL, NULL ); + } + else if ( pm->cmd.forwardmove < 0 ) + { + anim = BOTH_FORCEWALLREBOUND_BACK; + AngleVectors( fwdAngles, checkDir, NULL, NULL ); VectorScale( checkDir, -1, checkDir ); } - } - else if ( pm->cmd.forwardmove > 0 ) - { - anim = BOTH_FORCEWALLREBOUND_FORWARD; - AngleVectors( fwdAngles, checkDir, NULL, NULL ); - } - else if ( pm->cmd.forwardmove < 0 ) - { - anim = BOTH_FORCEWALLREBOUND_BACK; - AngleVectors( fwdAngles, checkDir, NULL, NULL ); - VectorScale( checkDir, -1, checkDir ); - } - if ( anim != -1 ) - {//trace in the dir we're pushing in and see if there's a vertical wall there - VectorMA( pm->ps->origin, 16, checkDir, traceto );//was 8 - pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID );//FIXME: clip brushes too? - VectorSubtract( pm->ps->origin, traceto, idealNormal ); - VectorNormalize( idealNormal ); - gentity_t *traceEnt = &g_entities[trace.entityNum]; - if ( trace.fraction < 1.0f - && fabs(trace.plane.normal[2]) <= MAX_WALL_GRAB_SLOPE - &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) - {//there is a wall there - float dot = DotProduct( pm->ps->velocity, trace.plane.normal ); - if ( dot < 1.0f ) - {//can't be heading *away* from the wall! - //grab it! - PM_GrabWallForJump( anim ); + if ( anim != -1 ) + {//trace in the dir we're pushing in and see if there's a vertical wall there + VectorMA( pm->ps->origin, 16, checkDir, traceto );//was 8 + pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID );//FIXME: clip brushes too? + VectorSubtract( pm->ps->origin, traceto, idealNormal ); + VectorNormalize( idealNormal ); + gentity_t *traceEnt = &g_entities[trace.entityNum]; + if ( trace.fraction < 1.0f + && fabs(trace.plane.normal[2]) <= MAX_WALL_GRAB_SLOPE + &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) + {//there is a wall there + float dot = DotProduct( pm->ps->velocity, trace.plane.normal ); + if ( dot < 1.0f ) + {//can't be heading *away* from the wall! + //grab it! + PM_GrabWallForJump( anim ); + } } } } @@ -3676,6 +3763,15 @@ static qboolean PM_TryRoll( void ) { return qfalse; } + if ( (pm->ps->saber[0].saberFlags&SFL_NO_ROLLS) ) + { + return qfalse; + } + if ( pm->ps->dualSabers + && (pm->ps->saber[1].saberFlags&SFL_NO_ROLLS) ) + { + return qfalse; + } if ( pm->ps->clientNum && pm->gent->NPC ) {//NPC if ( pm->gent->NPC->scriptFlags&SCF_NO_ACROBATICS ) @@ -9131,6 +9227,15 @@ int PM_ReadyPoseForSaberAnimLevel( void ) qboolean PM_CanDoDualDoubleAttacks( void ) { + if ( (pm->ps->saber[0].saberFlags&SFL_NO_MIRROR_ATTACKS) ) + { + return qfalse; + } + if ( pm->ps->dualSabers + && (pm->ps->saber[1].saberFlags&SFL_NO_MIRROR_ATTACKS) ) + { + return qfalse; + } //NOTE: assumes you're using SS_DUAL style and have both sabers on... if ( (pm->ps->clientNum < MAX_CLIENTS||PM_ControlledByPlayer()) ) {//player @@ -9215,19 +9320,32 @@ void PM_SetSaberMove(saberMoveName_t newMove) if ( pm->ps->saberBlockingTime > cg.time ) { manualBlocking = qtrue; + if ( !pm->ps->SaberActive() ) + {//turn on all blades and sabers if none are currently on + pm->ps->SaberActivate(); + } if ( pm->ps->saber[0].type == SABER_CLAW ) { anim = BOTH_INAIR1;//FIXME: is there a better anim for this? } else if ( pm->ps->dualSabers && pm->ps->saber[1].Active() ) - { - anim = BOTH_INAIR1; + { + anim = BOTH_INAIR1; } else { anim = BOTH_P1_S1_T_; } } + else if ( pm->ps->saber[0].readyAnim != -1 ) + { + anim = pm->ps->saber[0].readyAnim; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].readyAnim != -1 ) + { + anim = pm->ps->saber[1].readyAnim; + } else if ( pm->ps->saber[0].type == SABER_ARC ) {//FIXME: need it's own style? anim = BOTH_SABERFAST_STANCE; @@ -9257,11 +9375,22 @@ void PM_SetSaberMove(saberMoveName_t newMove) pm->ps->saberMove = newMove; return; } - if ( pm->ps->saber[0].style == SS_STAFF ) + if ( pm->ps->saber[0].drawAnim != -1 ) + { + anim = pm->ps->saber[0].drawAnim; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].drawAnim != -1 ) + { + anim = pm->ps->saber[1].drawAnim; + } + else if ( pm->ps->saber[0].stylesLearned==(1<ps->dualSabers && pm->ps->saber[0].style == SS_NONE && pm->ps->saber[1].style == SS_NONE ) + else if ( pm->ps->dualSabers + && !(pm->ps->saber[0].stylesForbidden&(1<ps->saber[1].stylesForbidden&(1<ps->saber[0].style == SS_STAFF + if ( pm->ps->saber[0].putawayAnim != -1 ) + { + anim = pm->ps->saber[0].putawayAnim; + } + else if ( pm->ps->dualSabers + && pm->ps->saber[1].putawayAnim != -1 ) + { + anim = pm->ps->saber[1].putawayAnim; + } + else if ( pm->ps->saber[0].stylesLearned==(1<ps->saber[0].blade[1].active ) { anim = BOTH_S7_S1; } else if ( pm->ps->dualSabers - && pm->ps->saber[0].style == SS_NONE - && pm->ps->saber[1].style == SS_NONE + && !(pm->ps->saber[0].stylesForbidden&(1<ps->saber[1].stylesForbidden&(1<ps->saber[1].Active() ) { anim = BOTH_S6_S1; @@ -9542,9 +9680,21 @@ void PM_SetSaberMove(saberMoveName_t newMove) } } } - else if ( PM_SaberInStart( newMove ) && pm->ps->saberAnimLevel == SS_STRONG ) + else if ( PM_SaberInStart( newMove ) ) { - WP_SaberSwingSound( pm->gent, 0, SWING_FAST ); + //if ( g_saberRealisticCombat->integer < 1 ) + {//don't damage on the first few frames of a start anim because it may pop from one position to some drastically different one, killing the enemy without hitting them. + int damageDelay = 150; + if ( pm->ps->torsoAnimTimer < damageDelay ) + { + damageDelay = pm->ps->torsoAnimTimer; + } + //ent->client->ps.saberDamageDebounceTime = level.time + damageDelay; + } + if ( pm->ps->saberAnimLevel == SS_STRONG ) + { + WP_SaberSwingSound( pm->gent, 0, SWING_FAST ); + } } } @@ -10310,11 +10460,12 @@ void PM_SaberLockBreak( gentity_t *gent, gentity_t *genemy, saberLockResult_t re } //else see if we can knock the saber out of their hand //FIXME: for now, always disarm the right-hand saber - if ( genemy->client->ps.saber[0].disarmable ) + if ( !(genemy->client->ps.saber[0].saberFlags&SFL_NOT_DISARMABLE) ) { //add disarmBonus into this check - victoryStrength += pm->ps->SaberDisarmBonus()*2; - if ( genemy->client->ps.saber[0].twoHanded || (genemy->client->ps.dualSabers && genemy->client->ps.saber[1].Active()) ) + victoryStrength += pm->ps->SaberDisarmBonus( 0 )*2; + if ( (genemy->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) + || (genemy->client->ps.dualSabers && genemy->client->ps.saber[1].Active()) ) {//defender gets a bonus for using a 2-handed saber or 2 sabers victoryStrength -= 2; } @@ -10332,7 +10483,7 @@ void PM_SaberLockBreak( gentity_t *gent, gentity_t *genemy, saberLockResult_t re } if ( Q_irand( 0, 10 ) < victoryStrength ) { - if ( !genemy->client->ps.saber[0].twoHanded + if ( !(genemy->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) || !Q_irand( 0, 1 ) ) {//if it's a two-handed saber, it has a 50% chance of resisting a disarming WP_SaberLose( genemy, throwDir ); @@ -10355,7 +10506,7 @@ void PM_SaberLockBreak( gentity_t *gent, gentity_t *genemy, saberLockResult_t re int G_SaberLockStrength( gentity_t *gent ) { int strength = gent->client->ps.saber[0].lockBonus; - if ( gent->client->ps.saber[0].twoHanded ) + if ( (gent->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) { strength += 1; } @@ -11049,13 +11200,13 @@ qboolean PM_SaberThrowable( void ) return qfalse; } - if ( pm->ps->saber[0].throwable ) + if ( !(pm->ps->saber[0].saberFlags&SFL_NOT_THROWABLE) ) {//yes, this saber is always throwable return qtrue; } //saber is not normally throwable - if ( pm->ps->saber[0].singleBladeThrowable ) + if ( (pm->ps->saber[0].saberFlags&SFL_SINGLE_BLADE_THROWABLE) ) {//it is throwable if only one blade is on if ( pm->ps->saber[0].numBlades > 1 ) {//it has more than one blade @@ -11082,7 +11233,11 @@ qboolean PM_CheckAltKickAttack( void ) if ( (pm->cmd.buttons&BUTTON_ALT_ATTACK) && (!(pm->ps->pm_flags&PMF_ALT_ATTACK_HELD) ||PM_SaberInReturn(pm->ps->saberMove)) && (!PM_FlippingAnim(pm->ps->legsAnim)||pm->ps->legsAnimTimer<=250) - && (!PM_SaberThrowable()) && pm->ps->SaberActive() ) + && (!PM_SaberThrowable()) + && pm->ps->SaberActive() + && !(pm->ps->saber[0].saberFlags&SFL_NO_KICKS)//okay to do kicks with this saber + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_KICKS) )//okay to do kicks with this saber + ) { return qtrue; } @@ -11917,19 +12072,54 @@ void PM_WeaponLightsaber(void) pm->ps->saberAnimLevel = pm->ps->saber[0].singleBladeStyle;//SS_STRONG; animLevelOverridden = qtrue; } - else if ( pm->ps->saber[0].Active() && pm->ps->saber[0].style != SS_NONE ) - {//one of the sabers I'm using forces me to use a single style - pm->ps->saberAnimLevel = pm->ps->saber[0].style; + else if ( pm->gent + && cg.saberAnimLevelPending != pm->ps->saberAnimLevel + && WP_SaberStyleValidForSaber( pm->gent, cg.saberAnimLevelPending ) ) + {//go ahead and use the cg.saberAnimLevelPending below + animLevelOverridden = qfalse; + } + else if ( pm->gent + && ( WP_SaberStyleValidForSaber( pm->gent, pm->ps->saberAnimLevel ) + || WP_UseFirstValidSaberStyle( pm->gent, &pm->ps->saberAnimLevel ) ) ) + {//style we are using is not valid, switched us to a valid one animLevelOverridden = qtrue; } + /* + else if ( pm->ps->saber[0].Active() + && pm->ps->saber[0].stylesAllowed ) + {//one of the sabers I'm using forces me to use one of a set of styles + if ( !(pm->ps->saber[0].stylesAllowed&(1<ps->saberAnimLevel)) ) + {//I'm not currently using a valid one + for ( int styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + {//loop through and use the first valid one + if ( (pm->ps->saber[0].stylesAllowed&(1<ps->saberAnimLevel = styleNum; + animLevelOverridden = qtrue; + } + } + } + } + */ else if ( pm->ps->dualSabers ) { - if ( pm->ps->saber[1].Active() && pm->ps->saber[1].style != SS_NONE ) - {//one of the sabers I'm using forces me to use a single style - pm->ps->saberAnimLevel = pm->ps->saber[1].style; - animLevelOverridden = qtrue; + /* + if ( pm->ps->saber[1].Active() + && pm->ps->saber[1].stylesAllowed ) + {//one of the sabers I'm using forces me to use one of a set of styles + if ( !(pm->ps->saber[1].stylesAllowed&(1<ps->saberAnimLevel)) ) + {//I'm not currently using a valid one + for ( int styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + {//loop through and use the first valid one + if ( (pm->ps->saber[1].stylesAllowed&(1<ps->saberAnimLevel = styleNum; + animLevelOverridden = qtrue; + } + } + } } - else if ( pm->ps->saber[1].Active() ) + else*/ if ( pm->ps->saber[1].Active() ) {//if second saber is on, must use dual style pm->ps->saberAnimLevel = SS_DUAL; animLevelOverridden = qtrue; @@ -11937,7 +12127,7 @@ void PM_WeaponLightsaber(void) else if ( pm->ps->saber[0].Active() ) {//with only one saber on, use fast style pm->ps->saberAnimLevel = SS_FAST; - animLevelOverridden = qtrue; + animLevelOverridden = qtrue; } } if ( !animLevelOverridden ) @@ -11993,10 +12183,14 @@ void PM_WeaponLightsaber(void) { if ( G_EnoughPowerForSpecialMove( pm->ps->forcePower, SABER_ALT_ATTACK_POWER_FB ) ) { - PM_SetSaberMove( LS_ROLL_STAB ); - if ( pm->gent ) - { - G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER_FB ); + if ( !(pm->ps->saber[0].saberFlags&SFL_NO_ROLL_STAB) + && (!pm->ps->dualSabers || !(pm->ps->saber[1].saberFlags&SFL_NO_ROLL_STAB)) ) + {//okay to do roll-stab + PM_SetSaberMove( LS_ROLL_STAB ); + if ( pm->gent ) + { + G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER_FB ); + } } } } @@ -12277,34 +12471,87 @@ void PM_WeaponLightsaber(void) if ( PM_CanDoKata() ) { - //FIXME: make sure to turn on saber(s)! - switch ( pm->ps->saberAnimLevel ) + saberMoveName_t overrideMove = LS_INVALID; + //see if we have an overridden (or cancelled) kata move + if ( pm->ps->saber[0].kataMove != LS_INVALID ) { - case SS_FAST: - case SS_TAVION: - PM_SetSaberMove( LS_A1_SPECIAL ); - break; - case SS_MEDIUM: - PM_SetSaberMove( LS_A2_SPECIAL ); - break; - case SS_STRONG: - case SS_DESANN: - PM_SetSaberMove( LS_A3_SPECIAL ); - break; - case SS_DUAL: - PM_SetSaberMove( LS_DUAL_SPIN_PROTECT );//PM_CheckDualSpinProtect(); - break; - case SS_STAFF: - PM_SetSaberMove( LS_STAFF_SOULCAL ); - break; + if ( pm->ps->saber[0].kataMove != LS_NONE ) + { + overrideMove = (saberMoveName_t)pm->ps->saber[0].kataMove; + } } - pm->ps->weaponstate = WEAPON_FIRING; - if ( pm->gent ) + if ( overrideMove == LS_INVALID ) + {//not overridden by first saber, check second + if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove != LS_INVALID ) + { + if ( pm->ps->saber[1].kataMove != LS_NONE ) + { + overrideMove = (saberMoveName_t)pm->ps->saber[1].kataMove; + } + } + } + } + //no overrides, cancelled? + if ( overrideMove == LS_INVALID ) { - G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER, qtrue );//FP_SPEED, SINGLE_SPECIAL_POWER ); - //G_StartMatrixEffect( pm->gent, MEF_REVERSE_SPIN, pm->ps->torsoAnimTimer ); + if ( pm->ps->saber[0].kataMove == LS_NONE ) + { + overrideMove = LS_NONE; + } + else if ( pm->ps->dualSabers ) + { + if ( pm->ps->saber[1].kataMove == LS_NONE ) + { + overrideMove = LS_NONE; + } + } + } + if ( overrideMove == LS_INVALID ) + {//not overridden + //FIXME: make sure to turn on saber(s)! + switch ( pm->ps->saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + PM_SetSaberMove( LS_A1_SPECIAL ); + break; + case SS_MEDIUM: + PM_SetSaberMove( LS_A2_SPECIAL ); + break; + case SS_STRONG: + case SS_DESANN: + PM_SetSaberMove( LS_A3_SPECIAL ); + break; + case SS_DUAL: + PM_SetSaberMove( LS_DUAL_SPIN_PROTECT );//PM_CheckDualSpinProtect(); + break; + case SS_STAFF: + PM_SetSaberMove( LS_STAFF_SOULCAL ); + break; + } + pm->ps->weaponstate = WEAPON_FIRING; + if ( pm->gent ) + { + G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER, qtrue );//FP_SPEED, SINGLE_SPECIAL_POWER ); + //G_StartMatrixEffect( pm->gent, MEF_REVERSE_SPIN, pm->ps->torsoAnimTimer ); + } + } + else if ( overrideMove != LS_NONE ) + { + PM_SetSaberMove( overrideMove ); + pm->ps->weaponstate = WEAPON_FIRING; + if ( pm->gent ) + { + G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER, qtrue );//FP_SPEED, SINGLE_SPECIAL_POWER ); + //G_StartMatrixEffect( pm->gent, MEF_REVERSE_SPIN, pm->ps->torsoAnimTimer ); + } + } + if ( overrideMove != LS_NONE ) + {//not cancelled + return; } - return; } if ( PM_CheckAltKickAttack() ) @@ -14317,6 +14564,14 @@ void PM_AdjustAttackStates( pmove_t *pm ) { int amount; + if ( !g_saberAutoBlocking->integer + && !g_saberNewControlScheme->integer + && (pm->cmd.buttons&BUTTON_FORCE_FOCUS) ) + { + pm->ps->saberBlockingTime = pm->cmd.serverTime + 100; + pm->cmd.buttons &= ~BUTTON_ATTACK; + pm->cmd.buttons &= ~BUTTON_ALT_ATTACK; + } // get ammo usage if ( pm->cmd.buttons & BUTTON_ALT_ATTACK ) { @@ -14340,7 +14595,7 @@ void PM_AdjustAttackStates( pmove_t *pm ) } //saber staff alt-attack does a special attack anim, non-throwable sabers do kicks if ( pm->ps->saberAnimLevel != SS_STAFF - && pm->ps->saber[0].throwable ) + && !(pm->ps->saber[0].saberFlags&SFL_NOT_THROWABLE) ) {//using a throwable saber, so remove the saber throw button if ( !g_saberNewControlScheme->integer && PM_CanDoKata() ) diff --git a/code/game/bg_public.h b/code/game/bg_public.h index 3d04738..7ac9092 100644 --- a/code/game/bg_public.h +++ b/code/game/bg_public.h @@ -508,6 +508,14 @@ typedef struct animation_s { #define AED_MOVE_FWD 0 #define AED_MOVE_RT 1 #define AED_MOVE_UP 2 +//indices for AEV_SABER_SWING data +#define AED_SABER_SWING_SABERNUM 0 +#define AED_SABER_SWING_TYPE 1 +#define AED_SABER_SWING_PROBABILITY 2 +//indices for AEV_SABER_SPIN data +#define AED_SABER_SPIN_SABERNUM 0 +#define AED_SABER_SPIN_TYPE 1 //0 = saberspinoff, 1 = saberspin, 2-4 = saberspin1-saberspin3 +#define AED_SABER_SPIN_PROBABILITY 2 typedef enum {//NOTENOTE: Be sure to update animEventTypeTable and ParseAnimationEvtBlock(...) if you change this enum list! @@ -518,6 +526,8 @@ typedef enum AEV_FIRE, //# animID AEV_FIRE framenum altfire chancetofire AEV_MOVE, //# animID AEV_MOVE framenum forwardpush rightpush uppush AEV_SOUNDCHAN, //# animID AEV_SOUNDCHAN framenum CHANNEL soundpath randomlow randomhi chancetoplay + AEV_SABER_SWING, //# animID AEV_SABER_SWING framenum CHANNEL randomlow randomhi chancetoplay + AEV_SABER_SPIN, //# animID AEV_SABER_SPIN framenum CHANNEL chancetoplay AEV_NUM_AEV } animEventType_t; diff --git a/code/game/bg_vehicleLoad.c b/code/game/bg_vehicleLoad.c index 865da19..6a83286 100644 --- a/code/game/bg_vehicleLoad.c +++ b/code/game/bg_vehicleLoad.c @@ -69,8 +69,8 @@ extern stringID_table_t animTable [MAX_ANIMATIONS+1]; // These buffers are filled in with the same contents and then just read from in // a few places. We only need one copy on Xbox. -#define MAX_VEH_WEAPON_DATA_SIZE 0x4000 -#define MAX_VEHICLE_DATA_SIZE 0x10000 +#define MAX_VEH_WEAPON_DATA_SIZE 0x20000 +#define MAX_VEHICLE_DATA_SIZE 0x80000 #if !defined(_XBOX) || defined(QAGAME) char VehWeaponParms[MAX_VEH_WEAPON_DATA_SIZE]; @@ -151,6 +151,7 @@ vehField_t vehWeaponFields[NUM_VWEAP_PARMS] = {"loopSound", VWFOFS(iLoopSound), VF_SOUND_CLIENT}, //index of loopSound {"speed", VWFOFS(fSpeed), VF_FLOAT}, //speed of projectile/range of traceline {"homing", VWFOFS(fHoming), VF_FLOAT}, //0.0 = not homing, 0.5 = half vel to targ, half cur vel, 1.0 = all vel to targ + {"homingFOV", VWFOFS(fHomingFOV), VF_FLOAT},//missile will lose lock on if DotProduct of missile direction and direction to target ever drops below this (-1 to 1, -1 = never lose target, 0 = lose if ship gets behind missile, 1 = pretty much will lose it's target right away) {"lockOnTime", VWFOFS(iLockOnTime), VF_INT}, //0 = no lock time needed, else # of ms needed to lock on {"damage", VWFOFS(iDamage), VF_INT}, //damage done when traceline or projectile directly hits target {"splashDamage", VWFOFS(iSplashDamage), VF_INT},//damage done to ents in splashRadius of end of traceline or projectile origin on impact @@ -1338,6 +1339,7 @@ int VEH_LoadVehicle( const char *vehicleName ) G_SoundIndex( "sound/vehicles/common/release.wav" ); #elif CGAME trap_R_RegisterShader( "gfx/menus/radar/bracket" ); + trap_R_RegisterShader( "gfx/menus/radar/lead" ); trap_R_RegisterShaderNoMip( "gfx/menus/radar/asteroid" ); trap_S_RegisterSound( "sound/vehicles/common/impactalarm.wav" ); trap_S_RegisterSound( "sound/vehicles/common/linkweaps.wav" ); diff --git a/code/game/g_active.cpp b/code/game/g_active.cpp index 18901e0..434d9b8 100644 --- a/code/game/g_active.cpp +++ b/code/game/g_active.cpp @@ -166,6 +166,15 @@ int G_FindLookItem( gentity_t *self ) {//can't see him continue; } + if ( ent->item->giType == IT_WEAPON + && ent->item->giType == WP_SABER ) + {//a weapon_saber pickup + if ( self->client->ps.dualSabers//using 2 sabers already + || (self->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) )//using a 2-handed saber + {//hands are full already, don't look at saber pickups + continue; + } + } //rate him based on how close & how in front he is VectorSubtract( ent->currentOrigin, center, dir ); rating = (1.0f-(VectorNormalize( dir )/radius)); @@ -4691,6 +4700,20 @@ void ClientAlterSpeed(gentity_t *ent, usercmd_t *ucmd, qboolean controlledByPlay { client->ps.speed *= 0.75; } + + if ( client->ps.weapon == WP_SABER ) + { + if ( client->ps.saber[0].moveSpeedScale != 1.0f ) + { + client->ps.speed *= client->ps.saber[0].moveSpeedScale; + } + if ( client->ps.dualSabers + && client->ps.saber[1].moveSpeedScale != 1.0f ) + { + client->ps.speed *= client->ps.saber[1].moveSpeedScale; + } + } + } } diff --git a/code/game/g_client.cpp b/code/game/g_client.cpp index ae848ac..f12797a 100644 --- a/code/game/g_client.cpp +++ b/code/game/g_client.cpp @@ -667,7 +667,7 @@ Player_RestoreFromPrevLevel Argument : gentity_t *ent ============ */ -void Player_RestoreFromPrevLevel(gentity_t *ent) +static void Player_RestoreFromPrevLevel(gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded) { gclient_t *client = ent->client; int i; @@ -810,15 +810,57 @@ void Player_RestoreFromPrevLevel(gentity_t *ent) var = strtok( s, " " ); while( var != NULL ) { - /* While there are tokens in "s" */ - client->ps.forcePowerLevel[i++] = atoi(var); - /* Get next token: */ - var = strtok( NULL, " " ); + /* While there are tokens in "s" */ + client->ps.forcePowerLevel[i++] = atoi(var); + /* Get next token: */ + var = strtok( NULL, " " ); } assert (i==NUM_FORCE_POWERS); client->ps.forceGripEntityNum = client->ps.forceDrainEntityNum = ENTITYNUM_NONE; } + + + // if we're in DEMO mode read in the forcepowers from the + // demo cvar, even though we already might have read in something from above + if(eSavedGameJustLoaded == eNO && gi.Cvar_VariableIntegerValue("com_demo") ) + { + // the new JK2 stuff - force powers, etc... + // + gi.Cvar_VariableStringBuffer( "demo_playerfplvl", s, sizeof(s) ); + int j=0; + var = strtok( s, " " ); + while( var != NULL ) + { + /* While there are tokens in "s" */ + client->ps.forcePowerLevel[j] = atoi(var); + if( client->ps.forcePowerLevel[j] ) + { + client->ps.forcePowersKnown |= (1 << j ); + } + j++; + /* Get next token: */ + var = strtok( NULL, " " ); + } + assert (j==NUM_FORCE_POWERS); + + client->ps.forceGripEntityNum = client->ps.forceDrainEntityNum = ENTITYNUM_NONE; + + // now do weapons + gi.Cvar_VariableStringBuffer( "demo_playerwpns", s, sizeof(s) ); + + client->ps.stats[STAT_WEAPONS] = atoi(s); + + for(j=0 ; jps.stats[STAT_WEAPONS] & (1<ps.ammo[weaponData[j].ammoIndex] = ammoData[weaponData[j].ammoIndex].max; + } + } + + } } } @@ -1817,9 +1859,13 @@ void G_SetSabersFromCVars( gentity_t *ent ) && Q_stricmp( "NULL", g_saber->string ) ) {//FIXME: how to specify second saber? WP_SaberParseParms( g_saber->string, &ent->client->ps.saber[0] ); - if ( ent->client->ps.saber[0].style ) + if ( ent->client->ps.saber[0].stylesLearned ) { - ent->client->ps.saberStylesKnown |= (1<client->ps.saber[0].style); + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[0].stylesLearned; + } + if ( ent->client->ps.saber[0].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[0].singleBladeStyle; } } @@ -1847,14 +1893,18 @@ void G_SetSabersFromCVars( gentity_t *ent ) && Q_stricmp( "none", g_saber2->string ) && Q_stricmp( "NULL", g_saber2->string ) ) { - if ( !ent->client->ps.saber[0].twoHanded ) + if ( !(ent->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) {//can't use a second saber if first one is a two-handed saber...? WP_SaberParseParms( g_saber2->string, &ent->client->ps.saber[1] ); - if ( ent->client->ps.saber[1].style ) + if ( ent->client->ps.saber[1].stylesLearned ) { - ent->client->ps.saberStylesKnown |= (1<client->ps.saber[1].style); + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[1].stylesLearned; } - if ( ent->client->ps.saber[1].twoHanded ) + if ( ent->client->ps.saber[1].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[1].singleBladeStyle; + } + if ( (ent->client->ps.saber[1].saberFlags&SFL_TWO_HANDED) ) {//tsk tsk, can't use a twoHanded saber as second saber WP_RemoveSaber( ent, 1 ); } @@ -1992,17 +2042,25 @@ void G_ReloadSaberData( gentity_t *ent ) if ( ent->client->ps.saber[0].name != NULL ) { WP_SaberParseParms( ent->client->ps.saber[0].name, &ent->client->ps.saber[0], qfalse ); - if ( ent->client->ps.saber[0].style ) + if ( ent->client->ps.saber[0].stylesLearned ) { - ent->client->ps.saberStylesKnown |= (1<client->ps.saber[0].style); + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[0].stylesLearned; + } + if ( ent->client->ps.saber[0].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[0].singleBladeStyle; } } if ( ent->client->ps.saber[1].name != NULL ) { WP_SaberParseParms( ent->client->ps.saber[1].name, &ent->client->ps.saber[1], qfalse ); - if ( ent->client->ps.saber[1].style ) + if ( ent->client->ps.saber[1].stylesLearned ) { - ent->client->ps.saberStylesKnown |= (1<client->ps.saber[1].style); + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[1].stylesLearned; + } + if ( ent->client->ps.saber[1].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[1].singleBladeStyle; } } } @@ -2216,9 +2274,13 @@ qboolean ClientSpawn(gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded client->ps.saberStylesKnown |= (1<ps.saber[0].style ) +// if ( client->ps.saber[0].stylesLearned ) // { -// client->ps.saberStylesKnown |= (1<ps.saber[0].style); +// client->ps.saberStylesKnown |= client->ps.saber[0].stylesLearned; +// } +// if ( ent->client->ps.saber[1].singleSaberStyle ) +// { +// ent->client->ps.saberStylesKnown |= ent->client->ps.saber[1].singleSaberStyle; // } WP_InitForcePowers( ent );//Initialize force powers } @@ -2264,7 +2326,7 @@ qboolean ClientSpawn(gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded // restore some player data // - Player_RestoreFromPrevLevel(ent); + Player_RestoreFromPrevLevel(ent, eSavedGameJustLoaded); //FIXME: put this BEFORE the Player_RestoreFromPrevLevel check above? if (eSavedGameJustLoaded == eNO) @@ -2316,6 +2378,7 @@ qboolean ClientSpawn(gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded ent->client->ps.ammo[weaponData[WP_NONE].ammoIndex] = 32000; ent->client->ps.weapon = WP_NONE; ent->client->ps.weaponstate = WEAPON_READY; + ent->client->ps.dualSabers = qfalse; } if ( ent->client->ps.stats[STAT_WEAPONS] & ( 1 << WP_SABER ) ) diff --git a/code/game/g_cmds.cpp b/code/game/g_cmds.cpp index f65ad99..5fc704f 100644 --- a/code/game/g_cmds.cpp +++ b/code/game/g_cmds.cpp @@ -1090,6 +1090,15 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) { anim = BOTH_ENGAGETAUNT; } + else if ( ent->client->ps.saber[0].tauntAnim != -1 ) + { + anim = ent->client->ps.saber[0].tauntAnim; + } + else if ( ent->client->ps.dualSabers + && ent->client->ps.saber[1].tauntAnim != -1 ) + { + anim = ent->client->ps.saber[1].tauntAnim; + } else { switch ( ent->client->ps.saberAnimLevel ) @@ -1124,7 +1133,19 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) } break; case TAUNT_BOW: - anim = BOTH_BOW; + if ( ent->client->ps.saber[0].bowAnim != -1 ) + { + anim = ent->client->ps.saber[0].bowAnim; + } + else if ( ent->client->ps.dualSabers + && ent->client->ps.saber[1].bowAnim != -1 ) + { + anim = ent->client->ps.saber[1].bowAnim; + } + else + { + anim = BOTH_BOW; + } if ( ent->client->ps.saber[1].Active() ) {//turn off second saber G_Sound( ent, ent->client->ps.saber[1].soundOff ); @@ -1136,7 +1157,19 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) ent->client->ps.SaberDeactivate(); break; case TAUNT_MEDITATE: - anim = BOTH_MEDITATE; + if ( ent->client->ps.saber[0].meditateAnim != -1 ) + { + anim = ent->client->ps.saber[0].meditateAnim; + } + else if ( ent->client->ps.dualSabers + && ent->client->ps.saber[1].meditateAnim != -1 ) + { + anim = ent->client->ps.saber[1].meditateAnim; + } + else + { + anim = BOTH_MEDITATE; + } if ( ent->client->ps.saber[1].Active() ) {//turn off second saber G_Sound( ent, ent->client->ps.saber[1].soundOff ); @@ -1151,51 +1184,75 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) if ( ent->client->ps.weapon == WP_SABER ) { ent->client->ps.SaberActivate(); - switch ( ent->client->ps.saberAnimLevel ) + if ( ent->client->ps.saber[0].flourishAnim != -1 ) { - case SS_FAST: - case SS_TAVION: - anim = BOTH_SHOWOFF_FAST; - break; - case SS_MEDIUM: - anim = BOTH_SHOWOFF_MEDIUM; - break; - case SS_STRONG: - case SS_DESANN: - anim = BOTH_SHOWOFF_STRONG; - break; - case SS_DUAL: - anim = BOTH_SHOWOFF_DUAL; - break; - case SS_STAFF: - anim = BOTH_SHOWOFF_STAFF; - break; + anim = ent->client->ps.saber[0].flourishAnim; + } + else if ( ent->client->ps.dualSabers + && ent->client->ps.saber[1].flourishAnim != -1 ) + { + anim = ent->client->ps.saber[1].flourishAnim; + } + else + { + switch ( ent->client->ps.saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + anim = BOTH_SHOWOFF_FAST; + break; + case SS_MEDIUM: + anim = BOTH_SHOWOFF_MEDIUM; + break; + case SS_STRONG: + case SS_DESANN: + anim = BOTH_SHOWOFF_STRONG; + break; + case SS_DUAL: + anim = BOTH_SHOWOFF_DUAL; + break; + case SS_STAFF: + anim = BOTH_SHOWOFF_STAFF; + break; + } } } break; case TAUNT_GLOAT: - switch ( ent->client->ps.saberAnimLevel ) + if ( ent->client->ps.saber[0].gloatAnim != -1 ) { - case SS_FAST: - case SS_TAVION: - anim = BOTH_VICTORY_FAST; - break; - case SS_MEDIUM: - anim = BOTH_VICTORY_MEDIUM; - break; - case SS_STRONG: - case SS_DESANN: - ent->client->ps.SaberActivate(); - anim = BOTH_VICTORY_STRONG; - break; - case SS_DUAL: - ent->client->ps.SaberActivate(); - anim = BOTH_VICTORY_DUAL; - break; - case SS_STAFF: - ent->client->ps.SaberActivate(); - anim = BOTH_VICTORY_STAFF; - break; + anim = ent->client->ps.saber[0].gloatAnim; + } + else if ( ent->client->ps.dualSabers + && ent->client->ps.saber[1].gloatAnim != -1 ) + { + anim = ent->client->ps.saber[1].gloatAnim; + } + else + { + switch ( ent->client->ps.saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + anim = BOTH_VICTORY_FAST; + break; + case SS_MEDIUM: + anim = BOTH_VICTORY_MEDIUM; + break; + case SS_STRONG: + case SS_DESANN: + ent->client->ps.SaberActivate(); + anim = BOTH_VICTORY_STRONG; + break; + case SS_DUAL: + ent->client->ps.SaberActivate(); + anim = BOTH_VICTORY_DUAL; + break; + case SS_STAFF: + ent->client->ps.SaberActivate(); + anim = BOTH_VICTORY_STAFF; + break; + } } break; } @@ -1219,6 +1276,90 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) } } } + +extern cvar_t *g_saberPickuppableDroppedSabers; +extern void WP_RemoveSaber( gentity_t *ent, int saberNum ); +extern void CG_ChangeWeapon( int num ); +extern void ChangeWeapon( gentity_t *ent, int newWeapon ); +void Cmd_SaberDrop_f( gentity_t *ent, int saberNum ) +{ + if ( saberNum < 0 ) + { + return; + } + if ( saberNum > 1 ) + { + return; + } + if ( !ent || !ent->client ) + { + return; + } + if ( ent->weaponModel[saberNum] <= 0 ) + { + return; + } + + if ( ent->client->ps.weapon != WP_SABER ) + { + return; + } + + if ( ent->client->ps.weaponTime > 0 ) + { + return; + } + + if ( ent->client->ps.saberMove != LS_READY + && ent->client->ps.saberMove != LS_PUTAWAY + && ent->client->ps.saberMove != LS_DRAW + && ent->client->ps.saberMove != LS_NONE ) + { + return; + } + + if ( !g_saberPickuppableDroppedSabers->integer ) + { + return; + } + + if ( !ent->client->ps.saber[saberNum].name + || !ent->client->ps.saber[saberNum].name[0] ) + { + return; + } + + //have a valid string to use for saberType + + //turn it into a pick-uppable item! + if ( G_DropSaberItem( ent->client->ps.saber[saberNum].name, + ent->client->ps.saber[saberNum].blade[0].color, + (saberNum==0?ent->client->renderInfo.handRPoint:ent->client->renderInfo.handLPoint), + ent->client->ps.velocity, + ent->currentAngles ) + != NULL ) + {//dropped it + WP_RemoveSaber( ent, saberNum ); + } + + if ( ent->weaponModel[0] <= 0 + && ent->weaponModel[1] <= 0 ) + {//no sabers left! + //remove saber from inventory + ent->client->ps.stats[STAT_WEAPONS] &= ~(1<s.number < MAX_CLIENTS ) + {//player + CG_ChangeWeapon( WP_NONE ); + } + else + { + ChangeWeapon( ent, WP_NONE ); + } + ent->client->ps.weapon = WP_NONE; + } +} + /* ================= ClientCommand @@ -1453,4 +1594,22 @@ void ClientCommand( int clientNum ) { { Cmd_FlushCamFile_f( ent ); } + else if ( Q_stricmp( cmd, "dropsaber" ) == 0 ) + { + char *cmd2 = gi.argv(1); + int saberNum = 2;//by default, drop both + if ( cmd2 && cmd2[0] ) + { + saberNum = atoi(cmd2); + } + if ( saberNum > 1 ) + {//drop both + Cmd_SaberDrop_f( ent, 1 ); + Cmd_SaberDrop_f( ent, 0 ); + } + else + {//drop either left or right + Cmd_SaberDrop_f( ent, saberNum ); + } + } } diff --git a/code/game/g_combat.cpp b/code/game/g_combat.cpp index 6e17709..8e40219 100644 --- a/code/game/g_combat.cpp +++ b/code/game/g_combat.cpp @@ -26,9 +26,12 @@ extern cvar_t *g_debugDamage; extern qboolean stop_icarus; extern cvar_t *g_dismemberment; extern cvar_t *g_saberRealisticCombat; +extern cvar_t *g_saberPickuppableDroppedSabers; extern cvar_t *g_timescale; extern cvar_t *d_slowmodeath; extern gentity_t *player; +extern cvar_t *debug_subdivision; +extern cvar_t *g_dismemberProbabilities; gentity_t *g_lastClientDamaged; @@ -76,6 +79,7 @@ static int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod, static void G_TrackWeaponUsage( gentity_t *self, gentity_t *inflictor, int add, int mod ); static qboolean G_Dismemberable( gentity_t *self, int hitLoc ); extern gitem_t *FindItemForAmmo( ammo_t ammo ); +extern void WP_RemoveSaber( gentity_t *ent, int saberNum ); qboolean G_GetRootSurfNameWithVariant( gentity_t *ent, const char *rootSurfName, char *returnSurfName, int returnSize ); @@ -124,10 +128,38 @@ gentity_t *TossClientItems( gentity_t *self ) weapon = self->s.weapon; if ( weapon == WP_SABER ) { - if ( self->weaponModel[0] < 0 || (self->client->ps.saber[0].disarmable && WP_SaberLose( self, NULL )) ) - { + if ( self->weaponModel[0] < 0 ) + {//don't have one in right hand self->s.weapon = WP_NONE; } + else if ( !(self->client->ps.saber[0].saberFlags&SFL_NOT_DISARMABLE) + || g_saberPickuppableDroppedSabers->integer ) + {//okay to drop it + if ( WP_SaberLose( self, NULL ) ) + { + self->s.weapon = WP_NONE; + } + } + if ( g_saberPickuppableDroppedSabers->integer ) + {//drop your left one, too + if ( self->weaponModel[1] >= 0 ) + {//have one in left + if ( !(self->client->ps.saber[0].saberFlags&SFL_NOT_DISARMABLE) + || g_saberPickuppableDroppedSabers->integer ) + {//okay to drop it + //just drop an item + if ( self->client->ps.saber[1].name + && self->client->ps.saber[1].name[0] ) + {//have a valid string to use for saberType + //turn it into a pick-uppable item! + if ( G_DropSaberItem( self->client->ps.saber[1].name, self->client->ps.saber[1].blade[0].color, self->client->renderInfo.handLPoint, self->client->ps.velocity, self->currentAngles ) != NULL ) + {//dropped it + WP_RemoveSaber( self, 1 ); + } + } + } + } + } } else if ( weapon == WP_BLASTER_PISTOL ) {//FIXME: either drop the pistol and make the pickup only give ammo or drop ammo @@ -1215,7 +1247,8 @@ qboolean G_GetHitLocFromSurfName( gentity_t *ent, const char *surfName, int *hit } #endif //_DEBUG - if ( g_saberRealisticCombat->integer > 1 ) + if ( g_saberRealisticCombat->integer > 1 + || debug_subdivision->integer ) { dismember = qtrue; } @@ -1231,12 +1264,12 @@ qboolean G_GetHitLocFromSurfName( gentity_t *ent, const char *surfName, int *hit { dismember = qtrue; } - else if ( g_dismemberment->integer == 113811381138 || !ent->client->dismembered ) + else if ( debug_subdivision->integer || !ent->client->dismembered ) { if ( dir && (dir[0] || dir[1] || dir[2]) && bladeDir && (bladeDir[0] || bladeDir[1] || bladeDir[2]) ) {//we care about direction (presumably for dismemberment) - if ( G_Dismemberable( ent, *hitLoc ) ) + if ( g_dismemberProbabilities->value<=0.0f||G_Dismemberable( ent, *hitLoc ) ) {//the probability let us continue char *tagName = NULL; float aoa = 0.5f; @@ -2019,7 +2052,7 @@ static qboolean G_Dismember( gentity_t *ent, vec3_t point, newBolt = gi.G2API_AddBolt( &limb->ghoul2[limb->playerModel], limbTagName ); if ( newBolt != -1 ) { - G_PlayEffect( G_EffectIndex("blaster/smoke_bolton"), limb->playerModel, newBolt, limb->s.number, newPoint); + G_PlayEffect( G_EffectIndex("saber/limb_bolton"), limb->playerModel, newBolt, limb->s.number, newPoint); } } /* @@ -2241,9 +2274,9 @@ static qboolean G_Dismemberable( gentity_t *self, int hitLoc ) {//cannot dismember me right now return qfalse; } - if ( g_dismemberment->integer != 113811381138 && g_saberRealisticCombat->integer < 2 ) + if ( !debug_subdivision->integer && g_saberRealisticCombat->integer < 2 ) { - if ( 1 ) //g_dismemberProbabilities->value > 0.0f == it always is now, no cheating and changing the game from what was approved. + if ( g_dismemberProbabilities->value > 0.0f ) {//use the ent-specific dismemberProbabilities float dismemberProb = 0; // check which part of the body it is. Then check the npc's probability @@ -2278,7 +2311,7 @@ static qboolean G_Dismemberable( gentity_t *self, int hitLoc ) } //check probability of this happening on this npc - if ( Q_flrand( 1, 100 ) > dismemberProb*2.0f )//probabilities seemed really really low, had to crank them up + if ( floor((Q_flrand( 1, 100 )*g_dismemberProbabilities->value)) > dismemberProb*2.0f )//probabilities seemed really really low, had to crank them up { return qfalse; } @@ -2287,6 +2320,25 @@ static qboolean G_Dismemberable( gentity_t *self, int hitLoc ) return qtrue; } +static qboolean G_Dismemberable2( gentity_t *self, int hitLoc ) +{ + if ( self->client->dismembered ) + {//cannot dismember me right now + return qfalse; + } + if ( !debug_subdivision->integer && g_saberRealisticCombat->integer < 2 ) + { + if ( g_dismemberProbabilities->value <= 0.0f ) + {//add the passed-in damage to the locationDamage array, check to see if it's taken enough damage to actually dismember + if ( self->locationDamage[hitLoc] < (self->client->ps.stats[STAT_MAX_HEALTH]*hitLocHealthPercentage[hitLoc]) ) + {//this location has not taken enough damage to dismember + return qfalse; + } + } + } + return qtrue; +} + #define MAX_VARIANTS 8 qboolean G_GetRootSurfNameWithVariant( gentity_t *ent, const char *rootSurfName, char *returnSurfName, int returnSize ) { @@ -2317,15 +2369,16 @@ qboolean G_DoDismemberment( gentity_t *self, vec3_t point, int mod, int damage, //extern cvar_t *g_iscensored; // dismemberment -- FIXME: should have a check for how long npc has been dead so people can't // continue to dismember a dead body long after it's been dead - //NOTE that you can only cut one thing off unless the dismemberment is == 113811381138 + //NOTE that you can only cut one thing off unless the debug_subdivisions is on #ifdef GERMAN_CENSORED if ( 0 ) //germany == censorship #else if ( /*!g_iscensored->integer &&*/ ( g_dismemberment->integer || g_saberRealisticCombat->integer > 1 ) && mod == MOD_SABER )//only lightsaber #endif {//FIXME: don't do strcmps here - if ( G_StandardHumanoid( self ) ) - {//we're using probabilities + if ( G_StandardHumanoid( self ) + && (force||g_dismemberProbabilities->value>0.0f||G_Dismemberable2( self, hitLoc )) ) + {//either it's a forced dismemberment or we're using probabilities (which are checked before this) or we've done enough damage to this location //FIXME: check the hitLoc and hitDir against the cap tag for the place //where the split will be- if the hit dir is roughly perpendicular to //the direction of the cap, then the split is allowed, otherwise we @@ -3868,7 +3921,12 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); } else { - if ( ( + if ( g_saberPickuppableDroppedSabers->integer ) + {//always drop your sabers + TossClientItems( self ); + self->client->ps.weapon = self->s.weapon = WP_NONE; + } + else if ( ( (hitLoc != HL_HAND_RT&&hitLoc !=HL_CHEST_RT&&hitLoc!=HL_ARM_RT&&hitLoc!=HL_BACK_LT) || self->client->dismembered || meansOfDeath != MOD_SABER @@ -6018,6 +6076,35 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, const { knockback = 0; } + + if ( (dflags&DAMAGE_SABER_KNOCKBACK1) ) + { + if ( attacker && attacker->client ) + { + knockback *= attacker->client->ps.saber[0].knockbackScale; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK1_B2) ) + { + if ( attacker && attacker->client ) + { + knockback *= attacker->client->ps.saber[0].knockbackScale2; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK2) ) + { + if ( attacker && attacker->client ) + { + knockback *= attacker->client->ps.saber[1].knockbackScale; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK2_B2) ) + { + if ( attacker && attacker->client ) + { + knockback *= attacker->client->ps.saber[1].knockbackScale2; + } + } // figure momentum add, even if the damage won't be taken if ( knockback && !(dflags&DAMAGE_DEATH_KNOCKBACK) ) //&& targ->client { diff --git a/code/game/g_items.cpp b/code/game/g_items.cpp index d0ffafe..090799b 100644 --- a/code/game/g_items.cpp +++ b/code/game/g_items.cpp @@ -16,10 +16,12 @@ extern qboolean PM_InKnockDown( playerState_t *ps ); extern qboolean PM_InGetUp( playerState_t *ps ); extern void WP_SetSaber( gentity_t *ent, int saberNum, char *saberName ); extern void WP_RemoveSaber( gentity_t *ent, int saberNum ); +extern void WP_SaberFallSound( gentity_t *owner, gentity_t *saber ); extern saber_colors_t TranslateSaberColor( const char *name ); extern cvar_t *g_spskill; extern cvar_t *g_sex; +extern cvar_t *g_saberPickuppableDroppedSabers; #define MAX_BACTA_HEAL_AMOUNT 25 @@ -44,6 +46,8 @@ extern cvar_t *g_sex; #define ITMSF_VERTICAL 16 #define ITMSF_INVISIBLE 32 #define ITMSF_NOGLOW 64 +#define ITMSF_USEPICKUP 128 +#define ITMSF_STATIONARY 2048 //====================================================================== @@ -228,48 +232,197 @@ int Pickup_Battery( gentity_t *ent, gentity_t *other ) //====================================================================== -extern void G_SetSabersFromCVars( gentity_t *ent ); -void Pickup_Saber( gentity_t *self, qboolean hadSaber, qboolean saberSolo, char *saberType, char *saberColor ) +void G_CopySaberItemValues( gentity_t *pickUpSaber, gentity_t *oldSaber ) { + if ( oldSaber && pickUpSaber ) + { + oldSaber->spawnflags = pickUpSaber->spawnflags; + oldSaber->random = pickUpSaber->random; + oldSaber->flags = pickUpSaber->flags; + } +} + +gentity_t *G_DropSaberItem( const char *saberType, saber_colors_t saberColor, vec3_t saberPos, vec3_t saberVel, vec3_t saberAngles, gentity_t *copySaber ) +{//turn it into a pick-uppable item! + gentity_t *newItem = NULL; + if ( saberType + && saberType[0] ) + {//have a valid string to use for saberType + newItem = G_Spawn(); + if ( newItem ) + { + newItem->classname = G_NewString( "weapon_saber" ); + VectorCopy( saberPos, newItem->s.origin ); + G_SetOrigin( newItem, newItem->s.origin ); + VectorCopy( saberAngles, newItem->s.angles ); + G_SetAngles( newItem, newItem->s.angles ); + newItem->spawnflags = 128;/*ITMSF_USEPICKUP*/ + newItem->spawnflags |= 64;/*ITMSF_NOGLOW*/ + newItem->NPC_type = G_NewString( saberType );//saberType + //FIXME: transfer per-blade color somehow? + newItem->NPC_targetname = saberColorStringForColor[saberColor]; + newItem->count = 1; + newItem->flags = FL_DROPPED_ITEM; + G_SpawnItem( newItem, FindItemForWeapon( WP_SABER ) ); + newItem->s.pos.trType = TR_GRAVITY; + newItem->s.pos.trTime = level.time; + VectorCopy( saberVel, newItem->s.pos.trDelta ); + //newItem->s.eFlags |= EF_BOUNCE_HALF; + //copy some values from another saber, if provided: + G_CopySaberItemValues( copySaber, newItem ); + //don't *think* about calling FinishSpawningItem, just do it! + newItem->e_ThinkFunc = thinkF_NULL; + newItem->nextthink = -1; + FinishSpawningItem( newItem ); + newItem->delay = level.time + 500;//so you can't pick it back up right away + } + } + return newItem; +} + +extern void G_SetSabersFromCVars( gentity_t *ent ); +qboolean Pickup_Saber( gentity_t *self, qboolean hadSaber, gentity_t *pickUpSaber ) +{ + //NOTE: loopAnim = saberSolo, alt_fire = saberLeftHand, NPC_type = saberType, NPC_targetname = saberColor + qboolean foundIt = qfalse; + + if ( !pickUpSaber || !self || !self->client ) + { + return qfalse; + } + //G_RemoveWeaponModels( ent );//??? - if ( Q_stricmp( "player", saberType ) == 0 ) + if ( Q_stricmp( "player", pickUpSaber->NPC_type ) == 0 ) {//"player" means use cvar info G_SetSabersFromCVars( self ); + foundIt = qtrue; } else { saberInfo_t newSaber={0}; - if ( WP_SaberParseParms( saberType, &newSaber ) ) + qboolean swapSabers = qfalse; + + if ( self->client->ps.weapon == WP_SABER + && self->client->ps.weaponTime > 0 ) + {//can't pick up a new saber while the old one is busy (also helps to work as a debouncer so you don't swap out sabers rapidly when touching more than one at a time) + return qfalse; + } + + if ( pickUpSaber->count == 1 + && g_saberPickuppableDroppedSabers->integer ) + { + swapSabers = qtrue; + } + + if ( WP_SaberParseParms( pickUpSaber->NPC_type, &newSaber ) ) {//successfully found a saber .sab entry to use - //FIXME: what about dual sabers? int saberNum = 0; - if ( saberSolo//only supposed to use this one saber when grab this pickup - || newSaber.twoHanded //new saber is two-handed - || (hadSaber && self->client->ps.saber[0].twoHanded) )//old saber is two-handed + qboolean removeLeftSaber = qfalse; + if ( pickUpSaber->alt_fire ) + {//always go in the left hand + if ( !hadSaber ) + {//can't have a saber only in your left hand! + return qfalse; + } + saberNum = 1; + //just in case... + removeLeftSaber = qtrue; + } + else if ( !hadSaber ) + {//don't have a saber at all yet, put it in our right hand + saberNum = 0; + //just in case... + removeLeftSaber = qtrue; + } + else if ( pickUpSaber->loopAnim//only supposed to use this one saber when grab this pickup + || (newSaber.saberFlags&SFL_TWO_HANDED) //new saber is two-handed + || (hadSaber && (self->client->ps.saber[0].saberFlags&SFL_TWO_HANDED)) )//old saber is two-handed {//replace the old right-hand saber and remove the left hand one - WP_RemoveSaber( self, 1 ); + saberNum = 0; + removeLeftSaber = qtrue; } else - {//add it as a second saber - saberNum = 1; + {//have, at least, a saber in our right hand and the new one could go in either left or right hand + if ( self->client->ps.dualSabers ) + {//I already have 2 sabers + vec3_t dir2Saber, rightDir; + //to determine which one to replace, see which side of me it's on + VectorSubtract( pickUpSaber->currentOrigin, self->currentOrigin, dir2Saber ); + dir2Saber[2] = 0; + AngleVectors( self->currentAngles, NULL, rightDir, NULL ); + rightDir[2] = 0; + if ( DotProduct( rightDir, dir2Saber ) > 0 ) + { + saberNum = 0; + } + else + { + saberNum = 1; + //just in case... + removeLeftSaber = qtrue; + } + } + else + {//just add it as a second saber + saberNum = 1; + //just in case... + removeLeftSaber = qtrue; + } } - WP_SetSaber( self, saberNum, saberType ); - WP_SaberInitBladeData( self ); - if ( self->client->ps.saber[saberNum].style ) + if ( saberNum == 0 ) + {//want to reach out with right hand + if ( self->client->ps.torsoAnim == BOTH_BUTTON_HOLD ) + {//but only if already playing the pickup with left hand anim... + NPC_SetAnim( self, SETANIM_TORSO, BOTH_SABERPULL, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + } + if ( swapSabers ) + {//drop first one where the one we're picking up is + G_DropSaberItem( self->client->ps.saber[saberNum].name, self->client->ps.saber[saberNum].blade[0].color, pickUpSaber->currentOrigin, (float *)vec3_origin, pickUpSaber->currentAngles, pickUpSaber ); + if ( removeLeftSaber ) + {//drop other one at my origin + G_DropSaberItem( self->client->ps.saber[1].name, self->client->ps.saber[1].blade[0].color, self->currentOrigin, (float *)vec3_origin, self->currentAngles, pickUpSaber ); + } + } + } + else { - self->client->ps.saberStylesKnown |= (1<client->ps.saber[saberNum].style); + if ( swapSabers ) + { + G_DropSaberItem( self->client->ps.saber[saberNum].name, self->client->ps.saber[saberNum].blade[0].color, pickUpSaber->currentOrigin, (float *)vec3_origin, pickUpSaber->currentAngles, pickUpSaber ); + } } - if ( saberColor != NULL ) + if ( removeLeftSaber ) + { + WP_RemoveSaber( self, 1 ); + } + WP_SetSaber( self, saberNum, pickUpSaber->NPC_type ); + WP_SaberInitBladeData( self ); + if ( self->client->ps.saber[saberNum].stylesLearned ) + { + self->client->ps.saberStylesKnown |= self->client->ps.saber[saberNum].stylesLearned; + } + if ( self->client->ps.saber[saberNum].singleBladeStyle ) + { + self->client->ps.saberStylesKnown |= self->client->ps.saber[saberNum].singleBladeStyle; + } + if ( pickUpSaber->NPC_targetname != NULL ) {//NPC_targetname = saberColor - saber_colors_t saber_color = TranslateSaberColor( saberColor ); + saber_colors_t saber_color = TranslateSaberColor( pickUpSaber->NPC_targetname ); for ( int bladeNum = 0; bladeNum < MAX_BLADES; bladeNum++ ) { self->client->ps.saber[saberNum].blade[bladeNum].color = saber_color; } } + if ( self->client->ps.torsoAnim == BOTH_BUTTON_HOLD + || self->client->ps.torsoAnim == BOTH_SABERPULL ) + {//don't let them attack right away, force them to finish the anim + self->client->ps.weaponTime = self->client->ps.torsoAnimTimer; + } + foundIt = qtrue; } WP_SaberFreeStrings(newSaber); } + return foundIt; } extern void CG_ChangeWeapon( int num ); @@ -308,13 +461,16 @@ int Pickup_Weapon (gentity_t *ent, gentity_t *other) if ( ent->item->giTag == WP_SABER && (!hadWeapon || ent->NPC_type != NULL) ) {//didn't have a saber or it is specifying a certain kind of saber to use - //NOTE: alt_fire = saberSolo, NPC_type = saberType, NPC_targetname = saberColor - Pickup_Saber( other, hadWeapon, ent->alt_fire, ent->NPC_type, ent->NPC_targetname ); + if ( !Pickup_Saber( other, hadWeapon, ent ) ) + { + return 0; + } } if ( other->s.number ) {//NPC - if ( other->s.weapon == WP_NONE ) + if ( other->s.weapon == WP_NONE + || ent->item->giTag == WP_SABER ) {//NPC with no weapon picked up a weapon, change to this weapon //FIXME: clear/set the alt-fire flag based on the picked up weapon and my class? other->client->ps.weapon = ent->item->giTag; @@ -331,6 +487,26 @@ int Pickup_Weapon (gentity_t *ent, gentity_t *other) } } } + if ( ent->item->giTag == WP_SABER ) + {//picked up a saber + if ( other->s.weapon != WP_SABER ) + {//player picking up saber + other->client->ps.weapon = WP_SABER; + other->client->ps.weaponstate = WEAPON_RAISING; + if ( other->s.number < MAX_CLIENTS ) + {//make sure the cgame-side knows this + CG_ChangeWeapon( WP_SABER ); + } + else + {//make sure the cgame-side knows this + ChangeWeapon( other, WP_SABER ); + } + } + if ( !other->client->ps.SaberActive() ) + {//turn it/them on! + other->client->ps.SaberActivate(); + } + } if ( quantity ) { @@ -601,6 +777,25 @@ void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace) { gi.Printf( "Touch_Item: %s is not an item!\n", ent->classname); return; } + + if ( ent->item->giType == IT_WEAPON + && ent->item->giTag == WP_SABER ) + {//a saber + if ( ent->delay > level.time ) + {//just picked it up, don't pick up again right away + return; + } + } + + if ( other->s.number < MAX_CLIENTS + && (ent->spawnflags&ITMSF_USEPICKUP) ) + {//only if player is holing use button + if ( !(other->client->usercmd.buttons&BUTTON_USE) ) + {//not holding use? + return; + } + } + qboolean bHadWeapon = qfalse; // call the item-specific pickup function switch( ent->item->giType ) @@ -673,6 +868,21 @@ extern void CG_ItemPickup( int itemNum, qboolean bHadItem ); // fire item targets G_UseTargets (ent, other); + if ( ent->item->giType == IT_WEAPON + && ent->item->giTag == WP_SABER ) + {//a saber that was picked up + if ( ent->count < 0 ) + {//infinite supply + ent->delay = level.time + 500; + return; + } + ent->count--; + if ( ent->count > 0 ) + {//still have more to pick up + ent->delay = level.time + 500; + return; + } + } // wait of -1 will not respawn // if ( ent->wait == -1 ) { @@ -820,6 +1030,13 @@ void Use_Item( gentity_t *ent, gentity_t *other, gentity_t *activator ) { if ( (ent->svFlags&SVF_PLAYER_USABLE) && other && !other->s.number ) {//used directly by the player, pick me up + if ( (ent->spawnflags&ITMSF_USEPICKUP) ) + {//player has to be touching me and hit use to pick it up, so don't allow this + if ( !G_BoundsOverlap( ent->absmin, ent->absmax, other->absmin, other->absmax ) ) + {//not touching + return; + } + } GEntity_TouchFunc( ent, other, NULL ); } else @@ -893,15 +1110,21 @@ void FinishSpawningItem( gentity_t *ent ) { if ( ent->item->giType == IT_WEAPON && ent->item->giTag == WP_SABER && ent->NPC_type - && ent->NPC_type[0] - && Q_stricmp( "player", ent->NPC_type ) == 0 - && g_saber->string - && g_saber->string[0] - && Q_stricmp( "none", g_saber->string ) - && Q_stricmp( "NULL", g_saber->string ) ) - {//player's saber + && ent->NPC_type[0] ) + { saberInfo_t itemSaber; - WP_SaberParseParms( g_saber->string, &itemSaber ); + if ( Q_stricmp( "player", ent->NPC_type ) == 0 + && g_saber->string + && g_saber->string[0] + && Q_stricmp( "none", g_saber->string ) + && Q_stricmp( "NULL", g_saber->string ) ) + {//player's saber + WP_SaberParseParms( g_saber->string, &itemSaber ); + } + else + {//specific saber + WP_SaberParseParms( ent->NPC_type, &itemSaber ); + } //NOTE: should I keep this string around for any reason? Will I ever need it later? //ent->??? = G_NewString( itemSaber.model ); gi.G2API_InitGhoul2Model( ent->ghoul2, itemSaber.model, G_ModelIndex( itemSaber.model )); @@ -934,7 +1157,8 @@ void FinishSpawningItem( gentity_t *ent ) { // Hang in air? ent->s.origin[2] += 1;//just to get it off the damn ground because coplanar = insolid - if ( ent->spawnflags & ITMSF_SUSPEND) + if ( (ent->spawnflags&ITMSF_SUSPEND) + || (ent->flags&FL_DROPPED_ITEM) ) { // suspended G_SetOrigin( ent, ent->s.origin ); @@ -987,6 +1211,17 @@ void FinishSpawningItem( gentity_t *ent ) { ent->contents = 0; } + if ( (ent->spawnflags&ITMSF_STATIONARY) ) + {//can't be pushed around + ent->flags |= FL_NO_KNOCKBACK; + } + + if ( (ent->flags&FL_DROPPED_ITEM) ) + {//go away after 30 seconds + ent->e_ThinkFunc = thinkF_G_FreeEntity; + ent->nextthink = level.time + 30000; + } + gi.linkentity (ent); } @@ -1118,6 +1353,16 @@ void G_SpawnItem (gentity_t *ent, gitem_t *item) { G_Error("team name %s not recognized\n", ent->team); } } + + if ( ent->item + && ent->item->giType == IT_WEAPON + && ent->item->giTag == WP_SABER ) + {//weapon_saber item + if ( !ent->count ) + {//can only pick up once + ent->count = 1; + } + } ent->team = NULL; } @@ -1132,6 +1377,15 @@ void G_BounceItem( gentity_t *ent, trace_t *trace ) { vec3_t velocity; float dot; int hitTime; + qboolean droppedSaber = qtrue; + + if ( ent->item + && ent->item->giType == IT_WEAPON + && ent->item->giTag == WP_SABER + && (ent->flags&FL_DROPPED_ITEM) ) + { + droppedSaber = qtrue; + } // reflect the velocity on the trace plane hitTime = level.previousTime + ( level.time - level.previousTime ) * trace->fraction; @@ -1142,12 +1396,49 @@ void G_BounceItem( gentity_t *ent, trace_t *trace ) { // cut the velocity to keep from bouncing forever VectorScale( ent->s.pos.trDelta, ent->physicsBounce, ent->s.pos.trDelta ); + if ( droppedSaber ) + {//a dropped saber item + //FIXME: use NPC_type (as saberType) to get proper bounce sound? + WP_SaberFallSound( NULL, ent ); + } + // check for stop - if ( trace->plane.normal[2] > 0 && ent->s.pos.trDelta[2] < 40 ) { + if ( trace->plane.normal[2] > 0 && ent->s.pos.trDelta[2] < 40 ) + {//stop G_SetOrigin( ent, trace->endpos ); ent->s.groundEntityNum = trace->entityNum; + if ( droppedSaber ) + {//a dropped saber item + //stop rotation + VectorClear( ent->s.apos.trDelta ); + ent->currentAngles[PITCH] = SABER_PITCH_HACK; + ent->currentAngles[ROLL] = 0; + if ( ent->NPC_type + && ent->NPC_type[0] ) + {//we have a valid saber for this + saberInfo_t saber; + if ( WP_SaberParseParms( ent->NPC_type, &saber ) ) + { + if ( (saber.saberFlags&SFL_BOLT_TO_WRIST) ) + { + ent->currentAngles[PITCH] = 0; + } + } + } + pitch_roll_for_slope( ent, trace->plane.normal, ent->currentAngles, qtrue ); + G_SetAngles( ent, ent->currentAngles ); + } return; } + //bounce + if ( droppedSaber ) + {//a dropped saber item + //change rotation + VectorCopy( ent->currentAngles, ent->s.apos.trBase ); + ent->s.apos.trType = TR_LINEAR; + ent->s.apos.trTime = level.time; + VectorSet( ent->s.apos.trDelta, Q_irand( -300, 300 ), Q_irand( -300, 300 ), Q_irand( -300, 300 ) ); + } VectorAdd( ent->currentOrigin, trace->plane.normal, ent->currentOrigin); VectorCopy( ent->currentOrigin, ent->s.pos.trBase ); @@ -1189,11 +1480,48 @@ void G_RunItem( gentity_t *ent ) { ent->s.pos.trDelta[1] += crandom() * 40.0f; ent->s.pos.trDelta[2] += random() * 20.0f; } + else if ( (ent->flags&FL_DROPPED_ITEM) + && ent->item + && ent->item->giType == IT_WEAPON + && ent->item->giTag == WP_SABER ) + {//a dropped saber item, check below, just in case + int ignore = ENTITYNUM_NONE; + if ( ent->clipmask ) + { + mask = ent->clipmask; + } + else + { + mask = MASK_SOLID|CONTENTS_PLAYERCLIP;//shouldn't be able to get anywhere player can't + } + if ( ent->owner ) + { + ignore = ent->owner->s.number; + } + else if ( ent->activator ) + { + ignore = ent->activator->s.number; + } + VectorSet( origin, ent->currentOrigin[0], ent->currentOrigin[1], ent->currentOrigin[2]-1 ); + gi.trace( &tr, ent->currentOrigin, ent->mins, ent->maxs, origin, ignore, mask ); + if ( !tr.allsolid + && !tr.startsolid + && tr.fraction > 0.001f ) + {//wha? fall.... + ent->s.pos.trType = TR_GRAVITY; + ent->s.pos.trTime = level.time; + } + } return; } // get current position EvaluateTrajectory( &ent->s.pos, level.time, origin ); + if ( ent->s.apos.trType != TR_STATIONARY ) + { + EvaluateTrajectory( &ent->s.apos, level.time, ent->currentAngles ); + G_SetAngles( ent, ent->currentAngles ); + } // trace a line from the previous position to the current position if ( ent->clipmask ) @@ -1302,3 +1630,4 @@ void ItemUse_Bacta(gentity_t *ent) G_SoundOnEnt( ent, CHAN_VOICE, va( "sound/weapons/force/heal%d_%c.mp3", Q_irand( 1, 4 ), g_sex->string[0] ) ); } + diff --git a/code/game/g_local.h b/code/game/g_local.h index 3efaf18..ec03210 100644 --- a/code/game/g_local.h +++ b/code/game/g_local.h @@ -295,6 +295,7 @@ void G_PlayEffect( const char *name, const vec3_t origin ); void G_PlayEffect( const char *name, int clientNum ); void G_PlayEffect( const char *name, const vec3_t origin, const vec3_t fwd ); void G_PlayEffect( const char *name, const vec3_t origin, const vec3_t axis[3] ); +void G_PlayEffect( int fxID, const vec3_t origin ); void G_PlayEffect( int fxID, const vec3_t origin, const vec3_t fwd ); void G_PlayEffect( int fxID, const vec3_t origin, const vec3_t axis[3] ); void G_PlayEffect( int fxID, const int modelIndex, const int boltIndex, const int entNum, const vec3_t origin, int iLoopTime = qfalse, qboolean isRelative = qfalse );//iLoopTime 0 = not looping, 1 for infinite, else duration @@ -372,7 +373,10 @@ void G_Throw( gentity_t *targ, const vec3_t newDir, float push ); #define DAMAGE_CUSTOM_HUD 0x00002000 // really dumb, but.... #define DAMAGE_IMPACT_DIE 0x00004000 // if a vehicle hits a wall it should instantly die #define DAMAGE_DIE_ON_IMPACT 0x00008000 // ignores force-power based protection - +#define DAMAGE_SABER_KNOCKBACK1 0x00010000 // scale knockback based on saber1's knockbackScale value +#define DAMAGE_SABER_KNOCKBACK2 0x00020000 // scale knockback based on saber2's knockbackScale value +#define DAMAGE_SABER_KNOCKBACK1_B2 0x00040000 // scale knockback based on saber1's knockbackScale2 value +#define DAMAGE_SABER_KNOCKBACK2_B2 0x00080000 // scale knockback based on saber2's knockbackScale2 value // // g_missile.c // diff --git a/code/game/g_main.cpp b/code/game/g_main.cpp index 4d6c9dd..628a1cd 100644 --- a/code/game/g_main.cpp +++ b/code/game/g_main.cpp @@ -161,6 +161,7 @@ cvar_t *g_numEntities; cvar_t *g_saberAutoBlocking; cvar_t *g_saberRealisticCombat; +cvar_t *debug_subdivision; cvar_t *g_saberDamageCapping; cvar_t *g_saberMoveSpeed; cvar_t *g_saberAnimSpeed; @@ -170,6 +171,8 @@ cvar_t *g_debugSaberLock; cvar_t *g_saberLockRandomNess; cvar_t *g_debugMelee; cvar_t *g_saberRestrictForce; +cvar_t *g_saberPickuppableDroppedSabers; +cvar_t *g_dismemberProbabilities; cvar_t *g_speederControlScheme; @@ -596,7 +599,7 @@ void G_InitCvars( void ) { g_sex = gi.cvar ("sex", "f", CVAR_USERINFO | CVAR_ARCHIVE|CVAR_SAVEGAME|CVAR_NORESTART ); g_spskill = gi.cvar ("g_spskill", "0", CVAR_ARCHIVE | CVAR_SAVEGAME|CVAR_NORESTART); g_knockback = gi.cvar( "g_knockback", "1000", CVAR_CHEAT ); - g_dismemberment = gi.cvar ( "g_dismemberment", "3", CVAR_ARCHIVE );//0 = none, 1 = arms and hands, 2 = legs, 3 = waist and head, 4 = mega dismemberment + g_dismemberment = gi.cvar ( "g_dismemberment", "3", CVAR_ARCHIVE );//0 = none, 1 = arms and hands, 2 = legs, 3 = waist and head // for now I'm making default 10 seconds g_corpseRemovalTime = gi.cvar ( "g_corpseRemovalTime", "10", CVAR_ARCHIVE );//number of seconds bodies stick around for, at least... 0 = never go away g_synchSplitAnims = gi.cvar ( "g_synchSplitAnims", "1", 0 ); @@ -631,6 +634,8 @@ void G_InitCvars( void ) { g_saberAutoBlocking = gi.cvar( "g_saberAutoBlocking", "1", CVAR_CHEAT );//must press +block button to do any blocking g_saberRealisticCombat = gi.cvar( "g_saberMoreRealistic", "0", CVAR_CHEAT|CVAR_INIT );//makes collision more precise, increases damage + debug_subdivision = gi.cvar( "debug_subdivision", "0", CVAR_CHEAT|CVAR_INIT );//debug for dismemberment + g_dismemberProbabilities = gi.cvar ( "g_dismemberProbabilities", "1", CVAR_CHEAT|CVAR_INIT );//0 = ignore probabilities, 1 = use probabilities g_saberDamageCapping = gi.cvar( "g_saberDamageCapping", "1", CVAR_CHEAT );//caps damage of sabers vs players and NPC who use sabers g_saberMoveSpeed = gi.cvar( "g_saberMoveSpeed", "1", CVAR_CHEAT );//how fast you run while attacking with a saber g_saberAnimSpeed = gi.cvar( "g_saberAnimSpeed", "1", CVAR_CHEAT );//how fast saber animations run @@ -640,6 +645,7 @@ void G_InitCvars( void ) { g_saberLockRandomNess = gi.cvar( "g_saberLockRandomNess", "2", CVAR_ARCHIVE );//just for debugging/development, controls frequency of saberlocks g_debugMelee = gi.cvar( "g_debugMelee", "0", CVAR_CHEAT );//just for debugging/development, test kicks and grabs g_saberRestrictForce = gi.cvar( "g_saberRestrictForce", "0", CVAR_ARCHIVE );//restricts certain force powers when using a 2-handed saber or 2 sabers + g_saberPickuppableDroppedSabers = gi.cvar( "g_saberPickuppableDroppedSabers", "0", CVAR_CHEAT );//lets you pick up sabers that are dropped g_AIsurrender = gi.cvar( "g_AIsurrender", "0", CVAR_CHEAT ); g_numEntities = gi.cvar( "g_numEntities", "0", 0 ); @@ -1473,7 +1479,7 @@ qboolean G_RagDoll(gentity_t *ent, vec3_t forcedAngles) } VectorCopy(forcedAngles, G2Angles); - forcedAngles[0] = forcedAngles[2] = 0; + //forcedAngles[0] = forcedAngles[2] = 0; if (ent->client->ps.heldByClient <= ENTITYNUM_WORLD) { diff --git a/code/game/g_savegame.cpp b/code/game/g_savegame.cpp index 0a6e53e..5d721aa 100644 --- a/code/game/g_savegame.cpp +++ b/code/game/g_savegame.cpp @@ -632,6 +632,79 @@ static LPCSTR SG_GetChidText(unsigned long chid) return chidtext; } +extern void WP_SaberSetDefaults( saberInfo_t *saber, qboolean setColors); +static void SG_ConvertRetailSaberinfoToNewSaberinfo( void *sabData, saberInfo_t *saberNew ) +{ + saberInfoRetail_t *saberRetail = ((saberInfoRetail_t *)(sabData)); + + for ( int saberNum = 0; saberNum < 2; saberNum++ ) + { + WP_SaberSetDefaults( &saberNew[saberNum], qfalse ); + if ( !saberRetail[saberNum].activeBlocking ) + { + saberNew[saberNum].saberFlags |= SFL_NOT_ACTIVE_BLOCKING; + } + memcpy( saberNew[saberNum].blade, saberRetail[saberNum].blade, sizeof( saberRetail[saberNum].blade ) ); + saberNew[saberNum].breakParryBonus = saberRetail[saberNum].breakParryBonus; + saberNew[saberNum].brokenSaber1 = saberRetail[saberNum].brokenSaber1; + saberNew[saberNum].brokenSaber2 = saberRetail[saberNum].brokenSaber2; + if ( !saberRetail[saberNum].disarmable ) + { + saberNew[saberNum].saberFlags |= SFL_NOT_DISARMABLE; + } + saberNew[saberNum].disarmBonus = saberRetail[saberNum].disarmBonus; + saberNew[saberNum].forceRestrictions = saberRetail[saberNum].forceRestrictions; + saberNew[saberNum].fullName = saberRetail[saberNum].fullName; + if ( !saberRetail[saberNum].lockable ) + { + saberNew[saberNum].saberFlags |= SFL_NOT_LOCKABLE; + } + saberNew[saberNum].lockBonus = saberRetail[saberNum].lockBonus; + saberNew[saberNum].maxChain = saberRetail[saberNum].maxChain; + saberNew[saberNum].model = saberRetail[saberNum].model; + saberNew[saberNum].name = saberRetail[saberNum].name; + saberNew[saberNum].numBlades = saberRetail[saberNum].numBlades; + saberNew[saberNum].parryBonus = saberRetail[saberNum].parryBonus; + if ( saberRetail[saberNum].returnDamage ) + { + saberNew[saberNum].saberFlags |= SFL_RETURN_DAMAGE; + } + saberNew[saberNum].singleBladeStyle = saberRetail[saberNum].singleBladeStyle; + if ( saberRetail[saberNum].singleBladeThrowable ) + { + saberNew[saberNum].saberFlags |= SFL_SINGLE_BLADE_THROWABLE; + } + saberNew[saberNum].skin = saberRetail[saberNum].skin; + saberNew[saberNum].soundLoop = saberRetail[saberNum].soundLoop; + saberNew[saberNum].soundOff = saberRetail[saberNum].soundOff; + saberNew[saberNum].soundOn = saberRetail[saberNum].soundOn; + if ( saberRetail[saberNum].style != SS_NONE + && saberRetail[saberNum].style < SS_NUM_SABER_STYLES ) + {//OLD WAY: only allowed ONE style + //learn only this style + saberNew[saberNum].stylesLearned = (1<iReadSize); - memset(&pbData[iReadSize], 0, iSize-iReadSize); // zero out new objectives that weren't in old-format save file + if ( iSize == (int)(iReadSize+((sizeof(saberInfo_t)-sizeof(saberInfoRetail_t))*2)) ) + { + gclient_t newClient; + const int preSaberDataSize = ((int)&newClient.ps.saber[0]-(int)&newClient); + memcpy( &newClient, pbData, preSaberDataSize ); + SG_ConvertRetailSaberinfoToNewSaberinfo( ((void *)(&((gclient_t *)(pbData))->ps.saber[0])), &newClient.ps.saber[0] ); + memcpy( &newClient.ps.dualSabers, pbData+preSaberDataSize+(sizeof(saberInfoRetail_t)*2), sizeof(newClient)-(preSaberDataSize+(sizeof(saberInfo_t)*2)) ); + memcpy( pbData, &newClient, sizeof(gclient_t) ); + } + else + {//opps, not a saberInfo size mismatch, some other FUBAR-ness... + G_Error(va("EvaluateFields(): variable-sized chunk '%s' without handler!",SG_GetChidText(ulChid))); + } break; -*/ + default: // won't return... // @@ -885,7 +969,7 @@ static void ReadGEntities(qboolean qbAutosave) { gclient_t tempGClient; - EvaluateFields(savefields_gClient, (byte *)&tempGClient, (byte *)pEntOriginal->client, 'GCLI', sizeof(*pEnt->client),qfalse); + EvaluateFields(savefields_gClient, (byte *)&tempGClient, (byte *)pEntOriginal->client, 'GCLI', sizeof(*pEnt->client),qtrue);//qfalse); // can we pinch the original's client handle or do we have to alloc a new one?... // @@ -1098,13 +1182,13 @@ void ReadLevel(qboolean qbAutosave, qboolean qbLoadTransition) //Read & throw away gclient info gclient_t junkClient; - EvaluateFields(savefields_gClient, (byte *)&junkClient, (byte *)&level.clients[0], 'GCLI', sizeof(*level.clients), qfalse); + EvaluateFields(savefields_gClient, (byte *)&junkClient, (byte *)&level.clients[0], 'GCLI', sizeof(*level.clients), qtrue);//qfalse); + + ReadLevelLocals(); // level_locals_t level //Read & throw away objective info objectives_t junkObj[MAX_MISSION_OBJ]; gi.ReadFromSaveGame('OBJT', (void *) &junkObj, 0); - - ReadLevelLocals(); // level_locals_t level } else { @@ -1113,7 +1197,7 @@ void ReadLevel(qboolean qbAutosave, qboolean qbLoadTransition) assert(level.maxclients == 1); // I'll need to know if this changes, otherwise I'll need to change the way things work gclient_t GClient; - EvaluateFields(savefields_gClient, (byte *)&GClient, (byte *)&level.clients[0], 'GCLI', sizeof(*level.clients), qfalse); + EvaluateFields(savefields_gClient, (byte *)&GClient, (byte *)&level.clients[0], 'GCLI', sizeof(*level.clients), qtrue);//qfalse); level.clients[0] = GClient; // struct copy ReadLevelLocals(); // level_locals_t level } diff --git a/code/game/g_spawn.cpp b/code/game/g_spawn.cpp index 910f833..473bc9a 100644 --- a/code/game/g_spawn.cpp +++ b/code/game/g_spawn.cpp @@ -315,10 +315,12 @@ field_t fields[] = { {"NPC_target4", FOFS(target4), F_LSTRING},//NPC_spawner only {"NPC_type", FOFS(NPC_type), F_LSTRING}, {"ownername", FOFS(ownername), F_LSTRING}, - //for saber + //for weapon_saber {"saberType", FOFS(NPC_type), F_LSTRING}, {"saberColor", FOFS(NPC_targetname), F_LSTRING}, - {"saberSolo", FOFS(alt_fire), F_INT}, + {"saberLeftHand", FOFS(alt_fire), F_INT}, + {"saberSolo", FOFS(loopAnim), F_INT}, + {"saberPitch", FOFS(random), F_FLOAT}, //freaky camera shit {"startRGBA", FOFS(startRGBA), F_VECTOR4}, {"finalRGBA", FOFS(finalRGBA), F_VECTOR4}, diff --git a/code/game/g_svcmds.cpp b/code/game/g_svcmds.cpp index 238fb7c..2e30591 100644 --- a/code/game/g_svcmds.cpp +++ b/code/game/g_svcmds.cpp @@ -18,6 +18,8 @@ extern void G_Knockdown( gentity_t *self, gentity_t *attacker, const vec3_t push extern void WP_SetSaber( gentity_t *ent, int saberNum, char *saberName ); extern void WP_RemoveSaber( gentity_t *ent, int saberNum ); extern saber_colors_t TranslateSaberColor( const char *name ); +extern qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); +extern qboolean WP_UseFirstValidSaberStyle( gentity_t *ent, int *saberAnimLevel ); extern void G_SetWeapon( gentity_t *self, int wp ); extern stringID_table_t WPTable[]; @@ -182,7 +184,7 @@ static void Svcmd_Saber_f() gi.cvar_set( "g_saber", saber ); WP_SetSaber( &g_entities[0], 0, saber ); - if ( saber2 && saber2[0] && !g_entities[0].client->ps.saber[0].twoHanded ) + if ( saber2 && saber2[0] && !(g_entities[0].client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) {//want to use a second saber and first one is not twoHanded gi.cvar_set( "g_saber2", saber2 ); WP_SetSaber( &g_entities[0], 1, saber2 ); @@ -737,6 +739,7 @@ static void Svcmd_ForceSetLevel_f( int forcePower ) extern qboolean PM_SaberInStart( int move ); extern qboolean PM_SaberInTransition( int move ); extern qboolean PM_SaberInAttack( int move ); +extern qboolean WP_SaberCanTurnOffSomeBlades( saberInfo_t *saber ); void Svcmd_SaberAttackCycle_f( void ) { if ( !&g_entities[0] || !g_entities[0].client ) @@ -751,32 +754,64 @@ void Svcmd_SaberAttackCycle_f( void ) return; } - if ( self->client->ps.dualSabers ) + if ( self->client->ps.dualSabers ) {//can't cycle styles with dualSabers, so just toggle second saber on/off - if ( self->client->ps.saber[1].Active() ) - {//turn it off - self->client->ps.saber[1].Deactivate(); - G_SoundIndexOnEnt( self, CHAN_WEAPON, self->client->ps.saber[0].soundOff ); - } - else if ( !self->client->ps.saber[0].Active() ) - {//first one is off, too, so just turn that one on - if ( !self->client->ps.saberInFlight ) - {//but only if it's in your hand! - self->client->ps.saber[0].Activate(); + if ( WP_SaberCanTurnOffSomeBlades( &self->client->ps.saber[1] ) ) + {//can turn second saber off + if ( self->client->ps.saber[1].ActiveManualOnly() ) + {//turn it off + qboolean skipThisBlade; + for ( int bladeNum = 0; bladeNum < self->client->ps.saber[1].numBlades; bladeNum++ ) + { + skipThisBlade = qfalse; + if ( WP_SaberBladeUseSecondBladeStyle( &self->client->ps.saber[1], bladeNum ) ) + {//check to see if we should check the secondary style's flags + if ( (self->client->ps.saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + { + skipThisBlade = qtrue; + } + } + else + {//use the primary style's flags + if ( (self->client->ps.saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + { + skipThisBlade = qtrue; + } + } + if ( !skipThisBlade ) + { + self->client->ps.saber[1].BladeActivate( bladeNum, qfalse ); + G_SoundIndexOnEnt( self, CHAN_WEAPON, self->client->ps.saber[1].soundOff ); + } + } } + else if ( !self->client->ps.saber[0].ActiveManualOnly() ) + {//first one is off, too, so just turn that one on + if ( !self->client->ps.saberInFlight ) + {//but only if it's in your hand! + self->client->ps.saber[0].Activate(); + } + } + else + {//turn on the second one + self->client->ps.saber[1].Activate(); + } + return; } - else - {//turn on the second one - self->client->ps.saber[1].Activate(); - } - return; } - else if ( self->client->ps.saber[0].numBlades > 1 )//self->client->ps.saber[0].type == SABER_STAFF ) + else if ( self->client->ps.saber[0].numBlades > 1 + && WP_SaberCanTurnOffSomeBlades( &self->client->ps.saber[0] ) )//self->client->ps.saber[0].type == SABER_STAFF ) {//can't cycle styles with saberstaff, so just toggles saber blades on/off if ( self->client->ps.saberInFlight ) {//can't turn second blade back on if it's in the air, you naughty boy! return; } + /* + if ( self->client->ps.saber[0].singleBladeStyle == SS_NONE ) + {//can't use just one blade? + return; + } + */ qboolean playedSound = qfalse; if ( !self->client->ps.saber[0].blade[0].active ) {//first one is not even on @@ -785,28 +820,71 @@ void Svcmd_SaberAttackCycle_f( void ) return; } - for ( int i = 1; i < self->client->ps.saber[0].numBlades; i++ ) + qboolean skipThisBlade; + for ( int bladeNum = 1; bladeNum < self->client->ps.saber[0].numBlades; bladeNum++ ) { - if ( !self->client->ps.saber[0].blade[i].active ) + if ( !self->client->ps.saber[0].blade[bladeNum].active ) {//extra is off, turn it on - self->client->ps.SaberBladeActivate( 0, i, qtrue ); + self->client->ps.saber[0].BladeActivate( bladeNum, qtrue ); } else {//turn extra off - self->client->ps.SaberBladeActivate( 0, i, qfalse ); - if ( !playedSound ) + skipThisBlade = qfalse; + if ( WP_SaberBladeUseSecondBladeStyle( &self->client->ps.saber[1], bladeNum ) ) + {//check to see if we should check the secondary style's flags + if ( (self->client->ps.saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + { + skipThisBlade = qtrue; + } + } + else + {//use the primary style's flags + if ( (self->client->ps.saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + { + skipThisBlade = qtrue; + } + } + if ( !skipThisBlade ) { - G_SoundIndexOnEnt( self, CHAN_WEAPON, self->client->ps.saber[0].soundOff ); - playedSound = qtrue; + self->client->ps.saber[0].BladeActivate( bladeNum, qfalse ); + if ( !playedSound ) + { + G_SoundIndexOnEnt( self, CHAN_WEAPON, self->client->ps.saber[0].soundOff ); + playedSound = qtrue; + } } } } return; } - //FIXME: if dualSabers and both on, do something here, too... maybe toggle the second one on/off? + int allowedStyles = self->client->ps.saberStylesKnown; + if ( self->client->ps.dualSabers + && self->client->ps.saber[0].Active() + && self->client->ps.saber[1].Active() ) + { + allowedStyles |= (1<client->ps.saber[0].stylesLearned&(1<client->ps.saber[1].stylesLearned&(1<client->ps.saber[0].stylesForbidden&(1<client->ps.saber[1].stylesForbidden&(1<client->ps.saber[0].stylesForbidden&(1<client->ps.saber[1].stylesForbidden&(1<client->ps.saberStylesKnown ) + if ( !allowedStyles ) { return; } @@ -823,7 +901,7 @@ void Svcmd_SaberAttackCycle_f( void ) saberAnimLevel++; int sanityCheck = 0; while ( self->client->ps.saberAnimLevel != saberAnimLevel - && !(self->client->ps.saberStylesKnown&(1<client->ps.saberStylesKnown&(1<s.number ) { cg.saberAnimLevelPending = saberAnimLevel; @@ -1121,7 +1201,7 @@ qboolean ConsoleCommand( void ) { Svcmd_ForceSetLevel_f( FP_PROTECT ); Svcmd_ForceSetLevel_f( FP_ABSORB ); Svcmd_ForceSetLevel_f( FP_SEE ); - for ( int i = SS_FAST; i < SS_NUM_SABER_STYLES; i++ ) + for ( int i = SS_NONE+1; i < SS_NUM_SABER_STYLES; i++ ) { g_entities[0].client->ps.saberStylesKnown |= (1<s.eType == ET_ITEM ) {//item, see if we could actually pick it up + if ( (target->spawnflags&128/*ITMSF_USEPICKUP*/) ) + {//player has to be touching me and hit use to pick it up, so don't allow this + if ( !G_BoundsOverlap( target->absmin, target->absmax, ent->absmin, ent->absmax ) ) + {//not touching + return qfalse; + } + } if ( !BG_CanItemBeGrabbed( &target->s, &ent->client->ps ) ) {//nope, so don't indicate that we can use it return qfalse; diff --git a/code/game/g_vehicles.h b/code/game/g_vehicles.h index 0b12152..91fa499 100644 --- a/code/game/g_vehicles.h +++ b/code/game/g_vehicles.h @@ -48,6 +48,7 @@ typedef struct int iLoopSound; //index of loopSound float fSpeed; //speed of projectile/range of traceline float fHoming; //0.0 = not homing, 0.5 = half vel to targ, half cur vel, 1.0 = all vel to targ + float fHomingFOV; int iLockOnTime; //0 = no lock time needed, else # of ms needed to lock on int iDamage; //damage done when traceline or projectile directly hits target int iSplashDamage;//damage done to ents in splashRadius of end of traceline or projectile origin on impact @@ -60,7 +61,7 @@ typedef struct qboolean bExplodeOnExpire; //when iLifeTime is up, explodes rather than simply removing itself } vehWeaponInfo_t; //NOTE: this MUST stay up to date with the number of variables in the vehFields table!!! -#define NUM_VWEAP_PARMS 24 +#define NUM_VWEAP_PARMS 25 #define VWFOFS(x) ((int)&(((vehWeaponInfo_t *)0)->x)) diff --git a/code/game/game.zip b/code/game/game.zip new file mode 100644 index 0000000000000000000000000000000000000000..d115f9207d19d5ceb9467d70093d67ec2cb56b0b GIT binary patch literal 896134 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%0A5Oigj~~$;j_p=1eJw?- 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%0D5+#96A?4}p_vV}G$>SU2k* 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
4ikB~aGTClo|bw}z*^3-U-u;3lN&lN!VId65h; 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
Ql1N)JSTBy22tfh4^QnNjAq@iH{ZIfS}-8X#)o z(;4VPATaI>{Fzc4sUtMeVk3_I&=BoAVPZ4n2q|4`|1?YT2|+hvYm9~offb7;o`peL zin%!6#t6ZEW8z?=&{f%!A3*YAiK&s1{W~LzRLNK?t*NT{bSG6~HUo(4ZsB&RJ;K^J zZP3i}giU}GaY{A$B=>Jglx>6EhG?hy zNU+P1I&oB{B|B9hvIkhMgpWhyW10GTSgf7$0_~HzpGxwu-o>dBt`79Um4tKLFDlc~ zrbfQTvf9R20Q0UPoN;bX&iS1`_iSDAksf(70biDJEfw){8CM|F zQZD7NOwRLGi3EKd%;o*$g1c`RkmlNeG~|trOy04dkB{H{jD7a6kAHpz|0GJv1gYO2 zv!tYc4@66z3)at#)$j|1w0v4*Yh(hx^XUXM+O?U51@yM2@%T|&qman*$zY+0EtMFyipdoTXypIvC-I6E+ zagRUsoT5xDfxP_gib}>eTH1yeV@k6; zv$M3vM-U87hz)C2^UP#M-qRO!2#nX?wy5(Wdm=F9!B~A|QnuM~-8&^LwK>@)_qYaS zZbiCcpNWGBOzFLlRIm|;B(LRj^`%Uyo{}<%TEg}+61U`XOX8ccM?rX4xThv*Vmcrv zmX7G2CS7CDti+#qYaJ>Fe4cO*`x#PMK?P4&By6674Dl*9e9G2OGPt1{U-(@%IVDQ2 z5E`Cojp*_|6J4&{9^;#DB&Q%GwuR+Fo*K$@)7U6~9_fZ6aKNe+1Xvefl|aK#c4tNZ zN&d=>_Ol5!$;vC0{3ayrDe@;BC*zOy^2r~yTEM5i{;Ds9QGKmg`l3)-AxPQbd*imV zsyt62XaHzdB*mFJZ&@fH#6tCz^gArRVNOR{6EVVvab5<}tnZ`1&%L&6gaj{=QLZB; zN+0a!h+gY{Q%O)m45AJistyp%dDhSdXEr1!tobgY1daSf|4(vQ*~p^}GOA0?py73l z{x3K6^I?BbA2hRx%$jCiQ`tBxvn^LO}l_iL?mnT z3&v-9x8h{@7|Q{#k99dfIv@OQ9(1sHRE528u$>`Z<#v4t8R2*Gbp)!5h3xqcHaaC| z!K-80f~KfHVoR{0w*0p=C*`Y{(vW8|kXr4$^Ra4nIQsKo3E-_~>-9Wkn4^V3^_}2l zD%X}ly*zs%78#+C7Crek@tMXs%y$F|n|g>%iov=ToH8GhUS%T+(!2CB_fGSuGCP{n zd6095-_6G`A=`4Sa9n~>h5=Us`^EEyXPwTYDx*{v8_%ok@ay5>XoUZ&GFxM*Z@wug zgA@P36#I@CE%c7Z_iW`D-)4JT0C!)LXvB`C>JK_sZ&NR>>Uc57 ze3d8nO&Qqus$0p#*JTrX&2AIYi?VebmCd`jYBoML2ZLtG#Bzjq{Sq(D-LwHfDc-}f z`HfDyantX&I_0lux!#lAXz35)xG z?OjW6(?AeDx03&Zxj;*E012c@K&yay#6n7ngiuuxWobhl8O2T`4*l=!H?xn~hg}!S zjcc;roqf&D^P6Xy5x~F4QJg({+}q!5eqLR^pU(4Zb~Hqa%!%xo$8q1cF30eXK18x% z-{DHg&B|5O-a0%pG8KWc?GSsQt~P+dLC6Gz*;2l1WIO}dz%NS9!D#6yCKTZ$8we$v z3@Zz=uY6FIY$D&W{G21X@FimUokYahJ*S103!wpsS0ADvgg`xM*b)h!9!@@w6;wF6 zAe)>}xD=&0{_W&N;;3M+0R7t@loF1dEii+5Jh6A3JQ4(D&m9&$_WV&s<0ricD_WUI zOyP-%`4A!=uL<16!^TP7qu=qh$xcZvS|U3o9WHqN?_$F}k@bu5}8}&K)8d`Svb6W1U{jN z!&R-?H%0_Ew{lLw_W;=>+qB;1CDnL9aEVsj5O>#LTutp*t=2v%b(+#|VH#kgp@T4CW6P}tpqPEOXc}kL*~c&Pw6hk$ zM;p#Q*lqN_zzT}TF z4(%3#329ot5t*Op!yKi-r!llqKf!ybd0|MUEXD=wcTn%$J~%cQknlF#sEGST78t<> zX_3s37{(@{@FIZ4bSwQtHaB*4qD@N1O}AEaRk&q$tCp;UHi^0OkYi@B@8!>?ZC8t0 zc_tXt3^Bw$Voi|Tf%-}nLS7pc!IuZ=YkOqd+U0y$rH}_yQsH}I3w@OTYm1}@6aWAK2mrH_o-i>aFbf(T0019v000aC002QrUsqvmaA7WEaB$o_ zYjfI2wx3Cr|3fFYHj5pw0LL?_IL;Kt*kNOX7f5DPsT3un2DBCuBMB4lB=@)9b53_l z-I5^SnY}O9Ol+j?)7|I&YAlO++`i{5p1Be8T%R*Lh7a%{Sg>HiY|mrO&gd)r9F7+Y zHgP>3u}KiJo7OuPayttA=H00EHj)spESa9+wWLBgc*A97oMzOEADX z*n3i4_p|q;d(#^IYR?z;=qBW2dpzSChaXsbPwoTPVflGwMlS&MzXKEEvL)I*?4g9b z1cw1+)=%Kq8}<@^y?BA6OE|oAIT{2@-|6640g_#Q7U5@WJhQ{dTH#98Gz?bWU!230 zeg6!wxK9WueJ_H4^ceV&AB1rsd^~mrgfSl^W*mf8v~m}G=Eej;%(koz)5NmlSukIu zQ@$e?{*Z10_Z`REl3wX}lTJX#jz0;iZ%IcCVms!5MO|c0NU2y>XTnyT%}{+s!JMyV zJVd?4ra=YugwLD+e%mq9eFD_@uy6p_Wng>d{ge*N@!UDQUB)peGWPtG{pZ<-;jq^Q zA-sAILWn5CJ&mq|dp-gE#ZUe+m-Fcz#<;M z=iXuL&Uv~!ZNRBM;062p$OR&Uq#xI6wF+y%zcsNX+U|hID7IpW3LCUR4|T3bXT9OO zN-`HejV{}R;fH>^UeP}__A9KcCS6=LFGszP?S8*=-u`Aheb>7>muy)YcCOofTv#po zEVQS52-^kb6$b$&1K6m(T||c-pGLStd>={(A&-}+)DXRj)77(y?L}O0<5rw_W5;3O z?ZS&<#{VL2{C3KAW<~`bM-daY(QvfC#>qf-dMdG*E~^QnP6iW`HgEZ1g%1VE0 z^}54$cQ`&hN@w zZa6cwi8N^io(BW~o-P1>&h?cm>^aJS9D~d!{xKHr+m5@80Q-zO5NG_JW8%ODSqucbqR6yz$Y0 z#xo1wp8T`ta`)(+*zDGgQzVx-a>ly-tZeTtzY0FZRZMW(=&;~?C7|L zj}qcXAf(YDoNhqp08Q3FWnx+NSG9C=6B{POpbCXAlVFLVLWu}PHm?7nTNe-30%k|G znquN6zxpO6trv0WhP4k^h9QN=i>FdNKC!6?Q zh;1Fkh``M#KB{TBjl5tbaJyW9ywBn+W*a}kEG&3J1lxdL!Pa@(QF|nc>yJfoolxBP zBPf1@+fEUPLbEH1wvnhj9!Y359R4J5*f4OIXjtXQTGm=4`=g&E_#-=fIePC0<2xr< z`32#q_P~x~8{_#3C|e&8CL`6wGMb&c@KglAQ5;eTT1k!iZOHArfeoSM6)dDjpUIF* zP-EwM0J=UhUIY*widc9aIN}e-o`VZ3{)R9LmeH06wKqm@P+8RzBW^|xyW}z0$f(Qh z@GS7mwGTovV)$MiQ9Kc=-NN{eh_mJX@JTP6(mIB#Gw|$4M&{bA6ia~I8QLr9`y_iP zXQ(Wp!EZ}DBqlD42Xc}96f_0k;!vfM zJXQKupd9C`jqm@WSh!xR)Q|UHtB;LZ<)|jmq4q00vOMB-WGggl$TD%OMej8cy(?@m zR}bNZwbYR4eyP57{iXD*rLqAW#qd!0f+TLqTw^Ngt1kN0G}W>OckV(Y!;s3LP~x4y zDV<1QKU`fUaOda~-Ey$lVn89(1SYC5+aGgD*Zd-;vzj21y*XtjM`$PkGcpI_(%&GV zMDYydO5z|(0SM#@o7YzYTh_Rz_WHbe-Mnm%y1mi+Zm;$Jtl4@G@$Gf*e01HuYPXdx zqyy{Xk{S%lvd8ff+=&O$OGFn^@#3|qvQCVL;Alqj$w%-cgRm7W9`a`E-sLM8>hY*T zQxf}vA3lF-{`!TzI0a=s@q{*S99O_9nxk$y!`3@sByCs~$5rdc$-pMAAvO|~X{Ac4 zYLQVYl3jEgTgX|}wP~FrD|b zoS8ZC>}mA;;>sj{)*-kY4QFAn%5h7UBe=IuD%fw~XAW#OR{MO&n*EKPO-d z8v>EQ*EtAxpxMhJSxB~WgmzpD`|(HkA8VYE;;n*&(q4aWuE4tQt}yf-3=LdovdE}qV?N~}CT>&Q zDoiG@lDz;>r242otl;18n%(o!)i8%WLfKZ(Xo~_?yLp}mM7vfqPt$Q(;D#TXA$oyF zdfsjh-_?K4xT7jH$G&ZFQ;jpS{Ql@ff6fLG)xS3T=UKOTw|%Zr00|?IlcBPLG{dqk zI{&zCzb5VMx$|2V&4Q)ph%^99v=TOyl5dmukoAc3p6YO=$y#D^Cc;32aI{tU+#C);5oFU7+bDrt zC@c0qa^_PAXn#)FhzOR7QL^uE-&k4U3sW3FlbuVRfYCUjC;Hjz`}@gx0lSM`&-oZ- zxA~mMNkKnN|L||t9=&$Oeqo|AnZhVc^MMp24fp*b2LVw z?x22nJSkX~d%+m<;S#{Q_n#Xm?DgYX@vv!#GS#N=w7ZI4QjG?~CVCA!({^22O4Pevh$PPzT+qmKyF84FRCeXm zqd%QfjXmP8HN#N><+&$=8BEPP!MwcB4n%gB07C%gVd`-iVNosQReo=KOElrZGEDN_ zl-{;fVt#$*wpy29Hzgm}50aTRHQ>7}0kSTp?_hi2;yc{4AK;TrXGAXYDEcJ=6O@m) zV=Re46fm|I(bB`i%$Hv5ErsZpJ&pw+Q2!DXB8o|Vm77oPKtKY*m);^ z#;Qk~R=tv|>i$CtO4@u)Pi>@J$@%;e?u>P8KIm~Ns8nc>uQ=@ zP&o+#cGZSPB?g8q4|}TET!2HNS5jK+r4`=Ir2&a8!#j8@ORaPJYxKGH<%M2jl;i=| z`_6vA15h0d&LD%}EfV#5c{|2x2Z^L)1PNT0kaI zS?90wQ~^|gGi7lFN4Qb6L}mq0PT>DFX4qoFoaOwM){-H=?XB#G2)TVungy1?G}Q$E zrgQ+G5c88l`Q<76>``~m=mG{(t4i5aAZFB6IyE{lRaRW77&8};5+w5qV3!EE3gJq& zb5Ba=l$F)9{qnZD=oh);*Gm5ik|e;Bcu3W#G}WjUmiml{gld3eCn)$oA<|Zc9S|<` zeD8r`2;`+S@(_n>7DODW{*{PG6Bw2yh#tkR=Kx9v#=Hj_|6+ z)EwJ?5GrdD26GDRVAB}Q*+6~;rQ=`pK9<*$p;AaS zN+*E4dhIWIVl<%6Wr6vmMhgO+=9JD5 z5+{m5?`6yPJE1YmcYx>_gnb|f!=6Mu=p0LcJdDuZfN+X&d%9sLFx#<>pl)o}Pwlp5 zEedyMNS-*%DoHRdJjmj ze@Th`cxz{-f6~NHnwK%WhRyAB-Lx+n(7kgnHO$#uy?6bI=VHFVcp3m|as~agz^>QT zvDmIv0I=l=v6E!E;Q84D?Z)7D!m;cs4VJQCk&@2GP>kvWU?g5OwQ$W7vB{ z+A81wYOwiM9k3}30-^i2)wKP$$iX0d5Za$Vr(bHV%tx(+c6zGS>{2hpM7Z9Io3259 zX`m=1Xi@ampJ91UoH!|RQE^UA(28=yX8*E1%zBgMr*dR;=+hm8=g+ll-I351)EAdo z1)ph;62k+UuBP6XjR6Wx1rPOl!NyL{zeddbhiUOv^ksM)q2<%OMy1BD0 zfb7f8L68T)CfF`v!9a^S+;&(Q8}>xkje~uQ3(Qr7`_$Elt{BA)WSwV$=K%Lv+$Lp@ zAp_`f2o+!aBh|Q>G??OCfccob zGhjtRqR^F>C?e8p6S5|lP6nWwZV(4gm@$QynBFl4H)21Lh<#Aclj@Ir7d=P-T|lD0 zIHSN2{W)>NNQ9&~j+#Wt4lG5=SZ*BT;hf)sVj5EiJQKHel$tNl6+1Oft21h%nw$rC z=Yh?E$`nGwslnO<~K>LC}5h=iPm@6pdB8s z?JScroo*Kd#|#&1#Q8E?1}+y2Mb4xJshGxAGuPvaAsKp&Xm^1Q6*R#y1_d^ph{|CC zj#N5p6)&=daRp-62@N?xcbD?2KOZUQTmx}2Bo{FMcq1}_A?UT$)@4#>=NU(u#MpER z47|Q@xd43otOevNj z{~l%i#*SyoqZhBDLs1~n0Tg(Hde4UZy`=|n)9mCLMt85!KYs1U6x`Ca|Bw^&LNkS+ z3=YbT>U0z>B5WZ^dN%gc{@tD2ozmlq0EK7D7XsD|%M}9(2bu)|ovRXl%(Iiuss(Y5 z49GGB62ElaN18(j7G;WA-OF_4zw(Nr<%z zi)wqd#g!H?Os4A3yj7y4YyLGuNZR-X`ptBmqQ_QEd<$s_a0=d!01j+crkPCCKoU*j{<2}7L2^!uN>E4h)c5(BTjQV|vSTbKrJ zU3KsxnVFc7Av=h0n)N%XRp>*PdW_tE@%pP;IcE?uEeJ1Q(0)a=A(VjQS~T_}3?pa- z%$Kg3btN;|o}8b5nxnCKEMsgc3lft>NECPCQQ)*2cjuqhN}C22UrY2*f&xPT%OcH6 zK@KVIqI<&|G`QCN!@ttkDO_jTe{dA;D-DecbWzboTS@Y{>qn=*=TL!y_eH zb$lhrtN__x3jxVgb`cUjI?SF23`F_IE6}j*H z8`rbH!g|%ZSTT29l&EOXR*-D!9xiWMS%yN3Z{a@Bid#1P&}K2xP`!HZ%j|;E*{PYrNaFUjeo~DHrN;09QF={QO;N_cw5)k#B=TuRW*u`_hfBCOHS$EW~ z(FvlnYBD*wjDjm7^N9iwsby?h!8{d}z%Z5thM)@|wij~SQK`%P34d^nVf#6k&8z17 z>vrqiZqwAghaDE`b>HuJoW^-$#~H`F&bV&&-`97avg<0n4}b~)kT@kHoFikYmO;iaB?u~ z>+==6<)~IdSimtS7DYGTPFZ1aqqX-#LOd85=1`KQC=qXb@ zNSvik5&V~2O37}{aO-YbCs_Cd@7tlKYqowkf4bNp;zE(5J@mih3EW ze35W>%&w=?U=q_ z2L4rvn{KApRBpL2YP{?>&(3xa8na8R@6T;_cLturijm@~>fgh&*0CtQ=`F9kHWH^r zyXlzRE6_3a*h>W)?;{r6?#SNlc*M<)ZSHk!d8=c$I~|1OZFOmSi*R>CDk_xvq)m4R z$$Lrf4eC@)&XV|r=obE*t={M>72WSCzA0#2aM4%o{@{|JQIIM0EVpPSI2%YGTz%Ea zhVe!}L1tpMX|dbuUpKE9%Ikn0l&}Ws)ParUohJG$USYa5eN%zoeigVVd|>k1737!( zjB)*cF2S=F55uL8^Cosk4MUhRPF~<(%JwEtKXzK6D)c>}G! zH4VL7rUI5s3(fYH;<_^!>}o2s)RWO}kw!zBRnAoTGS;2IC9zUIRi`kriYKCr$gubN zm6@Vs)7tddb`-`$youMXC~1B=L%O#tM|~>*W}ZPLo(lkrPX9MI!t)6^F>*Ai}1<*LHXzh zWv+bfX7krA<%`G37PmRpN#QzKw#!E2CgrtFA?#<=3egI}MZ}+_m%8Qow%^nm9MImf zEfa5zZ#)#!l~K>-cP)!L^Jtr@w|KgI$ntV_jW?NZRm8HiJd|3hNOqoPWhdoR+J=3L z=D?v=nKa=`V7J#-qByprzWO6R{|oKLVUAEa4tZLL&aXC%59$$!Qmx~rlQi7O zmYfPp=}sj?xlSPyrPmB7!cXDRs99BvSN6Qk?q1I`kYxy2~lfQT$swM;XXLc!N6P{5jVsPsk zrrazS_3_(94#7W8RUcm_cu9^n(M;Kq2a3VfE+SIY=db;)cX2+vh!y$qCcIW5(rmq; z1PV1?SI)%r-m0Vt_AfrKQQ8EKXYpAi7qx4>s?>?!aIl1$m1_!i!10=*9dJYncSLxu zj=5Tv?!Y5Zu5w@0kPwN7m@!{+I%AFr(ca($GrZOjnYLr|L2`m+gZA?L^y^u_L7Ho; z-VTF1=l|Xouug)SBpzO@@}IG3NptbHdd4?gy&Jx zv=aXB*^%7>up+>~|SEO_cI@V#P7e@Tv@>H0OQv$`$1fu&)t$5!xml*KgFh8 ze3@z3x77tWt;)F+%nUeTi!v8Z0xf&>esWm!3)Y=SN}-K<*H^>siq~J<<%@I|V*PXT z4h&NXR9QOO!$R$cR<9jOQyt-FJ^4W3w(&-S<9#{D@EQj2vP8`g>nprM<6o$34PJxg z0Bj|LTL#>WOJzDynQZj^>KTj*n#Q<=3q-OGkSRRRg!@Pef^*yud;$^E)cs=usWu{< z;IE^eJ_qSxJ!Py(VKnjA3ux`w=stiJe!^gar?BI{qCoWPq5^2BK5|BlK}Vo5r5K6F zY)f5DLg_Hwn($-j*(M;Hl5D~R-*MJsL0^8hJcZmO@Hx715DE{QfVIgAUUyLkhDe>{ zkUU+^ttd>(yZc%8kSQ5IMgI{%vd1NeGj#e}Pm&jZH_40}{DkWlS~%{8=8Xv)5|`?G z5h@raTm^saWGZ9wI5Gn_RD3eFzzPET z@MZ$?28v~8X&87g-M$Sad={t2bgdp{^SLXomRtfJEw#E!B{?uz0x#$~i!5PqV!rqq zPn&JqKJAkF8=mf=H?_jW@c%(^Oh_dxZbKL*ySo_1!rnn^qvT@u|3?TTlkVOAhAm$WQY1;_}n_(#tp*IgkWDfRd$JMV)#Wx^fnH&CtaMY&4{Cl={c-d#I;&@ z-@X$Hn+oW+T?UjNNXqTr$~=gRbe`WoXm~^C^5}SUHXQyK9S<)?{Xzfyw0|jyh{(6d z7KN@7Z?(~r_x4R2NvMpue^5&U1QY-O00;oIlb$f>z;vQ2HUI!`^#A}40001DXJ2q( zZf9&|b1q|WaMV0&Qya&!pXDn5hp}%J7Fb9i+lhS$xMUDmF$fi4JGm~GYNZ`X8&Pj(9<3vPq>Ue>0 z5_l#>63#?867ot$*J3d4e}R9*ey=A+o-ZFh_#Zv>@i3fD!=OKrjw_?MK6(7`!NUiQ zhH&M`3#2$|owWO%?*8%ngSLo6zzqwG`?GZ5d&BxfxS@H}Itx4}DJtNk0)z;EFMP^pb1%7AH|UOwvfkHJUw;Lnn=;m`e+<7^S{1V(%|0 z!aySTECt0;3Bfj>fA-^v6G@ji%!bG1!yqv~96Eks*a^I8To{|r`mr;R(E{QtIq`jFFsllZM10<~MxSE+U^xny zK9ol?c|WU)neSZ7=sa-}31n@|;^ouc1>x}WAe;wxnsp`zVH&uN0S^IKUN< z$<@#Yp*xm$0DT+!?(M)0**N7k;6^sx5CogvO|Y~T-S8~*{T1^*uu|fKqkbno^IR_& ztHG*eksC6vLZp%(dwtsZUO1Q0K?Lq5Hzk(-s3t}RB8I{28!MOA($=(GLy!9VVUR?? zh;-jv_lT8+MQG;Y+~K&N#=s8fX9P%2M~nC?6_yTK_oZ|*fY}r%>nD}U#%yYj`ZxxE z>;;EcP6WdnG(wYQquE>4@gXJK(g=pXhFx`bWjCLCPVK8qp*J^*4XS>9D~qL zI)N*{)Wi_{kk~*ac?0fEe;;{KoY(`g9EO2QBM%=`;2$9fQ{qhlhUH}T9=_I$?j3@k zRBO@FP7E6p!z6=8xfWN(9=Jq!Xt|dS@3Is0qHqjO8pai97UhlDu_%P>F{R{svrA_ltup!qf@aPcMX-Cr%Q1UqH?kh15K;#*#1^2*qC7`0Tt93k{s_RNY%|o2Nxkr0>7&%iZ_QV#zG#ZDU-%i^966thWuh(DG9B(A5 z;!#fAVr@-4$_c50QmXLL1@xkASVOo7Q{Nuz6;@akmt@_rew)v9(Y`=g%$XWRe=Sy58klJ&CH{d)0=!ZaI zUK6n8S74>WOGFxI%A{KpgA}6}{*D0BAB1zJvd%az@Vxh7e?%IKK_s0^;>d}npbc{j zb}(d^JD_I}9fT2bnS^5GBf6OkXBa6UB8nZNa1JVpkqAaH!IMPzVR#9K;nH#$hr$+$ z*y4W$OQHk{1(Ac|HOJl+$1xr_0tjJ5m`2KAX+4~7tOIn@e74rv4`yO#Ge&VHt?y}x!8aE8P?h|Pk@0_<)h==gUE5c6oyXA`p0PTBnlrKq+TFSoJg6+?xMv!RYO5KrGeNG22#4yETsW3lS~TD{xm=f0tA1K z96y#jqR{{?BMk+bnuBYPn*a_n3x*(eD_{!p(oJ$oW3PVHZ1p<* zyvxzfuci*6?)&58nt+G>gWtQYlg@rktbw@2I(aU3UB)#&dVJ`BpLKCzV!!iFvx`Jp zTt0fNbn2Uyau?mn5Zpi_i5r+o!i|xtjP6^K{n*DarSGTHffGGm$w0xYTF#0dFY_Lo zugE!y&8GcVakkW(JY(R}Id|eQoy~5=qhfLum-l4zUVPq-(F77uXXp)YWKwgvlFj?_ zc|S()#Hke!-o&Y4bv3W|X7=vf>WOz@*b0en;8lMtA+Ay=m zr!Azkuw%$AL0QEMl2$0PXuPN`3x_IaRT>)q%ak<_tPjgeN{7fSxt24e{H;bi zM;geQfd`s;BGuoK?~L{N_Z^{s_q5yQTt+ea9U=C;aTTK2`{F6ai1)=)2)!22;D3z< z*js>w936R(Ei|ZiqLNqG``-SqaoNhc&7sPq;06}Ahe91~J#T=Beye+Q+&=I3PR}n+ z-XCAo1bpgTbUw8EzX5^mqZWPs-TM5$I#1nV=9UPel$^p2|I_4HO7ahrV(ZyIOp2wd zKa3Jq_amd{-n60WThu0{C{p@Y*r_GWmtP<#^RKz)2rhOw;UbtEB~-&4IKxXgfA~Ct zCsW~!9WSWocs|lRV;jomIBOkLVHaX7fhOz9Woz%brk&-Q_LghpF5$0ntXXYyQO?CR zi;>0WexXThLybqnmh6Wh{!>W$DsL< z=VG-ILv*TbtAy569tA{Gju>219hCBLRPI6{v>JO;&v&R;k44D2Q5 zJ(-q=B@mHNGEeP0?5MuuG<&fl%Ka(qM5qjy(+teBkU271U=|G=#SzFa3Bx&~1e+1y z7hrzA*9WBJ?P$k+~pGa~i3O5GJDtfJWeOtO1x4=Ds0R`CO%&)Pm`GK#*Vfdh%{?!`3b{3) z7`8@oO*}hmDoV*(8)d6&ri})cATZ5@6c^$j8m-(gZ#PS8TCR&jRW4m*)R6ra_fcgC zrWBP0;4JNHRLU{iJ6;9S`Z*<_B^0TB)LECM0J`LUgA!z7V3AoZ+<~dqFkV%u!r@bH z*Dk4EDIJ(v-}QorE%m82J%MjBRb2D4owYb<2giy zmI0T}?EYS*QoIylEmO;5vm+V%+$vstsMr!@vg5)Y@n5`nQO`B>^@W86L%>#9h{tDR zxJg1z0r;FelkP9?S$ zw4&U?mWjJyUJDX7gx|}!Y|$A^dT)jk32{8NxM4GL!VjZy^TI(r!cWN8jxF}AaBK99 z`Aee+KAbAvG#0Zmmq_&R@6H_LeT5jWoq2T;yttUn&GHr5(ic|5;j$HT;N&wb`Zl+* z1GJYzP-w~7WGGeoz4h_))29k$h3-e{)K6lGdvS^(Ky`4kvXe#3QzGV+D1**J9H4#Z);uQ@Q9;^%yN{%&zFwe6% z5CidLTd-}Bg4_$dOyP&YSP_BjWBfpWwV3YOQ2t15O@+*O7cRO&{;kC~n>z93+P{ss!XSZ1@p`sA=?$-<^oFRwOD(f7 z)0m36DmIV_CKA^&`4`re9Q-*Y83|2yLDJywYT^&P zJDy0EKFpjuKBRErRKCvbT5h&EZ_vM)-p}-!Go2CS%@Ar%@IEn67>D&bm(dwjqrn{@ zykL{Y0PXv{RIW^2RKQ%h+NK9i#!yV1OTJpAqJ9oQFu~A)F9srbH~u_-~QH+!(PgM{(Qm_4}jOA`MG}*D9aZ8|%4BC?i=O&n^wE z%2!_z&vGD(w=0zPC<~;0$u3SGH48P}p)>^n{8+OqGGnRlH>2ax_o%7%d6mD1Yzm^P z+@*YCrJ|m+fj26VYlo33meVn=r+h~hOEO|3QwRa&}a3hbd5IaJ> zWP>uq8w$>JM&|$>Oc5+kHV;$b!0zF70^PhWL4@SE zdDs(IU91`JAr|>~aR__)5lfLBRuFt$4jfFB;EQvv7eN35#$1EPd;?`1 zqLN`(22ChtO^6{t1A`bF9RQLbW3UygU`BUSt6Qm*EkMeO7NmfqOLd7JW<~vFc9T~z z!{m~UM5HUWkwBj2k(F&B!mUuO{}eTwccezUP5Zs5^M&{Hij9L>?m(gw(0+sKI2>N; z1FtyIa-1pr%{j`lGq_FDu^PW6zJ9$4WN%5qUPtJx7AyoYN4vrIBe=~Gh3Ob?v}fp0 zKxKlESu$J}EO0b{l1*28h2?1U1l+(P)DrKIu2Pp9RwMA0YiY&dLb|zIO8R4Of6K+d zm=)k6Jc>MQbly%AOdh0CAPBwbVjj$ukvF796h+qfV!@DIkJ!L`Z-We8$MNozkXc_dT`e2bOChT zWIaGTB$FmM(kZ_e=|D$$u417in_Qm27sddgibbh%*aQx6B9Y>)mEH)b_aW1X|UFlTbpLlHi-#6rnAQt2HV3Tdx^bT z->D8CEts(V4x}@bExaQ8k686G6DwL6^Km!py4kqyXIo?^w#e91*t+p_SHNt&rFXZ* z|E>ep7U}H{)BBp?kFdf!9FT`$^byqkEDcs3kd}41A^)I37CSBOtuMzhR!_w4uAutK z$JX(2|LlFYf7UsAdr`L6%cmT-4===ep{$pigKu_55Lv&#`!%c;b6{*UN`ru3HgxHS zHNb>rz;|qLrH2%;$B8$*ROMQ~hQV=yuVC;!Gx^XQnw8NU#1QGS@+zHEQ4ZGEd@P;5cLmkbKO095lifB|~;f(TpEAuohXHL>+=hZ|+8xL?VN`&6W& z_YrF1+L`m7@2Zzg5r9@=j|85?EKO7}ljg$D(zA5cCR^DAQUYvkH(wHY6+;sYZob;e zj=cQkXEklJbe=tpIXP*Sw=7r=*3PLz_ICXWZdGuX!t6W&W?c#`8fsG5@dtMxM(FYJ zHu^7u`eVck=yR1H&wMA4^?-aRzMis&F9ZM>K$HXg!tYY7i}gmM#4N@U{#pimx^7DQ zlkXzgTa#0sCW~3$AYpEEgOxdZj6>8D_1RL}ZwyQS%RSZZEo*EpvL@D_nhj<=c{R-; zG^-OOd|fT4vn!P1Su>A8Gph^oMdfJTT05GzQV&Z%nhOd7n|cr?y(n~33>6fVEi0RN zaE_o6n_Kl)uU_e%q;i4SOc~M@D)5DZUlkeQFM6O8OzGCRQh|(yU7}&9(I7)}1cn9R z9>@F^H@2wIVW!|7MD|5>wFD>O{B@=V)ttiY?PBF?|F{Db zpRcVwD*YiBm;q@X9HftOKf{u5R^8ukXZ?B(Qm6z@Em3siKeGzkedtw_HjA^qW$ZI_ zN+jp zcJPL&x?8IipMY1K)pz!LKQMRwuH^OpRVgjj|G!F6scC(`HD%$it?zj2BA$@8aFa-l zb0GHD2kDF5Mb=a!9^9F-3|@l3_xPuL@Ta=YlZfu1eBvU{ar;C2xZnItZy9Pr3?+K8 zTg}$XezVxn*B6kByq23P5q77_6uCyBT8T0gZXB#|Ou2Ag-`@KhFX}CX@YfP_4@Hk^ zn-_iNki$rvwDjE#b=@jfJ%;U{Uuc?aU!+hK91@ce(*<)qP%)UcwhSgMPpjU(h<7iC zcL87X#TJ~wI)$Op1@y%bXHn!eo~Z)+)f@9|*>z4!S%ElIGN5jTuck%7%U?o2H=1-C z+E`u66lpc3OLet|uR-65j4VM|xvYJ5EpBPyzPI%g2*vJ;yq7Ktw7)J=@yi?{9k)d+T6C0>}RFQ{{h;qa!64Wb=cW# zbhs#yl2xKaEk!%eFO_0JBqU-@5nLXYmDumMzdq&!1|TTON}RQKV-vs}Ju^K$-93H8 zcA>Sb{IAQfOD$kgZ4fUQ_@hZ6qr$N*SFxZwE2p6hu_V+`r9$!mnfEf58Epd7tq}sH zQsdjsuH1+=lBr?JuVvi^&DGnSZUl-T2vVn>C7(@|sI*t|3KHK|0BJOsWz~1ls~B|R z>%3EoPf5;ewJafI@yqe2lzC`@-1Nc8lGp?@R`K`L?Wx3_XLF7S$;y-G>jM-ufE{>A zN5;-R?C%~j_2a)>9R4sgpsRY9tx9#Mt;W<9R&^^e z1*W9urWP=PC5nF)t)Lzd#SojE=V5?1)(ue7ia9wb+_kVFd*Mh%p+V%8Xz_sKh@fYx zjV;!o11pA&MOr;g!VRgI7;B(pGTtOFpK8n`dllV4aRsCjbt>Dp5|s+-fKr;X&Jo>o zF}rQoY5Qr{n{(LaI%>Pu9p|UD5B^{llmzJ19&G3vTx>S#>IbN}!y^ep{fMWMXH+nm z=RBr3zyR<2-S^e$6#ib!FzepCIGcoV+X-aX5!-4F(sgUyd`Csp4_NLw0S*vCwbN-m*e0d?W1CBIRuXnS^$$dO%Rs9oI>*{xQVA^ zC$!c=kU#QH;-gVICs8mu8PYGrFwB5A&y16jUhD^bkeuOs;W0SP&0Ll+X(ni9lX5`> zkFUS6FD0$2ZK0yI@$r`IwxCFTJdVchR$@Js-DT#jg?Zeo{`QndpE$)0NH$FL)6APH zvE!A~E0?X>b5ZFYBPwY~ii>FLpL`=((&xQx)+Dt?yW@vh98Y93EJ_+~*K?@(pI87( zU$Ordi7YpQp>px4a~g6662yVDkU0_wh$zRr9mT60%CGZA^`<;zWBX`YKy-}}T)N9)LXfg`Ap+6ue#)&aoo9oKj&{F56`F6@) zQHc!biy?`Cg>Fx{ z00^Wi2Sk!H;_gv;-SHNZae(dSv$P9@1r00!B#hq*Z!pe3y1Sz5ZKcm~=DUIS?-}gP z35Ikea)5D2B)XucjMwz!ta)&PI!e-fck2JsZdE(&<5PAYchV4@T&96!=a<8CyeT|x zSKG(UGcw08uMf8ziiLs#r1WBa9W!$LA;^|u1IX&;%J#S|ByvaSkTz~wYH?n)) z;GQ>QV@_02H5B}!aY_)IO!*O>l`roMrqgIR z@f`OP`6ocKQH({jp=ZMZ2FN4tNG9L}QaaLqlZpTAGI6>heNnlgHuDE)p>rRt*cZW@ z2Vl)Ncf|+0D*{F|qTw|sXZ(f>|LwSNH1MxbJyv^f}WKPH*=8yz@ z_1a5)UE067VfO@Y97Xt(!(!5sem_AT7DHfgJRDDXNTjC*Bs` z5mOO|mk%|hx|Kg^wzkr@I!e)FXer~<_Par48Wfk1edW3(HS`KtUovejRu zS!Qp;aTlt>9KsqbYy8w6W~9U)Kw|+0Tczu03N0nO&*!UmUuV59V^^kBf=*3i!rP8u zuy?8UB(Ymc5CF3Y8iiI%I{oGr(o)LSW3F?y4^e{r$9U+uu5uz0#nP8mpgl~3_7D}C zoW-Y9X?Rded@;+ss9Xrr{ z?~_mh8;lgX2w)y=ef5>$?v-St6$kU?oXqlA62~Bj^M{bN8YXjnKi;~2R$G|2jzctu zwa!yKowJVDUWl>I!B?kUk}Y;6z|`TWL)S^D+%esB3mgYg=xyXZbGA3{7JBo(yee+z zQYGb5FlTF$=r*hsTq0-1&7~1g#(6j(%qp*=K`*O{)HwBL*VjmfShpmvnK95OMWmox zP+&rN&*j!cQJw&@bpQI)QARi)`p&^nvvhk*bMP;U6dv2y_5J3Xvl{z={*+RPY)Ev8 zbX^#$!SwW+-VCmYKTDUel<&9az=p1#nV_ix_k+wLz`96zLsxJOVxcj>i=V5lTIMj! zGU+3+$B;h9ic8J~A09KAz^MZFgY2GjoEU-#p3jg}Dj0_N6-#Cg&4#X~)f?BHUT`_P zJ`DyzfcXNZ!8P!A@?4$)+gm2%s^6%Eq@-opA&7(o-V7+|fQ&9M5yLg+P#97iK`NM} zn7PQ`lD4-Ni5K`~9)1->`Inl{`(6AyM}M=6m9|A$n-MbNyO2T1bu?888Aj;pD0tvi zG7abV%0ng}#JlVwHV&c}h<}e+ z(4;StW>J|xb-r@Mi8h=viJ+nztCqHZN3G<4-(PTV@gqNO7|YE}1*eT@N?9ywN7dUU0y2uoy8(v&R` zZz3+9UbNpFoOIevA~9SgXDApdi`O4%T|7^;UzBvq6ojOX3zhS5EQizOY``(HLki?+ z^95p$4waE`_++7QVmcp$H-{8;v?!B) zS7+0x46lil3nv(n=Rcq*OB|-OLV5fn(&gMxMZtk}ec%XvK5S(qc7Jf|-%T(eyRJ^& znIbM9wZ2K=OD7&R22)!=K_=`4lq~(qAG1FzC2+ZoJQ{KcXD-N+7#Q9k2SpPMoqvzU z5k#Yb%wz705z@W!)WZcuQB}?266)Qy6K~)bW|sN|kJTe$IF9QVbp8tU)sp7E@h!-( zxZi<#>L*Ta?qN&D?VafUOqFn`Yd~yu9(gOaWUfM*18FXp!y+Jsg;<#{{ zBFsKMMyg4)ddIue5q9Y6vEh!t3*!D>hJ=`xs1Ypl@v*H-8F?C|*PxLr5P zMzU1I(Vy2gu8hz4g&lii)#3jx<-|lllhjK*lR^3Ux}IkxChG9Ws62uINL27b+?d`r z{JZ0A;lHI4JE95^ByZuG78XsB-buru@Dym4v!L&MiC@5 z`E)$ok3JSGX-p%~s%K%4J%T`t07ZdhC-B}HQ9y}E4cvr!zjAYQ(9ri?nm;~8klKbr zL8wHD@?La1L^EgwS0NH?S^m(@i2k?ZCg0@HxLZ zn~m6*f#cYy=5zW~C0gqRelG^3aDgEaMQd}pfZ-!tmJ;}s-G?{V*9~1&F9d#@5?@UF zK#(`Z@i+1O>xeSjp|4P1s%$KvteY*7=axWxo5P7eMj6D>tjGc26}O^%%nPxi%p4dSdET(i2%I!lpaLGK#hxnSg=$F~2pW8k$dMV5$0m0cz)*IF4VEMbLo%tO zqgQAZD6+P%@Wvj@XREC}MG(=`tsoxC@M&j#Z4>DC^XF=g%96tFVUA*L{zR)UPsX*i zHLuzF$zzoVuy;N(p>V==2SD0U9#@gV(JF8Pa(Z|bcKzX0mf;I&O{W2tZT*S~yn;!8 zc^AuXot$X=j|MJ_FI%J@bv(uwLF9!j`|LZp+JGX=PtZ!!!C=QRkZo|sjskYeRElrz zfa$0indOY^(%j^#tE!^|*^YrXq`VUENnN$2QHZ86Mw?uk5dnq9A}hdGjg!z>sHy3~ zme&ie#{nDyec(;S8qe*s#Bka@%C=FJ4=kD4#{hle@OQrE%kk!EEY50mTb+|t=BeT! zFt403NR!6Q)#l8dEL7(t3gr(?AfruIDyXBu{WA%~9DJMk$C`QUa6xaNi>ZHE%j5Db zMJ&mM$cjo*x4=`^3%ml3_hD+K_in&ht))k!denCGe2Ahm!Tg(`( zL+NRcRPbZcOcYrJ&m7$49i48>P;jiQvNyz3<)N~Q4Ll5UjX9hchLlVCM0}`S|e>Zp?jl-Jdb68IxMbUb71FB7n=-0$KSK!_ruZj4VX<(pTXZ88 zi$?fQlk+BRtiT*$MXb>ZL1hJPo(mnKI`?FiSJhGq#zP(v(!zxuU&g$9c=2R#Y}7NtO}e zEpKeM`$cv87SByH_g_^!H$(E!VK@wGTAY#|urPLJnZMlIq}rJLXX^=K*;0EegeB z1SEMK40`)_r_m7O6K1C9zTq;dNb*5tuu%)bcbTNT7q!V=Nc@&#VMH)b1S_VurOuC4 zjZGD6`7H=|$-gcHb_^gV&RR9U1e)3%JR)Wub(-(}yLQxohk~#jxS0CW0MTqTv9PXd zd9t9r_jo)TO|b!sVihp-Jwuf@jOX*~4q`}5Z$>@Xl$r+MCT;^WN>NE?eHgeKNV8OC?sC_>8z zqKXvbQKl5}MH?8%k&$pl?f1NJ0+{HtBd&KvhN97j0DDu6@L6<=_f4d-fG$WIG`$Tu zuPd?T?^pTTWay8|NRFk&4~FA)4G@j1$y3iU(p*%@I4`dQ5y}+jebSG{)1{?pa5KVL z7gjIhD4L#=3KPyB;QR6CX*k?1|Kp{6@;~n414!%mVV!@$OZdh1w(tDgx0v~Z`1~c2 z-x+Xq(w|YB&|80uGy$arVO4|xNE@FCCzA^>k=&GRPNr;hLfURDD*e~A1DhnhO9}$$ zoUvz>&p}evDtwak7?B<=>h4CAF$2|CXYG3H^!Vc9xOrySrZ7To<2Lh#5n+ng?E|s| zbpOjX!gPK>iFW<;{MmPZhaT2}tc-7Oy^YPv=2m5W6Aq^1?{839?OzV~BnCvqtuc&l zSLqvtnIJ>;G0|X(aS#HkM&tM1Z8+_FH+OjGd1D`SW-~I!rNPkh0=;L;BMCW<>4Y&y z6p_dG-!aL|m3uOlX)=Id9JH(LX3G<&3oOob^2-Ih>%6W5jeGs8uot<eyGd+KxV)7>Uq;h$qDyvA4V#B_UJ$mhJiMM*yPpW)d9EhFzrFaONF$g4^J-gB*x^W0p5w zCT4C!+C8sip@8UdvKEsb5;&_0GUK%Q%eqmHfDjc{q&htX7ulm~4sLBF$FrqxB6-c; z2K}%*VBP?JdrbSb#X032Ur8fkVECxyDl*^vZX9w7GWlt3ZSB>w?_4V+C~NH5nI_?F z{q^xdqpr)|bVdS5g*gJ!`1fsrRY{-$GKo7_*sO%OUEVt$_5sU)iKFl2A|wlj`;kA! zfiCZ^oA2!g@Jw9ZefzqD9st#bfnf=pkqvxkj&T-zbQ^S`j3%u7!Q{N0Z3vmTQhD|2 zl?R+FoTefA$il%Ip~>Gr*O{I5d+fLbyi)}jr&n<#5jkPq1Eq3}@Ftv^$i;ASy|Qd7 z3xhw$*UEuR61zo?3$f})o#RQ13JbU-(*pl9k8aaCHGR#nidr?T7)F^6I6;mDMv?}5 za1HJ-Mi?`UO3ZXHwUvss;Z5}nLr{%VinN`s@xeU^6cOZEW6+T@R}-)2O~Nis!Xb*D zD)hZ_ddrV@`NsSpG_?>lABNgQ(MC?8j5i(29iz^_o?m)wxY`6&?xB4ayN&kS3Lyf3 zOjb&W`(-Peh>}xLH^V9wAkmYx?iJ}=#8~P1Ro3RF-bCs36P-KibN|oi5bcKJ?rh+X$zT~Zt`zW8 zXkAfWBh@2vH{=u%?vhW(j_~Nvk`qee(6g!UB##Ybxh(Bv$TWo(J0!6c(UN5_d!^B~ zf$ZWv{iPRs6*F!xH7kGmMLs}yM{FagMzv#@CET0nJS!uw3oVH&|+Y#~MJ6tVFf zgMl#@>?-BhBou+yT>p3le^8z9TuyVuE5{9s*|QoFJH?RyjWAjw5`a2@sDYgr5-$oo zRCyfW!(k@yV%JN~Rii?y$s#Xn^8{%T#6a*~BHOWnEl;(0^H%DQSd)1Rpr@Ldaz#U{ zV+wsdh$cc)-3=!gAp)Z~z~OK_;f;6OzeDZKzr*P?81rt6uNiO&xMZ5xnrp+RL^rd+ zG#tUPM20-dzL7r;gIgxiM6Nc8bQN$!;zl~bz|d)CTj#{e#O;_&KLop?=p3(H>^8PF zYRLxnFkFyrVq^`htVgz_JKg#LRS)9XSQOiai3+0$Q@jUs4an6;$<;?DVH}{QL&YiA zv=PhEzNPSB{_xH<6@u}zvDvxXmt?+V6T|1OVX08yF3Ow56+H#Ya4fOe^dt&4^Gkyk z4ofMZDacF!TwO8txp!*L4fcl~l_t}Xi>{d!9&pka&19Z4DFoT%wH5>WVF#qqOeWa$ zw+mm~6w;+=S*Wt1AY)+_o_=4#n^s^7g?Sd<^YE3BLQd-<5oSSO2^vYhFqnmPjY?I! z*FrZ9Z`(Tgx)yOMBRgI@;ah!oOO<0c+Za@h?yqqMrFcje!(H300(}A#*3PKOaYsAj zn_#q~X3@VF!Xb$wCHEjOhCGmcGILW_rgD&W_hwL8^bNtQcKRyb8I?=`tyr|Oo+x0~ z*DB7W?Om-|JF0V@%fps#PmKcph(TEOx7Fv*>X(*Ao%N0G4qJ};>WAKzi81fE#*FrR z_a5~AlMQ-*?x5oXyU%!@Y&cn?k^jb4QltEi1LcwHkPY1f|ReI>O zFhc&T6OR31uYg7q8*`eShwp#*0rB$L}B><_ep;0wkMh+(UI34>K{YvX7+4CQ-qFmQ}JSHa2I@f7ga~Xt)M~2h>xIu{{>@o<@W%;TeiXHmH}t5CDfjc)t;( zy7sUAaHy&#XG$CdCGvbNTPR%Aa~Pk6O(S){XKO-yL8wMIsAspvr$%SvVWOl8LTe^X zFxNY!Mp{M#H_cV$tWadg=IcOV?Plwuxhi7QE*`Aao*8=%g)T2KXuFhS&K$K$yLPn{ z0I=piM$ABYX>M9GuNmeUEF`-Xpr&Hw#k7f$GPwdr^3m}pInQHaA+IXY`}ON z{_tWNjcOE0uN#P3m=vi{AWd8`*+S*zx(J`OnGvtoyk}ib5gk8$f)Bq%(amYp3yO$$ zF6~l_w!034-KV!^8 zbvcWq7aNbRjHKGqmQV}u@LrV9mMbMLsO%}>l_osOg&Sr9@d1#cdd3m!H{xdk8qWz# z8r{UvC|)@?>K9{6yc7pb?g5MqSg9OR4y{lJ(dL^e7y%jM(#%b!Mxa8`D(cVF_ys|b zlMIWy`D5}3)N5cCE_pBF5SzSTvhvoZ6Nw!cxW)>3^OguB_a~3-oJ&NNzor%1112T^ z5|tNSqOxm^_=g$g4*Q6Ndo^<#a%$*FB#OaOxJ&ziwC!~?V|vrXJ*VK0p{B#zFT=es z7N;-X7RTu$IdI%?R$N)r*tPd87KS z4op79_I_2QhD8`Qs zJS`l=XxDLGKyz|$&8tBasF>W)X{04iSSSsYBrJOCDwyN+!_+yczI1`|uA&%@8IpHJ8|Z*e*4iTB0mtRmAu-*{ywRvg`eyUW{!9;`9FlP)h>@ z6aWAK2mrK`o-kyVvqYDP2WiDfIaO_=ebK5r7{jAR9 zKd{-EZL*`-j`FsXZns0)Qmh)56pD_w)9GMn39>n+NR_1QdfWc@y#PoM06~e8>CE%t z>24B{0`55%xaZ=96nS`PWj8@;1<@>A&xy5Mryv%n$HUPv zx;W`uX$;l@;u^2kS79(axUuFjNv$Z(it>QYs;4(`l69?=B*5X-U62M>A+fG!VL+k` zXOp(0tups4&{k;F^oz>cn=&%4$lj9C%@ zE!~{P;oSPcIyyL7ST9R5cX2ScE+=>pCo?jM?@4l!K=ODY3GyE)2^U~Ylt?LzIO>A< zG7ADKNuXuzWhR>!4t(*U-D#r^K%qlW-tX26Rxx0oO;sl6IB%Gc%$<<6dtqfbe^ zj^;ag3}T-Jen`8yL65DYsBs_AWb;JbyHik3X|{p3h?+Jjs{rZXezMN|d;g)n7SklH zK{85-K-2Twb3=mb8^~0`EXy19z3_=-7pqacWB46Ich7DbIQ0p8$pbXlnVEj!{``hic3EWX47Kauh_4tYZ{$QHAP(-o7Z@j#3{@mgQOp2qxF&% zpx;0sQ*=b4>+D7v9J?%@p(N15QgF)(K#=;#+@JtO&!GLeIbEnKED|U!Xw~UZvAkZ9 z#7T&Mdubd`&1F%Xnle!%zu4629A+IOm|Npaq$@h|j$tmsBZU@_W(-QsxFNG!Q)y9X zMoaV|I36}4R`jwBbX$cwAP0&rfN(REjiu`#PS$(`YzDEhbRC405484P_+fYjr@eR- zCrdwMCC$hcBLWr{jN@DXp$j8VLM&Kerfj*mgz@3kJfTZl7^wX0)eJso@Odyjx9DnU z3A%+IhkSl;a9~-dP#aQ$H5}6QXmAT={A-vie#;OpZyq4ASVIU&XyRE$(+gXE#*y_9 zuYa_xOA>}KG0whAVf~tc_~~LfvcUd)7E=x>Ra1Jv%nj!RTz}vu?gLoZUJ+QtgY0Hd z@;=CJAnq-mL;R4fajiH3+TdXtub>uCW!_LvUabPqOu{V3FxE5w=?WBbQw9{*8Ql(8 zC2{0b|zKMoH&{J)X&F@ek-FN6P*`Ll02&`%NcCwxP3 zUd&@a4mn8r<4fqzB>UVU(fo5KB^fQU2>t6$=PHDAUHAubDs*WFqCJRkFb}~J|LikG zbuw51hA<2P)F01BaYUYXI~`~2o#H99!^vwn`i$K!|Euh6IQ{0`QMcouGw5nK0*6N9 zQD6CV)cLDR9mvmgIhLI_uTE_QobC9wObU=bNEUT>FwE<#TJzDQ|3Qu0l!+s#aM5-;oc2WpoS7=%ivz6%*lA9|?Oh;F!R>iSr{J>I&zqljMFantDM2AW z&?(T|joVv1mr3=LibyqfVgbF!+?O0WDvM6QTh= zSupRu5^d3=`N47QoxsjuB!_-K}QfM}P{mJkzlWuH-Pf7=7yZAjlxp@(5$G)`GLl zG()8`b{TXqc8~k0Z%=x8fbSCCTXBE7IG=F444f{wl!&I^572Nz8-;4G=;9r{_Lw?p zRSlooE?b<#hkklf!Kdn{1Za?+Gg`@AbC@F0IL#MLar zDe(D7rNEb_@yUga*aV>D02C0ma~8Hcv=OGGuprTFpeae%=CNKPQG)11T#bm!0SYEN z_J(av_Z24jcvs&l$F}QTp7#54%k17To|sA1(V;k7+NGo-waxBL=&rHktQ+=l!RB!kjqrh`tK zfNt2AszOec9_4YQ_UNEN=H3a?8K`cCL8U`c+n6rW)M5vT20Fm@(A{&9yFoG3s;-(U zxbr07jtH$fUWdoD0Yna+jxW&h{_Y#$`I;oR%%Jnl#D$;A+o;n?|9JR#Y-swUauP1g%D_uf z&INi;gWEIVrdc9z-#iWO8wGd0N`pC>-$%aK&dC=fV$T0aXn}k&nGR3-n8mp?^IomP z5WrJuPi=C65FWy^3-$RPW_u)<>2fLTC=~94=sIr%g~H`<^y#TMP}_`z9ma_-R$n{> z(Ac%PF4+cLo7>0I@{hrY<)<}pDNaSje$ZZAEQX!ETN>76@ zbEI8VNNlG=1H{EB0>aV6AdpyGm~ZJa6OR~(D$jFk|Q@EYx`mOIVLfgVEn zRYrbUvErqNCDdl1#Z^VybX9ShUsYtXNl3O%B3U;s5nj9O^7545Y~ZNPT-ge3Py_^0qC@dsH#Qt(ZK?; zMMNqWrWP;pqcq5ZI9Cj`w`;MJh1(vJOrDrD$ryJCis&o^%hS^9cR7Q$bA|?iVj^;s2W!NW+S(G+7h0qVl5Do<*hYFJ?*ymob0X&fnvj4YbX z;P(+)RbfVfVIi=m(pRmpJfpHap)9X`X^D8%T*(94s^r6LrQPO#8P+cHrE zV$=r~`e;=i)le*XAfqOl|L|ZpQK&+tEX?{qCV_~bA!sZ578Fu2sUL*U%YvCnKH_Hz zoLcMpDfmgN!0Iwk=4hmdWs0p1loCJlI9XCNggp|HLv3rWAV&YKGQ&t_W>O>)ibPK$ zNlgMmmquA)APn? z!*T}|qbzEDl$D!Ij%6bYM`F>cuneNA?j0b}N{&%%ju4ykRBDs>8Aa!qROblQX`8;S z$WEiAa4~IxZvB1Up8Bh0q)sCplk6NJJEvvcRk;{9Jj=K;ZFma#IqmDu&{#bBHIhgs zY2=7yjtwX_8j&@6JVQLA8~;wcj%Fm^^k<(fN8HWq@U1?17kfuFddvdt;+&QYB;#O# zmpNKB!&juhF2Me5? zgR-2h7%&_e#1SCQJ_A#k69o{9?-Q~J$&5ZEBL9V{^&$*z2`GZaJ%8pyN*|7A#fybS z*mFGHoG*FQ{@t}aRjU!HZuuS%FKl>0Oq2&;14o1-5d z(o@W&hFAW4r~W35z0t6a=1Jb^cW5-w*)}|{f+uY41=1xIhHwa8Omo3?z3zFoL>;$5YRa=(twc!T;J$2us-== z3)2lz&4H2Tu_FO*(5?im&5H9?`-afYfi;gEsi`*zSO!+-NBKQ08>5YdI3rQXmXk*Z zT4h6|8fALIoK&N%S!ZwD8mb1Fo-`-bAZr%g8~0bLF{UTZNj1irb@j&m!fJ@=sccdW zv1YNoaVOOjVfj>mK8w(|mO+}bC;gXmgr^C)H%GN0SKwBHuAR;|A-fu~9(L`7y9pVo z$d$lrCjbn{$W?*$$ZIF!O~BOUzu3chs}D2H=yoN$OPHSg_^|p7U(`?N*~X;iqmg-QJ!_dtHZ;$NAf9;ML>Co)kCBlV)f7| z4htfqSYnZu`~O|`LXIfTpJK^=c0-?UnUF4h@@IMzufsX@AtH3)8a)UU7R!|M`+Z!- zs()DZ53BxR)j#}I{PS}E-u2{D*wuiWx$CL^d8&V&>Yw*@{KL6_|CCQ*sZ;oEI(xZ` zRsXQ+AO0%-A@1M%xAG~)KcvJUzh_}DcaiEJ`YQU%{rhkvpOXE?&B{0 zD*iczfA8f}vVV^1pQHNcASDJJsgHJW_v!r`jlKRyUWGklIZ~16D_#T^SWL((`hq0- z2x9d<`m#<5;i~P`;+WEDw@vuidzZgi;tL7mS&%&p;$&J3#)c=;i`U>}H%WYd5+v43 zJ^=I6oxA+O>rl?6Z3O>bth$`f=dMK`n#^E3>=im+V9F6EDd429{(Tpadq01%j?qm1 ztp84WA7rx|>xHF0-kI7EXMR24kZXT#v5P72XXZmE(rL^`IOuR}_L8C(0_Al61h+5OcxW~n@Ok62o(;uJk8xg?d@Emk*F+!Co9XfB(8QtfUw%l0LLn?_F0K1HKo}>R-{9fw8v*68=5Cu+84M@?&Xj zeFcNqEGwW30ZR5@c%r#peldkKLOCIOZAqJB6!mrAF{xCy&~wgERkDM|$7lT$d@-5y zUH*u+gT(U;HcoqPR0aD5-#F58#Bp{nAJHb6=VC{#J z`6+)6&IZFD>I{ES4X5J{j($C0 zuSfdf2a7#64kLSX+-H`#>Ds7fJ=h_T7_DtKJ^G5Hk+;R_o6_q4Czt;d$z@a1?3rAe zn%_6Y)Z5n(ii>9zgyK>UkJdl`tWwMQd%s$O>G#75Nf>@UOd=%Z>KvbSm+MhfM`dH-a1 zabAnot3w;uQ?ItxYrU2{Nvj)1lnQ@s2!*q{P&nHX3TJhpaJDTJ&gw$ptP%>h@*OVQ z^Na>m+)-HpDsC{V^X`#QRmy253J^gYE7nH_(JuK%wJLWq%r5y9z3n|;FW&2U2ViFdsNJ-x^iWyQF=KNi+?fts*?)qU)I}q zM|p}kJcKnqeIX(>x>+>Zu;cy@T!A9HcGcn6u>@nYQ@)?r2|M zci~fcSJM_&|NJVf)K_JEtocr?{7qjD(CgZ-T<)cqWHJWUdiCS3JO@9~Va3h&;q>#U z*kOG8;bkTM(V?c+VHwVusu5j|S^G-T1E>dVKYM_5VA zBKD_D_~j!`SR^=kmHgUDeC;{w_EcT>(3Q%&ckfchPbMzQUh*C9Z~yjdZYPUdG~;UR zA*Q?ohRH{rGtXZ{Jm9&Q^z?e;?KIL%2V4N8?;CH&!DXbDgNbKVCiY;(Qi;iC_h`?t z0VQir8W?!?Jp$zO=e4YQUjek$DuRp4j0z~*y!aLqihB_IUFaWKD&!Zr^Uo_1Wt~WC z>=GBCb>tJvhZSJ)oL$J3bN8T6DQiZl6G}tkt;IpL1ww zwR@~dTUluqh|NDNZMP_Ld{mm62LmUIQvC3kW|XQ(=dx(3|Mpy|UduVv?SKENZs(lp zkN@^l)w2zyE0QUV?L{l!`}U6h1=ujHuFIYazom4`ip+On z%?a$6`Hoq5<7>Y9PykZ^I2@jDis0bNKtW_IlkE+sm6)z$s=(>Pm9p^a^P~7!siJ(Y zQrh9Syl}J@uv3=HiYj&ZS5zv0aaR$yC9VqEMWCzTN3+1XI&>9SE$-J3#a^A{9h!zm z@>_0BjWb25%%x5U$9C}|xpk2kmo4hsKe;i*SaIdzpMSyoJy^Or-@4cS<`_8M58k+}unBxx#8d zy0I&gj4%@g`}txtV;a~PK|+ODgrV^UR{>YcW+44xqm3PUsEAY8(B-=7`g3}}S3hok z=pQn%>7?In{%_+o4vl^BQL6e{z+RZ~HMH0oD8q)QQJ{9xg`{TpH394Q;zgkYq6Zv* z`%fPK#h*O>%SRtyb++)mp7F%z5BYSitX$veP^G@YLG0hzSq$>Jr31;sm{5L@STrZi z;h1YZ*Df_je8goyBF;lhz0!V1lBRzE;;aA8iLR60J5@IwYzNR?Qn>2qwUrDSQ1p3{ zR`R5fQH%cwg>13n^iV3>lR{?h(33*;q>v>GpA<5?_-j?j@=6oLkx%9`hfIO;5`K7# ziVzR54Z;$BeIvfscC!Vqd@_PA96SgZ*)mey6e8poCP^ee8uS7Ls)RU!RgqttpMYCh zEE>Nfol5pVpA8DbzAKh%l3TN=-eJ_x6l7c#Oliifu~+Z(vU?hfEC)v&vK4e?x*N*dR%l?{>HMDP*q@kDC`v|`iL$>7%YQ?b37Bm25 zl41sYO$r(CH7R1Sucs&7=6<7(FeMQN#R!G!yQyV{h+$$Z${LBO9_%JQwTyKI(SjWa z?gV=uT3k8M8b@JS1*i3rQ~A=WKV`+Q4489^8C1ZJeQ_5qWJ<}e>=-RwKM* zsP9LEPaneHQm>0rNa>%Asm9D73VrXuqW1hra}o!$*?bzC%UgDb!%p#BgnH$K{F~Ss z`Yf?n#jP_xaYko-6-X;Tn=YWLvgCEzHEOEcU!y~opOeu`qK~90p-}S_Q$nFWgyO$+dtKRHwiBt~F5AH! z$JZ3fWxMDUodW##gCd3f@9a2G%MJS2+m z)#t%*UA9y@lzF7jB~L%ixShuCnL?K4c2KFb=QAE>&b#p=kH?kwF!1sDt>J#jBpjp!HbIvUd}B z(^(MBuLG^#We{6HVzN_o(GEagT}jPV2=mTLtEn$}i{CAv5MaJBl<5r3svT!lN6o&w zX3tTzmr~VH(+w$4Cumk}IjcHq_T4pi9aVR&sv4rU$TK%Ls;1mt{M#U%)7m8NT5#nm zm80wH&CN{)5tHa)$YF?&zzJ4A_J$*R-oSwK29R7B#w&YFix`I2V|Efp?6@L8tm)0f zW6;xY@M3&L$h`mPkD$exw^jD4PD!^#cVB%aEIVJfw)nM~s%GMZnxKuuM=40GTG+^R zl!BqMMawaU^Yp0}jxlV66)mLGcw&i?v9=2#xzt?#BT-z>8(68>2(K0iZ~53#PUq1T zf2wZ1;C7^#)H}q@7ddPym8@-hkGLntDtplwLSeAu!xl}3@y{9_RV;mU8#=scTmf4KK;t{tlPTQzsh#164VXw__NO5YnQrWsCx8}qX(cFmYOCL@mO zgLw2?@NBL6=FP!Lzf(VKtjkn?qshf+GK%4)Jp&x3dvg^`JXnvRh7@Um4~!LnJi6EZ z@3;gh$W^=_8Cma-yvx3m(VOGeDP<3`SKP)l0%anDG3=;3rf}Xet5Mogu_2T|m$U** zb?Xh-;TVr5pHS0@yla0VQ%}P0Ojo>R`sO4~U1q7ejwVqY_!xDIY#L?HpH3O7Mz zrPugy@(OJRsPK;=oEl{Nl~9Sp#uh^W=0Gu(Nopa1k*22YviHJ$shUJ@$BE0JUDz2? zV##kP)<_B~;sm=aNi+r_;PcV?c;hj~2xmk4_SR#}p2kJmbm7IbTcAk{{|Hyu4?gL$ zF&gZ697l$#@n|w9%gQxF=1DxKpmO=vktdZE({-#KUqAl0T1I_Uc09)X75DEi-zz+66=I+7jA5B2})@3oqZ<6igkX8?@h$SfR>gW>M&$=JUQW^3y>W42POmwj5K zc^uY9tTRR?f=ebH@>LvM4>uVzfcVaMWZ!Bb(C9wUXDv5ij*Ly5XG1H1y_~Uq7&ajF z2Bc8~$v?EM1vK}pg@XmHf9m`F>lQb&kq{vhbb^e=q;Ef{R~V~=UrW$)sK{z5d3 z81egKt1O`TZ4@wl0KWhFOa1I)d5cU4C9L~1qY>dOT2qaAXUC_l7X3}skt%+ut67G# z(dB4T_BIRz;LRbL?>dbG^%3Yb?-~AEPIQ4&asGm{OCUkn+iM^900H{lcB{GnS^m1) zh5&l6#g5>3n-}bF&|H9^Z*E<{-cvy!x9E+wLuc(yYhPjKCDmd}{Ty4dePs*$Ov`O* zb@uVKJpQtQIJx4(#@nmFA2YoJxLC4~pOCZywj7A(y}(E8vX9or+W^if7H9MkZQ7W+ z>cmuC_*ni#DwajSub2e=Qji3y6EVSz>UlU93=Sw(GYUP383-rShl^Q8g|2wm=u$~7 z1~uG~?Hv567&(+iEOlRVG8%jWYS?AeVa@w391ZV60>ve&ldKHq{um`1jQ(b`fnTd1 zH_5cKW`~&+^`_VTi?M$hd6200fUy*~s&p`imiExYl*`hq8jELas)29|O&;cAsFx*T zMNH{1U;o_l;$9TFr$!7;*ezW+c1x}a2-76kM_c)#N=XgrLmuHn@T_?R(k>T!gwn*+ zDZoxL4o80;;_<4Buqf>?BNu~{ydU073Y=ylG>&gs2c2IsI)oiM&s!e}n-5^+o^=me ztcCOgPDU|s^_Zj_xZR9&SYuW1Z>$u)0IQS28Q9UPR8Cs;Um6{+ecbwm@Qf3GiA#t5 z9x7UJAt2lt#A=tlXIz+rV_K=K3DNF+9>?J%dIrw*?PGErXMgXVcCp@3I35BvUxb4> zVl8MX{v;-51Ado0e7}WxV)7=zyCZ8f7-La+5={4=Kce*l_8HD*kSv@@r~gg=~ny$4t{{PY$U$=AHI*{1Hd{860fz@oydz+44%jq*t$}X>Wzw*gkbgGWhy$sa zj-+ArvuCS|(E9jf@9W0t+MkNlCTrPv%a%)`@=bif9UfEn8Jp{}N~eAd4_Hrn^(GT~ z*vT-u-gwI@ev$)>;Z6|le;5}Zh7|CdX@QVXJq{*W1H*q(2W7l&e>7vtACt5XP#N_H z>S7y35h1LuLuF=WII7?Bax%^zM~-~p^u*a^{Q$*90~%>#ZJ zc`tr~8fG~=R@EO~P|uN)W{mgx;`{fOQAEI}GB} z>2cU$vsl~_TvJ{KaSRM%KJ{*cSO=YU9Vmjd0$t8;J$5F-2^uUp$vF?eqFqfOF(Kzs$-(54HkpGdZ zGNwI?DbD^icPN$&k~f9>5FgkTnKeVa+uin}0B(J$lV0;fqtovO$wOB5zMX`)30-yy z!EyE5GUPqo;&yf7+!b_}$8-Uh3lChXjfKk8KEw)1tX3lJvu8$YT@Oyt*^I|@rk;`G zMoC@trgw~W%$~FA8#FaRZc$qaevgBh=6$1-7Dm&xdyWIPzqZ@x>vRv{gYjtE{!KK7 z3PSC1H{yeYGc*LBgp5*48!_H99PE~@FG8OZnv~rum~lQx@15rH&-GSwUy!o3q?(nj zjI5YUsUOZR%Sl>EKXd>Q>BrOQgR!i{NOUaZCBt;abm;+y7qV!emxbYUkf~8tDg?n^ zIK5rW0OhLi!^xDO4#X&Sp&(7Lgn=i{8LUV$-fDs&mt zVz7-4?kzjN4u_0>FfJpu>U!!!Bm~3OoxOD$)%U&g89W%EUcr4OoC87is3$5#Qe*GS z{cg;icE(8>?}Eu+Tzjn%fyEoSSp3s!EEe^OOK*feT=EhE2+@TRcqRb%CeJRcm>{o+ z9iWQ{1BMgvqe)Wz6rtehZo|0 z&vDL0i#2VdN#diSmyk~d(5&*{3gm?hA~TIP$H8R;wctpz|M7hz_fjrKqOgXL>Sj#w zbV4mB=ebHC9L@07Um^>|%D`%5LE!3U9%Ca~V(BF`tvxQ=YElG4(`O!&qTZvXPz#i0 zOhw$Za<@Fniwyk`00_L=>$hy%w#41JvE2N6O{TP>fv&Ev%icH)Kf(IIP$c^YB=KEMdL?CyE&*Ho9W65nChh z&*bY=7T>Tp%#=L>H}+W|JEG}1y%MURcxYn^3Wb08X|gZwIJv_=U*wPSC-DRS_lqKI zOn$S2wdtgCTU`pQH@{#UFZ%5XSR!j%S{q^ z7}@Dvjb_6Wwj&IW0MA+3zryhP0~0W`V+uIJjtj?d(4^UXs_Ym}v88rG#m2bQ3%qMp zJ0v-rFzgM+VH6-{=nSuu=$y4 zjiTKeL)1L{Q91UxA2xXUE7&uA^b(`Uhj@9xl27b3z@*gD$rM{qtKq94B$p0y=Ixh~ zBT4av(f12~re3xtKoKwaEM*)!edBEyy+Tjo1#Y4v@o>@A5kOaULpKRB!Bb0{3ZT|8 zc9sgET6M+B)7KePMg-gew|@@ZUTgTG#?k@LMjQ1aQbQXrr8|r*pWU5&WvY-$Xi8o} zZei0wR!qh-T~-iGtL0`D1HS3Zc8Ony}{G+qY&Rqwgm50Yd>iv8BUblZvUX(?JablB%_@$AX;Kj z;u{Jx{lVCeB51$Ys!K1G&!2Nu#sF69&z=e5y;ZKQuN!hAdXNHoYzW6fwSn%7C~})v z*IgII<)v#w?Yrm1j=l@g93Ig6&F$p&|jF}AmuxcBISUP+gjO@N)~ z$d8_ej&F2q)WvVt9tu|<{G()VDYxY4VlfJ60-@kVT$&X9y>@s!Hz!@Z0P$zH-S~DK zI6Q(9OlLB`-W~fxrn0=nw8BY0J>X0uFcM=u?3mYcurMf%4#L^_XgCZe_-J!sZ(K)6 zN8ugEn@GD8;>^&G?IQU_-7+RQCm(p#?B8%rWWsLN$ub}8I0l#B7P)4oi0)#8S@SU* z)Lux|JFF=-_prY|^G6eWF$4jT85pwhd1Hpi#^BUI;JX?_% z-2~*c0A^dJ#msPn(U)NWk00P1uX|&J2@X{%!i{NypET0n7gIz^2?Wc&05{{ z%)X>t`z0MuGGVJOoD~NzciU8Z<${@29Wyh@2;3-(4TNhSxq0qaqltC5-g)UrZ(eNO z%SyUmm1Q`1z!ftS^Wc2&?CUFud#OcY5HcE<2y9~t_VlMG z9JZvNkA$;3@PQG_iq)6;H7$2?lWpt*a@%<+V1o;%(7j?XkO} zt!|$QN3e^BBa4OBIb}864GOQuVp8lD^SD+++9q_C$J3t;G$)tmd|EZQ7x@<#xw^-f z7*%9#K(;UR;s4S<4i;lPNkovv zYZHxG>x!RxZbCh?V!{x%KK+_{;2L)Jc#C!H9Q2iY zK>C{X-F*nr8 z04MfVHykX|iHmB)1@z%1G+(#gTiZ(4d+pDp^;Un{GD?v{0LlJe%&X-oqcC|$g3BX3 zx>BL>WB(KT(Z7c1h(v71cxeLxa<3WX4aD8K=t#c%{k-F8PpLk`&nS+5Xfyq!)#B?e zU80%56EWQ6fmBkp^b%tyUASIsPZ|@=nYHZg9o3I97DUm0Q2h!39%P71I$ChJW_Vc@MFkpkzj@kd?dG5pqz^r7a1m zebcdb*%F*hzB+3{E*4O5y;IgCt;xOF6!cX{gvasVY3pT3kEZea$~VSUlRL=j8`)bF z%-C1>Sfa;R@Wzu%s~tV;DmaymLTC3VJtA-V)sPfFGWhi122~Gl!g=rFEwHBfp*29e z#wJbvpw)*c{(X9q-al*9Puj;_c%;r~QpBG~QjP{rRcP%zw#Xry&tN=<`#((rXY`%u zCFPW0M{?@Vdz0I<3*{{@LwN-Z<*fe`g(jcRkn9d|*?%3I( zr_7zk*@wE}c_XX5-Qm^{r}sjBqkv{r_(KGv&{s*=0}{+V%PMg1b^%+-m+HNSGTQuI z(>G?V_@j^)B8EC-SIhkxveQ03L>n-)^djNUkkb|nQ=%ZpNDtKc$M?pmo_{n8hwB~{ zU}K5HDYjNZD0csT`ef_~KJonLI z^E`~w9$`oz3Sd-eIi$+dEQwd8f~X~%xo;MdNM=l4cXd$3=H6vELf95^!}84q9=D@^ zvUZB4Tr-gyKN_BNMn@_AsJ8N_96VDG>i2c=O#2w-XN&M(Aq#l=b9!;T|756sGE^5Z zwR}~EYH6S2>MlBK!vo4$7+wpRltg2X-5H9@-lrg#db))Y6RTX080BXi ze9ko8F}e*wBv~G-8dNXf84K*U1qMt>8pFHy_gb zRe2%KgGl%><+Jz~vBxrO)jWo0(Xl@s!{b9Ox&u#fi7|(2A2-+zz`wBOyt4_7@~nK1$!!_;aJG$`0pQ{KclLZ9!dgX@~n_Cx% zw)U`mJn<>MV#Jp%6FdmM5s+QM+e7+YltWkaAnsp0C_rLxBQgQNz9F|)+0xVI`8}H_ z_PqYQy7^Lo&g6&dDLx_!Aob@4JX(eg{>>lHY0c#6qS#1)U95fx&|^4tkcpII%)i7t z_bojyfDXqSd`m6NGRULg>1sG3>psUMx(R@^3D;y&!;m15N}&laf2I(2Ce%VDAx%la z>a8tFUL5MC37e4M{>bR?W$ymodM~zebofGp@QZdjAMWZz^i%BS#C>s+es6M5*Cx;~ z89z`0!{eu8_5mdPkTsP*3!?~A(;%FJwSf0UX9~%*wxm|<9l5Y7QS+^T10RG8PfzXX zV)J4A4G^zf;=0AN>-~dP^Q7PHnemI$D>7Z-h}Zn$yj*fVs1}t5@-4iOH&gWE`?_d) zx@N*}%8d4O%~bfBDf@BfhsJ*M^n+KaP{3*Ebdga1*Mf( zD=AStyCs~_aUz8n-Lr%4TeyA^S1Dr0%-Dg8?lcIsE0qh7XF#Rf;CG!Eoo7Qgwks4) znD6ezc&GYW)m&|A>z=eV-du%d?3C?okwAwU3$q^&+kp~)0Ry16l^JQda=20!G6Oxv z#feVA$O0!&34=f&HVN}EUkn3<6NXAarK&V)W|=gR#sE=3uD|53-aM{1I|X{?^`+&D zA}KQpJlQ~;7U-;wN7_ES4P){&i$*s4Sv5rwf`O7ZBJF@Ymf`g^1$mjyxkWX_8&z`; z6P>X3(^(J&JWG@oy~$8Xr5eh2-wgC5Hq|yKc#G5Ll+uPu=5;AOxO;>)giBY3hsZUp z-da|C2xACqzw4-yv;0z_&YV);f(F?G#=$fZ2OKO`3@z=aR z1@|EZ7EM_Bx;-!#xe?iKB)vQi38Yfz@uy~_Dh%(OA0kG^Ofsde)VUN^9E{oAS!0lJJ-DinHqv4pA!mFHt#eHES*akk zgPu%wUpUsDk;HIwbMu|-Q*^1>lD0q++Xn6_ZuY^pyzNMDo67OpZV&q> zqpu|jtE#Y4IS=D2p2O3lixUHUhh%wj+CBRCc1IT}w<{GcctMVeZMCp#$$lal8{^vX z-qzQZv$d+YADlCJWe}(_m9VqU2i$-GmE@E+VPw8^k(J7oohaa)y$3Rf=xz3T_cq6ebM9ncEQn zuxsHyy=KG)x}$tn!9VAt8Tn!fePcyZU5#WVcFUk&3DTCy`@0~&0%|{T{U@&f#P$E< zxjw4P%d&lTWU=xSPk-X+|BXC-v2))YIXgE3wohAoT5QpDuFkVL%Ik=;ll}n=(Yu<3 zH~u+ziv#eZ_?EH!=Qs`RcW!}eSf8U{e4!;@gpf~Vk35$dj}OGpGk-XmGX@~8y}2&{ zxHhH<8z-zQaoiqR+AwiXQa1d-NX2k++G;8LR%W+pTuMJw279{GXzoea3<((wg3+9G zu$yH4b+gjN7>qv2TI&zQ+*UH#)LSjuBn1=KIaK6rc%0(&&@1mJA@r{2g6PA}fhBFhM zZ)+BO2M=U67{%itjlj;mBKX)MD3G#${_NmZZ<5Rkfn=DG01^RV>Jd7B2oZdT zA^s@gKsLplO0?yRrpvqzxz-jFF&T=%Bwamf)Jr<2C!MWwwm)kgAIc6Cn0eNZMtEjk z2a2DiTaqyyjo-!o?2>iOKzerB$Il}sVkgF>mp8&;joOI5sRSU91LN-YA^#)wnB!$}G@k`B(;qp8g)_`` z#_6Zeh!uZcM#&uDY1McPbOAH9^I`ZaGng1pE-O6g^c7BexdAcYnSWItLn0N{*>xU% zIZc?Sk%W)GfqSXk2h}0s={L83g6DRs3%SH4r`C>tzKEaX4?uHxuCK))1HEy=%vL;> z5Bq8_e@F$IO=x+bt=`^v)xX`LH}QiYozfc>2GHG6T}NkuYpUTYsgR_cicH#=j%V`_ z)u0>1#))TAN26CiZhq*4LqwU}B4D=~`{cCTKTuT;TJ^(z`{zcd)7)=ZpO4zWPG76l zz<;&S1$P8v_byKn9M{L>)PeCMp zEvFp?x;Z$KsHD!*-1(& zuQT@0(LSMFDKMGz8C+a2HH{*ik;~1*Gu9DpDj;Fcr_rw`XI$?$4wcYVdN} zYa+TP>1JDKQcWSK8dHaiyk4L9v)Sz$yn6N+HNECjhq>i4j(kqdc5a!>MdxpcA=W#c zU;3vfB-$}aNff`~7KMWr7!F%J?WcGEG6i6P;9e#Dw1Pq8T0r z&{Be^5krIucyH`6N(?@ z-1(e|HWBVD5ri^ClDPY99pIU>)v7Q!PjQ2)YLHBr1p zrIR5msZ?Y)e@Op#nL3`#ONt)~w9BFj>g0&pkNt{2*Db}>D2~nRWE~+K&IIXCPqz3a z!-af$;#EP6ViF7GD!b2HkXEPgEl8`A_GTOw%8`@#?T#iiWu$a|CT^j$_YLcgfXbgg zI|g}^>)!6!GjR{L=g;Dss~{Llw|R97wqALj=kn`$g&tSn)z^l&2vg4Of4~zWK8iX7 z!jOd@%J%DOxp%e=%M(T{m(ECf$h`*j0mPsINo};YM&_|Za26k6>s1#!amq6ejYa;1 zE)bx1nhn?kmKwc|g4XeUGE#2JO%hSDwmxe14*9i85%Tyw0}b(^ zzLuz1_Nsr|k|Wura#W=(0Wvl^2d!TcX&^2tw;TlOZdsZI!o?| zc444aUCW>YGt<}JX_^(mn1z{PBqp^C$}Nd>_keboXr>#)e@BkE=3%-Q#;DqRY{8X( zQ098oJI#8_xnP=|EJaL}7iO#cd7(rr>QLHxQX6QaOSx4($&@Hq@n<7S?|F92>gasY>STfAuvPtaapAWMBv-U2D=19pVk11SO-fdcf-{O8Tp&el_u$f49(4^mX6_CKvTg; zUE-vAp)EOE?Aorj)HaGmv40NXA31(01>_w^l2_U@WURTSBbU*90cPoS^|i;29CB;k zmn+~&KDgYRv1JHmY^8fwquKC;v17*Bz>%4i{VNQwKZL^og;Gv(C`SpynJHGK*pE;# zfJl!58LZ0bbxRaPcmt#|am4Yp1eMzQokw04d#RD$`J)w0I>-^DSS+=0E^+j1xlUCo zZFCY6$iAED^IcwLlyIMckV5?Y)oBZJjZ2m*vV5yL=Hf8lp@y z!Z({wCZx7ov2;twJta1RU zbnSRzA?n(!NS-C~geKW0oMC9`lQ0rAvFxo0Z@2a3Eh_f=2|2h+E7zeGWJENO-3UEL z$?;i7)PQqAK3|IdE~RETtyWaEOin^XH@W`#d4)qaDRH{k;j$p4qcO>!Ns$UAFt#R4 z^98DrpLGK}zM-(^Y25hX*~g#HT?H2Y`P!RQ-ts=geQ@QCWAKv#hh>He#(liMB-NBO zWz4z_$yVCj8jDckG?k@N*{$`Y9`{bINzMm-d}R{bf)52g>D!^+kc$IEYtL&Y*4#do zykZi|O8J4Nw)#Cz@sqmlIZkTUJx%73D?{1`_)Q!PExxLTJBkvdkvr1yBn8q;rj-h# z>+m~Y&xJ{UxS?8I&0t3uBx?<40Mexl`FgKcLioV`d9p#~1A8(<>DNLRD#Qo~RrsE4 z6nmin8Km)X{5`Do_k1ZS7|?|u#bpW!BqnL>1KB0r%z^8Z4g^(4HHmjw5|k!|K*-*& zMu7)0K%ixAxj{oyK@%JS;}`K{SCiL7*-(4e6`n6TnYmxioM6q5#G4B+XE%2?1bNI1Cd?<&ohK#La&^^9Pg$*oW+-qail|$oS^x0o&rCcOAU*ygK`VVFEW2 z@YE^qMCanN7mN2tjOJdjzA)yCH5k1sE@bo+qF z_nW5YhwYzUR4UclPhLd*nS+^!!x^S3}F-BoLTrOHJ~0IJfm{G)$Y{S zpFLA~*Q)F4(DDrc<}0`@zVYqJoP+u{DB|FVo+hL6>aH9+##WceIRcDm6wrn;YBSvV zL;)Pl;qJh7&GiLNX;1?hP8}fR0oD6|KQxv_5t|E0&^4olp={xfpz8R?xQAiXQAMTU zf4*qHXg_N|E_7*FmAGc&W@dHW0|Nj2A#zdbvEog63;vk<;M{eN@Y=4wu{T{`0egx1 zd!5(rMbU577j~1jkCgyR5IIiLqPY7{Z|5GVjRvr}$VsYUWI9nHDAUPH zCTZB&S(b`?{+vahM8EruZvFU}3D=6^Y_F3btgq!;BDMm3jHTkii!jaidI~uP1in>f z`YA(*_!h&}h@FI#de@ZQ41!!JHDe*3FGFv1V&BoSrt4SO7hOimer6=7kjw8cY9^sox-xjK%_EpiE>pu<9Z-dD<<2^#EP^G{I6$ZoT1X z#uR9w42k1_1`~D?F!HxHU**|ALBS)B06!3xZaXw=uyuL(@C+k|eb zBpnu3iYTK_3dAK^9Jk0g?;6`s+r-9(w1NJ}@|IG=r;LGZ`qai8#z1n2QNJHf6q1+4 zVkQGp3TL>i0Y}4ekUA@~A9K@mnrGZF^RtLHR1l~B`;Oy7aHyvfS@1;a8hI{JWn^@0T+nV;bB5P6)HM$=FlIgAxi%=RFh6pT%99J!mBKgE2F{N;}>guo%YxCl@V9;)Zp%TO{4`Tm_Knjl_URDFK< z8SyX+>wU}&jp1(>RAGwkk*ty(hYziZ>5=#pO+8k^5_nQVo(7Pgz^e|@cv@*W!O;|w zethpi(ilX{@5T0iujPV)dy$qS%apd0c|#r>XHtl)cDhNW!$<{2(KC0htCGTaqidDT zDznpMnvIeZVV{^u`sL|;syp|t@8nc?5`H!=mB*U0Q|U=V7mWW;d?m$WmFX}s89d$AY0#!@`=+@7)P5AOe}dw}`pk%Y%c zk+n`avb5zA$+EymJ)er`>PQJuiU$@QhsYk!Lw3Zj`O1~Sx*g5YEg3{p%z5mC4KW@K zB;F^_j~>v}IzWad0hivB@P-Fo<9kPvli4@#dMy#UObTKx86}}CA@J56o;mOr{3q|> z#jrR8+yy4+z?aNWqYzwKN*Yi>lU{gT$?j8RQP`_LbeLiY&wRi=^ZV_CgT`^U0U=65 za1Uo1MeJdM3`mP{72aS9ItXVP#9Uy}_@OHs!u|%2#jJ0gn*9Zzt=ZpdyA*e}Qqd&55n(arfX7m`7QpxjQpWDr_;fZD z{2WPCv|528;>Fp5<*KPO!`FBmu|Ie%J z|6Bjk7q20fz-t#56wYhfLg*Wo7%Mio&9B+2@<*$jgZ6O~DJ9m(R0^OF@UF?Ws|cC-aF{c zdk0;5@1Q~N9dz!!g9iQVsQ0sj9{%hY_h$!uKRaOg*+CC~PJzYl@5nL6kpq?^$GAt1 zxgBZaK03`k-hJgcj)VFXfwX@yns8dCix3M0_FJ9^5EDZ2*Y44r34F7dT$i{Kwjv^l zi>aHoEadV@8#gsfwHolw)`e~lG{ zwzPGE5w@0c$jDA9{+0Um4UZeuJnmPu@85s#t(Qdfe#CbFB8EqOeneZkqGyOu-M!uM zdhJfP-QVxDPtF?klPcIm_2F8L!*0KK+BvRjBS4R&mO)kMmphmEV2+4JkVg~ih~m;9 zWT-Zo%e)9lSfXF$j~_SX60Wi}6hA9tNYU;PYQpNbCWa&AJg9$Ddq+&de4f zMnuO2$9b2vuWZ7`H}X{nh`Up;WB_TZR4zx5P}rwFa7oZyz#3mr<0uFy-!KFkW&9%o zyEKo?c#B!-v}IU|Mr>K>LdgWu+Wo4nvoCxqmA&w~e==i>z-aon#5HDM+=(bT<16p4 z(f>F3wv4~@AZM%?9(xmVf`+Mv`M{GlcHOy6ED?XTuEn${IuRF12q*T@Timx}3Dx>0 zcgAt(9izHeSH@tv`|7I2HAo4N_w&G{B@VIyMQIeHWB@*z5a>AD84w2VuS1aA{yHqf zr6)T9e|@o8yTGaFbV5-Fbyi#yXtBW66EyB&B(6mFZjlQq?UT&)70X;o2uhQ=5)zR^ z+Ilnz$3&>FM#RYk>)%wyk=YyBaX%PMM$uI;+#^~c^eyAiN5S|)oN~b1(*MmTpUOa9 zaA9B!6n09S;MjzYkQVo375XyXI{cwc-OBB#ABx>@5~zdWJ)?g3$)I1zkp{vxj6Z@L z1>a_2h)v7h+Taqy&%fjUzETnC*UR2B6ZB^^L+c+oA^k9qHBax#<0lrE ztyB`RaZ5X%z7XK5AoCHwHi=NFq*0+#Iu$be%SndBw#Z2^-AX$X0wn9ytU0TwQ?udK z))(!q_$pF{=Cn2(`8XOEelzL8>9Z|df0a$0#=+A1LN=g$jSo17)~d2RKHq-26@ zTXd`-0ePB@pg!=(W=bSauCz?U`eo%$W2gF*HEe!BmdfcQ(clRD9tB&=;0A_hyOptN z4136pBKYS#peqUsv32zkURXKFC?VSQ2&c<`@qdS3Gy*HdTg<$RJ}ngH-=Lz2eHR`- zvUlF|x;k~kP_#j$+sSTI!m+>qUZ4_%2A}{b=4qm-VV@LU2Z4TrX~hKzG)4EE=N-nN z1ob&iJ70X&hGe7><*bK+k9o>^4yu+;+jRm)3d55KzGciR4UtDSq9#X15 z-U?>Z0+w3Vp0 z0_R4RFrKNB;IEEVnBujCuBGgBBF>4|W#kV6J{2RRwXCr)sz6pMMHzpbzMrWAVJ<}qsQSCN=mYqJwAHM43Hp5 z^M%KI)#q~_g3Cw%u5N;P|lqiD8GIg7DT z$#EFX3XaogRd~eXm;fz#9<3_*4#~7XP;m&06dmMnQrs)Il-~?`6rLVGP0EcdP6Efq=mtd&>F&*<)h=WGYEO?$K zh-lG;>tcCQp-mSo7w848hA^L%Dcz&Y2SXW|E1KHbM(=-JWL30#2KJme(Mj%ozI zn;A1A2ID5+M7*;Olw1LRs!4y#wI;UFasgF}Z>M-uM=w=c_2az;zW&PDpx0^cH;z@x zEbc6Rg%9S)&)wSqlLP}6(_dT#eA(bYkidnjMtNH{J+Dje?9mbgCkKy`TGC~o3>?q&-6_*Xr4Hy)?|8cNc#N_Oa^Kj6N184zXz{q=>fRicsr}{_JYPQvl_pY zjZK_N5>6xB9AHs)m6tZw@DL09I&=~Y28csOx8D&5GuOVlspy66`<^=dc7D40h18{m zA`^5{=57}7y0EMSsrJQ1Fo^;#OW6{X5SYYUO}a@+L6j~M)L!4YUA(Z9w%2y!f~~hR zTW`zOCaTbCXvRy|q9=t{W4AtIKj2d=Cwu5w=n-qY}SIRZ`^3+(lEhT0539j^v<|ZsWDksN060o)E<5zGl!+7l}dD{*B^)Qvi!B9!UsQ|jeZC5k(JWn zXLxlO#2|5@Xw1qC6G=jiy6l5M7C~L11DS_xRSkl3cS(GSte3b4t@iO@iwV-8e|37x zHm0!N%eH2c$G%gUQj$%yN!{s)wQ4MVx|E9<38Fft3PW819_OAkAPlV`h6$Hrrtx?c z$C~S!`!X8jg8?JR8E;c1EJpkVb!jwUtOy+S4C6vGI+|bm6UNroyuCxbrG^VEhJ9CK z{DC9j;L4wso*%M3;uq=sN6RIIe`U)dnnPWF%g+nNO*7eF`Vm9f!S!^_`}P`itBA*$ zh${Un4w?Gt+p;IdeW;7uF8Q?_jL^oHQ5VR-Uxop=&U=To{(fWk^swJ+erO&adTU$j zh9Ok;xMrF>%f@X)nfAOyA_KKL0V$v?B@3+tqv{(?Y*VV^szX$_$P89J9|w~mR9goh z5E8hh{A5rMqb_9okuY{#SH|n?Cs-|)BVt^Pj2Z=?NKlbHnCai-lYHGXt#=o6*3m+r_;hG zg-Hy;5Ad45J7)?5I@Rp4)8G$4--qkg?tE~?0Q8WyL3sbVhh~Chp@csiQrPr2@?xDr zRcJTrFa^hjphlC{A&LyZ;FP zZzkFe;<-PDiX~{5<#420!i2eR#B=2+5n&H$m%{m0&-OS>jQ0$Dm!RVkj;3nU9rNq2 z;gGs7&3AUTdXp>4YVltnT13Fb^Wz%luiEoxmq9EVta~ud3pP%K@fz6{v9_!o4YFQZg03Kr z{WYSf(qPL7ejnlCBS%V|Ei|5nviEnmIP3)10eWZm*jB#fs97t8}*^LVfQ0flNQP~?&= z@z09jCZO>k*E$Hp7@m1xAt3&Zg+i^*n^{&QjRWCns)*;F)r$% z(?F9zN+)eb17?u2I=d5y1pwCsDZO-WCj)}xvLCUZue#Im2>Xhp#K~Hswy%MXOH0xa zeC3|u)X@g0zg7jb`B3r8Ex6CDcwDehZff3hPe;-9*N}}5?R~1`*&c))GLhCnPpjyg#3P=mvb9*w^*7HQ7>k zX|Aq=s~!!r&ZcNiC)qEc5p<0Gt{Le0?3vM;i2<;v@2D1s=WUgJ(0<>juD@Cn!}A|` z5lu@DjCjH&P(F`w7*1&-t2-Oe@oxLLL0%IAh5D^_`-JuDC^_gf8volc2k9ytm&+_& z#LcRW$*`1K^ZN`bZ(T~DjI*8v9&jE|WkGTFxK~qsI7C8CA7ScCP-V{Jq(<(&^^|-m zm(=?V<~6Z8yRF9YzRmvYVlK$7G0xPkc>7rPx;OsR1Mvcx{sBJ0p_$&DldLF_8Bf$3 zIEZ`>l}d^P%)WYCE8k=(qzpG5Iw_H&G$dNdlA?+9{#$bd&D*(S&u4nh*stB~2t+ccT;1x-jZ3uR}A7ARXZPw)-5`dH~*^ww(|KECNzu)UH zn$G>c1XWKCN7Kbp>jr1xIGs9EMHcm6{c+ndfZhhi;wVCWi2^JU7{V4*Y&WkZtGPzq zQqz*oCq_j5^tJ*4JOcv&LJI}-zWG1NVD)?sc>%AzTpsYMtL+!H@?3`&|0^jS0B(Z$ zenW8Nag23zAS)Pt8Tu$NGLIhiM+L&rp(E%CJ!oKTrg%gdb+;e_@8FC2kQE6d;gbZ zbawc&BGk6?aCocKHnHETOxO8DDGK!1P|E&W#&;>`o1c|FVt$7mBE3MFZj1`>ZkMaC zgj4)2FV;fJ4Yg1aXiuo(nt3nxc8k)^nqSv{RO{w2Tt?(PE&X}(Gu@)b&Hd)FoV*6$ z0ljE8p>5->!*O^6>tce><}E(#puJpt!Qto=S@xEl zpcQf1gP=|Vm>$zk0+gkm1Z?Oy3Gm%<65zAzB*1s=Bq&R$QNun8=v~=jqOU(QPXtu9 zPK0@Tz5aHKj)e8uJQGl;&O{0eU)|9eIG%+JdoPxYxn!IkZ3gQmK=*fg1Q^!o(e|7F zCQc9ERQ{7VJrZ~9(*p&@=`q0v`w#!1PLCYUIz4=7$LWC*JUzQ`qTQ#besa?K#q0iZ zyvGgbs37W?-TB<0rOb7n^|Cm-{k<9!q%(r1T7UiTx*HNlBmwH6Xh7O z#O4kP%}VS8^q0UE$$0Gkk_)^pm(Fd)y6gSyLtM^2$kps4T+HINEaC$iM8zKRvkX6L z0xkHiJuk7w!eI?zh;g(DcV`o|#^C_XKuDQrqTK)@26LAr5BlIGDX2>@t%~u0SMZ-9 zG7?rGxDp`YWv>O+m%I0PJH3~_keA*auy0R~-ygTnj=z=NSPP9i+2Z?%`PR z05QDSRu~^l6yCS`B%}>M^pn~a8No@7ZnI5^U#T}d`rZy0&wml2>pv9f07#N zj_ZQTjE&qJ(uaBNW3PAASisAXo#P(r`-W?&BtK8PC@0tHaEvZ*oM-WJ!NCw}!EarB z-N|NkZj;6_pkvx+-x%HEpJKD6=+`xZr7aZu#Ql>9T}Df-_qMzsDWT^gqx>DkM*JmU7S!#%aIJc~PP4I!K{C@yi`V&h|3_JFt4 zI$cXpv$Lait3kG{95hYmCq&ca8wg3##EcT6XM!L(L{2qZbGt1K|dENGhhKJ82yk6sfdS3fL8Og|SR@g`k(?LUm zJYeb`|64e=fC#U=H6|ym)6Ml7M!jA4z7-y65*d`0+%O@U97gmF1OWP_&a_UogID&H z_Ndmzy5Z9L^qhab)tU-1X#sE`aV3C52~m?%%AV4d^FYVi8yhV5*m~x&Hic`Heq4G! zHJ+<1ddPw=Sky6F`Q{HeV|Z!ry<&>yAW&4>gD4AU`nB3f6<~j4D%I&VIqtqi&;0#HecxLL zVxm2EhD32A@Y=cwzGJ;%ZcYXRTNhj;_8rVBx8WQT&HKa6%}p=HTv-q{aCALogp2(U z!~@I+XM6feXfBZ_h;WadI4aKitFi&34k~@?Rp5`=BE03VcmKfTYmf{sgnViU>xg{f zF6Xxx9*4mzP*yI9$#xOL7%gY3L-Z2SCs~<5Cf5$Du0N4)aCwphbVnZe6E76DT8can zi9Ej(9)+W%<0Tk>{-0q6*14uJ2ZI1En1V#nN1g#_sU|Vzn`^X?G}DC$Iea-+gwvKx zLl2-KW5dM}*9RrBh9KZPo0!2-1S>54_ik(rHZduUIR-HuAvbU9V zyw8}5X%n$x96IJ<@#*9=Xshk#iOF>+C%P;f6y4Xp5G7Ar%M{q2UG@Vo zt&M`{*FM1q*_1UvZ zgs}Q=SHLVPtZ73Gd>W+v3_4%`11Kn}JD{W_|#nZ;FL$}=h3?7AC z@m%LVy-EkCGvZG&2z`fg(&fZ?x3apFbbE^0^0aE5Jl%Xw2C8Sp)8&V2uvv z5r`0cZX^`6XQRu}1TVZ){btmj#}Ok$&Z?4%z`Cl}y!0gO+Mm*6mT%))|0Wn-2H%1U zxOPN-3kKUvSh%<$*8=hT4Fhn0G<(gD5mWwk(0>jF47b*JrLyOM%Q!StAKf8TBlHk2 zd;E8PJW6#)!ARm+}iSvD!pal7-O-YR=9w&WbR zK~uh`mbXQ=R}KEhD;0cQEh%toba@pcs^(z!qfyC&@yH+G&;lKEIy2D;x0vCVPy`GdVOETeXDT@7U6{brH+P zd%o-+YEHr3h<@I^Lqm{Djl*!*X`UbnOx8r-%3pb%k4zjk;~jC)SQ7RLJJZ4St>=%! ziTQ0c>0RyFAvRrr`|l4abboto?AJy zGZ{+keC!Vc3}=XaLPKpz$!cQ^m+igrwmn{VbV_>CPEA+;X#kD9%+daJeWSv?a2 zhbOrh$xNVGz1an8gu&BRljl+Jh4qBVq$}9|8sqwGWzIC!IxP;+ssM_D3*kbn8C#15 zJW}}jeL;6}+N+<{e@O$7Z<)DZAcx6ECvX~hI84Y6!u?QXY< zusNl8y_$#&RHFST*T6G9ukEH#+)g1QFxP1f~{ z$_L}oGz$t#0=*}+7gD3!6xrx=uzDtR}R>c*9i z3I(T$3}Zm!7>_r=qK`7L3oGt)j?`A_d#N_l#ly+2km%rxelqEAo}<1H!74znijb=! z)QauO{}HI{1P~zJK#T!FG^rEn_&ynVg4ElquXvHsjFQmf&r-s3TBiUYOG?vQIhI6V zeCPC71R=&Dv!*Q@WXw0oNO$DqUKfLlNotjfee$3ZMSNVv$l63f3QnN*I1^Y7IBNAs z5Gp!X06=K;2=D8v?Db8WR>~8CbF1BS6UnFt!{7C3c);s=&%M ztX!aOEnnU30{y-$w5$av>%A^(t=E20XzOLG$Aa)huU$;1kgXmK!X?1FKRFOD!O=&0 z6k#49xC|dnJe|Um^aSqIa7O?Fn08NqWs-hgaz_dAvvi)2f)mM(b~%T)H}gm1&C#Sj z;P10k{^=5DAf=ML`^F~CNqq!H|MYv8zihc4y(I zU~=NmX17*vxT=Oj7=GU6=?!3aTkXB~js5;fz0>)nzuRfQZyfWemHXlFGBAZH-HlR+ zQ*bQ?NeiQRKKKM1;(O-^kT(U0s8-2b0d1`W4^A#c1KkuzVq&6Fv-b;RA3Sa!HxlBn zs`}PY%owI@NiaDiIFQRv% zy9mbU9E|?0Ok*SXg~_&I{m#V3{Tf6ZwO_PZ<7~6flnn?AS-8 zcqK1MGwEG!f@i8N;0Z9<8%+Xmdm7;Wt4+k7)|0D}B$d->6Wi_w=#s(YRHU10%7xUL ztuYr+Kk0f|o7O|<^h(;fpBv}<)88#^RWiCIH24LIYHlsQkQ!f1k1wXkJCEbtZq2fk z$wyb`GxYgI3VmLU{*hGrqB_0Yhm_09fA6d4qK&M(=)#xL%il(q_`@oCZm{EW`hBfc z=48Z4861)$f~I~fr41xdOdINp`mxa27enZ%DSy&&O$ThD6-nzv{E%u`Le+r&SHQuU zN3Y1JZKlgN8?Jfy9gc%~FLpK?#Q_tauEFg%x@P2=CmglgUYUIzk-t zn7|rClB#idIT~zkZX!E|h+X_mIIM|4gy!V^grO$n6%dHviIDisNrzEL^%?C|=#%#e z+JFfkR?X@7DT#1EzM0^f*=X(ecYmSKwTWzAi`$bwD|(-bv}p{Q^8ludUZ|9P(YT#S zC74I2hlhl1^lmU4O=J1`X^(H*J`^V&%o%;s@euj5k`|b%z)U?}b@Uip2&Zhw~eq!DAPov;qJ{bV#VATAeA6zr_ zcMuHwm-9&FCFh4Z+F`vK@qvi-f4QTFVALG&nGcKKW2Uo$h zO#KP9B-tDI^cpw(hp={##Utvw_DXKDTZe1f3|lPTyEC+tp} zTW_^H^~J_fb%3xzzgIs!?%n4ha@`K$#gOKLZHSHlp-g7YV}wH`2LF*CX##{;22TH> z9)T~P8|Rw0YWJwqM%Wh3oqNqxDn_kjihA9r*gMW=OzDYVpXiyHkyqNGo8?Cpqc98f{IFfxtOXaOjq&}pi7zzYf|Ty zqBVRIStfJ2QYJH@soKz>A{-1td`rjS@yAgJK$Sgs$i_;LEQA;I6cC99)3}*_L;)Lu z33&BTC19TTnvu~?isT?CB4;A0&W=uXz6U$zmStzqEHa)c@5xR!v`*F;qo}?#%%S+| z5WZbUtl|Zwg@d;DwpwcUT-|Eh`ov(0_tEpiT=hvP?x4|hv@jbh9~+ac4syOYqt z#rFl<@mf1OE?3=!1mLjI?VWbu^0WvM6|L^$;3wIeFxl2kgKc$7nrx*Cc>~5AJT$X_ zY1Z$|QhJ;?AZf!}yJbRWc;j8Nzt+9r;sQ*pjBbK40@Y5$&3DEkswK(xic6Ss(`|f7 zQE$cdG|k{1>u41|<1Zk^odE)ta>1u=Wem=Q>ndN~J$q&yO!Mkb;)3%@teT9uP{w!< z^e7d{ME+-~`g%LBr5^lgDgtagPF)@*?SX1Z>dwwC@m~`!_{Fap?&Pbu!_9Yvn~92i z4V|Kc0k+#5vE-%hf7z{W+L~Hdy3RY@)Jt6q6Xel7Lyg)=GkoTSFKdYs2Lx-@gap@B zu5u#*;)zNCac~-(uG6&Zjm3Sy#p+Uxd*EV~-ZJe@K|eH^t@V6O#alaX;I!76jk`Ca z>+5X8ySu#*C-tM0CYd2WhA|8GCfI-_p;F`|DbN`&l{^zs6{}gGlex~!-2Rk3iRCJRK>nqQ6hD0I) zvXyi|bGyoAUaZP>Nx9L>H%68dW+}1uPq(;V_bqPLp4%s((8kk0_&4X8NeLfT`VG9| z5w{G6yrtr7=~T`*EtnJmWO&7DHMu?8B6OQLo2pBk8XA0WW}&v#Vp$|X6`q=INXLE@cdx>j2QtyDJsW84S*}+zI7;z8(yZA`sTs|J{Qxo>6z(`1 zpHuGLT!yWsDDL2L^Iu_j&DTT#ctD50I5=#0FXbXLOuqn&-5j2ZosT9V1W2BNVPe3B z8{d{ae{{_eIepIV=qLKSiu7%pUiUBfz23=(gZ}<0sAK}T;hb*I8Rv$C*>Kyz;AE%8 z9|tqIhV!Q5d4yLk5olr45k7cB`y)JQ12f4b-bKUHHVouCU`oc|ims(ocW}iSFGfG3 zpL0ctdCZ71E8mnd2utD~!xUi_n$hn1=ug^Qay+XC?x1Z=5!kX{+2;qMmH^`MpVa4v z_QhjCoAE3mKeT-4yY2F#SJwr=5tny&fhPNbbxvUD;l2e)Ay5`PA-krcO?_NnhAW!&*Kk$QhD$*Vb&O%Zp@8)N zoIrNZSl9Hb?+%cvUhceV(A7b^b5`%{-xVU>O+JtoYB%E6g-P5B=)^o;6Q-F#lfeB^ z8tXKJj}Wq8I;JDMQAyS@Oor|%CroV5DmM*>3F8x8Z3@NRTxHwTAoX>ZuW&N@xxBo( zQ;>(!qnmZoY&w|+om|$O$1vp-vg433#i3$~ixlcpm{CaMED%y$G!m~mw4Km3hSj8g zQLw($FmNYMS}^*C7YElS1lW@j|;g+ifbms%x z@rKsJRdD6Nn+yZ$4_S6J4F*0!p}sSXvtOLJMD}k=MFDgy!vc;cE>RD`2F8Apqlh-$fpew9eQeNDjdEMY{#(%!XqzJxknuMwnd1GCPXB6JRVI5`sDy zFv20V;#W>T1wKwk2L89635xf052P=b9x_ahY1mb_<@nIfd8eHE&Q95-X&t(v_A)Q+ z#8E2Y?ab?Y*lcsVcRRn-JN=Vpx7TjHlB>**0$UPc_42^tH!LHGSLq*CwY787&J^nm zlT2*EE4glN{7K+O_HB_^K7&%^ee0ER51U%M(91{nJ*)f9ZmD-ySu2?!OnKMw5w=Um zc8RKt_w^b!vYK2~fMjq|S|-f!_iOc|aW{zuRe$VFM@*g?n>U*d3{`VpOyiu73Nr69 z3*%=&1TBW4MNxEV9DRV>yCtp(b4oU94A+TZV)+PCu{iPR&h#Gq7S7VCiFw+fnPK* z_;Bsd!qM;p6TgGCOhDF)60E|c_fF)!py!Y4JoHYx?;HHS<>^>FqHO83Vd1WBJJsq; zxzgOzN;^Y#ZL#H3&;N!kPDdio88Xo2?OVq z^LTZd2Q8E9SQZf5JjWe-Bt0l<|0~i2#57w>`L`6Aw9_9=Mqom`!qs#t z`R!hxk+R~H3`3HZbF7zGg~TFe(yHE317?%3I^?EC#fecNTBJ296wT->AVvR90{Y$V z1)cost`4WB_RHNG;9(FfBRmYEw?wn>M(&G{Rl9L^B8*|8$nyYC#hZK)e zs@kKJlCe4^cat4xqNbqOwckq&sw;T82g}2e zI*pS?T@$VEPf{k0%(vM)r~)n`)~zwXJcTtuz#=Ct9y83bB|NYROma+ zlm3UMw3JB=rP1r3)RjW`q~t#wYt3!&{u)$?0@Nmp#&8d%2hiH}QD|iR8~%d-(!4_! zC4k6a!jG290VlH9)9*nOHRObWFytu>14m0yRrybRWoa0SjQw2KZ2V22Uj2xZ}VU1jWIw|(XsSl*KVZPR~pynJ%Jd~&=@2QRlL<2^0M(w>v%@%@^7Cr!v) z-jh$_!-L4x_vS`{*L4dWx9)Zl?!k@1L^P+f)_*i-*JuCa#`GU{{=R-MCi>O#WBTtn zb@UDYhQGe>jI5Q)&VBuX&OAH;gR6kTzRu$jSX}RQkd<#B>KI$B!yxX>XFR|c*gQt@ zZ9n#&!;fW%xlcElY&&6z>82Y^DX_t~>J+rs+o--?5m94#@EX|^D27LCschV|l>T zMr^-_B-SeJw%TXz(w_9}Dh4D9W`&w;C+0;9cOG1gAQzWE`1H#2V-H*^UU@-0*mU$! z9MTtJ*!U*&h$_GGF6R^6uvg&2;s4GEHTIHh{Zh0xMk%Z9FH>?S=&Vd{8lrgS!&R`O zv*OVIAjXFTBs%nLp&-KY!U=#^ndqZ8^C!^=l5|l*e{52NOKkk_I$LXlAsFnQR~!u35L1Syzf8 zW^ywkIPjpP&%ivkvYK%sql#Y(8f^LE7}SU=NCK{)>3jE)0b2NV8YD`f{RaLy$kdr*Xyo%Rg;pTC$l9d&Sq&$A9wG+O(udvzP z%pc+-Brcx835Kxb@JS|vwR_PIud4%bl5^uuEgN@g%ixYK?wIvt6(J39&MMgIK{#u1 zG4nr;!)ERW(F3;N)SYuvtU7l))&E&szQEeL5#FkE4{Q5al1724Z|9i$_B~9!ptMt9 z1}}2V;Ke=6;L#%RQv?qrsI-yly&7I|I{ zpK8fZ+sRKalAm5CKk-Kwj!|}*?3z-<8#&+*jjW>9FU{jaR^B_Rx(n=4x=g}7k>`=# zUqBiipmiIwPZK8U&ZiqQq=F$}_ACmu-BO8u9OUKwaeMFme*5fL5Jh)sEwgkxv-Cw~ z=}T8Bq*#D#nSCbQ?DnhumboDOy~IA^B;BoPxFa6E%bej5Yk;jqeCu5U<+=)Iqkn}H zrrUYvw>+^RqffDZ64aWd(dCm?{TFb4t@pS42d!VSLD{}PP$;0j<|Aa>C>qZY$jlAb z)hQr-@9|m4-M|~Ne&c_7oqE65{LpaF6bl}rRE`BYZ1he~EKJ64HOIGY$F~=bZ!aC+ zIJxd0xCRr2yH+9POQtGzL!+#gUY6D8ZdSYPjItLQWiKnT)=%}P zt;}wK58e2)VdUrld0PMU#NEMIXJx6a_m3B}W{Wy;L4QzhwX!;Zj5?wVe-LE!kTwCW zhma#=| zlt%^>uI{~IVvO#h7Gn9Zl2e-Sezy<*>i@&xP* zVZf*f@3gk<>hxs>v_E8&{g_dfu}{^EjjCmARIQp(ma$W{jGd}w>{Lx#mt?8bhLY!Z zG~ua<;;Y~mUn}rUV2Uhog4E809$}pDrF#>42Vn_AF+q-5j|?0B;?=g3ZIvpQe_DdW zrT12QRbXDKI|uG)wwfkdfUlV7}+u+{9=;jo>9RXPFMe z`RRwSC|OMF0Vf@B5ADj~-PTec)Hz%Y$&4zLODBfPj^!p{{GTG)g}@C)3NFerIf z-Ub+jW^qcF&EtBLi$+De9f#pGrPo&dcz?N0uSPMX>xx4lp7hhRkz{&5)3&_SJo+j<^@2$tYrC1m>1W zv{Cn(26|>U+Ln!U4x8QPg#u1zwb_kcYBRdX+2#i|BaQiHxA{?91)U3LxB5x8N)-Jq zy(pa<@24{3{d8WupU#T+(>d{eI@{Y%=X(3;Om9D(=k2Gny!~{Jx1Y}N_S5;@emc9` zPv>^~we;0+aypX-@iU)|EN&*ZL`NErNkFFy-z_Gfh%I?`?jvunWaw_S0C* zqAobi-sdEnmPV)9Hi@>os-)5A-dVG^cT_oOwNDtO?gajTaxn%lz33{8NpYuMp|d1q zhPLu%DXoM2L>s!RE$S{WJ#ThDG(PM$I{hPB{RH`u70}l(vqr1cILs>VEGn;eK4kW< zl^4^AQ>;HpMKzDwyvM{4COHM;H1m;{>cvp+H0!N?t8vhK<@nx#pdzjU+YGr^@AS@& z8Vy%hs!Vp5u~uM6%V9X%oySbKx)|RUpE3k8YIF`-zc^r3Wsa$dwWw3Qj~R;F ze}_>}yuwzt5b$EfE7AyJ=R|~6sASSD-8x-gMmZLT--IT=)g0fp9p5aQu<*mWmrbva zX75LXPwr*OgX}-{-#7Q(_Ye9Yn>&kk(~COkMJ-X3m}9P)-Or>_CX_Onl!>@McT@UK z8MA}kAf7U{*`#+}`-N zMr(er0H$wy!g|qxtLPxT)q!fY1a-Hu)pyf#Hs3td;C!D6F3VvEJD0m~VU{?p_!WLQ zI7lgjCAw1!=3 zhz0~`$D}~&#GV&KdBaSn&53euS+n}YKyOwSRK3E-&0sS8$J`&n=>O9Fp z*aa`;K36Ok)Jlq8i7LApbK+GTLK;EoTvR9lp8?l*)Y6R4C#Q_|H`xZY8b}W_O3#?W zX|b~($gB0F!$h?`TZI0x-)*0^_Ubmbt@gVojlE{#doAVrcFOmnGJQem-CnxnR>J39 z^!|5$w;c||cT1qGx7wXLFEvXZMTS>JfOCCz1YA9uWptIERiWE!pS<$iHIkDtin2P# z^0dBj3DaOt+eA2QK%u};kSsy_w!5gs9pl~I5niPAm|6;*rWQiKFoX1dQ%j-W)I#VN zmo2^H^kV4QT?z|+02V&SDR6&oxj%OjpS2@n;jmUxOD(b85!?HR4OWsEh8HBqr-I$I z7Q1OJ(i)`IN8hi5mJ3`e>ZBI!rnlNnZz&1|`yRrn&S z@MTuv4_4t_bS^4tr5ANvMfo%}cad|f1J_uJCc4OtS!(YCxFFH3m${CA?=peEL&w5V z(xP)=B3J{$PWMnA?e{zVJ{z`aiJiJFZV3(T5S+E&Pr|{cAy>E}>K}j>YHfLsqgM`k3OS7`lUlj3H>h4ptU!gh0}=JY093m5=5~7A-Pq! zTnLZq$A^7#2(ib)BCe#m3s36JT5c*(418M)gmF-*~&=`Dd~ zy(RFhw*;c~mcX=Laa8N&S+zS~qe-f8Hd@kpZV`pEB&;{qYiEll>gBiJB_+!j@~_}Ilk_l?KL}lt%j>8qfC(*NfCLl(o8C2AVp^)o8%v)_(TfNqxdw6%|ejnB7^8{3Jp_iE_$2%!xTm@y-lHE3eTn} zhH*Aibd=(ASz;;$&q{9z0;aVoG)%!0qqWIDOmQNnwJ9`A;n@_XW4+>pOf@MoNb#vG zoQYuaYi>OsnD#p6u}g~kSmtoLS?s&QDomk^;}BdZNM_LA4=TA~&C7UKh<3QAr{%7) zhkIJSoEIKg!k725(xOwizuVSJ6_LXI{YA=moIZwDU;;Du^+a2&Szix4VH`O_6|(L{ z90pGcnvgDpBP3})aO@PFLVnlCc6`HLi*HNg_c(yKP+$G_JjTxaiJQV*(%$>AzotCT zj{R%!>eC$4ti3Tx)CPekUDEdjz9v0i;On;QE4V6B3;^5d2K?>7$5HpXS&l^P`4hO_ zIhcjl-EcnM^T&%k8VzTDk=9o^0IhtJ8uaAHt*zA3w_fe#)?Mzab`Sdp^YM5$9NzZ) z`6OPB5aLzK9{5M?efL|GCH)k^y68+c=V+l`8)SI9HXi z9oe!cJG)yGJ5!1twkEQqkz{A)QZ5!uLK4>$$>GC_C(eK0?gl`D67|UD?mk_rVvAs- z(dc(KAlGUvnYl4@ecMYN!RBe4ut?0g>ocCfJHe75WWj`qM-e@-`>FLA{;|ejz$UII z_Fnv#p8C=b=JUX}W`a8+ice-Q_gAmOL3Tp2~t%kV6dGIJs zY<7Ii?t^5;rhG197JB?iL=4}}g`Y4xa0Jar_yfG=3Ls8+A{h4_7)fIh*>m`WTMN^K zh9i-rk&hGRf#XhuV@^~=IAY@Zf?d|HTUMvn=-xD2EDnGXz>R4}G;;!2*bfp74~(Me z@hpgvDudO5UB{1Z?B08VO>NHw!YxV06h6Ai6FkL9l-fX(h^vwV!sb9ZTL=R$o1~t{ zV)rk>0$<>Mq{t-ufx{BCVv=m~{ZA{N@kltt>U?-wJ`6(e0-JjYOSR&?p;src8nZ1)(CcsZ-{r*9V1x zAE=b_gTv>1D&*&xn{)%an&X}XkuBH-`*XrQP?f{CWy`nxq!Zuxz}W}kG=m^IAY_t; zUOL}2ZCCJ)-;M&@n%YSm21&N9NfgWr4|RVEjIT1{HHa2;es&dj4(#Og#>}HL?OPDALCH)ho-m>Knum#otvzwXre2>y|KnTe&{p@C_H~!z)QFi zdJT{GVf+-9v-sn{8lj4HgIKH=E^IScG~LKVfwcZA9M>9(2KVd%kD@0ew*-rL@4pw08 zG(x{zU3uY)1-{s_PCZGu{eWZbAo?xkj?}zA;nTWJ5@{VjC+t93&*NIYtW2rq zW;q=k)PhHj)CwGkTyWp{qtciyE4+__2jP=-zzXzxXX-xq;P?1~Z<$#lhHrz;*4bT` z@?GsbXDB9~u#=tPJC64a+M4iacho~lpmqfRz!TntjODSJ@->}}2b}@>k;K>Xv zgB{55u?};>$?YTPcH8{mO4qcV0)*TdE!eOdebbCl8iK7x5a2N0eCwQ#uD>f`4bXPu>=2a{0|*K^E15 z_fXI}<@&GESn{yfJc-=Tt;vKOd0ApM7j2JEV@!wTfG7MZRKOSP?DX_B%bOul96_}t zRNAalU)QIM7Y0`-fK0WGCBq4~)aS`&nwt@K{r@TSl8u)V{YTI&)YnlG5wllCkC-l{QlbAE@rg*D*3=?01ygbo zaRLQkVd)ah&#Yzy5*$Q9Lh7-D$>Sbx>TAls1HMZK`({ibUWUsJY!K$2KXXp}@ zT4z38DoA&TMwiw&LZUH=(0g3rx@z*^0QPz|;V}Z+_n^sAlJ7y1yU6dyQ-~?wgiae8 zdEe0jHwVRlQ|_He1$!yzcZ`s#BF#Rp^Ak6*XuDCI+;Y!#FPBZxv%!JQG-^X$NM*-t3tiTf6d>MKSFPw}TCMX?|*gAWOC*0wtc$ zw}W9BgIyvA?PnAD7$Oj+93|Ngy5c$N;2NP73@~gc3oL|}5Q{RhUXeE^Wzv1Z8e{0Kk~>*Do0ZbbB-8ujY@acTUjf7=>X-t4`AL;uXR{J%Ovxf0=7F;EIxVjQxPWsFb5%sBS<4Q$Ef{}{hvsv zE()n17*1eAyhi#_p>28ihq_?8NW&_}K@W$W>94zco_H{e-Z#gAsWi(_|tX$ zck5%TKIr#GcPpD2xb}k#+ojdoTqYgrfq$;+eH8`J3_A0W+hylZ#z2tFP&2X}$^*O+ zfhFKcXixNEDK-qQ>Z8`s8nzl&_2Fg98h5T+74Wzj5zDn-QaFzJ^qbYYxwd}0sW(S= zg$HvZx6+3q4VP9Y9=g~8RfEe~Li8CEF!?INOR?^~__Ft+A`jHrK?&M$e*A7q2od8~ zgB+udQ32f(&ikhUX+U`;X{t`yoD!PKk>^xtqB7L)FRdFN{9l6Y2H_0c#Gb9q>I@Er z@L8>0JA(Dy38?cad-aNi@$ox(W{gLu=M2@g(e1Q);}NUXBEdZ-U&E}5f}dNi!VPn3 zHN1tvR1DNmxL&RHh{cb71qzpNd6X<70}k?$qjcutg56$O?at-Z zxHV*lwb}&ZkX)!%Yj=LXZvBkMueLjRVxfo(^pKEo2XBw?I8HG)2L(=r3>Kcp6r#9* zY0kr%ygz}i5zCfe;Qg0c%?2reu67kl!{r$l$8j z@I$>+KCh^i=*S}BKs={L6`zPK75x_sTm_N)SJRDj*_MrsFncpcZy`5TgH&}$q!`kq z$6qoZ%{s*+z17Qz-(%Mdg3NOD1k-D^UVq%$-`|(w#;ZA?zhM{!VdToYIRNR#>|UTM zga8GZgX_Z#SlI}kz>g{$wZ`>c=h}MTA752fcTJDAyY)-(nxk=jIDRe+VvaoQG+V{d ztA4jxRn5^#L1e94>(`s>0lcZz=KMjh7^4zt=oB^!;8Hg5A2Tp)(LP@QE85m*eAD<~ zjr-Qedbe99IBL>qjvcH70?BW37yFrCdVbCywD&;J$`@0wwFXzdY7F_D8Tb_t=Q;I) zrQy(}u6tm==RS&E@yNAt>nBr+)UE6`$o>TbC)OGNf$;__kL88XZMo6rm52*~-s8SF z@u{=_>Bl?7y-GLeF{tqZ*ti+zei_o!J9NgSug>oDQm!vOqkOS>l>>ze(&GeJ6u&xX z^m}7;>(-!K|D!boCqH=3#;zef8Oy=LL%kmOvLB>jf_I#thXj6y>^@54nTY=b8Rh+N zs#`y`2UfRr+Zor#oqq2QqEEX&Y_xE!)wRwF9G-DVyE&dXaCmC}%FedzUt7eQ;P(7n z9;Od*QHnL+y@5A+1Nv%Uwhuxh8T)3(ZBUK{YH||G6GpJ{SEF_pG@DG@x*XQuAMR>| zh|s}~KH`d*+VRp_XWzfpe=dX~>-H%02EO;i0Ph0t9!AoDnHTs|WF&$V_NNOXG*<9g!*ktTP(x^>z+&^mJy(<3k^jWC)7X+#v0?C}Ps zP#cONL+~8(=FFvBO9fD@&>(ga?pt9)Y19b9r+k~bLak~@89o%OJdAYzf`D9nO{{7L z$sh`x6e|byx?1M)AWL}1j!#ei{?kNlzE;C)rNR%=>5MWb=C~28$XqH!s<1!M^%%Qc z=sGs>iYS@z`}m;T+2Yz%Lut*kM&16PwUZPSJNM<2P6F|+uxvCkL5H3D26Mr`M629Y zTr1+B?IGV3e#|R=Mq$#$P&fG@*4KIUljRT+LbX%4HTjNFQ}aZ&IMgCCTx9~;jdYzby~1n>D_iSBuiyCa z9t?e%e7Y#hvVm8^q@ddF&ZT2{Yjb*=~X#yDRd@YDJM z`48$(Z|0#^Q>eooY-`OpFs=%eV=5a!!T#WSUJc$p{8AwG|H5xd*OB?|W9__`l1xx4 zdEJHH(JV$I^jxxYxpi#~G)1{ryq+$Rx$0uNQ0@x5e}M!bFO3!7J@)s~SS|xOS5b_F z2jZD*6!s%`>iU=wp641B=)vQ&AOER@NaSQRV88JmJj)_mM|*n$(eA#Yozf`1N8gxi zBc#fTG*mNu%6%Yz)CdwSyO_p8Mz~m=xe_uo$hw$u&Ww;DS@17;Qbp+`-JB=3FDUk* zT6i2xe8%QN%Lz6sBEVLV7jV%~g;HhE>Y#poU9}CmQl&~Ls-|o&hy}>SNBaWF{IUi- zxR>9Ez%LOP>ZC6HPXlGDl-)@bmC7-bcl7byODAA5dL|-zsk3PnL;gQ+*e!36-0DAY z*Z@Xb#gP^Lf*oi)pEN+2z=wX<;Oca#*hF85uEe;|Y~h^vMx^Pr;B4ou-w+NPdNU$vs2 z#TjZ*kzh_~5_+0D$46HzI1PXLqyF(OYq?YiR$_>k=NI-@WxbnjSIv^`s|gqd5NVo* zo>HVR&v)eAAAAU`ryW zvD{`nm?s%X=m#QVD~>`jE@K8#U$*5ydQ`fPPlz|JKg5Rb+rrXoQF>ys1IBKvZ6N%< zs$f&PpPf;aXZ6^7U+Dywc7Y4sJgT$xX;875S9n&%Nksy;`~-I> zF9*$X$dQdQ0xCm>6#EJHSu94&Zw=wFs9Bre0j^&Op6PhS@m$*dKPAxY+Zv zYN@r*W!>X>w1)|OJ{F&VUpq;nu{w?z4>4KB#!!9u2g^DdsF#Z%0-ulBCir{*7_CGC!1Jx~*34Li;(CS3`^i}N_N*}4y`V4hdsgH~zWzOTcc6NG5Uh3@hbg72X ztuZKHEF1iIj2mxs>!XprAcD=}tV}>huZ~n-1G4kHh&#k1n+1>A8(8D{`G91C%R?k| zx%ckkx<0lp5%H^6#mFI*lF(fk_%bcY4@dR9>L$IYuAYlZEB(4wVcxAM%vK$B^G0w> zHPj95%6hg)F%5$l9x@H0&VoZ{RuNOh6r{vhRdD}l9z=!qx#3jyN{^Q|94(FUeq9R# zN~wo1&XzQ!JZ#Af7_{|^Hh0%BIkCao)Eq^s_J>&==BM)n7sHv?_20++o5oe?ls$B! zIxz&JgKSW@Iq+5wMmJ37fnvIn{uX|p7gvCx*RM71i~xFv;`szK?vRY-?V5xb#s}2E z!ZJ-SA~ILSRL69H74zlm*Kf1quD$YOK`lOT+2O5mePyJRYF+Wllp7sSoJNrB(D$?% z8&g^4Lf8!PE8R~)3i;;(>MqQhV-NDj7#WIRpvSq{0O&Hh>M3smPxL&*}L8odq(~?26XW^3GD>94@nDKcI90_-M8usZK-s@zB`J z5VS4G-`CI|0wgN;nD08|X zV>*A6+0UMGhLVjyqH6BCcSi=R&DNibX7wWm8-0OL-XNsgg*dEGnK`7al1OPen<0I6 z#3u=9FBxUF{Ap&GS;8oLcG7r(?LeAjFZ@1cx%jm;ODcMkaRN~Jc8PdQ#-fE@!VB9sQ2Z>2!M4kx5|$RhhL z1WP!+P!kNy@qsF9^Ll@m)nw2LwwzI z@j-jIwz@%xU{~OEpiWbNkV7_fvP+2Qk?8hfHniTUEZwu!Yv}7cWCyAehF`f$ID*V0 ze~RTL245`HCtDtJQJX4EN^z*Ri8M{7F zl;WRRA+aDVyw0j93_f&D`d7}N9Gd!a%aI=0ncd2ywZhPQTGoUr{VfIzUw~2G?cFm{ z3o0)Vd&%+dy77&~p9!mA=^{(H*3ENRbnT!wD#neJ(M<~qVx zF_NFXlHb5EoiX+I=_QI<-L5wm?XLofxo>0D%yiTW?i)?S6$D?6KW&EUX6 zBDKp=Id_x1xGunRESW;G71#j8JCh-bdVbmkQz+q!|1=nVrh?u6ES^3sdiIu6w<_jy z^Ez%%?^v)~*ng}MVGUa1i}>Vck4bb1a#yqI6mCSu*2~x+PI3MSgnqZZ4OVSy)@_njptt24sx0=lhIGvpQIqYVklRxVK3)%iqKNBh#j&gqN9Y$9^j8;Gw zLH^8kd`rR@AiDaKiyxDixT+u5|1FFt$EHr* zKxDBd>uUaUS5R*~eP%2A)CRP&8fR>ruB;Q`h5{}E7qz2KwbNwGxVIu^mKc@kD(OTl z8UZ>sBY{-@h$}+3AXjO9~ASSz>8`)Sp;-S%Egn3WpDhJnv)|tePAiC?d^1 z1lf_L!Joo;d!h!)S}gDxKJyHeV>5oHdZTe*>#FW+Pjtn5G1?XHM5m|@wzR>#o;`oi zv$CzBHTO(FguU8ZSyd`Q8-3`q5MCiNX z)t~Uv1JzShkIs%5N&-vZe+e1;v{A0SgeUOv*&oh=So(-b^EB3$aQ6~Y4HG>7IhhtJ z>#P)`x)UUgjP1aAZrYR4bdZFN+UyF6NGUpw-uhn@l1`(kuj?auXax3v6@#?``xDm0 z#%rAqHZBQN5lwHvPyia>%V@Wy6%& zTD!V&=*i7)4Q+X<+{l?cOEYENwpv2j0ry&UH1}FvW=Z;TtHz}6eY~XbqI%eWNC)MI zb%3+W?xFIq9`@&Uu$`lWtW}ub!%mJKUO%LR-G_CMV-;RJtcUrC^pZMQHLqVuo@M*< z9xm75;tekF*%^Az&5r39Vn1Uh)8F~`5V0Mr@vBeR+F*A^6oBvbe&}CEBSvsAf_!k# ztMHpWFlmEZyxt^=KB3Ws$@m)MhCAD3c8H^)7x^Fr)cAWkRV3y>#I{Vl1VYB69C&9n zCPvne$0B+86Ab>?OrjPG4=8o?lf8wnGyibD%AwZ*6ZP(@^0F}x_04kD+ z0951=;Q+x}Az<1P5NOmdaIoc9?&p=1=iBDB7*TMt8ILr(lmlGZRGeerQ@{K1kG=)1*)%PMfJ|nqk4JLNNw|^ zWh2jD+wE?r)je#uo;SLOEyvaXg?y#k>2?ph=35~AFtK){+J1Z7{BT}=RVw|#U8GYz zgc8mIbg%Ow**Lv;X(4p0UTrwQMb90eq8BF?D2}SF&WE?PnyV@GPBiC$igB6c0-Jel zl}2+e&k;A$TG7kY&Qs|hFHvpSZQxTE81W5|eb;liezAb~vfFN6Hjb(dClQe{XY%YP zLXb4@&8$i%=2BJVnX_1JMXB@DbCO9t!qgGnM?oqPxS{=kv8@>840=2YmvFoSp*1Z& z<)s;dR~Yku6$5{QPrw%1xIsva++|CxoNT#XU*zR!o;Q9*HI2GoT9rI3>Hgt2-d*5N zv+B3t_jO^bmLF10|887Hw{w(HSDPG4TC8Y zI_51)@`O!vX?dg1UFi!e9`2gm;=G2Wf~#OI+`e(|?GEUKTMx-md%WGf#@ zP9>*Zw(4tK$efMQb7jhJd$_SjsZ@HF>=%oWc^C#vIXL+6w$W|BWwiIW)@rX=i^tWQ zo1{Z~y#@9r&r0GBF$2$?(O6y^(O9+^oUj6VoU?@*LqvGqv||&QfdSabd0K0AFD~0} zF|GkwNPw9;?PK4YGSUAUxA9jZFk&smwcQCjo0~`Pc=#O=6OdsmW)zFbUzI}RdOUa_ z_d52$Or9tCiVegnayQ@+XcB!d4j^9YG~o4yxIpzk4TpH44Vl>#VaX)vcsdAs0XGTC ze~?(JLZAceSkTmjQi*LiqXL?ux*%17NO}|jacA9RV63$R?|)%QfqexTtc`_n0?<@a zrQmmsA$KKq=t4iBsMlK&skNnY8 z9dR~~Bh77Q*Ee7W+xv76Zv5QYAI<84Ibehp45iR(y~r2?VExEmMIH_|)rQ|NVf*NC zSW8qpZ8WWb;&Th1HqYPXE__yPy(=$Nx{|+i6D*1HmcD2;4;L!kX&yBjxhu3P$N5Lz z+FhV`VrY%dJ) zj#LP&)|49Ezk=Jvz4K2Hi!pgC{OD!R|+y`4RVj- zzbpjsKZDjm#~IrE{mA1vvb}!=lW5~Ki9Pwv*q1Y6U&@4?h%l%@Zo__m7*JFol5x!V zVAA+_!7ag2QoD;)8!!1TAzx4tTKpA@ZsmcfwAWTj%IXK44^C3YZog3H?W@%z9>UbQCV!KU>K0KRH`tL{{JA>H-f+B$D zr^x<{&$qc%6>o=oPX6QMu3sHpGw~I^y(d3P_|wAos4{s%_pI2_dlFqx%pN0h&x#1% z6Ak8%6uHQZbDjoOEB1MMm~+h)MQj1_sk!?Qb%XV$ z#g?orjggZiqBbBlOD8B{D)Pqj8bM6)D%hNXBLin70gLYf3l@X130N^6javDW0KtDV5E)NiFOBj>7~l9Qs#N4 zwfNjofBhNwYV9ACwXkC}NG4NYh*C^U0lvU8=mPxZMW*_BwcaYHAW;U&Bo&kfi}@)2 zE}r1+H!uwK07LKGQD08h!qffW6ceMN$vpM-ffY@h>#xPZ%0_S%Ou74fO2b+sY@;H9 zzi57_wLE@7){Ek4>{Yh-CYk~dEt@MO+q3SI@IXS?kY=4MT3NfobvT2uV(^^B7@d*7 zku{!(DoQ0u>UO}c0XdPF6Q1kaC>RJ zF;E4y$6#=dQK@y4sr$sDeOw1;fy(ZdH57`!37xY}&=Oed6fE00y9pC!HHHH|aAQe? z)^mlQLU=gZJUvA)p2rcEO6e!DM%9UFErO*YC+@%20rminbs2{Bp^PH6;${=KD_iot z>FIi4(pKF8Jn<^!5Vba>Ra`qA6%Q_tQLFGgzI92qRbZ+jvSxFOF>cm@pm_dL$@_!> zaV8*UF=Y!?+QsKaHRDor(5d2o?6Ym-2o^xrz5@Lv5V&iqpc%;qSFpe4d0xHID zRv~5HFNJV4T{lmr=g%$ig@2rOF*$E@R2v!5_Kx0G&)L2^{<-KqML**bzuu%%1Mim^ zK7D>F@zaqGTs0?1n7cGj#BCH;V=uZ-L&&Sshl=DP5&Ux&PJ+IE(<*0}Oq8y=(zd-J zA3n#RzkIYwDaU3~Q2DFng0|ZfODc5Rhcn;;2E%(-QALMIPlUK9taWB%v`i3PG1}u# zLiULk9#_2CkW#(yVQRrnfd_^=bT~Z5(RGAmU3ga;(>bxMfYc!&<4I;5!K6+Th2|*J zvHdbn2psR zfe#81RAYIdH?&W=x`zvf-VF~4;a>*=6A^wqr8k8}2V*J<8tDxnxF5(Y=DEoSfmo?l z^>t!Zw?69H8=l#X$Hvf>%=4aAq`HJC!+cT5Fs)hvVX6)X4RrKPD@)qSOicHK%fH3Yt0#u8bW(kY{;8(B#1!H%>g)m4uJ?(S0qJ5Wv+Qw#XeL4BU~_gV-*tPX|0z zziK754K({cVJ+k>d$>T^)&gZ4!aQeAVa>0loUeJUMrGj|+XjmCt~VzTU;$$Fb#B5* z|AG;iXoNbVNguMM#^5kKQqg!wcf#uZD~fI*T|d{*z)#Qsjm&~_r)OlbL%)i3Wj4(= z7c6*;S_j%^SjlL)AbB<|ogGHgHhXmDvZEfoh59u14JQL!lLluMW*8aE09!z$zw7_$ zUD%T;h>#kvlAnXgJ*q*pKtwC)6h_mraBDvgaap958o`#|MgusSa=0e*=GlvLcVT%Y+C9wIU=O zx?%#^y#XH{hlhepoZLa+9sJsY|{av`vCFaqwiTkc&)9 z%RkM|od4N$%u^lgGvF`WgR&}5c3_c+>1QrRp}ty zqzHNXB+`-SGeJ>u^htCsPp6zBCVEX$O1oQo$BQ2R4{mxs^+(_Ls&lr7;o=&UmOO?c z6Tsl!yvT3ZQPAURKY8R9WTIS4HBJTBNxO^xrzCd22FU$154e8a9vWouBtIrdWbpVOa&9A9$IK&AZ~|E3HoFIci@} zay){%e1N zHpdAmao*F`u+_cFr^Tv2QrVyaREWQNGnRFbw@5(Hw)70sPns%Q{NlM3Z=E}Xq! zQ8DK!oY`+YugcIh09!4(?!CjrOu%l4vz{)xGQ4Fij??Wpn>?${C#@QqSJ9}EG{`6y zr4mwcNQE|=40sl9o*^0x3jpgCs=A%gCHU2b%4H}0RpSqWDG_blFk}HieQ`klRZ^_1 zD|}87vkj=y?WbJlU%|FrQkD^BrF=G5qVzxJSsq|%*99U!Gf0g3+jh6Zwo?80B0#fz z{R**DKkni+;`?U(sFw5+yTH_uwa)?EJl5V*=skyzm^!a`&8&)0!@v}k26Z7+gLYE= z(#U{SD8a-<9alUX&R`W!%8?W=!@q(C{L!Z&+0`sy5S)l-p&3Bn@#kNK!w{o`=dx|3 zk?B@3n8}f`|KmyUIgDnpoEjRyK1p-4Rrx|pcUpUHE&n=b1wHVmzem|*UjjA`ChRFZ zT+v#ixj{9y8L1vzM}<*eYhGLg7%JMO8u^rQvH@D4|@U=-+JHOfP`A$@2*VhAVP&6vfjfD>VVb9$AQw#gnFp zaf!?WOSWks&Rm(uAwC@(u>IJs9@biGYp2}~T45=pM!6@2nb&&hnY1q8F6e8z13LTn z=(4^3jM1UAa@>8Aq4+FD&YW}@3~YkL4Wb^SY0tS{WA&#}3C|%9GESSLf1-`PFsDOa z*;Rlcs2G)pn~z3@NQiD%)Ef;lqyE7GAp&TtNan)bMvKAbS+W9vEw#$C5)xniv{9DDU&$#il&%bj5lTp2(TJ$y z-j!RJ2)>GSQy)k}BSJYKG4a$N49IbpNsxm<0LdhfWW++bXV5U*Kp+$#I|58JL=x## zPfnysi-tcOm02mVb&?tjlTfIW@%4e14~IoVy5HtPY*R%-OV_aK_cm6b(mh!ym0m)u zxOi$KR0i_MHZ_eUer9^AEexb(VN_NyGFL8_A&(3<+E%OeP*WYPP0c*xt6{mL%-B=S zcMR-alrJ;yhKRJhf^4?EfJ@U>Ze)K5A=r`WP=k|g7$!G5{#oH#75@DQ1T>6mluF&W zXI0xo=OmnJ#uW}@-J+&!TGVK*Ic$RLDgT%`Yj-f|H_G|euVoNazxG|XtL-G7nL}WHlMC73~M75|8(xf0_u&D$@!~a3zg55Y|K9;l; z>Lxas`5;7*dFQce#-O~In2`|zr;P7|Dh=tPd#nWIcFX)Tpstbk+(08oud@>Pe;F7feIrAq$KWQ!C zf%W&!7W-q6t!!=Keq6uX3GzAZ} z@eoA)fKdnOfc`L&_G4(;!bI%>R4s+9nHI|naoIYZ**ECSl`q_D@j5+057Pv(Q5qhM27ht@G0{}p3w18yMH%~n81KI|mLo#AaAFq3S!$Dq>t2Y|GvPqM= zK$6r5P4yTlO1VPHkAshUqGlhaFxhzOU*$PV-BPav&%^u^pXg$9MHidhdMZ6hUIK?x zoFaIAcG6yiy-&haTNq9dA(9)zez2XcxpME7yhq%=SJ{2R4!H6QFQ#JRjQdI$PiLD0 z867%Dz!qyCsVL`iCvlwRv%vKR8U5V94Z2fI1p$&g5SS|Nw#)GuGLBxO-L0R$uQuv3 zeri%>3P}AAtSag~(JQ8?MRPTgi2g}of5FC|#vE#%^BL19SW{ll?%j=FrY(fpnQ{Oc z`IGz8oYiaRq$nf^qa;0l)C(x+WH_a$t7J5R>TC+8hb?1JxJQ_{J-|5|3(#{M6p575 zV3o;t<~aDYGY|NA@SP9d6uc{y2H^xk075M^q2VL#2csf~upaU6N1&3JD9$mp`P2!B zs2q3zha<-C_;Rp$nzV3EE*Ynga!$wo)c+-|t&f{fyc1oadtq1Ivjd&c67GI3Hd~tbGXNw<$b(y=S#Hh3{>gP+Wrx}Go z<$^8h4p$mO~Fr`Ja$7~d28S>(tYcrM<+&k)tMtKDC5pid&0#XT)HRZ8jh|3 z)2Il6(9o|PT7d725EkY4^2g%V_aZo+sWR-lECb(JnaU0;G{A_Vi+IV~4ju4JCidw^ z9eC_nAw9vY5L7H|uF#S6j%YWD)uB?BkG&XK(Ex#T1)(|+A(?f!p{yN!t{Y(sFbaA- ze)sJ3j^%*P%38c4mh!sW53Xj{XKbql8?V`ff@{s!SE81jRFxPPlLS{{yxiLru@RjEQRO7=QJHeDk=ECH;jyN zE)1lH!N~A>{vj}0ctYD1zM<4~KuI05nOf6Y;r6?^vNZpPPEgWo;laijF@JcD`ig_E zKt_R@sNaI1!A!--EO}4GVi_%YIqaqWi$-?$W`)ZI175}kWmuoQP~VeeMWy>Q%RPFagtxWR*JvDsImv% z_MdmuD;F@Z{)1q!5D?f?{!ltyGM2n-B&a}1#z3DZ@)b=_Ri?T~bWjh-eYMFkid3Sg zVPFWZUks*mmYSHCg8F#IErI*$!uYXJf8%%D{~h-q8}|iX8_S%s6_Djp@iM=CGYh&o z7(-)$Q^FgDQD0nKLd>3UI;BYE>he=ucfu6qUFVA(Z>n8F(r61}rPd5?XC1us(NPW} zKTg3(Olq3wa)JPyQX6~^q3aPOaBLO; zDbi)Hj{&Hoz8QQHCW+3S&Cw|uDbfYN+Wb)fQj=?wW#l;0v)=GwX?aR9R^03!g6Hb4 zZ}gW7F9$YWn%yZqLK+30hfO$Su0RBzL2=Vf@=TQzM0c`g-K9&~M~&Ck@B zWF9rNznprRloKT73^56)eF!AzDAneXUta7ant{WJ6HkW(pi2KBqDvdVCc4@}F+!9i zzs~m=l$dW!hzP^Iz%hvwr$Hk?=Mhq(Dcr=G5%O0ads8I!oeBo-_!WEx6y)Z!4-lAI zdwe0(%g^I8`Rbu~n$GPkglmt;?JUXf7<+a>o+mHYlgan|xJ~%@yiYdw^LYG^aoS|; zF+>T4Vj&H!X0fQX~{Lfq(t=*5*rPRRK(yh)6{GT@QZ?-3@24 zgt|ScBUOZ!ExNlHicqP=+y}k#_5s+bsR;8GKqc0a`C^~0dt}G|(>-st&Z-T=hD2G0 zLDCNlv4_b(M>3roXhYdIY#i@?CX@S3Gby7%MwJtUXY<6S4}#N&N!|-+2_qe;Zp(Ve zua)djMH}Tm?@CG0e(kUZNn=ekufL3$aS8d?nc5@G%)GC339O5a-ODxjjq+c%9(VMn zcH#$ve!;<)N_feCi-H}H8}9J!JI(f8h%4uHvlKF*&&bbMhXK_#<VFFQ{;huh*Pf zYZGg)+F|?d$pILltgVSgDBM{6eZ5hyo)?Xx6l`q$xhT3(DOT3^u|n;YwMZ#VIWa->YqC34Ku><5rHmhg?Yfj;nA&=!XBGs39 z4o?gyENZxpI@swDPVP1^I$4x0rBJ4AVWn9Blg>o7N95wO`=eU!?qplsc>|KAjDv}? zFh!%lKE);#o>Ki_>W9PFyY)wC-7UxA3K4HcWyjf-o@LGN+c$*@nSlTHO;5^XvS`v0 zFTFY4I8PSQ_RpMH_kdiwH_XBR8dm&PNkBshQ!i;?O{Gkm#&NufONwb08CEj(DjXKP zZ7q@Sid*w8{ZX7D_;b%uHT@VFGxW6MD|s+M4bx_vElki0J}Y@Cn2_F_h6x#k=H1lj zU`>KwG3{WT7y&3T+eh|7W=M{zw+y+$0#AMk1PH>AZTT672*IGlx6uUsID?ociUkYz z6f7q*^rIWb^&MdjSwlKWl66s8-autU1um5sMZz#a7|$NAQi)sUp+Sehasv10WB7ah z217KK8QNG+%dYTMZ1+Um`Nz#(x=cY?rrk*e-89s_inyF{NEaF;D4n zsxdM}q<32*=K-uxY4b&v(yhKwlt>7jvvs8~`DfyaLzYOM<5d@LNbrIujQ}nqAj&oU zVC-Ac7+-wWM}r8xO-{mLfJ}VRIdqBV8Kd5p-ESD<*Cs%>MUV(d8~U<_${EockTfP3 zC-VkH5$k;D{-3sRHn;lguG|s}hXc;Da_WRN@*auxfuUfZ54WK;{T03$COB$7N@`8L z{APf}kPRY&gRv;dlik4Myz0egaPOp>c_a#z9ff`^?X$VUzulY`R!Z9}v?+wcM3>~G zT}(|DPm_bCaqJVT@DtOw9?hu+OgsttTwp}rY$Dv)b^rZd)E7RfT5=0#0w0}qakwfb z2yP~i{?$yDVC|vLnzPh@3#WmTu@c}=mB&6U(f}_8p6|@4>|(%gaJ68^heWQ7qa*v^ zaGTZWhel%DwR0=I*MHF=k%utmp^I5$QPSv35-AB8E^4*o`BzSfzR6UtvZX|=xeBKF z>JN!fJWNTER9mpZ43t;V^hT7-){dkS_J`|6So;87 z1o*{dw=4|2*C`>++_*eg8ZJAc+0`)EnEDh$#}Si<+SQN3#SSj2ztDLE6w$C!^ix8o)$YiQG$|78~MP98=80+ zv;sW*NB5XvPY^~hjD*O4ep*OGc_2F@8a^zPArKcR^}!#0s@nRDgv-V}QZy${0+f-l z7SOK8^olkZ_2t4U3To$?Q+61^EOtwbHF@xB*O;Q~xvt@JxkS-Y=9nBDP)39f10IPO zUyF;MKQ>5*Q~q?gxXVL-@l!uTcys#S2rRk%5w7iWhxc&%PZ(K-&^J-^#u)66^-W*e z7=J~_Yo~B1@cBnt;#0duEP#YXzAmJuSmdwBWnPpgM`Xk$BC54UD;qpLT<8N?J`%r22H@l@ZCHtJlv{-D-%q?o|+bpwHg=&f< z)C{ZCY@5~jCaWnHtJyu|wOC!&V0BS@)tu(4hPCRRdj42es*4z@=Ce`#_cc-d(YBw? zBajrB+QOqFIHq1^%!O(AX>6F^ZAa-8QH%ATYddPN>xR6p1oedAiI)`n2W4>`0V_f& zsCn)jI0Ut;e_ia%f&q)A6bU=wod4elYEI>fZI9BaSt*EAR`SwjboQMo6>q-TK zV3uJlU4Zy8%9y3KF%>Y;W2L-pzM>Phk`Q|{t6kPcS*C4wXB@{2)sz~T5@-vMDy`0j z+$V-k=QUSVL*qajuYzD?CLR;{t8vN7r5(J_Go$%JPZ?Oj_&>hMI18n=1Z?2kV`LmC zWa#FNQ1oU53JzM?#ZgR1p}V>9hlv5NtT65@C2m~_Vz$D*V<+{U_h|;Iz8MB4A&!^r zM+odjaXqdl{uOHFHM2^Xl>~-lt~ZQ@Rg5@9D=)}rZ?TIr|BEH7Y!pt3e`V6ZP?u>6 z>nO&oQ<8Qd6$3pk4Z{Yq0!6BUILF{rxCbep@;E+aOh?%B=(LNUg63<00VeL$Nh7}* z#O5(ne)*MtqH_oU5paP7NUop-a5+x16giNQUNT^?qA?HUOauWP=7QzAP%^2BLG+RVE$FafU?IfDv;S=L2$X7hJ z2d*>ja=x#N@OXsC0L!kz6mdZSJ5YS{e~zjS-=tWPm{+*+fJ~}HQ_2|}vSKCO))uwH z=H>aZ9shcc$*cmqsYi4fjwQ#pzr^^=DBsHt&y?>}F_7@YFUM@e=lpA=#1dsriaq#H zZOH@?>C-YNWKS#K@b(uT-l6V1v*g$ogSePUim4B(Dq(90rhw5K>$m`_1-TxG6rvsz z!knS2S;z+A&~Ij2E+r_8Ct}e4Su_CE@a1D$9_7)7KTsW>Qy=~Sg?J8CI2^(Qc04-t z){MhiH^QvINeddsi<(yZ-$au>SC!87RQ(8mr}g4cP9;0m=@`Nknz2K2p*qDUjvoUO z!=`u!3bkhxxJVqcTI8cr378Ylh=#;u+Eexr*iy!yl3a`%QX51bxn64BImwau%w~Wb zhRi8ZBu(o$h#)T+jQEXe2mbkv=cA-=fRXS@%7vP?Stv+7Q6Ien^S^5#1ee-wv6SgRu~{-W}76{c^LaBUiufE1Ljg6SPd z*m8k1)wMZ(d*I2ILw6ev5bsiWzl|8~MWAmQLGpyaN+M_Kn!1lGnaNTtZyqgXdF7Hso) zMrzHa2IQ{1C(J*2FkFa}g!$*whR8LuDOR1TyIg382a{V|2W8l-IR1S{gOk(~w&m$VL)s!t{SvIf;GcmS8whq&|TPLco!Z zF&Q#UCkMm^rj{TLJ3>RK&J45$LfiZ-+>&W2(dtOcmEpn!)o13m-1BtFv*-{GLamp2(qK-wtK<&vgx4UJ>|;s|2GoG z5CYjsrN2sL{P=dbNsDv=a)e>E2k)310Dc$N^YrQBHIQB?fy@>z>t+9uy*f$e-h$kd zzioFre*CF^e8Cu0Hf-I{qr=2EG#`22tRK}RJB4t&NOztPK;u#hmQOEE%Umik0wJA# z(YP>PO>A=iGgt}1#*{p&aZQpiQA9jL)i5P z`rqnLf((9OM;Q{dLAwGIfv7D3!UP!y4^6eQPU2O6B@f``0jYZ%R@Z_+wt z%dADBzJsX?hY>j#d`kCzPYy5>Z>~9Dwdwsh@Ya;Rr%^pVhVAZ2gm;lZm=_&cDV=Db z7G`?GP4!^UDpIzKloLfN(yT9`Dbk90+$=Q1kQ7YmRE44k7(@FCz6lRA3@r`#BZvf( zSf(At zJ^N7Y)LQCiyHP)@ebcbxebsbB%$yIQFP*@%DJ3hQ%V_yC$-zzOoENaDg4$8`5eCx9$~DwfDuC~YN-Re<^7 z(H26-{9L;W;~NGHqL@tP!v~D}4*FK1KG`Z#p%^xw`biB4!jU{{VWZ2_-$W7OVQ4c5 zN|toZU&xR}9;Vvaw(o6Qte7rNc?C&|1knKn;GIvZ9W^?^Z2f^Xv87R{1In9+lH_bM z@G*0qQ_492dzm>WCzYYIBe{OdiLc=u6X9f=xethO)HJ=-W@itp8DzCRCuIp2Hu6LzlwF2A|6RXxN zz_DG%05J6XeX{1D$?*H6V2o;}q;=ABcw)wnV6<-3r;~bJ9@X0My{C2#wF~=B_>=)Z z9YttV!Y_-oNp3*F?1d73A*zygYtA=<3pJ9LN+yxR@sp7iB}-?6{_wWZy*x*pE0vzm zT$0p{ZQgA$IcFDCao>OeWxeSK!Po_aImqgQ!FDzfwjEI5#9&o0br5RUEAVPXkDoiZ z;pMsHB@E*WTDjG{LW+)v>Qqp@yq4=izX9pHRHLnv6=Pu8Rn)Em`Mk%Nj9|isSP=6p zs_ub}W$eVgFH3RpT_X@qX zda?FvPhjx}q2`^%0k>yFyNs)#=ffk0+v7>F!FuV<=wj!FBC3K#5jQUSOp|2T--iw=>=)|??1_f~TE*Xl>>d0D)lv-Cjn~j5GH3l6+^4fMfE@+!r2y@Z@!lQx z7*0X!bA1z=7ZY``BYRjNwhHJ>2n~?$C$@d>K=fMu$xZq+CA3cD_LX*xO6R(}U;`&< z4=@~-P9tDi>wA1Znk;M@BP>ur2sx`tCu%of%y5C}JaJBkpUCb}v6G$wIlLZ$EjH3f zT+3T-o1)I>`D{6@*C|7u4nu?wY)1g(stnoSdmDBP7TL)D^E}U9WaF-(aM`Y%*FKzA z-?x8mcWP&7=PWpg+cA^XRYjNzn!e#SC8p9-rXS}QM=;4%qP+D14*Zf$FJ}9X!J{2O zXq4I1J7=8M#5;;cV1>uduli^jc~$RBG~WRm-!nLP#MHqm@C3}2usP~s&cq+|C(x#V zTkgpLru$-$iPcX~(65+)%7W9nhC8Lwb-2l|Zl0b7BRF?~3~&JaztK~EnTT?W7Xo5| z(1M~j3NIdaMx*vj8OD-b23%S(q?B078XO8;JD#(+P(&D#eN7C^;EndQxk)vrwMs^XqL{pxvksR;RTDl0N}D2O zEutFzlFKImdIwvE%z0+$T!D%;&ZVL9k@evTVkM02&m*)8{8uoEkd`DxEogqOJdqzS z+-M=0&A03(GpNB2b7I$Vc&27!EkZhxqs zi36U&af~K?ummtv{DL&g6tHnCSx^_Tj0Ab~oQx;jXbK=az;YFQ^Th1d*6evEpCo49 zx;%%Qr*-qTU23^GXDQ|{DUFLO%&8d=W#-sLIILEDZy4bv6E|PMvw(zM>aG{v@=$^v zxzAcV#$FmRFIU0&5_`scX{=EP~W^4(i?9KH$7@2bH#$fNg%YJYK}`kq)% zj)FA9q7h9aj4f#K?6vhvZ6-s(oN^*UC*{`2AX{C(?l3mUVzsK_ z!ne)5O7gDR;H8qx6zRdZ0?aOHa8xGW#h*zw3kWr%7px}xS1WLh6sNC_JG#3)t1*_M zevEc;v`@`bQru3i8jO|TtLCV*<|wq_kdZI3yz@LVRVpzz*Mnw2F$1~|KuNhL z(Nrh_0ZZsIdOGn3q{O;Fqu?`Dzo1$lPojS?(#O*=p%gZaD4n-ZI_t-aI=a+3l4@cF zJdLcno>~A~;UnUjS+MdQv+t~7@WczmeedF~FgB-uR(=D0N{|euMkjoXLMe>S=U=ZB=1$%*o;PyAoiFY^& ze2OQ29(hNiSRNJ9syq+)NM}Rx^=Fd@=D2=-is26&Z`+OfaqX~GtGw|SO;+Oovm;{h01K|H3wpL-iCMPGnxT@{NpIzW~VWoWBH~n|5kObqu`om z^Rm-CfeXP_v%%SJ7ce?4CaJWlXHpC1nVJ=aG%#GrgCtcjHsi6VVoE{mP$=IuSjlHg z!OMV_07EF+)NnwbI4|~D6cauFDlpL0aGVv&KXEZzH)@MR_BT<&Su&y{*o_^!M`O$Er|vX!o_QYf({!?q-G4F@s@k z)Qe^l5JdX{XYfIjfOI1-_knNVx9 z@3&!pga0M!qBc)~OsP_THM8b@u5LAc;_0n|}r+tNlXlYU(j5nY}J=ZQ+d!_T;{i zm$rNI%oTJZuOO<7BLo`W1rYm&b0CIg0Yh1Hj4lmeCC)7PZ_cYC#i|H4Q5XUDxn<>Q<<~ zpvkMNw&qJ_y>_Vx*jB82{;d{_A469$^r-*o7Ri@LIs&Uo9?oD;0CWSICz8czBxi#i zia^bI(;nb+=Pr3>s2mC4)X%N|1!~K_WP9}FmwaHof=uG^tlT$%<~Nw9(nZ~|aymP9$)?4Bn{oo+2)^mxdG-`X+n zh%^GoV0A!MzzMonAHn@*Ko<+htPh7_%p)4+=gOfp7wtzBbO(5mfq#_^^W;fj2QWCN9j8xXF2NC%^9_6+yHlo8l*#E|zYoWg;Q zJOT-%5T6f1+~B@pWEgGm$XLecB%mYc|2yz%C*4l1QM+iiI^Dy1M|DW~q+lHIfXVPj zSp7X49!{v>o{NMYr&IdLH@*njX{iy+>{g+$)to07a*fFyiD*hvKDd|!pPLhC7kL31 zNM?;hY59f~oelkopy_Hq2zOfss#d@lzrcHX$mlxzyc~NF`{n7vk`YcY?cm;;V^D)k zN7*>9ztj1f?c*{0w5ZZe)cLp5x|z2w{NZQANkl--wp*2EtHS%j1>yy7r}B9CX8IYY zIvT6FXx7-TLCeprBrbGE9L_N49s-)`RO1;9cNiUFMlY45eX8aQH^(&fwK7d*8|Nwj zt0=I>z2zovj)7aF664a9rG3i9GLXKbxJido1!_hNbs@&});-P%Zn&}O)GjQ2;q0HUL?z6J9Rmc!8m41Py^tFM?5a}~!NS9@U5v{oqZ z@1O9zoBZBs5ermngJD>v-gOs4{MJV&69y~BSgzyl!uW@bZJKc%ojGpWGGL#KI+4FhgWg5#N`;jxuYAKr~84C-q)26F@054`}!r0D#+DbXthL30Pu-`k&lxXqD$1}egYjA(IdH&3U|SuhGe8iyA_ma(;1UU?$`BkKI4It_4CWT zc%X&B(xh)Ml`AhDhM=VqRfE_SQlD0Q~L&u+ZhBwue`L_W=0s_W)pnW~>O4*YSb|dmduG7B=Gk3=`R}CdEfC zk7BT!S1-jD$J=22(5K}+{me7E$N@pE?L5xcR`Ukr za98@mxAQt+qRUM<#WWW8-ZZ!!M-zVnF4U0njH(P~jMI_9eC`<2c>^gkPzes%@MMx> z&oaMBWO# zl*%~hZd$ahwNsCqvnfOgo--;{*C45~V@Xl*H$Q4uY?}kGfbs0v=GL^ck}8YJ&$c#q zcL(dT5t2;!hY|#qT~XT2hM|C`55i$6AXN=ol+LH}@ICPUSl%oT^nV%4m$ZF=JT%FN zW!J;XM=qPYIxLGGu@_p7w8#m3Lppn zjtU|n&<}cm4S|}zo1N#@U8~9Ho35$OF}V7i7EZ(%StRqbVTLt`76so?aUd| zedOm{f_8~LJ?FAXxdTeu%mD30Jbyf9{E{d^YAs4GA<`LmB3cjWww1m-&50->u_X&` znLNLX%2pPpvft_QFL{}b_t?jQ--phVFC7=yqOfs+&Euo!v35x>gBc`3N`%A>>8Al@ z%k^#`Fn6CdM|#6+5X0cPFRUyXOF9fV*@AWuIpR&F($!fVjY(Kep_@?W8V~rT7o>&y z3;b#B2zD7pt&tebQ{|!&6($fl4u)Vax8=qWM+ZcWFxtDeHPn4~3hJ{p3BF7xzIG`G zi^p}JCQVC{A{?A3ya91h_eAI7DQzR_oXhfH(45kiPNN-Kd`AtP(70%&c8%fcFUzU} zcfxrD$DeC2xHp3;@7NBUSL;u}^h`j!s3fjYa3>WQu9@ViUE3sauMK8ZH@bzO zxv8|se%^Dh-Km}*S6j#3_x0L`w>5MdY@VF7YhWJ*2dtvx+Vj8ADWU+H6ok%V9}Eo`mxL4LOtQU%W(1>qPbebiAiQ4~|JVNuBan7Y9e zU_P#$R4*Hy?pgKk?QSI-uBDPFt=`c}b70HH>gVn57DB{$R5l+$ms`n4eaz2fhqt;W`X9|_KX7MM1itdppqz1+0#1Vcws?P>x83-RiJDZs3Zzh44P_CQ&Tya zNlRgEgqE=^H=V8n)wKHQG|j*zpf;L9RSb<(6XMsi^5*WI>olMc`fzD^AaDFY%LRA% z`16hV^OdJm-`Ml>13}-O$`0PvEkAzb_)vYc*(L z<%80J9G(Jf>e(TxWk$YZ<5sfwYOc5hFlzol7=bWp)ygvUm9@;y>Z{1RiXuvmPE9`p zX9BU%*-bIzT&Owr?*r^Dfbkf(f*wF;%U?5S*8;8x1*?x2b<}-Bu$s$J!%*{SLe?#E z4t$7bRfT414{LiNiD~KyzslSDVNvEeCqohp@bwte<0P6eW_0QoAc6*C&e>NH$$*Fa zrO+P-^iJTn#W|bSS7J(zEHk))^%yD(bMKHdwso%3*zqin14=pWK~fwFUIM0QA{IQ( zfus&54G)==hiYyT?3NgWl{{xEQs*tAp4bmSnBUydzBqi zEutV#UpBnTE{;Z1JeoQhUeNNW!vA=10Z~E}_^x4w;Bk*8etgql93Ei^#|)|{BQP1# zn3^nfyaK&xlfQ_#9~tF5zUOH%Zt)KxH^Y`peE(i^cK)q3~1Uh6V)S3kR`9(4>C zA_<}LmWZ9+m)Rb8_eO0A5^W`)XuXrdkkYMFjqdT;sk=|d77{=b-Pr4|HKY0*`{778 z17uC3LT?i@5Il!$6nJ!xA`wvvYIw0U)jREqg%XX549Rpkq~}X6%Dq5HP=u=?+?jqf$RzSy6M7+{3?=-T*;4H|E_#MVm z?I$+INV4`wf99hZOlGZ{2 zic&208Q;y4Pk_M|HlTL=PsV*?4bX9ySnUe7w=Vhu0*@nMs5OOG1VixxKcCSrpb~6j zl_da2Xk3HT)g-O3lX}tZco<9r5w+O}+MI}ko;nrQ&4fHel3h$i%44Z4%;=<|b;9QZ zbdhN2cXyq#yN;-`s^}=k&hNstCFdql8zBSvW$UXNq0J9Lv6N_7r(x-OiE)C$`b=bq z6z^dG4}*Skkoi_1S#OzDSp5kA$^d^FOdB*jN}Ees8W}f`l5(oc1re(U+Q#|EJgFfh znT%hFK~gOd6bOP95$F99#>n`YyWGJ5=vk6V?3h(ZDy>PSkq2IbT-i+KTh zp9H~*(IFdN*z6_9!a6sQcwaW(>*Iqi%gM2!AxSlyybJL@iGYj)*8CykyKvgO5i?Q8 z9%k;u)~heO@9IbIx+mRgy#-)4JEyoyVgxHIR}g7s&)vk~oF?FAFh?`3In7`^tQ_q$ z=ClJLvJ%bkGgqM7g`NDF1K7xF+ctAO+iSo(-;isVTofp$CV(S^U`sf{SIKwvb2c;i za)s}twAuYIB$ZHe44oD!ZS3l;d+^#4|0bhP9XO5ohmFYzjPl&!;>JoFvV8d~4_oba z$Iw%-I|H$QJDg5K=PXSA4UyP^zZ&Y=gZypA=RjBsSM6~sZ2C3F3JShj3vBHG^gx7+DDwm*bQtgu(CfcduC zs#hD1DbaJsbm+y2HQb|WtMlP)t>$Vm1NC;;44yHRbwJ#KzDFTX04{@^assUAWJ zX8~gUUL+gmJfSrS!RfdkAG#m6+>aaX$L*B1Q~GSBG$WZYM^ovqTIsJE$yXAx&ZqF@ z_zTi2UbLE>+L4VtFT3sLW#cGOsSI9{NA<+>O3L$X_w$R(Mgz4(jT(+I z^kpOaaBUc|OY-w75M&#B6wwu9V`D;_jD+DOY@Bdom z_eaAuus`P6&I2%38zA!uuTB1xlyargIa|k9lw*|1n-h#?6pg&`Y%-4G0BqCx!N8vl zr>_zNu`C0Da(}3{j@vx1wq~xLPUIarRrkrohx?%z2(P*6TOX;e?UU{2PmAJ@JaPeG(j zK55k2ZB!f@n)`9QN$P*D(zIVrqe&boyxBlCXQ}iLNS_T(eKI*%IQ>)Xfj#*o=#%Xl z_-un3q936}-KmyE9p_$q-)%KP)yd6k?5<-FpU&u_tI-z0C3H==9`(61xhD|oiUd;A zz(9^kQ&|2>g^m8skG&U|SXxSPB&rD+O)R_`LbgmN%1dZ*Jmz({h=_GbPPBKWD*u3> z_iJm~00HNm6Oq1pJ`O%4?~Ry`(JMrgBHpxcopcNhkrAs$HP+>phJpAa06RG5wWHba z$RFxHE1bUE1UEs-woL|G7B?Z-!}7qu`-&$iVF6$<*{gp=(d}8(4;+RS>R|*G}fQ_L&Skt#3{4- zDL+m>h6kybw&8BgeL<5~No*v&NjRSJ5geW1-P2L4d06e#kJ=J#s1(_Jl1dwFQG1i< z3U+^-jz31XFj&V8r|9G#K|d@_f~#mku_0W;o%o|qU}4y*p1w^DVDkiFLrKmkHcN0jp5AZVutPKGZ*FeFu>b=JckjqC#>hU7wF;6BR5RJHhmfuJ+z2B@V>%~xRF;;elKg^D<7Y? zJGF~;{eNoTAuhldRgKKHit;a2G|_HwKNHW(i4jJ2|*nO3Nfa6eZ+d}M6E zcbFQEw>zazJfgt@)8NO=zznkeqA_n7bYVr>9$=H6FSCmyw*vX;0W~?e<<_wCeW<(h zT+A$E##4D&Ahz8@T1R1#qM8&IDI0=q;q&4Psa^hNaKPBb$-FM+_F!Hq2(U0IVe6VV}^1r7me!AG(Y=@qeB84*T4kh z#)T|+Yxrp!ZV??MvZfKo1ni5R91j7KI>ZWKC`QJcuPGIV0!j4Azb_JDVIL654JnP! z-JuzkiqUM6rp)ccr`(LvG*y;kW3R;+R`^5ic~#kc!Jj+kje%A3PS(Up*_~_7`}&lL z!wvRW9IpyAX)u{(J;ZB?%_Vvi*z24spQZRv z)a_FH3$2H=E->KfR#+!M8EjZJC{y^f%lMXt@E2CYm%2`fK&NFetXe3=I9 zA?h!VPP^PXqK3}tn)Mb@G5%9{8-gC`7K}5%Bm#O*vlW!h>E;$o)g)G15wX-TamElh0tlECJE?J82DPe2T#Yrv^;KGqSI&Q#yOKL7r z^tz^SK>^toQY5U{*{s7eN_J!A>eS8oJZ?`b^JiihLk=gMxzUj)$xSR9z-`s$w7JKQ z%#5Ia*YYwv!MqHh^{h7Zoyw6mLhl_T#H*>^ofqeoHnr*c`N!~84=3W z*Bz5jnB9kP(-#J(Y*71*k=)wS*a#v*Ldi~=4|XQTq>iGr^HgR52!-|AF+0Ie{;r)a zJm#A}`DC7cf9r-5#1JN~ZJS327p3~#5SG7S#1Is3Vhb%eq9l)&XC3TgNwa=F0Q)|6 z3L<@CAb!r^3*-nwcIljrFzG&!T&+CL(~WhL{|ZyxEti#U@-%V!J*R|2Xw^?oYpw1D zJKlslK8{dq(@L3=#Kgsmbg2Vn@YVA10!#kECH6bTb(zx+P&6KvJ_THzKLFw`U6lgkVqjLdB**)yk& zbzQVdyvWohJyQN%jY8q*{#xsFDT0qSQY!?5wc&G&jpOq?4Vin8dY)WX*7`{r&wZ}% zT(`FnpAUr3)hA@^3MB!^Y7UAC9!Gy;+k%J^Ti+sFL)lG%dyu?gs=dd3*loXUwmPEZ zcLi+G%fL#VAtkvxh$%1$C>O>C&)`8FrEN9Qf!LhZU8U)eqGkEjb@YQdnMw|fR3+ta z-_^B@*t_M~WlT45g&Px$fFY@?6_!bSpE0!uj;!erwr#PaeUmS#nqV6r(T zmRJ6)L5XW*Fm4zKjo<`|!7x}cdp;}rsMvcGVme=*7_)(mAN5rN{kAw2Al~#qrov$| zc{l{VAH>(F7tbqZ~$g$JlGoRC!m7pxile zp+H|Y6gbyQl?2J4Li=9XB+2G(m*+fu5H}^A^+Xj>!{L75l#hxD;Y<=1>c}DBaX*p_ z-hzS-(mkniWRm#HPK9Z6M5&|JU!%1Mierpx1ejkjNTZ%VplC<9(pNz+0#Wpa5^|FG zG8{nAngDbIppFV}XSW2K0*`hmdeLvjDgIJMG(?1EsRTsriCQAf4q#o8BOS+xC(&0< zH|S7Y8UdDKrQ8IBXN3&*@u!$plO8dCzEbq6Y_p!#&zr3x7v+ky!8l^s z464*^LrjIa&{XMC~U~MO}F_}7epTJ%S)wnUp*At3=L}+tyCQWqMc#583ql1mBXLGD{ionb; zr~{%k;STj`h~`%y@v%3zTr3l_wk%>=wd(QDdu9>Cn1`Qn=>|~qO`zr*L1~iBGMx6} zOsTf{d!K?SV{9U@%|Hnw4#Bx?@=$!BnOn>@w`Z`2?YR2ajzQf`=@kz|wQrwyf1J8l2Sp`@Xm3QHgZ1g4)O z@}*Ma!gGOPaJ50loWT$aW~jWy_2B7&4=wXXS=_0 zfh%$iVx;|O!nx$3&z+FJLR>e7lKp@OmgO|T>S(IL`-uvc!Cz{5Pp{xS=*T?Sa4Dp*X-5^e z3_|^i5&aGci0{cohrdKGWYDP&2?@CLa)2P`foDDMff-P zTa1UpDKEr_{YH?pV6Ozfh^-R0%>qqlnI!yaj++d z&@dQpj^SYJBe?-ql7fROGW;8@i~-a9+vvwJDr!jl)8bsE@aREa9NNUstd@cvEjc|nHPG}{6X zFwF2|Dr(q)m&8x0y1N9{>3N?E&nt-JWd4DtAiAiGA*~nsB#0}CkrLwh3MFJ) z-7bI>IdbeOTrv!>`oXv%8%6wHmQ`Zk`xF08V1v#)9(XTzUBo`~fIMs-|7;(Sa)$OH zIcGcM=;*UwF#7@t1p4dV%x?YBAN$y4QCt_6i`(n#jsY0R@8H%RG!k6H?2&xe@a8() zd>@6q;C(cl-3GrT(C;H3lj~w^@$g585OojyO{Nq9786`Sy6X^ak2W_qJ#Gq(no*qN zo5#hvOz^&M){ko7o>n_&i1iFY7Qtn-iArwjg-V~qVIx@@CY2o5s-3rGJuG}iG4${i zf)~FN^!t4kb(n6P2{^I@W)6o1^?En{XcP?TJqQ5Nu-}z=I(7LBp3u~+ha@hXH(O^_ zvL9vryv2-VLC@zpY*Oj*$nEM#Aq^pE&SF@E`)CF{Igk~$$ih}$JA;y^q6HA(2XmiD z>uD3xpg=`(YYHp7FGy9`zHDFAkLu0Kwp(AANEpfJ|0+dtVsM%Uu!K>MF&zP#d6B`2 zlv6ON3FM~DyRBi#fbA4EM>;9c4#H>qCM442yrDPf zw$!_ZT*a>+9=c94-xki=z|L#UlWNPj)cmf-ve-e-rlMJ?&to!FHx{R%Cacya-W<(t z!QbKFKm^5-G@o0(lC9Mq0(r%qXG>rsxBU_{iGFI)D7jsi*tYgyvXF<4luqEIBA`>N zo-tzHKE15BYnH+xee(#bvHY7xC#R14VKCc@e`$BBo$lLOwb6MiGbg8P53=1hIHi=) z^0FB_o=yJcMfUQX&HVVgS#iPn_jAU5nF5?G-=%C0!?yJ| zIzf_#G5;aNT}G<^^@%&0PRvCHo387i`E@t40}+?QI;Y_PIApplMZa>7(8}%~kuC3` zT8VL4peB+R4#Qx=rE*9-D2#v}^CDX(tPk5l*o1lc!j~l59%=s8bBe{K5@q*eJaX^4 zODLRZ4)ul6G@b_IlW5W=6e`$aufhSrl%q#K8!c7!diOmhT!HFp^(QGmTt!z$_?+u3 zO|sx(%Q=S)A?T5%CyN}2*X#vol0r)j`R2vFgldB>!B|;cPx@VE1#y_olgT{U`cwgd zhhaZa#AW_&Rxz@J$Vv8ttJ!sfOl>F&ie>T*Di^4(+j^rm5KOkoY`e~L?2z@gKOP6* ziBloU9qOTN}asR>OU)G2}ky4UaCOhMqo$zdLl@iudxeKtO zHq18k)HK?29Dua?Ae+=95ani&3L2J7#V~<|m%uYAZ@g(_aRLnrogJG0&e3JN(>&{* zwyN*hxE&D)bUS9J+l(Frq=i@N0owrx?1{xQqIK3zp4|JP$xA`mD1hZW< z2*2D0uRO9V65dN}#QzAUW7J1XqEEpHRSGzdEYo4<@ttD=CI_0V%EofR#*z{WTbZ7G z@WFuc4jflPGKAvv0HlE-!>ay0vj3N#o6x|7}32Vi4FgWefxB93bd?|QO z!I!_p2GqWI>aFW3Es1nOjE|xI_!>ND!roytoR;f8 zFb|x6+wRuSPwMCOPEBhD|1q6;Az@+*bV~YB`II%*3fRdzxelJn_&SB#2#Bpuj3NjP|34oE1}@eZ6#;_ag4)xc?S|vO^7)amxsB%T) z4joHuHLXD}Ohu(}Rc6)88<9%GG82X8b+vRi^A+Eq^5#w{Wufyfm2AbhiKOP4A(zy6 zth{Ev9k|?P_8c`v!I$YF+nUp$a}$m}C5ZscNgVuI`k=Ddl02}syh8?vvLE7WArWkh z0u86e8Ky{~M1KF^K{MV4CfwbajnU?pow}a`Ex97uKxhUd*uq}^1{`tkcx+PMMty{a z#lwg(nPhtl?Do2|bE>&Fzow&C3?L_`E?9o57pj)r9aHqVe3df;pz44Fb1sNQ5-+m` z6gY30=F(O~3@{zE*hR+5h%x19A!UUOCrnJutd27Gchlo_>H2lX%*OqW?Sie|iE zOKIyRhLr(rXgy=S#BlPokg{F|Yy_C0(gI6mKxKX#+3}h+*kTZvWtNGDabB>gv~@BD zmI7vMKVzkg5zTEQWvz^X2smS{1s2N~NsdP5#nZHyPR2EGricPS70jpzZWdHZb#qKl zpV)jKj!<%)t3NHk#H|8*N)Gl+n&2-E{SnCBZ8IC_=j2Oh*vSN5=`EB>kg;R1DzlG% zCZOyo&c)R>O6D*#Fi=eCXAEpYBfJf#>I%wP5WI1;a#Eb7JDw{H5>g}{osWeHdqIpZ z*`N#nBMvBk^T^w#a3C>y83%)K1Xs4`7>+v(uIC{-0$5bUw-NLeqmjjIidXh%z(zcO zsf07?!f?BTXwt=$+B%0QqC9XI5`QfRbL-z<1?2IB#sJuwNUsP;P0m4VR3(W06HeX; z9OwmL-U!N2p&9W}j*WR6v>{5|xrld%qO%HP^JZP46IDA5eF(1h7w~U?=3W`QB0>O;eUxVKwPG6{EWu{qkhODZ0=3g^*lV5ZX zW}_#bM;nVBlQVGP1A9Qez-Y{J%Z4Ho7gEDl;E59hw{quy4n)&}>;NkS4FFdYdF-eh z-isnC18z7fc!l!r7SGKq)6}l>%zxYR$`2;1si61e+JqfQItr;}PfE97|;DG0mW<|b=FKV@To;iH_U3^JtYJW~k<$={y z78z^Qk86jmTJ;^LWeFItCbz}0Bxee_<**2N-iZ|2&%Bqryd;|1XY|@>RZnWI>KR&E zVBxRy1zI(U+jBsfejr=@F1}ccmaMsjZfX<)HJ7Hx{#!v~qX>d|UnS(L0PtBC7dt$vDfTAW+;gqZUd39y~@E;-!lN%wV zh({UGQ3D?0slz_@y=_d4?wQ~U;m+pg>IXiMQt95m1AYk7SfG#79pu-<@qs)Nj#O+% zvke%vE-R<)XxC2^Q=8A z{mfh@95EuKz5s4*g?HdmB|O7uYq(;P6Dj|Bi=MP+S0KGl?Tu5+WT2VkRw`U~KdZ(5 zMe#)ZSwHylaZ~M-Qbh)N`|g+_uF0=6K}6b=`4K|ro}NT-b9NHlQf7hk1RIzY!IrKV zysR;#5TiPY!H2*GJ77RBN2bO0Zn_69dbUK@*a}*aB)trZ?-5SP)?J!oc9n~SFjOjdeDQ@Q zQX~||%S3oMVTbzU0uyU|#f`5ij|Act=_ke^Dte6O9rL8UD@MReuiZUrHkz$&t9JYp zx9KYidszgUDZc}PztZAi@(~!Sm939O*Wn&ednr!c?BexFDAj~7Lo(|X!j4{fNiyb_qXb4^{lokl*V9u2aZ4eP4G*;X2evJ@pPy>{bQfurW~A_xZp

h{g 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
In?%qs+jM<8O48I=C_Xb=PAKhu8r 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 z≪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

^vUza1N=^#H9b#z_P5`q=p2 z6c{PWbNfS0IT1fW^!!>ZqLZa@Gjzs%Je#(sKILsEn=x{e@#xO*^`>DsG7WGxz)Yuu> z@`C{vBfb0H8P9xMJu&<3;an_4#&16JCu~a-r+|d`)JYI-FE$ed6UEs8e)l<{nP7qR z_?Ab;oA3NL%6wyRfJ+qR1N7=l3~|}UZ~(B%^Oc|-x!S8@JGvDbTJ_zr?KN-ySw`oL zLQpI)+37PG{?=+e%bWS?zRJ;2)t>UZ!uIa_vdDDS7i-<9>xc@K&^;vrMqA|aUuVGe zKcEYP1~i76ZYLuQ^%sQgt3Tk-(v?K*P9tItwB6XabBA=c$YX$nbVz!Cf%EV zc6&3=o4QkLxV3|gk(rzr2ReI-uz|=9$G2gszK&fMmhAz*765^5BaBnnaGu^g9gBb0 z-`bJzw)v7CGL>*&%IwL=`jXg@tmcC{+VyQ3v9D+hF)l#_7}nU}dB4X4xsg1OWJbj4 zD>yMaj)oXFB}6tzh@?spF?Pl#mQuY*4bTkDA3^gxb$E68E*_XUxW4vPa0fI%*nvJr zKR)gMlD9Rnc*C?s>*r<=>?hue)D```@eB=ZtXoNW*c&=ZU+fJn-^b78da2#+mOAYY z<5MhJ28$_B`X1?g-8C>2wL6=lcM`51SelsEWEumS=)Wc!7Z*HSFSsj_gfPb{3UFrZ zBogB0x^Xj`PSGuD3=NOaEa{?hHSU25>H;}QBgG|c3@c}0=zO*j*D0bc@KuKFpSFcZ znN0tRON9X6cRaf{9X^VcFhngV=JiJXJuXU1{K;jf(`;aDG1(UiiBv^Gu&<5J;m`#I zlsr{ZDuubFb3-l;=dD<>!)vbAD(WuIliCYh>Zw7P&mZu_Am@C>vdc{9wE3(RyT?ph zBPfaUM#=3B7d7eO^zL0SHPt4Ch3^*HQn$8)3929ga5?1C*E3$*#&GOgMoRtN_w-!{ z6DwBjo`Mc$6!^H~w0YVt1j)7au;al>t%-n50cXB^LE;}7Jqx`m2iT%;l%i%5WlS(> zC9=mxmgJP`2e-sygSo^5+432gg^bs`te0SdFT1~)g$U2LG&E$ERGHS$vuzMm298bb z%}Baxj+}mfXtRi5S5i=G3nFlak4jrV0Ak!(V=T?OHFED5@O=DfI~X>Qy7#AY6VSdo z?V|IAS?RXT`e{Hv$$T)#vYO(?jqn>oq{`R28J3cI+mY>uat2nywphj4%b5bW5(%em zZXsyE?p7R<=EmkR$VL0Ki%e*2wp4)pAJkGP7F_cJal9{T0`=(UQa6?;{?btutt2ZMq>%f#^0^zz^%jdH_& zXp_!g2*#0$p^+Bjh;Tz#eBi+-lAdheIuy7*46oapdSV?B5ZczgSjMP6=)yx#06oct zNs&RwwY*Wf3T?P0LUmy^#@^D#0he_jvD^z#8QWi`UBYJ?b&AwLbtqER*k+%S8@y@` z!vi}lAKuI+*xB(^sOTG4bcMO>P9Ej{0rt4?gYP--@VklYAINExR)NBc`9Xz4Spjym zLudS%`KF+4W5P3vLvtAeSoFw`CX<=D@C9ZzySIBk05@8qdGQE45jm~;!j>*MxLk$W zU8*Z9QR$#uj@iTra9}pkq$?D zjEjqcOEkwBX$vvIBU|+`PqKVKj;`C@B#eRt!PP{CplEJXIP1w%FcA=*iU?-Yer3>Whs^jW}7P4SLOOaxd`jP)cF(WhrZVXp7EzF z#NY|dI>*rZJMnlxkGJyikREU3;}7&GEQkPxYxk)(K2q)et$d`~{Tum6wfmyBU?d`e z#A+#azMyE}X{#tVLyHivWeKa*0*#qtwt14_Hq?apvJlIq!IGcy18d*GC&^2=-5dL` z2C(LlEJZ{Ot!$k3WPV6)R+@n`w=t3#-}0rth3q25;>IoS9kC$)dZ+0-w!WzpS{xa6 z-n~+`1ysRY)E|#gi>y^nT~Cg@k7)pJP=X4LWkbcFJhvYC#wM)kBaSSybt{T*$@`eE zw4jx^N0&xC&&F-G;XAPJbO$1q<=qVLKR!6q-W_ThQ%aBLZ?b)&h_0>d-YU95_ArMk z8%((eXtn2hZ1XeRo2liDX(uay7DPWKK?1kj|K!Ze%9)3(#A=k~jmWx;+pzQ_8zR%Nwo`a20cmpQb7!}M1H0l@=&mP#G za&5brO^M|O4zrvyHh>H6=;ZT_Z`|3QZT#pvw|DPf3Egi)Oh6Ic(g?cD|9oQZ*$v1e zy&n_3l!LVG3NCjL)3=AJ>9x=eQe=teRlqz0}%& zyE5y|G6qj77XSE1zL;BgDTV2fNkZ7COz z!maNhm+&Db0}a?>4jaVBP(uxd&)>Tj9f8F-l?)&AlHucXkm2KtlHnko41do{hQB`t z8UFsFWH`(q1Ky@-n~8H+-;|;Px6AMSJy*U;1zWkOb;@Tk(q7OKg&TKt=zv9)7dbaf zUHrB@X}Rfuu48QLsZ<3JyYKt9?|62fI+5OU3<4hQ_ebmDxqA)GezQJb*D9U(U|&0Z zSc*XN!Jgf~g3!k$>c;)D%6?PREAIHn8T(NQ8gw?uogVFQ8~2>Mvx(uuj@anC4`bsN zn=b6b)H&GO-wrhu4|S2!U_vN&ZrK24K$*Wk-a@Kj(-vNH8l%q>F8>^Y#8P3`Rq&62 z+nb?5${k}u(Upxq2WO-94Kh;Xpik|; z%r>9e{jusiXfNI>doP-PzRug65^7P1TxRb z3?gTLDn+WT(p8eqP^KG>Jn;Z3=-#)Ub&pEKuJPad`-X6HQ}p1ihB$P6jVG?<%XX)E zE*sd6IKJrgN?q?olR-zrH=Q)eBTDLW=WAM*pBAzojpGq1i9UN)k0Pp;W?u~Z3v6mA z`~dNgaQ=a1!>0?LeiSMP{m+Jbg2wOVAaja<`OpU*%J)T^5YRKhpDqPiBr(Va-C%e3 z9I*4wN=kOy?b3VR{2?Gs)< zz!(@EP}9Ozg*0kiUR)$oYc`pDV`>p<&q*!1$FUf>FkwR$Z|QXN=MZiwq96iKl3b*gFayZ7j7$U4}@9v`RZ|E-yf{uXW9&f`~Sq9o^12^ z^go4nO1E2=jf`GG1En9rPK1-}qy8N+pozdk->tW?xmMuPCmnGI|le$`MnG{Pa zWoF;rO6}=j_s^^BdeHLobw0p8t^2j}lzzkNwdxMn&Y!WT&M2jer>$DKlRCaO?cWBT zLq0LEf%{8r`?eZ!F41^Si7va5LW%ZSv)LiVIJyqAQjF)0*h#YO+_^5E4DI9X13db~ z;O49328GP?@dWij`fH@nJ9s6OGy~k#suj6+E_dcb+ zSMmN{+1}LYJ!fyPp0&64>AkI(_0q?7xmCO9P>{qp-;eOrR;ZQ~APP5~H#X>>w8o>O zA_#<`^~j$0aYX22n?9m43{xiLGMKzW4KkyKF+wtvOZk9vpc=aehyPW;`|I0?96W@F z<>^u>K;_v4(*R>I^t+-<*u50G1Q}dYsN!L+R;J0&9!#H!CJK$`rU-Q>gC1H6zl|_O z2AGge*e|>(?U~qxM+Vy#M*nd0RG4zvr8KD0_@y;x!!|8vW41`{m(o;_jW5y`h#zql z$;~EoV{Z@x93tCU6aHM3$}qSACmrnX6MUMaH}>?wwrQ1{@@7+5_IC}?muzwY5^4b6 zEQgXkQWu_SAynu-hmgFPdH%FLv3elNQU)U)O*T9xr4f2~kY5v04}LpCL&U^2IF78i zh(r-v@6e>lx9t12HN6WVmKuOIU2rP%l?c}oGGW!Kjb_Wdz_2fj^z?Y^q}i-@J0CC1 zHez3KiKHH0BE*56Sk6iZFu>qBhR?Yj!&-DyYHz{mmS04N1(bTjksR(fotj5Ar1>;6G^6dj?S|F?f-or=h^s!t~H7 zf@$K-3QeGoX;k@OgJ6>@9#0pRuOK@63ApGJl;IQjv_UDinwRA>WzvZ?PXV%|t4hyv zXT7^sj)-jjMMgw6mPQLSDh4`1HYxaG=k)okn=4)IGl(MEN~1~Zve8(SCeLL1Y`hdn zL|ds-=B(6Kt6mymu(#xB1BxNkV{J!UR#!HGbYxy;7U?af(Wu^Re!$IRZZhFLY`)Hp z4kQ@zLh~V6CBdSYy$H>sji!-}4$$eAVx`uaOEWsi7eN3x@CWMK4jL?BDvB$VD?6Fi zQF{@hg<4Fd7>0GMbk9pIb!k8PaYY zdX^!w93CEcDAh26MY&n8cd5N}MX=qhr;~`XSffTvu|)u1-^G|sKp*-MLWJ<>xp;YN z>ZgndhvXMI1+&=V##VW|VRwd7hT|!LeA$}$_Lc}blt2kx2@N%uv0hwoc9Zlu3|$}Z zB5NGs8ZqHbLfqOErw5isXM~itDKaVwo3yq?*g;3$a)Xts=ne)5E$_ZlHt{3}15TBk zxt4;m0ZqVO5l!{JQ8;nETg*d9T;8`P)0J+g1wt<{k3>t`VR~RZ=1`i|mDzYT(5tla z7BuYWM2>P8h(z$)sTP!mO#GQ4A$)0~L{wQqpwkRK-E$(&qU`Y36mlT5x8&(#<)C+I3PoA{qDt}$@~OuFvjFYg1Z;dTHrMUfy< zH_EG_^$YbhKsk3`t1T1$mg@Bk%{5BRL7n* z#%58W4~;#4?sA6cls2(3*)XS(pED7XS{9eA*-n{cELS>mLUZZ*a<_JV0ZR`jJewnj zo`#mz)_H~kuVrLTL8d)*C%(GyAcFZ=pYd?~vrMVXZ}VZL8cai~RA<|2t}P$N$Fzo1 zvMkeK9huTsyg!y0y~x&BHkL7FEwhbmmP#SoW04u5k6}^Aw&(Qla1%$z7KfTL05@pY z1$6TvEa36p_B@av3Dratgq3QUT4!E_xLSKz8d?02cI42C5=$zytPd!=0hz;k5=1v?n62Qm7C`$rB1g~s;5r-fQQIVfa%U{ z2jq}Dy0I|I*^nf_*mV*(YQ-F)Vf#`{qBWT@59#Rd_d>-0*_R?>&|<3ns%>`57u|+g zf?1iW*91gFX)h=^bb(}3Ny&)|6!3SbS5xniRCWq^=#GJ~7}<@kV=FVq4w_hCevUtj z7po+8xK}Si?QoN600$!P|lP2y!wnBKK8rJ8qeEl71X@{W?EFg+5`|pay!T@)nl-&9K z@hNWMIEypvI6w!gmGA~g#>yN^XTOoQA*ZD6(v6D`NwN&U#%seoO==+xnfyqo^ZnTv zpV(IzkElF%I2WT-OmtkDCqJ9CBjOa1?OKJF(A^x6>51qoZJYt0=qvwEeG{<&mX}zHoTp_UvZr zS-ok2MaFJoRACvsX-9`6COQ34)MKD^dwe^+6Xgo=I*LGoLV7+Y5?C@h5T@597&6l4 zCNzP3(><*>OPs(ZCTH-ScqL_6G}#cNyB&;?D36g7-{lHk$sL^&y;2Zgw6;)I4|OO& zef(AHlM<(lx$~bOmH!D+nHi+g_j}ejU(`lewZ0n|^dBtiuW4LB2CAP2!Oz2Jh)2Ek zW~){eDf+Z1#0Ve7TVLW7Wnpyc0gf5(FI)qF8UVI(Mg#jB7yBU4!X^@lFhLkE--7ei80pWf-i4Vqu2-Dv@b z739dEN>3e4ALFEX^&gR$DKdjy69?ke_Dk_`%OO{#t`j}E&k`TZo1xr$xb+gAJJjCh z;=8XTW)K%WlDSfYo+_p5%`)vs!XT>1&ULp(ZdWkbOzfp(YU%dCg)vE>Tx{lhKWHcv z<(00s*wNvJjhzDrn0f{iwT6`C_C@Ks!8duuBA@~yZfP^Fa85_y8c6K692Ke z`Ny|=(=St6ALt#*0&g}JhlCUB0r!{1A_lM%JG-6??Pg=dWmb?Zyf6iN@Q}iRDP&*( zr@av2h~zi+9j1=;U`6^A6i$n+a@jUl+9?e9m;)zhHVvcFb?L)uaiVLd!(4b#Wy1JloEL8#SMX z+*J+ri;pYC4o^X0KH)~#9p@pRKq3vtdb8c3yG<*np_UGdoJ`|a-;xnl7^R_%mq1sF z?VXcntg+cNluqmBYNs=x#O5{k!Qc??IWR;l(l8{0>@#p;4z#H0biB|gQ&|;ed_~CO zXcD<_qvq4FJ7IsSmD25oeX7v%FMR=XASy6PWk9rot`yBlU?av0{07}<0DKM4p4fnM zf0&29gjYJ!tLI9AHZmvXykCIA0-IO__CSl8!i>atA)JCaq&exgPqiS@ZFM^vM_Xy3 z*g~L1bAiqH=|dP{DyHkQfzC&19CJ7ca;VK@G;wXt4$8UQ$+OhdgZ5W&=B!ea>zM7n z7vV)yNf<8oG+LHR7oAJxI~O5l&zb-LyXt~In=$fBoI2^`6ev9T&?!PqI&{)|Fqbu> zHI|{QPFvn{HA?5nGctB*{MpnMJ#V2r9OLL-mh!mFQY1I5QqdNv3OpKh%r zxLinl1z4;|h6Oli2}u$A4giT;^#Tdz*?10E8xPz)S=^rT(#2g?KthvOG^QQsiDI$2 z!Z@bP*_0a*Oq#>IbN28E50YWX-uOq%D|oD{yz}hGH=fO&&&Vn>if+O=Rr|)>!rDf7h*fd6BDnc8W=8duGi`_MEx6t{398%ff4a+4%G?X$iP1H3QuOCvFn|;|M zrnRSYD}!A*qsEM2s@YT5t5pD}3t=q|G3>DP6AkoQ zE1Lni=2*1D!)!J>m^Nh5A>(RK8ZuP7Yt2T-{9C8otT$WIbq5A+%P{cP!qBCN>QnSW zYnhd!>oX8QMtJ>X{3op6h$D9P9ie&6+H|l;f#@YYic2mu9swdx>QKczH5-+fCKc&Y2iFJX z`f5$5c!Lc)#pPJ{Gqm_LFWn8kfQkFEpbvO7#yyCdpy#SUvoFpKm{BJ{*wl|KZz|DaRuU_g9ThdqIT$wY7_fI4S;=njRk^Le>63Lpu% zH2%O2ZgGfh;TN;e7zs31B)dXl>yO4~`%%d(wkwj;BVx6juzDKB%cWL(F)T555>*Q# z$>t`kY;8H8pM*7SA$1_A_Eevv+#W~lpOVMph!Kr?92Io$ptsvk^*}PQKI{n8?NOn(JyD9#b?BYLuU_Gnr8Io79(|*4kK8FOfYkC>0)hlEevlS|Uqru?ywkKuk0B?J)RunBqdoKqsn#1(R%kqcK z%}v8Nv8Q-qD>B9P*{1MQ*kv#(V35HG82#BW|9V-f8=a0;s z_7W7j={8gWHbqB5$vrw@V=Ni1>rh=Mv#!Q_;p)<>muOosSaN1T3b-eYeZmcF;$q$# zO$tU2VD}Jq$Q>OGMQq7o^=abaSV$Eh5Vgk8y>)sAylb+g@0VLSY^LZ16^d7k_6Wq3}}V(l4j z6_|btZUfOB=QDVD6cX(<*zP#6!{35OLoT6PD`CRTCoGnmOD~q2&%Rp57t3!q-W%G0 zha_XOWkeJrjSH&gik7w~jPUzKMtD_=n?{x2*Fv`%#J}mHm(7y(6|v-xPhiO(Ux+0W zN%A{d2Y-Len6dFqZAxx8Bh4wv8?v;?#_1(S-%c^L37cSG&~xzC++)px2D`#VtJi!+*y(6{EhK6zh68hIB&O%R&pLV-CT-MlpFLeq4g z-T%ZL|HU}Qo2!G+=xKGutl?YwRGp2kdVM~Mk3i61Xo7(tunrP}pkJbmqLPC>C0D+| z{=XqFH$lYXi4_E?UfWl+(xJ32aY zraY%M?tKS{qEmYhuZT!q)i@GMZbpjQP*O9qhQE0*CR~jv5$^BqZX$Q-xRWhepiZ0= z#(bbKXEsYkd=MZmN+#hgKMAx4OQSuPqDiQ$ZvyxG{J0bP#bVpK zw~Zp7N=hd7GtVlnJ?Ictt5{R30K(dLZt-T}(8Xoz&H?#C$q(N4;X5Bp3@Orv%&%1>D%v&kiAg`>PN{s=T(XcVraS9J)=J`EqiyqX z0=H?@Dtqu=RNs9+>N+)v%(22tRWA9y+jDT$CLc7>sPH-_rwM!>I{p-)s?uC8z)~>3 zz)wFl!!~+7plMF_EPHqZnXm;c5OcNTLyXl+o!Hyd%Lj0eay5w2VOmBu^e2Jh4*N zwqW4ke;8{4yJAV6(p7COL(uCPP z;EEvO$Gr*gtvcdC&^zK#*mwSIyMqG0+GaUS4ePIW4@eneXf`hgO#eDg5nc|UmD$9L zG-7OrRtT&csT?d2QMBz?WQxLD+u7dZOwhlC*uh2*M1K#Kj~m-l(|{dJ-3M`;Bsl_| z4*V$yN67>MSM2T@{n5R#|Ci$7e--x+ke3K^J8&T0rkAo|eDjXpgfNi+HF;3bIx^~l zPG);BW%okKJbC_{woLQyCbeTIngGsykYngPE}|A>@@CBk$^UPAoFGi(1~w)>Bre8l zBaY3xeCl2SzrUrmP)-47k3P^lBLwGd3ZQdqICOiAI`UzBX_F=J>yFVWRRy*?#=rQ; zNH)Ws1ZmBDAuWnz)18C*%q&GRk+F=hS0DMiQ&(XJF2!b{|2HZYFmG^0Q>4u?Ps zBog4)@#p}!W#58Kv02u)RpW9GC_hUYi539|p-pWYud%@$)rO|J2Ft2A(!{&1a+i98 znW{Yj9(1?@nQ$=KvaoVsXhXZdjXD>s!pK~_3FO9S{c7!-V=&Me5$P z#T8e20_MYYTHkfnqAGW=3k@^pk#TA{7>0oET7ek;PDESLIRKi%71)~=Qb-iC;=GFz zv{Y}IrOHQH*sL6dON$Y`mLsDNEIS~mv2><8l;AxuW-p3BwBg_^^^3x+Bs)dp2~ z$Jl2qq44m*E2xt65?Q$Cj=DE9XV~ZA-+k|}vlUG(7=>G*%8#rei~%CeAwIC@)h_j- zHtySBG%UEquOuu>{eIj2(s4N~DequI2+Jh_nnGm&n;Y2J81*u%g}jueU6vh@x<0!y zhb?r{JvcCa{CsWb9utlhhrVY~z`uzNyN{tk+y%&ky5x+9pw;@DMxleD)ZX}NLJ!fQ z_||p%A)gqFT~=9ER^`sAFVtda60?6hebfgA4vSArr;jEA>()YT$sm=3-Ms>l3gW4n z8t%)NccKCr$`iy4hYAXP2!ic|Uh5HW!XLDNGvN<=+ozFJxFT3<+hq71#H@xvFX`ozPq7zR}jEq(^hkIxRHm>A~ z-h;V-2?#0D(_D$8Zn0vEXCUi`c6Un6bHhSIk^-^WzEEKuL_}6<0;C=M7vK%6Tybk# z?ZaNbHWEtw;~znhZA0L(Q3h;%@`jc>Jhdw$vO`6>J5c=2hea|Z2&5_ zx3-M@G(=a_$zw1M_=<;Bj;n-T#*p6(p6Z4B`8A!(N|j0r_5hWWW*vib%lr2F_j56&g<+?LwQ0O4j-x*l z=S||GDqZ9UO7zj)pL$5EjyHonxi#hMBC|>M@Py9&^s|YtxFcKD{{Yro#KLS;3|jJy z9}KnN8+@F4yV0W<3wT#>?Jcp4%`x0^8Il1$K&%9o*@9unUyOtA88QHVulLezw7V!FFZ+EBBNUQ4g zMr6a!gfD2orlLNJ0mP1HQAbo|z)Lo@sR2H}A6W}FjT{yzUV2;qu^gMZ;eS?3YJs#Y z&(pEzi;yRzvniXAN%#7?GaPmMy)3uJYz9A)2Xm+Pj5HeM$iG1_84`MQpM>+1+9HAq!lRg;x$J zpZEc5WAU2$Dc;Jnr=)!`8M3*}0n!_^+c0^&<;aWNDX$Va2wivPO+s>D*s)o(<6-}_ z+v~S)u3E#<9!#OV(^h-jBJEbMI~sR}0yOG$eo~KD-HXdHXURtbo|`ku1(@fkf&%M}Gy1jh4;U=3sqJF@7$Yk9LFewd&I7rFkP4&> z1DMr5<(zR8R|Z$s9A+N@uLAK*UD1j_>{dnx;1wRo%nkrDi(F8b=K`;#4_<4Ua;g7v zyjlX9!-_=1wTAkUB1(s2NgpEDD-Gt& zsfeKzdaLj|JG2();br47GUZHo!(Mm%60LRO8Bs2w^hzaQVFZ?;d7=@FE^o$X{dc{X zDDi&fB<+50)W7P$-|OpE@9d?9m-nyxI_250^=<-2p!>EnIUlyJJ8`QxV_IS!p9e6O zRi(`;h9k@qut~TtG`prR?O}g3x@>ialfhN%LuY787I++@LOU3MGi5q>XF&bZ(wGwpTqOu^Y@9PAUBj&6qMt#*!Y?DtK_|3vQN&h?;3?8HxJ9Q8Wp zYn^p=A)K|wtwHN-0`^|C3p=B#HLr7*`ukYMbzKo=fV?K(z^+Re1RMOU!g~J3=XJSF zfWYyS5G7tsnlC{PQqISmu*DMfPyf{st910238p))C(HM)(;9#gS|i+AZ`TD27W3FI z5-#K4ibX3H3}PdQQ~JXXe@L{1OQCS)rsyg1i3mgnAb&_g!KY9<-Qkx=h5%K5eh7fa z;#Kp9w+SK?tzgCTH-Vt5>Ou8m5#J~6BV+@rZu>U2*=xkIyHDV|)n-I8mQ~xce#(AD zwh&jAwXt?f112RDo6Y$N7I<9ZSWLsBif(#fOES5DWz!vZJ1V-?Q4avuX92_{04%`9 zcwII!aie952^LOTqB~&|WI9HmNq}UfjEP_bJ&&;v4a*X#3tmP^rczRbhe2e8B7%!^ z6u4Go9)?X%DwRfqTv8ba`yy;1zHNQRxHTk^pP{3|o&pULbva^)=y>6AhAA6mHbkNU z2vv_Q927+)28ehwfx_!(MPP>qbyLQz!1gh6{&;xwBX;63b_9O>}c;7Lgx87~!=V3(*09?QTf~QlZFgQ!o5aLMofX5oQ(Q!|hcQGu4EZ-286FR?^S7;yY=m35v|Ure z1i{pHQt_dzVgy#Dphrh%MfwS87@4}q3W$$PD7%g3nAAKGi4_-@>3O%;x|*Ecbg#}z zkQ4Rjwe!fG%y92=l4e_S)FYf7MKW}7)tE9f%yXYHi#`|?bUH1XU)aZs$Tg9p(32ZU zbE?`)-w`QElhMpunWDH;3v85~lQHtAG-OjfAQ*UeEI8Z}?`TWBMzyj`>Ut-65NxMLVCQ)je|8UchOw+Y1YkU!vwW5|=e7)G&K=4Z=xU6n7SR;n>F^w_3w;bO z84bn@8lFYV+f&A{3*x0!YfcM#@|FfRbwh#Crv3>A8chhRT#r~(^uI=!1Dh2n;cLCB zyHA$%o>U=7vO#Ok1Nj+~d51M}8-?Pn+#M%NFJSw|D8h~cZLw*OmL8542BU2+H?yWT zz9a+2?E19r1p%{+p%n|2IX1m@#JjG@@2(x>ixg4zAVDZ3hD`)<30>E%N;o_7AQtE=(Ga)&UPbW#_cVI!WCtX+!0%96D zp?uePl0=e-3G+z=>5l|UW7L@n3?X6)ZA%BI&-mUz$nl%VCZyh}CSEqD2X2pjm9C2 zGZ(M7Yvd?-Cf^Vy-#6FDv4)|5P`$*NUn4J|k~(+vfu|kOV{4^M9aOG~%%nLwOXtkd z*+%uHA!SM?%Uh8`(3#RfAtq|(FvTt)#T7*{xi&Qc+k})13R@Ayy9ljQ3bGZsw$n&C zXuz#>lk6l?773_yDK{E12V*;;m>AGkC~8{qzf~RgNMRMk;wx-wo7ih@~z5# zB6G<`Nj6+kS>C?EGubs6>=Jkpr{6_k)Oy>wXkDvPuRrXJ#;xI4Zzc`kCHu4-4|h|; zE{*CXacT8acpa_hb@UWo$Lo0=Z|0TkAc{C8l^H(yA;ev(F?t9>s-v8PD4GNB4eIxW zYq5y(gF*RW6Q#EMlcXA;oc8H!Cf=*cMwX>^dINg~F{4bv5iVX2Lp)K^Vw_)+Eyg9$ zr+Tw_WHhXMT$zDN=&%rzeYZxHB1c6enRwokNRu)yl}Tw(rednXTDsKc#u*GrD~c3~ znelF4c3RSO6mEYNyLu1l4T{5DH<0M3v3~R4C*yPCIIUx z(_D-s6y+(F#cXcIfus>@$mByUac{C*vc5!Gwl$ryDLFiBG=FF`kJ7mrCoI(LjEj=h z#^H)n7%4TDG~z7YQ3mg*6z@2LcU+41B7^rr7h2^)6u!1Omn0e>V>V)!r#EJ1N^%^M zVE4y#xbn1d8YM>_R|rAATgO7=S#tCO8jpP$sg{GuG0^HZu}QNuIWB3H=*ahbS-)7A z#>p{BtAr%=<8m%(q9?~Ct&&{6OSlvDIt-I5fz)P2IXCDKObr9glXWg8a@k+TUr)zb_N$&O62;?$lbFRs%^ zD)m>nn1iT7HplfNlZ{G1 zN=|M{d!|~bSaW+KQogYi*wyE6WcIfvp5w$X4g)54pTEiEeN!Zn z^OdJEAGO0g#X7nXo9OK{q~ZS0^dn`^wUg~>a^u51Tp9~3Ps89jD`L&-=o82r`JC*_ z+v1=cnriZlprr<~ec@Af)00!;q?CSiD$fDj^@%CgrYkEXkbe)$b97k=m&_T+L`?BYNA){BrPKUWpX0f~Z@wu4!-Nt|ZKxK<3s*L~>xlC` zpwQ+MDP9qA_U8kh%751%UY!xl6*L;U(Bf2_%0(wO zWW*O>IWf+=@2_F^b+@1)p|@UyU9>*qSvvqoZp0u2@SFxyyecYpAh1_kQ72;mG)$%x z2(M*{u6n^d-?7r(Xtt-SD@`RkU%w{r29r_iv@`tu_tN_7&Q+%ajs!Zt^kImmFUePB zT9QhVH)K>tMdnN>cLA@ogKwdK zEt6Mq7c-}3WeP*xfSJtl!AmF*q`#JL)kDU^k1yoG$g~(5;RnL=MC2Nwp=VcxL?Yfv&K~QU9KcKsXW4tj zOAa#*Tb3PO(TM{gY^4I6{ZKo)5VHI5<6-kC)+!)M>8ld6Mu3yh<%;{F9nh$_3oBZX zNV1;dyRn!~ZUaP*WATtI?LaJi2lK&yTiKO#S<%Zb=0R_84wYSuGwv(P>87r;sjkN7 zKd^hZ(QL*7aVB~+9(H>$#V=d&l}K&EQnW1+xt46nWLZs^-Nd#?u-1=;De9O0+iuf` zFUjQ1eZ(JQYD!#32SfV6)fxj7TxghXBA%EtR_nNN;%oh~zm`Ke$E(=VM`^x5Mo~+)wEPEB#pzI!wj95E;YxHdNucye-FZ+! z?LoXv%=J`Me+80QOJDGO2Gq~-1<)N`?UDVMtZ)h-z82xdKD6LtBHJxK@oN7sUwpEa zzwzP|cg{15@BCcL^5k)A1Q5Xf_IjPG$+&;hzWhs;qG;>yxfK83uD{&qO1`Dz`B?S^ zo{}}D)VzP21jgFP9WlauE%Bc+1$Gtd1N!YTe4 zgU2pR$0=^VA(Vz7NeD+_Ybwr4yOf6ycDbZ*ABbcdEp@HoII7RI?a4d` z`;H9M@o725^vSoMK+TCaXD$qbqmIHRlP;MKbSlOl7KO01|5Q56IoUnIpdoJ#HfEq6 z{E|>um;U)gDW6L&buO;$3Q|m(uVJX}J~rehxKeh-%#Jp21D!H)hql3^+leGhc{Umv zS8(4wa53?XgH4R_X(cue&v9d|tn6eU82)cG7UTRSdk$8my2t}Q+{ zR;W$~ziB0TZZp(~ekd3jeDGx06Zjyy#s^G^{^_`wRDLcDXqmfeaL1mq$u#0&fu=EW zh)ZM6&cRNJCM(4nHx!;FEL2g7GIG4TFXD}a8+c!Np8rL>k+5h)QjCro;-_*3x`c6t z^(_s7`k^iRwuW_nLaGo^anRRIcB;!Sl5MpZ6W&0CX@^2ZFB#_)lx07Wr#zioxVA;; zxed2ivx4Bi?R{-?8#j{hXKt1L!&qCkDVq{S*~#ujc2X2YNxV>`j->45@w!+;a!5@? za+sN+UN-0d{-C?@I)mYxWF^^)?^clpK%>!UG#ZUYcab;b7#c8d-8igG7l3rcWbtJL z4Z8l+HvLf4oG%)!6<9Ejv!GqBjoEyv^ABpB`H{aD2TYQ&J-!k!GEZS!eo<*QI@Ly} z-L02Dl#RV#391`+E!r^cj5Se%Nx*t2Z4%(tBF<#qzxM8Y4cZsng`NKw1QUbq|7IWB z{GhTL!$J!@0a%v-l!Cxm3*1;p7#p;T|V0;-KaxBC9s# z!KXH9J2STT)!R*&99^*;=L*m#A`etstxZd|Ifv+$tPMuFjJOUmi$-jbjm8t+WZ6c_ zk@N0mV+Ll$M(lhZUPndz4>;K{ttXleZn|2baiWu3pZIH7xi-c?1|93WhbgN@%valu09!d?7*|XF8w~%&c8Z-(KNW- zNIEx~AD==v19}^<9>eY_mPQ2E_ZzTYyWBW_3hDuR8&Hp7_Y~9{g>DpW!hEN#a=ZNm z^dkhY6VMOQTc3P@-IFL*^Nkko`Q=lrT|jOFmFn`TR_={A z-h_B;X?&{g_nycXLV2kxL=DYx3~*d4)p6?8bX+!&#=03xhk7g6l=koST&foP8)AJ;hH zC~@mKQ_mZ0@w+XosUlatF5&eSxO;$?B$gJ?KQWjNeThk>P1Ti$mU@p-;_okd7-X}C zn4lR#+;EetC-%!Keg;?8m!+4^4!GvucvHH(#8Eo4AQ408PuPJo*=R}NKQj~{OI}Cylfn|&EaFi z24e!}y_K-k=C#0;``?I0_(q9)3iLwHy_N%_nnp#S?5mfuK7`iyr*jYQp8J@GhUyz2 zp5^@)|B!AyX*wwU6)|y9U_n=0$7Zg86ods{LCH)wl3wVd!##AS1MkkvJ@bNAI+VVE z+smmprVG4R%dVM~gVAGOGYh98x@IPC1jH6_{q#-g02dw(sNis<;fp>lysH4h9a=AS zu?tRg!)0W9I2_(3?sK;d9}JhHXj<}qW-mEKvOY@%~74f ztJ<}ZO`1xc0Mq{1onEhtsLiCfBCb+siazL0eMP>b>-0>%)4;;T_7b3+7I+12f;?&- z|D3)dq}#mJfbxsH46q5H&H1u*r$Y_q@oHc%*THq3g{uKpUSBPN?5D4cy%dL_{qzyMM6#iABEo39e7778S;rAKQSG9%FaD%yzxp@E_n@sn@EFj#F!#G~v(Xjn?=lqV)fIg{k7Y zv98OUdG4Tn4H=Sj?F8~#o{Ox1g;WtVpc1Lhy#oDi3c)NQT_wupt{_7bDn_Q;ox~<5 zAQJaz8))8>MxCt<^OrBtEpU%Na!4UADvk`-5wU2`^3Nip-*-{8&Zxm$!fFjXe zJgQv0n5Z;fSUR?sCYRhez2wGAmfRQuG-_)uF*JQRd>{39zZYLK*4@}xcapJ@xPO^q1VZrj3?NH za3NYH4ui zJ&Tg|%xt*BgC<;gFCz?(LFumDF_SjoJ>@MO4Ab>2c>Em9F&-eJE?8X|29Xy#!PI*=eQ~Sf9FssO zv9E1LVXY~$&FXyfNCSJ5HL%S_wrFUae;$v4EF47VdCo^h7?0F&M8d(X>^=Qyc@28x zGh$+6?%SI&nrg}U?1|QLY7X=vs43XOD@lf~JH1DhA##QW4h4sI0iWj(u~XTOtj9Bd zp^mXc5nQ6OYcbf0#r2e*V&cEcl%a~VHUYs|^D)--1<9GXNepcl0G*(V(fu@gg3kWPCRWC~UYg1w^ zQ6Q14TQYE0KBZNehi=ZtT>n<#xw$HKtc{s#c5s96hn*QXOgL43k@k zUy8*#bOo}3{e_dm*d3fFuEG@Xm&KR5rb)GR@k1yh{DD81qT=9B`{Vh5jgABm2x_RD z9D@=f+dP2hwu!nf@sJcLqhU5k!t^zSmRbZ7V?2lRX&(|d$e}>ND?u4^qYjOI96_<& zI{j5YW9wKZ#c8^wW(Y|rMiS)?6o?s2O<@w8oWt}a@_jfpjW07NF+G@t)0nVta6E7# z-Kpe5)aHTsd$O4o zcUSob6?L72-W5jp8GoGN4O=AqozVGdJmz`YP^ZGmIfxpFD*lx_fY5EoBn5{lnB1j| z)xp{rZ;)C;lu@Rd?yZ3>_W%>B6l6;{g#bLlk?PQ>lB1*4#~>UJXk--;q)@kwaThLb z6Xosum>to11yRRAQyjGUL)F7fpDs?kv{P5^6^$4;4ra>7fFcEFI-iib`kwNQ!!i@V z9KypDw1&&Tj0^amq(`A(Wz`+4o9DyavAGvkPfn_pPMgU9KVcJAFv!VJv8Lf@C>lIl z@=`UgDE?|k!*55kK=A-O`&{Tq@~99<_&?}QmcjOrnxozC!S`e2g>sWHL2HXEJ%8Up zB5=dte@Pd% z^Eo_gU-mM30`K&Ec5;J<7uxgqB(%0WT@M_*!CC|l0;#SAk2P2T?-ZXstOb!?N^FZ$ z33$bU;I>nhmu^7R?igZ>SWxF6H=^t^pvOK2Tv#0_K3Q6Z=_Yfw4CuxaX81lbPG+A$*p%oA^q;h6|0vI?3I&7({7 zShu%!y>?z*vpcu%57OPOL>HYTU&JM*-2#LPX5{3-*&73=-#6xy9ca^pmmJ`E4hB?Z z9fI9$7<_QY44O|j3Seo17AI^+;f5^-Rv#GabWIU>(GR%^EF(F|LZpCpBl-Y=FJG}= z55);y)&p~aAwP&CVsrvmpcf~11`E9&hj;wgVB z!9`e?2#6GbSd+UY&@r%Nga*GoI4k9Mk{6n)=S4=o7a3?39J553{&uVc22FuH{@M}` ziZz*k0m6vjz*sc`COgr)=LbOD2)QG8o*yZ)FVi>vN2bxU%j0uzIOZ_+aKC~HZJSzumvhgCzv@|01qA;;G4$=_;z!E zlo!b)HMrm}pfnUeCZPqq$D*@<_gG{W@E)7W;UowXWFC7%*((%3l*~4G>ytSH(E9Yv z0JJ_~?G(MjBw*PjrSeClsRFnzQFCZYvBO%Iu8Ux;OIm<+6vQz^H6s!yiHvcb*{35v zPLla*K2W{8lVA>c$=MllT?CqEM_@^-ch1V^&C5o|1dnXLkP0Vb4bcYdx{AuB_(ahlx^yjht~ z9^TJ+^|*Fqmjh@g*5je5G4f&w_E#XZ%@%k0?SwPu(63?~0RIaoF|Q_wG3E zf*je##MdVmC=UvjYTk_>yOgq%*Q{4R)H>x(t=X{Dk7gdEc+K&;?Tc#l*ivmaXNNmk z>*BI~X00?H>y_$O1mkY(jlCH=_uX$7sA{KLufnDF&zAaw>+UG@XL2;Bt=fgX8l>nJ zo!5cdjauW>UNv+_o`l#cpH}UN&cYyOr&U?=qSfqFD;;}fw-*IrPu49TwVSOYdsUc7 z+%^;e%I8@#%Fsm_oNj<()!t$dy1wFo<5sz5oqS+&ZSt!&Xef2MZXCP)YtcQ5kaDL} zuKbwUV&Dz&F`?GtxO!4;*w~9+W(yPeY-bk17MkF;pu5T3Z#V8`~Z2&m3ZrSib- zyozS-?bM@;l+t$@PWhrbo@#}|O7;tPR(;m;hM^Z-!LqG@k)h|Y>G0sB>+x6aQ}31% zW{|CW2o{7sycdUJI-z=y)w2VRLc{qKGwR~K4y2Tt#~!&DIsITh8++hAH1Vf%8Is<0 zA_&?r@T2R!r71Zom=yZlkNQxLSv>68TFr&o3 z$!HV#cNql`bHiTb(VDUqP5rC^!F)$pMEgUEi1AV~#@%c}#@%dEcC(4uT|mybn@vzw zmPyjMn@Lnwlug#SyMVBaI+>)6yGx1NUrOBm0^;_wiQCU6ZhsMR`wNKMUqIY`HgWrl zh}&O8-2N)Wb&ACwexNtSoXBuv4q~?e#?+}at?upZF{v4O@LzAnWECabNIy8<=Jy2L zq;%S`uZ+y&=xd{WM;O_)IQ;ymQg<{1qOpw0>J4*6BM zcF-Lkj3;dOy{RXWax*)Oh5I4JBbTG$2-S!ca{b&+%Gdwd}~K>dj#!~M%+Uo6{_d`KHb2UN{N^3 zT6hcOjW)Ia&y`QPCo_OxT8-hPMn{oC&ahHJ@ICjn{;@ z3}D{`DDQE(2QiZ;10VKuOfxeGa3X*B!ExHb#KY_w&IDX8d!BO($57hV{VAlz55jxO zz{UMW_Vz@|k|lAoLvO;AQ*@YjBsYq2VsvbH%ZyEPmMI{+y#fl66R!L?D$1q`v_2zq z3>8rom55SVQ^LR}8(5INa>v8=mG6xQi?OvJ3pp~GdN;`+Lllht!ADlp6L@AL3X+YB zoT6%%A^?*Mq1%roylj917;mAEy~tD>aRFsOrxdg9n8>k|xPUX>qltDAwo4)1XATCbsFAk+)StB_Cv>y77L9d;o_L9zI7xp|RiuENwBGGMYD z>^2Cm*>a;SyOLmwTJ*x;+M5~;ip3Sk=!bAUDk%Yi9)#)09lO``oPeEP27woW*DHEu z!!{7yP92`LI0~E^6Aw_VUr=%p4ZmVo0>noKb5SB2^m6Vu1NVxRRnh!)&rNlBJdV>|_i1jzZ^kFLk?8yd6pm=tFAk6MC2~}<$CgimN`$@o% zDDT1@oPfz|C2~$YrT`Y9*~}e?L@CAM2+qg@cGw;ZRl?Z~Z*NU5!18Wy9!@82cwJh; z2LpG))R&^Ho)U8$9vTxy?8pqYRsw0X(8N_*bNXhv=0tlGM~*~Q1=J4dPLPvNkA4|W zzWc%HQD#WUT4pE`;>{4{J_m=;X^iO>QBM@^Fiw0w!zAn4a@SV-*=6HL?h>1+v7uH( zt_+`e0|<9^@Y$vt@vRusSM%){+w*h?^t04`?(?^N{_7HI(M;}jonpjPA27fC%jvF! zLuqpy4y-sh&c6f>#bp?@nw1~dMIa3N*Z9Lif>rukm*}!T%Wzle@6D$Dy;;A%3M5Nh zm!N&fs7gOKASrgaE={#AH=ydrvs$N0+`AF;-e#?!EphTl^o{{SrL0Z{4&||WMPxLo z-bY1rJstPmFu4beVC0LTiV(m;$-ySwfd}_&_bI^){Bi__LJo8xrUK+G6M|iK0*tQG znfe$wjO>ODKka{B4I*W{p_p*XV3sz3d5{E(Gr0+-lv&1(X$t77sOmsds3J2|GMukEJQ>12$+;>VT zB01r_aHyeq_9I>7XzWb~N8_N!HQE)b6ODG(x>d2dP z#bMSCZ8%&P+;Er$ui5*h;)ngQw<5@(_Y328|HkX~v6*E?k1sIL;spc`Y2J7tJBVih z*Wi+G8PgrYv33e=G&@X>gNNYsBs?HrRJf3$XW>ISpMeLe>)d!(K8%EEYM6Dn?+u*M zoL-JgGanr7Chp9@Skyj4Pm&{-qqibSxc3WPV{0d9p289>;UjsTyajXZJff?uQ82wW zFfkKnF2X`Ty zW2fh~PK_^ux${FrI{^vb758(?sYbhqF zm!&U~#djA$lu>k_U3BXY;;W3ZE41v}k?9BHAk1i|&WM`g!AN)tiM7XL3YgD`fVK>e zF+7rU=6lNYK=g!bLsr!7)GF$Co-%adIgmuK`*oLRKWT=hy;=bw3lt%s!NSTzTS>?-}Zu(xgs4()LuRO!+9#|(2M zF6hN@F^4ZWc|D5>DXSSjai(HVfAFKZJJ#}Zpox`!SkM^xo%@*wIM+Jevu6Fcd{nRQ zEX15OaYu|GwZ;e75e@wP=?!}BM4xPpmKcl^O#n`63}VBP86Btk7=VFD4Fis z^7<<%YNX0bUnpqE22F>kV$qBHds_>&COieeO<0$mWBS*m^0JnUVU7cQJNiF!h#Nr* z3y#$e*g4J9N7Q$3&e>OKNMFkq`!;>#XBv3CK0s_{SYa8;g8-CKcFqwPhSMKl*OqD?v z_BqqX8Ck|26C^%aUR`H0XR6KwjN43W4r0HL-5W#4v?8J3KMDr-a`em3aiUp@lsdeF zH2@Ch<8hC*5$$bs@Fp`i@j(-rxOWi=a&%|R{X(QPV;KT~RCbwHltV_d z2qzJ@Y$)9Lt9b$OxDfXC+6HaRjDM)U;jcz40&EQyLP+0b2V8K}@c9Ucy1(%2;$Ikb z-@tzrEwwQsm~($H1AJgJ{PYWq6=1?|ubut9Z=6>Q9KeS!yRvLY;46*UX-m~V4l}u# zI5o}8;!G;k!kO3ihrTyZtj*7)$U1l`<$+@KL`{ZgAhzVeNT5*u?bvgW5xhhWGTCTB z4lXFwFl+&EP z+!s6jWPn69=zTS4ddn<^yd~q{4cYkz&THh3LC=#NA))wSz-8XMt;i?Ow!}5OGq(B@ zPtkdoqDOz2*I%C-qKcInMSJQAx;#J>i||0*R?YqjeMdC==s}dFXg(neD}ClbEypUI z8sMk8v_}%n^3;`nrOx*|U)G>=A-sX#=P7zHjxp7C#NpN*GkzJ|%anKnUQ_SjBi7Al zAUTWpU4%l8`p&G5ehrLg_eKYxl|-a}h$!PZopMS0rSOJ9*sldvBP$44b+3iyMt{F;1f?chu%CW^GE2`5ugK1N(D?_tyk)0t zu%hmB-V~h4uf{rT#5KyTTb>S_bD&HcDANg4%)&BLcA+9@gRR@iXewNr-+!M>>sM&8jcn7$z+nF6Mzz?Sc}sme^khiWYoNpdVbqemt!FDWm@>+4Csg!2+CQ{x*_TJ%qxOZVog1g1UNqxp9tu9Y%mN}S@(<=$kLibbAN9oY_73`zSDnKxS)XwfDtwi!f+4Iy^niI=p3<+y)+S zqokY2fFTNw?7)MRTNL;c#%Cs$=H_`pq zm^nU>)ZA%iH6;OFF*-sx08mk&7A@%S)HvUI8~h#Sy0MT-V3W1)+7GOVgt=vq^$ zW30B;w{cIw`y7HHoO;wSlx14*PKS!}TDQ80Xq{7ZRat&qa4c1e5U!PN<-rhLx%4XF zvJaoc6MqT0ihx`Ev%te>Dug;2fgUqvoUkfc3KFxG8B9PikMk-u!>FmCmcqjYp!owo z@PLN&$M^3k`d+hfQaf#TTD8V$TNuwOMr2_f{&!B#9T0@?xc!Ry;`9<(Lts_GqYI`= z#NJ+nZI9j9WlU!)YSJy=Ck_pEtVg3fz!8BJ>i+b)!gQ*r6P$W700RYtgmveet8HJc zwo|mX)vAf*);E{a z?Nl&x%jvFb#?S1eEtPqfH_WSHOV}wu1SVbCuQSUPHI`ER|gFBvk(Mbqd@7+NgUOVc^mK`>c z9f!yIC-DjV@)AoGi;g4E`?>5hX=qBP5CpE8yLD;XOX- z-onRSiHI~9AplY~Rd3=7ov~!Z{hYNNJvH#1KcxWRPyZwSQk;Ux-1viTNc2a3%a{<6 zDbkoq(hNXI8=v6}TiVHqr~|h?JCmZ%mG|r19Xlmw=!cN_+6Tp%us|TVZybxSfe#65i1D(TwH`8FcOT=S;M6_ehBM6bhI70_Fm}5L0#>T;TOnd!Zj7}TD z9K1ZxpTm!#i!2IoM#^pJX)~T#DogoVAtj(&In4{5o?F?8i5S$67u`m)Q5B_07GyPe zIIct4?P8xd^)>Axm-43*-*{ExqtrIT1rb_87A!V7?A2E!6Jpr|&s>z)Ah8~E?=#ma zk&PDG$cr_t3g*0z;(i|T3}p;etiZ2zC|o|5!lzz*I;Q#<-GgZY{7){ci?2{2hrOf? zzC8}PIfz<&j3Lj^O%n9)(%ydY?LYVTC?5hUI?2i(!Pk=2W!0STvq63Pc309LVGWTjebDd?v}zFMvz6dcat`$`wUytjfR;ei4lCB~S}-Q2kQ0GgLu? z2zZqb=-}*)-6)m{$b2?n(~mU8+uSxXUWbWxmE#D(SKNsT@w272%R2CP8=_w7QGS}& z?mg`$Y*!J{6TCaOAG1BI=Z#_WBnMIGSiMau_FW769{wP z@s&AEtI%MBN|tjCPbdfGI=HQoXmB}3Jncgs%DGHXT?=q1?OGP{0LHe|LKgQ&) zdgdljO%yeSSb>;PTc8PY6&r*)KLCJu+*5xas&G(x+$&SZz@a8!8&DWjD@eX^>rG*K zR;R&ybVYFu(cgF$IT%tEQmwM;tTOl=qII#>u5`hvC0E+t-v`Kefnl$5z^jPxR&W6V z9TV-?!1=WUm;$_-5(>jokx?w$n5uL2tLi2%iu zaarR|!V&?!G_Qr^WWR}A`$RtStu8o7DhDV99F7=)do`>M8ZyKd*&_8z>mLp<#%PpE zA56G)soH9Fk6X=)!uGj)=TGJn2d-ASL9_ zs~+6n5~Ajxdh$gJN|XV`#04GHnTCcR_qHv)b2|&1dB?aY8RN5G@~T^@szUiY=Ph6* zZa80P*sx1S5!7-V4Q+57!?cfDaYRc@vj_{f|J1N0~7E;SP587EQ$7LeHU`FA$>^JCbngZ zLDs`B89-^hYC!1&)|TJ6m|zru-^6AjBp?CB(+d5XcMH8je{l2SYsrI zR!*w5xb8918i8rcV+20-=_0oM>)Z{!LEgkm+NTA_;5D0tUwke2aQ2i-9@&Bm zfnk;JGW_>LM`Jwkrl*gD6<=YuZHgUUN*5>pf*|PPg}#t3NWbre9zCXWT0GsTR)(+a z#o<8K2UErn{5o1E6q~%(IPErDwbNRIF9QBtT3-M<|7(&ZAxa948VpU2`kSq9=kBjJD&vd++?S^j`uYSG<+3^Qj$XD!Js9U8aqg0 z7+kaB7cRM^c#v-+jiuiS-D%{5E$_k$C+^f^ilQa~7+}7dU%{^^yX7J2&=3(QB;d8~ zOaPKrEVZJ{%Qd#93INt{Wrqh#Xudk8n+LLB`EWY+(8X^a!mB|1tgiwpow8#;*|^@@ z8XRg124;nIma4NS*9{hpy>Mns(2~}I=Tz&mQe6a^yoDvF8{RT15`Ie3lxbiv3*MA0 zyI-_9UHE)qNo4&RTB|6kK3kj^cjUNU$L%t5@^tAC&3j~Hboey^h0NqZ_?2Ojt+J5c z-0Un3lFvKOlSMXh1+Zltlar6t<+Jw0ZHlsEspkSWZYWGv#UdH&(0*#WZj#47KYke@ z2|&vV0?1;3N9JssUi$Pc!iDy{vG1W#4j;`!JQ}owW-$jK;T6@VP;T1&5 z4nVcb8D}k8RDv$zyG|SNjmV=;=vns0MOUB5Aqn>2cTjNuM#&Z^#R3M?NioS%4#4Th zV-&qO;yHWU9@B5xRw6F7;Z2XV{Jp)MkV$?QCcoPTVr{eK1aGZ)DyowHvU$jKzK9~A z7tQD6V6N&P0FQ#LVU}S5bo~DHssUZ0KBV`$&V*EPXY0c1_QjO| zT)XKW4rqv^=lYng{ZlgB0ObJ#2WpB{FmYo_3-3WBaSCRDp$DRF3^Fwl10XBePpaOs zY(L2cS?PX~_3Zh6(zR>}e=LJpobe~wAS>mMrCw&vpVYv$3^RI48lGV$qyEAiHufe9 z6XjS&U`<72A>o2tM3&l_$%rf%WaJ7;4bPe^NM(DFF9o!~_Q3mFe-jV4;mA*ioWyE5 z^b_h>YJC~+3sot)tuI{F7D$@+>ld*@fkFRlK7i0YY=3g_pSX~O%Sa{{gw11%1pH;K z3$?q=nKwPU2dCitHfkb4Zt37>orw@Q&o`@|@yuz^Y* z^21q37t0v6of;RwZ>fJpm3p4z&f{PrEYn+jvkY(Da6mQ{?XfUv2JFMV!_JRrie#)9 zjHZk%0|!jn0tBBrc9P*ZJNfNv)}h$+5=A3Ow31O23^Gbs_YfK{&MfYanP{^Y&ZmQW zwn=1^vbl%D^el+7E6C`F8CCE!Zqy;|)SOB-OU|ep-Sj7eXstHJ0{cB+a?BfuP(xh0RmMT&mB(Z5rq-r)r^K8C(adPgqE{|BNux`cT$2bF z-MXgkEV>HfrFwt+Y9516gQok7lxvTq{EHr>i=Qw(GKCMaJ1|;F=YW%+x+iR;DBB2e z_Rl%49$lU~?at-N2@Pd8>mLpYjGYa}FAMAG7>WjYaaShn1F(nEqc6gFEKh@IF!An) z2k;3QgHwhZJ#}Kd7b4ob12X|PVnSNei&m|J9&S*ARODR8xCwj!MG-g=P=Q(Twew90 z>S)F%i8IucMp|y^;CnEKs!IFx;&RccC;O4qmbiC~xMx@CTWRN{pzllz5!6FnqVKXT zsL?#Gb{oysdAa@_AO#p!7gat4<{{aFyPz{*QSNEq3agH&f`cF&&{nkhd{f+$jO{uWb>fn!y3lLNW=i-Yo zAqua0xpi7y8LiScUlFgIf!I;KS^2Sgtf9tlUy;oikNpPBhbP#5=L;&Bt?KauNK0{S z#eW{1&?ohu7mbAt1Bb(Yu+cy~fEHuAKkjh;`||u^$$0j~Xkc!R>X+3&*l6hgaM8n% zPyjw)eIHvEd5SD0m}Bw7`Et0BBnPzSG?J9GpC(C4tI!0kVee+LfR=+qack4C4BT2RW)udOFZkeP@54+Y_ZQ$C*`DYung;y%odVOQz z4UPY^86`2;ZuR`4!}XDzeawb(m8D(%;aQ|y=`>po+!flG!=MXP5=`JY%eIA_#skg* ziAoA{mfF05M3td{x>L+@vx;PZp(XTb>i}1p^WSN7sc^-bYTc~Yn;$Ql?NtO6eA4&P)gJbjFt{v4E4sdP8{=LWcp~{wP zt+UdRaSe`s`#TS-bJn_SFH}{HbK^<}$2Y&nnB)qD$39L4pnC%ckc&25tCab(*{HUw zm1g6S6xWRjwf_}npGMgE*!+(jArmXB&EVPsX`P`Re669aGysZjtuC z%gK#{6rYgN5el9Nx7z94{m*H{!~MvHZq1GY&m1bW>YQt&?W zO&~Z$Uj+O;ppE@_1sV?jgTH8cOW7v`C}ii>=@ETov&`rdk-Oap{ZtqZOrXVq1Dibi zqXeA78xgw^iii4lWVn*EYb%qNWLtkrOgcx@ob}STwmBEj^xsH*`eq;I+~!IR#NY=E zh97kF~L)^f2Wi1XTo(FS4eJ28~S$&h~HHJDA!*CEKty2Y=BmnSjnIIjZ_nBy$NI z`L>+uhNGE*=a+3Bm)c2#5W!3Ygd)8>$OZ_>SN1|KD)Eg1hgndFW8f234OukWgGggg zQy^=3ipyvg!Q+XOg@lt;EVF^blU%^5#2Dd)pcIZ-RsbSFsUpHERM?aP67dyDz@(yh zu>>0^B>x5fYJ6vjS^2={`}|^W38@bLgK4#RiS_)EZIxM8*dLu7Y$VHxF#?U$o5npi z%%+J}X%n7UZ;%{&(dUs1YHJ+2vy7(%33+B8rU&lr;5m!2z_LdQezR4mi}jvtux7Vn zys4CfLIy7x>zyC3I#gEmcNnSY^??J0_=_h2JK!uCsafyIhH7^Ez_9||j^_XV_X?9L zt3BzY%3dEbQ2U_z>_iu&BoAVdIUXH7YA;5I?L_<32=S|Jj09w{D01w*t~=f#gIF26 zli3PGK7n&wYQz%48Y5mGMS4K76h*P?r4WSnUlYOd1m1u@h=>H@Yatn3LEheme&AEAI!F>Z#)uW72E(uLYIewNL=eX5 zg0h!vLr)YfeLBZ;%y-Wt2nOfK&Zrf^aw~DBBX@ToPZ-s0%P&fEnMN zR4h2bgzP7pMyz^(f>DiA1Nn>jg6}stiI~0STy^B`ZDsmu-LV;y6OahGjXT) z*erUsxDSwO*vBhwYkKdz{PNNf;_x>v_e4ARW1+x`0275-x?4W)<-}=O&OVkPbILQ&&qwl?)jt zm+_ayA`YICccqBS6mq(uR5fu{x07zIZvVu3VCH_tIODgMYGq|uLeq;7DlhGg8$mN> zY8?Y5ax+;(!LlLohxU#QK*~sJY#&@+I9s+|Z>0$ZFwx=(6}y(IzHryl^D~K^OaBP_ z6mDf>pdNBEd;y7bCZg7$++*FS*ZN}~G1%{(w7Vw| z%>dBMtNqJ)F)TQ&tW_-^lMtfW873q&Pv~>w=ACx8(yTXI-Jh%A)?%-Fu(K2t9tBgi>=FwE9;B*1aJPt zmM7%eGdt!=q9DOwAm6`FUe+upB4VeoirLOEh6n>dK?r;G+{ZAB7`^uvo+3t+H%Uz( za!|To!ctHcpL!E%hmKGl%(%C_YRhxkDI1h2g3PM}3$nlEC2clf+=4)guq_XAc}GgN zvI1Q`V}vcisY*-OTH~h0c`-9H|M|mg(USPUc2S*uQffq&67gl5Ckf3?XegSeLl zsEFCED#mv4V)iIot>RQuExxSLa-cA<7*b=94<$Y_tV0KogYy00L@pBuPXM+ ziV{{dz`%i)U6L)=wudQzULh}PR&C9a!p8F=+s<+*T4IwFo;ygzy3`t!)1?|AA=GQKMN556ksNQ+(iDf! zvTkrY^+Fg@4dPtT2%F-YtTpmtOi{oqobo@@P(JvP-y3^LK>V}9a6YAUy1Zg*K7}XJnS$kX9KIoVc?TI{P2doC3n%^^H&vY8k->mA#idM1-~ zaG}Ik6=7aA7nCYe_=5OCpDbZ+e!=a{ZL=gzUy=hqdiO~R%L27PJZ}I2ZzzZ)t`YSm zQ41!&HlftXs;2yEsjUf*6XRo|F6FxbcMrX?{3>gsdV+OC4D3U>PI1!^Wwe8+LP;83 zST&80sfCdwyJ6-xrzw$jFF99>)-T+DLJk~+#Do3;)LP?1wb5y|esf1Q9Vmvar<3 z6M2$M7i2b^(i`w~1 z$+W>2g?6+|9ff5Y7IIc~DX8uqq$;>@2Z{AZuz3_rAf!XtE||ROvU9nEsV)plKn9@Q z-9vSB%x6~Ppplze&7)eQS-Gs2TWxd`TF~tK_W~sz<(y89*$v)1c`=4vr$iPuI#LQG zGo?{B&>fx`oSwB>FANr8BqoI9O*RujwzhScC{h2<%S0HJ{}07P)_x>2J&2WFym0bN z;_zs(nKeIiJIdoQT{hdT$8;;Q9FKbUs?X0`Yp@{SSX8oKia(DLA+OjL5{WGZ;!H}( zjq&0sT&+8}f!rIQ8OUM`BFT?~aF~G0YWNdp$|C*?mi^D!!DvE!90+VDCq|Ll@iXj| z8S5*7!UhW~0U@=b66H&mQnG&b8cNoDjK!0LX<0RiDv9L+hXj7qqC;DrUOns=oXT0b z(Jfzgn)-W&2!UYL1L3BXF{hbJF-?e7*We|%3N2fL&=@l&4Cm86s#}!6f$3P4$shrP z;^nGnxr-J2^|Y52b(gi}jY zU5qb78KZQ%XU+O?`3Nue;MDGn=3W#z2!SnTmz@;ZN}W&rU+3&7KMAHISQdcE-rfWw zHjg84Il1 zlK&2)LIZ07SiC}pR$dnQ1F!B4;~JF|;O`dPmDEyI`@%-6f&EGUTime}i{cZTNF}Uu zId?z}ZoK|mNK2Q4%Nk)x|IOKZQ#u$HoV|ZQw35AV4@&&yAO!*AZf(%yQ)&O;?dSKu z?W=SQB$@|g@N*b<4Llbdx{=S=3Yvv%G4^9`(4~0hn6}UZb7~xYYIn*VOghpz`wSV^ z@MaX7Nn;U2lCR zxtzdt0mjc(E|bT-anR$vvzk2eyfW!fN65^Se1AUa(Hm!!4-VMwfphwS%5=5HR>?1| zZQGBJdyU#^{LhBB2K0xjb<&sO85T)0;|6pA^F$`>4klzn7yWJaz1BD_pI0eh7W?DF zb^(@*Oq&6J2xkc3gj+|vUWY34ksijU#wl04=RqmH5&morQP`c4nttfuJtk zkG12@8F=%63rz+=fmQXd%bWzIXBmuQ}-CB2FVS=}m< z?m7tonvk^0Dx5PuGyXf3L)v$w_PSfLG9N4%=mZ`VvdVACXGoU!{E=4r&qV3Wg^R(` zw}%O+$jk?c%5V$&wxlE-43F3n)=HZ`ehk8Er|0&sA;k<29l#Cjg8OiLXRz+rp!0bR z!Q#OVTdIK5Yja$<07Yfcn!BCOpN@7S9oNw9o!73o=9OcJqbV$k<=>AONNgeGnCNVmA%@}Y; zkX#+@E1ZcdBuQ(WmjzSm>nwvM&6%+s2e-71*g8@AJl*Xk)=t66-|rd=YS&yvtj-S3 zs#YcO$3p!0=AKwu=E!Mbt;qx_9>}K#x1%^>0S8!+Hd$gJM~DfULN?T_3F2#safAqg zL-|0RW~2TyJL$ozNw%qs=b(oa=$f~W8R6$ccI@!tegTxxIU6RVkVK0R;%EOWwxWLE zh~}ahf4m`jD>$0=`8?V#58 z3IS3cma;Nz2!Fu5`AVfge=3P1qA}gY)GIF+7$194|5NE3@cl=l+jgUR*=ly%cF8}PL22v% zkV)yy{{CM!rN3-Sxt!Q?{}?u<46mBCOiNpjXIx^X7ieGl_N`e!R;M>y+g0C*p?-o; zl@{~UD0F96e*b4){B~cHkqOp zXVd>&(^Z!D-PsdeN-b?#z>yf)|EZ%9UE6IHh*OdXLT#sDm%*4 z8v--|ZLekdOC$Kd@kU{&Vsj7;s;>SqFX*{ zH(N&q`U5<@_^%hOW`|Lg|J7k6hSXy}7jTWRFYSwJ^;p!sY@f+r>jFZ%T9vhrTjg4V zf3JhtzrmI*|GQN_t@2+_TeS;mq$AU!8U-pu=eSnVQi_7e3Ys0=e5Rh zr&X)`h$Utjjyw&C(ZKStp6-*;h5cp$j6_ORm*h&79G6=^BK1-wK*s}R?quuWN6(w_ zYc1q!c*{JCoUv4Ez|<46pYC+v3|ywxkg-895|^YJKOJA#<^j&K66OOq477g8yg?mu z#;Ja&bugc|;IQR9SU#$@I%losNBu+hxO!4;w5!Iq=85r5FmJJV4Af}L;cUXnR%xxI zZ})>c_6HflT0ZAZ)<=(HddEw&A9+)eSB6|U*{r-6b@8k3MW6P0Bq#{$7RFBATuWf` z%8MOQt-76J>JtORc1zro1SmwqdFLcR?tsb7kLcdiWji)Qn^1-a!?4K^qHq@qvA0o+ z8Om`+KTd<&sl&8|lJoAJF3|Y9WY8oSpxi0P1~P#`%F}Z?t-Tt>CJyfL0j{E@;kZXX7$#WHZb$; zMY0n@LAwAT`@hLlmKPXFIB446;;NjbT!i0JKuOn=4=Yj)5SOjL87H39dbBj$S&7NC zgUdtTPh`E5u#9NcXHxL+Xbsj)R{x82*I`}b^^k4e-Z}frnKdDX!GQj!<=%(zujFAk zVdIFY^@{hnT8qr*cKDll<7(cwu6%K8z5T@-+4OxZHn?vNhmj{PmW0~$=YH>DTfATG z!N=eI;lLX@-Jgz{KOqkJO1)dXi@oVU^`771p?Oz5fU%!yW_I6zZ}Q(6M1Lq|$aW!) zKQTXDtqhuCm_59q zhKDqVTjEyT@`MI~lNeaz`3yz_?%N;G*yiU@ko{?1(5MaLuPgAsuE1Bn0@wH^acTW# z;idJr_7@SUyXou~5eNLr*0--ABuL@ z{<^f2zIs-w75vB?ovuVZvk6;^&cybnl)AL(tq0Bzzje?LwV(An5S#lWBN*S8mR)OP zcj53y<&ScKyI?dHKK!gMXCMBGK&M6aJ?lEikqRp`)~vN;Ts*!{pF!oiGH)Lr$>Dg> z>d<8tE|1h*paorRsiZCh|1Yi$ZE37}nTD?~f+<`@m`^YEIG-%K0!tXjZH#HZ>XK8t z)GcwTSE6_vu##6|#PE8B`W(HInjHk7uQusAZw5%4dO>eOHD6d%+wvraA?BlC7Zd-CK9;&mPv=O~a z&Tn?~wj{Wul{2H7Fm@VDgwjx2kg{4XwtAZUo(*O#E7FpHYZeq&HDglr$F(?TRa54l zjdPMl#w_BdZH?K}ki=$pk;(DNSZ7`4p*v?)5gkd$ccxXTb`!Uq+w_$#IMv$|`U+OG zi|FXES@_CkJ3nkqCt z%FlRLnyf1?O_K$1dz$~_U6P*nR4ZfNQ>9|w zQw3t)RYB&wzgctM-(<~usz96fRGB&NZ_*?Y^PXxc=RMsYpLa_^-Hu^m-ZRRzdC#b! z&3n2=x+FdCsaD3kr%J`VrwYWptAb3o8Kustcb2GEtaY)MZukeg-;~t#yg?&M7_U4vB_|_bPGVM7Mt2zrx&&Ksd4iL{taDi4N!v zM3rHjy@@yJ&+hX>5pOhUJ0M4JX&0dft~=b7VD0Or{$IB~(gyg~tVm zH2ch!P4fB>`ucrecdm2gxcczq`z6@9ztSRD(EsDDjt6(L%CcG132|+X$K!f(7Fcx^ zCNG<_Hs$o4bMh)cZqeGU^NLGk>ubG(U9_dHcvqdi@xTdPc3b^_dqdT*|7$<}%KK@8 z2iMa0uUMO)na_v(rMrlXQ~1^B+ZGEMfIeXRmTOM@!yzKdCtOY~Nk^SgL7&Xr8tqj3%Uf`(~9$E#o?V1OlO%QJd&O>A#-2gFG$^x?FOM2$MYY=(l&5a365et_xnclkh zdwYA(CzzXa9UNa2&u9LC4bdG<+=xTEWjaoQ+D0)LZF4ZR^lk&$k|nzH$GBqgp~o{A~- zFawpA0yV~WS9;drJaH^toJ=utBXTdqU!`B}#V@zwmn(ed;5ghLhth7>8VSGz><+^i zv!+)C2kMN2U}=4gdfEV`pD*Y+-q2a&s17kAFnsPx$}%|X#p&-pV(c1 zTzRs&$&!gw%$I>+(^Mr)C49kn!jdpzDuh>G^PJdAHtx7%HL@;4bc ze(DOg>WqgI!Ceun?qqf42{gIF1Ej5kW`!u8ko(fm; z3i#-D;7o*@`Xa8hbi2Qe`BeNio`k928>$J9g}bB=59CxWX`4qw#YfB04`*T`9bYtz zzf3*F-2qz3&`Zh=wzGyQd>Ll>OVZzqwONYrI zVI%BwmQLB)PL6gKN;gM2m;*V3Fb&)`8;c;3$pTTpCyjt`0fG)w*z;-;324th6W#*z z^kBy0VbTKmx?+@$e-PYHCi^^A&~0-ayGA}=h?vn-QYf5M#5@s8wSr4Hs?t4L@0q2#3D)K0NB&|jO=fLvq^yMg8^{#IE=+1Pe9P{ z0Rf~tt*MwQk-${XGI)n=b%=AJ*Un&TM%7vwpgWGk`C%Gs4cTQI+dB-Log1XUbj;V*Wz$Ag{)$q{!zV|Q5+r-BA8;48J*T}Rxx z$$EO+SGsEuGHkFrX3~Iu*~gvIoVk1uQ~m|}pe?mFH_y(m`mex=$MK@WCVVDPfnBN4 zm%!Yv*a*`EjcJPV>oA9>3f2V!5>$Js6qyo9I$zCewnYL)aTaRB)m$(jC zVGjY*n}K#L!c;58M8tw^fc=2dPeI}LS&qE(b)P%{4BK= zi~W1Kp;+q6a)T?PWI|>_R<*SQipJxSOky4{7_|bUNg%$QO420KFI2uj@E9E%14mcK z+7H|onA~^e2|;_VkO8^9VC&D|7sL1i4lDW-AE=k~+NS3jZWca})UNbn-!tIm z*0x7(3;k9ShM+KD1GwNRY$M?RkpOJA92n^={tBObTbb)sE^Tc!aM93PYqTiNB!&}N zG~1rLP$B$oDFn*~Oe2Vg+LaB3TzVMGu?*N+=CkLC*Fj$d{oXM47KslbFifL@=Yw>V zpnq(acb;tX%2yNf#bGwvnkBPB63u0zQ#{5mjS32`IZJqWVaBN$;8q6szem{zU~NUQMqSaovlo0dMqtEms;Z38`KF_G5j)NC&6Xt`)#Ik zD3j~3^+?$Re%2W*HXIL6)TMM`gEqiwj<=L0X$09Oq+>VlrJ=J#7Uos^T!D>Y-BtzgKh+)(5?GLN8kdmb z_tGjLnF;K6t|IHJ4<>65hak!ahUK8oMq=-9d*uqV-4rrkF+~k98Sf~UCbAxqZB$@8B621me>_Ux*OOjCj&4#e?&=`+HXnVg%R%63Dt8XV4b2sWHX)sw)kff!-Pe{WH-|Hk-cUvyLYdSz{UxT@W2T+;503+ z-K|$2X(NkLH4$zDE+Eno8@k!**{h8$Eo~Csi0vw%R|VKZJP$UKpaj5x`r*0=Y7tM9 zI1Irh{R`Yk{}zJZW(Dm3a&@`apnrftRk*|}fep$hmzw-i8un(df1cDhPPb>^s0c;kW@v|kzuN~8=<{MXfuXy8=<+p z?r&@#g)9Gj8~X>$(rjY?=pUXmSr}~#WqUzLuLddY)lCNRvB@GnHkm}i)1Wjb0eV$H zX~vo>_*nA=A8XFwW7Vh#(5nK<=IZ&d;O#o7R|l1>0_(@yRY0!_sBS49mws8RNK0JY zKq1zPDP1+CSS+Z)&gw7d0BLiRdOB&Mp!+<)Dj(UzhEbaGVALi*oWmySvMF~aGQhL} zQM6iO%&hgZcI2mcNY(4WpOXiAuh>L^5R zk@Cr6C14Xhtj9q(rm*N-bb40qRmYrF?~C%0J>sALtgl#CybQ@$(oAA!61Q{ebF!~H z&%4jFf*i<&J$uHYjUIc=8v0_RR4$~4Njv(mv3(Dzh?J z2o2kKzV%$wqGv7jdCk5`T!tUH8QydtIZmD{Iy(SOarL38QPB>blY(=-0S}7hS;%yB z4r^YJkx#-<34^-BdZ7E* z00X^jK3o^LTpuiDEgx`ud%N9XSVhCasSitu!*o2!7hwq0B2?&X$=CjLv3K>ub;i3^ z>!%?|HgKZF?`@^aHccYV4rHjynwB>FSc;(s=c-`j60Mmp*=ky(OwWHK@o9)&8=&z; zU?uNoCc$KYSHJCgSkO6!TZm1Kt5No0)4lTIuMq^lu#t{I3oxp)dKvGrsC zehe5+>S8{BpNpY@ff8k7bH)9 zwMC&0O<*lT!U|(rW@b91(xHakqRlV}oRxLx3f>lI!GMva5hcBlaYvasSrpo`teQHl z*c=(a-x|@mCGD7cuigw=j@}B^$3rDD=T7Ap4TYJYV!PTLREi|~#AyY}6nelrJ9bXAKIYG9DJ@Y-L zr7Y*P`^VO2(vH$(1F-NfZqnH@J3#O!I!h{cCH7S58I979u)IaS1%jK{U$7{I_4)$* zt`oXK2e?|)==%bPOc~1w@Ee5e?A__e(R?K`+1;>eCIqbevz~h85v1T2aQ0*CwWT^jhw<5^FY) z-efwR0>87pngl}U-*d=#06mCqOuh;$Aadj{Ho!E&bIid}uy1l-z}oYPbS7*rAnsh~ z@(@LisIYD>**9yM-5ayNr&8i^pV=P2tQf7kh(Gh+e}V!S4}3orc-(rvz8b@GkUBbP zJLbVGg2yhJZ&^Sz5PuyBTqN)KK?3TEFT`L2SB8P74Ro+v?G0X&sx#DAiwAJZf zFA^xrd9})HX=g`eGSRt_?aNh`{_CB|DTWP1LVg-msk)7!bf7!x@p$fhL}X=1|r|P705AT^7(?m6$1qBE0qkMXAe;lAs? zuHtL1f&yZQ;A;VVDSCew+yr>sWk>N#;&vUL!{9z|uv*O`k>{OG2(nJlB)PE9isZNxhTV?UW|+Mk;%0$E-RWSxn*zO;+aFX_s_5m=OY z>U&yFS zXY^s<$+50BRoiAe*1@C(DGe&+|j<6)$+A*U{+sE=XWTI zGECKvA_yud~N6Y47mB}W~sx|?{mJNo1JP9Q@5DT-u8hAIXiG>u$!I(Dw9|E)MnDg7@cSWBM zFw>N|1v>g=nZ@8w^>dWn%0>2>IV>?OejuJTs{(9zm*2R*GY9h#kEXGD-T%QvmJtC8-0EyOO5@w;&9Sp&GCs$`}t8(5q*T)3OZX z`RHjr+*4R_mCFPTxQFN~QKnW0*^BDvYBLsjF~nr~jjz_ygG6aP>ao=^AJCV5={#{s zEY`^fmQEV;VaxIs8n^5?vKZaW#a3-_>CDow^iK4Dm8?7PqZEVQnIYB0=g;N{4aHp( zbQq$G-6E>`oSlkT9D~TkW?DHcS<0o*rvZt!30dn88J=U*m77>Hm+t zOB3Sz@!d|D@6Ps0W#islFY)BzYMs{@YD~9V{slZ=R)lznqp@l;oz|TtQZBdLTOc;S z?kW$xg={wGv=98rcBO`0r|)^f!KXfTo%aY#is4x$tkitge+TM&y1awV^Q-N4k=?GaeJ%+3y72GugOlo&u)VXB zw|iG7=VwiK93J(Py?iFG!ci23&r#+N95d?)(9-)>G~|1I*+zePy$gx(O!(a(o&Jc0 z!3@&?LVC+Xh10zJh)1ud=a<9F{vli4=Wh9F=U40-_qSlRlTD92UsgV=7r-)8TShw; ze1K~6z;$xKoe5nd!8@c_+%ncB@L6mJ8yUTY3KA90W)kgCzk_8ip=T^~7p#=stqfM1 zyRENEW=uw|BYFD9EnTw(b}whJzObFwpTNakogbdR((g{78z1G4!*<=xS))Fb1#6xuD6tPKhFU+$@a#=O0HYTx z(DxUNk5n7`7%1xP+Rj%@<1!6${l;#M=}?%%VvXUVRYTF_~v1lAa3!(`2pg!RPodnlOkY!GC5 z`h5cV(s!0vYb#qEniuu9-4Q8wTTjJavmV;8`G&94`HpmXbJK8*F3XOPX?R2)<3p0D zvSt9iW6LXc6wKa5cB#R#SS3EC0+${J_PIQ zN4}7Sc;=8vFhi)`unl$*DuuUyna?3UeTnfCeS%I}y7+!A4G+XE!QV7`w5M8WtNsBP z^t7z_#h&p6AB>Xs%D&0Ii-=LYhj)^R#pVq;$TssDtL&vD^ri}l_we+f|6}jnyV^LC z#^JxU=kOiI-t#zs1p;hmv%%O$24V9=Abye@Z`Q|0XOKoPYe}QkNXBg9_p`rs>)T9^ zE`XivvrA%-X8KZHU0q#WT^B{XOz`2LI~#C}J?Mz*sIjR9@FKew4fyz6H)s{x&%X4n zX(lFwNiMt?y*zmrA&w^*xs-tAg)KQ4-RFjm5=00_l|ZvYkiX%>Y>c|h6zPMU3{`tC zsmi9I#9pI*zA^K)H{BH56O{8Kc1>*Tbe$w{0v0Pw7@KVmMNq z1CFIsa#kS>r5nYAbr;2((mD%Zc(FvbniR84?z*$B6!6Cq+c*PuQjV1Z1k?RUdxEHn z(KTj-Mnb_qXK0XlO~(bg_`IYIhRH!V3R!y-mYlnL@5Xol0#UQo=o~d0=XikG#kDZE zWV3qGs&P^7LtpG?hx?2jA+ope_{X8%=Wd6FfTd*@?+5wP`*LEAr-(e>8=$K|&B=nc zoE7jm&w&-teZ23=EVL~z>=jQVG~_-mRVD$Daj1ZHY^hY55sJLbBhZI7Fb$&g&v0gPvAme;XWyP${noceVUs{}u$02lV$ioVOIo%F zhx=8wNqhBW-swfH=F4$DnbS#OAJWd;1E2};C-UPmGn}d9iPVP^N>K|NgP!$G9mMF% zD?lQmSF6^k7}-OZS`t!Fs?j%9PtI;Od6gVTr;;{Gu%2Ph2zlm_ib@wyG~_kwjEBsu z4ka{0(|RYTNE<=RmC^8#WJq{I^*=Ee3PQJS!?>o*qqy8DjbvjGYX$mKwfBzraHv?0=)YCl6dd0htZq(=^jWv9Ke z7i$?4sbkS<*hSOrk;UBrt!CXnics3a)DIDY`AxS$d z9#txI$3RgVMwh9$bz`+@n8KMTltY*J^tP!V1-91o&t#LcjGA8DxjaA-)cSe+54 z;_;V0c<_KrE}$4>{*&Tu^|rXb7ra|UqS&Bb0*V+FJKtA@awYoCYt8qv#gy={FGNXN z7c+KEjYO`is9Z(hJM_hY^{7gj>y>?jnETM-SPtEO(O9fh-c%2NQvcQ@jJvhOGh{;W zw#iEJfG^QrHJY!3M~|@C0>YAWJydviPQ^RbR_o;Sq+W%ycLt4i6KCg#fC~zl`UWO7 zD}x$Dx*Ul%GsXm-OP_xK1Kp?lUOx|>{^bXyR3J4D8l&;1FQ*W_aRPbpXPZv!#;B`( zyOu>+>I}6yt(dczLofQSKTj@rGAMgtod2|#Ui8_|3PrAuVDyh~7jql-0`4GENCDl@ z+ojkBm0ZZL5lm|~GpKOb#=MC(1$>-?3wl|Hg_*CyJH8Dq$c)PY$Biaj7e0TSOk}=& z30ww-h3;otXsbD&-^A2H<^H1R+DC~;l14<)%_lwzRZ(>%t94Qo^eP_l)o@uZ0fMB@ zIxIG@F#HF390p-Qb)#uhJ=Bw)%SeK2Ip^Gh%jZq?tW$m4ZeUsML9ScgdO=`uknuIk zkGxv@naysn0WxGTZLYh$ZDd=+bSUquwIkEOS*=d~32xKMZ#0~!C^QuAgf8Kf{+zmc zX{ffVW5Zp+a%+un8G8Etyxu$XEw7S2!3d`O^iXwk;r9POPVpNFgHBn(?Fy??(5e1OLc z-CkJSyt|}E=%E~s2*p`Jh|0q*t=p&uyz}!nCcBjjze)ksl`_%6D$vyS^WNyF8X0cL{2!jSsTgyWLoO=Nj z|I?F*SSEDklZ}lcsJ=K$idVdbA#=F7-9D-Xq_W-e(!0!YqtR})Yv;sWwcwb^_5!@! z&F)gn-c@@JZ_jtj#8}==J;neF*4o^@G z@r+)Y4whM47az}l? zs{`p$_g0)ZmSHbz)j{2V;mMs*NO~(rlY`I0b3ayK735NZZh+a>!D@7R7%U%!0Jz*)`Z1S$5 zMx}zq5G7?k4z9FYD!p;w9I}GUk&CHf8=be;H_ZMil!twj0Uufjs=$OZb+{HFu)v)dQ^)=hP;-x_{KfOtnxE*wdT-Z z$P{X4ZIH0e-kx^O8fP`bASjd3Fq(>=3j8n~mw?vG!DL#dM68_plnJ}2(@$}9ZRHUL ztSI`YG_stWI9(4^8da+UivVTaQA*AUiEO~GK1GA13uBS>CMljVk@Pw@Gl$>&T;l)$gN%7=%~y# z*h|oZQN7d+7Jy9+|1Y%rcaJ*_M&bg6X-;vU!N}pkRiwPk zO3cqmS=0o)u8FAvysQ6^}@zL*yn^+U#za# zDn+;N06&QQ&a%#=elRvQTv7F4n?&EHS!Lkow#ppnB3)Nx!w!-gz;ncyvr@qnMX`wWt_4gl2zm@ujvBW0vyMMsqj9Kd;Nn{NZJMm4nr(ujgeT}?=4IO2*}hPw4E;S+}Hz`}grtOWZ!AIliO*-C&7s+h8>70CkU^dLg`bI z$Ap}93qV#5HznJ7nOR6EZsmn8>zU=E>+qWordf++t?N>j&&2Z`nMFMTQX=o_M#X4L zw+AN52%CeNfw`R8?%#2K!202Wa*wU2Bi9#B?_)$u5`3WZw^xn7!Lu1AM+$la3Tc>* z!*2BBk5_!$-nSwJ$fIC*Lq~XIv3XXC;cL-Ei##dA@i@c-=HMn!&pDYKMY^9#{tu3C z6NzRP^>!~`zFZ?yH#BxS)WkxxuTC=(pjt)lP@yC`wVy#yZ|w(We^{z(s&^6zwZg9-(~Tfkf+$*u>ht4JJ`#cW38+)QtS9uwk9(Z8Rz* zX;NOTKUj6j0&S-p{PnNeS7zysZ9}y}tK-twK%VL2TcWU_*RP96Ww>1WdU!-@+i#A> zY^Prdi;j6>X$2exx`G{n@u4zo6s>6@4#2_x^vd+e3OVMyLwA>p8x^6Eo|g+avb-)3 zDBWB2xznpnDZkz1db|8eQ)`=meuc&1G1&RKxbt-QwHAfCRV;l4ywN@2H>9|1cV7u- z`pUAnzFp70RVX2rvugQ$IIs@KgSe~n>)X`@6plGS1Lg-L{ivo~iN@p4h+cb-x;}N} zBL}6~OA_c7H6_p)b2$>XB9iZ|cdXwr@6;b^-Uh1_I5rkP?RGgN1?UVz`JkkFWWBi|xQyOZg9fd$NqgPli@3f?_01cMMy zpn4rxbAwfX$z?aROPf%nCBA+6$87YmjM0K<+c;pmRti>95<3xj!TV4PBi-$Y(WWMc|4gv8gh06r1|UgCgF8ptHe~e ztqY8&sPn-0L%>~+lc!J!y=zo8vB?ps$KkA3c0)39YzWxfG0(TwP9cw=eiX7{kprSJ zs;fN)`?i9nTo-@fzemjmbuh;<9+p4&!3s2!jf=3jdqYt3O=In`ER;DuEqt)J+6q4^KD{4w3aRyW+yk7F_0i!VL?e|pW!#)i=ov6S zQZe_UbjlAfd^>&+QpM!Nu&3VuA4L18po@*1!Ur_sI1Rli4ZUHyvVg2h7%kniimRo1 zaKDG2)pr{@iNvKwqaKWs$uJzyBNe!fw?T3@-q&9-+OGMQqA`{E8g{3%aA0kcR2fKz z+HK7)rjrnD0<8gPK!|c_pI?_+687>}jF*BMM%s_?1^{MbEh~7e(X|;2H}(|$5bJV8J!+mBz_5CBKQkL|GX&@1WSIU~0wRhhbUTmpSt_kJ zfH+CR0OSl@5q>Gw0JM)LM#4s9_R8yZ3Eqc@q0qN@`4puXf(1pD>#G>LMX<>_RboA| znq&yGlxy!T4f}TODe-4n_z*2r9+>ucCXx$0HQ?o%n+M+f=J*>edPMY__IJ6&NSr$6Dw9pKmRN&h>3ob+ivk}l*8r&qaAo|>mBu=@tk(e=UEG;2gWb6?R z2_jKva8K=IV2O$P5lV_q;X;AZDMc745-X*oHtyXN!q9PnR}e3YIp6(Ak{UMK@<_=x znjKk%+?d#v$_ZX>e+PV(a?El$c7l`VJvjZY312l0sqT0q((>%ux0Pkr=1Q}gdmD%9 z{AT9ve71%77o&mDyxyWa5(V!`5~TNT>$=@jz3E+rgTBAvT_p;dhNbpOQsiWqO?1S z$GAv1fgi6Oaofho%^`)h<{1i?)Q%t*xs#}I~KPSpq(0ih2ikB>rYO22`;-1R_#U(2_ zJ1JCRzek^bcYlrZ@^88TDcjo;MH|=(SWqBcGfFyx0Y~$rA1H!ZJC5+>MFMzQN0r~j z?BZgea?(?j^%?3~f!zWgHr(oasyY=$v_nZnKUUx&2i<>77TD6!@xY!ST+UiY58^Y3Ha`J<1lk&{OIOsZ2}4qr!VF zsj{x3u(t)2H{!@Cm1%g1$Wf70g1h_TKitGVI@HHQqt%n<-9YeJK!pH5v6nNuEaTf@ z?{kPZ9YF8c%xO5C#H25CZ&%bC_u7CVc5ekNkjoNZZfGVUCncFq%cekhOE z-J050lcgh7_Yr(KY@D^xy`j^ppPbf$-^_!0_2(*H1tHz=0saPs?R0iAj3#K}9$Rk8 z!A01^2=Tz*w&&1a>k5v6YI#YVgIJ08)u&!IcYRKMI+qLEf8m+DuuR6*WR`~Xb zeOc{~(1ZDuD+CQMwTBC7XWreBZ!T%CMe7&jLKdGA%pelX-gnD^?kzRUuQ@^$&j~d7b269> zqxT*tIbxCVlm1oQ{-tm3G#q@4+2g)|$=V^sp6u-G2WW5dDVp3+YNlbjmOt1o*OJ}T z6F6J~)%S3#*J8<^dr=?Fqw0;uPp};vSKrp#oz{7+c2wHg-hI~3lxSD$KT&8~Q-XxL zG@n0|oT2JT^06Jls-6~#2k30}u__EvC8~i(fH6KiZ)A;UyyhmBiAb)X=Vq5KN!dBf zZ+qjE#w~{nTW7vp{%PmLqf>yUN}I(BMKxA8l_ZyVOrN9AaY|V|dNGjwgffguhEQs` zR6=m16}+7kuU-89G6-JL*=)+h4zzdKVV_sZ!!`-g3!N@I=`FvRrqQ4;Z9}mhrobEW zu>e&g{SY8fbzyY`DSV(+LUqo7^ox1)GMZsH#s6FBokHxc|b$EYQGLt;QKSjRN;ZO5!ZQF)1|_%I@g z)-hFEdNg+MWZf8`Lw)8(TxS8NuoTFcOhlt-c%x11;6yL^esKO$#V%Pt08cKG3(>X` z*-#1$E`@(_lMOlZElhDhO>@J=xI_m_Ao!G$Bp%kQtyZVmIQ*&BZZ{i^^IFqbHByY4 z8yZd!Qk)ZVcLuQ<=^oZ&49u5u21<>R%Q_A`d~FkNF*yfc$u-DSy)NHYrWMieSWe3) zmm}P1ScOAMKb1Ag)<@HcTnCasgyWH&mJ`ZCH>2(qnI+(wjVI|#)y;~l=|EOf;c;Q3 zQh|4!sd|3c($o!_;XNrc8XlsfS?9y<#Q7 zBMYyG$@peH->P1*8JkYm;mM+Vg^#Q?sojgehJ!(14oiZbR(rMW=Y@Dwud-pGKe+0x zbKZcDEqg<8upMCl0bG-lD4h~juCkqMC*En%cru-OWgGnCtk7lG4R5gOn5jZK>Fc1( zM$F*B7EKlY40A_O;Xh$5W|!-#MA;UosI(e}=D;e6H_IiGU6@!ah(^Sd!fqFKmZ`)W zrMpoOoymd$}GzP+~})}{2cp+O%Xbn;Vxy`kpL7TksvfM znDqS<-tbjWu6Ps<;JILp0ca;x5DypP-bje$Ks7J3&Dd`yczm%CsY;at)vuIy@UGr@ z5HFz@RI~#?C?-{umY0nOB!qq^<&+KImWHDf~Y)_f}!qzo}7 zaA-Qc56~2yr%R;+{|Q@do>~R)Azz;paY75+R0yzHjMn1sr|qs9=zesnP+IIoKUu$T0hdgVF_M zND|8!W=$Y9#GDvbb6iaCyY7sUTaYQVhzctaEL^i5jV`BGt$)s7-|x9CT)A~&o$hY$ z^zBs&(8K8flQ?lGhiF9p&;&JW=YZ3}Hyn{~0A-PEL%B^SCOb-4-YYynTbs6?Y1mr# z9IS@HMSLk8eTpPL21*1x0~RZq$A+MxQ@o<4h^{;{w$v!MidPNo5-_jp?nP}S z*nPG`h}qZ6QFy7LJ$g{MPwBUheQy^4w2{HDUdMF6%r9ECUV|G{*DxV+I4os#6OPAl z>~^|ZGaHp`U(}ggA+jouq=%dEnr;V7;9U4aFnYEncGAG;Wxs^ibdLcuJ&Z;^4PvHE z6);n@h&OnH!k_!sEDq(2s0!?=G(a2x>KHX(8?>+;7%%;|-^|zD4`z)RV=TZN z5rBNgjY`i$CLX8-A^klt6n21Vnvv%KB8G=GimS*R%hTvGyENU;d6QCBWXsk%7 zk1$N?tLouT@2btCR;T&)te}@o6>U+zK;Clv6>5Eu@)N$4h$dI zRGYyG9@WRmfXtj^%@Cf+oX@I_VaDj0Zo|6KDC&jV({pDRdto?HK{M*TYQm6=T@Kdo zqK3AzEg_<`6-O44u$@`e_t*3d0xs-1(_%O{HE(X6O@;izCujv6)d1|~nYHhZ-n5rr z_>0<$wMVsYW6apjRNJk#Y;(m2FuZjcK=Zkqjn%;h;5J{tPghJ3qp8j&uaV*0*Q&Qz zT5s~OtHop@yq-~$E<}f=C$${jr9IdO4KN46t48}xr~S5h)~VNy+q=cDn?}Z}~u)`hxp=kH;vmNMUQ!NPwKm1Ptk+(*%2`yH*T?nh>rUh6TC;g_RQt_&`lf-GdD*@C zPMtHNZ`r$OG4W{=3zrVk!GSb7n;OXXm>wF1q|X+@ntR$g!Js#+2jY-cVoTMjhY z<>D33mt6$(aS4e8ScKj0##dqdOSe=2c8$_vBm@k!(rWzQJ)V*Gd0VSm;VBapHa|| zT4L1-Hj}sG{IljX|Lpj>XM>@EhaKs75RWn3J4;FNi1)0b(k&>8yqA*Ud#cEh=I}L{ z;?d2}r&4b=9NzE~Q$%i6=v`AnBKhCGiN`5gk?!YCOt1G2i6jszxl$`WIib~vB0NV= z7|KI+!n#U;569iA`*=3UJQ&CWr3aK-+F^o7$I%=naL(vXr4*)5qMS&Y<~T0P7-P9A zS~W1fKR;<7z9A~L9wOm-)f2fRS7=q(@N{b}kWBmgtd`tdlf#RTzQX%KSOkmU|rY z^r+c5Ir<&RAnOvqBe?9?t8+Nk)@)b>PrEsO$b_h)0e zwjvOb0x|vqxq6}XKbud+X}}~w4ZywtL_uc(bL_BuB2|J;peDkUHnv7QQQsO*IJ6=+ zB7C=iAn|fLqghvR1HDGj875)-BV*zVI1;3&fd3RtQZXYa>HMIBq>C{rI4op5LKRP! zLn2_P140y=LXpMztlvkI?;k7D$Rrv@l%yHygoBJtb)<|qRoO-PE{b@q1VBTX!T771 zK#u%XcGJP&7*qTW1}N2_Z{@k(!e608Pk$Fa@m&A=px2+o%Ddzge+>P z^f2h_)YN(8=_$IfP|VB<+pngT&ed!fjzAVMpSCXtLz9S2yJDS;;wgh7Om6<1sZ)2jty~nwEYh60D+e~<_Gj7W zPfoQyvUA+5)&5>92fNn5?J7HFB$q`a=?n;cfpuQ+%$IR=bm(?R5u{K_#;MVfQ=Bgv z+*`Oe+ORF*;CNPhT~!hfF_XKs@(c4K)yOBu29%GZnKP}~MXKGrc<0pivmq%b zcJ}E5nMA<{Wxl5LUIpjR_fWLJu&8RCCOxlh(xgT`pt80d)n2`Q zO%I(+1Fi^0P*Z?|;D4TO@Ad89lv1E*h>XzU_sV3&|CZ+mVg57OE>|ixymTI3c`~e{ zbus?4g?x9MGz;~*GY#%GyGa6>t8^B^3VRgA17R0Tvw4xCVHC84ZivwNBlo4q^WM3O znuht@g=^R@FTV$i`99uyHMD-@-M;}W0DL2S<@sDB4T|LSGIUeR>)jw zNPjEq2DQlN8Ip&kmFyAD->kj}@%(P9#sSr{YVa2u3H4%35qUA2M#eiN)vOrPK#Cbs zin>Os!UyOm>|Ti*Ns7E%njyt2<-fxl%^3x^L1XH*)wC&Zs(-IGk2};<@8{aQO8wflT zy*+}P@H+LtEfk^QSU^->a#}z*2+t^Cv;(HQ;TUs(GR6l3x#rD)rD!G(SME)Y&Xy*q zH8H1*(99=zVpOfG%BrzbCNb=wBY(Vx{AAl$g%JxttzS(RY<6x->{)BY&|cTw8D5ODo;s; zspOO_{GV+i2OFdkuawNcb%Uq6bDF=Hcx zl)NkWhD2#4N7HzKco?nS^$HGwbnk-c%9!qm@ltqyE>?YU8LDT84F_Aw+0ipURMePrVvNn@%vjFbfd|q81|<> zCUBE*6wij=0Jgjt#629_4TbVCMpLNUn`q<)ReT`Cr(>(AH8rR*{Z*6)oJ6q*nKsus zp1-&ajxZQv6igzNIX-FcCpFi>I#Tt9C_U6r2UR8RJol_>^-hZ!ruac|ar>weWO{kw zVGv99k|{2|SOXz}!#fN%kg}Q=*`%PTcK}qy3;yEPouYZbSu*lMF8XS#aV16-74`zp zmAud|(}P>s44_g;$AegI*;TkY@ww}MBvqBH<`tLL-L)WER;OZg)W8+R@RGTMS{Q3e zI`*HQm3>7xm;gR*V3e2?8N&o%_Qi5=F^JglhEvrS9l_WAFCGW$hT16-e1Bs@J{Td{ z)%6#3k!{G-_aCztsV;!)DBe+sL}`NMno+ga3Ra*yw|fg#BNcj5$S9q@saR$y z%_pfsR!N1vFI<>Tw_MB;Z@!)`G7oPaaRrwK`~NOl$|9biHIp=q&7k_K(QMa_f@-^6 zJ3Vj1-=KPOdUEzUc>VS)cz4o%6SUqm-qsPX@7~nTg2q|!>g1;y8hPSDsde(I{!7rT zpfcw$@y1TvtcxurA<8SJviVfid3q|30vDX z9~_V)>(3x7wws;Tb1>|!a@=`sC)8H<5!0lG!0!7V@*MChHgr{Qj$$^a<#z}GsbV%U zyJRv6>^Qt`%k=&{Nj*=i?5&=CnukG^K1!xS*2S3(Ol$aDH^yKW*nUv^TiWbHzB(2k z^30yhKdiZj%7vg%PmNGBTu*ywsseg=M8+Bz1-g)cfRZ5yn0jti8!W6_<*5cu0vAfx zr6=iv=STX7875oI9qGxMcIX9upHGtB4B(ayOf}sVE@P|Oi=FMi_Ho_V51-?%g{#mm zxWzjnHNxxV_9ix}UB5kw8LCC@{-S!E&hpe{`L`i+458%sR9PL6iLTQOJW&l4n%MiGCvT1-joK(!g{JF!SDcG+4XMrW;~(P^>w)(Yt5RvgdQ2ud z;~qt@mXiyqDJ*5coi1vm(K&ZCcU6hnn)};a(I_zPG)h6&JrC1SOWW5Gcer)?vMS+Z zPweDMf=*jOZ-O^4HVN5h^IKoBDxP{fEe#LwPP3`HxZl}yZ$Pp)Nq3ylyWcRbxTaQT zlefM)T6GzG!>iBR%;`Pfe!d;|Kn$$wTN2ORr{~sF!cf5zCkgH_9-ZU)PJa(SyWiu{ zFD9NOytTi@qbAw#>X-Oc-FC8j8p4xFHB*pz#_WRbJy9W3vEw5oly%`Kx=3aqbrxlC zQ@2Rk6a{?|9@ai5lP<`s4<%2OW|vkVZhd*9@Z;EqGLGNuwyKj>lPp0rc*`63wx!4xo+v{vi&L{!y*Vt^KrXvh ze2Kpj?NjeW9!05RIhvzde`|kw1IHJvm_}oc4K*cYDI1Jpfk5J9#h;R?$v@VM#Q_U1 zQic)`l8fW|mJrA^kTi%s!@|P+OH&z*iA2Ix;=Xb^dLHcU1ik2T646Z|W@wB#r4-!| zN#W-h&rp}5bZM$6fsd_vGa5*=8eFR9r=2!zloW#?nbajF!g`?fZ^0%DFurg%yk|ob zucImMm!wcSO?tWNR4HeGWlzE!0R&)r|Kvj^C9Y1apmcGz@M%kXc$20N@0rU!3^Y@Q z|Gw;F=vxzPX=<{;t+$Vqvr$Nq06GW#t?y+<&cwNA-|;%XD62B&yV1q1t{?7Gn|9J?LZRW|Wd5k|jLM zG7}64_Q}EYDtNA90R8G6(iKJR05EcCxD z^uH|h>$1?rJX4^Om z>zoY^hbQggsir#{Bs0l$lWqrXmEiP|(x8xTmyyIaY@2B^j5ayZsXDR2kSM8kay^pp z=u7X_rIM^z$0}_}uCU65EYgg7Q_7bsw+YC}%@{u&N|r$k1=@@OxfJ??QxMUe?-XPU zla{fxN|vgZQe&Q};3Wm^sFBQfHlv81CY3#z4odjY6VlwT`%`X?Q!_LU9m3S2BZA=1 z{bYiXIY$+4IY%Gz*pmr{AowDGbqWsx7MCSY0W8=)EQ;wW5IY;@eL%;5*tSJ2&Yx|w zd!zW0y7N~|u6RDubJpiy3p~qhX9dZ*7CClTDigMep%^pBB2ADG56x1xWajr~`4B$? z9zvEi*TkFH+LM^fRrFnoi;AMoVlqpefgu+(!ei0kceUW=^V}d;1~-;88N@vteydSG zIqJMRZ5-9=IUe8{L^$bQ#Z#Eq*(6fScs|UEeC9idSm`fxE|$|;y;j>@2o+&89fs*u zED5Te<-I&~(vPags_BT*J4cFWv2$E)YHj#QT-iXX(q=8GCur~X_`pHMF#L>$ZJT5( z9t2JY<_@oW*@=)T#*v%qTu&{_3?H_AaFl5{2AWT{-Jmm4tBePK^xe5D_4o+R=0eundSlL*!B!tAH-YlXL!=i0gy&5_5 z5TDvZ#K;&R^nm0PPNyL`2FAnRVNmwQ!y%Ky%gab7X=iz8PP3Z_!QOJnS~wo$zEN-1 zH9gxy@^-DgQLG-tq(iYNiC;JesZU%eiaV5|*$xXD#*DzvmTdVz%4VD9*oMvqoJ;n# z#J-_zCGam-D?;bKE^qTUQ#zNqeGS!gzFqmj|Lb5#xbASg9y|=EDMnhh7Yy#jadGAIq|5|rOZh=9jek+ znn>!3(m;sj>mxo_VoAPlq7z^!S@w|e(Z*~iPlLK-QjFpvx<*rh>*%`)rhA{F%MC?k zV}~_NMjvp9`2e#I;$1ZzD)5AuOg_re#yf1vizQ*7p(=fnMa0oQO#WhkE1Uv67_>QX zLxm%Hny?v0_onLwx!VTqk%CQYbge_vF#IUO{vf;zE+W|MdJYCrUW6{Y&=7l+4)BET zBAe=~6xH1j&$c?qI}$=@Q+{F6ASG}K`}rpNaF3X%$ewdg`aER{k7LexRuHTbG$j4N zb7~^Z38PdpMbc_fBnl*!jDyLH4!}^B!b`9Th$t;C!k&omM3Sn7;GobPqmZw7WC&NN z(v9=oh5!D;B%`!89ijhZgeDpK3$BDg1jyU|ID*ZVAdLqRa6?zdRFLuCe44%w+onk^ z3-FKn#tI5|8KS36U~0Zs!~3w^k0&Xw9vrG!OX40$>mZf5(Xa1$ZqlLi}Uz zdpKm!TehW%v6oY?X7#qD+H)qL_CITw$c|s;B4GKkQKX`~mznic$R^u;~zpdY{;F z9W^m>Euo)zDB#Yr{Li&FCx`W#*3#h(gwtu6?-FpAmwZl2+bBDBH^E#_Bv}qSpBkC0 zA31R-W2faS!V*()qVduKrN814J`~JJ^yuyAi-#1l#a%+kfi~=nB^tp3O`<7ie@0j> z@iFlHtkBZd3oH1+G3I1uuY3H-c(pIth>D<)lZ#fk+bL!Ey?eIi@hyz)AQYTkN##Ig z!H@^vr8W_-FQDR$yOVK&b`hk)Xp+?~er-y>6D;1vuzHKmddZ%zsSA@R$;Nj-js`t+ zD9RoyXue08)3H9=88kXPdcjf6!R*|L_bZQzDyqD;s$L=4gkP5ua?O7+ovarH#E6c` zUbc4JIc_u$Yn|84lk@Z1(Z+AT`Kx#~oL7xk)#F;b{o8L#R%kX3e}eKH_i*Ep_ev67 z3fjPu4h~M+o#Xm1t#>D<5<;LLHFWM$0`iR zuF*O&Qojv?xW}SVD@0*!gQ~1{!XCyG=URt95Q+XQVI(}fJ%gfhaQ3!d*Q{PBZ=OGq z6=9-i^2{x<^aiKb^}S6Ex_0StmcG_E|8*xj=qy-&-7&+)KV~O#OFj>_7B{w)ZA}Wy zaWYyN2bgxHvc9{s2nWhDun=km)Itm>f52h{sHU>x_w6L1cXPl$%9qrRHmc$?CH+9h zphJ}@g|hn=8t?o@;OLYc&6@G8Db^}iDsGM60%8lN+h^WlyI;^ngv92ufPoXv z;Z@ZASl11xQ;w}lf8?|z6jG_2CD)W#hU|JSk_*{P*|mbo7&i+%O7(i^NcJkZ$oFBi zGFDF5PjNC!2RBwZ2H-kOmF3jV_TIC;WCm5%Rnp9Hd^yA9v9oD_u3LTO8mcU_E+R)O zZV`ZO;fc^|Dc3a)#aF`aE0vSJIJU*9YL=9l*CDDQ6IKyZ_jEXd5gX^hx3Xm8k4K+u5&F!V4Tf%>0vJM7#oB+%gMvK}Rri!12#svrA5XNt!jT zW?LhrH9*9}in`q>O~c7e0kHOZ@PoNXs!A5Q#Otw1(K4mU(E}xn#;EsJ!Ykj@=t)p0FLNLe zc}k9StIvR0Aqu6iCUVoQXq|E__gL+V-rD54eGy%Su%IV2F(KRYq)|5+^@6ZJjV7eq z9|It&hjo*ZVib;LIY1}cv{Et$YZlMU5JyxNVuy{9F0NpAwc2rv0_|;Q8u>JQmCoj?QI$-?Q$lt;cju+?ub=j^^!Y~K7W zjhodjxRRxErBYhSSb4sg)e0t74#(eh2yK;Z+;$tNRLCR5*f)RuP2x6tMB!vDLfHH} z%CETbE6Hrto4ggT@_1Q^dE?yMNN#EzZ_h^IhV?F0cF?bRqfxw3@cYE&M9?@&(=kijfUT7 zObfvAsNol=`7^y2AAX7z{c1!mU4(vG5YGIy)-*N#tNit;)#$|+`D@5=j<(DYDV{Wm zK2tQT6l1<=8eAr*H8l0mNKz~x7pU6qN7v?!s%1ShJ6)whQ9v;rEG``Otb-FbW}v`T z6SFcVwJ1kHsL17;9OUosDDEhu?oIbnax&Jd&|0)hCmDkU-vLmsUe{GTKbyG<&T?1# zX9<&vh(^QT#DWNKTxi2;Z(&%yMS=C^gx0(F;CeW*IaAca*m-a`I#3KD%LMgOZ{vVj z{J%tVXY`S^#28&1_Z2ZN6}=NN1NL{FhL;_h;qOw)kb`;x#TG}2a(l?n)%+lI^k6Gr zW}_fD94f(GM!kGgxXfJHoM@$aD?VWSzL4BjA}=E2`5L2TRYoi8jQsk>rFVtZ+0LyH zXc^Ec5EsTw|LWn)zrIh&a`DXlQ}_pVc#%U*#i+}Sey~zmN!2AGDppVgx#1~RsHj3y z+){^>*|1gfSw4!%s`iEph?jyHut9q%KaV?i{>yT@|8+}0sl+8CkboC37C$Ik2_ zR2d*5PqAW`{WtK-?-}@otNnbRfiCdh3i{)@>SLGh+UigmySGETmA`N^^LC$HO3Y;> z5c%PRpFz+;yQ~Gs6yq~;1XBefO^?zt!5?la@TyOCbXPpXs=%H5} z4C4G$%t(IL{6+!k$S+Hdmg*3sZ^!$dhL#<#Y3B$w8JR$juooNz*=eB!ru*LV)O!~H znetg-PinZx*wlNAR}zFed8sv9X*E((Ra{!iO0J8M>$GF2DKD@t3sY{!^K$NzPIs6&a=7r{5d21>>EGjE-;`-`LKvwIJ273P67YDAY8eQv?0W3e-2?H!xW-)V! zf*q;wm3)WWxwZ1zUZDZzmq ziatXgtJ=%r79d-C5u5(YP66kY7rzrf{i^{hyI%gPBsBk|s;d5ZwO@MJ*;euUT=fhh zy|4Uz7F8=8sh6-+RWEJns)clwGml1MS;MV=UDv@N*tEx2D*ua%GRFMPya26sDS#4M zxP~cF;F^*m>=QSXQ&kwU`J%efrm%!%zWc9@o_xQv9%KtqP3P!kv^SoYGzZq(HL|hW zQa=d4`G!AIgl3FReWVA_rvk))s}m0nvM}yzq%YV8_#-)`!HKka+^M54)DfvowHUUv zyjUoxE@~m^e*8s5@x@1q{OJAtD(bUYm5I4S8i(VMvi@3)FW8%|GGR=p(Y(y<347>v zm~~>L7VgIyE`y$OmNv55H=jPPY~v?mKEtQQ>>T`o3`V>q^^qy^TqoVT$%wxf`({3S z@qv63hr_jU2+r#!{rbw~Cf8AAKJw$r_X5$aul810g}(=eJ&K2aHyp2q;`tc<)m|63 z#ji#zZ^UHaw+fK+KwNF7@qmYLk=5NAZLl;W{PCn8gyZob?uHkLb89=rc>Wm2ZAwZw z6`PDt2UF41LK|7aDdeb&E=4l;FrJGU`)a`u2Q}p-8~q0QAhNN|^KE{)kGR})LbWX**3Oy2!rhy4MFq_88v!TJ`+a>3(#g$+8I zvcmZb)*^e=OznI(RwWu$mPD|k_tvWLGAn;y<-fx!2bkYKPXk6fUhqzH7Mn!0g1WG^ z{S1+??cA3AqX=mn;v8Kw4F#g;W{q`EY^q?^@T!Jf!bS;S2dod`j}fQqPG4?tQ>Wq0 zMMU~>q$Dcd6@eJxrqdw-5~5!h|5e1&!!`7h+F?K2bAYQ&U}JP@qxc@wA|-IdqNypU(xiu|J28)ytFGK_O<+jT zwv4-lk?)vSrf98$>D)r$nD#NuES~(WQ&G9hoywY%*)wl_cL)2r%#n~s7DXJi?>lqb zr~*DGqo_hbpV$6mUB2Gdn3cL);5c5{EWQfizcesn#3|Vo>HTyyhjV0Qw1ckbEp9=V z*^w6cir>joJa@&ec1|S?_+7E*Ibtt!YoBXeQGqo6)g7>NKxR!4T<{jHhh&lY?^kua zULNC$&=e9gF4q9%PpI6bU527-iHSPFM7qRzX4z{?NS_`|`E0PY#_L{?kAT5GhH6lZ z9w+X4AYR0isAumpSWq%!qxNhc{!m8jxF{d?`?x^iwE*ZVW+JAM$AR0Zb9w2pR4!ul zSu?5WTGkk3Nl?g41cRgQV06^^9ZA`okx7PvfTo=sRIFah-1}#8P2g4X z601-6u0wBZ-}43zF2JF0kTy;Nj6uvs708UYB@;%a@-DMenNt!**wMn2)s<9ioYj8` zPL6|jwcx06_FX%8Q~kLXRL_FiS?%6^Z?moyV`tRYfC${D&ka5 zOHr5jUN@mY=&;YA_IwzAR6-#lDMm|k;Nj%zdX3VfG(`qha3YROO!F`v#@hM`is0$H zdj(5|>!hNA$d?+XyPbdj9_KF(wY!g^DHH2CD@E89J$_ zD#iq}2f)CNiiZuTxd{0-sTY5WQ%SR~d*75Thi)x8t;1@)#=viG`;itm*Z!1y0XtqBy-`l4 z(a`f6k4#uEV==C)c+AEBiRrZl5gLS35N%k*xcN+?eoac2N>C87p-jFdoP+xaMVKca z_LsQ%46UgOGb?n*dgvH=x-$`~rr?{RaadLD5uz-W4AVel0^5G)eu+R9XRU0go z18QsUX<12Pm?mSo&G8esruiq@p1Pu?lkcP-c(cEPFjGDh*77A8cC^`2>EjG9F^9yaaur$s0IKz zL{VWYiath@90^i~UKa<|yr+uzEZFjxW5zd@s^;M07y#n1n5F%52J84T{saUW2E76D z_BH3gJbtcts8^hI<}=zo2R$E9aI9ZPhk12Z#;UkyMYtA zC%<;xO#_Y*z5XD)Totrt?dZ5(eQlu2GXwE4ih6Ol4ZYy~yYPYiyAEg9j3_gli@_|q z&3Inb-_}+c5cYGQBl1mJBX^9b5+wFR-_4cGqW26RtWtaK80sceZ z{NCg6UeKtXk(3rENbAX96s2ia)wdY%R;~6EMh;gi4k0#+9$R6AA-bs7Klh@3Jc>%K zH`SxYyUx)`t6e=itd&Z;dp~G~pp7JiCA6->UV;YEl(tAbnRIAQddQbLmUClS9&Pgb zl$wC%Mv+@(687R*YVU}{aPkp*1jI18sqGHrt#Saz5e~KW7YwBac>O|Gt@I4O!vA{| zSqtTt2y4*?d?HRY;b43f?wc7vg-}3+Sl!0@c;lin z83c2ONKA*Poma`{Hg*WSpE@qv4e=0pP_(0-R$D)H&g<1*YE8?cgy%64Y;hG$MkYE@u=`XrpQGMZN4m)QkZ98xn^Xp zn*L5+ZpjG62|2!`vk568E+WzkQ#Di#W1FRS<(G&DdIOn*oLjKkpXFAL{#}YNs>%?|J*kZaVb^x zS;u^n^GZq1Ce{no#gt0(3{R}Wbih%KAOh_1BS7d${^DRKYx&1nkhV|KpTj{6TfF~0 zoHr=l7|A}AOsPRvwi|TO1%!Ns?1Ho7@f&!E%4ox}=pC`GN+pKP02Ln>kxKKXPX5E2 z0PhSaQ^!T}nb;0$7vVV$LUt6Kf?@A-h+~4y@FE!i^O#Oz@@p;Gc?MtUSL>c(xf&2F z`;+@Zp-<)CdSp5*Tk~p%!&BlDSLj|!YAx3VUsZ5upI+19Y$G!okOogBx;~ju%CKx; z8qJf}Cue1g0u8gX?M1EKJ_oa@YsuNPq>f_XI-_pXf`bl-_v`F<+XvZe8?{x*-{a&<$!|%_hO<@KYc*<~y(pRC{KFmZNTl)7QTZ0xkUzrD@DS5Jk zYTy2>cNvlMaBvYz?52cvPm)3OWWWyQ?uw>8*6P^e``!=sX^&r>YGGvK>rPbjmJ_9? zNX^)PCkijn?B$s4DASW+SPETvb5^JO@1L&Jz2-U2!^O4?^FxB$;?LI|k8k_9pN@CG zU#4Rb%at~-9+GfS>-Qs6QJFP z=qR2{=e2~w>vAo%;LqHa&KmEQY-yBS&ui&*v-)$bz66$DPe805xJ_BYhOW$cca81W zRdoEh)xC;(Ghl?zOR28FmU_#I`&=;dAI&L&zBd?tsUD1<0S9L7ZeGFvXnnvRS zJ<%HRUE;m=YZ69a`tk)lDkXmrb!N5RM*brmKnO?1G3IaTOzCS&zUBh*+*R2mUBSZ? z#dJ;?6=-C(8|`Wx3!+>E^NP!v?sY}l;!rQSKO%C zuFC%Jt^#|(ImLqPx!5eIN~Mbid9?rH6mH=hj?ryE>nTKoo{Bj!cOfs8ADv-?0J!Dd z;AN3|@{Jc00q>CKfrZdFwd&8mbegz-E+|tMl|#u-gaASF?HPCZC7@k)LGgFh`cG1x zeitwF4fVMSa;QQUJB5Qr9)DVc9r7Cw zi~3xNC1QnThxMjWuQ%SwxW47E&QH#3tBeZEFFPnpiv5Pf2VJg6eNbb?#c7G%g`+>L zHqUGAAM-DctFM|Thn^RQ)w7?gEzgVQ+gGn@P0tIEds=O2>sz6?`S$fH_=Vytt?hS> z#*t^Fyg>BJZ#7u#aFx+w`J&;he)!NGD3E&*F1 zXx8@NHo63Sh2Uu$f`v9N=n1^g$mM=)Tvj!4Su^T4G$UfCG#s6!t@7Bmn6k8(km${$ z_j?~+U?eH~mQ=3-cDF=d7_wX-n34&O$JRR%_2VusTAq}~Kc0=I9Gyubwpx}?fQr9k zUltfU9}ad@B6#cZuK)4ghXa-U9v4=|^2a5S43jafutwBl^FvxNkIj#`-tEgxg0dtY z9)1cZn77~JANvK?!^f&Xv0Y6vM+s{g7<;*u*wL&Ns_(>Aa2S4!*b_7i`fQzoMiXb} zhp8ey{Jh=mU%q5l|NadYReMb;m<33}(alQ@)7p{T_@wn_ z#TxaKT61r;I)?5=KuchYE>v{=xS9kU+9W8o~>M?cG_sK2p8M( zu387PJFHj-(~=l5W}yj&eXnlcHsfMBO0Gvo@q{;xVq2}%jJ1laweS^+H`p;+0R*mt zCq5=K4r=4>QoUq(Woc(lpH1B-iRhXKp*0o^%h^f9<`JvW-hnRh@K_6M_hK@kVEs2X zXIZHgJB^D)l+u*B%(97h>j&Bbt>PId_&Q5$G59jM`}b z4@q|AN+b(h(>p$-V5D`FNUzb3A-I^#(komN=-|z6&}ex~_HmfAXu|HNqZ>GGQT_!z z3=+`kO7lE{0UpZZb-u^k3A9KWJfQjEN@%Wo*no}ltleT=Pw<<0(5j!D*6auM>d#g3 zOeq$9e0Zb@u^`|{g%jVNI!$6k3393&hBwCP`$9!Vn*y$|G$rV#@DtoL0zi$+`k;oD zuxi`C*oB_#*@BvyMu{JSm=?>{c{8~X>q3Jz-u+1Dd*t74H48;^fOKZA;4uI|JnGp- z?rU@Izs>3?i*AO015>yat?V0}LXjuPGPL9>Fx1MFwYftRiy63j$#5MbsXdWX3%=c* z`&KwBJ_!tOUE|Ox7*GM`m;tFrqs!@)wxxCRFX%A_FM=O-|B9L5F{IoTS`SO5ln|jnche?aO=pVYZE0gE* zzOW~BjrLgl`JVP5X1>seg{Y^zJ?+?~#ZzO4-{5caj(Bo8kUw0+ytQWlla1R`!Z0`l z#~lP^jNh@h{k^wnbaB|o5^2N@}nU+s&8n>}du z;uKie2$q5qCg`~`X=RG%{I(Qj4`ZrFpT}%G23yy7jGo_o4H4<|k_46XHdr$MWARx* zXFo0Zj|(!md1r)GPYH$R1boH6zrLyXEu`z)%GV;#-j|5&F-6|nTf!7s3%Y7e*&4e}fz$5fb|)M)0oFywz%kM2+J>Wg;%tcbAZ?gYI7S6_Ji)VG zj6QlC;-?$VQus26r&F|T9M7gx&fmvZK-=4>6pucKq}fORbnf~c+;s5GX}wB_C>@%o;dTt zRm>7rcao$a0|C9DGdGT&PP;jwL`PZE0*>zh3Ikl|R)-5Q>lS$Em)9nu#LvZoJZ5`ZDKbgib{-Eg}N^Bp6iGxD%4ifbOjj( zXN{B7^Xg$c$j2d(jr%jFbu!W|tmFslUMuU?+vagcx45AxQ7<5EGV1HW-T^G$ze`~} zc6B6AM$b{ARYBcoGQ}|0FxVc(pcIM}ri-fzqoRjuU!)ttS@&vt8`jh6xLH?Ix%Fa- zzThF8Y6&OiIiDUlDfD7IZI~5n7>n)XS>h4H8CTtuX~PSBhhNNtoeO=%jeq38BziNu z+_$e6aVvzgB9-h^2h&%unzg@@Xhq~3ErU<4>r$nneM@QL?c=Jx!U!jqyCx|!eA`oN zn}|P=%U@(99AAyeA0v-PgE8<>By-8rJ5FHRi$M5FQFTwMNZ43~3E?nIi#6PfLFFFPywhgNalPObX1{Jv<#S3O?mC?BSUAjas z<{okk0J3$|ao8gfT=jzsNQryY2eBMfUtruxS`%o~vX)`v#SJ^0y?~@_=H4A7DeAfb z{p>i8YB!RF_=Tjno^mn~4pZ_Flg~Yb2UP38?-TC(T|HV*7bVkbFWAzrt4shd%7l?-~Q)PpB_&L@~^L*P&Zu~r;$V2qa9NcwnF zkyc^h!njbyPhn7w&pYQN!I|w&#ZFzPwYM=J@tbf2+_L8H$B zVO#fT_hx?ioRrPE8lr(V_@&DoR$K!n_nzV&L&jeTh%Zn?>$Dk81QVcq`oj+vm*Fxm zu(l1Qs>+XZaPsTt(2cLs?vAOmwp@fr__)m`H?n}2Tu)mCbBG~vF&aAqvbH!sM3$0s zp(u45Iy9;&Q1%^RA`^g;hKP(mbEC1IErYnFa+n|y)(W8(1(X_XG!$l^E+T<1N=Ms4 z@XuL1#WPxt8GpjQLOTA~UC~j9`h&j`?-OrgelY0bGn2&q3`f>*1Q(Tx+*%Cvk)1*j z;riVx69+%4i=uIVy*=_!nSrUb#0sViWqS1@bx!Yzop zRV!kzQVtOC`gM^(uSz%d`ntQS^i}m0;y=GDs#&YTxr!lX*%c_Cx03o_=Wa6%Zo_v&hpZnYrW|Wv-KL^{Gxa z;!bOBT_deFqsus*atIO(2mJ7||G6Rt{*}I>&WHMP|Lc;MDU*m{oVEY_pQXU9|B~Rc zBuLD&=%D^8>D>q)jWYKoUIRF#_R)8Kinq#({^tg%qzbRM*GMDwh7uV;ziWTWpS!(M zrRO3`Eilq4qE7{dy}t-C;kmS(J@8NwydQdTu%iW+d%rQ&y)1EKYKgsfz9+raEh){I zES>yRSZ|G1!X7IgnwwdSsu>{(dyCH1&a~V=$~74OAt@0P7EXeyV<7f;K$@|W0MA6|-T=Zc2PW7+pCmYl(0vHrN%CDM zw4tvEw82WB%#ZAA|t1LEP= z7!DN&bP@p!oX2!~%QyPs0YSzh@cQ}+2fU8epBu8LyEn;3PAdi5d+`k4i$8__=4l3;{@iwo!Fi_JX-n>S zPZRn8kErFugaNM z=gT-GZEJ*=0F^i!ns)XsXR08QY_k|s*8qzap&3aZn;fRquO}rMSy_@>{Oz+b7TA)amv7AAug}EwR5D?D*h2W zA53c=kUepk{H@Yp#u-9KTH~)g<8Z#nSxZvv#uyS}8WMXgLHiz;pq=ffY)p%<^FBe& z>%GF)*=rd9{eSW9X(ls|rhb7~PSc&Z+5$K}1>YqXm~Kr;BB1v1T8*hh?I!5EF(**#2v zftJMzix9C3Orsn;HEvyjJmv?_9B(g>nE*BT%RGBVWgPo;HeoDl;c=mN7Cm@{ans-M z=hw}~JO0$Jp4Xa;uC3j<5-@H^jHdeyQvjLf3K7w93>RBD|Nz(-o>r!zY zWb@;{;cdh71KD3UbTK1O?rt0$?ATnv(}20IK&ObE{YpjEe@299sI}gD5mzU}WKvJAk6}~dac3k5^{_ihfKBmPPd!VueX=ga(t%|zq*wsa(|p&! z!*JA!qQeL`o3%foJWWPvT{I>@@o)gb!=S+ZBA@=rw3ee(qQFW;g7;G9jT?m-X~hCmn@jIFISW6QabEMiK3FnT%bQx+SnI!goGwd+n*}h|2fJ=NOda z1I3lYp6j)rYxT|^(Px2!1>KE3I0$NOiPx>5Y}a6G;3*1r*{~2mRTFp>qk}f?+mfK% z9zrGs4VzB(5?p~h+k4OYKhm3hS zxZ}K291Bcp&(UA9#!(*Os++fwl7@Is;i=rtgqw7JRiL>v zEXARO9Ju*z5-IVOOgtAX7v04RAuQ>^&ai~5U3D{ubP?qs53K{O{I$OY-!?W?>lJEy zpY36xSv=NA(-@8d_$M2s0y{?2O*E_=NvH~rU6#P=r%qhw7LE3wtu*N}aXDWXeGh$< zOwT7tZ>FZwp6&pxQgI}LhY<&KvpF$r^wAtNtddO-Qy+YA^S%SP(&dw2@6)aOxJMOv#h>1BNA#nd&e5t5Fu|Y zFtH+JQIq?stTugmbP)W1&Ern<^{Y<%Y^yJ!8On>ohIChzp>F2$Qrf! z$?G@m-^lIbsCM3dV=tMN_86Q+bSx?4^#?YucZ9L5Xf}+}6wczZZ%GCf5)(2;Tw>Lb zd9_>oN||qYUq0cN5Jl4oUV7hiK4JtDbhwYH!<3PEE4czt&R?ldA z3B9$m+UYNRM4m@fbIHG$teg|J>6BOJoL&ps-JJ{3qF#@iHPJk*Kt~GyxjCP6uxr0< z{Zu>SddRGntj0+IU_hV0!d9+^(etV+*UD#4HDg^s3G-=T{=5ivf5}YJT@C|2{*#gK zpRg}_FHYGV{fc&5?05ksa6#0qS%ML{jc(|Xs@lWF^ z*%P8w{)FX5vdA9HNKWCysU>HkBVqcIM!m!)xkzZ!HQ&LGb1rF$wdfWG<2X{TufwDV zTUD0~LCNjBHyaQ1cXB(^^}X_)C9rwB^@(jL^QmSFg*ck{2kMFN@|6V$TX#fMpH&@6 zKbLpyhv_u3SrO2u8s+8qs#M`i}XRFDknV1TlA@?`qZa##yKFbFF#! zrrLZ>jEndN26|xU+w7zt1dqDbD(Ci<4hvo7sS*X!hiR!N$r!WzaWwrMb^m1_c|X}M z{6_dk7S+89Czlbn(c(KPZeEy9MQ*-eCG?{2QWn^P?o|?Z@$k1+Ad$Klv8+$|93lnx zJ=J%Yt-kB6zPD`kJ#Y0V%T|A40v4R~1LcX2T4)S#H6d@K_)~--8pLb*IvkN3cWB(% zC(-2$6?7L#@5Whsg~TKY)j!~-grqpX^xHEke{%ME$qM$OTxt2^l3;8csihmdo{fU) zV7i4q=_|7Y6YUH!99+&Y`~w9oz$-$Ei~_qlY7j6s1o^C!r#d=|<85uq!O&Ur=|<|n zAh+T4ilzqlyk3H;QJA|~zposEV%qTB3jtdDS?v-Jh+Wj_qluG&Uj{wPa}URYD(JBH zkD0QAnI`IP8Kbt3Biv!qn67%D7TsE7FoABgy}b=I)lD$gJ8ncbA>H(|t_mS!Pd=Zv z$_vV;$hhQXO6WUxDJtJ65*kK8%}pZt7MN&hRLRx-NE2DKLh*Y=#IR(Bw{fPLbjjAn_olZOc0KaRM%YeSK z3Pda(U-GWJ6*yRZP9CkuQPyFX!V=^MXs3wJKU9~3d|$caS|?=PAByAq(aTi~PGo`F z7e)Li?`Ghbod}V$Y_7DG&I%Xo=;~Q36t!z-O#(}IHus=ba@W*byFX-g+u9M-wkL2d z#BBoybvHgOPABtFOJ)^fqMdY@e2gCEfGajf(Q1u5byBi)9ZFIO4uKa^;Gajq+fi42 zX-D0w5lAhUH&kkI6cGN==h6bv)9kGxdV<(0+xjr>VOZy+A1ENyih}jBjTdd1)0!1C zK!pr|bK8cwezmKa6XJsd-w9HpVX3Nxw~WDtI=a$sMCVr!l&RiQ62DfQnRU#&5$s~! zz(gfjT0}7+DS`?Ho6xcE=FNjhL^ugNW*CqTAFc3D!D}WMAqv%eEc%xOOtPogBA_*4 z85*WSFAm7Y0XZIhf3C9k+60~F;f|y5zONK8@Qi+470C+J*@wHnhnDj&EN3$!znHsY zzbw2TAQVPDej_!O+(YhTDDwsYuVI+$)&#QY6UHZE$%z9&aFp<(O%ZFL>6Q}4(~nO1 zd6yvt^O>9UrIwS!(2PQQIkNv1qi|}9XBW-?1crlSoEM&mly~`9$}kWP%m`$DIp`*% zehdSiMx$;#c!fdJV8uUmRyPCKil!2q=^TXhb!8Z3r!eBbM2LLu8$}pvBGJK%kPF># zBs&o4FJ@B;Ygj;@d)N-_(f_&$9!f9-n74;wO|=Sj%@GN67Y`KRhmZmA!KOUUZc zZXJg)bww}k=hPILeO2mOo9ezL*kc2t+IEDrr;b!!ksNMh>nzIbV1OIBmH4l1$Qg_d(lC!3qY9K5mll65hx`jnyQK1;XpHMjEZOu#t)9k|S^p2!v zVDvXo(*Wss!DohhE!$7S= zy52ww3}CgCffD_8@s1&;n~T*KCjaQ=nOkb}x6<=k?Fd8R8(S2D4B;-gr-LRjtbBD8 z5Amk%Ripie?H@3$dc9V~9IVx5yHcUcb8K>uz}e;>v*8$)i(IwPbz&N72OdnaII zKWOviow}~J+ttILf(>u);dBbqgYBa}z@2eU^(morKn!nR#gpDS;4B$!aIOH>-1VSz z!0uw49S4FU% zXs7?ki7i3u024&azS!BIW>w2}AQD$|V|K>iw}39wT5qaHWbO>#UhkcroYfn!0R;Oz z?Bdq)V&|MNB@5z|{Dm2~?V;dytaY58z$L2MAPOhz1u;elGah|#(LDjx0a{w7^zKTf z_deJgUMBv?a=`6ps;+o}VOL%8^1>$&XNHggE7O&UGbK&w*R-wa;PYDE;k6qM0uJIe zpSP|F_w>p(uYjr4Ypu5@7%o{0H)2p5_ZP}HroJoUXpQ*3EAI5I%X&f-Ub4x_Q3_Oo zbuy1vA^h5y&S;au{%i={0ty-wh?MOKOcZ6bd*q17RE~O`Qv5`A)|g84#Xu=3==YqB z{T|N$;^{X}WYMqhO>a>skc@?Nm~tHHn}6R{27et6!jHje)V+dJ5w;CymWzu)G?zB# z|IDS_*VTFzBb=Yq>PI@%cV)BWgyF?BUqXR8>f|)agq_Uo7+4%jIRUHc)%Kg3yd>+( z=@d6g2?4#=qpV_+WWd*3DcR-%Gsat`^g0@2W;&A1;0P)i%$^*96c43(tR=yQnQ8Bl zlNmvvHOD*K&p3%0^=^4FlYVnH`4kn`r(kD0<#w>pnjU5W*Bm0lYmyjfm3BiAY6{;y=6jGAj`f19Vtezvl#1!oGQ&uz z5nvJ<_JthJJn04U%ujc!m^D$>qI{`*CkL(lx>NQFeZPd)<()4=T=#OTa*0Aa9yBAkMAS;4syuE0HWe@jFI)l&xg6Wz1O! zzSS=*<4N4>Fz?i1_vQwc#D1V4*?MU{d@}kJkGkMXqqUYRI%YOShBDzt(P z<3=v8*vK1@<=#cFiO~^jOMNWR4(FW@(Lx0imu?8KQFI;rFUUhdwF?Vzcq7MYnlzTC zo0wHYFKO1{dr+}R2hps)Mt%OHM+o40!67`*DgmED|G|O(8o&?{97xTy7~zqPO>1Xu z79;oP6vYEBI*16FxMe(2CKbra#zp=X#WJ$rc_X9C^Q!WAcNd(ksL1mj*OqR`R^okG z$fBWLhwemQ(hfhNWf6!XX_R7oJ0`T3LGbP>o<=XZtcuvfg5>l%A%nJAsv`Yk#C#F8 z8GGBD{0si4o1HY_9Sn9rY7mXArnvuMt{Du;QSHR!G+ zxd5nVsm}g%s|9i1Y_#E2$9GUjF#r_tb3 zl=60<7auQ$@g$i7+8>7(X)?K>VCvC$0?5WZuEE7k(7g#qd@bZ9_&IJ#MQdRd$0YAc zb(Y}@3!e>%7U5dktIITHjr-}OFh_&wX^H15*U<9I*!7HCef6?*%;#Np)G_TWUcN@& z@cSmMO8466Ux?2`b(fPU`Wj?6m)ri4iS9p*Rup>^N-1Pd7_a$ubaHpE$={Ps{;#l< zH6>WCZX9xZ+YqzoF5~Y@$Ut{rH+HY_yUOeZ;?gTOlk-AC*lxm=3I**7$euh6IMN~C zL9s3%o&=acpJ|CAXr!uxd3G+W8RU)Q~hibrb-hqh(F2g7r=ql3Y@+p z<>&1lE6^@l4A{{&96E?q!lF6yQWo_`&FaY+-drxT&kB`1THk&C94Lh9;-%i#J8_VY zT}&B8VT_#pik?VBdS}u9_v~;VX9p_G&UJHC4?wH0Q3H!%>0b@v(Z{)^J(=;{+MaMt zI%duV85_)Vikt86mUVa2CnFQ!?;;sRC!=261>yY?(~V-XY6=L$S~?8)ay@!!S0)p$ z5DzPqC@zr*J#+}#M0Zq^k(GBSs9i=Qm z7JXh19@)AGQoTGJK!t~84rRgI0nsDv90XgteiW_gU@E;RjVDpBYLvzl0hJ7V21e`o z11$hEBky3!0yhINcFZ%S`*a#-PZEIX$q!~5eh`m3UDAo=%#!}4QM6&l>-NSigos?aaQY8(L$otId8Pur*G@+asZ!BRE$IY z`R~@}zbTg&4Y5{#!=wc+4K!D!fr+06nhR*4Bn2N3W;gBuYt3(rwJ$5ODYSM;Z_TE# zwuejMoT0UiVo#d+l>E%c%(T6}IItnV!`8_87(3BlaB-5?_V&jSup)#8ISK%$Tt(H6 z&3{Q@8cHde!w=i0FBctsn$nehsf5!>H#W+*k!66m1Oz~(+`D%3H-TXC-{-1$EL<9N4)9=-tsyzLF2i((IsUuItZNY4S87; z!;kS+vv{Ym&ncK`95<_S@W_Vdkpf4I^2BTZfeQ$pHRnzp98OHDc>M#Yli-1T$4j)P z@rS1Wmu%7~w*PSa!lz*dtm-Yv zISa^+XveU8y~oF3y{-C#SkhWufADiSh^d&~i@c}PqK#`K!?*GY<8f+z_+Z;sU|A<; zN43A21(KzM}WL>^@Ya$Cidj*!wMbvgz76CDFc zOB{2OfuO5m1R;H}CTusb__57Ij9);%Am25#6NiJ&#Xv+m96PJFfPcl5WlmGnp}(o`r71Lf&~0hmR;7Ym2^JRt0}Jb=8umiKpYwjl zBflXVl&h%w(PDNSrNOivP~+74*24BTOaK#BKbd~W?GSOzfY9Kn$bDkFRB(h=&PZqh zB@t0@$}jkcZX44vDFM)<#A06>8H_uPktOi0&;d>2jh-a>xK=TD2ptw9K?@t(%GYtNfsi z=)Nqg+*E(zKibYy4Sdzkp0HQUf_}aP*0NDc1a_C7F=Wfn$zV2&-rF5pQZz-T*%13B zLkH7vz)rMNGe+)`Cy*i)u`x)yH!o2e2sZ_}5SK|b>cCHwVp=R;g&b02@Bq0C@bPbaxLE9N=mxLWZ6u6&zYPRG0iyq!Z!eVZNoSC z(u3`C%{s9^aP)hAbyZpPQ`EjE&~#4TT~e=RP5`yf(`b}Zj*~f6P`QS!q8#n7?oqEf zk@M&bD(4DwSU^=2_zOAZSy7aV2Lt-b+}WhL_X`uq6|w zYmTZ3wG|)BSz@<|oH7JyQia`?LZ@s8b&RIwsE1TY1MU|uW93MZCt=NyNX6Xib!g-g zcp8BMHa1{~PllZ|7Wj_ee;X=Tf*`*sv8;HQ_a8AA)%QykPeiJCw&Z!9X<+&D{M`L| z_IWkUfTp5Ra&1u(3n21J#4>_Y%VZ104g^Fi4P@pW`Oa-^vAhTk=CuU$+sq$hayb>j zYM8QwwM@@9WT8rOPSWp7$V5vB(ku3<)zBA>bch_id}YZ>Z=rBFiGc|nmPzy~}8i^}5u`qD>Z>)1!< zK6XXLj3Vj?XxO8QJ&OJ*8Y0dP$9FNn{@Fq)8ACJ3T(>h=-Z5CdSB;jJ-+alexr|y) zA2SzrsTMKfcRtY@t(Y0}?!HxPj+*ecdP1!T%3*m9n(q_O&RK4*`p?HaZhx%HstF6Q zv1?)D*0{(V#yn#;qqjE^d$ktsBZ~&gJbig8%(LFd7zC<-3^TASCPS*QkPNrDONIG@ z-RWM1g1Lm~Y%TXoh-!Z3;^VQ44=*JK%b=rhqp^o?_8W;5eSH;9F=&|CSn&N~8Iz&M z4zOKpPht*_*>Ub#MW*IEuhEU~PyiIFvxX8*?VIZbFi6*HzBEhhM0s0xNA-g(&>dtn zZHJfdlF6WVF5#2$6~7Kg+P{|K43oYZ?`uC}%$U1_pv{BwKxD%G4<#}ERX7PYr{See zIf)rK1J@-}DK`>Knllw6Ap6_CQenK7Q=oO*5hB-O6Hm0V0I=4BM^@c3d;Y^ziSxF6 zO$NO_-w?|K{)Tfcu`=ZO1%+gqjLX=U^76EO-c^I*;SB?1trH@j(_EpNW+&K(zt4jw z`1kQ+E6kaRZcDhaU>CRT_wfe}C7}$z>u#9r=vc@8p{iXm37QS2@py2v?lg=goi;Ph zrPOHl2D}>%x>4_R95^PBOPHcXQ&xM`(Y(9P2_xrJ;RTbmNXs`;c>69^p5gEUM||+> z&X=-eB*wdc3Q52j^oXj?6ZBWVQm$*!L@%3xo#E0xITz$HIVdpdR(Il8)xYgf?i+!O z?XtiB{(Hr_n2uqnbqSlGITW19->(Bk9+jaUFm zwarm~)adooT~xvqRHmI}al^abhWGB?@SfeUZ>xf-xsJkdGQtUaciw4LUuDy%IfYx{ z1$xF{EOxfiHEXN@8ca91Okl+)JAkNuK^UpB`z79Gkr>C`M>!fj}*NfH5duB1AV?)OTXtV2U0jc&-|ayTESZ?#G~;Oc2Mx z6%Z6Dhu7FlEwwu%St#xtAL~dA>%qf*zyGHyc$(TF5qCC@OF->OxIz3zU;cF!J8F=S#u-PU9N4c z8H~AO>dnFdjVncq)uK|=8VD2Hnb8xUx9uF$sGGnlU{rt{M4=bZRzTszL5k;?T9Aaw zGw&)0EH#lA;OMcFriu$*!f3F~&KP#tuzMA~w-RH`6Fi;Fc#M#p58M{Q%CTuYA_I>J zn2i|}EoOYPUMi9z9xV$M&qTRYh#`DUpn2Iw-g|4gb=H1+hA|U?Y5F}dozjPmv%|No zmSXUD#}xMlM5e-%zW&5BKyU($C#rSFZXtt!2i~qFo7*Ey=5~D2q!376ZZnQJC>yGo zj;Y5Smr($r9i@Q7tC*KYHWsq)kTM536dIYgwX&}(&6NshHV-53vpE=nun9;{;W+?W z02I+>sSuOa$yk`jvNUYZU$x%WbLh;V8b>&o9^1rX=5KXc&Ci`fp+#M)5qhV{53Ds! z2G~6JDXO`6&gM+nycx5sg1+!YYfe)Z@a_$~<@h)-nu<)0^A;xWSy$Sv#6~BEdIe;& z-_s=Q#j{j>OW7sipX`#~nM#BpcCzauRp97!AIOrA5*BXW#M9Go@)5+FOJ=(y-V9hh zV4e18PpD-cUd7Xz^5vrfz_ZKZqXz)cH-R0Bo?Ci5_)59y`i)9YAWx=ZbkQ8Wf2gOk>A)WS4UUPKZ3P^cS9 z)OAl2jFQLpNQm)4+^2y9Iil;_?v~0Zq=v*+8XFb$-K6HlbXHPY8T`@Bm)twZ(lFBy zaE70K)ip0RBqQxw4|Rw3cjIb*(F4h3&>?a`3}P{ANsxgSEkB}hD7oxM$?7Kvu`tu?*DY&@buLn zh1v$_I8Jt^5?A4{C=#3zfU!a1z{+LKmlZ=++(GA|VEnk;k`Svlr|heVi94yH=4RNc z-HVA(TXtuHA`;K!N+GatOS(p65IMH9B|8V+w;0aB#l9Nn2$oz9?=sNdGym}L;9D$> z9FTJt$X|Gm*!$X?Bn#EQ1LnR0;xq~8Ahrc!OJsw^fT5Wiqr->-Dy%CZ?op1!m9pif zlS*5aH|*fUk4^!r8FOftk+ZyT6JAq9i$I&}h>&-|;vGM8^4Ka?M2@vwN@0^vukOHn z`Yv^bvwF`~!sCh+U`3zUN_nG+Ijy+Lq&(}ho4q&Azq^q06Q2CAx{~b+Ew?|;q+iN! z9$B)>ZXp*+V9$2!J2Y}9CEu*5L!?4`zCn8=3%bkgFV+TQhAulzWz#u&Y*y6PW0=<$ z_hwt2shY1}!3mQ#mP5=5vd)cnC_zXH5<@IZzq(_T;xB81$ZFnc8Zl(X5`muFY@g8U5a!-_S3$dcE;(UPA`1 zxedK;)@o<|c6dxnw)3j~wqRTeHBY6nxy_uvZJyT)8~SVChAP)k0a+X+L=totFC@Vi z1#+O)=U66W!a;liFjjq!2xIjjJi@vRSu{L@ zh~)>z-Fjxl3-=d2k7CwRQfc$k_ovmr!2+rt)modFMPwNF*w_WgKKBxy9Y~xr3FI>% z1A|OKZeW^Bfk0K7eGqqmV05?qqzB>^{tk!HG@4jckF#A4{$Wv-MW8q$F^qyLX7b25 z>cCnsY$TN-ARABb;}6>c;fsUd^yG|h*k~Xaqw!s*UORi;e&Z69R@jgm4K7Gta{RV< zFR(h5&46$me=wq=U^D)ZnNS0$l$hnUI3c0 zMavc&&i?hUfl5T+ZzKPlE0I`Xh}Oax^Dl?C)PO4$4%S0$LCXM^oo<}-{iXPXY&-=& zcY=SD5&+E^19YZAcT50<7RoFdxahY>_xN#!6@4*_#GWQmS?c88bVkDP>J&AV!|agC zjcU4U^B^!D@|-47;ZWfUFM=he5otZwF^S@JcoSSi)9WZ2sUz2fwU*JSr!h_~ZSXkV zR>*!9BSs2^su9}e3PZL z1qp9|zDQP~iL6vq06}K?F?-NlB^behQjY*};u?%T!72%RJuEbg$dxTC|3h2HYNhEt zz&>!0U9ig37K~>TAVK2ChGVHokwI+Ad9&wii)$+#hy|DCa%mFvh!S4I3szDv&T}18?u#Y+HD#CT z)*R+@y<#GTB|Ftcm+I3#`R95?S{^LhuT{9PXT74tC!WJbu&LWc)D0;u8l5OWxWTZt z!6=69i~zfc`Y6Os(Puv$;A2djhiUgf{(A5rK&vz@Lnbh~s= z+%3a@bXfEsip(KMwy1d<#=6MYyW3Cu8_urrWT{;Pe(ThtG^mBSMPY&nT1GtPI6!MZ z&Tr6X({?pmAhW`s6cZB4<^FgQPfH}vz0p8kUaYsRV0(?3d#OW0X^#Ilt zN2ZYb6VBd`q?F*f$nbV(U^asN4$E%`0rzpDj356wgRzp|U2yVUFSts^6uCWtk|&(l zQM=5=J!pgi#PrF05(su{>pWDs+w}IP_hrNW&3+hADq^GoIH(2{DJ*$Q&yuO6r08M@ zF`5)gUs@*VTzcq+BZM5}KTJCOYc*3LjN$ z%c{#$##1Vd93XLwUWCeM-3|c0Tv}HgJ;n z;sC`to`QK9Jb4uuzHr2`i>?xs3^Cnlp_Eg$(UixeT>)>q?7}KDuZ`6V)@c9nVw5O~EU(TFC2?yl3w4A8(mG)q zBr7{*d06y1GkiP=PLhAH(HYhm!{~pGCR41p`3d2kNUfi1&33EPID?w?UkFfxEhwvu zwD7Nj7+%<4t={$I005iA{=PZDJm_9_K;9vQZUe{>-gs{W%yBbk4puR1vfA1H{+To- zI)d57bP{4xRGI^s7D=jVud*|xd^iSiYTYTp>zTI-J}OB(Gj?}&7#`2A&fm&C98Qun zJ)b1KS=Th3&GEWd&{=;r!1UaMn@h6t3(=D9JAA~GhBz?Vh(hPz42kS~5dAUY13zw= z-AUl{J>A2n`=0i8r9D70et3Mh*7lZZE&H^vwI|DswXnS}HaW4%NzF2{W3zay`BS>B zzM^}0Y_H>h%|{MTJE!*QSP!0p6l-Nc2-Y_@U;rELkklo$>ADF!(X=`)0i_HA~!7T5FH>w8{UjSo*hSc{2#_sWv~k83OEUU#_ZN05DSr~ zipoV9k8W?I!kP})j+M;j`gFO-0}NgSIrhY0h_=cteUL9rbR#M$OB)Bw5B?AX3|KSg zwnVx)D5OR$-6@SyG?<3_T2~shA`RjM|NNbK~50hH(M{JaW3#MzX%88tMHgl{w5Y3zccogfun4SKSfhxIAc}7 zg@Gn9KNBGyxI}1`BN>9RZ$H@0KG@4Xuu`p+@Ce*hq_*{fh+l+&a)$gj_1TzZ1l;d5 zEdY|M=+(_;m?0lkF=~jsytoO5iKOUL*Fc0$v=E|DDwyQ>3avCb5@;W>nP5akxrwOf=x1Cvz|AwOd`2;rw^r{RFIfs3)xye{$ zefr0EFd*YMZ0OeEWsGynA?7L|sr_X1E+kiJ%Ony%mhA^AKZ$b=EMzxESv0hGpSe{C zIrW>U{+0Jks=Q~Ajx1v}eu&5tLD*O;($134EEGH-;Lrt;=1Bu2!R&tf4Iig=C$4SZ z^8;%X#l_#7LLat=uLjcrkiFFgW)Cf??A>7?S?9(xpokFH>kaODd|pcvqwg63!%YSx z9xd*b0_()q;O60lu;Ms77q~uS{W;0Y31-WPmp*Zp&(?7r<%g5A&bw;6*3=$AJWS+X zDJDn&S!af-gzHeQ5A)Do#@lp7dK!)o6FBgoD2Q1u*AE+KZIsoxhu`$qR{i9(W-_;^ zV;=R~m|XIj?R^e0O$**E0ggFLk73UJ_!1=$VyIV<@KUw}V2TLXA|aqNj!C9N8S_+g z>w#z1%Fem~A?lIozbq@FtQU%~;xg}qSh0iIT+6EE0z*w@k2 zg~nG(e&&~`STM{?f`)ioklG698Z#=8mT>qM)TzL$(g8O0O5MqGYROrGLZpg z8>GuH^=Mt!^ZFWUBWW2U)3a)BAysIr49@qD;m#E0m9m6g`vhNg{;^i=7^s;VW%0{n zvc`D=tVZWFiD{zUHhuT9umKP&CVQ;c$x^J?i2+94%EhZF?N(#Y^L!ICx3YX+iaI6517In$F?54c zIId~>i&MiY5My3N$|EFJ{8GdOOt#T!c=-l}EH~fi(mU1KQhODK=3p!F;AE77U=WZ3 z(FCodMvAwo4eDmy1mpMYeMOt!s=MDUHzGOvxl4vv)TUX)IShLDn5iVyW}Wz9z4}hC zX_AMxkR;GNO;Z1XBpgmS@dQqO|GHO2Hg{lU0o~VcC)4c9znPb_arWik<)yYIJmUal zI(rNKCgKXLysEIMahF(k(*_7K?MH6fwTGLN4%$O>y5YDp>AP-Yvn%aY#X9q@_X;tt!M6N-;hmreI3S zgz(!6HOt5}_bAjXlxloJ4eo0K$tu;?Yl(^cm~IGR$%Y5#z`Hle^r%|g{eV`4bRB)y zhMAgG!+X>)ZMLpyDQ;G3b*)N#QYpcJx^O7i3dCj>gMCscTF%de9QH>kTR^P8m&C1= ze3i;sbd95cZXHWo98Aj4>wv6hoLKc!xDK3*O8rmoq4AJKhcc#%Vs^P;Kc;}G)QyJF z&liO)eqE*n*tr@GmF*lF%#fq8EZJd#rsiP^;xA78x-m1Q=ce8hMXZT;_0 zRXIA-sMAH;%R+oT-0Y(R+v0r$g?$9HL*)aG^7Zn;19yK>5!N;57b;=H!bwCH+@pXM zI;{FfYZEpWr<}s^)J$9OU>WCYYlO==VhhN{(KoX~7*!Q*ltVv~U5Q_v93j%9-qNz2 z)vUW}c~|i*L46+7uWbiNyo1t7Db);=>_BUOIDGDXC4}yMU5px&b;Dih#cdh&T?C1x zdG)`eC}HGmTYRWg`jZ4W?)r6@TGA?~S)u{r4d>uq8%*i zl*D#2cUX7XRrWqK&p_;TkDi9=xgc0?yTvW3Dap2^p34knTB3_ycZT(x=1_#y`fliW zF&?oUSoB%ao(i_7pwHTD=E?Uv>p`Z_V*%54#mfo_%S+LU#=}0YY@+lunxN=R1fOM6 zcaxdjmEl`8w`I$J45rLuxDVDWs!V3k_sN-s|H-i{YkFIh9YWT(5^;I70;;};^eH53 z7-n3lBQfAF*}waK9o+H<8y2H_I9QDNZhJPG#sgy}W2Egp9YtRv%C0||^j-!}r&ljG zSPol5ZM=3fzPX63^M;bLW83|Pm(x|4T8B^W>?O5TLffe_`o!T3-AFo1Q=hgPWSSUW z4le+)ff44q(y;PL2%94ws?J(kZ!2f3)l{KIy=wVmv`)@mi$8|-^r-s!b*-6wTCbiR zitC2gx1-gr9v}02J_;!@*Lb;RxIY`rDA|N%M)fVjmDzq5iE#J(vQ-72xdNu&*QMF0 z9u>g09uVL_YTF;ts}PS_8^0+Mx#?^5wSQ+zjDoa7GE zb`~L4^OZ^l6YKdh2Kzkb-5=e$X4E^Yk9u#lQUB$48}(knOmD3`)m#5Yqkd8}>SES8 zXW0J^BtD1Zw5lho>`8a!nS1xoGx6$@hj0hpwzpvBJtg9sDQ)RrcY{d?f}*}X2N zKmMTS2%GKZ$x-dBeRp~D=`C5ACHd&nN=~@CLvKam;aBOb@FezRkupEn%$G8(jm%NgW7SD1+w1QmchO)v~a?O}9-;0W$ABKZ&+qrJsUsE>h z65<23)+!7YdZ2QBa$y;95O|nhw6oTiPZEE93evdPJf(?A``sgFFZ6Q5h&6bs!7p~~UTgDJ0DBz#p!q^34)6W+0HE89 z$GMxjpB@yoW;w758e #E+!v;#C1usM~vzwz9l>Z?<=W7Dd{j+AG^@~is{8l<)9 zv_)X*OTy)sxoS;gz_>9Njr_#9tfKVveLi97JpZ^#c}4f(@JGe@RI4rY_^7Ocy)IlM z`Vfa{r5qNj*BSM<-N)O4n6iHEid$utZazt1tRxYWfqk`1Z3yr+x^%oa*vXzS#kt`m z{TYO=9=eeE-UH^g!%@s`40Qk9==alTx>2bB2IDE+5Qb>v7!UakhqVfWZaj*HyNfYi^o&%lM(x7ZsGl4$h+m9zQDy}_m+<;(-RLN6ajGIqP)xNTje8WunfKzg z0;ys7UFCoh9~6ooOS!=1R=x6v9v*%QCm2WclJlO`MidQzoxxFfA}pMSDVi>yR$D(Y zvgoz;<{BkbCvd&F#IiP6|C+Y7w{oI2vFlHc>a|Yo__%i1R>Apy`|aymuihWTD&#)k zm}QwtrI(<0v%~_xt#}l~y#b$FXgcO*8dlqi2K2%CDdXW}RGm)4?#KDt(rNN3vW98Z zZcoAy8_QHjH@9u1HIBM*I9LD)@S`-T!cGzBbPJUBHlj!yBhKC@I%$h=b+`;>QeQLy zXIF*^4rSQj(i=8+3nX@X#8xU!^;=@rY2((2<+coq`0c>*6Moe=`o*{jA2yojt=fi* zV*KMZ2iz5NKsN5$v*THEtV%m5`lNdmPl4bmIu?aeq=@pwoB_6YKnz-C3m5K8c0-d{ zdIe_zG#F#QYBeasDp1NtUVYnclmjlO zV+V2W?1z*IzF=OquftCdRU{q$(Zs4hR4PkKrM_4XRA19D%g;0)@>cbNTf?qYk!PB% zExUY~X)NdIwUj)E2VGzStI2Qgs`Wa>#A{jWd3mApTL6Y~rH4-`uE*;|6pSjdd+TlU z7+N_wJ+GoD4NGxE4yNfCV`BjuPe0xml0_L1dBc+DUzXR48kQV_0fgbl2r|@FlYMXFeWny z=1hMa#$@wMdo3dU*CW&y!Zt!?EM262jM7)Z7=V;O1lPeuJWU^HUt;|622@^|juS=0 zt1V;;j(ZX*T(kgQ$h|uZXrH&=$l+FnB%HU2zlo>s!oh$s5s}L~z_N`b3CN$u|lcVZ5 z*ni^4SS7ERmDhOAKNyiP#^P;(IQA(F3S=_+O@i5A@IO70%*q1zhAX1csBS0S=V&QI zO$()bin!pB^j+u;g_?eu=8Dnna((&nCBO4bhVel{P? zCu7?BAa*w*3=8P&L$CLQy`;f9YCmYFg6B#lFpbB|xh!J1jCAlbPLdBR=FyzZa^I4@ z5uqegR)!KbizlXS%r}7 z_{|7?GazmVj)1A>PLr3t#tc)aR76u2563WP*8Of-LdMg!3;PcR^T02c ze_%1{k1Iu4{2eIrgl3Tf7#9bLo-3LxT$#72%NBiD-QtEjRz~mqZ@!7bZ@c|$WDWeu z9iil}Xr+m=(<#y{ACTDM1{o>L+6dUk7Oe5DUIH9+pd($*(JS2^Wf@C1yK!5ryd!3n zMMFsm4>6KiMt{2QUYQz&t{i_X4ey&q`>=j;Zgi|AjwhkQ>@!;&sMsb5nXS~vy)&hN z+)9q5^ngy%OupVCK8%~1;!aCmu4PejPc}fC8U6KsrDEbOrPE}r?6pV*f0^(GVhvhG zvG7W1F(}UuBxSxd34%cDDHU(qDdyy&hIN7v-Gb9#=T_~Pc}OLxhe zjh)SPFuTS@cmWd8B-+A@azH>lN>#jm-1=4Uu7@~$m_oqR!{Bm~Tmv8zUmuN#h~Oaf$*2(b?0k?GB9yhO(XMe`Ix4(+8VggPnx;Pg&h zz>(hmlca??G6JA7g!3aXP@Y+e>I0mW_#(MS%_cGzup@lrOt#&ta1^IQ;RJUUgH6f^ zW4!Q1*(X+eJ>bQ=JC&V1_#Yj)s%1vItWb-=bLIRR z-2WxiQV{Gh2x|6|k0^&EJi|zodh)4q8^3j?rA_k<^$@ErA`*5bH=lOpsh-q3?UU15 ziE^B%C}_$QBpi=X{7lf~6jh5UY7fxwQyZXCG}WsZqz&TiCLfxd(XvjSGQ#82=(jg_kr9o0s-4uj3WZ>gy0`Q==oBEyNvexP4*+S+f zj^MY1)tN-;Y%rw|IZSE>dmQ77)wx<9OauXw!A9F*Fh=W}vVQ%K*$_GpuOc**8F2<3 zwBy0tyEOEGM@7~+s&&{?Kmd!TZ1fyXX_b;#+((ZZG~Y$eiMek_d;wgkkO?r~Bz{8c zV(P^UJI{+AL0KTcoscv6DAEsNLHe zl4Q?9L2e3kSzI*I)$^jRo}kJ-un3bB>@fKQ4BJG>(X`qL7g09a6QCQ8wd%kmVv3ka zOfD~W4}RTy_N*-bzPQK2RapFkJd5X+=>GQ}ISt<0Eye2|*!pb(;vPBfvQX?fU?}5F zBQNSK^UJd|laQVo(!!nP)TT4jz#R z>1bys^RbdcdR-){=EK5$2}pMWMw-sLSUExs5m2 z)R8#!a=@%@vv`1+=>Itj)fMI;@BEvTDtQ!L2mC;Tsm3;&gpy)bp5KR{s<4X!)9)d& zxz}{Ro7m=nVfdIi`1U_6u4yM=1q(}2*WgWyHHC@4hLxk#ah4RS-teL%ma~JET zu0b%uwD4$+t6It}6v{>C{(*IZZP5ieiC<*kg0P9mH3lhtdK2_Ra~RhbBXrrO1{^FL zG0)9xvf_YsF1(VpY=ySrq+7+rf#TZ*3s)9aMU%ay)Wvo5I$^CNt`~7R1HlNt!C?+0 z%jp#hxTt~PCluDPhXFw3F;{~(eT;rGxY3Q5L@n+_o;Mv)>&zP{6)EA@TF-e0Uqa>2 zlFrY`P;Sbje8LVD!88=!;4$Gx*)?;CI}yO!s3b~eIFlgQ#vOlqiGnkP9M%(vnV*B18Y$y^DwvP!5kc5Jb=!vT#V1< z*U^(=ls;JsrBA*EN}nuVicju>(3)sy^`5N6h~#e&|Usjxpl#n6^IZCcoEY`M3gb!7h{8IaDp5{OnOISc<

+(BXE-v{fVXB;sPUw4iY8dM#h%^iU(?k~ADgp2MxOeydKGI*5@H0aX> zZir5mSG*d{H8~p$vb~rk8uw6vnu>aqOQQ91O1+dwSBf`t+(kqe)#GRa2W`?k597%s zL8DrIIFI}KL=Lifl&0b2hHk&j$Q27TTup`gSowWn5iX zlYMZ&T#KzLX(4%Yy)v`?rkP%m4u4&<;^te^5&{h;ASm<#)eR=`oss4qGk>M=#XyuS zqzj*#(ELtZ{1&)Kn9`@T-h@vB-j-t4)OhoY=TVvuDcN?}L^yx1wD zpR8G1i}%AFXWLNmmTD_WI5(vJO0G9%MKG2!T;ehP$6ov084*Mw7K*fFwUIin${##*!hV zOUe>5N&y6H@Rg^|EXDe6;u`cR{V4HzB(McP#Oqi31PetWxGdL?31bL^Uvw9yQYb6n z@P!%)=|qqeGblvMex7U6X;syX$xzC71F;Y)K@5jFGNJ;#!x_QJ;TdE0A6|CGcmSHJ zLTU(oxmnev31BR8mW;N-`yI|#hZ@&xwccv{h%z(9tw34{XGE))bkE7Q_oQvad_IX@ zoKWLr2&;~=Xg=9O!6rb^W6}=YnAYFLl6w39;Poha6ma0g`7^p@aRJr$!Lo4oTJ{W8)l(S$7wX^7u0Nqmq$=> zJqxDnb--M^QIE4*VFQ@@TLo8XjL547Ps;C4tAFdfChyLZT8q=#^Ch&}c@xu?zc3r%M($R`j_7_c0EWCq{1)h7Yy_ zt{%`8$S7e23PDDMFb990&X~XJn5GZ9m)knXXZtFi^v)yL>_-^h2Hth1=8+RzhUf_sTJdZBlc$yo1LFAWCtaSyjVUfjwe2Dh|mD5Itq z!)S=x*7_qt%nlkX{VPiP>$q~%RgZnvLsKW%Fw|*|;!xoOya-FtDC#2WCzMNJ!bVc8 zxFesu&D~9O)=NJ|gJ{a;jH47v577in%dRT-Ci;{`Q$`t1zkrBXGJpl_Z^oAWDcQ*@ zbs-4E=%O%2K`KpP7l~kZ9TE9c+whJn6Sq#?g;CUchxI#=-W#l7wP$idqt5q>aR-W6b4%`C%apC&99yGK5P< z;g}AUpW^767Yzp*1FaxZ^QwSC7rTA@15Wyxb&=|Kulc5 z#2KXYM5r@&x_OlChFxNQ4JwuNih?mmqb`~aGgHehZoDB=LG{G1acgpYogdC`G@jO* z>QUoer*T&QWj~9@c`!e)1TzWH;wk!sOlRr2x+eK`0VL=3>RD~y;13Gg-1#8L2=Kn9 z=wjyN>~)7D-pV}b{en;Iw4sPz$V)nB=ZD#d$M9(DMcSRjW97vav<{Cur;TQf`n1(; z9=LQlhUg-`)IkO%g2)hH(h5$Q3)oIngaY29=gMWY%jEQI*v`+eS$78!o~p+1c|W&e z3ePb0#^F!3qfWb_A~`r{$s*~BCH@ydE}(RBJ&K(0n%ziAXPa=ajVC1cT9F5Gl>z(0 z3*{1=!Kb>|8GaC`gd;MiP$C}+d|a_GL^QvxRQTGTGy-%iW2eg5xChwLfq^Auv~xmp zpi*ilc+n@W?6F64M$%%E>rs7tQix( za$o>Cb=Njo!g}w|PuhoX@Gzb|2gn=MY_6sEzf|Ap#NEYN$EjG^1ti@L%{wwAm_#6Z z= z^*f;BwBI+hI2R(*tk!t z0+~mO_coh3LR@M#e{pA4fBxIT*#vP&g_zHP`pAJx=K?4P57X=T6SQ{$g&%%B0G*%- z)Q5|xFr8NAmR3`Q84DbEc`)&i?k_W!hcX=dkrn^{gL^r46^~PF%<2ejaw8K&CXL`Y zOIaATlTvXWf;?KY?8eDNV86keoL7`dQHavbMNqsRGVeqZ(D9Tm+4V{_n#)wcb?0SZ zTy0-OcWBWq#8W;zpe7G13JkYOd;mS>tbSK&$YFz-9l(k!mV1S9X4M&9lWrz|_nh`@ zYc(~3a)Jr~%ye2_|@@^_ClB%1FLr$Z1q zjFC~ynRY$;(vol2fpe0?Z;COBh}nc-(Ni`i=mvFmF*|S4vNT^&l%q!o$bA!=&9m&O z%%XGemh@@!(>YUgJDUG{zRjohZp-u4PO5;oyc}p|*N={Td7B0*74waao+7jb34=j0 zWv!s5hWzeeW12n>dYOrtSDKDvKsHvs6V2mAXBnKvAK|Dy2;-rsF0Uja05bpRCgMm# zq_b5S=LSCr!$#=@Qz@;`ON5w`R5xHbo%aa=*`AQXlN~Un*o7dpll! z;nSG#*_E;=!3eB`Ynk?!tXmGAdis94V&7IA1WRGI9^io%7{lw%N!pAtL697FZSW{E z-vhqC)5@Mn+>^t^ZMagUa)i+@=|&h&DDXM@Jf1{pD)(GYvu|K`Mu8)%5I4u*VDnRS zRg-JCmCnH!>=YPejT)-MDmoXA2AxTp8smfQvPsojkSO{-m_0Sb&Rl8u>70^> zE;wP^EXX(NY-I)RN?bSBQ#4w@8gIiHmu2h0(tN#e-;7*BSOm3?*NoH5HeIP)gjZtu zgi44pPTvE)P(3q4ed+^~>I)Z}(|$I8zeuoR zOfv~bU0DyxKnCBM$4VI2t@^bWMGQMTSmD^2#}3QZV<|XR8raG%RLhn}Sw_39@eOsrqV9AyAAB>_qV8GkU ztuf%m=dCedE0X76K%0Ol7m6Xu(XiBKybqHULl)H>nlYH6i7SSc-vZultxn(KjMHX# zd5N_Q$Hqe%a<9u?0tYiRxWnj|7#xp|S<@*TyOMrj=Ny&c`%hPx%iJ2Dmwm`szrpd8 zlr^E8WGs>>7A4gdWL=W^8^N(TmrjK`pDjy=zVADm-;aE_vVeG33Gq(b0903N{1%h+ z70?F&eNi7YAJS0bdA~3h6k3^tj$D$X1tXN`evHKneSo!iJ?)EQwehICoZSRhuo^hD z;>#d-#WBy&d`ho)zkI8$bhAZrvqXVd*RxagTV5pJH;`xL`=!aCRXscE95!p!_SyNesUw`^>Y^!8t&<-bD9zlYFL zv<SKK14sa z!j{Md>Sz+iqsHV?9HSKajcx9m>ful7-vjsoV!$QZ!+KG#h|U&uW+=gyQH*pY*=K*9 zN5>6oac0}nXvCLhvq3Hh2+BWvz+uZALBX^uDOdNN2AjSXw}M?~6ie|Osj(u*fi8$r z@Lz^XvWip7LE93)JX3>CufK%oYG5eaEFT&Y4VA!1b>|%W*p#SIEo0G$Ot#j5mt7(byvZIUj6Q7HY-HHiG^Yfcd>%3Mwsx|eU z8NwIy&E<_4(#qO(vn`Mp_Uk<}3dbLZMpz@49D1jnZ`2Fh14ljEuvhqeQdU(mY|!k2 znF8ftE4LTUZG$_`wPGG*w?rlf_o~J>16p2GE!nr``r#GPP;ihjkb1x3JP&mU2VwD; z6RnAn0-9>F+DQwV!8kCgbG3f(7yI=Wk*;iL@u_wb{dbsF&uEzgm24dgJgP0_^iELg_kOP!8{o3S^i*j}CE>QQaqlu0R2W%Ko` z>iZ|S+po_+9KFP2clRosY^-w+n-VcCbL=%-=(5v`E@qc+=(grnI7uB3M*(U9TP?N} zABLYh`HP@RMdAXhM?;6Y+2$gR;g4@Mlt%Ap(8gNpGTa!Zxgd3Y)ZKFUN{Z2Jwyvc zLd&WG4FzqpirY4WS6TPePW>L*=_kqbKH$N2?gO4F#{MX3$81?HS( zYr0UrSMdIZExs-&sD<(c=KMgjQI}f2ph-EuG->eCrd zuBnU~U_o0}eou2?MTf=fU^<~3B+3JKLZe`2iiL_5nx8BWqAHzTU+-DU%5qlV2kBL1 zSjZhgwFLk!tgT&p$K;R-hOdgaQfMr0wW@8!t!J*OxDN!QwRF{%YIJ3HDlfN95)S&w z*@EYp$UWIut-2R|Da3uf2=@}4^irlkwt#7pY;SMB{CX2n|35bo^~DoGdu-7}sP);8 zqUqPcyYBw~4Bm4>3*o&G_XP~-t04OS7N^NcnO~IX{su^Y5E(Hed;TGi{JJIe$}5KD zWgiO3-~ltgL(l1y9GW}b0R}k*LO85fTdhvD-BNzcMxg^D68WBE(~>JKCO%2`dxIpM z>VsG?il*0zE9!6016|iVRUs5r^YcKWIwr;EBP+dU*1Bn43sx}4qe!l7 zqje=2X=9mU#8OmMxz01A)^U1i)cV_P0!ymO8aaAgi$%vdF<^zTfU?z^zhy&`nD521 zLo1AWiw6kGs4E#sgtP;gUPAXsUFDG15e2@WRwx@rzpsX|kZ6_}i_(Hv*j~_b!P!eU zLkbm&{n(3pCh|I__rV;O@zfr}T_m;wqljP_gDRODXF=urZ5cF*sh(Kl$xS7*` zUeVs%5%w=}2}ONQ5wkku37p-#SJC^N`HWw8_+fhvY}90fBcA;^?)Rd8&^b9htuDinW>&LRU~n>qmV-1wQJQ=44(3f*=#ZxDA^s*z~j#Gv5qaW9z5*# z`=2WkZkB0>eq{yEXmH2aQqoWHNaY> z;>Gw}3gf;huY(0Q-UF+dtyDPN4lgZ?{gWxEch(J6l-HkI^j8V{I7>}_cFrt3qENC{ zqjNz;CXcveRCJnE3~cmzf7$Ai!D8>(j(;u}@(C?xK6+%yRqi%J9^E)dWV=>Qc?(E& zr(my5iW%xzeYXDQQ zo#!3mQ~*)1L*_s0?3=bEFi7~F>f3gs>~gVeCoAF6Brt&uBQeQrY07k@YZF%x1LKZ3 zQ?AvkMKnwCg0DK`MF{q^`bR|Soc)4F2t1I6xbAEkb4E#nna>yfGiW}^gc*^Tr90H16xpYHh_sfWM9g%2Fg^)^qpf*|D-=$2I7DjmLztPe+OG3wWnKoF0% zlrcExD#L4d9ql&Q6qcq;UVO27c0X`rAaDIq^m(bu^rO{Y6g@Y@jO}QBh-S4Cpc}aL zCNdk~=$jH_7ltxCjt3D2WY-xbsPTNect4048@kh3IKar?{jkgSIEE*oF-8e-f(=sW z^#6BWZJTgYGHZG=GBTG%+La1H&C#G!iSLb`3&0;`5JB{r5?!nV(=wdSL6FTa1w=^^e=wEL}A|lj=I4OJGDX9)LMl zlsN{wOm(>gDUoGo;|gvCNm3$9t8E*Bs3LX>EnDQMR0@*OWMNp;fqOuzRB&6793AoS zg7-)=tRX)QRu)V#9e{_08?P6e@^=4llsEYOC~xpz%KHkG_XTY=w)(sa@uq<_Q%*#J ziHxbf*)!>{B|*8n-Q9N4=YDPMU4;lEKj~q^sPA^;V8e$&VleW1i?{T5;Z#{qDnc`q zaclCj<~*yNw1%?idP_AyRzP<`>kElrKBo~S-E8DVqk^bor7tQcF^`RZvuQMww@OlW zn>(z<6uR?ayH3Mf-@pN)F{l8BDyXF-Ip59AqCQ9Y^lYWloD6NH+b3z$NL7Cp1Gt+< z%F2V>{T74VEgB^M&PIY?ng+P36)9j9n)9M&9%gPo`xZjJ)PDmV?t8cXv;AlnV^D=e3jB{O-vv+vW)LX)`YmsGzTiS!K&3 z`8U+7{}?3M9L>(ugH^~oHzx1gGAd-nOKG5j;l(M(AO{vk#ZwA1FwskBdz+)=6`4rc zP_JeJsH65ec2PEJ9qe3+Wz?+Ey1C2h}V0P@t$m}x*vmU z@vid_AUVh~6YF1+p&eg5x1x7u% z3dXa3Kcy^;qhz`v0|)Wq6}>*kx9TY4UpOwakkoa?KjTqgxmQpTq+$p5E0_>mr!Nk6 z9MS3CO(u0ue+-Ur8ym@-=gVz_I9Oz=Te{s6%e&7MY#euX_Q~vTl$>CB;4*ZIrqGtd zj-NDj7}c*&n^wfue^=tn`#;?;C0OleCX??e*`+U>p!tVnqr~jYm^)c`J&3!QeyAT$ zA_*Tt%>VNgrIsmOIZ!siF8VI1Kq7eak@SNQUSFeciV~Sdm-vNx6ph@RwW;1WOXQ7I zl(Cgcz}DK2FK3jMa%xEyav4P{PzWT@0q_xlQK}Sya(+cDbWW=$X9f3(SV7L__T?XQ zmNI8a$D1&qL^6IT2PeVh434s@a9)lK2h$F&3IBD&1s#H1(K>Wvt(LNP87s6?FK9=9 zFuC4rGNK5VaFkx8FXl*?mJWD1IGo;>>tc6d7fo*$wo)DGh&%;aCr34*Y&CH%9r)(Y zg9{HNmz$xlzR9VWN0Ooe zl`)!$XBWaC>3(#Q-XLdW4IZ6&;>!T~L)+~r)V83@@B@2|Vp_Fv6dKd^#S7En)bv0n zpP>>Kj2%taUmcNCqaWH|{= zSzcoh5jRJaRu6>C?XSoKCCpTo16m12l(n@B6B|-RK|8#p7aT4Dc}YqNR~}6ooKKQ* zG(ppAHNErVjcO15PZ4le5Rlb#Yf<|KhPM+^0|U45rw!96KQI}*0(x%z>SA`Ni-YF@ zT4|}+Tc>aT{`Y#V1uu-39HNM;=Q;4OGnU!J&oScwF!VnDU_0sBi2e$v`#Df#I0Dzo zW*WJtLx1TW7P31Op(z;0_OSEmR8}-9f`Z$1S+t@TcdM3mAf#XvtSf_G#%tfdJnI|6 zy#)>o(iiQzXvyu{Uadd#?yf!Alq(f^r9!Rfi^(NimdzbP?Ny_B25q5TeLD5mr`*kx zaP$##);FtXKXvNu&SB&96zV0zAuysuDoVh_Tnm}|+gH$cyVmTSpS0SIx)R?m2INc_ zi~*2j;BUybr$JkQN(Duzcoalo_sWWjtWf{YizFGKMf)W#b21fTTRJUYj;5t#&}&eF zY<+^Xrhzw=W7PPxmFYeJb$t|0LrUkp?pc^~Q$TN6g6nl83LOrtLQcp-Vd8+4E@mSC z4)qMl<>dg8gj^pgp@7*7U{`=HjdPSWNZaDZ3^0Gb-gvq5qZYQm*u!5hM0~Ch;j@~} zTF&@3C*4LnLNd8nq2-NWL96eVZwyv1y^2Q??h#|F=cS&#*{@o zEl^qQh0DVx4CVl8od)Qe{|RG^rcpN`j)Fz+ynIzJRtFq&j~Wodr^R>MH7z~(7jmV- zJ&<8Elh!o|#)Bm6X@h8X?PeXj+PuolUL#Ax&p9FC%#INZMs(4D;US{wbri9(e|nwB zPL=ZJLylcn%$oJ0{-ZJq!Q+1xci^j$dsz5 zQMi(Jyo)GvAe~FTx1!$rAl{vCNVosh6fdnQc1g!p2rg*VSijt6tgfu>sCq`HPw~P1v(k^8Ii(EdH3YV zn6oZdg;9e_o&2roQG_;6tF^aFm9mnV{}jHct-arWID6UQ$fpHkaWosEwR#tV%(Vz?Qx|`axjo$Ddnp670bMP6=@#mu+p4=tYDxuJE8+SeaP%FH ztnx+ip!2xPTO6C62wJo?1|~E}`pOF9nhbEtK`-iuv%!?CX-0{vBsTTY=kXx!#?!$~ zkdC8n+>b>B&n~d9reBe{^pcjOIJ22}77kGdaS=dKdvZhjIv(6YHFhQ5aGVM{^6+5} zkv`z#gF08ym}ywhS%xaJ9MxI_{t9LrvKr@sgoEj^bswpjbR~F4$_#kF1!okpupsS#pumSh9UfF53+a*MtidYOCBW!Ne&!3fn<{0XqNLRpEHLJ8vdj> zC8a;)gZ79t3ATU)udc%pTI!+7b| zJwh%G)S3WRm}#FKWejLoL(o1stu;GG$;e4JRSq8NA@WQdMVRER8$C3u3Bai~U%z?q zKt;!yGmUtZ6qIk%1RSd77gBT1BdEkMx1y{Yei6v!V0Q;)Fy|n`zqL@dJ1 zubNIhK^#(G3?-EQ?C^ExSk-!!^ln}aX4(%rn(NfeAPNn)CFLL5w@M~2+&4ePVP?gV zK4Anvp{I7b-R)mW3k5@@OKFu*K@%VW+c&`g-ctl! zB*!7GAuK`_16ap{fmo{#?*&WLE~Dudw3%CCk7R+>PhP)ipMhNFU1Vmi^D8Z81DRt^gn~RA-p-S0&@~yRxvxN6kQHWbzp;o_cnfTMKGP!Yd_cO9ow}$ zoN%TTZQs-XjNU%)pJ@4-K~ZVd)BqfZp_TT*y29!^I6f@g3vITR?R6eLraI!?!9nn< z(S9Q?5K96aU)HYibGf|+ft|1t~T5E*xs8){pcQ>Yu4(uYD=4wQSiSI3H>{e zPKUv4Tn^5|!8nBV5^bf^n}HV4zwYcd3uZTeVWNo^`Ik+d#tPIdFTZi;t%kB9k>)ku z4x3w?&iuUbuGXX}YqYXi@$Q36v3g4u5@CmpQNK$mq=$;ia5;c8 zb)}ELQ5qT~$wxjrv&-Nxyt#;ii&+ds_4TE5K7oTdWp2m=sBtbNGt`LYFI5y)Md2!z|SKPJk4#u8NQSA_1#A5!T-8j-{ z@+q2ZVFr3Y`E(L?0l~v@*qySq2w;~Z=tBJwt@I@p?Alday}v;;JqUm3mjfw-wV zT;!W>a|JBQ;1l2rLsj|V>oigL%R_lbAe+TNn&y|?h=WH5!T+}&>;})D2e2iboAoUF zIvi)=bd4uhqqxL?6!egnw-Yw8P^(m_RMX%xNifzdFhf|7AzEMDphIjr8;=tTnuzf^ zi2ns2qZ^94+~eTk_>fPKhp%7nbx_o%kbrJdd|=wqbT%dhdwK(c%aB;(<%~jp2!G{* zFo@=CRENF%7`uUH;<9oo9!D(D`cBhH8I-9RUvZWSbLRraYct(Y zQuIsS-{KL8b67%H7-R0TgDWgWiy%%btq5(rORlV2Ah*891LzYq3q@5jgGZ5Kgy>E zKy5P3(9aKC##yqd`BM`2h}0>vB-d`^K99z>BhJ1bY(}KyRD?fDgkjMP z`5NLR8jV4Z0s!KrXSO*rxkiyi{E8CdB1a3VtyaBJJ;G~v`?d#u{O}sIWb|@Y4If|@ zw=fm%FmFuLLee;ioB37c*9+)99{4Lw%m z;$|2PQ@jUygrg!8M+v-)-#2(ZbQ#%8Od)!ZEpU4|Zb zOA&^0MOBPgLIYo~(#|3&JV;^|>jTXBJWcQ>f-V7x$%*R)?5-_%#dRr{h`mu$!|Gs! z7H<+t9xXB}AxjNOzt0J!Ej#WI=n+w;@0;)m;^`%Wsx0*<2^`GO2Q!A5oeV>{djz1) z=@?d(s7frh;FMABUD9Rg#M92QN=n==xQT7l_RPhuyE#yrBhDVNBEhNoQf`ESbG~4 z0UT`rl>j8!c9UKN2VOjs(EPBv3lqUi5<)vL8}y9|te-0~^9s?-`TFWcCRPnLMU;+i zf?hZ@xq1czEh{_-pu$zyVnYeg+?V$j=wH6nZU z-T8v516+q?T(`ol?Hc^R{ifqS4I-;MFL~v=hSoBHv2K z6p{-T$T*x#V-!C*_HB=x6VP~3qIsA;s7ekx#UOb=+GojT`D)i!9;1A==@vvf=9tO< zN)qz6;1dmTb2(%9g99H(?Dc~9!Z|%PpUWt8EtZR@+?qal@#Ok~KOY=8oiLR+(S%Qe zaOlo)$pgHc6(3k<#Yc~dOHc@BOD&BjG%F4>Ue@-}i;D}`C~qEj+HX#pN1gLpv(-4; zC!tvas^JwbI?KhANg@f7v(jWv@v;O`EX*rBYow6sHHYr|LCiwD+#W5CbggK39aFW@ zT1&S287_EVKB4@D^nAl2ZVlOQ1X}A&^{DX|c&Asshfjj`j4 z3_zVdQ)E(N0*SjNtnjs*{G_eiGLN=iq}@q8o+{&v*5PsIw9%|lmqxtG0HjMWC>L;; zrA>+seZUO{C|~H9?JQxfDA4)uff~!j&dCOIzFT8j33y+v)$gsfT-NwIw|0N9O|#Kj z=U?qD)0(5Jv&%cpQ8wQ6eXe1g zpGsxT5tC4&Q;$iyyCN@0l-OeI>oTS9`|35D>$l+GVim!!EaJ=umjzp~G*>bayF`ZL zF~CpadKj>3gkzWCiyL|j@;Av#n3Qvh`JkzEjOUGjS|Ynol;kA@>zJdek}e3JVBCe9 zU>rxN$(JU|0l?l1p>#6f(~Ts+q89m#ij7<(y&I)K!1j80utIGm3V`^8ZtOXT8Aei? zz?mhS!v4w%%1WhydnFHs0gC&qB*r~>cW38+_%Roc`@UOS<3TDuzL;Ai!|mzyx=|32 zJL{sh%1(KqJbE-rMrX7e#s7+W)z1{hR7d|%o6-VUcbA5BcOk614y?QP4(s01u+!c>ud`#eIHPlP3)cT00OYw`ois%3jM-u2q&KDQS6kTl4`9>BZ z(%e-z>EW@Q?LDofiJ(3{K#jqs*Lc81*H*C09?UBL#4G_YD4h7WM>_Brez zu)gUMmO!dL?mPVj>-qlRSj^uy_L1>Px?eHxr=uL5icv>|Qs3I2B1Q#SojGob z`qYCLb%N!W)}c?VMtL&&VLU*#V_1vw_8QFw11`gSrWdEQf%VpSTYX^hXIm7;Bz}g( zvkaa#ef69V-wunXN1DfDKXxJ058x0+MTgYRw50W#JVi*bvpX!<9=H(?ePC5Q zS<9p~QH>b&cy=12c6ezt)-pX7s>;Db4edkJhG>;+eurfUw0Hmf-8CnieZrPPQPk>g zvTS&1@yy_L?#hrd{X_YhMb7${H&CDK4Nz#@h0v zxadIqhx1CK-=!6O)3_21^$*~JW)Y<#wfl23Gn1Oj7?8=vri~Nz;S05~=JaF~@Nf=5 zWj`6(by16oIsCQR0I&?`NbbXF9dMgubH_z)yCieocrfp5)`wO_qo}O=QP2Wxr~^vW zMPWr9C$#v0XPsEmT~pY{)ViNRe^DU2kDS+`H~b__@iw-BuuyCArO{81lSvaGfA6gh zFFt@MzDeho;}E+d+1D_fy~Pa2LRO_R8-GK{cU;JK9LSeol@8>vTCPE^o=;m$qFlyd z)2sIDXbLh)XtS-}TENK?@RG&l{9uP*DKmM)7lFQl1JV(4R)Z(5sPt_>~GT^)8tVGJ=pPZOcL0`Uh3( zuV*9YY^cwFa)Kb*En7G4bm2|T0&I_v=7=CK>mVFOqE4p2cq+$}@r;7ZtGqZpU{Iep zyu7*;i~H_bLYjMrY8|>^MlB6q+Rl}xs22UQiq#xxi)>8h2wRN*hdiW8Wy|-2mI@P< z!5S^pQ#Pn6EtE1u?QRJgKBBVC9G6Uc9AxAMT#BRFknOPolP_eRrCKhPu{I5~TT*E} z#6+sE<24aHluRDOHtBEA4IJiaK6I1p z<2|cmD<8FL)dXvp-_q2dp;k9To;@Vg_F}TM;6b876AtaTmMoZ;&QmS`Zyl^Q!qf0` zWp^joL@9{w-%&J$Cst;gFZz?4gQrq)0B6$=038h-Ch_Pa9LQ3W&f=Sl z5qHZbKPP*<`n%9dzYwrh(dAz+BL_LlE>rc_PvjZRVoKTVHG{^x7y)u%{K19{#NbN$1Ua4>ik7)T&|KqPx;ph`x|YU zc>bl5C29Kt+TB&2(AZndX!9%*#;_26QLMG_9ogF}l_&pZ30W!Q$bj1CxC)c2v@Y2o z|Gup&JGl9AbC?sN0~9--wra6Xo1!fi_B4a5>^z2ITHPRbtp}mjAUM57YrRFv0V=9jp|Re zqmAF>`>SfZU9Yv?p0v?7s4R_PTb9;<{_;85K0tFG(sc}uM3>d0PjMPw45AIYys8ur z$1{{>sFE2qL;ba*Fycu?d^7F1ivG@>B85jvaZ2DhFvoN`P}19n`iNZmsu3JdRG0w0 zI`mlm#m!;PYIy;M?O=s&XTL*eM>Ar>5OQPA)yeQ|XZQ=pf7_^z1u-2zacqX!_<*wE z?tUo;;b)G5ASG;t43U#jfI&&I!jQ6ulO#>gCrNLH+Icj?ry}%c*AfQZa&{T|v*$Ew zqXn6@H}0fZ2{T8_m>%b*XwHoSW2r17Rr*I1FtR)C?-4O^Ayj$;DGA5R+)><#hgD48 zIAIso<%4r48d%>9mm^Pi^a^IqWtAysG?2o=kewN40sO`vWz6J*x<${mpMlNx0*CK8 z%0amo62&7tB@nQEeQmF_BqCKC?rvOMsW6&- z$$0dM=M=Aa)IJXr@n-79)9w}72#UTnOw*(rqb?bplg8{bgx)*);?D*s-Nr(EI@TH+ zeW8N?EFaNg1E&RJ%v`7}S$c{46z4j{XZts=6ZD;q|?)M1<;lr?bS?n21sn_jAm4$WiEq<*m{4+*Z->V-irTBT1R-f`_v_!Ks2J)rmn zT!tl}(z`b&?ON#|_?5z}=wDyd7D7}q7yGPJmZZra13C%P>l9Vi6a06 zyDQ15xHJ!CT^o07S)CnHMPf`F!6uG(XIBNA(TL$qSgEc!WaWDB@Us88B8C)|i^)xh zSyJfytF}?aWh_+8`P%0|GR z(;9JyXV#7%Mfm=O1SQJXGph^^u!rHW0|0-7eR*elw@;=udCc35ICZeaP5HgE{UleP z{^D!cf+iqzC&P6{BaN5d9{-JWPvc2ET~;^{Da$Bt%E1#Htb#;twVAo>Z2v|7CVry- zSO7iwen*w(h)$`*jRol5wrarG&fipx$pHTQ!q>qE_whqbZLa+(_n0gXKpJMV#G1JB zt^KL0d_ey(!weGWfEHuGH1hbv*l5upLg#NW37h=?wOvt5!!Qtj_Fv>l^uf+o*@NI1 zI1m*ndl4Vv8s=nn(rsW7|GW3yrAgB^TMJqkgEqP2(o1ufeE9+yyu;bA^slHrA<7QZ zlpyJFoJ+KXAS< zNr#!3S7Tn1E_=l(EF+0bKB;exF2z|4b`ILm@8SyAn7;tay{0$3Glow9K_QAm7Qn`3 zj9d2tzIFxm^)-ikZVvZ^{qxA`eRvp}i#lS_i+HrGf#U?D$=z&vpIR~?>0g++TpL}~ zh?-8Zh$2<-(w+}XeyOuMMd9XnAS_1Xe^48T1zVW1Q_SC(0q2+>YpGU^>K~tvziXM^ zYKFB0exnhZruFNJn(^m8E0C0#Gk?u_puA zPNrTFPC#@RDE$a(M zVS!I%rj^jk$n%DXPJ65)_BKd>P=hRTRiY+IiNL0o*vDBqx$P3%W$Mo_P)h>@6aWAK z2mq{;o-l_vYd1kd002n`0RRgC003iWUv_C_cP?XaaO^y5ciXm-pXGD(A8>uo=1Pt% zKhoSyH*xM!Y&r3%EV+`BG&jxiKqMrwp$L@^D{h`TXfGEieU|7mK8t{FA)5wr!M;CabABngutfUc0J%&8|OZ!CY&9cY>>@F%v_(X+-S}O z{1O4%#*qrf6Z+!=AD?bBshbd6v!R_3gyS>mpqzd6XR2m06m}Z5X>QH zfi=DttiH8P;KIF?;7jR;dzY5SW8a?dMS&Z(7tRAUyHcBQZ^1p0HPQ4b$}1P9v;zTL z0**{Mz*ic>4)*t1?7LA2>_X;(BFHJBW5+>&%7lEWZ)KhZP!x9LT@epaE?RP6cZ{7y zYOX*mH~@4P3psJo5rHqck})#3zO|4bJ08dwr0k-rq4D^Ur0clTsi3LJiG}Ti7UZ#_ zgvX)crIxA$|K@per5qwLB$)tJDU6qa2t#TGCV2HNnou!T!2sM*T41|8_7D-2%|7yC zAwhI7HE<|owp=VdaJE3coK9H?JQaSczNN_{?3RI?@Co!F9R=L%D=<>vyDeiFtYC-O z5DEcQ6Mfr0m?E`ow?L+WxJjAx*mj`8Az(4V=!ug$a^)*_1DFtlq$5S>|07b9rPC7?*L%iW{M5I00AxU$ zzxERE{CqBB?~tAOp$H-d;UkF5=8CZpdC;85?O9XocucM#1W6@+VVyU~`~a}no&)Ke zcz`~Wp zv8cI#KI8$e)d^;HqsgAIL#9Zn1(2!*K6d&@=zed7QQ+Ilt6x|Sr#`4j3%LRyE*qe1 z%@(93KUm*ibjB|frWLr%RpdIN$%obuq88X;Ku-~)JbaxN7(1VP{C?cAwWg-fKA9H}epgU zaY9@4{=39^8k9X|S%-sChX?r%houhRG*$35c#UeOSaKsyYftiQ(C=EE{_|dUWL*rq z=P!HX7P}aX&cA@Y6Y)Uu|5ZMBB%i@(d{+YM`0fJhBstN*0w}0W z08dOm-aVldjbp z3@%zFv8mwdE`&n)WA!Sbi}|@)Bm4zc2^xisYlQmeF9rT$Y5dnr`2RyDTww`)@gX`z zmgh}ko$&78S6(pVwUXC=xIbb^X|2rHJKu{yT;2kK-Ce`F)=c(P(s- z_YcHwYUXJn58|Q7s=A)Igke~sqY|nrY&tazRd?h+Z|$O3W1Wkt@K6}QY6=-(#86BX z?6Dl#!WWeh%CvagMJk2G&-l46%pY^leuYJS>;|ceDwNw&29E1f#Mj|n?Hxk!Ub(&_ zSJwvb6mU+hr4Nfg;AyRf5n0uDl#k4u_R4jlIY~5Z&pa41b!Xtoo!9hyhhjPW*>CSt zU@8v0cf|hZpa^p=aPzPN=nK`b0jeHa3HAd(Y*gd9%L<4!3Hrl4@T)2S8YdHiLLvk4 z@$NMR1$g%m3p=PMo%0LptUvA!Uv+x5hxNyj!dN({wN@@w35@ z!LPeM)(3xOyT;~hYr{A8@$ni+{DXp&8@lcbfys@Zt{m`_^f6v0pXQKS{NlI)X-uyB zskGxzWdyBS&3xFCb`kcOBe*x_!AwM1XL?xC`8W<#*P~zeTk!8=D{Fx6$l ztz?$ISmg(i*{Zf44^7i~x1+SCTj7}0rVscXU%4V0 zOuK|jiF?%$n{ZP}#u1%Efb~T&4XkhN?sB!C6ylah;=-n}Z{x~@%^`6ObNhve)jwcP zl@B(+Rim4Sak>LJ{AL>=yAf_F>75}03yxB4Au~McKr^I(Wv`h)p|vrLuE3a4tj;N*`%bYPl9l4=P zkI%+$`Y+F|*Mnj2gaL-C24tMiz>nZ*?#(QE=E6#$8Xm1B6goI&_o^|*Z z99y=>!;t;$h#mJjqmlJ|(Em==plY=n4IqC!96axg2gBQp8v)J3H@6vaF&sSW-U_$# z!OPL@Mhp*64sSQ$;mKi>81Z!gJ1p`$i26?+L@UTd&;cK?XwC(v?KgGh{+Ue|;d z3O$1pfC7gMC*n9*1fctJIt|5!NxsQI8H!y{;}&D3u%S|39Ed2Sl}WH1NKet3BC)su znkTgq2~gH0q=2p+3CB{N(L&o5MUqWJ$|Paxx;XXtEWFn}wO(|4C)Tq!)~M4zf#Bcm zj9(7Bi9BfRCW6<{n+uhyLDO*X?O|Rj>{F0^4S7uG3n94+(tflCM|mlNz;#5}hLGjL z`sf~=B}?jp4~8e!MRzzF^sQHeQxm;R-VjSg0PYq-gHk$m@&?r)4YIm+$Cj~P5Ws9P z42Tr=e1fNV@Hrm*YvHVg(0!PuIoeU6obmS?vtoRk?kjPRz1v{C@5ADQtt@m@wg*8QA z0CsnAerlb(JpQhGqRfmT>ajBu>PQ+eCQAqL$S#Q2QF2q+H}kRcQih7RQNV3H;z@s1 zI+Bxck>SZ`E!N~KNb~+t#Y#%`!om~6Z``A4ifK^t9oJUrXILF&v$ZzF02KlI@uF2c zRjYAC*3!IKms6Se6L!$vC;n+mGD%i_AwN|Umom1Rw#C#KD_|IiuN{xSKI%1fZSAUL zLt@&~a{k-|H-TfOxVQKG!~XLu`z#o&xt?UZjdlKTh()(%!ZTxmn=C!^Nku7wULQb* zo&GUoo4T{TCL>N&>Rnr9SwuSriWG%=dvs<0 zotqlIRWx@Msc&TThFeOnlo+mz73DFNfh{iN3R*klyzVs)o;*3dutpbM2%k+Hph8J* z9hD6`i34(sZ<8_aG7qP&V&JxSPfT%neOpLWXN}aIhyM|T&9!Tw0_DSeX9~GqIGS*BkEW3s%!f{VY@d4ylX(N>%DKq@~{j)$8U8oSUrfB z&6G7G5gFx4!;{r%-}0Jr;YK(h*UdoElq>^7>ywpWbZG%scwmpgmAbs7E3a5jNzTFG z9hPz;pJ|=?u1fTzW7T~V-<@{P7EcPTQ#YVX6m(4wuOra<2X!o4f=;Q=QhDjDq>k$# z19QC&O;#^$#i37II26$RjP*m+>ftC^J{Tcy?b0E~Gp(IUoXD>Nrz-ehvM5*WZ(+*< zFII(dKr8ovuATT&NkbReV8ywCl_ra><7HCI_~RI9WCQS9Jx(`;Xqz>Ss9ED1zQU%G z>%g-$Sx;l12oETzouZFwzY~`CuDXlGJx@5w^3U<%0u22o9WIjcGKEMy2OcupWG;-)T(_O zKSvSxxOl(xo{^5RW|GFbc*6}l;bt4h#3|K2Wb#gg1>K#3M%>IN72--R-OS{ma?Ynm zsC;{Szx{@40}>`J8Ve5=?m_vdC~lDN(L!y%T%9{v)J9tz{d#mwZ2#`J}iL&zS4HSkTHDhbx+4= zJaakhLtZ4(A$2`N*#tQyt++9k5N7JiHq0Z@ zUREypX`hACgHR}O2zn?U;l?S_P)?)1NcH8*=e5Pc&7UCE{#dWh67MA2PJAO?Wp`y9 zLL#IbE6ex>-u!l}f^VfC8TL#IOoZ6!B2GB_p4p4%nnIx0rsW9&^ssw%$beVv1BG zn^0M5#lff{JS-$BJGhS(YfJ=SN@$=03N(#qg>SjQ&3vKwUPw_E(z)PL(7yq(Jr z`EnV^W#Hm>owPEYRV3=D5JA1ka8C}#eW5JgnCL)HR4S_9e4pv~cRB;ULi+d1moGbMj7#rBFGDg(yN8hS#R@M24eQ!xv&v9tE6VeXSf4#=?v$`IwOl*Ztp8nB9jXhtIomQP{=I7pCG=WM z2hcxPNg;diwS4fkd{8bQkme?}1FgXocK0W!8eF%~|NO0lY;~X$a=H~^B$jwNVsGyb zmXn{i+W?$t40FZ^{ZSifNtuLI)k%yj**vGaem{*F zvG_GcTL()KN<)(Oy{`1JBTDas%{zX7` z6e!Hs(l_oYv%!}x3U3K+@T$I5GX+EXeT7$+VF6QhPe(6AZIRy8!H;-T$Fz+c zn(IB)W0Y&c-hdFEdcXrvGxIxPl^kbHyYD{LdEiJLMwYO;3&vMVfiHj<53Sx=zuOtI z-+sGAZ)-FjT|5$9;Z<#f24F1II9T6xKUMAfnAr3 z;_vY7XxtftigtSc+ugG^wXt0JnN;aNw3Av#Uwqpz~EQC!33_0;s=P^sC4Z$YLU?^zF?ISXeA{2a9Q4?1SCJbro{u4AeBeiV4_8mNfS z(Q(Zs@RS(V?;Gd8|4%#M5raANy<1DE+MMB>p)}s{8(nHpZnK@@#`4>{BIoy$?vnlz z5}Y2`^e<;{4!v)klaRXj`$_A#)iTOJQBI1$iBe)9B=~`EU+CnM#-or$CSza;p4jE9 za$T{ery#DH=z1D|(W+73qP&=o60qG^)6%)Q&MF#T{k2orf+*)N3W24dfJsp2OPcoN zd$%CqMD|rtcsngN$FTousx8XJg2)Y-I}S;#>`3bal9vhhnKvBbwvVXtE#5Ryj6gI7 zCDM4M!9^hs2RK0K=mi3ibwB4<@gryQo`%5ftyzaK1Tj2!^Aipa2nOM=68T2kHR-qDgt~(R- zOK{5zl9W}t{+?p*Gad-JIBTX;kqjol=8UqDZ?yWJxj`anY=AJ31?yy6y52HC)-z%Zmn-GZ0pr_!TEygcoTQooIO<58R@b0XKa0U7%zgLOUEGyla2BvcRyOQNO^zCu@_ z8j7iPkSI}^B0$&>FM50&J1Sa_^kUC0-jUJV z&6^G`?M!9<#$eHJe5#TCjz{7ffQL260A!l?6S+-I$qUHsUJcEqIGU zH66hNXj6R@jc2%@NzOI`#>7mBFM+cng=|kceu-CJud>X+uqy|~jvH_DyT~Z96$xax za(LSO-0mD4!Da7Lv$e9lx%EIX<-aO6%C+n(;Jwg{ucl^XyQRM(4tBiKhQ8x#F`ty^ zBKStb!R2ib#TPaCKgBo97SjO$#3h`67(wbY#^oEU*J!Zun%`nOs9p?(k)&3r^Kl5v zzdMX3WZ@l**$tdvEi${vtwy#@V5Xg*CnRFg``Xg+mDo5s@L3_JGE%{*T0K0JS)4ndfKj^JeBdJliXVZTT%`!Eg=~>28y(C4~Kc`yc;8ajqMU`h)&0W*SfB+%07udEvn=>xXlLl?NTX zTHcTXBoyl$PDew`_2nHXH(f`GcEg2XcpKcO$aYYCogZf&4gR}dYfN+_WI+{ z=3FTuKc2YMDKG6CBBf<7PWn|XArT(tayGR$MzXZBMQ_Yrf=gyRW~&>13m4O}<=}Ei zxGZ^t;xD_ye(h?oFI+o+}sP zw>fHHr^_E%wwya*D%b8_j*yhLnfWBxDVv(v*Cw+83>}&c)G5%Soz}msZqwbwf=~$BiXd)>PG2 zuiIu58?Flq$)=p*@mL=>V&slVYP?X`0E(< z!9jdGUQi477gWGxdB+sxtxB(=aWA~X6CxUYA~T@Qlpd&RAyYF zYcZ5j|4&ApshII1ve5_W~I{j3Zvrb6cZho_3894%+ua@NQcWapl|I*zw8cvHl zk$Uyzx>+sihY&{X?OElTsD-5)?Q+i*GK(F{td*>I`XBUMb^}R^fsu@h`FES&m3#Y0Vi~`^gGQ^VK61 zKeT}G9Uixu7ar3hjWu?Q3Nb$Xr3X}!tE^$KH=W*S(9zERE14x+R5po+L&l?`D~<~V zbEb6zdA$VkhJJtEy7+wl$$`}w_MTO{Ja7yT7zD3|ui2SpnVp%~KKg3$wEhVo+<=05 zz*T=1hj4b{9O4)c_m7Xw&~RXSI@wf3x8PA-qDxcKLKwa_2;d^8{s}Gx$An_ z(I^#aD#yWS*-lTm>w|cDmc+doW&q5WF4Sgk{JL5=KyDHT*hyw%Lb#Qkd|Q{BUYEQI z>e(J~31mbFMc4!;QGfO?jPL;k*f$Y*VWXSRn1opIts*`V#R~L;H~QT@KkN~GeCNJ; zgRgu%!&hh@uY4)6cmy&$J4iyUisnYij_DEEEd(FC>N%?bO*W3w>DpNcqQ&YDg%DjL z;T)d@m{bn?w4DGD-TUqk?Tj~_Mu5jOL&%Z`{b9*miI!n}lD~&E8imHXM8;%^k*L9D zWy&$t_`OB`D33}|=K26Ek(CVEr}8U{i&~cWfi=u)$-C)!8h8x+W1Dn{dCu>^>)^#s zqw((DJ6qgmI_Ul5t`y!O;)pANbY07I>u4>NIWh|@UMjP|y+KFHVvz;5BO;46RW%i} z(hBoor;<4Xk-(W%iVsD5-ViZO0A>?k0*)2;)JuVvn|W#b@=(neau)_VcnuJ}B7Er+ z*WjxsxH?8(uOgPIuk=~a$QRlvMJulb?9QN-qircG>Mig48NYKF9t{rHfk`WdrSEW6 z9@Jh_j{w`nGs?GYx;kGvXGD>nI|GVg;yz{Ev*80p6q1-d(P&`nSeCTBCLf;fH}0f? zBBA1CJR75bDrQ(BQN-=|-4kzsj`&z~+I*)hfUvp;VQpceV=}1ZU3cfn_c$4LLrsHmRT^%foxNwoLoGrzQKQ@1T9ta| zm*c-{)DG+5cl7E+ZEN^v6z}WwYa|oEO-f-MSVahIG5fLu`2EXdmR`X#M;q#PF?drA zqq&HRi5M3t#9rzvX^g}ZW49s7RXW5AJK;cu)2^7TB1=FTW6Jp3>BVt^0*rv$LYtpB z>7lhsY;B2euK=TLo+?@`PDDSOG$h1^6L5kI!Ck1S3F^n%ya1@MkSD2C8QFgDNUCVv z*;I$E;v zC&5I2uC4+XTvg4}PZz)`wmV<;FIwm7H~XS}jHie5;&}h3eYIL*nCtWki=9j}Oix8S zx4vohO`6LsYVJ`mT1hLR%V7%|l$d56cg2_epIV*6^VZ)!w>~w0(c5HA@tJS~m8iu2 z$=UJI#pi<-8LOdwgPP<6fcF`kF*oM%9;qik%5H_0{xMBvS`p9MUk#vB1{j*u*VbGA zFN#r-%mxEi$p&Ngph)5Yx|6Rf_FI5sK{jDXv=|uc|GK(+E>TJ*@h(P-XK+4HG5%-`IHFS7^|dtLI=H9Y(x;#T_y|yxYlr zGNh8IBb>rgx>e`&K^P2i`EEJ3xV0agVv9S;X4ryZ zJ}SSKxm{(_Yn5cz0<;m4>A(*WaXc$XtmRPv>SAu{tdh)G#huMbn&ozDn!Q)r)RLH( zqGq2tb!BPs`uMsW|Ab5LFuDVhg>9o77SgOylw#Bz;1X;&GkvV~DPHo8x(SkqTsx7+ z$I)Xz(Bkgc;y~2Pd??Zoc8ucKa8DL8&#b^QTQ2XlV?{aLdE%)BnpxJQMq_X6HAx2E zC*%;WEm=dwMSh`l{a7&FLIDU7<@qJ@av>>SE%jFa?YCt_FJb2(3J-z*LS*#dXNPTp zI`G>$kPSYB-E$0vG*)zqUs;zA6;>?)>!-7(QA5dP6Af@twA+(#WfbcPEmZ^ccbIw% zNQTyNY`rQbW8yCLE(b+@k961TS3-9YKPg;@r}y=4FyR(y{M_uG+T7ak zC1kok_`nTVIhS&3B2_7==+-L`cdE*~JOV`sGHx^h?i29!7l-rF1Ch zHR!gCo9-#xZ(8C#e~97}5QaF0~S{3ID-_ zU2R2T>wwLUe|-Oz^gj^2giI?nAflUX&)Y3HqR0_CunJ=lf*2a;BSCZa@43 z?NiALS1R&b;oZoD6c;EPFJxEp)666E9^%0!6 zfoz?4G9M&>sjwE2&;=lV)jurO=K*B)!+$;svRw5gLDWCt`_=5~oszUI?ePTZq+>?H37$mj3?~f56eK5S}V8;qfWci#%l#FkV4^1hDEHY=Ewa{o#WHy{&5YL z30;`yj2$~UJmg-0$g{71J}e$LGiUhOWv-X;Gqt(Bv7@BeS9c3(j5!CD>^k@Gk&{N{ zY&5Veb%w$S+V`iQU3(cmwb8Jo2^shqYn;e04_tWZ*9*Uzm1l$r~ zbGy;^{Q~)N%#vjz0w|Gr({=5D%!}S*D5Lj7wrME5W@QXtg7e(UjOPHH(6uVY$_dTibkiYbY=+Zfq;xn8riUi)LbX?9TBT z@ME|YM3pI0!l`QLsd2E}1xg1*;VS5n(A1%?{%YhBx>ib0=O5nhqif@?I5#iXqf>Vi z>ux`)>el0{KF6wC+v19jwDr8R-|L<0O>_~ryWu$G6>4|#pzDoTLAk0f}xe0ah&uJaukWuLsiDrzA zy~m*$7ZHB|g~VrNT2q!#;E_QX^hrd)m=@BBirm?uenohIt~!8QyEqI0)GwhRFp#&vrf*r{Om;ltK&qyqarB&= z3L&v!9%^~W>zg%4b#r=rbl^cfP0B;+mteXZ4>{`(E|9w#DNFe>aZ^Lts>+8)a*>5* zW7;P$P}gHr{3U1zp+UkX_N;X@Lc*=S-f&Xh-w+=m5d#ahwOXZ|GF4rInr&bkG)DZm zg}gk5vhOhYwqSe97K3|WXfDse;oAh8ezW=u%-Zxv`sIXPk<|U>Nv4Hp7l;)m^tHG#ZvefyDCz?dYJ#f|1Cz ziOvMiUF@M)lD$Lx{1|&VJo>bM+Cj`TpN5UXg8^^kq@ z49DWV+{_h|pbvTm9~2n;TPE^RvBT%hH(xYp5!*2EpH2_X_rF+YrG$p2BC$|ei^dqL zW{ow&cpV>-i?q%u2$O<#BlNAHXV=@^4gn!>g2X$K&vgtUJfE#=3jRN*68au?!I->g zj8+9394=c-bdlCV9!e)t(0O->-o5Nc z^E!J>!^^JQzX8QgqV8w{M<`I%uISnRSX&N%K?)y;i(O8ymx(@o@%j9`b>Yrn_VClD zF2yUhOby~`YD6nDR{-n;2Zt4H;$iEgg;PpcgBC9-j+PFA1v66^Wa1%H|ESYPV~D}$ zGx^V{Ku`K_Zlb7zA95Ui)hq^@=c0*GqIzLBK%XHk?WVT}_)_c-9Dgi!(x>h{O?qB3 zV>po(Hm4;tMk<%@rLLxQ>J@ym`=hT3VBgb0&6TnAYk7F)>~L4KS2zwOrgv6)$FNmP zHo%-{?@LC5$Ii05NWb$osH=#lkl?|sj){TUA7P`RdItr$da|9(u#W5;rq|siJ!NzM zq_h7XcBGgz{R{B%-y#KG7`_N`i6y`CAKn7gia=K!*xm>U7ac6QBl6*B^>udUa?jE6 zogwC95g-ke)lzPHFCo>I3UJ>m3~s+*S=YCuV%bWzBId&R%FYw4e4}4?mJyrolVAfw z$_~+2^xoQa99s;Weg(%`l&tZNte5M;TNh5e1Z-^wEH&ys?L%t9W$)H?FW?D5YD)&j*v;GBcu zrCe^&96YrDxpT9`?0jo~{;U;hc=LEk!U3xL)sH}qWnsQE7A*Ig8SU5HK6ubZT5^Zr zk>XA6yd9z?x@8-vBw-}Z7G48A!!;i2!(bHmn%5cntC_Ba)9lHQc))0~e5FIx%iaYP zjKgl2ra^*?Tk`{){Su|8(S^uv19pfyXyP^#Xq#$Pfib7$LcqF_3;>>TpaYF)ZO|DLa1paqL+WDt%cVDKkgi{2)w*sDY94*OPHgJ)(Mu-x@VLe;O%J;w#GebMQOHqW#uvngKPcd68x{l3xrKF zlHj&|eg8hbJByPk#1TJ6r#K6pd) z6P>vSEwUn|Z~ZEuFcK8?JcOSYl$_EDJ8_1UE)&~Fq3QdnM_SD)-jUY#niW+D5W@qJ20=bhV@xtcr;4fyrWtfr9j`9NsXhHZEllDTw^1m6t#8%7=)c@qV z_LJ!V%F5yD84>zx6K4W}&;(N;sDk1(r%`H@<#jT+6sMffB%}j7c(8IURv(xj7{bM|| zMnQ6|hnsf8ai|9)E`6m9p}7z@hRyVVldXjDqwU#sMw% z5xIC^-YfG#jE7U67{1)onpD_7A(~mHiZ<>%C%kI|anqL;mf07(+3P(Y{&REKSaa<2 z*|;@=`Rj(gFQiAUitu0%X7qW`k#8m@Mxtwj88SfHxt2`3cJ#IDRJMvM;wJA;5$X=v z$1>I_UZ5=#wM4qbUYaVSX&c&&SmP}wA6!S34BKcYCn&19^x8=Jt=c%mzpt{pf%MCk&->5s3D$&U+f!56iCYhqtp~sTD3BMl9O+&Z;%eAo&PK|Mcp8khCa7SFS7@tfyfDTMl=~ zDVeKh&E{dxk;6pqFdht$%Q4pPK=UvnT1ajcqJNVVaD$j{h9+`5i-25Nw1Z2|5W;|5 zkf;s42*Q{?qT4b(A&A1gW~1dP$0DDPJW*WOHqAjZBNeCW-oPEa@&}vO9Mejt+LoSg zk8<=7ze3d_$!Wl0p0pQk(BlgWs$PO_)Q>nHG7|cbW;h{kjG|oNt^piPP1-4d6_*D4 zeq6xRpuFjclXO=uD={*oaXQZf%L0@7@3{Hv{;`%O; zr6W!WMno>h`bd{*iS|a8Bbg5?HH4K}`GaU(2%=+lR2B`E?YN5{6$W|DR8K3KxuN>Z z+t`t0c7bgWjg)2+O`R0yicc{__dUKG1A389<5td+7}e)(JtK@(GxM0s5~nZ;yCE!8 z(OK!j>K;?P2NZf5s@x*aGG-Pn;`o5>hUfKCark|L&jb)!dX5{}IOM>tU~YHd{{l*Y zhC`+p4M6$rH_gq}JIR~9c z@ZQCE^|hV9y6}L&&JoP8~1?5zW@B; z&F0J3ggqhpNLKMGX~Wa(8b>Gk7P+6k5#)Es#J(}@<1%!cfBN)^2Z^H%K}!{}aoJdZ zwcW1)L$#rAhATe&Zj*uv4vWh(Gh#MYUp{PR6Z!m0a9i*($0FH)2fIYND{ShG=0HGe zQ{e2w?lom!q*b9CD8S#MJBXu8m(be?*4DO{-GrQVC^Z-S2Dnk*y<>RXlNhC-NLW&p z4sm`gOmG?EDogqPAgy3yRSOm0$e>bvZ`7GcWu$EIj2#ogeQ9BC5*Agbv5G8hQGYOl zncn<4onKW#P`F|(KH0+QXJ9UxBMxTBc0fd1+7z>?#(Tb&SztAPMOoT4m5?9g5}=RY z%h_l`q4g4EB!G*69SsZ=^OkVr421tAm}CtS&-Cn>X;`y6Wy17|oQ3r5%sN5Zz~6rO zEbC77v2}dVdH+kNjp4|f=dJyV&*v?(OS^7B7-hoU(KWe?V~_o)PTJO{TYBj&F;wSC z#eZ-w@jy+B)03^vsj|fAoSOdrW&A%aNt5;Itl1&goZa2#@qWAA*}rIClmn7CWzSx_ zihKl|IaBTgxLOg>(->EP)KA+?5$~L7NvE@ZpM%SkPfa$kEdfwq1_<3>Sn&>rj*hi7 zRThBIcUP)qNW0dkaPT2awlR*c_2l-JF`vJK z87C~bg~0`DC|E?1H8F;G>|hVV$^t!^-r}W2qnag7GoUm*X4qGZuQ(+YhOQj*OOlMfs>`KpH44;_YqT~ zd&)`*%wmW+f%9U=ioPvn#hs?PzU#MgiSbAZVZ3+_wBss!C^fgVA0&MRV+hcI`&)lLD=&8eYBucyHf@+3Gd=eda@g(@iOaiD^>=8-A6%5)=F1xg_GbITRPBaJY zmmiES!j!$%7MWmkQEdv#PvX%-$x8&+)n+~nIv1`X08jlu7!+9Y$smG*t5i>*J2o!L z-2|?$sH&DcQy7L&!qkr`wysKmT43Q~6Q{a{7;)<>D)RlC(?u&IjJz$Yh<*?PT?|@y zejgNSp05x&W;(wGJFZT=(U60W4-kQXB19xXUE8}}!9K)bvuVsX*wjsf!WI-8R*x#M~$W3<+1WB#Gq7e{bkIsDxGYg>IjQx_jwY9F{eOu+r* z$rEaZ@ut`KXaX>76)!fI*>uIIYMGTfr?T81CF44s)+qlbaWWPCb86qRq;VABwThJ0 z3CXR%y=El4 zOvTGX1mJw>*dJZuHIU*pH8XbdstK3DllMokL^^E@yilt8YBZRUWdZeVfLUr{76@bh z9E=W%Oai>SLcw|;h3jYvVx;=6k5CEn?@m#NP8Fqqxb(xjXm0lBpG z@utTPW7LDO+E8oMPm6u9y+Aw}SbudmH(kfL0^=;0cUPo>LRdE}7Zd=tZV*bYfzjL0 z1C~(;1RQuG&A^zD{b4d8v3+)}u*NB}$(eK{e@SGGMl`pvG*=#JC_6we21w!hTyf9cnDMvfVjLD(rU(&7an%bL!j5wNaEGG%hz#4$^cMgx=^#sCPGJS(F1xY zK8xq}!Q}Hc;LO~bvfvS{{kV`H1@c3ti+wx;nuU&RzO2eWl;Kzqg$^u`K@wbI4l*c^ z03p|@07*j9zKW-2A`~#-SNbl$Max{K9+ikiY5(MMU2e0otLki@n1Qe%&wxb)A=U49 z=nflWTBSh8qj|hdin%N^<@2<3nz{1vVC8UX#Y-n(NLQ4mv(S+r(1t`Zw?ucuWv}T; zv%Hn?Rq1s!K|OCbveH@0|0y<#pUlfebf^_OJL!aII+bhP{AFOF}y zu}#UIwKP`Lv}wqXR(rcocAxZmxj~m%rYnYWKYP@6%)-xSAEwrd+ObQ+!pPClZ%fmo zzpVpTFDLo$ye0$-W$K9HqzPhs4$DCeMH_)%cnk$1N8}1@v!oHRR;ItCHd;Uqk->TYYG_=KFMlm?Z@CWjBamS6LCDbSRS1CM z`2a&eyuY@yARtRt7pa2Yom{`$eL_D(H1x@wF_#Q3jUjyX?J0Gs70n!v?%y-VK6tIM zA$$UZL%^wV=`2@~53Y2=+-RRzz@QU77!i4j9}merwO+zE7CKAECx|Q&bZ2tWpAK(~ zi|fnNvm20k=Qxl4+?cZ1x3B%752%+ZYJr*K*Z{QWQ`eAsginXWVm=pNL-JJ2nV8W^ zP|l73>!%J6T=U_CeW3OX=7lsrub*~3GjbImktMQ z-BL4PKF*zigK-+((~xlUfh#wTsE57`PH2Ohsw6@0sauNpDR_@IZl1!vkY+7DkHNnW z$iF}U`F-Rsm=WzfO}_#2J4>VuKkw{3#ZQOisp)xQ1hoV|2Vk1_SN(U!KPLUz#qT&G z9R|ic$LEK{Ge2de$H<}r@!~W!YOuqRh z9W<9XR&d{5OA0LFJI>2hU|XE}o$BxVI?0itNldxx$yOCGZ^fOGnkpRaHP z)M_mq<0hdee%-I&Q~}zq^tXTYdO*!Gp=zb>BnX0{)Xyh?cqO9!uawCkyy9YLm5wE!Y9dp=`7Sf%ma6UGNW1wbk^kx{Q6i26y)Qh z^W*+xWK5Lt&c%4nH>CR?nApuu!m)vL%B_ zrCjtt%%|jU>wu#WDH0c=y`mF zeLUvRwd1;2fP`qmRV^VJTCPs1BbfI7`R|GCHo3(a8|h{$2#?v76VxXigqB7r$2?|z zXc_A9-<$h;UvtAZ_YSv`%4kYj#+2wciy;o=iy{6Z?Utk@H7i#Q`&U=jSPPS(Y%MIZ zhLc9VO+V-Yxlsdkcoq3cC}aY%%%^ZtZA~b_Qc#lf<~g|R-zr3away8oMOaV?zg8^# z!+=!fL%RRCPq58v5W7huC>hupTwfW}D0Bj`FyRiipb}M}TY6~)2i;TUQPEjip&7jY z;rZ`6=Z6qYi+%hRQ|erB`?W2q1@!3Oy-+DuCRa@arynGi*pUmyjaeF!`%2BUn<|E$abpaeA%MH*&e8F8ifAgq2wie%zafju{#O%wcZsOHqo%7J6ABtA?m?n|@YZD;5q!*mCOI zSSmI}P{W8;$uLbbIsRHzBNDs`yEROhZgf`9M>?ZDD_QJKxB+zsm5hkN_B<$@O~_*! zT+&Jg)Np$i61)v9GN|Vxozcl6gEri7v9VQc6FJ<$DjIJlrb;#mg!jqaUl4!ZbvoqQy-yCE+{nYSN zoYlH88EyGe^DmreyPEW*PMS)9n<=XiUz_t&GPf)uV1DU7lk$yO zXgcm0OaeWKOOs^ZFf5x|E_r&e59_rUMAH`_IeB_0FRH156d{fs98~krC@w0Q%>@6S z!LVW_H7H*@k+sTQ;W_{V(GO8*5_tt#Ucu&3yjUm+#9sgH#F+L^hBvQJq+U;4mhUY@ z6+U~1zin~8Jsz0h9q);M44-k|#${%&w>EixaIXcnxyzVs$S=owgJm16;9Bx-L@c&e zO#!9Q;{OIvw(hzBT5;44%yqoEF=uYX{C0o~=i|qA5Oe0ZZE1wG+K!0FTJj?*fcTNn z`2}Q=ot>Sn=}OsY1=BT8z1{}4k$>;_mNR!;h?B-h9fZiP^oTxx+Z_8wnO@sX;bfk$nXx>nubJ?E#=}AQduKic|p&{ zxs~z=Obunx$nrvzqoj5VgexZ!m(?$YW{E!arljy6eh^#Iaa>7CG{0S~9@{$A26KfZotWdKK=4ya@Nbx(0`XqK21K zxi{-5&0)ZzU)zGxA>dU9Hsl3^FGCYt_fIFdhNiGF(HGA@i)yj>R?);WQ6-fB`dP${ zy(+SJH0p~9yo!TA*RB|7RTNuBoMD;JbAHiys}Hs2{0eV|Io(K&j;o2zK**p4r2_o5w+YQfR15e{FrLcT&+olx2kH1i- zQXo^aCTY%e5c5?xaf8@(yFvaDdqH=|dF;4$H}GZXQj z63_8QzpW@aPM(X&mH1ZF-MkvFF^O&3I8b`vICoDguLYWfAu(4u{RSezZ9{&<+&n)e z^NFB*Z1?`))aSHlJGG@to{_WByQ|?Vd6f#<7|uM(d_42X<+Vt;U(J6)=w{pD7$L_g z!RD7Gj6ay;H@=#a!nM3oC0tq@&XjPHP0{&P__P>1abu-iakZt|+)B48%y}#b_dJxB*Xn20ZDU6<~sH*q+@DW z&|0*B6xN(TBh!W&@_FW(Ax(j_)GF!9dA;Jsej*d zyuh>~!;X1`-A9|=)T1uNrKoSMUbO9NGqA^xfPMK0*zZ$Vsm?P{=bdBSak6%z6_LFN zkIcnFJT7FrJ|%KQVMw)RvH#4X72{-1O>aw?6y~cvWf$}> zE7701u;l8bn*~Ca1OXYt(hH*LNUmz210)gk0=#P%pYNckH;J{mYvT8wO&53yUdzxF zjC<^kW)7fXr1-$wD{hF|XxTeX3RjhQ=z4+FnY? zqo97_T13)Z>uLW7vo0A6s&3AxMK88`6Z{n?Nh(R6iRQoLX0H6T&P|e)msjhqagtMw zhb&`XS_c*bG+dY#t>E;^lyek7E2fFHkjp!6ay1~ErGU`G$BAg z1TM=S7H=RWQ6mvmPUWBSvb$>RU8CU($xRJWeh)20B)Ci!1ngv`J zEek+9WR6_`tde~?IvuJTyvUh)z(@abM({45<|=_6+`!Okt(ye0m>>%*g>)IaX4ru( z53i(k<4b^URpZ&^aBwl4&4wEV5A*hlMiI>|aU0Z)1hBH?B{TYN)N%oxA}?C3lJ`?= z^fie#6bi17-5C-jV&zata&ytzifCEfl+w9zEQX&tDKAvOl0vf@l0vuc2l7^%XL`D_ zhTwYe^KfQd_TP@dH5>K?%(|oPvYP@a3*825r!}>gwQIn_{PgZi4X|y&qWD9=wo54m z8WnCED$(`edOUbL#npyNqm$6_%)r6kus-?z@@}+qW^>H`UnKPbEyV>I2Q{VMQT>Tt)JL2Cutoi_e7)=shNs5)+h*%3SgE#hKO_-jhxmY!ZzB@nkw;vAs;7+O(ZdH8leOtb)W!!p zH@pB&*L2=aLJiPHI)v%4;uLV@7bYu8sq#|K3=DmLAwWVS0f{Jz!;nU}Gwy_j?PZ>3 z@HkXD6X(NHTNEEN5v@+lu>L$u@xaPTfEkO>^h%EMNcscj1#u)V3A*NkBG3%~lKK=@ z3r2*O38G30A>;f4gluu#2D;+F#MfO|2#gx4iOQ?t<#3oi4l#Q>{dqVxrnCOpnd)6< z5V}pgC38@urJq%t0%?|t{{Nh*DYeja_I7NX^k-@*(V*+)QS495=AApvKQSX{zsnZM zsr~=gjL`&kF7@VwwTFjH_2!_^+~ZQi z|C&?vdQEpLqnO{(c6$H{q{Z4hg-9=RRVAXqa576C{PojMKUK^dU!Pyxj394~RIlA! zWS=cpp<{@SxRu~J!164XbgZrMElqA%E{p9HS(yhE96+LwM-D`5Tpd`Wp>Z}kzi4`~ zj<1|R_Co4}Ojc9Ln*l!UJ`vA)+x}{(%v)vb8lt( zCgDom-C9aL_eQ34hI*E4vA?T*5`R|8XFuZ0I?~rGIr5zx=?hg-QqI5oqR@Ofh8OeqXIKRf+j)8X)El@Ln{u1dFf&Wht*rgwOHLENwi#U_(*YpeApG|0iT&|8oM?pG)$4ePglK{7lZ`X6DHYHl%gfgdq>Rsd#dzJpx z#5lh`KffHN9&*_y=WMxz_KQd&yuh4ms_~}sy5>>>RLYy6Z0IH?ZXuQXNy;5q|HNr< zo=zMHn5W%#8L|_+p@KF*HkT9Ya5Z&ciRrlBj3@oUtZxkZ<56-jPe1(wo3rxgrpP2+ zk#RaaIi(w-%}1xm=ZI`pGF8k$9%34?pQ+wO=qs;YdRJbB)E@@=Opt}q!N$w++9?f|bJ zf)yAqFa5^1xYEw+B<6Y}Q%C(|*Jk`O-xBCk_#aYSq0GR~Dno zO-S6tEd|t5Um-z>(-AJRK8jIS!9)aVQK$?1ddX=xy2IAuu?5c|FTK1rjc9E< zaKKP8LLF;Id?O}qCXEC*Sqq!CSPiUw8pk(d)j=mrlMge^f2^5$*et>Uy4h+lX;Olr znzkAWQLOICS?5Hm5NGYy?yt?4xu4eaKW*fHdY1pG*?1{IBGetBSv{WX?4F&RVm%rh zL!K9Fd&}&i%EUvsZzw!%BAN6f@|B|fQdeCHFpLF+ot!@`|C4+9(%XQz&4d2UWUl&drwjBdHH*ZASek4{MpPkMG?>12}US?rXkbVQ&80TN>v{%S5~E* zN@e#hd408fFeb57kz2Z8y_Den>XHzZU@oIH*wh~ZaQ!42Gd8>f4iiszV!T4Ie^Hx; zc(A30HxI_si>iHby}#%?DA}SRRP|7}Wgz@Owd276$mj*KxG{*}skC-b$t6j`p|SJ$ zynhGkl30P&l~yd81X^I=`|TZN!lOkHxQ=d-ObOLLo_>*o8cyRY0ll2_CFuP2!`aE< z;YYE$CAgudawrl)@Z6|18b8rilQn*Ay`NX1X%#;`==x0vj`grN9RQvAD+nxtr(8jGAzMTQrQ4?k}R1RB5NU45ok$ z+QY}zmNn&B$#*Mf<3@~Ry(ElXZAJ4bqA#7nbGk4%EY0XAYVkM`rqJkWx zYk@JK`(#7AF&Osy@JDnbj?y)@$6(+lY{yVuMyGDL!@M2SXb^Iiqd@dA_0yHAr?OH~ zqs~lx7y3~t9)M>$vo&Z&JS9opv5WdsHL*FwN&NQPyn?O6t}0vst@CMJ&c}uo_NjWj zfPYatHBW2X$EQ0`8T&$&XFLcIn%&E2Iyj{qsqVZpPPNlfaHkw<+;x@rA#6a`zN@d- zmkrSpiVHFas!<~v-q5;QYdQkF{4tyg%&5HZ7(8%en;%)H+=a=w$TNHEEXLY{f-S~m z#<>UI*=tqWw~Ezh3C(3I?eQSrL`-5^YcN1vl$B;I2QM7&IYN(m)Hl1c1M$a%F534i z<Ztd2k0>w2NP&0F+1R6rW2c_9O7BS-Cp-Z2YoC# zW@U-SOAe>=(G__YrS~ljhm)zsnCiFHPovM_O1b&!)!r$4DUVr##LnyWL5y-8qBPwC zJ&pUnW@}7!`l{iydfD^z0P*8Zj7%L^th0s zp#`MaIiiaLbZ$DV%E`}8+-uORQ(7Z?SPVsLShVCwY5Cs=jWB<7BnapMe&vm@d)7KQ z_G|)5r}-WKi}0U7_wC@mz7_ME#Csau{cs*wUVur82_KR3fvk<0+~TVV2y7u}P}2}^ zD^s`Xi)G+SfVVeqKq0{>qze$~Sm?y`O(->40ep&^v;A*V>nh14>_@=}6cW%sP|DF) zl;9W=d2s6q#p8Z=+~10T5AwqRYGKY!eSDW^PfuM33kM9t^u;$GzRgGE=PCJ zO^>FSGIBpe8XaWv;jEs@LT&C!y$jo%SK$;raUN@2R?t)a1l;B$q_P6!{7XP9_ytn& zk`$3;z$nQ4n`+aS`Y63aLefN4we$Wr94v-}b==aOi(3&DAdSGaF z&FUvgF>|7%?HV`)GSddS9@d`^H{JeMw}2KUWlsfkTi~>YKCnBzSu(q2#A{MCCE6%4O?`I!Ky$H zy<6T4x%Aqq!^6yNuq<1=;}%y9?o_<3H@~R$f6CT1YWo{s_cfl=v|qgNPCjpNjW3&R zesfg-Am=kx!xgA5X4AvQot(d`;uwV45vCi_t(m`FanLZf`Y!Azwtb zH|wp_gWj7k#kV+0j%ak|&mOH0_A3?)$hevjg)$vgl_*mMm|9bVM{81IMNf;Yxfs8* zq9;^sRBQ`+7H0~gOCx|%98b%3&y}iKHLqn_8E_Z%3+Tvc2eS)D)eoc5A2}$sakiSZ z#&FH)dCdbMSygTFL3nUJS0xxBrJ1SaXMZ8vzzbtjT^E@@ofI*#HQ-pDDjRHp$y`gzMqZtdn9A)@^d0&?hAC0RwEq3fBq z^7sQaYkLlW>Jv1yv`4-iBkaMWlJ!c)i3&X`fr|gqTTK9$P037Dr&OqvBhb$|v9@Ij z%JuNlP^EaPhJ#Ou?R?@7PwY9co;19LS)A?lcH5`j{e3)4_!~aLKJIjTr|q-O$+60_9GEOUw3@E;o>?P&_zJ0T7Y|)VLjANN%5`Mc*@VL zp9wJNfxHU~)MG;-eKcr!J_-h*MoazlDi8B%mLC+NenbKPHC9SY%*lZUGMlbb5~mlZ|N4xaD{+t!XPF2IIiAU2KiQ zl^C$Ra~`Lc+zp=}E8O@z{l>={RlpytTNhZ$XRGi5lX)rxVpuLnM0l~(lt0?0#>`k3pZUVw z>}H}qBw|=>L}CiZ0Gug){60!A<;7QtqCp-ituCasN2&VbbCq_Z-M9nALT*p%qEF|W zZY;`=Tr;6FnrClbx6l!?B{J`to_Fi`ZvDAp5%`q@kNCW&C_Dx#T{APupgb%bI_q^0 zj=QrQoZn~`zc`F|(J(ZmWXp$%3a;c>%MZy%EI_a6tsB(0y@JlB}2fs3U20zcrW&EDreuy-eR)!u%_en4%1S0tYW~FRsvQ783 z>abpypK+n%o6}J+M!ie5WxaIH!aC0KD6r#+N zhPm7m*GDQR`pEr#4$4-Se;qujMyt(Are_J8q8+IaUTsSJqqP+ofoApxz0ev9?A%TW zWtDSLx%Q;g4dNQ-1{!mo6(y<%+7t&n-FAlYEp{NhLv<|O$CBI@@ib1^!smHaMT)@< z)4p;SK0I1A&j-juROU>6%JBd$rX*y-Co>|2BavHV#T~{%B80=2XPUaV>(Ao7xC6OC z9Y8-fU}J`f&nxfuAWCYP=XVJN> zH(w#()tu%+(ri!)<)04vKsC^ucdKxQjsnF)(Uj^h73N8l6|#yotEU~RN7!6Zhr4)o z1|SQFZG4&NG#;l!qn;Q7&gy~4fr4KCZ+LEWxA*<$#_0GB&WrL!>3ADwP9=lmKRwrm zQ;o$qs8_Tb97B=bBR;s`*KOJ}vvu@N0w%W;T=ig>pMYSaqr57bjYbyIroK}i8+$7M zZPYfhb@2~=T-_3mmQ54HkD$PVFw&V!qZC?m8JdYPtBMVrgz6~a6GluL8nvJFzeEo7 zAFIcW7Y$Xu$pnQ~r7EERx1Bc7q|^Nts4(zIDok%*=RDI~V&^jKe^Pl!F2mq6hMe)W zTxee$M&l^CL^X3VV?7_@j~ zc(Kq699rPN|=I@+lPr zTAF*}oXh#VwhiOP%Bl#9O-V6pDM?Z7$IqRFt;%x&9m+R%@HNsV6(&oP$6?+}`X6HA zB5xsVLnZ^V3YV>vJ}Pq#pEV)Thv*{*YpMNjm$e)OnR5|3H7G9}{H2DpVS-|ftfoHJ z(3N&^cN)_DnP@l3DHn{=wo{bx4*vUj!M1gUmkW2ov?Cf);4TGmWe0^XjO5cGl~h93PukGIuH_Ej>AIVgKfn%7G3a0crfF!GL#thmH(kwH7+GDG~A%agg(|q?c2SY9{9QIhaPs z86~S#p)sR75#ONbfSxXliQ+>Tuu#)z;>&jfO6!{;-UdF6{tRc<^o-w->I&jGrAXg1cL zecbw21J|LXk3$cp;muAw?%TVH=>fvVjgqvzUh(+6ugBidU~V{h<{hVD+)OYV&bP z`kXPqASxveWgn{$x}+*&+9e>D99nIN7zd!ivS6knKm>FlqBMo=;co*5#DGNQrQ=)q z8D=^xl!_z`HIT)ypS7kw z$SUh$HxeLLWda9DxyP{_iQBt^MP?&tktw?&)Ca{EM0N$XMS1V0~5tkz5@5I}8&%j}c&C;Vm7L9&q=diuLom)KIIh=XGlUyCyOX z7%Zx*w9#Z^=A%CW9*Te+dxhW{0I8b<13V7|44?8z!;%DiVgkVlThv1iU$F~|_o)>k z?JEmowM)+|n7`I`b7OwH%?)R&@5%7Z6pXT5nzPjwiy#9!6F76~DX)v%aBzpH3o53W ztv$uO@;M!@36iX3a*V=tTcSGR$d`%=h!?!utBR*{?7> z`0(PH`(Z+FH`X^Z-SO`K-&ugMww&qn|uZUGOl~ora($~Otrw(2=HHxQz3;3rSz!v$i z16Yej5qYkT-Kf0Dwwjyr*Q;`7|E)GFo6ZWYt-02P%<}n=%;7h>8O?DlRod5>Mn$w! zENixpMhidQEiXC-ktwJ~q~_+q*qmk=@431^1p`AD9mjv2i4(+>}V(mV>$(}SHk)JdXgE|%sDN}(XDjVi;r>;>N`qQ zz>M2u#Q^FKaytH0E0#rae@7K-;cT2UTxl)ClB%L?Vd9#@vDRE31*I#ic+}Y{l6hEQ zhiIPhEsoS0qtT=uMI`g=jxQ9Fe9jD&5u*B7Di&jOzL=xluvJQwB`J&E(JJu%> zt%^K}2rCo`HMY(%Bh{>~K8jRh>Ctnfn#^kcVX}=!vXSaZo@g^e`Tr+LHjWhlsn(0ru@Ry zqf7GZ`)ELi0-oo5-w%n=fTrEB3UG)J7U{U5K}*clXv|BJsv`oimGX6b8xF{0LJMI{ zplXk{YJa5x>d!nJQ-FUxGcP#(=@QeLS>DEbx@3hGWYu;Zwn?8CbUh%tz7G1IE~a?k z9xDdL&EGV<7dz^F~7m^ZdjC_$Z5b1buh9RlP;$tw> zGG_pG>y$O+9*t9ZZ`+hXiyPBMh0}?ArYh8!%|0yT;&c@jGOd;!tRbDjDk8}M zzFBh$@;ft49#=P>0IwYlA36m82o@N?>o~>4vuX^uQS%7O(q917HWNT^m#388?4IIf z{J{HJ?vXNTnHrBxNf6p)ED=X^Q2y`=d)YDG4s*k@!5=gWy><5A?uwhhc9F`%dm!J? znc(CmK-ZqYgjAG!m$L3)J%kPohH#F~^xR`Km695aZtwvEp)HXE7oCbZXQbBmn+)`Y zNk$I}-i8VY%<71RHD!f`xQ@O01)M=9YJC?1u8t_x>YLs{az=+}<;!fsSK@rK9=dyl zsnNZjp2tPiTvlX{(dYIyPH&9%)(_;N)laT4X=$Ij1WTm1)w}BLdi8F-db3`=T(3@8 zC*?L4^@mFjT-ECp=gw%u0#^F_L&}; zFK(htv(na#NWeOZl@lNVEE0^o$IFhrqO0=ce|9^+$Xf`xa zvz6`ARe05(+?6#mu6i{VZBSu8%}I!Koeva(S$n~f+l&UJidEP~sfIBda4^57w$m>b zlW^+~MVR>G5TuBLd%#&mx}ptR2F89GPLUj7=^RPo9svqbHYgz~w8%yN-~&~uFyO$! z?;>lw+%tI=_{fPT$lnba%lj;gx|fkX4=!^I>vAsl2osQ#WS(hHlt;mUBMu5+jg}1u z)sOn(dwYDvlTfAdrcpQ#IT14xhAXjNG@}7)OzCKkLKqAn7oS-oF_4hUbzgTv^oTBm zXujJZDhz*^Z}Y!fZ8lc#)YTM!pwa)~9e+vC!$MTWk8}knXJo*7UTA|Rq&DNrA)^_h zukU}!U|NQTJz}(jLmC$db8v>SX|{zYP{A&m7ol+LarfUX;^a5@^fkj0{td&+jYV)) zYOdI~K;VH-_*=~gf7>1o=XCW|Vhen-kCAG8(FD?L^KcpFUeO3qHUeRe2;+}5P?Z*l zE_gISX4}84R&8Gh!M|0IStu&tn-*a*Gx+lfFC}Fvpg;z;Fu2(ACl_t#*F6Fn9w6N0 z1uk5m`4ElsWOAgu*J=%CD9}f;HEwE)uJT;7!X6I9IJnYhGO0b>X7CpeCnx9))%vjF7}L;xc- z9*c>-@dsA~y&l&|a1r)^dJtl6Y9T2Sxzb80FI&8w`1y%%coh&Wk_1pW8jZq>Up@T;{nJ_$}_;{PzT|8 zd_C@mL_gab;ymmJ*T5j&tYfk*U>={skT3l~ALcO7cN^kq;_(G1T+JD#&KgT}c_1$z zx*?lWIErtol+TN={gJ0)pEPS-Hq-mayOdT%Jf)} zmLMuhMvzHIFw>G%@a3FFH!bnBUvSnxa!&ZKiOkGiDgU8QT2#l)kxt{i5$Oc)6vKUR z4xH`=v6M0_*J?GHJ8u#vNpwEClSvMup~O_ohK#h)b3G-$_hH=s6sl0qNf`DonP>j@^%Y(NB&RMT zFEro$zZ<=7kbF7-eRn({ambCk0C9mno^NyOV<*q=Hg|;4$6=5hbo9g^FWxVGAb|>qa?8Fe4Q27fNhmfx2Wi zD1Fnps3y~ycH{xLnO4!^X&<_qkv@l&Qh*^d|N6sD|VG;w2=ZvCDw zq#nc8;N8<37RAP8it5NCqAPCPk&yOm&rw*5zT=jK6h%n9-G*kn7hjbxxHe^E6xA`!pHIeDCR^_#P=)NP2fb zxakm$bOtj+$MZVRz-+M_s4;kjWZ^-~92cY7b@Ynl+7xpmbE_kx46gu%`yt*IFOMAhl}E(|WKl;a>kA%K#*2Oun@=p&GMkK_d{)MU;j+@^IK;`b=-U5K;iyX#WI z0_pUDZLL3ETSq5vJ8faB-tJu}at(}jk!AC8F9MW6*h%Cz7PF}zTp3=8?<@01Z()i^l!YHHg?s)|V^Hqc+h^4UTT|IgV$-n;4y*c0l8Q3c{t>4_IoPT&I|wuYV0v zCX8Sj4M7h(4~NJ$r?|V*Q2?a#l5Yqo5Q&V>+yc8-#PQjYtz3GGI46pl&vUfR?Ze3C zMLk&Sh8U!lT0gB+khfTy3%V(^6sd) zl4&VdHqG0UvvaZd$H_4t|>f|}3wfW7EgZz`tc~rrl0cR27u<$AB z1v*=dROI)VLoxjQWqC&qo<06u<^Qhoe^>dxtNaTw zZR&$@=_~5{#jM(`@CRu9^SH97bssyPZFm7bY*(@wa4rNNTit&UqqW;AQu?XyJav9i zbHD?1e#K;WDDXg1eR3_0@%jQRCd5$~j8mB!7VnD&(#iMK;<-b*kxE=pGV~;7Qp#yn z@!c9lno0_9vNa4qcyPIV?f?)(+A&soDs#1NW&BB-h8c|Mp5FK7Bq6@o=CH!IM}`UK z>JP|Uxtq1^KZ27B)171~%Uc}agMk5M_nYPJwY|NTvzOpjnVlc8!GZ1gRSToX0tHm8 z%1vmO4aW9e%~y0yqdIEGU~`Ue&%MnR z>{T(J4S;)5K=TdL8!kEx1LgCGhgX_9G>M02aHj65%4YR^ONM+J^xG!27+Opg!j z?RrubqcHt3A+X>Fgcr2je}$NQyFb zmDvSq^RC1j*=>37%Uh`dM~jnMI#ub+x@WyZ5F=V=1_yCL599h)s^xjTDZwnct)D6%JcB#>@`Vb73XA<4J+|Bqp7`sXVZ=%e1Ti$nU z6dBig+dbg}8Wb1T1M<)hKrmQrxcG(YoeYN`g=dwmxIjho3uj=+F?aR#2CC999UL9C z&(J_*5HsrS?eXYv!RbjIF)NEF!{P8&#;hlGYMlRtjq;=_pezpexP7Pv!JK&sb5a8% zxn~EWfT;f3F_!f@?N317D{&sDmlh3KoFX|}O7_BkG|R;QU9P$9Xs$qaNW#fDvvEQ& zwnQo22_Mf`QmWsWb;l}OBsX0{SC%8s^lhDaIFxS}$8YhuM%mtH_`UD@GmL*+!{`2<`<(A{?&rBK z&frDjxIszt3blYyuClQc^q;LkY7|j)facT6>4fxot3%z5O}ET-Eo5no3n!HEhSWS) zaAwk#Iy0Q3gi$H&QzjKE(pS1^Hg0&4{rL1u!%ykSA*x57tj#QIejXfZwusX+XA8+x z?XnX~onVhoXIDFQFHLu@xShoAm(7?1v7q$lWv=dPRj`un;XL;E?uoH|jbK#vlfMGTcSX~!&_PlzLTo{TQmcmCPX>gji?A?vX#reP#G#2DwD z^d;iSk#`CTRJELo1|fd$ytvR6CDsC6wRLCpJU2e@`=6d1Sj`r{|2dV1o_3=13`*GX zTH?kBty{jo1V_tKmXb3BoE~s1y0~;w>nf4OaUEA5VoWKNh&yLyrMAk?Ii=~N#BsxQ zkt2FOFzPSXZSXZUzV?Pb55N4|BeDzqYe_OxqIZTLXinczNe=w^OD7%^@>9mKP>1n= z*jw<(lS6vx>+NVYnSzLFHC@VN894_%*-t5t8jCr($uS`R4u70kf0BLO71pH`3aoSD za6bQQR24W;k=#cZ+^UO}g2m&ja)h!j~Pi zpwR*us{7|lq{tihHEZ+FS&~cD6(&(A7I5r`shQkTwi#BOpyADswHg0t@5L;w6*;u@ zXZ+>0+G2vrw65+WRNL{vTK2^kXI82+{R_e+W;9JEH|pR@_|(I97L{0C`)23dR!U;i zbcW}P;nMtFRw>LH?>rDIU5XXl5uH2(L%9*NR*TN&Oi=^6x)PjqD zp2lk=9I4gM@i{tY+++Mz3xOW13XN4ZatmU5@7tgwO1?_=iVpP!<9Hc?Fu_yNGCQLmN;qo=zha%9gD7kS|7Y!*1|$}x@i09{*hmo zD~kOC77no(%0D#JjhVTIIm1|d*!QsDcWk{bI)t*J;&nFHB~CHX_L|Xni?)q(4tR6gNHUSJ@EFtd!&mFU9p1 zbU=T}-`K1{Yt|4Gv=6S8e7iuko{!V0r~i48#R01BkP9;7zjTl3f4OIcq3;}$c^=F7 z=la+&R=X3DIO!3_qMH=q@-yTo+7GYSyuybLAI6+d{&`*2DjpT2u|HQ!(A1l~_gNmb zj7*0a*#ZA*NqH80M04{jhYa7N#;!@6a$XQYU|8fGzp=JJa?;<9yr#UQvfo9SHWHcY z9YY+N>lYWA!jSTG6ld?9Sa}k4gSLJ2BfoHwP)D3G_TZ}*RpHV#O51#?o}0T zWUntTeSIn6IkWygcCqmd^U(UTZ5}~_5E*|SSCWuR=v4Ck@H;5cy)44yOZ&(%l{E6G z27v^&COLlYLra}Z0}9;Oxu|#(K6UdO-~7IXTZ&hRc?NF6r4{H6DH(^7s|G1W%Fhl* zb|onB(#@T}ndm+-oa5ZCn_?#uJo~ws<5mZ^F)i+RYIEx<&cAK!0HO3@Q?RwI!QI4w z(m-taMnXqxO9Pc8pXGpfYGstLh;ySXmjxq#%*SE@!#Y|r2fMrH8(Q_Xf6Pe@j)$xT zx1}CiH2Abe?Mlyaeasj;)U>4WZ3>S4Hfu=X>_d%uUh>;_~VcEI$e;!=^7PkoSqx%N63WcL9du_sPE2h`Zbgt`|+15*?g8p~XS0`zMPLQR`(@mIPfB%;MWI}TGJT+2jO24=nzqyZ~ayM3x^A=8KD%dh&^`b)rGdX^~Nj5D1(LD;8=n|Y-avF6<&9_TdMhgA~;{&gxWOalq@uY-@YzteP>clg@5YpPNu3DdRyi@>lH#kE$*@Im9q7+FhcRFe5Mk z$2MyP`$d9wx1ViCx*q%D@T+9Xn~qr?9nKPT&ODEoO~>CHkC7uw_asZYE}leCkBrb^ zwXEGYPjIR4vA&lfG^#vx3V)2p|3-;6Ln|UeE-i4sC&QmC3ULM3nIdn0^x%|23BvSF z`YDU5?gX|6ZO4zmj#bOy*33L_os0^>rzzPw;nv}-jGcmcqrP8wqRJ1C@hDs8BHP5i z-OCqJQ~7}Q$vV}0R4RV4`Lesj1wVg2gXmxoycL1kC6|dH*_{8f(NJ1$E z3tPtAbAMa_eY5lOCUX=fV8L;7I-_@zN4rM#Uh{n8xJs?N9A^{qh^c>PVVBOu?|H%RdwW{ ze3O-TqYC5{8x@y3JAFFMuSL7T!~|n4vkIgXt+glT&I?E-*RjUtl+pj1v#Z?bVR|a! zNK<_m`jk+?sCxFn+SBPHAGqgz49GGstzK4SqNDD~FqL$CIn@KBVwg$nztyihkcrUvp`J#fOxs#(wFN$oeMbP@QO2GdnL`e2!BHa;4f z<3gLfS>fVE^4ZF3xU9s0?q9}5AHod>oO_&$|V2VMb z-S=KW?nxoJFb4o<;Q%o1*fbR%IdRk4Xm8iO(Qz8f(=AY%)8t6S%@wv#9TX&rgt;1G z&~U_FiK`B~F`f#QSWOfFmL1|oy4x$bVG$S%+6jh5?uvGIFgN?%yCtG3Gjtb3AZJn>B}F#^ zwowEMjop=LBI;voA6*1R{KlFz)5dqUP!pJ&gE|HQ!+K)&T%bRLPVOXB?6;>$wdJz5 z7eF9f_TI4#TcX(^GXTD*k&#q6rf?gDs*A$z?NMUzVlCX>E>N!dA*1a~*%w+$VzEp; zJzNlOdu5xPC9$RE2mlxt(mJ~x*+R{*NY}05hyU&+L{TY0Nd``+6Y!!*Nej6x(j10z zhmmR)K_tEgn<)yV3B5$x4j!6P0%*>&JIu|=6|qZ|$T}nzYP^UC;4Xp!Fzs;H!rlL} zNEB>$k%_SPR~kfxFVyJ9s7Xxyj+bgn7=`xQRb3+aBk(iJSOx$(P2?ox%M@zhWDB#$ zBKIaO#)Y~vWdQi}7LWv7sYnBnaL7|GFu3b3*?gK!-W494#B5aRx z*p($BCzmnD*HZ;`9)1dvaOGmQI5Y|l+tqG~{KP$q=(mD87hUyeYn$~W8(nWbRjM1(t9GgJ@u2+y+qRW-duYbbfNQx zkRC{{Z0Y_-?v5}|yTU$^7V0$?;wD%n-M z1=+$8&M+_J?yg9reU|%QvX}yJ*>roRDN%L1A;oo23;>%S zWF$?kEbJfF9p=5uP;ZD)Ke*w`)dBz;7bVF(!^cT_U?gp;Lp(MeVfMQ&x)%^#)Uwcq zbO6AmmyG1hU7HdXpn1$!*SyL;HxJyDQ8Wf!TG%=0a?kyo;Qg zI@DljNJTlB8HubH65&ni4I)T7vG)Jfy=k@u{%d}%p&k`A@#o^umk!iVgfoe!#eV>1 C2IL(8 literal 0 HcmV?d00001 diff --git a/code/game/mssccprj.scc b/code/game/mssccprj.scc index b1297bc..bdb1859 100644 --- a/code/game/mssccprj.scc +++ b/code/game/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [game.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code/game", IVBAAAAA diff --git a/code/game/q_shared.h b/code/game/q_shared.h index 2b9c011..a440d86 100644 --- a/code/game/q_shared.h +++ b/code/game/q_shared.h @@ -1670,8 +1670,281 @@ typedef enum SS_NUM_SABER_STYLES } saber_styles_t; +//SABER FLAGS +//Old bools converted to a flag now +#define SFL_NOT_LOCKABLE (1<<0)//can't get into a saberlock +#define SFL_NOT_THROWABLE (1<<1)//can't be thrown - FIXME: maybe make this a max level of force saber throw that can be used with this saber? +#define SFL_NOT_DISARMABLE (1<<2)//can't be dropped +#define SFL_NOT_ACTIVE_BLOCKING (1<<3)//don't to try to block incoming shots with this saber +#define SFL_TWO_HANDED (1<<4)//uses both hands +#define SFL_SINGLE_BLADE_THROWABLE (1<<5)//can throw this saber if only the first blade is on +#define SFL_RETURN_DAMAGE (1<<6)//when returning from a saber throw, it keeps spinning and doing damage +//NEW FLAGS +#define SFL_ON_IN_WATER (1<<7)//if set, weapon stays active even in water +#define SFL_BOUNCE_ON_WALLS (1<<8)//if set, the saber will bounce back when it hits solid architecture (good for real-sword type mods) +#define SFL_BOLT_TO_WRIST (1<<9)//if set, saber model is bolted to wrist, not in hand... useful for things like claws & shields, etc. +//#define SFL_STICK_ON_IMPACT (1<= numBlades ) + return; + + blade[iBlade].active = bActive; + } + + qboolean Active() + { + for ( int i = 0; i < numBlades; i++ ) + { + if ( blade[i].active ) + { + return qtrue; + } + } + return qfalse; + } + qboolean ActiveManualOnly() + { + for ( int i = 0; i < numBlades; i++ ) + { + if ( bladeStyle2Start > 0 ) + { + if ( i >= bladeStyle2Start ) + { + if ( (saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + {//don't count this blade + continue; + } + } + else if ( (saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//don't count this blade + continue; + } + } + else if ( (saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//don't count any of these blades! + continue; + } + else if ( blade[i].active ) + { + return qtrue; + } + } + return qfalse; + } + void SetLength( float length ) + { + for ( int i = 0; i < numBlades; i++ ) + { + blade[i].length = length; + } + } + float Length() + {//return largest length + float len1 = 0; + for ( int i = 0; i < numBlades; i++ ) + { + if ( blade[i].length > len1 ) + { + len1 = blade[i].length; + } + } + return len1; + }; + float LengthMax() + { + float len1 = 0; + for ( int i = 0; i < numBlades; i++ ) + { + if ( blade[i].lengthMax > len1 ) + { + len1 = blade[i].lengthMax; + } + } + return len1; + }; + void ActivateTrail ( float duration ) + { + for ( int i = 0; i < numBlades; i++ ) + { + blade[i].ActivateTrail( duration ); + } + }; + void DeactivateTrail ( float duration ) + { + for ( int i = 0; i < numBlades; i++ ) + { + blade[i].DeactivateTrail( duration ); + } + }; +} saberInfo_t; + +//NOTE: Below is the *retail* version of the saberInfo_t structure - it is ONLY used for loading retail-version savegames (we load the savegame into this smaller structure, then copy each field into the appropriate field in the new structure - see SG_ConvertRetailSaberinfoToNewSaberinfo() +typedef struct { char *name; //entry in sabers.cfg, if any char *fullName; //the "Proper Name" of the saber, shown in the UI @@ -1786,8 +2059,7 @@ typedef struct blade[i].DeactivateTrail( duration ); } }; -} saberInfo_t; - +} saberInfoRetail_t; #define MAX_SABERS 2 // if this ever changes then update the table "static const save_field_t savefields_gClient[]"!!!!!!!!!!!! @@ -1972,16 +2244,32 @@ typedef struct playerState_s { saber[1].DeactivateTrail( duration ); } }; - int SaberDisarmBonus( void ) + int SaberDisarmBonus( int bladeNum ) { int disarmBonus = 0; if ( saber[0].Active() ) { - disarmBonus += saber[0].disarmBonus; + if ( saber[0].bladeStyle2Start > 0 + && bladeNum >= saber[0].bladeStyle2Start ) + { + disarmBonus += saber[0].disarmBonus2; + } + else + { + disarmBonus += saber[0].disarmBonus; + } } if ( dualSabers && saber[1].Active() ) {//bonus for having 2 sabers - disarmBonus += 1 + saber[1].disarmBonus; + if ( saber[1].bladeStyle2Start > 0 + && bladeNum >= saber[1].bladeStyle2Start ) + { + disarmBonus += 1 + saber[1].disarmBonus2; + } + else + { + disarmBonus += 1 + saber[1].disarmBonus; + } } return disarmBonus; }; @@ -2266,6 +2554,7 @@ typedef struct SSkinGoreData_s //qboolean baseModelOnly; int lifeTime; // effect expires after this amount of time + int firstModel; // which model to start the gore on (can skip the first) int fadeOutTime; //specify the duration of fading, from the lifeTime (e.g. 3000 will start fading 3 seconds before removal and be faded entirely by removal) //int shrinkOutTime; // unimplemented //float alphaModulate; // unimplemented diff --git a/code/game/vssver.scc b/code/game/vssver.scc index 3cc7cbe1c347d71931abfbd00ad0c107fda8570b..cf869e7796f3c7b047001bdf0ff236063724ac4e 100644 GIT binary patch literal 2272 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 diff --git a/code/game/wp_saber.cpp b/code/game/wp_saber.cpp index 4433fa2..7177400 100644 --- a/code/game/wp_saber.cpp +++ b/code/game/wp_saber.cpp @@ -17,6 +17,8 @@ static int victimEntityNum[MAX_SABER_VICTIMS]; static float totalDmg[MAX_SABER_VICTIMS]; static vec3_t dmgDir[MAX_SABER_VICTIMS]; +static vec3_t dmgNormal[MAX_SABER_VICTIMS]; +static vec3_t dmgBladeVec[MAX_SABER_VICTIMS]; static vec3_t dmgSpot[MAX_SABER_VICTIMS]; static float dmgFraction[MAX_SABER_VICTIMS]; static int hitLoc[MAX_SABER_VICTIMS]; @@ -28,9 +30,6 @@ static float sabersCrossed; static int saberHitEntity; static int numVictims = 0; -#define SABER_PITCH_HACK 90 - - extern cvar_t *g_sex; extern cvar_t *g_timescale; extern cvar_t *g_dismemberment; @@ -40,13 +39,19 @@ extern cvar_t *d_slowmodeath; extern cvar_t *g_cheats; extern cvar_t *g_debugMelee; extern cvar_t *g_saberRestrictForce; +extern cvar_t *g_saberPickuppableDroppedSabers; +extern cvar_t *debug_subdivision; + +extern qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); +extern qboolean WP_SaberBladeDoTransitionDamage( saberInfo_t *saber, int bladeNum ); extern qboolean Q3_TaskIDPending( gentity_t *ent, taskID_t taskType ); extern qboolean G_ClearViewEntity( gentity_t *ent ); extern void G_SetViewEntity( gentity_t *self, gentity_t *viewEntity ); extern qboolean G_ControlledByPlayer( gentity_t *self ); extern void G_AddVoiceEvent( gentity_t *self, int event, int speakDebounceTime ); extern void CG_ChangeWeapon( int num ); +extern void CG_SaberDoWeaponHitMarks( gclient_t *client, gentity_t *saberEnt, gentity_t *hitEnt, int saberNum, int bladeNum, vec3_t hitPos, vec3_t hitDir, vec3_t uaxis, vec3_t splashBackDir, float sizeTimeScale ); extern void G_AngerAlert( gentity_t *self ); extern void G_ReflectMissile( gentity_t *ent, gentity_t *missile, vec3_t forward ); extern int G_CheckLedgeDive( gentity_t *self, float checkDist, const vec3_t checkVel, qboolean tryOpposite, qboolean tryPerp ); @@ -64,6 +69,7 @@ extern qboolean PM_InAnimForSaberMove( int anim, int saberMove ); extern qboolean PM_SpinningSaberAnim( int anim ); extern qboolean PM_SaberInSpecialAttack( int anim ); extern qboolean PM_SaberInAttack( int move ); +extern qboolean PM_SaberInAttackPure( int move ); extern qboolean PM_SaberInTransition( int move ); extern qboolean PM_SaberInStart( int move ); extern qboolean PM_SaberInTransitionAny( int move ); @@ -94,6 +100,7 @@ extern qboolean PM_StabDownAnim( int anim ); extern int PM_PowerLevelForSaberAnim( playerState_t *ps, int saberNum = 0 ); extern void PM_VelocityForSaberMove( playerState_t *ps, vec3_t throwDir ); extern qboolean PM_VelocityForBlockedMove( playerState_t *ps, vec3_t throwDir ); +extern qboolean PM_SaberCanInterruptMove( int move, int anim ); extern int Jedi_ReCalcParryTime( gentity_t *self, evasionType_t evasionType ); extern qboolean Jedi_DodgeEvasion( gentity_t *self, gentity_t *shooter, trace_t *tr, int hitLoc ); extern void Jedi_PlayDeflectSound( gentity_t *self ); @@ -105,6 +112,8 @@ extern qboolean Jedi_CultistDestroyer( gentity_t *self ); extern qboolean Boba_Flying( gentity_t *self ); extern void JET_FlyStart( gentity_t *self ); extern void Boba_DoFlameThrower( gentity_t *self ); +extern void Boba_StopFlameThrower( gentity_t *self ); + extern Vehicle_t *G_IsRidingVehicle( gentity_t *ent ); extern int SaberDroid_PowerLevelForSaberAnim( gentity_t *self ); extern qboolean G_ValidEnemy( gentity_t *self, gentity_t *enemy ); @@ -139,6 +148,7 @@ extern cvar_t *g_saberNewControlScheme; extern int g_crosshairEntNum; qboolean g_saberNoEffects = qfalse; +qboolean g_noClashFlare = qfalse; int g_saberFlashTime = 0; vec3_t g_saberFlashPos = {0,0,0}; @@ -418,6 +428,17 @@ void WP_SaberAddG2SaberModels( gentity_t *ent, int specificSaberNum ) } } int handBolt = ((saberNum == 0) ? ent->handRBolt : ent->handLBolt); + if ( (ent->client->ps.saber[saberNum].saberFlags&SFL_BOLT_TO_WRIST) ) + {//special case, bolt to forearm + if ( saberNum == 0 ) + { + handBolt = gi.G2API_AddBolt( &ent->ghoul2[ent->playerModel], "*r_hand_cap_r_arm" ); + } + else + { + handBolt = gi.G2API_AddBolt( &ent->ghoul2[ent->playerModel], "*l_hand_cap_l_arm" ); + } + } G_CreateG2AttachedWeaponModel( ent, ent->client->ps.saber[saberNum].model, handBolt, saberNum ); if ( ent->client->ps.saber[saberNum].skin != NULL ) @@ -591,6 +612,56 @@ void WP_SetSaberEntModelSkin( gentity_t *ent, gentity_t *saberent ) } } +void WP_SaberFallSound( gentity_t *owner, gentity_t *saber ) +{ + if ( !saber ) + { + return; + } + if ( owner && owner->client ) + {//have an owner, use their data (assume saberNum is 0 because only the 0 saber can be thrown) + if ( owner->client->ps.saber[0].fallSound[0] ) + {//have an override + G_Sound( saber, owner->client->ps.saber[0].fallSound[Q_irand( 0, 2 )] ); + } + else if ( owner->client->ps.saber[0].type == SABER_SITH_SWORD ) + {//is a sith sword + G_Sound( saber, G_SoundIndex( va( "sound/weapons/sword/fall%d.wav", Q_irand( 1, 7 ) ) ) ); + } + else + {//normal saber + G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); + } + } + else if ( saber->NPC_type && saber->NPC_type[0] ) + {//have a saber name to look up + saberInfo_t saberInfo; + if ( WP_SaberParseParms( saber->NPC_type, &saberInfo ) ) + {//found it + if ( saberInfo.fallSound[0] ) + {//have an override sound + G_Sound( saber, saberInfo.fallSound[Q_irand( 0, 2 )] ); + } + else if ( saberInfo.type == SABER_SITH_SWORD ) + {//is a sith sword + G_Sound( saber, G_SoundIndex( va( "sound/weapons/sword/fall%d.wav", Q_irand( 1, 7 ) ) ) ); + } + else + {//normal saber + G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); + } + } + else + {//can't find it + G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); + } + } + else + {//no saber name specified + G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); + } +} + void WP_SaberSwingSound( gentity_t *ent, int saberNum, swingType_t swingType ) { int index = 1; @@ -611,17 +682,13 @@ void WP_SaberSwingSound( gentity_t *ent, int saberNum, swingType_t swingType ) index = Q_irand( 7, 9 ); } #ifdef _IMMERSION - if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) - { - G_SoundOnEnt( ent, CHAN_WEAPON, va( "sound/weapons/sword/swing%d.wav", Q_irand( 1, 4 ) ) ); - } - else - { - G_SoundOnEnt( ent, CHAN_WEAPON, va( "sound/weapons/saber/saberhup%d.wav", index ) ); - } G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberhup%d", index ), FF_CHANNEL_WEAPON ) ); -#else - if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) +#endif // _IMMERSION + if ( ent->client->ps.saber[saberNum].swingSound[0] ) + { + G_SoundIndexOnEnt( ent, CHAN_WEAPON, ent->client->ps.saber[saberNum].swingSound[Q_irand( 0, 2 )] ); + } + else if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) { G_SoundOnEnt( ent, CHAN_WEAPON, va( "sound/weapons/sword/swing%d.wav", Q_irand( 1, 4 ) ) ); } @@ -629,19 +696,30 @@ void WP_SaberSwingSound( gentity_t *ent, int saberNum, swingType_t swingType ) { G_SoundOnEnt( ent, CHAN_WEAPON, va( "sound/weapons/saber/saberhup%d.wav", index ) ); } -#endif // _IMMERSION } -void WP_SaberHitSound( gentity_t *ent, int saberNum ) +void WP_SaberHitSound( gentity_t *ent, int saberNum, int bladeNum ) { int index = 1; if ( !ent || !ent->client ) { return; } -#ifdef _IMMERSION index = Q_irand( 1, 3 ); - if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) +#ifdef _IMMERSION + G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberhit%d", index), FF_CHANNEL_WEAPON ) ); +#endif // _IMMERSION + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hitSound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].hitSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hit2Sound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].hit2Sound[Q_irand( 0, 2 )] ); + } + else if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) { G_Sound( ent, G_SoundIndex( va( "sound/weapons/sword/stab%d.wav", Q_irand( 1, 4 ) ) ) ); } @@ -649,17 +727,139 @@ void WP_SaberHitSound( gentity_t *ent, int saberNum ) { G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberhit%d.wav", index ) ) ); } - G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberhit%d", index), FF_CHANNEL_WEAPON ) ); -#else - if ( ent->client->ps.saber[saberNum].type == SABER_SITH_SWORD ) +} + +void WP_SaberBlockSound( gentity_t *ent, gentity_t *hitEnt, int saberNum, int bladeNum ) +{ + int index = 1; + if ( !ent || !ent->client ) { - G_Sound( ent, G_SoundIndex( va( "sound/weapons/sword/stab%d.wav", Q_irand( 1, 4 ) ) ) ); + return; } - else + index = Q_irand( 1, 9 ); +#ifdef _IMMERSION + if ( ent->s.number < MAX_CLIENTS ) { - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberhit%d.wav", Q_irand( 1, 3 ) ) ) ); + if ( !ent->client->ps.saberInFlight ) + { + G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberblock%d", index), FF_CHANNEL_WEAPON ) ); + } + } + if ( hitEnt && hitEnt->s.number < MAX_CLIENTS ) + { + if ( hitEnt->client && !hitEnt->client->ps.saberInFlight ) + { + G_Force( hitEnt, G_ForceIndex( va( "fffx/weapons/saber/saberblock%d", index), FF_CHANNEL_WEAPON ) ); + } } #endif // _IMMERSION + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].blockSound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].blockSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].block2Sound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].block2Sound[Q_irand( 0, 2 )] ); + } + else + { + G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", index ) ) ); + } +} + + +void WP_SaberBounceOnWallSound( gentity_t *ent, int saberNum, int bladeNum ) +{ + int index = 1; + if ( !ent || !ent->client ) + { + return; + } + index = Q_irand( 1, 9 ); +#ifdef _IMMERSION + if ( ent->s.number < MAX_CLIENTS ) + { + if ( !ent->client->ps.saberInFlight ) + { + G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberblock%d", index), FF_CHANNEL_WEAPON ) ); + } + } +#endif // _IMMERSION + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].bounceSound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].bounceSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].bounce2Sound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].bounce2Sound[Q_irand( 0, 2 )] ); + } + else if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].blockSound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].blockSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].block2Sound[0] ) + { + G_Sound( ent, ent->client->ps.saber[saberNum].block2Sound[Q_irand( 0, 2 )] ); + } + else + { + G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", index ) ) ); + } +} + +void WP_SaberBounceSound( gentity_t *ent, gentity_t *hitEnt, gentity_t *playOnEnt, int saberNum, int bladeNum, qboolean doForce ) +{ + int index = 1; + if ( !ent || !ent->client ) + { + return; + } + index = Q_irand( 1, 3 ); +#ifdef _IMMERSION + if ( doForce ) + { + if ( ent->s.number < MAX_CLIENTS + && (!playOnEnt || playOnEnt == ent) ) + { + if ( !ent->client->ps.saberInFlight ) + { + G_Force( ent, G_ForceIndex( va( "fffx/weapons/saber/saberbounce%d", index), FF_CHANNEL_WEAPON ) ); + } + } + if ( hitEnt && hitEnt->s.number < MAX_CLIENTS ) + { + if ( hitEnt->client && !hitEnt->client->ps.saberInFlight ) + { + G_Force( hitEnt, G_ForceIndex( va( "fffx/weapons/saber/saberbounce%d", index), FF_CHANNEL_WEAPON ) ); + } + } + } +#endif // _IMMERSION + if ( !playOnEnt ) + { + playOnEnt = ent; + } + //NOTE: we don't allow overriding of the saberbounce sound, but since it's just a variant on the saberblock sound, we use that as the override + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].blockSound[0] ) + { + G_Sound( playOnEnt, ent->client->ps.saber[saberNum].blockSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].block2Sound[0] ) + { + G_Sound( playOnEnt, ent->client->ps.saber[saberNum].block2Sound[Q_irand( 0, 2 )] ); + } + else + { + G_Sound( playOnEnt, G_SoundIndex( va( "sound/weapons/saber/saberbounce%d.wav", index ) ) ); + } } int WP_SaberInitBladeData( gentity_t *ent ) @@ -1072,7 +1272,7 @@ qboolean WP_GetSaberDeflectionAngle( gentity_t *attacker, gentity_t *defender ) } -void WP_SaberClearDamageForEntNum( int entityNum ) +void WP_SaberClearDamageForEntNum( gentity_t *attacker, int entityNum, int saberNum, int bladeNum ) { #ifndef FINAL_BUILD if ( d_saberCombat->integer ) @@ -1087,10 +1287,58 @@ void WP_SaberClearDamageForEntNum( int entityNum ) { return; } + + //FIXME: if hit their saber in WP_SaberDamageForTrace, need to still do knockback on them... + float knockBackScale = 0.0f; + if ( attacker && attacker->client ) + { + if ( !WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].knockbackScale > 0.0f ) + { + knockBackScale = attacker->client->ps.saber[saberNum].knockbackScale; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].knockbackScale2 > 0.0f ) + { + knockBackScale = attacker->client->ps.saber[saberNum].knockbackScale2; + } + } + for ( int i = 0; i < numVictims; i++ ) { if ( victimEntityNum[i] == entityNum ) { + //hold on a sec, let's still do any accumulated knockback + if ( knockBackScale ) + { + gentity_t *victim = &g_entities[victimEntityNum[i]]; + if ( victim && victim->client ) + { + vec3_t center, dirToCenter; + float knockDownThreshHold, knockback = knockBackScale * totalDmg[i] * 0.5f; + + VectorAdd( victim->absmin, victim->absmax, center ); + VectorScale( center, 0.5, center ); + VectorSubtract( victim->currentOrigin, saberHitLocation, dirToCenter ); + VectorNormalize( dirToCenter ); + G_Throw( victim, dirToCenter, knockback ); + if ( victim->client->ps.groundEntityNum != ENTITYNUM_NONE + && dirToCenter[2] <= 0 ) + {//hit downward on someone who is standing on firm ground, so more likely to knock them down + knockDownThreshHold = Q_irand( 25, 50 ); + } + else + { + knockDownThreshHold = Q_irand( 75, 125 ); + } + + if ( knockback > knockDownThreshHold ) + { + G_Knockdown( victim, attacker, dirToCenter, 350, qtrue ); + } + } + } + //now clear everything totalDmg[i] = 0;//no damage hitLoc[i] = HL_NONE; hitDismemberLoc[i] = HL_NONE; @@ -1102,13 +1350,14 @@ void WP_SaberClearDamageForEntNum( int entityNum ) extern float damageModifier[]; extern float hitLocHealthPercentage[]; -qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, qboolean brokenParry, saberType_t saberType, qboolean thrownSaber ) +qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, + qboolean brokenParry, int saberNum, int bladeNum, qboolean thrownSaber ) { qboolean didDamage = qfalse; gentity_t *victim; int dFlags = baseDFlags; float maxDmg; - + saberType_t saberType = ent->client->ps.saber[saberNum].type; if ( !numVictims ) { @@ -1220,6 +1469,8 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, { gentity_t *inflictor = ent; didDamage = qtrue; + qboolean vicWasDismembered = qtrue; + qboolean vicWasAlive = (qboolean)(victim->health>0); if ( baseDamage <= 0.1f ) {//just get their attention? @@ -1232,17 +1483,32 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, {//already being knocked around dFlags |= DAMAGE_NO_KNOCKBACK; } - if ( g_dismemberment->integer == 113811381138 || g_saberRealisticCombat->integer ) - { - dFlags |= DAMAGE_DISMEMBER; - if ( hitDismember[i] ) - { - victim->client->dismembered = false; - } + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_DISMEMBERMENT) ) + {//no dismemberment! (blunt/stabbing weapon?) } - else if ( hitDismember[i] ) + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_DISMEMBERMENT2) ) + {//no dismemberment! (blunt/stabbing weapon?) + } + else { - dFlags |= DAMAGE_DISMEMBER; + if ( debug_subdivision->integer || g_saberRealisticCombat->integer ) + { + dFlags |= DAMAGE_DISMEMBER; + if ( hitDismember[i] ) + { + victim->client->dismembered = false; + } + } + else if ( hitDismember[i] ) + { + dFlags |= DAMAGE_DISMEMBER; + } + if ( !victim->client->dismembered ) + { + vicWasDismembered = qfalse; + } } if ( baseDamage <= 1.0f ) {//very mild damage @@ -1257,8 +1523,11 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, if ( victim->takedamage ) {//some other breakable thing //create a flash here - g_saberFlashTime = level.time-50; - VectorCopy( dmgSpot[i], g_saberFlashPos ); + if ( !g_noClashFlare ) + { + g_saberFlashTime = level.time-50; + VectorCopy( dmgSpot[i], g_saberFlashPos ); + } } } if ( !PM_SuperBreakWinAnim( ent->client->ps.torsoAnim ) @@ -1357,11 +1626,76 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, {//do knockback dFlags &= ~(DAMAGE_NO_KNOCKBACK|DAMAGE_DEATH_KNOCKBACK); } + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].knockbackScale > 0.0f ) + { + dFlags &= ~(DAMAGE_NO_KNOCKBACK|DAMAGE_DEATH_KNOCKBACK); + if ( saberNum < 1 ) + { + dFlags |= DAMAGE_SABER_KNOCKBACK1; + } + else + { + dFlags |= DAMAGE_SABER_KNOCKBACK2; + } + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].knockbackScale2 > 0.0f ) + { + dFlags &= ~(DAMAGE_NO_KNOCKBACK|DAMAGE_DEATH_KNOCKBACK); + if ( saberNum < 1 ) + { + dFlags |= DAMAGE_SABER_KNOCKBACK1_B2; + } + else + { + dFlags |= DAMAGE_SABER_KNOCKBACK2_B2; + } + } if ( thrownSaber ) { inflictor = &g_entities[ent->client->ps.saberEntityNum]; } - G_Damage( victim, inflictor, ent, dmgDir[i], dmgSpot[i], ceil(totalDmg[i]), dFlags, MOD_SABER, hitDismemberLoc[i] ); + int damage = 0; + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].damageScale != 1.0f ) + { + damage = ceil(totalDmg[i]*ent->client->ps.saber[saberNum].damageScale); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].damageScale2 != 1.0f ) + { + damage = ceil(totalDmg[i]*ent->client->ps.saber[saberNum].damageScale2); + } + else + { + damage = ceil(totalDmg[i]); + } + G_Damage( victim, inflictor, ent, dmgDir[i], dmgSpot[i], damage, dFlags, MOD_SABER, hitDismemberLoc[i] ); + if ( damage > 0 && cg.time ) + { + float sizeTimeScale = 1.0f; + if ( (vicWasAlive + && victim->health <= 0 ) + || (!vicWasDismembered + && victim->client->dismembered + && hitDismemberLoc[i] != HL_NONE + && hitDismember[i]) ) + { + sizeTimeScale = 3.0f; + } + //FIXME: if not hitting the first model on the enemy, don't do this! + CG_SaberDoWeaponHitMarks( ent->client, + (ent->client->ps.saberInFlight?&g_entities[ent->client->ps.saberEntityNum]:NULL), + victim, + saberNum, + bladeNum, + dmgSpot[i], + dmgDir[i], + dmgBladeVec[i], + dmgNormal[i], + sizeTimeScale ); + } #ifndef FINAL_BUILD if ( d_saberCombat->integer ) { @@ -1376,7 +1710,9 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, } #endif //do the effect - //G_PlayEffect( G_EffectIndex( "blood_sparks" ), dmgSpot[i], dmgDir[i] ); + //vec3_t splashBackDir; + //VectorScale( dmgNormal[i], -1, splashBackDir ); + //G_PlayEffect( G_EffectIndex( "blood_sparks" ), dmgSpot[i], splashBackDir ); if ( ent->s.number == 0 ) { AddSoundEvent( victim->owner, dmgSpot[i], 256, AEL_DISCOVERED ); @@ -1401,7 +1737,7 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, return didDamage; } -void WP_SaberDamageAdd( float trDmg, int trVictimEntityNum, vec3_t trDmgDir, vec3_t trDmgSpot, float dmg, float fraction, int trHitLoc, qboolean trDismember, int trDismemberLoc ) +void WP_SaberDamageAdd( float trDmg, int trVictimEntityNum, vec3_t trDmgDir, vec3_t trDmgBladeVec, vec3_t trDmgNormal, vec3_t trDmgSpot, float dmg, float fraction, int trHitLoc, qboolean trDismember, int trDismemberLoc ) { int curVictim = 0; @@ -1446,6 +1782,14 @@ void WP_SaberDamageAdd( float trDmg, int trVictimEntityNum, vec3_t trDmgDir, vec { VectorCopy( trDmgDir, dmgDir[curVictim] ); } + if ( !VectorLengthSquared( dmgBladeVec[curVictim] ) ) + { + VectorCopy( trDmgBladeVec, dmgBladeVec[curVictim] ); + } + if ( !VectorLengthSquared( dmgNormal[curVictim] ) ) + { + VectorCopy( trDmgNormal, dmgNormal[curVictim] ); + } if ( !VectorLengthSquared( dmgSpot[curVictim] ) ) { VectorCopy( trDmgSpot, dmgSpot[curVictim] ); @@ -1752,7 +2096,7 @@ const char *hit_blood_sparks = "sparks/blood_sparks2"; // could have changed thi const char *hit_sparks = "saber/saber_cut"; //extern char *hitLocName[]; -qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, float dmg, vec3_t dmgDir, vec3_t bladeDir, int enemyTeam, saberType_t saberType ) +qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, float dmg, vec3_t dmgDir, vec3_t bladeVec, int enemyTeam, saberType_t saberType, saberInfo_t *saber, int bladeNum ) { int hitEntNum[MAX_G2_COLLISIONS]; @@ -1764,7 +2108,8 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f float hitEntDmgAdd[MAX_G2_COLLISIONS] = {0}; float hitEntDmgSub[MAX_G2_COLLISIONS] = {0}; vec3_t hitEntPoint[MAX_G2_COLLISIONS]; - vec3_t hitEntDir[MAX_G2_COLLISIONS]; + vec3_t hitEntNormal[MAX_G2_COLLISIONS]; + vec3_t bladeDir; float hitEntStartFrac[MAX_G2_COLLISIONS] = {0}; int trHitLoc[MAX_G2_COLLISIONS] = {HL_NONE};//same as 0 int trDismemberLoc[MAX_G2_COLLISIONS] = {HL_NONE};//same as 0 @@ -1772,9 +2117,12 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f int i,z; int numHitEnts = 0; float distFromStart,doDmg; - const char *hitEffect, *trSurfName; + int hitEffect = 0; + const char *trSurfName; gentity_t *hitEnt; + VectorNormalize2( bladeVec, bladeDir ); + for (z=0; z < MAX_G2_COLLISIONS; z++) { if ( tr->G2CollisionMap[z].mEntityNum == -1 ) @@ -1830,15 +2178,50 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f hitEntStartFrac[numHitEnts] = hitEntDmgSub[numHitEnts]/length; //remember the entrance point VectorCopy( coll.mCollisionPosition, hitEntPoint[numHitEnts] ); - //remember the entrance dir - VectorCopy( coll.mCollisionNormal, hitEntDir[numHitEnts] ); - VectorNormalize( hitEntDir[numHitEnts] ); + //remember the normal of the face we hit + VectorCopy( coll.mCollisionNormal, hitEntNormal[numHitEnts] ); + VectorNormalize( hitEntNormal[numHitEnts] ); //do the effect //FIXME: check material rather than team? hitEnt = &g_entities[hitEntNum[numHitEnts]]; - hitEffect = hit_blood_sparks; + if ( hitEnt + && hitEnt->client + && coll.mModelIndex > 0 ) + {//hit a submodel on the enemy, not their actual body! + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect ) + { + hitEffect = saber->hitOtherEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect2 ) + { + hitEffect = saber->hitOtherEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_sparks ); + } + } + else + { + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitPersonEffect ) + { + hitEffect = saber->hitPersonEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitPersonEffect2 ) + { + hitEffect = saber->hitPersonEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_blood_sparks ); + } + } if ( hitEnt != NULL ) { if ( hitEnt->client ) @@ -1849,7 +2232,20 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f npc_class == CLASS_PROTOCOL || npc_class == CLASS_MARK1 || npc_class == CLASS_MARK2 || npc_class == CLASS_INTERROGATOR || npc_class == CLASS_ATST || npc_class == CLASS_SENTRY ) { - hitEffect = hit_sparks; + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect ) + { + hitEffect = saber->hitOtherEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect2 ) + { + hitEffect = saber->hitOtherEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_sparks ); + } } } else @@ -1871,11 +2267,24 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f ||(hitEnt->flags&FL_DMG_BY_HEAVY_WEAP_ONLY) )//HEAVY weapon damage only ) {//no hit effect (besides regular client-side one) - hitEffect = NULL; + hitEffect = 0; } else { - hitEffect = hit_sparks; + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect ) + { + hitEffect = saber->hitOtherEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->hitOtherEffect2 ) + { + hitEffect = saber->hitOtherEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_sparks ); + } } } } @@ -1885,19 +2294,11 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f //FIXME: play less if damage is less? if ( !g_saberNoEffects ) { - if ( hitEffect != NULL ) + if ( hitEffect != 0 ) { + //FIXME: when you have multiple blades hitting someone for many sequential server frames, this can get a bit chuggy! G_PlayEffect( hitEffect, coll.mCollisionPosition, coll.mCollisionNormal ); } - /* - if ( hitEnt && hitEnt->client ) - { - CG_AddGhoul2Mark( PGORE_DECAL02, Q_flrand(3.5, 4.0), coll.mCollisionPosition, hitEntDir[numHitEnts], hitEnt->s.number, - hitEnt->client->ps.origin, hitEnt->client->renderInfo.legsYaw, hitEnt->ghoul2 ); - CG_AddGhoul2Mark( PGORE_DECAL03, Q_flrand(3.5, 4.0), coll.mCollisionPosition, hitEntDir[numHitEnts], hitEnt->s.number, - hitEnt->client->ps.origin, hitEnt->client->renderInfo.legsYaw, hitEnt->ghoul2 ); - } - */ } //Get the hit location based on surface name @@ -1965,18 +2366,79 @@ qboolean WP_SaberDamageEffects( trace_t *tr, const vec3_t start, float length, f } if ( doDmg > 0 ) { - WP_SaberDamageAdd( 1.0, hitEntNum[i], hitEntDir[i], hitEntPoint[i], ceil(doDmg), hitEntStartFrac[i], trHitLoc[i], trDismember[i], trDismemberLoc[i] ); + WP_SaberDamageAdd( 1.0, hitEntNum[i], dmgDir, bladeVec, hitEntNormal[i], hitEntPoint[i], ceil(doDmg), hitEntStartFrac[i], trHitLoc[i], trDismember[i], trDismemberLoc[i] ); } } } return (numHitEnts>0); } +void WP_SaberBlockEffect( gentity_t *attacker, int saberNum, int bladeNum, vec3_t position, vec3_t normal, qboolean cutNotBlock ) +{ + saberInfo_t *saber = NULL; + + if ( attacker && attacker->client ) + { + saber = &attacker->client->ps.saber[saberNum]; + } + + if ( saber + && !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->blockEffect ) + { + if ( normal ) + { + G_PlayEffect( saber->blockEffect, position, normal ); + } + else + { + G_PlayEffect( saber->blockEffect, position ); + } + } + else if ( saber + && WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && saber->blockEffect2 ) + { + if ( normal ) + { + G_PlayEffect( saber->blockEffect2, position, normal ); + } + else + { + G_PlayEffect( saber->blockEffect2, position ); + } + } + else if ( cutNotBlock ) + { + if ( normal ) + { + G_PlayEffect( "saber/saber_cut", position, normal ); + } + else + { + G_PlayEffect( "saber/saber_cut", position ); + } + } + else + { + + if ( normal ) + { + G_PlayEffect( "saber/saber_block", position, normal ); + } + else + { + G_PlayEffect( "saber/saber_block", position ); + } + } +} + void WP_SaberKnockaway( gentity_t *attacker, trace_t *tr ) { WP_SaberDrop( attacker, &g_entities[attacker->client->ps.saberEntityNum] ); - G_Sound( &g_entities[attacker->client->ps.saberEntityNum], G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); - G_PlayEffect( "saber/saber_block", tr->endpos ); + WP_SaberBlockSound( attacker, NULL, 0, 0 ); + //G_Sound( &g_entities[attacker->client->ps.saberEntityNum], G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); + WP_SaberBlockEffect( attacker, 0, 0, tr->endpos, NULL, qfalse ); saberHitFraction = tr->fraction; #ifndef FINAL_BUILD if ( d_saberCombat->integer ) @@ -1986,8 +2448,11 @@ void WP_SaberKnockaway( gentity_t *attacker, trace_t *tr ) #endif VectorCopy( tr->endpos, saberHitLocation ); saberHitEntity = tr->entityNum; - g_saberFlashTime = level.time-50; - VectorCopy( saberHitLocation, g_saberFlashPos ); + if ( !g_noClashFlare ) + { + g_saberFlashTime = level.time-50; + VectorCopy( saberHitLocation, g_saberFlashPos ); + } //FIXME: make hitEnt play an attack anim or some other special anim when this happens //gentity_t *hitEnt = &g_entities[tr->entityNum]; @@ -2031,17 +2496,41 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg if ( !noGhoul ) { - if ( !attacker->s.number - || (attacker->client - && (attacker->client->playerTeam==TEAM_PLAYER - || attacker->client->NPC_class==CLASS_SHADOWTROOPER - || attacker->client->NPC_class==CLASS_ALORA - || (attacker->NPC && (attacker->NPC->aiFlags&NPCAI_BOSS_CHARACTER)) - ) - ) - )//&&attackStrength==FORCE_LEVEL_3) + float useRadiusForDamage = 0; + + if ( attacker + && attacker->client ) + {//see if we're not drawing the blade, if so, do a trace based on radius of blade (because the radius is being used to simulate a larger/smaller piece of a solid weapon)... + if ( !WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && (attacker->client->ps.saber[saberNum].saberFlags2&SFL2_NO_BLADE) ) + {//not drawing blade + useRadiusForDamage = attacker->client->ps.saber[saberNum].blade[bladeNum].radius; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && (attacker->client->ps.saber[saberNum].saberFlags2&SFL2_NO_BLADE2) ) + {//not drawing blade + useRadiusForDamage = attacker->client->ps.saber[saberNum].blade[bladeNum].radius; + } + } + if ( !useRadiusForDamage ) + {//do normal check for larger-size saber traces + if ( !attacker->s.number + || (attacker->client + && (attacker->client->playerTeam==TEAM_PLAYER + || attacker->client->NPC_class==CLASS_SHADOWTROOPER + || attacker->client->NPC_class==CLASS_ALORA + || (attacker->NPC && (attacker->NPC->aiFlags&NPCAI_BOSS_CHARACTER)) + ) + ) + )//&&attackStrength==FORCE_LEVEL_3) + { + useRadiusForDamage = 2; + } + } + + if ( useRadiusForDamage > 0 )//&&attackStrength==FORCE_LEVEL_3) {//player,. player allies, shadowtroopers, tavion and desann use larger traces - vec3_t traceMins = {-2,-2,-2}, traceMaxs = {2,2,2}; + vec3_t traceMins = {-useRadiusForDamage,-useRadiusForDamage,-useRadiusForDamage}, traceMaxs = {useRadiusForDamage,useRadiusForDamage,useRadiusForDamage}; gi.trace( &tr, start, traceMins, traceMaxs, end2, ignore, mask, G2_COLLIDE, 10 );//G2_SUPERSIZEDBBOX } /* @@ -2079,6 +2568,11 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg if ( tr.entityNum == ENTITYNUM_WORLD ) { + if ( attacker && attacker->client && (attacker->client->ps.saber[saberNum].saberFlags&SFL_BOUNCE_ON_WALLS) ) + { + VectorCopy( tr.endpos, saberHitLocation ); + VectorCopy( tr.plane.normal, saberHitNormal ); + } return qtrue; } @@ -2318,7 +2812,7 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg if ( attacker && attacker->client && attacker->client->ps.saberInFlight ) {//thrown saber hit something if ( ( hitEnt && hitEnt->client && hitEnt->health > 0 && ( hitEnt->client->NPC_class == CLASS_DESANN || !Q_stricmp("Yoda",hitEnt->NPC_type) || hitEnt->client->NPC_class == CLASS_LUKE || hitEnt->client->NPC_class == CLASS_BOBAFETT || (hitEnt->client->ps.powerups[PW_GALAK_SHIELD] > 0) ) ) || - ( owner && owner->client && owner->health > 0 && ( owner->client->NPC_class == CLASS_DESANN || !Q_stricmp("Yoda",owner->NPC_type) || owner->client->NPC_class == CLASS_LUKE || hitEnt->client->NPC_class == CLASS_BOBAFETT || (owner->client->ps.powerups[PW_GALAK_SHIELD] > 0) ) ) ) + ( owner && owner->client && owner->health > 0 && ( owner->client->NPC_class == CLASS_DESANN || !Q_stricmp("Yoda",owner->NPC_type) || owner->client->NPC_class == CLASS_LUKE || (owner->client->ps.powerups[PW_GALAK_SHIELD] > 0) ) ) ) {//Luke and Desann slap thrown sabers aside //FIXME: control the direction of the thrown saber... if hit Galak's shield, bounce directly away from his origin? WP_SaberKnockaway( attacker, &tr ); @@ -2338,12 +2832,17 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg { //no team damage: if ( !hitEnt->client || attacker == NULL || !attacker->client || (hitEnt->client->playerTeam != attacker->client->playerTeam) ) { + vec3_t bladeVec={0}; + if ( attacker && attacker->client ) + { + VectorScale( bladeDir, attacker->client->ps.saber[saberNum].blade[bladeNum].length, bladeVec ); + } //multiply the damage by the total distance of the swipe VectorSubtract( end2, start, dir ); float len = VectorNormalize( dir );//VectorLength( dir ); if ( noGhoul || !hitEnt->ghoul2.size() ) {//we weren't doing a ghoul trace - const char *hitEffect = NULL; + int hitEffect = 0; if ( dmg >= 1.0 && hitEnt->bmodel ) { dmg = 1.0; @@ -2379,7 +2878,9 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg trFrac = (1.0f - tr.fraction); dmgFrac = tr.fraction; } - WP_SaberDamageAdd( trFrac, tr.entityNum, dir, tr.endpos, dmg, dmgFrac, HL_NONE, qfalse, HL_NONE ); + vec3_t backdir; + VectorScale( dir, -1, backdir ); + WP_SaberDamageAdd( trFrac, tr.entityNum, dir, bladeVec, backdir, tr.endpos, dmg, dmgFrac, HL_NONE, qfalse, HL_NONE ); if ( !tr.allsolid && !tr.startsolid ) { VectorScale( dir, -1, dir ); @@ -2395,7 +2896,20 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg npc_class == CLASS_PROTOCOL || npc_class == CLASS_MARK1 || npc_class == CLASS_MARK2 || npc_class == CLASS_INTERROGATOR || npc_class == CLASS_ATST || npc_class == CLASS_SENTRY ) { - hitEffect = hit_sparks; + if ( !WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].hitOtherEffect ) + { + hitEffect = attacker->client->ps.saber[saberNum].hitOtherEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].hitOtherEffect2 ) + { + hitEffect = attacker->client->ps.saber[saberNum].hitOtherEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_sparks ); + } } } else @@ -2410,27 +2924,45 @@ qboolean WP_SaberDamageForTrace( int ignore, vec3_t start, vec3_t end, float dmg } else { - hitEffect = hit_sparks; + if ( !WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].hitOtherEffect ) + { + hitEffect = attacker->client->ps.saber[saberNum].hitOtherEffect; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &attacker->client->ps.saber[saberNum], bladeNum ) + && attacker->client->ps.saber[saberNum].hitOtherEffect2 ) + { + hitEffect = attacker->client->ps.saber[saberNum].hitOtherEffect2; + } + else + { + hitEffect = G_EffectIndex( hit_sparks ); + } } } } } - if ( !g_saberNoEffects && hitEffect != NULL ) + if ( !g_saberNoEffects && hitEffect != 0 ) { G_PlayEffect( hitEffect, tr.endpos, dir );//"saber_cut" } } else {//we were doing a ghoul trace - if ( !WP_SaberDamageEffects( &tr, start, len, dmg, dir, bladeDir, attacker->client->enemyTeam, saberType ) ) - {//didn't hit a ghoul ent - /* - if ( && hitEnt->ghoul2.size() ) - {//it was a ghoul2 model so we should have hit it - return qfalse; + if ( !attacker + || !attacker->client + || attacker->client->ps.saberLockTime < level.time ) + { + if ( !WP_SaberDamageEffects( &tr, start, len, dmg, dir, bladeVec, attacker->client->enemyTeam, saberType, &attacker->client->ps.saber[saberNum], bladeNum ) ) + {//didn't hit a ghoul ent + /* + if ( && hitEnt->ghoul2.size() ) + {//it was a ghoul2 model so we should have hit it + return qfalse; + } + */ } - */ } } } @@ -3080,9 +3612,21 @@ qboolean WP_SabersCheckLock( gentity_t *ent1, gentity_t *ent2 ) { return qfalse; } - if ( !ent1->client->ps.saber[0].lockable || !ent2->client->ps.saber[0].lockable ) + if ( (ent1->client->ps.saber[0].saberFlags&SFL_NOT_LOCKABLE) + || (ent2->client->ps.saber[0].saberFlags&SFL_NOT_LOCKABLE) ) + {//one of these sabers cannot lock (like a lance) + return qfalse; + } + if ( ent1->client->ps.dualSabers + && ent1->client->ps.saber[1].Active() + && (ent1->client->ps.saber[1].saberFlags&SFL_NOT_LOCKABLE) ) + {//one of these sabers cannot lock (like a lance) + return qfalse; + } + if ( ent2->client->ps.dualSabers + && ent2->client->ps.saber[1].Active() + && (ent2->client->ps.saber[1].saberFlags&SFL_NOT_LOCKABLE) ) {//one of these sabers cannot lock (like a lance) - //FIXME: check the second sabers too? return qfalse; } if ( ent1->painDebounceTime > level.time-1000 || ent2->painDebounceTime > level.time-1000 ) @@ -3510,7 +4054,7 @@ qboolean WP_SabersCheckLock( gentity_t *ent1, gentity_t *ent2 ) return qfalse; } -qboolean WP_SaberParry( gentity_t *victim, gentity_t *attacker ) +qboolean WP_SaberParry( gentity_t *victim, gentity_t *attacker, int saberNum, int bladeNum ) { if ( !victim || !victim->client || !attacker ) { @@ -3541,7 +4085,7 @@ qboolean WP_SaberParry( gentity_t *victim, gentity_t *attacker ) //since it was parried, take away any damage done //FIXME: what if the damage was done before the parry? - WP_SaberClearDamageForEntNum( victim->s.number ); + WP_SaberClearDamageForEntNum( attacker, victim->s.number, saberNum, bladeNum ); //tell the victim to get mad at me if ( victim->enemy != attacker && victim->client->playerTeam != attacker->client->playerTeam ) @@ -3878,6 +4422,98 @@ int G_CostForSpecialMove( int cost, qboolean kataMove ) } } +extern qboolean G_EntIsBreakable( int entityNum, gentity_t *breaker ); +void WP_SaberRadiusDamage( gentity_t *ent, vec3_t point, float radius, int damage, float knockBack ) +{ + if ( !ent || !ent->client ) + { + return; + } + else if ( radius <= 0.0f || (damage <= 0 && knockBack <= 0) ) + { + return; + } + else + { + vec3_t mins, maxs, entDir; + gentity_t *radiusEnts[128]; + int numEnts, i; + float dist; + + //Setup the bbox to search in + for ( i = 0; i < 3; i++ ) + { + mins[i] = point[i] - radius; + maxs[i] = point[i] + radius; + } + + //Get the number of entities in a given space + numEnts = gi.EntitiesInBox( mins, maxs, radiusEnts, 128 ); + + for ( i = 0; i < numEnts; i++ ) + { + if ( !radiusEnts[i]->inuse ) + { + continue; + } + + if ( radiusEnts[i] == ent ) + {//Skip myself + continue; + } + + if ( radiusEnts[i]->client == NULL ) + {//must be a client + if ( G_EntIsBreakable( radiusEnts[i]->s.number, ent ) ) + {//damage breakables within range, but not as much + G_Damage( radiusEnts[i], ent, ent, vec3_origin, radiusEnts[i]->currentOrigin, 10, 0, MOD_EXPLOSIVE_SPLASH ); + } + continue; + } + + if ( (radiusEnts[i]->client->ps.eFlags&EF_HELD_BY_RANCOR) + || (radiusEnts[i]->client->ps.eFlags&EF_HELD_BY_WAMPA) ) + {//can't be one being held + continue; + } + + VectorSubtract( radiusEnts[i]->currentOrigin, point, entDir ); + dist = VectorNormalize( entDir ); + if ( dist <= radius ) + {//in range + if ( damage > 0 ) + {//do damage + int points = ceil((float)damage*dist/radius); + G_Damage( radiusEnts[i], ent, ent, vec3_origin, radiusEnts[i]->currentOrigin, points, DAMAGE_NO_KNOCKBACK, MOD_EXPLOSIVE_SPLASH ); + } + if ( knockBack > 0 ) + {//do knockback + if ( radiusEnts[i]->client + && radiusEnts[i]->client->NPC_class != CLASS_RANCOR + && radiusEnts[i]->client->NPC_class != CLASS_ATST + && !(radiusEnts[i]->flags&FL_NO_KNOCKBACK) )//don't throw them back + { + float knockbackStr = knockBack*dist/radius; + entDir[2] += 0.1f; + VectorNormalize( entDir ); + G_Throw( radiusEnts[i], entDir, knockbackStr ); + if ( radiusEnts[i]->health > 0 ) + {//still alive + if ( knockbackStr > 50 ) + {//close enough and knockback high enough to possibly knock down + if ( dist < (radius*0.5f) + || radiusEnts[i]->client->ps.groundEntityNum != ENTITYNUM_NONE ) + {//within range of my fist or within ground-shaking range and not in the air + G_Knockdown( radiusEnts[i], ent, entDir, 500, qtrue ); + } + } + } + } + } + } + } + } +} /* --------------------------------------------------------- void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) @@ -3903,6 +4539,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } memset( totalDmg, 0, sizeof( totalDmg) ); memset( dmgDir, 0, sizeof( dmgDir ) ); + memset( dmgNormal, 0, sizeof( dmgNormal ) ); memset( dmgSpot, 0, sizeof( dmgSpot ) ); memset( dmgFraction, 0, sizeof( dmgFraction ) ); memset( hitLoc, HL_NONE, sizeof( hitLoc ) ); @@ -3936,7 +4573,11 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) return; } - int saberContents = gi.pointcontents( ent->client->renderInfo.muzzlePoint, ent->client->ps.saberEntityNum ); + int saberContents = 0; + if ( !(ent->client->ps.saber[saberNum].saberFlags&SFL_ON_IN_WATER) ) + {//saber can't stay on underwater + saberContents = gi.pointcontents( ent->client->renderInfo.muzzlePoint, ent->client->ps.saberEntityNum ); + } if ( (saberContents&CONTENTS_WATER)|| (saberContents&CONTENTS_SLIME)|| (saberContents&CONTENTS_LAVA) ) @@ -3996,7 +4637,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } //or unless returning else if ( ent->client->ps.saberEntityState == SES_RETURNING - && ent->client->ps.saber[0].returnDamage == qfalse )//type != SABER_STAR ) + && !(ent->client->ps.saber[0].saberFlags&SFL_RETURN_DAMAGE) )//type != SABER_STAR ) {//special case, since we're returning, chances are if we hit something //it's going to be butt-first. So do less damage. baseDamage = 0.1f; @@ -4036,10 +4677,38 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) {//don't kill with this hit baseDFlags = DAMAGE_NO_KILL; } + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT2) ) + ) + {//do nothing at all when idle + return; + } baseDamage = 0; } else if ( ent->client->ps.saberLockTime > level.time ) {//just do effects + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT2) ) + ) + {//do nothing at all when idle + return; + } + baseDamage = 0; + } + else if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].damageScale <= 0.0f + && ent->client->ps.saber[saberNum].knockbackScale <= 0.0f ) + {//this blade does no damage and no knockback (only for blocking?) + baseDamage = 0; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].damageScale2 <= 0.0f + && ent->client->ps.saber[saberNum].knockbackScale2 <= 0.0f ) + {//this blade does no damage and no knockback (only for blocking?) baseDamage = 0; } else if ( ent->client->ps.saberBlocked > BLOCKED_NONE @@ -4049,6 +4718,14 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) ) ) {//don't do damage if parrying/reflecting/bouncing/deflecting or not actually attacking or in a transition to/from/between attacks + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT2) ) + ) + {//do nothing at all when idle + return; + } baseDamage = 0; } else @@ -4057,10 +4734,18 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) if ( !PM_SaberInSpecialAttack( ent->client->ps.torsoAnim ) && !PM_InAnimForSaberMove( ent->client->ps.torsoAnim, ent->client->ps.saberMove ) ) {//forced into some other animation somehow, like a pain or death? + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && (ent->client->ps.saber[saberNum].saberFlags2&SFL2_NO_IDLE_EFFECT2) ) + ) + {//do nothing at all when idle + return; + } baseDamage = 0; } else if ( ent->client->ps.weaponstate == WEAPON_FIRING && ent->client->ps.saberBlocked == BLOCKED_NONE && - ( PM_SaberInAttack(ent->client->ps.saberMove) || PM_SaberInSpecialAttack( ent->client->ps.torsoAnim ) || PM_SpinningSaberAnim(ent->client->ps.torsoAnim) || entPowerLevel > FORCE_LEVEL_2 ) )// || ent->client->ps.saberAnimLevel == SS_STAFF ) ) + ( PM_SaberInAttack(ent->client->ps.saberMove) || PM_SaberInSpecialAttack( ent->client->ps.torsoAnim ) || PM_SpinningSaberAnim(ent->client->ps.torsoAnim) || entPowerLevel > FORCE_LEVEL_2 || (WP_SaberBladeDoTransitionDamage( &ent->client->ps.saber[saberNum], bladeNum )&&PM_SaberInTransitionAny(ent->client->ps.saberMove)) ) )// || ent->client->ps.saberAnimLevel == SS_STAFF ) ) {//normal attack swing swinging/spinning (or if using strong set), do normal damage //FIXME: or if using staff? //FIXME: more damage for higher attack power levels? // More damage based on length/color of saber? @@ -4148,8 +4833,16 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) //VectorCopy( ent->client->renderInfo.muzzlePointNext, mp2 ); //VectorCopy( ent->client->renderInfo.muzzleDirNext, md2 ); //prediction was causing gaps in swing (G2 problem) so *don't* predict + if ( ent->client->ps.saberDamageDebounceTime > level.time ) + {//really only used when a saber attack start anim starts, not actually for stopping damage + //we just want to not use the old position to trace the attack from... + VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzlePoint, ent->client->ps.saber[saberNum].blade[bladeNum].muzzlePointOld ); + VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzleDir, ent->client->ps.saber[saberNum].blade[bladeNum].muzzleDirOld ); + } + //do the damage trace from the last position... VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzlePointOld, mp1 ); VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzleDirOld, md1 ); + //...to the current one. VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzlePoint, mp2 ); VectorCopy( ent->client->ps.saber[saberNum].blade[bladeNum].muzzleDir, md2 ); @@ -4506,16 +5199,23 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) if ( entAttacking ) {//add twoHanded bonus and breakParryBonus to entPowerLevel here //This makes staff too powerful - if ( ent->client->ps.saber[saberNum].twoHanded ) + if ( (ent->client->ps.saber[saberNum].saberFlags&SFL_TWO_HANDED) ) { entPowerLevel++; } //FIXME: what if dualSabers && both sabers are hitting at same time? - entPowerLevel += ent->client->ps.saber[saberNum].breakParryBonus; + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) ) + { + entPowerLevel += ent->client->ps.saber[saberNum].breakParryBonus; + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) ) + { + entPowerLevel += ent->client->ps.saber[saberNum].breakParryBonus2; + } } else if ( entDefending ) {//add twoHanded bonus and dualSaber bonus and parryBonus to entPowerLevel here - if ( ent->client->ps.saber[saberNum].twoHanded + if ( (ent->client->ps.saber[saberNum].saberFlags&SFL_TWO_HANDED) || (ent->client->ps.dualSabers && ent->client->ps.saber[1].Active()) ) { entPowerLevel++; @@ -4549,7 +5249,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } if ( hitOwnerAttacking ) {//add twoHanded bonus and breakParryBonus to entPowerLevel here - if ( hitOwner->client->ps.saber[0].twoHanded ) + if ( (hitOwner->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) { hitOwnerPowerLevel++; } @@ -4561,7 +5261,8 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } else if ( hitOwnerDefending ) {//add twoHanded bonus and dualSaber bonus and parryBonus to entPowerLevel here - if ( hitOwner->client->ps.saber[0].twoHanded || (hitOwner->client->ps.dualSabers && hitOwner->client->ps.saber[1].Active()) ) + if ( (hitOwner->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) + || (hitOwner->client->ps.dualSabers && hitOwner->client->ps.saber[1].Active()) ) { hitOwnerPowerLevel++; } @@ -4636,7 +5337,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) && (hitOwnerPowerLevel > FORCE_LEVEL_2||(hitOwner->client->ps.forcePowerLevel[FP_SABER_DEFENSE]>FORCE_LEVEL_2&&Q_irand(0,hitOwner->client->ps.forcePowerLevel[FP_SABER_OFFENSE]))) ) {//knockaways can make fast-attacker go into a broken parry anim if the ent is using fast or med (but not Tavion) //make me parry - WP_SaberParry( hitOwner, ent ); + WP_SaberParry( hitOwner, ent, saberNum, bladeNum ); //turn the parry into a knockaway hitOwner->client->ps.saberBounceMove = PM_KnockawayForParry( hitOwner->client->ps.saberBlocked ); //make them go into a broken parry @@ -4644,10 +5345,10 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) ent->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN; if ( saberNum == 0 ) {//FIXME: can only lose right-hand saber for now - if ( ent->client->ps.saber[saberNum].disarmable + if ( !(ent->client->ps.saber[saberNum].saberFlags&SFL_NOT_DISARMABLE) && ent->client->ps.forcePowerLevel[FP_SABER_DEFENSE] < FORCE_LEVEL_2 //&& (ent->s.number||g_saberRealisticCombat->integer) - && Q_irand( 0, hitOwner->client->ps.SaberDisarmBonus() ) > 0 + && Q_irand( 0, hitOwner->client->ps.SaberDisarmBonus( 0 ) ) > 0 && (hitOwner->s.number || g_saberAutoBlocking->integer || !Q_irand( 0, 2 )) )//if player defending and autoblocking is on, this is less likely to happen, so don't do the random check {//knocked the saber right out of his hand! (never happens to player) //Get a good velocity to send the saber in based on my parry move @@ -4683,10 +5384,10 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) hitOwner->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN; hitOwner->client->ps.saberBounceMove = LS_NONE; //FIXME: for now, you always disarm the right-hand saber - if ( hitOwner->client->ps.saber[0].disarmable + if ( !(hitOwner->client->ps.saber[0].saberFlags&SFL_NOT_DISARMABLE) && hitOwner->client->ps.forcePowerLevel[FP_SABER_DEFENSE] < FORCE_LEVEL_2 //&& (ent->s.number||g_saberRealisticCombat->integer) - && Q_irand( 0, 2-ent->client->ps.SaberDisarmBonus() ) <= 0 ) + && Q_irand( 0, 2-ent->client->ps.SaberDisarmBonus( bladeNum ) ) <= 0 ) {//knocked the saber right out of his hand! //get the right velocity for my attack direction vec3_t throwDir; @@ -4730,7 +5431,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } else {//just a parry, possibly the hitOwner can knockaway the ent - WP_SaberParry( hitOwner, ent ); + WP_SaberParry( hitOwner, ent, saberNum, bladeNum ); if ( PM_SaberInBounce( ent->client->ps.saberMove ) //FIXME: saberMove not set until pmove! && activeDefense && hitOwner->client->ps.saberAnimLevel != SS_FAST //&& hitOwner->client->ps.saberAnimLevel != FORCE_LEVEL_5 @@ -4789,7 +5490,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } else { - WP_SaberParry( ent, hitOwner ); + WP_SaberParry( ent, hitOwner, saberNum, bladeNum ); } collisionResolved = qtrue; } @@ -4822,14 +5523,14 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) ent->client->ps.saberEventFlags |= SEF_BLOCKED; //since it was blocked/deflected, take away any damage done //FIXME: what if the damage was done before the parry? - WP_SaberClearDamageForEntNum( hitOwner->s.number ); + WP_SaberClearDamageForEntNum( ent, hitOwner->s.number, saberNum, bladeNum ); } } else {//saber collided when not attacking, parry it //since it was blocked/deflected, take away any damage done //FIXME: what if the damage was done before the parry? - WP_SaberClearDamageForEntNum( hitOwner->s.number ); + WP_SaberClearDamageForEntNum( ent, hitOwner->s.number, saberNum, bladeNum ); /* if ( ent->s.number || g_saberAutoBlocking->integer || ent->client->ps.saberBlockingTime > level.time ) {//either an NPC or a player who has blocking @@ -4847,7 +5548,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) { //since it was blocked/deflected, take away any damage done //FIXME: what if the damage was done before the parry? - WP_SaberClearDamageForEntNum( hitOwner->s.number ); + WP_SaberClearDamageForEntNum( ent, hitOwner->s.number, saberNum, bladeNum ); } } else @@ -4875,7 +5576,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) {//saber collided when not attacking, parry it if ( !PM_SaberInBrokenParry( hitOwner->client->ps.saberMove ) ) {//not currently in a broken parry - if ( !WP_SaberParry( hitOwner, ent ) ) + if ( !WP_SaberParry( hitOwner, ent, saberNum, bladeNum ) ) {//FIXME: hitOwner can't parry, do some time-consuming saber-knocked-aside broken parry anim? //hitOwner->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN; } @@ -4910,55 +5611,30 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) { if ( inFlightSaberBlocked ) {//FIXME: never hear this sound - G_Sound( &g_entities[ent->client->ps.saberEntityNum], G_SoundIndex( va( "sound/weapons/saber/saberbounce%d.wav", Q_irand(1,3) ) ) ); + WP_SaberBounceSound( ent, hitOwner, &g_entities[ent->client->ps.saberEntityNum], 0, 0, qfalse ); } else { if ( deflected ) { -#ifdef _IMMERSION - int index = Q_irand(1,3); - G_Sound( ent, G_SoundIndex( va("sound/weapons/saber/saberbounce%d.wav", index) ) ); - int ff = G_ForceIndex( va("fffx/weapons/saber/saberbounce%d", index), FF_CHANNEL_WEAPON ); - if ( !ent->s.saberInFlight ) - { - G_Force( ent, ff ); - } - if ( hitOwner && !hitOwner->s.saberInFlight ) - { - G_Force( hitOwner, ff ); - } -#else - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberbounce%d.wav", Q_irand(1,3) ) ) ); -#endif // _IMMERSION + WP_SaberBounceSound( ent, hitOwner, NULL, saberNum, bladeNum, qtrue ); } else { -#ifdef _IMMERSION - int index = Q_irand(1, 9); - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", index) ) ); - int ff = G_ForceIndex( va("fffx/weapons/saber/saberblock%d", index), FF_CHANNEL_WEAPON ); - if ( !ent->s.saberInFlight ) - { - G_Force( ent, ff ); - } - if ( hitOwner && !hitOwner->s.saberInFlight ) - { - G_Force( hitOwner, ff ); - } -#else - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); -#endif // _IMMERSION + WP_SaberBlockSound( ent, hitOwner, saberNum, bladeNum ); } } if ( !g_saberNoEffects ) { - G_PlayEffect( "saber/saber_block", saberHitLocation, saberHitNormal ); + WP_SaberBlockEffect( ent, saberNum, bladeNum, saberHitLocation, saberHitNormal, qfalse ); } } // Set the little screen flash - only when an attack is blocked - g_saberFlashTime = level.time-50; - VectorCopy( saberHitLocation, g_saberFlashPos ); + if ( !g_noClashFlare ) + { + g_saberFlashTime = level.time-50; + VectorCopy( saberHitLocation, g_saberFlashPos ); + } } if ( saberHitFraction < 1.0f ) @@ -4979,7 +5655,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) {//33% chance knockAway = 2; } - knockAway -= hitOwner->client->ps.SaberDisarmBonus(); + knockAway -= hitOwner->client->ps.SaberDisarmBonus( 0 ); } if ( Q_irand( 0, knockAway ) <= 0 || //random ( hitOwner @@ -4991,7 +5667,20 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) {//knock it aside and turn it off if ( !g_saberNoEffects ) { - G_PlayEffect( "saber/saber_cut", saberHitLocation, saberHitNormal ); + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hitOtherEffect ) + { + G_PlayEffect( ent->client->ps.saber[saberNum].hitOtherEffect, saberHitLocation, saberHitNormal ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hitOtherEffect2 ) + { + G_PlayEffect( ent->client->ps.saber[saberNum].hitOtherEffect2, saberHitLocation, saberHitNormal ); + } + else + { + G_PlayEffect( "saber/saber_cut", saberHitLocation, saberHitNormal ); + } } if ( hitEnt ) { @@ -5019,47 +5708,80 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) } } - if ( ent->client->ps.saberLockTime > level.time - && ent->s.number < ent->client->ps.saberLockEnemy - && !Q_irand( 0, 3 ) ) - {//need to make some kind of effect - vec3_t hitNorm = {0,0,1}; - if ( WP_SabersIntersection( ent, &g_entities[ent->client->ps.saberLockEnemy], g_saberFlashPos ) ) - { - if ( Q_irand( 0, 10 ) ) + if ( ent->client->ps.saberLockTime > level.time ) + { + if ( ent->s.number < ent->client->ps.saberLockEnemy + && !Q_irand( 0, 3 ) ) + {//need to make some kind of effect + vec3_t hitNorm = {0,0,1}; + if ( WP_SabersIntersection( ent, &g_entities[ent->client->ps.saberLockEnemy], g_saberFlashPos ) ) { - if ( !g_saberNoEffects ) + if ( Q_irand( 0, 10 ) ) { - G_PlayEffect( "saber/saber_block", g_saberFlashPos, hitNorm ); + if ( !g_saberNoEffects ) + { + WP_SaberBlockEffect( ent, saberNum, bladeNum, g_saberFlashPos, hitNorm, qfalse ); + } } + else + { + if ( !g_noClashFlare ) + { + g_saberFlashTime = level.time-50; + } + if ( !g_saberNoEffects ) + { + WP_SaberBlockEffect( ent, saberNum, bladeNum, g_saberFlashPos, hitNorm, qtrue ); + } + } + WP_SaberBlockSound( ent, &g_entities[ent->client->ps.saberLockEnemy], 0, 0 ); + } + } + } + else + { + if ( hit_wall + && (ent->client->ps.saber[saberNum].saberFlags&SFL_BOUNCE_ON_WALLS) + && (PM_SaberInAttackPure( ent->client->ps.saberMove ) //only in a normal attack anim + || ent->client->ps.saberMove == LS_A_JUMP_T__B_ ) //or in the strong jump-fwd-attack "death from above" move + ) + {//bounce off walls + //do anim + ent->client->ps.saberBlocked = BLOCKED_ATK_BOUNCE; + ent->client->ps.saberBounceMove = LS_D1_BR+(saberMoveData[ent->client->ps.saberMove].startQuad-Q_BR); + //do bounce sound & force feedback + WP_SaberBounceOnWallSound( ent, saberNum, bladeNum ); + //do hit effect + if ( !g_saberNoEffects ) + { + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hitOtherEffect ) + { + G_PlayEffect( ent->client->ps.saber[saberNum].hitOtherEffect, saberHitLocation, saberHitNormal ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) + && ent->client->ps.saber[saberNum].hitOtherEffect2 ) + { + G_PlayEffect( ent->client->ps.saber[saberNum].hitOtherEffect2, saberHitLocation, saberHitNormal ); + } + else + { + G_PlayEffect( "saber/saber_cut", saberHitLocation, saberHitNormal ); + } + } + //do radius damage/knockback, if any + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[saberNum], bladeNum ) ) + { + WP_SaberRadiusDamage( ent, saberHitLocation, ent->client->ps.saber[saberNum].splashRadius, ent->client->ps.saber[saberNum].splashDamage, ent->client->ps.saber[saberNum].splashKnockback ); } else { - g_saberFlashTime = level.time-50; - if ( !g_saberNoEffects ) - { - G_PlayEffect( "saber/saber_cut", g_saberFlashPos, hitNorm ); - } + WP_SaberRadiusDamage( ent, saberHitLocation, ent->client->ps.saber[saberNum].splashRadius2, ent->client->ps.saber[saberNum].splashDamage2, ent->client->ps.saber[saberNum].splashKnockback2 ); } -#ifdef _IMMERSION - int index = Q_irand(1, 9); - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", index ) ) ); - int ff = G_ForceIndex( va("fffx/weapons/saber/saberblock%d", index), FF_CHANNEL_WEAPON ); - if ( !ent->s.saberInFlight ) - { - G_Force( ent, ff ); - } - if ( !g_entities[ent->client->ps.saberLockEnemy].s.saberInFlight ) - { - G_Force( &g_entities[ent->client->ps.saberLockEnemy], ff ); - } -#else - G_Sound( ent, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); -#endif // _IMMERSION } } - if ( WP_SaberApplyDamage( ent, baseDamage, baseDFlags, brokenParry, ent->client->ps.saber[saberNum].type, (qboolean)(saberNum==0&&ent->client->ps.saberInFlight) ) ) + if ( WP_SaberApplyDamage( ent, baseDamage, baseDFlags, brokenParry, saberNum, bladeNum, (qboolean)(saberNum==0&&ent->client->ps.saberInFlight) ) ) {//actually did damage to something #ifndef FINAL_BUILD if ( d_saberCombat->integer ) @@ -5067,7 +5789,7 @@ void WP_SaberDamageTrace( gentity_t *ent, int saberNum, int bladeNum ) gi.Printf( "base damage was %4.2f\n", baseDamage ); } #endif - WP_SaberHitSound( ent, saberNum ); + WP_SaberHitSound( ent, saberNum, bladeNum ); } if ( hit_wall ) @@ -5109,6 +5831,12 @@ void WP_SabersDamageTrace( gentity_t *ent, qboolean noEffects ) g_saberNoEffects = qtrue; } } + g_noClashFlare = qfalse; + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[0], i ) && (ent->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[0], i ) && (ent->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE2) ) ) + { + g_noClashFlare = qtrue; + } WP_SaberDamageTrace( ent, 0, i ); } // Saber 2. @@ -5130,10 +5858,17 @@ void WP_SabersDamageTrace( gentity_t *ent, qboolean noEffects ) g_saberNoEffects = qtrue; } } + g_noClashFlare = qfalse; + if ( (!WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[1], i ) && (ent->client->ps.saber[1].saberFlags2&SFL2_NO_CLASH_FLARE) ) + || ( WP_SaberBladeUseSecondBladeStyle( &ent->client->ps.saber[1], i ) && (ent->client->ps.saber[1].saberFlags2&SFL2_NO_CLASH_FLARE2) ) ) + { + g_noClashFlare = qtrue; + } WP_SaberDamageTrace( ent, 1, i ); } } g_saberNoEffects = qfalse; + g_noClashFlare = qfalse; } //SABER THROWING============================================================================ @@ -5179,7 +5914,16 @@ void WP_SaberImpact( gentity_t *owner, gentity_t *saber, trace_t *trace ) dmg = 20; } G_Damage( other, saber, owner, dir, trace->endpos, dmg, 0, MOD_SABER ); - G_PlayEffect( "saber/saber_cut", trace->endpos, dir ); + if ( owner + && owner->client + && owner->client->ps.saber[0].hitOtherEffect ) + { + G_PlayEffect( owner->client->ps.saber[0].hitOtherEffect, trace->endpos, dir ); + } + else + { + G_PlayEffect( "saber/saber_cut", trace->endpos, dir ); + } if ( owner->s.number == 0 ) { AddSoundEvent( owner, trace->endpos, 256, AEL_DISCOVERED ); @@ -5200,10 +5944,21 @@ void WP_SaberImpact( gentity_t *owner, gentity_t *saber, trace_t *trace ) //Big flash //FIXME: bigger effect/sound? //FIXME: STILL DOESNT WORK!!! - G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); - G_PlayEffect( "saber/saber_block", trace->endpos ); - g_saberFlashTime = level.time-50; - VectorCopy( trace->endpos, g_saberFlashPos ); + WP_SaberBlockSound( saber->owner, NULL, 0, 0 ); + //G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); + WP_SaberBlockEffect( saber->owner, 0, 0, trace->endpos, NULL, qfalse); + qboolean noFlare = qfalse; + if ( saber->owner + && saber->owner->client + && (saber->owner->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) ) + { + noFlare = qtrue; + } + if ( !noFlare ) + { + g_saberFlashTime = level.time-50; + VectorCopy( trace->endpos, g_saberFlashPos ); + } } if ( owner && owner->s.number == 0 && owner->client ) @@ -5285,16 +6040,7 @@ void WP_SaberImpact( gentity_t *owner, gentity_t *saber, trace_t *trace ) if ( saber->s.pos.trType == TR_GRAVITY ) {//bounced //play a bounce sound - if ( owner - && owner->client - && owner->client->ps.saber[0].type == SABER_SITH_SWORD ) - { - G_Sound( saber, G_SoundIndex( va( "sound/weapons/sword/fall%d.wav", Q_irand( 1, 7 ) ) ) ); - } - else - { - G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); - } + WP_SaberFallSound( owner, saber ); //change rotation VectorCopy( saber->currentAngles, saber->s.apos.trBase ); saber->s.apos.trType = TR_LINEAR; @@ -5305,19 +6051,11 @@ void WP_SaberImpact( gentity_t *owner, gentity_t *saber, trace_t *trace ) else if ( saber->s.pos.trType == TR_STATIONARY ) {//stopped //play a bounce sound - if ( owner - && owner->client - && owner->client->ps.saber[0].type == SABER_SITH_SWORD ) - { - G_Sound( saber, G_SoundIndex( va( "sound/weapons/sword/fall%d.wav", Q_irand( 1, 7 ) ) ) ); - } - else - { - G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/bounce%d.wav", Q_irand( 1, 3 ) ) ) ); - } + WP_SaberFallSound( owner, saber ); //stop rotation VectorClear( saber->s.apos.trDelta ); - saber->currentAngles[0] = SABER_PITCH_HACK; + pitch_roll_for_slope( saber, trace->plane.normal, saber->currentAngles ); + saber->currentAngles[0] += SABER_PITCH_HACK; VectorCopy( saber->currentAngles, saber->s.apos.trBase ); //remember when it fell so it can return automagically saber->aimDebounceTime = level.time; @@ -5330,10 +6068,21 @@ void WP_SaberImpact( gentity_t *owner, gentity_t *saber, trace_t *trace ) || ( other->client->ps.powerups[PW_GALAK_SHIELD] > 0 ) ) ) {//Luke, Desann and Tavion slap thrown sabers aside WP_SaberDrop( owner, saber ); - G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); - G_PlayEffect( "saber/saber_block", trace->endpos ); - g_saberFlashTime = level.time-50; - VectorCopy( trace->endpos, g_saberFlashPos ); + WP_SaberBlockSound( owner, other, 0, 0 ); + //G_Sound( saber, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); + WP_SaberBlockEffect( owner, 0, 0, trace->endpos, NULL, qfalse ); + qboolean noFlare = qfalse; + if ( owner + && owner->client + && (owner->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) ) + { + noFlare = qtrue; + } + if ( !noFlare ) + { + g_saberFlashTime = level.time-50; + VectorCopy( trace->endpos, g_saberFlashPos ); + } //FIXME: make Luke/Desann/Tavion play an attack anim or some other special anim when this happens Jedi_PlayDeflectSound( other ); } @@ -5485,16 +6234,26 @@ void WP_SaberInFlightReflectCheck( gentity_t *self, usercmd_t *ucmd ) //FIXME: prevent it from damaging me? WP_SaberReturn( missile_list[x]->owner, missile_list[x] ); VectorNormalize2( missile_list[x]->s.pos.trDelta, fx_dir ); - G_PlayEffect( "saber/saber_block", missile_list[x]->currentOrigin, fx_dir ); + WP_SaberBlockEffect( self, 0, 0, missile_list[x]->currentOrigin, fx_dir, qfalse ); if ( missile_list[x]->owner->client->ps.saberInFlight && self->client->ps.saberInFlight ) { - G_Sound( missile_list[x], G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); - g_saberFlashTime = level.time-50; - gentity_t *saber = &g_entities[self->client->ps.saberEntityNum]; - vec3_t org; - VectorSubtract( missile_list[x]->currentOrigin, saber->currentOrigin, org ); - VectorMA( saber->currentOrigin, 0.5, org, org ); - VectorCopy( org, g_saberFlashPos ); + WP_SaberBlockSound( self, missile_list[x]->owner, 0, 0 ); + //G_Sound( missile_list[x], G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ) ) ); + qboolean noFlare = qfalse; + if ( (missile_list[x]->owner->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) + && (self->client->ps.saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) ) + { + noFlare = qtrue; + } + if ( !noFlare ) + { + g_saberFlashTime = level.time-50; + gentity_t *saber = &g_entities[self->client->ps.saberEntityNum]; + vec3_t org; + VectorSubtract( missile_list[x]->currentOrigin, saber->currentOrigin, org ); + VectorMA( saber->currentOrigin, 0.5, org, org ); + VectorCopy( org, g_saberFlashPos ); + } } } } @@ -5543,9 +6302,12 @@ qboolean WP_SaberValidateEnemy( gentity_t *self, gentity_t *enemy ) return qfalse; } */ - if ( enemy->client->ps.forcePowersKnown ) - {//not other jedi? - return qfalse; + if ( enemy->s.number >= MAX_CLIENTS ) + {//NPCs can cheat and use the homing saber throw 3 on the player + if ( enemy->client->ps.forcePowersKnown ) + {//not other jedi? + return qfalse; + } } if ( DistanceSquared( self->client->renderInfo.handRPoint, enemy->currentOrigin ) > saberThrowDistSquared[self->client->ps.forcePowerLevel[FP_SABERTHROW]] ) @@ -5826,7 +6588,7 @@ void WP_RunSaber( gentity_t *self, gentity_t *saber ) //if it's heading back, point it's base at us if ( self->client->ps.saberEntityState == SES_RETURNING - && self->client->ps.saber[0].returnDamage == qfalse )//type != SABER_STAR ) + && !(self->client->ps.saber[0].saberFlags&SFL_RETURN_DAMAGE) )//type != SABER_STAR ) { fwdangles[0] += SABER_PITCH_HACK; VectorCopy( fwdangles, saber->s.apos.trBase ); @@ -5898,6 +6660,12 @@ qboolean WP_SaberLaunch( gentity_t *self, gentity_t *saber, qboolean thrown, qbo } //clear the enemy saber->enemy = NULL; + +//===FIXME!!!============================================================================================== + //We should copy the right-hand saber's g2 instance to the thrown saber + //Then back again when you catch it!!! +//===FIXME!!!============================================================================================== + //draw it saber->s.eFlags &= ~EF_NODRAW; saber->svFlags |= SVF_BROADCAST; @@ -5953,7 +6721,7 @@ qboolean WP_SaberLaunch( gentity_t *self, gentity_t *saber, qboolean thrown, qbo if ( thrown ) {//this is a regular throw, so turn the saber on //turn saber on - if ( self->client->ps.saber[0].singleBladeThrowable )//SaberStaff() ) + if ( (self->client->ps.saber[0].saberFlags&SFL_SINGLE_BLADE_THROWABLE) )//SaberStaff() ) {//only first blade can be on if ( !self->client->ps.saber[0].blade[0].active ) {//turn on first one @@ -6098,6 +6866,10 @@ void WP_SaberCatch( gentity_t *self, gentity_t *saber, qboolean switchToSaber ) { //clear the enemy saber->enemy = NULL; +//===FIXME!!!============================================================================================== + //We should copy the thrown saber's g2 instance to the right-hand saber + //When you catch it, and vice-versa when you throw it!!! +//===FIXME!!!============================================================================================== //don't draw it saber->s.eFlags |= EF_NODRAW; saber->svFlags &= SVF_BROADCAST; @@ -6134,7 +6906,7 @@ void WP_SaberCatch( gentity_t *self, gentity_t *saber, qboolean switchToSaber ) } else {//if it's not active, turn it on - if ( self->client->ps.saber[0].singleBladeThrowable )//SaberStaff() ) + if ( (self->client->ps.saber[0].saberFlags&SFL_SINGLE_BLADE_THROWABLE) )//SaberStaff() ) {//only first blade can be on if ( !self->client->ps.saber[0].blade[0].active ) {//only turn it on if first blade is off, otherwise, leave as-is @@ -6162,7 +6934,7 @@ void WP_SaberReturn( gentity_t *self, gentity_t *saber ) //FIXME: when it's returning, flies butt first, but seems to do a lot of damage when going through people... hmm... self->client->ps.saberEntityState = SES_RETURNING; //turn down the saber trail - if ( self->client->ps.saber[0].returnDamage == qfalse )//type != SABER_STAR ) + if ( !(self->client->ps.saber[0].saberFlags&SFL_RETURN_DAMAGE) )//type != SABER_STAR ) { self->client->ps.saber[0].DeactivateTrail( 75 ); } @@ -6241,6 +7013,15 @@ void WP_SaberPull( gentity_t *self, gentity_t *saber ) } } +char *saberColorStringForColor[SABER_PURPLE+1] = +{ + "red",//SABER_RED + "orange",//SABER_ORANGE + "yellow",//SABER_YELLOW + "green",//SABER_GREEN + "blue",//SABER_BLUE + "purple"//SABER_PURPLE +}; // Check if we are throwing it, launch it if needed, update position if needed. void WP_SaberThrow( gentity_t *self, usercmd_t *ucmd ) @@ -6336,13 +7117,31 @@ void WP_SaberThrow( gentity_t *self, usercmd_t *ucmd ) if ( saberent->s.pos.trType != TR_STATIONARY ) {//saber is in flight, lerp it + if ( self->health <= 0 )//&& level.time > saberent->s.time + 5000 ) + {//make us free ourselves after a time + if ( g_saberPickuppableDroppedSabers->integer + && G_DropSaberItem( self->client->ps.saber[0].name, self->client->ps.saber[0].blade[0].color, saberent->currentOrigin, saberent->s.pos.trDelta, saberent->currentAngles ) != NULL ) + {//dropped it + //free it + G_FreeEntity( saberent ); + //forget it + self->client->ps.saberEntityNum = ENTITYNUM_NONE; + return; + } + } WP_RunSaber( self, saberent ); } else {//it fell on the ground - if ( self->health <= 0 && level.time > saberent->s.time + 5000 ) + if ( self->health <= 0 )//&& level.time > saberent->s.time + 5000 ) {//make us free ourselves after a time + if ( g_saberPickuppableDroppedSabers->integer ) + {//spawn an item + G_DropSaberItem( self->client->ps.saber[0].name, self->client->ps.saber[0].blade[0].color, saberent->currentOrigin, saberent->s.pos.trDelta, saberent->currentAngles ); + } + //free it G_FreeEntity( saberent ); + //forget it self->client->ps.saberEntityNum = ENTITYNUM_NONE; return; } @@ -6846,7 +7645,7 @@ void WP_SaberStartMissileBlockCheck( gentity_t *self, usercmd_t *ucmd ) } } - if ( !self->client->ps.saber[0].activeBlocking ) + if ( (self->client->ps.saber[0].saberFlags&SFL_NOT_ACTIVE_BLOCKING) ) {//can't actively block with this saber type return; } @@ -7262,20 +8061,80 @@ void WP_SaberUpdate( gentity_t *self, usercmd_t *ucmd ) //is our saber in flight? if ( !self->client->ps.saberInFlight ) { // It isn't, which means we can update its position as we will. + qboolean alwaysBlock[MAX_SABERS][MAX_BLADES]; + qboolean forceBlock = qfalse; + qboolean noBlocking = qfalse; + + //clear out last frame's numbers + VectorClear(saberent->mins); + VectorClear(saberent->maxs); + Vehicle_t *pVeh = G_IsRidingVehicle( self ); if ( !self->client->ps.SaberActive() + || !self->client->ps.saberBlocking || PM_InKnockDown( &self->client->ps ) || PM_SuperBreakLoseAnim( self->client->ps.torsoAnim ) || (pVeh && pVeh->m_pVehicleInfo && pVeh->m_pVehicleInfo->type != VH_ANIMAL && pVeh->m_pVehicleInfo->type != VH_FLIER) )//riding a vehicle that you cannot block shots on {//can't block if saber isn't on - VectorClear(saberent->mins); - VectorClear(saberent->maxs); + int i, j; + for ( i = 0; i < MAX_SABERS; i++ ) + { + //initialize to not blocking + for ( j = 0; j < MAX_BLADES; j++ ) + { + alwaysBlock[i][j] = qfalse; + } + if ( i > 0 && !self->client->ps.dualSabers ) + {//not using a second saber, leave it not blocking + } + else + { + if ( (self->client->ps.saber[i].saberFlags2&SFL2_ALWAYS_BLOCK) ) + { + for ( j = 0; j < self->client->ps.saber[i].numBlades; j++ ) + { + alwaysBlock[i][j] = qtrue; + forceBlock = qtrue; + } + } + if ( self->client->ps.saber[i].bladeStyle2Start > 0 ) + { + for ( j = self->client->ps.saber[i].bladeStyle2Start; j < self->client->ps.saber[i].numBlades; j++ ) + { + if ( (self->client->ps.saber[i].saberFlags2&SFL2_ALWAYS_BLOCK2) ) + { + alwaysBlock[i][j] = qtrue; + forceBlock = qtrue; + } + else + { + alwaysBlock[i][j] = qfalse; + } + } + } + } + } + if ( !forceBlock ) + { + noBlocking = qtrue; + } + else if ( !self->client->ps.saberBlocking ) + {//turn blocking on! + self->client->ps.saberBlocking = BLK_TIGHT; + } + } + if ( noBlocking ) + { + //VectorClear(saberent->mins); + //VectorClear(saberent->maxs); G_SetOrigin(saberent, self->currentOrigin); } - else if ( self->client->ps.saberBlocking == BLK_TIGHT || self->client->ps.saberBlocking == BLK_WIDE ) + else if ( self->client->ps.saberBlocking == BLK_TIGHT + || self->client->ps.saberBlocking == BLK_WIDE ) {//FIXME: keep bbox in front of player, even when wide? vec3_t saberOrg; - if ( ( (self->s.number&&!Jedi_SaberBusy(self)&&!g_saberRealisticCombat->integer) || (self->s.number == 0 && self->client->ps.saberBlocking == BLK_WIDE && (g_saberAutoBlocking->integer||self->client->ps.saberBlockingTime>level.time)) ) + if ( !forceBlock + && ( (self->s.number&&!Jedi_SaberBusy(self)&&!g_saberRealisticCombat->integer) || (self->s.number == 0 && self->client->ps.saberBlocking == BLK_WIDE && (g_saberAutoBlocking->integer||self->client->ps.saberBlockingTime>level.time)) ) && self->client->ps.weaponTime <= 0 && !G_InCinematicSaberAnim( self ) ) {//full-size blocking for non-attacking player with g_saberAutoBlocking on @@ -7305,6 +8164,17 @@ void WP_SaberUpdate( gentity_t *self, usercmd_t *ucmd ) { for ( int bladeNum = 0; bladeNum < self->client->ps.saber[saberNum].numBlades; bladeNum++ ) { + if ( self->client->ps.saber[saberNum].blade[bladeNum].length <= 0.0f ) + {//don't include blades that are not on... + continue; + } + if ( forceBlock ) + {//doing blade-specific bbox-sizing only, see if this blade should be counted + if ( !alwaysBlock[saberNum][bladeNum] ) + {//this blade doesn't count right now + continue; + } + } VectorCopy( self->client->ps.saber[saberNum].blade[bladeNum].muzzlePoint, saberBase ); VectorMA( saberBase, self->client->ps.saber[saberNum].blade[bladeNum].length, self->client->ps.saber[saberNum].blade[bladeNum].muzzleDir, saberTip ); VectorMA( saberBase, self->client->ps.saber[saberNum].blade[bladeNum].length*0.5, self->client->ps.saber[saberNum].blade[bladeNum].muzzleDir, saberOrg ); @@ -7345,20 +8215,23 @@ void WP_SaberUpdate( gentity_t *self, usercmd_t *ucmd ) } } } - if ( self->client->ps.weaponTime > 0 - || self->s.number - || g_saberAutoBlocking->integer - || self->client->ps.saberBlockingTime > level.time ) - {//if attacking or blocking (or an NPC), inflate to a minimum size - for ( int i = 0; i < 3; i++ ) - { - if ( saberent->maxs[i] < minsize ) + if ( !forceBlock ) + {//not doing special "alwaysBlock" bbox + if ( self->client->ps.weaponTime > 0 + || self->s.number + || g_saberAutoBlocking->integer + || self->client->ps.saberBlockingTime > level.time ) + {//if attacking or blocking (or an NPC), inflate to a minimum size + for ( int i = 0; i < 3; i++ ) { - saberent->maxs[i] = minsize; - } - if ( saberent->mins[i] > -minsize ) - { - saberent->mins[i] = -minsize; + if ( saberent->maxs[i] < minsize ) + { + saberent->maxs[i] = minsize; + } + if ( saberent->mins[i] > -minsize ) + { + saberent->mins[i] = -minsize; + } } } } @@ -7424,8 +8297,8 @@ void WP_SaberUpdate( gentity_t *self, usercmd_t *ucmd ) */ else { // Otherwise there is no blocking possible. - VectorClear(saberent->mins); - VectorClear(saberent->maxs); + //VectorClear(saberent->mins); + //VectorClear(saberent->maxs); G_SetOrigin(saberent, self->currentOrigin); } saberent->clipmask = MASK_SHOT | CONTENTS_LIGHTSABER; @@ -7689,6 +8562,13 @@ void WP_ResistForcePush( gentity_t *self, gentity_t *pusher, qboolean noPenalty { return; } + + //NOTE: don't interrupt big anims with this! + if ( !PM_SaberCanInterruptMove( self->client->ps.saberMove, self->client->ps.torsoAnim ) ) + {//can't interrupt my current torso anim/sabermove with this, so ignore it entirely! + return; + } + if ( (!self->s.number ||( self->NPC && (self->NPC->aiFlags&NPCAI_BOSS_CHARACTER) ) ||( self->client && self->client->NPC_class == CLASS_SHADOWTROOPER ) @@ -7701,6 +8581,7 @@ void WP_ResistForcePush( gentity_t *self, gentity_t *pusher, qboolean noPenalty { runningResist = qtrue; } + if ( !runningResist && self->client->ps.groundEntityNum != ENTITYNUM_NONE && !PM_SpinningSaberAnim( self->client->ps.legsAnim ) @@ -7715,8 +8596,8 @@ void WP_ResistForcePush( gentity_t *self, gentity_t *pusher, qboolean noPenalty {//play resist just in torso parts = SETANIM_TORSO; } - //FIXME: don't interrupt big anims with this! NPC_SetAnim( self, parts, BOTH_RESISTPUSH, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + if ( !noPenalty ) { if ( !runningResist ) @@ -8044,36 +8925,42 @@ qboolean WP_ForceThrowable( gentity_t *ent, gentity_t *forwardEnt, gentity_t *se return qfalse; } } - else if ( ent->s.eType == ET_ITEM - && ent->item - && ent->item->giType == IT_HOLDABLE - && ent->item->giTag == INV_SECURITY_KEY ) - //&& (ent->flags&FL_DROPPED_ITEM) ??? - {//dropped security keys can't be pushed? But placed ones can...? does this make any sense? - if ( !pull || self->s.number ) - {//can't push, NPC's can't do anything to it + else if ( ent->s.eType == ET_ITEM ) + { + if ( (ent->flags&FL_NO_KNOCKBACK) ) + { return qfalse; } - else - { - if ( g_crosshairEntNum != ent->s.number ) - {//player can pull it if looking *right* at it - if ( cone >= 1.0f ) - {//we did a forwardEnt trace - if ( forwardEnt != ent ) - {//must be pointing right at them - return qfalse; + if ( ent->item + && ent->item->giType == IT_HOLDABLE + && ent->item->giTag == INV_SECURITY_KEY ) + //&& (ent->flags&FL_DROPPED_ITEM) ??? + {//dropped security keys can't be pushed? But placed ones can...? does this make any sense? + if ( !pull || self->s.number ) + {//can't push, NPC's can't do anything to it + return qfalse; + } + else + { + if ( g_crosshairEntNum != ent->s.number ) + {//player can pull it if looking *right* at it + if ( cone >= 1.0f ) + {//we did a forwardEnt trace + if ( forwardEnt != ent ) + {//must be pointing right at them + return qfalse; + } } - } - else if ( forward ) - {//do a forwardEnt trace - trace_t tr; - vec3_t end; - VectorMA( self->client->renderInfo.eyePoint, radius, forward, end ); - gi.trace( &tr, self->client->renderInfo.eyePoint, vec3_origin, vec3_origin, end, self->s.number, MASK_OPAQUE|CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_ITEM|CONTENTS_CORPSE );//was MASK_SHOT, changed to match crosshair trace - if ( tr.entityNum != ent->s.number ) - {//last chance - return qfalse; + else if ( forward ) + {//do a forwardEnt trace + trace_t tr; + vec3_t end; + VectorMA( self->client->renderInfo.eyePoint, radius, forward, end ); + gi.trace( &tr, self->client->renderInfo.eyePoint, vec3_origin, vec3_origin, end, self->s.number, MASK_OPAQUE|CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_ITEM|CONTENTS_CORPSE );//was MASK_SHOT, changed to match crosshair trace + if ( tr.entityNum != ent->s.number ) + {//last chance + return qfalse; + } } } } @@ -11711,6 +12598,8 @@ void ForceJump( gentity_t *self, usercmd_t *ucmd ) { case FJ_FORWARD: if ( ((self->client->NPC_class == CLASS_BOBAFETT||self->client->NPC_class == CLASS_ROCKETTROOPER) && self->client->ps.forceJumpCharge > 300 ) + || (self->client->ps.saber[0].saberFlags&SFL_NO_FLIPS) + || (self->client->ps.dualSabers && (self->client->ps.saber[1].saberFlags&SFL_NO_FLIPS) ) || ( self->NPC && self->NPC->rank != RANK_CREWMAN && self->NPC->rank <= RANK_LT_JG ) ) @@ -11731,6 +12620,8 @@ void ForceJump( gentity_t *self, usercmd_t *ucmd ) break; case FJ_BACKWARD: if ( ((self->client->NPC_class == CLASS_BOBAFETT||self->client->NPC_class == CLASS_ROCKETTROOPER) && self->client->ps.forceJumpCharge > 300 ) + || (self->client->ps.saber[0].saberFlags&SFL_NO_FLIPS) + || (self->client->ps.dualSabers && (self->client->ps.saber[1].saberFlags&SFL_NO_FLIPS) ) || ( self->NPC && self->NPC->rank != RANK_CREWMAN && self->NPC->rank <= RANK_LT_JG ) ) @@ -11744,6 +12635,8 @@ void ForceJump( gentity_t *self, usercmd_t *ucmd ) break; case FJ_RIGHT: if ( ((self->client->NPC_class == CLASS_BOBAFETT||self->client->NPC_class == CLASS_ROCKETTROOPER) && self->client->ps.forceJumpCharge > 300 ) + || (self->client->ps.saber[0].saberFlags&SFL_NO_FLIPS) + || (self->client->ps.dualSabers && (self->client->ps.saber[1].saberFlags&SFL_NO_FLIPS) ) || ( self->NPC && self->NPC->rank != RANK_CREWMAN && self->NPC->rank <= RANK_LT_JG ) ) @@ -11757,6 +12650,8 @@ void ForceJump( gentity_t *self, usercmd_t *ucmd ) break; case FJ_LEFT: if ( ((self->client->NPC_class == CLASS_BOBAFETT||self->client->NPC_class == CLASS_ROCKETTROOPER) && self->client->ps.forceJumpCharge > 300 ) + || (self->client->ps.saber[0].saberFlags&SFL_NO_FLIPS) + || (self->client->ps.dualSabers && (self->client->ps.saber[1].saberFlags&SFL_NO_FLIPS) ) || ( self->NPC && self->NPC->rank != RANK_CREWMAN && self->NPC->rank <= RANK_LT_JG ) ) @@ -12126,7 +13021,7 @@ qboolean WP_ForcePowerUsable( gentity_t *self, forcePowers_t forcePower, int ove return qfalse; } - if ( self->client->ps.saber[0].singleBladeThrowable//SaberStaff() //using staff + if ( (self->client->ps.saber[0].saberFlags&SFL_SINGLE_BLADE_THROWABLE)//SaberStaff() //using staff && !self->client->ps.dualSabers //only 1, in right hand && !self->client->ps.saber[0].blade[1].active )//only first blade is on {//allow power @@ -12134,14 +13029,14 @@ qboolean WP_ForcePowerUsable( gentity_t *self, forcePowers_t forcePower, int ove } else { - if ( forcePower == FP_SABERTHROW && !self->client->ps.saber[0].throwable ) + if ( forcePower == FP_SABERTHROW && (self->client->ps.saber[0].saberFlags&SFL_NOT_THROWABLE) ) {//cannot throw this kind of saber return qfalse; } if ( self->client->ps.saber[0].Active() ) { - if ( self->client->ps.saber[0].twoHanded ) + if ( (self->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) ) { if ( g_saberRestrictForce->integer ) { @@ -12158,7 +13053,8 @@ qboolean WP_ForcePowerUsable( gentity_t *self, forcePowers_t forcePower, int ove } } } - if ( self->client->ps.saber[0].twoHanded || (self->client->ps.dualSabers && self->client->ps.saber[1].Active()) ) + if ( (self->client->ps.saber[0].saberFlags&SFL_TWO_HANDED) + || (self->client->ps.dualSabers && self->client->ps.saber[1].Active()) ) {//this saber requires the use of two hands OR our other hand is using an active saber too if ( (self->client->ps.saber[0].forceRestrictions&(1<buttons & BUTTON_FORCE_LIGHTNING ) + if ( !self->s.number + && self->client->NPC_class == CLASS_BOBAFETT ) + {//Boba Fett + if ( ucmd->buttons & BUTTON_FORCE_LIGHTNING ) + {//start flamethrower + Boba_DoFlameThrower( self ); + return; + } + else if ( self->client->ps.forcePowerDuration[FP_LIGHTNING] ) + { + self->client->ps.forcePowerDuration[FP_LIGHTNING] = 0; + Boba_StopFlameThrower( self ); + return; + } + } + else if ( ucmd->buttons & BUTTON_FORCE_LIGHTNING ) { ForceLightning( self ); } diff --git a/code/game/wp_saber.h b/code/game/wp_saber.h index a1a7b34..6a68c76 100644 --- a/code/game/wp_saber.h +++ b/code/game/wp_saber.h @@ -130,6 +130,8 @@ typedef enum #define MEF_MULTI_SPIN 0x000040 //spin once every second, until the effect stops #define MEF_LOOK_AT_ENEMY 0x000200 +#define SABER_PITCH_HACK 90 + extern float forceJumpStrength[]; extern float forceJumpHeight[]; extern float forceJumpHeightMax[]; @@ -140,6 +142,7 @@ extern void ForceSpeed( gentity_t *self, int duration = 0 ); extern float forceSpeedValue[]; extern float forceSpeedRangeMod[]; extern float forceSpeedFOVMod[]; +extern char *saberColorStringForColor[]; #define FORCE_SPEED_DURATION 10000.0f #define FORCE_RAGE_DURATION 10000.0f @@ -183,6 +186,7 @@ extern void WP_SaberFreeStrings( saberInfo_t &saber ); extern qboolean G_EnoughPowerForSpecialMove( int forcePower, int cost, qboolean kataMove = qfalse ); extern void G_DrainPowerForSpecialMove( gentity_t *self, forcePowers_t fp, int cost, qboolean kataMove = qfalse ); extern int G_CostForSpecialMove( int cost, qboolean kataMove = qfalse ); +extern gentity_t *G_DropSaberItem( const char *saberType, saber_colors_t saberColor, vec3_t saberPos, vec3_t saberVel, vec3_t saberAngles, gentity_t *copySaber = NULL ); typedef enum { diff --git a/code/game/wp_saberLoad.cpp b/code/game/wp_saberLoad.cpp index 7ef6446..28d29a3 100644 --- a/code/game/wp_saberLoad.cpp +++ b/code/game/wp_saberLoad.cpp @@ -13,7 +13,7 @@ extern qboolean PM_SaberInAttack( int move ); extern stringID_table_t FPTable[]; -#define MAX_SABER_DATA_SIZE 0x8000 +#define MAX_SABER_DATA_SIZE 0x80000 char SaberParms[MAX_SABER_DATA_SIZE]; void Saber_SithSwordPrecache( void ) @@ -56,6 +56,72 @@ stringID_table_t SaberTable[] = "", -1 }; +stringID_table_t SaberMoveTable[] = +{ + ENUM2STRING(LS_NONE), + // Attacks + ENUM2STRING(LS_A_TL2BR), + ENUM2STRING(LS_A_L2R), + ENUM2STRING(LS_A_BL2TR), + ENUM2STRING(LS_A_BR2TL), + ENUM2STRING(LS_A_R2L), + ENUM2STRING(LS_A_TR2BL), + ENUM2STRING(LS_A_T2B), + ENUM2STRING(LS_A_BACKSTAB), + ENUM2STRING(LS_A_BACK), + ENUM2STRING(LS_A_BACK_CR), + ENUM2STRING(LS_ROLL_STAB), + ENUM2STRING(LS_A_LUNGE), + ENUM2STRING(LS_A_JUMP_T__B_), + ENUM2STRING(LS_A_FLIP_STAB), + ENUM2STRING(LS_A_FLIP_SLASH), + ENUM2STRING(LS_JUMPATTACK_DUAL), + ENUM2STRING(LS_JUMPATTACK_ARIAL_LEFT), + ENUM2STRING(LS_JUMPATTACK_ARIAL_RIGHT), + ENUM2STRING(LS_JUMPATTACK_CART_LEFT), + ENUM2STRING(LS_JUMPATTACK_CART_RIGHT), + ENUM2STRING(LS_JUMPATTACK_STAFF_LEFT), + ENUM2STRING(LS_JUMPATTACK_STAFF_RIGHT), + ENUM2STRING(LS_BUTTERFLY_LEFT), + ENUM2STRING(LS_BUTTERFLY_RIGHT), + ENUM2STRING(LS_A_BACKFLIP_ATK), + ENUM2STRING(LS_SPINATTACK_DUAL), + ENUM2STRING(LS_SPINATTACK), + ENUM2STRING(LS_LEAP_ATTACK), + ENUM2STRING(LS_SWOOP_ATTACK_RIGHT), + ENUM2STRING(LS_SWOOP_ATTACK_LEFT), + ENUM2STRING(LS_TAUNTAUN_ATTACK_RIGHT), + ENUM2STRING(LS_TAUNTAUN_ATTACK_LEFT), + ENUM2STRING(LS_KICK_F), + ENUM2STRING(LS_KICK_B), + ENUM2STRING(LS_KICK_R), + ENUM2STRING(LS_KICK_L), + ENUM2STRING(LS_KICK_S), + ENUM2STRING(LS_KICK_BF), + ENUM2STRING(LS_KICK_RL), + ENUM2STRING(LS_KICK_F_AIR), + ENUM2STRING(LS_KICK_B_AIR), + ENUM2STRING(LS_KICK_R_AIR), + ENUM2STRING(LS_KICK_L_AIR), + ENUM2STRING(LS_STABDOWN), + ENUM2STRING(LS_STABDOWN_STAFF), + ENUM2STRING(LS_STABDOWN_DUAL), + ENUM2STRING(LS_DUAL_SPIN_PROTECT), + ENUM2STRING(LS_STAFF_SOULCAL), + ENUM2STRING(LS_A1_SPECIAL), + ENUM2STRING(LS_A2_SPECIAL), + ENUM2STRING(LS_A3_SPECIAL), + ENUM2STRING(LS_UPSIDE_DOWN_ATTACK), + ENUM2STRING(LS_PULL_ATTACK_STAB), + ENUM2STRING(LS_PULL_ATTACK_SWING), + ENUM2STRING(LS_SPINATTACK_ALORA), + ENUM2STRING(LS_DUAL_FB), + ENUM2STRING(LS_DUAL_LR), + ENUM2STRING(LS_HILT_BASH), + "", -1 +}; + + saber_styles_t TranslateSaberStyle( const char *name ) { if ( !Q_stricmp( name, "fast" ) ) @@ -117,6 +183,176 @@ void WP_SaberFreeStrings( saberInfo_t &saber ) } } +qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ) +{ + if ( saber ) + { + if ( saber->bladeStyle2Start > 0 ) + { + if ( bladeNum >= saber->bladeStyle2Start ) + { + return qtrue; + } + } + } + return qfalse; +} + +qboolean WP_SaberBladeDoTransitionDamage( saberInfo_t *saber, int bladeNum ) +{ + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && (saber->saberFlags2&SFL2_TRANSITION_DAMAGE) ) + {//use first blade style for this blade + return qtrue; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && (saber->saberFlags2&SFL2_TRANSITION_DAMAGE2) ) + {//use second blade style for this blade + return qtrue; + } + return qfalse; +} + +qboolean WP_UseFirstValidSaberStyle( gentity_t *ent, int *saberAnimLevel ) +{ + if ( ent && ent->client ) + { + qboolean styleInvalid = qfalse; + int validStyles = 0, styleNum; + + //initially, all styles are valid + for ( styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + { + validStyles |= (1<client->ps.saber[0].Active() + && ent->client->ps.saber[0].stylesForbidden ) + { + if ( (ent->client->ps.saber[0].stylesForbidden&(1<<*saberAnimLevel)) ) + {//not a valid style for first saber! + styleInvalid = qtrue; + validStyles &= ~ent->client->ps.saber[0].stylesForbidden; + } + } + if ( ent->client->ps.dualSabers ) + {//check second saber, too + if ( ent->client->ps.saber[1].Active() + && ent->client->ps.saber[1].stylesForbidden ) + { + if ( (ent->client->ps.saber[1].stylesForbidden&(1<<*saberAnimLevel)) ) + {//not a valid style for second saber! + styleInvalid = qtrue; + //only the ones both sabers allow is valid + validStyles &= ~ent->client->ps.saber[1].stylesForbidden; + } + } + else + {//can't use dual style if not using 2 sabers + validStyles &= ~(1<client ) + { + if ( ent->client->ps.saber[0].Active() + && ent->client->ps.saber[0].stylesForbidden ) + { + if ( (ent->client->ps.saber[0].stylesForbidden&(1<client->ps.dualSabers ) + {//check second saber, too + if ( ent->client->ps.saber[1].Active() ) + { + if ( ent->client->ps.saber[1].stylesForbidden ) + { + if ( (ent->client->ps.saber[1].stylesForbidden&(1<client->ps.saber[0].Active() + && (ent->client->ps.saber[0].stylesLearned&(1<client->ps.saber[1].stylesLearned&(1<bladeStyle2Start > 0 + && saber->numBlades > saber->bladeStyle2Start ) + { + if ( (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) + && (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + {//all blades are always on + return qfalse; + } + } + else + { + if ( (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//all blades are always on + return qfalse; + } + } + //you can turn some off + return qtrue; +} + void WP_SaberSetDefaults( saberInfo_t *saber, qboolean setColors = qtrue ) { //Set defaults so that, if it fails, there's at least something there @@ -138,23 +374,112 @@ void WP_SaberSetDefaults( saberInfo_t *saber, qboolean setColors = qtrue ) saber->soundOff = G_SoundIndex( "sound/weapons/saber/enemy_saber_off.wav" ); saber->numBlades = 1; saber->type = SABER_SINGLE; - saber->style = SS_NONE; + saber->stylesLearned = 0; + saber->stylesForbidden = 0; saber->maxChain = 0;//0 = use default behavior - saber->lockable = qtrue; - saber->throwable = qtrue; - saber->disarmable = qtrue; - saber->activeBlocking = qtrue; - saber->twoHanded = qfalse; saber->forceRestrictions = 0; saber->lockBonus = 0; saber->parryBonus = 0; saber->breakParryBonus = 0; + saber->breakParryBonus2 = 0; saber->disarmBonus = 0; + saber->disarmBonus2 = 0; saber->singleBladeStyle = SS_NONE;//makes it so that you use a different style if you only have the first blade active - saber->singleBladeThrowable = qfalse;//makes it so that you can throw this saber if only the first blade is on saber->brokenSaber1 = NULL;//if saber is actually hit by another saber, it can be cut in half/broken and will be replaced with this saber in your right hand saber->brokenSaber2 = NULL;//if saber is actually hit by another saber, it can be cut in half/broken and will be replaced with this saber in your left hand - saber->returnDamage = qfalse;//when returning from a saber throw, it keeps spinning and doing damage +//===NEW======================================================================================== + //these values are global to the saber, like all of the ones above + saber->saberFlags = 0; //see all the SFL_ flags + saber->saberFlags2 = 0; //see all the SFL2_ flags + saber->spinSound = 0; //none - if set, plays this sound as it spins when thrown + saber->swingSound[0] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + saber->swingSound[1] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + saber->swingSound[2] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + saber->fallSound[0] = 0; //none - if set, plays one of these 3 sounds when weapon falls to the ground - NOTE: must provide all 3!!! + saber->fallSound[1] = 0; //none - if set, plays one of these 3 sounds when weapon falls to the ground - NOTE: must provide all 3!!! + saber->fallSound[2] = 0; //none - if set, plays one of these 3 sounds when weapon falls to the ground - NOTE: must provide all 3!!! + + //done in game (server-side code) + saber->moveSpeedScale = 1.0f; //1.0 - you move faster/slower when using this saber + saber->animSpeedScale = 1.0f; //1.0 - plays normal attack animations faster/slower + + saber->kataMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they press both attack buttons at the same time + saber->lungeAtkMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they crouch+fwd+attack + saber->jumpAtkUpMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+attack + saber->jumpAtkFwdMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+fwd+attack + saber->jumpAtkBackMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+back+attack + saber->jumpAtkRightMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+rightattack + saber->jumpAtkLeftMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+left+attack + saber->readyAnim = -1; //-1 - anim to use when standing idle + saber->drawAnim = -1; //-1 - anim to use when drawing weapon + saber->putawayAnim = -1; //-1 - anim to use when putting weapon away + saber->tauntAnim = -1; //-1 - anim to use when hit "taunt" + saber->bowAnim = -1; //-1 - anim to use when hit "bow" + saber->meditateAnim = -1; //-1 - anim to use when hit "meditate" + saber->flourishAnim = -1; //-1 - anim to use when hit "flourish" + saber->gloatAnim = -1; //-1 - anim to use when hit "gloat" + + //***NOTE: you can only have a maximum of 2 "styles" of blades, so this next value, "bladeStyle2Start" is the number of the first blade to use these value on... all blades before this use the normal values above, all blades at and after this number use the secondary values below*** + saber->bladeStyle2Start = 0; //0 - if set, blades from this number and higher use the following values (otherwise, they use the normal values already set) + + //***The following can be different for the extra blades - not setting them individually defaults them to the value for the whole saber (and first blade)*** + + //===PRIMARY BLADES===================== + //done in cgame (client-side code) + saber->trailStyle = 0; //0 - default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + saber->g2MarksShader[0]=0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + saber->g2WeaponMarkShader[0]=0; //none - if set, the game will ry to project this shader onto the weapon when it damages a person (good for a blood splatter on the weapon) + //saber->bladeShader = 0; //none - if set, overrides the shader used for the saber blade? + //saber->trailShader = 0; //none - if set, overrides the shader used for the saber trail? + saber->hitSound[0] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hitSound[1] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hitSound[2] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->blockSound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->blockSound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->blockSound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->bounceSound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounceSound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounceSound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->blockEffect = 0; //none - if set, plays this effect when the saber/sword hits another saber/sword (instead of "saber/saber_block.efx") + saber->hitPersonEffect = 0; //none - if set, plays this effect when the saber/sword hits a person (instead of "saber/blood_sparks_mp.efx") + saber->hitOtherEffect = 0; //none - if set, plays this effect when the saber/sword hits something else damagable (instead of "saber/saber_cut.efx") + saber->bladeEffect = 0; //none - if set, plays this effect at the blade tag + + //done in game (server-side code) + saber->knockbackScale = 0; //0 - if non-zero, uses damage done to calculate an appropriate amount of knockback + saber->damageScale = 1.0f; //1 - scale up or down the damage done by the saber + saber->splashRadius = 0.0f; //0 - radius of splashDamage + saber->splashDamage = 0; //0 - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + saber->splashKnockback = 0.0f; //0 - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + + //===SECONDARY BLADES=================== + //done in cgame (client-side code) + saber->trailStyle2 = 0; //0 - default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + saber->g2MarksShader2[0]=0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + saber->g2WeaponMarkShader2[0]=0; //none - if set, the game will ry to project this shader onto the weapon when it damages a person (good for a blood splatter on the weapon) + //saber->bladeShader = 0; //none - if set, overrides the shader used for the saber blade? + //saber->trailShader = 0; //none - if set, overrides the shader used for the saber trail? + saber->hit2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hit2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hit2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->block2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->block2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->block2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->bounce2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounce2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounce2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->blockEffect2 = 0; //none - if set, plays this effect when the saber/sword hits another saber/sword (instead of "saber/saber_block.efx") + saber->hitPersonEffect2 = 0; //none - if set, plays this effect when the saber/sword hits a person (instead of "saber/blood_sparks_mp.efx") + saber->hitOtherEffect2 = 0; //none - if set, plays this effect when the saber/sword hits something else damagable (instead of "saber/saber_cut.efx") + saber->bladeEffect2 = 0; //none - if set, plays this effect at the blade tag + + //done in game (server-side code) + saber->knockbackScale2 = 0; //0 - if non-zero, uses damage done to calculate an appropriate amount of knockback + saber->damageScale2 = 1.0f; //1 - scale up or down the damage done by the saber + saber->splashRadius2 = 0.0f; //0 - radius of splashDamage + saber->splashDamage2 = 0; //0 - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + saber->splashKnockback2 = 0.0f; //0 - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius +//========================================================================================================================================= } qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean setColors ) @@ -311,7 +636,7 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - if ( n < 1 || n >= MAX_BLADES ) + if ( n < 1 || n > MAX_BLADES ) { G_Error( "WP_SaberParseParms: saber %s has illegal number of blades (%d) max: %d", SaberName, n, MAX_BLADES ); continue; @@ -470,11 +795,46 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean //locked saber style if ( !Q_stricmp( token, "saberStyle" ) ) { + int style, styleNum; if ( COM_ParseString( &p, &value ) ) { continue; } - saber->style = TranslateSaberStyle( value ); + //OLD WAY: only allowed ONE style + style = TranslateSaberStyle( value ); + //learn only this style + saber->stylesLearned = (1<stylesForbidden = 0; + for ( styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + { + if ( styleNum != style ) + { + saber->stylesForbidden |= (1<stylesLearned |= (1<stylesForbidden |= (1<lockable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_LOCKABLE; + } continue; } @@ -510,7 +873,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->throwable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_THROWABLE; + } continue; } @@ -522,7 +888,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->disarmable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_DISARMABLE; + } continue; } @@ -534,7 +903,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->activeBlocking = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_ACTIVE_BLOCKING; + } continue; } @@ -546,7 +918,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->twoHanded = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_TWO_HANDED; + } continue; } @@ -601,6 +976,18 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean continue; } + //breakParryBonus2 + if ( !Q_stricmp( token, "breakParryBonus2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->breakParryBonus2 = n; + continue; + } + //disarmBonus if ( !Q_stricmp( token, "disarmBonus" ) ) { @@ -613,6 +1000,18 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean continue; } + //disarmBonus2 + if ( !Q_stricmp( token, "disarmBonus2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->disarmBonus2 = n; + continue; + } + //single blade saber style if ( !Q_stricmp( token, "singleBladeStyle" ) ) { @@ -632,7 +1031,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->singleBladeThrowable = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_SINGLE_BLADE_THROWABLE; + } continue; } @@ -666,7 +1068,547 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean SkipRestOfLine( &p ); continue; } - saber->returnDamage = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_RETURN_DAMAGE; + } + continue; + } + + //spin sound (when thrown) + if ( !Q_stricmp( token, "spinSound" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->spinSound = G_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //fall sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "fallSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->fallSound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //fall sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "fallSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->fallSound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //fall sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "fallSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->fallSound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //you move faster/slower when using this saber + if ( !Q_stricmp( token, "moveSpeedScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->moveSpeedScale = f; + continue; + } + + //plays normal attack animations faster/slower + if ( !Q_stricmp( token, "animSpeedScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->animSpeedScale = f; + continue; + } + + //if set, weapon stays active even in water + if ( !Q_stricmp( token, "onInWater" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_ON_IN_WATER; + } + continue; + } + + //if non-zero, the saber will bounce back when it hits solid architecture (good for real-sword type mods) + if ( !Q_stricmp( token, "bounceOnWalls" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_BOUNCE_ON_WALLS; + } + continue; + } + + //if set, saber model is bolted to wrist, not in hand... useful for things like claws & shields, etc. + if ( !Q_stricmp( token, "boltToWrist" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_BOLT_TO_WRIST; + } + continue; + } + + //kata move + if ( !Q_stricmp( token, "kataMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->kataMove = saberMove; //LS_INVALID - if set, player will execute this move when they press both attack buttons at the same time + } + continue; + } + //lungeAtkMove move + if ( !Q_stricmp( token, "lungeAtkMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->lungeAtkMove = saberMove; + } + continue; + } + //jumpAtkUpMove move + if ( !Q_stricmp( token, "jumpAtkUpMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkUpMove = saberMove; + } + continue; + } + //jumpAtkFwdMove move + if ( !Q_stricmp( token, "jumpAtkFwdMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkFwdMove = saberMove; + } + continue; + } + //jumpAtkBackMove move + if ( !Q_stricmp( token, "jumpAtkBackMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkBackMove = saberMove; + } + continue; + } + //jumpAtkRightMove move + if ( !Q_stricmp( token, "jumpAtkRightMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkRightMove = saberMove; + } + continue; + } + //jumpAtkLeftMove move + if ( !Q_stricmp( token, "jumpAtkLeftMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkLeftMove = saberMove; + } + continue; + } + //readyAnim + if ( !Q_stricmp( token, "readyAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->readyAnim = anim; + } + continue; + } + //drawAnim + if ( !Q_stricmp( token, "drawAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->drawAnim = anim; + } + continue; + } + //putawayAnim + if ( !Q_stricmp( token, "putawayAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->putawayAnim = anim; + } + continue; + } + //tauntAnim + if ( !Q_stricmp( token, "tauntAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->tauntAnim = anim; + } + continue; + } + //bowAnim + if ( !Q_stricmp( token, "bowAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->bowAnim = anim; + } + continue; + } + //meditateAnim + if ( !Q_stricmp( token, "meditateAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->meditateAnim = anim; + } + continue; + } + //flourishAnim + if ( !Q_stricmp( token, "flourishAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->flourishAnim = anim; + } + continue; + } + //gloatAnim + if ( !Q_stricmp( token, "gloatAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + int anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->gloatAnim = anim; + } + continue; + } + + //if set, cannot do roll-stab move at end of roll + if ( !Q_stricmp( token, "noRollStab" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_ROLL_STAB; + } + continue; + } + + //if set, cannot do pull+attack move (move not available in MP anyway) + if ( !Q_stricmp( token, "noPullAttack" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_PULL_ATTACK; + } + continue; + } + + //if set, cannot do back-stab moves + if ( !Q_stricmp( token, "noBackAttack" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_BACK_ATTACK; + } + continue; + } + + //if set, cannot do stabdown move (when enemy is on ground) + if ( !Q_stricmp( token, "noStabDown" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_STABDOWN; + } + continue; + } + + //if set, cannot side-run or forward-run on walls + if ( !Q_stricmp( token, "noWallRuns" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_RUNS; + } + continue; + } + + //if set, cannot do backflip off wall or side-flips off walls + if ( !Q_stricmp( token, "noWallFlips" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_FLIPS; + } + continue; + } + + //if set, cannot grab wall & jump off + if ( !Q_stricmp( token, "noWallGrab" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_GRAB; + } + continue; + } + + //if set, cannot roll + if ( !Q_stricmp( token, "noRolls" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_ROLLS; + } + continue; + } + + //if set, cannot do flips + if ( !Q_stricmp( token, "noFlips" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_FLIPS; + } + continue; + } + + //if set, cannot do cartwheels + if ( !Q_stricmp( token, "noCartwheels" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_CARTWHEELS; + } + continue; + } + + //if set, cannot do kicks (can't do kicks anyway if using a throwable saber/sword) + if ( !Q_stricmp( token, "noKicks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_KICKS; + } + continue; + } + + //if set, cannot do the simultaneous attack left/right moves (only available in Dual Lightsaber Combat Style) + if ( !Q_stricmp( token, "noMirrorAttacks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_MIRROR_ATTACKS; + } continue; } @@ -676,6 +1618,776 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber, qboolean continue; } +//===ABOVE THIS, ALL VALUES ARE GLOBAL TO THE SABER======================================================== + //bladeStyle2Start - where to start using the second set of blade data + if ( !Q_stricmp( token, "bladeStyle2Start" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->bladeStyle2Start = n; + continue; + } +//===BLADE-SPECIFIC FIELDS================================================================================= + + //===PRIMARY BLADE==================================== + //stops the saber from drawing marks on the world (good for real-sword type mods) + if ( !Q_stricmp( token, "noWallMarks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_WALL_MARKS; + } + continue; + } + + //stops the saber from drawing a dynamic light (good for real-sword type mods) + if ( !Q_stricmp( token, "noDlight" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DLIGHT; + } + continue; + } + + //stops the saber from drawing a blade (good for real-sword type mods) + if ( !Q_stricmp( token, "noBlade" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_BLADE; + } + continue; + } + + //default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + if ( !Q_stricmp( token, "trailStyle" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->trailStyle = n; + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2MarksShader" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } + Q_strncpyz( saber->g2MarksShader, value, sizeof(saber->g2MarksShader), qtrue ); + //NOTE: registers this on cgame side where it registers all client assets + continue; + } + + //if set, the game will ry to project this shader onto the weapon when it damages a person (good for a blood splatter on the weapon) + if ( !Q_stricmp( token, "g2WeaponMarkShader" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } + Q_strncpyz( saber->g2WeaponMarkShader, value, sizeof(saber->g2WeaponMarkShader), qtrue ); + //NOTE: registers this on cgame side where it registers all client assets + continue; + } + + //if non-zero, uses damage done to calculate an appropriate amount of knockback + if ( !Q_stricmp( token, "knockbackScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->knockbackScale = f; + continue; + } + + //scale up or down the damage done by the saber + if ( !Q_stricmp( token, "damageScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->damageScale = f; + continue; + } + + //if non-zero, the saber never does dismemberment (good for pointed/blunt melee weapons) + if ( !Q_stricmp( token, "noDismemberment" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DISMEMBERMENT; + } + continue; + } + + //if non-zero, the saber will not do damage or any effects when it is idle (not in an attack anim). (good for real-sword type mods) + if ( !Q_stricmp( token, "noIdleEffect" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_IDLE_EFFECT; + } + continue; + } + + //if set, the blades will always be blocking (good for things like shields that should always block) + if ( !Q_stricmp( token, "alwaysBlock" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_ALWAYS_BLOCK; + } + continue; + } + + //if set, the blades cannot manually be toggled on and off + if ( !Q_stricmp( token, "noManualDeactivate" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_MANUAL_DEACTIVATE; + } + continue; + } + + //if set, the blade does damage in start, transition and return anims (like strong style does) + if ( !Q_stricmp( token, "transitionDamage" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_TRANSITION_DAMAGE; + } + continue; + } + + //splashRadius - radius of splashDamage + if ( !Q_stricmp( token, "splashRadius" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashRadius = f; + continue; + } + + //splashDamage - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashDamage" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashDamage = n; + continue; + } + + //splashKnockback - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashKnockback" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashKnockback = f; + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //block effect - when saber/sword hits another saber/sword + if ( !Q_stricmp( token, "blockEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockEffect = G_EffectIndex( (char *)value ); + continue; + } + + //hit person effect - when saber/sword hits a person + if ( !Q_stricmp( token, "hitPersonEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitPersonEffect = G_EffectIndex( (char *)value ); + continue; + } + + //hit other effect - when saber/sword hits sopmething else damagable + if ( !Q_stricmp( token, "hitOtherEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitOtherEffect = G_EffectIndex( (char *)value ); + continue; + } + + //blade effect + if ( !Q_stricmp( token, "bladeEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bladeEffect = G_EffectIndex( (char *)value ); + continue; + } + + //if non-zero, the saber will not do the big, white clash flare with other sabers + if ( !Q_stricmp( token, "noClashFlare" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_CLASH_FLARE; + } + continue; + } + + //===SECONDARY BLADE==================================== + //stops the saber from drawing marks on the world (good for real-sword type mods) + if ( !Q_stricmp( token, "noWallMarks2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_WALL_MARKS2; + } + continue; + } + + //stops the saber from drawing a dynamic light (good for real-sword type mods) + if ( !Q_stricmp( token, "noDlight2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DLIGHT2; + } + continue; + } + + //stops the saber from drawing a blade (good for real-sword type mods) + if ( !Q_stricmp( token, "noBlade2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_BLADE2; + } + continue; + } + + //default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + if ( !Q_stricmp( token, "trailStyle2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->trailStyle2 = n; + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2MarksShader2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } + Q_strncpyz( saber->g2MarksShader2, value, sizeof(saber->g2MarksShader2), qtrue ); + //NOTE: registers this on cgame side where it registers all client assets + continue; + } + + //if set, the game will ry to project this shader onto the weapon when it damages a person (good for a blood splatter on the weapon) + if ( !Q_stricmp( token, "g2WeaponMarkShader2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } + Q_strncpyz( saber->g2WeaponMarkShader2, value, sizeof(saber->g2WeaponMarkShader2), qtrue ); + //NOTE: registers this on cgame side where it registers all client assets + continue; + } + + //if non-zero, uses damage done to calculate an appropriate amount of knockback + if ( !Q_stricmp( token, "knockbackScale2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->knockbackScale2 = f; + continue; + } + + //scale up or down the damage done by the saber + if ( !Q_stricmp( token, "damageScale2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->damageScale2 = f; + continue; + } + + //if non-zero, the saber never does dismemberment (good for pointed/blunt melee weapons) + if ( !Q_stricmp( token, "noDismemberment2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DISMEMBERMENT2; + } + continue; + } + + //if non-zero, the saber will not do damage or any effects when it is idle (not in an attack anim). (good for real-sword type mods) + if ( !Q_stricmp( token, "noIdleEffect2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_IDLE_EFFECT2; + } + continue; + } + + //if set, the blades will always be blocking (good for things like shields that should always block) + if ( !Q_stricmp( token, "alwaysBlock2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_ALWAYS_BLOCK2; + } + continue; + } + + //if set, the blades cannot manually be toggled on and off + if ( !Q_stricmp( token, "noManualDeactivate2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_MANUAL_DEACTIVATE2; + } + continue; + } + + //if set, the blade does damage in start, transition and return anims (like strong style does) + if ( !Q_stricmp( token, "transitionDamage2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_TRANSITION_DAMAGE2; + } + continue; + } + + //splashRadius - radius of splashDamage + if ( !Q_stricmp( token, "splashRadius2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashRadius2 = f; + continue; + } + + //splashDamage - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashDamage2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashDamage2 = n; + continue; + } + + //splashKnockback - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashKnockback2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashKnockback2 = f; + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[0] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[1] = G_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[2] = G_SoundIndex( (char *)value ); + continue; + } + + //block effect - when saber/sword hits another saber/sword + if ( !Q_stricmp( token, "blockEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockEffect2 = G_EffectIndex( (char *)value ); + continue; + } + + //hit person effect - when saber/sword hits a person + if ( !Q_stricmp( token, "hitPersonEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitPersonEffect2 = G_EffectIndex( (char *)value ); + continue; + } + + //hit other effect - when saber/sword hits sopmething else damagable + if ( !Q_stricmp( token, "hitOtherEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitOtherEffect2 = G_EffectIndex( (char *)value ); + continue; + } + + //blade effect 2 + if ( !Q_stricmp( token, "bladeEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bladeEffect = G_EffectIndex( (char *)value ); + continue; + } + + //if non-zero, the saber will not do the big, white clash flare with other sabers + if ( !Q_stricmp( token, "noClashFlare2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_CLASH_FLARE2; + } + continue; + } + +//===END BLADE-SPECIFIC FIELDS============================================================================= + gi.Printf( "WARNING: unknown keyword '%s' while parsing '%s'\n", token, SaberName ); SkipRestOfLine( &p ); } @@ -711,7 +2423,7 @@ void WP_RemoveSaber( gentity_t *ent, int saberNum ) if ( ent->client->ps.saberAnimLevel == SS_DUAL || ent->client->ps.saberAnimLevel == SS_STAFF ) {//change to the style to the default - for ( int i = SS_FAST; i < SS_NUM_SABER_STYLES; i++ ) + for ( int i = SS_NONE+1; i < SS_NUM_SABER_STYLES; i++ ) { if ( (ent->client->ps.saberStylesKnown&(1<weaponModel[saberNum] = -1; } WP_SaberParseParms( saberName, &ent->client->ps.saber[saberNum] );//get saber info - if ( ent->client->ps.saber[saberNum].style ) + if ( ent->client->ps.saber[saberNum].stylesLearned ) { - ent->client->ps.saberStylesKnown |= (1<client->ps.saber[saberNum].style); + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[saberNum].stylesLearned; } - if ( saberNum == 1 && ent->client->ps.saber[1].twoHanded ) + if ( ent->client->ps.saber[saberNum].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[saberNum].singleBladeStyle; + } + if ( saberNum == 1 && (ent->client->ps.saber[1].saberFlags&SFL_TWO_HANDED) ) {//not allowed to use a 2-handed saber as second saber WP_RemoveSaber( ent, saberNum ); return; } G_ModelIndex( ent->client->ps.saber[saberNum].model ); WP_SaberInitBladeData( ent ); - //int boltNum = ent->handRBolt; if ( saberNum == 1 ) - { + {//now have 2 sabers ent->client->ps.dualSabers = qtrue; - //boltNum = ent->handLBolt; } + /* + else if ( saberNum == 0 ) + { + if ( ent->weaponModel[1] == -1 ) + {//don't have 2 sabers + ent->client->ps.dualSabers = qfalse; + } + } + */ WP_SaberAddG2SaberModels( ent, saberNum ); ent->client->ps.saber[saberNum].SetLength( 0.0f ); ent->client->ps.saber[saberNum].Activate(); - if ( ent->client->ps.saber[saberNum].style != SS_NONE ) + if ( ent->client->ps.saber[saberNum].stylesLearned ) {//change to the style we're supposed to be using - ent->client->ps.saberAnimLevel = ent->client->ps.saber[saberNum].style; - ent->client->ps.saberStylesKnown |= (1<client->ps.saberAnimLevel); - if ( ent->s.number < MAX_CLIENTS ) - { - cg.saberAnimLevelPending = ent->client->ps.saberAnimLevel; - } + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[saberNum].stylesLearned; + } + if ( ent->client->ps.saber[saberNum].singleBladeStyle ) + { + ent->client->ps.saberStylesKnown |= ent->client->ps.saber[saberNum].singleBladeStyle; + } + WP_UseFirstValidSaberStyle( ent, &ent->client->ps.saberAnimLevel ); + if ( ent->s.number < MAX_CLIENTS ) + { + cg.saberAnimLevelPending = ent->client->ps.saberAnimLevel; } } @@ -829,7 +2556,7 @@ qboolean WP_BreakSaber( gentity_t *ent, const char *surfName, saberType_t saberT } if ( Q_stricmpn( "w_", surfName, 2 ) - && Q_stricmpn( "saber_", surfName, 6 ) //hack because using mod-community made saber + && Q_stricmpn( "saber", surfName, 5 ) //hack because using mod-community made saber && Q_stricmp( "cylinder01", surfName ) )//hack because using mod-community made saber {//didn't hit my weapon return qfalse; @@ -933,7 +2660,7 @@ void WP_SaberLoadParms( void ) len = COM_Compress( buffer ); if ( totallen + len >= MAX_SABER_DATA_SIZE ) { - G_Error( "WP_SaberLoadParms: ran out of space before reading %s\n(you must make the .npc files smaller)", holdChar ); + G_Error( "WP_SaberLoadParms: ran out of space before reading %s\n(you must make the .sab files smaller)", holdChar ); } strcat( marker, buffer ); gi.FS_FreeFile( buffer ); diff --git a/code/ghoul2/G2.h b/code/ghoul2/G2.h index b029095..e9a4d3b 100644 --- a/code/ghoul2/G2.h +++ b/code/ghoul2/G2.h @@ -78,13 +78,13 @@ void G2_List_Model_Surfaces(const char *fileName); void G2_List_Model_Bones(const char *fileName, int frame); qboolean G2_GetAnimFileName(const char *fileName, char **filename); #ifdef _G2_GORE -void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore); +void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore, qboolean skipIfLODNotMatch); #else void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius); #endif void TransformAndTranslatePoint (const vec3_t in, vec3_t out, mdxaBone_t *mat); #ifdef _G2_GORE -void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod, bool ApplyGore); +void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod, bool ApplyGore, SSkinGoreData *gore=NULL); #else void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod); #endif diff --git a/code/ghoul2/G2_API.cpp b/code/ghoul2/G2_API.cpp index 17d62c7..23e21ae 100644 --- a/code/ghoul2/G2_API.cpp +++ b/code/ghoul2/G2_API.cpp @@ -1731,7 +1731,7 @@ void G2API_CollisionDetect(CCollisionRecord *collRecMap, CGhoul2Info_v &ghoul2, // now walk each model and check the ray against each poly - sigh, this is SO expensive. I wish there was a better way to do this. #ifdef _G2_GORE - G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, eG2TraceType, useLod, fRadius,0,0,0,0,0); + G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, eG2TraceType, useLod, fRadius,0,0,0,0,0,qfalse); #else G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, eG2TraceType, useLod, fRadius); #endif @@ -1992,10 +1992,10 @@ void G2API_AddSkinGore(CGhoul2Info_v &ghoul2,SSkinGoreData &gore) // now having done that, time to build the model G2VertSpaceServer->ResetHeap(); - G2_TransformModel(ghoul2, gore.currentTime, gore.scale,G2VertSpaceServer,lod,true); + G2_TransformModel(ghoul2, gore.currentTime, gore.scale,G2VertSpaceServer,lod,true,&gore); // now walk each model and compute new texture coordinates - G2_TraceModels(ghoul2, transHitLocation, transRayDirection, 0, gore.entNum, G2_NOCOLLIDE,lod,1.0f,gore.SSize,gore.TSize,gore.theta,gore.shader,&gore); + G2_TraceModels(ghoul2, transHitLocation, transRayDirection, 0, gore.entNum, G2_NOCOLLIDE,lod,1.0f,gore.SSize,gore.TSize,gore.theta,gore.shader,&gore,qtrue); } } #else diff --git a/code/ghoul2/G2_misc.cpp b/code/ghoul2/G2_misc.cpp index 58f2a94..2405192 100644 --- a/code/ghoul2/G2_misc.cpp +++ b/code/ghoul2/G2_misc.cpp @@ -42,7 +42,7 @@ static map,int> GoreTagsTemp; // this is a surface index to gore t // temporarily during the generation phase so we reuse gore tags per LOD int goreModelIndex; -bool AddGoreToAllModels=false; +static cvar_t *cg_g2MarksAllModels=NULL; GoreTextureCoordinates *FindGoreRecord(int tag); static inline void DestroyGoreTexCoordinates(int tag) @@ -551,14 +551,33 @@ void G2_TransformSurfaces(int surfaceNum, surfaceInfo_v &rootSList, // main calling point for the model transform for collision detection. At this point all of the skeleton has been transformed. #ifdef _G2_GORE -void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod, bool ApplyGore) +void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod, bool ApplyGore, SSkinGoreData *gore) #else void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod) #endif { int i, lod; vec3_t correctScale; + qboolean firstModelOnly = qfalse; + if ( cg_g2MarksAllModels == NULL ) + { + cg_g2MarksAllModels = Cvar_Get( "cg_g2MarksAllModels", "0", 0 ); + } + + if (cg_g2MarksAllModels == NULL + || !cg_g2MarksAllModels->integer ) + { + firstModelOnly = qtrue; + } + +#ifdef _G2_GORE + if ( gore + && gore->firstModel > 0 ) + { + firstModelOnly = qfalse; + } +#endif VectorCopy(scale, correctScale); // check for scales of 0 - that's the default I believe @@ -598,7 +617,13 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, if (lod>=g.currentModel->numLods) { g.mTransformedVertsArray = 0; - return; + if ( firstModelOnly ) + { + // we don't really need to do multiple models for gore. + return; + } + //do the rest + continue; } } else @@ -621,7 +646,8 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, G2_TransformSurfaces(g.mSurfaceRoot, g.mSlist, g.mBoneCache, g.currentModel, lod, correctScale, G2VertSpace, g.mTransformedVertsArray, false); #ifdef _G2_GORE - if (ApplyGore&&!AddGoreToAllModels) + + if (ApplyGore && firstModelOnly ) { // we don't really need to do multiple models for gore. break; @@ -1507,7 +1533,7 @@ static void G2_TraceSurfaces(CTraceSurface &TS) } #ifdef _G2_GORE -void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore) +void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore, qboolean skipIfLODNotMatch) #else void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CCollisionRecord *collRecMap, int entNum, EG2_Collision eG2TraceType, int useLod, float fRadius) #endif @@ -1515,9 +1541,31 @@ void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CColl int i, lod; skin_t *skin; shader_t *cust_shader; + qboolean firstModelOnly = qfalse; + int firstModel = 0; + + if ( cg_g2MarksAllModels == NULL ) + { + cg_g2MarksAllModels = Cvar_Get( "cg_g2MarksAllModels", "0", 0 ); + } + + if (cg_g2MarksAllModels == NULL + || !cg_g2MarksAllModels->integer ) + { + firstModelOnly = qtrue; + } + +#ifdef _G2_GORE + if ( gore + && gore->firstModel > 0 ) + { + firstModel = gore->firstModel; + firstModelOnly = qfalse; + } +#endif // walk each possible model for this entity and try tracing against it - for (i=0; i)^0pzCx`O!xX#`No3a)|@^89@Ht5Vu(;t&j4u0r{Cg QzUBo!BW|{fyxc%O0NZ6CDgXcg diff --git a/code/goblib/mssccprj.scc b/code/goblib/mssccprj.scc index af6c0e7..8df3f42 100644 --- a/code/goblib/mssccprj.scc +++ b/code/goblib/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [goblib.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code/goblib", AAIAAAAA diff --git a/code/goblib/vssver.scc b/code/goblib/vssver.scc index 1a9136246317063fd0541e3e1364f5dc207e5444..f728c87b1ad8e5539baed7662ca81955cb7ef57b 100644 GIT binary patch delta 81 zcmYdDm>}XK_4LC81yKetPz2J?&p3U&@&79aBTz&M$QPOX`1p=94Pd@9ke_F}+|Oak W3=U?Xyt+68!vocKe=F41gXIC+2Nu2n delta 81 zcmYdDm>}ZAq`S3EL6iXu6oK^fGfp3EXFuU(1d1pD`681aA78EU8_ZV*^7Cw$`^E0< W<7EcQtBW%*JWzf2m)&duSRMdMxD-PG diff --git a/code/icarus/vssver.scc b/code/icarus/vssver.scc index 04c37f1e9983a729c0fbcd403ebe4776bad592ab..1a9cb5740e0cf5c56de64260e1b6cdd2c4dccbfd 100644 GIT binary patch literal 224 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW|$8_2)(|H_jBy@%W^K>i#cU+ZF|Y=>_XHz$xk7s!`f)#%P+GntzW$UhF` rm+n1uuH#822S1R10?7ZrNN}1!4}`nSgu%iT*z* literal 224 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZ7rS=}lVr2k>9zh0%dHu;gx7XD1ssKg$fP531 z(3Ei1t-S0&em{`^;iu>4%d)<_AT2Y1{3oFme^hsKf#qic`9@cpL(|*E!1A+z{Ik37 zN8P=m3YMP@E1)k`GNcsK>q(lg42#a%Hajcp9J!mXH45@{Pr*p6Oa!8AgVzW diff --git a/code/ja_melee_code.zip b/code/ja_melee_code.zip new file mode 100644 index 0000000000000000000000000000000000000000..14d0f165b9a1ccce629d472c6ae30dfb3e7a674f GIT binary patch literal 875150 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�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

CX``q|ks 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�ft(W-!IT@~J3 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삊JI%xgC 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

eh|n0>^7sb$-t(3pOCde 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 SM_;1%e!d(!KCXtj@CD3gv- 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%0A@f5f6ZYX70>rWf){;6Dx;4>#x!`Z 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 K%fi3?^?v};924sR literal 0 HcmV?d00001 diff --git a/code/jpeg-6/vssver.scc b/code/jpeg-6/vssver.scc index eaad51d7a828325367e1a0440a5888c0a8ada21d..651f0d8b66d0169b4af02bddccfb810dbd391f99 100644 GIT binary patch literal 784 zcmW;IX-E?Q6bJCFA?2BM4Pj01G_9&c*$wj!jUCS9&3CWk>EUrDs9+Q)+;Rnz98Wvr} z9m0r?6%XXTFkXn7U3bl+7tfg$`LDRGf?@NijSZPG>$`5GMln;1I*#c`;t{oc+6q2p5Jwrc`VK0efVSf*7 zGdpS`gy$*mg_BRr$8wrkbBf8SYS|_{TK)e5|*Y-R;*M4(ZV$&nY}yT&EYu*-oyC>5sZ*4?<1t@=@;o8 zQ*kG@75FVxVa(~Oun>B3)RW(bi)V!Pa0WUz;p#SJT%AKiz6B@qY=MccBjjq>@upW3 zttlYaz|TzsR%z=6vI2H5oQ@hzsvy_Gb3J0lMkk-Fgm?NgB#q63tl+-eaD1NG)0a6x zR>3PG;Zlj$N3MhC%{*6SeSlmK$A*Z${NO9dYS>wNtTtDqC*OgYzR>hsp^OvE*T99^ zHHBAandH0hus`RbCyGPX!k+HV_|26uWF1^l?Edr4&nGv)lGL8VAB-vFdvIckU73?K z$PVT=!umjBS#sVOxe1;uJNIm8^;dE;?7qzS=+MrS@5Af<9W0F&_{c4=D|?PxV_GIZ zfG>H^zih}*kXzx{1O2;M%}wNo@DT5~BIcEWtcT~z$M#87R&pEc>XUuz?RSw4aN3?5 zYNuFCHp178<}BVwHu({}VAH?Vl;@Kl!&&RcWg~~qlG|ZT+Ole@sEEA^_nP1^=VJD+ z$?G(K0>^uIaZ8HVk~?6fTPhjXvB{mV*m7zwXJsq73zoAsjqbN5kB-`NBz+%Hp=>pjf N?>IUu@NM`@{txe^()<7b diff --git a/code/mac/vssver.scc b/code/mac/vssver.scc index 1081f2fdc9b1e04d5c685665aabed65f1a3899da..8e9c15c7ea8ce0ca92142b5520992543595cf01d 100644 GIT binary patch literal 256 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWkr3s3xV`Tt?^+3Awh2?>g`#X3Tfg&4#{6F_h znk!g?!TgOtzVHkIw+Z2iVE!f`f6tu{9!oZ4fccw&{AhdIHGA~A!2B&h{=!ciT^U?1 zf%#j3d<2mSqKxkGy^n7;?e2LYX>!eBlCT&O{c literal 256 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiX<-Mw{h9V-JEtOwGaFDwr*>J&2lICW`9XibS;mLPgZX=ad=R*6Di7uZ08to3wEzGB diff --git a/code/mp3code/vssver.scc b/code/mp3code/vssver.scc index 14eef1c1e83de3b8937f7b0b047a223a3915fc10..34c5f5496a4be500b61845555258b754312efe13 100644 GIT binary patch literal 528 zcmW;ITPTA86bJBc;z2QM@<7a;iI^pd6uE}viE=3`L}*)~6=6a$kr0yd@D)mUux#Zr zY%?~uxwGLx!ULjEh`)0l&iVgN=jp`oIZT6rU#_~-q_Xy)Vu9pis*lYRFFP?*E0`SS zy1U6)tTUdn#g)8$p*M1dq^g89U>cH=V!m=9RE@BCY-!ADDy_m^I z@ZDpna3aG_K87VrTH(UPE%^klv{sY`#XgZw;nW4C>LvV@dBh*9Uc+T$2rO{HsJ)DZ3*t!CLj^ zFJJjWHp1dyRm@Y*2YDH8Oztjyo#V(Wu;AHMpDF1euflOoe3k9=AbAZ|)Vue+d5@CU zVNsxeR+e^(yaB%_6o;99WMmU;uWL$VO)2C}*qS%4bneU~Z^6CgO0lm_PTq!RwCbcH zu8_O~drM9)?aHdiyRbUoo3VZ}^4gz`3ROya+TZC3HyRX#X5$Yg{T)2inPht)q=V diff --git a/code/mssccprj.scc b/code/mssccprj.scc index 1329978..ce0136e 100644 --- a/code/mssccprj.scc +++ b/code/mssccprj.scc @@ -1,9 +1,9 @@ SCC = This is a Source Code Control file [JediAcademy.sln] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code", ROBAAAAA [starwars.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code", ROBAAAAA diff --git a/code/null/vssver.scc b/code/null/vssver.scc index 5d84ae81dc0030664fb76213c3f9d168e43f04d7..9f925140b9f1687ce41369a01df2557c6582c152 100644 GIT binary patch delta 97 zcmXRYm>?3PI<+tNE-M2V+yl~bZ$I&W(GTZi1d7}T@*CXv-{~Zzg82`C`~^`px3AbF ef%y-C{MWwg4CZ{#1M?pN`RTnSr(8B=gZThCLmJ}% delta 97 zcmXRYm>?4K%e4H#T~-D#xCf-=-hSdQ7oIQ52o$*w1Li*f@)tza+z!>; f3g$lq@?ZO|Gl>4M56piA8m>{BaEGFjW1px*yxCo>je||eWMT~=w4JdL6$T#ZyR(WQH93LZ)4*+m{4b%Vt delta 49 xcmZ>8m>{C_PuA$~1px*yxCo>je||gsdsc!d8&KpDkZ;uYt@36-ttcaq4*-m74=exx diff --git a/code/qcommon/files_pc.cpp b/code/qcommon/files_pc.cpp index 4deaa35..082f5cc 100644 --- a/code/qcommon/files_pc.cpp +++ b/code/qcommon/files_pc.cpp @@ -12,7 +12,7 @@ // every time a new demo pk3 file is built, this checksum must be updated. // the easiest way to get it is to just run the game and see what it spits out -#define DEMO_PAK_CHECKSUM 1431467275 +#define DEMO_PAK_CHECKSUM 4102795916u #define DEMO_PAK_MAXFILES 5174u @@ -1650,7 +1650,7 @@ void FS_SetRestrictions( void ) { for ( path = fs_searchpaths ; path ; path = path->next ) { if ( path->pack ) { // a tiny attempt to keep the checksum from being scannable from the exe - if ( (path->pack->checksum ^ 0x84268436u) != (DEMO_PAK_CHECKSUM ^ 0x84268436u) ) { + if ( (path->pack->checksum ^ 0x10228436u) != (DEMO_PAK_CHECKSUM ^ 0x10228436u) ) { Com_Error( ERR_FATAL, "Corrupted pk3: %u", path->pack->checksum ); } } diff --git a/code/qcommon/vssver.scc b/code/qcommon/vssver.scc index 8567cec0290b04d566604b87ec8529f1c05117eb..a7917c7d50a1bedded61b442a2a0059712654679 100644 GIT binary patch literal 848 zcmW;Ke=L-790%~n`E_#aIZr7%EH2qp!>-WQZRN)>#q@*e(rIkbR9ljiO-tMPv1BF< zZOtxRQHs%7qLS3C<+q8gAyJ$=cgLM`r}y)H{&=3fp3nF5c|M=d9+8U`mGjvpy=4Av zxO`eD@l0KB+?8W5`)x~+YaY+;*o4_!#ZhM~y!iw7)K>;ctovvVyZ~!{Q7%dC{d_jQ z2rGLmitW#*_-yX2+qlF&WZxX~P!mkN0s9_z4gH}VqxYg86C72gK9pOdBKtGLk7IU! zs(sT!v;A6NpPa1`9=DTb=ih<{a#bQ>aum((m%@_VTRz08<0LdflojlztaQ&7XVK0u z2ljsP`t*W{OSAj5#!X_rpor}d(N3@ptfz0?Nc(z(wufzDqohsDD<5Lm`VMe$b5s4C zXBoqVx50jSgBHQ7CyXQP2>WZUWNvmflJh)RTNL0EvM-Wh`*DINpB)I+O+_>8JTjW1 zCMw=7m-;r4^ABM6l!mZ^W3$Xo#LHlFctx*zLPx&$5WenV-ju$yFzo#0aBHF^#xKJ} z^0f>_4So^Tmg@9me>zyzc=o2;u8{0Y54Wqct@Y(t9z?+%Mg8}C6q#v0p OMMV$$$EHc^NWK3xv+Roi literal 848 zcmW;Kdq`7p6bJCTsikd}>D|5Pv{0J}R+L*lB4<7d6*I`pAm3$zQHrLPDHKNd05e1i z^{<>Sa$qUh(o#zsNCY;ArU`1OJ=}D@wyB$a@9+L`FQ0qP@Ao_B@RK?7sKR0A%&LWV zk&5XfNr%#nZNeDOv-5Toc^2^PkG=G(OyVTs;m;yG&{F50Y)8|4_&02rp`3feq$K_a zRt;F&Q>7syF8&uTj_hz(tA=Q9{Xf{(L(?;LOG`VzOYr&3M{`->I(iSRgZ;-#UryIr zXj@nh2WWW;Lvl4aZyC-kZOxIkHIV&Q;P#=k<-y!0VgvlibWT1lR?s$BzY2fws82k2 zvy<$%2Afx9bMbk7B!3;&G^Ut}&cu=PH(=LD^38DlPo=#}us!h>>=Vue|0q35OHj`?9QAzVlsGDg^kacv#E3sn z$sV&@y;j(}aCb~%Q^Ruo@4{d2>1A0tjVw1m3PW=19K2W%(99x4@nBa~otwi<54#`c z!(OjmUzQd`v)nvw@Jh0zw)ZPDSV!0v-f+5KknVGr-3!~n=A>@9p!WdT-vO>vcC>8g z4m0+M?}L4dN3F`?2}S@5U_Zm1Y_VvW;p!2>YZWKFL)B)6tH%+ZY(5sKmA_%Qe#)IF zYNEDJ*R?cD@~dIDl-7t4p(o2C{uH)E)($nl_hq^BYT$ei%g*8x8R`ES+?8mJaTy6E z^{u&3)Tmn4ShlHVx%;&a>)WmrY39dB{s#PZ<+j3@I8WxY3G=_54yxiANxl(28P`3T z^YH?)2@b5_t0LmUNPlK{{LA*kte|*?yPpq4m`Co&HA&$t&GlCT?_{fvH~CYfo^pnw NqBVZ8`PEjk-+$FB=o0_{ diff --git a/code/renderer/tr_init.cpp b/code/renderer/tr_init.cpp index 36edf4a..8eddd09 100644 --- a/code/renderer/tr_init.cpp +++ b/code/renderer/tr_init.cpp @@ -860,6 +860,8 @@ void GL_SetDefaultState( void ) GfxInfo_f ================ */ +extern bool g_bTextureRectangleHack; + void GfxInfo_f( void ) { cvar_t *sys_cpustring = Cvar_Get( "sys_cpustring", "", CVAR_ROM ); @@ -945,6 +947,7 @@ void GfxInfo_f( void ) Com_Printf ("anisotropic filtering: %s ", enablestrings[(r_ext_texture_filter_anisotropic->integer != 0) && glConfig.maxTextureFilterAnisotropy] ); Com_Printf ("(%f of %f)\n", r_ext_texture_filter_anisotropic->value, glConfig.maxTextureFilterAnisotropy ); Com_Printf ("Dynamic Glow: %s\n", enablestrings[r_DynamicGlow->integer] ); + if (g_bTextureRectangleHack) Com_Printf ("Dynamic Glow ATI BAD DRIVER HACK %s\n", enablestrings[g_bTextureRectangleHack] ); if ( r_finish->integer ) { VID_Printf( PRINT_ALL, "Forcing glFinish\n" ); @@ -958,6 +961,10 @@ void GfxInfo_f( void ) } } +void R_AtiHackToggle_f(void) +{ + g_bTextureRectangleHack = !g_bTextureRectangleHack; +} /************************************************************************************************ * R_FogDistance_f * @@ -1092,7 +1099,7 @@ void R_Register( void ) r_ext_texture_env_add = Cvar_Get( "r_ext_texture_env_add", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_filter_anisotropic = Cvar_Get( "r_ext_texture_filter_anisotropic", "16", CVAR_ARCHIVE ); - r_DynamicGlow = Cvar_Get( "r_DynamicGlow", "1", CVAR_ARCHIVE ); + r_DynamicGlow = Cvar_Get( "r_DynamicGlow", "0", CVAR_ARCHIVE ); r_DynamicGlowPasses = Cvar_Get( "r_DynamicGlowPasses", "5", CVAR_CHEAT ); r_DynamicGlowDelta = Cvar_Get( "r_DynamicGlowDelta", "0.8f", CVAR_CHEAT ); r_DynamicGlowIntensity = Cvar_Get( "r_DynamicGlowIntensity", "1.13f", CVAR_CHEAT ); @@ -1275,6 +1282,7 @@ extern qboolean Sys_LowPhysicalMemory(); Cmd_AddCommand( "modellist", R_Modellist_f ); #ifndef _XBOX Cmd_AddCommand( "modelist", R_ModeList_f ); + Cmd_AddCommand( "r_atihack", R_AtiHackToggle_f ); #endif Cmd_AddCommand( "screenshot", R_ScreenShot_f ); Cmd_AddCommand( "screenshot_tga", R_ScreenShotTGA_f ); @@ -1422,7 +1430,10 @@ void RE_Shutdown( qboolean destroyWindow ) { Cmd_RemoveCommand ("shaderlist"); Cmd_RemoveCommand ("skinlist"); Cmd_RemoveCommand ("modellist"); +#ifndef _XBOX Cmd_RemoveCommand ("modelist" ); + Cmd_RemoveCommand ("r_atihack"); +#endif Cmd_RemoveCommand ("screenshot"); Cmd_RemoveCommand ("screenshot_tga"); Cmd_RemoveCommand ("gfxinfo"); diff --git a/code/renderer/tr_stl.cpp b/code/renderer/tr_stl.cpp index 99566a5..d3d09d7 100644 --- a/code/renderer/tr_stl.cpp +++ b/code/renderer/tr_stl.cpp @@ -28,10 +28,6 @@ typedef map ShaderEntryPtrs_t; ShaderEntryPtrs_t ShaderEntryPtrs; - - - - void ShaderEntryPtrs_Clear(void) { ShaderEntryPtrs.clear(); @@ -52,6 +48,10 @@ void ShaderEntryPtrs_Insert(const char *token, const char *p) { ShaderEntryPtrs[token] = p; } + else + { + VID_Printf( PRINT_DEVELOPER, "Duplicate shader entry %s!\n",token ); + } } diff --git a/code/renderer/vssver.scc b/code/renderer/vssver.scc index 2e2475ed674e9a96bcb6c430c130e21f31a1f33c..386f233d4132ec04615c08cad33b681f5ec5de08 100644 GIT binary patch literal 864 zcmW;Kdq`7J90%~J(^Pz}b9dFsH0PXi`N%mq+FfvHd+aQ%jf=n=l;&`{El2;$Ez3>6kqu^ zpt?UN%JVP$)3y3Ud&0wsM;}kT6V~r_8z;UpcKG52S5DQf>q9Ou_OLhnyCEawn68sr z0I&21>tvD+nonTOmPVylsfytvpMhPbnluBkc{DDB-NV$M3s$w%K5*43!;cnz8O`^F zCH&%%O7CjM8SDMv_^T7e+FFK@!rS2Hi2c8az?boZx5G=>acwV29L?VWe{>4`)apD= z91-`2r}H1xm~!3_cX%hYL;(lE7jw_|>wO1F04#zXOClAT-2gF0* z)FbM2Q&0)5FM)**7uK!iRfOv|6rRm0Y8X!;BpH^%qw%3hBVS?&fy3a-sYeZ3jhW^8 zlfk_QdYtr&Z&_~rZn)kpOxh)%VYkBJaP5mZ_d(qv%k>)p=S#Ih+0ruW0!PB_PS;9X ztN*dwe52s`Ucct{Lk8+SaK|01S!92cbwfNFp3N0M<(IXyQLr2~IzIEn+3^%X8IK)ly^5eDJH|Tw} a!Sdk@W%K-D8n3~o%ocuT*KjDkfByjyk^x78T-@Of7q094I3!HPVj^{7*-lxbHX=o6cYaJpCDE^; zRIH6ltfn7Rm~3iRisok;ySkxSNhj<5JkLMRUeD+AeZHU1_w$w78L@Kv?NpWXPs8s` zx+XgvTYV@P{=RC(VKI+2-hpd(AC=r+=NaLP4SaT_Xl=I-yRqtc+?crEcjpF2d8jp>9E^IbZ6RVjuX5tR8r8sK3vYgGB2j^#~m)p;AnS4js zovrHAMe=!@v7Uefs)kkmIWnFICgEDio?l+0qa*=uh369GcZ{#DkaRu;k8}86;!BH3 z6W9qJOKB~9`}sO)32%ez4Mk_P$+tv=^(i)xckB&LaB5xIt&af*iX~u6gWB8YAuo zM;wZZ&J2_@`@6#q4`$ZdP5TJCeh+veA+02?ewqk@MR0$BM{rZMp0J0-a79F_x-6oC zp!@TLwR_t+y>Zu=^nSW z+3(dw*}x&NRfj>n5aw;7fJ5PO-Ds|@&0*$$1LiE&>9H%l9ybzs^t}G!5I2NB+Kygo dW$vp1mcEWrQ0H@)cp-`!(6JAk;?FYo?>{EP)s_GN diff --git a/code/server/sv_ccmds.cpp b/code/server/sv_ccmds.cpp index fc80491..23f97f1 100644 --- a/code/server/sv_ccmds.cpp +++ b/code/server/sv_ccmds.cpp @@ -43,21 +43,22 @@ static client_t *SV_SetPlayer( void ) { //========================================================= // don't call this directly, it should only be called from SV_Map_f() or SV_MapTransition_f() // -static void SV_Map_( ForceReload_e eForceReload ) +static bool SV_Map_( ForceReload_e eForceReload ) { char *map; char expanded[MAX_QPATH]; map = Cmd_Argv(1); if ( !*map ) { - return; + Com_Printf ("no map specified\n"); + return false; } // make sure the level exists before trying to change, so that // a typo at the server console won't end the game if (strchr (map, '\\') ) { Com_Printf ("Can't have mapnames with a \\\n"); - return; + return false; } #ifndef _XBOX // Could check for maps/%s/brushes.mle or something... @@ -69,7 +70,7 @@ static void SV_Map_( ForceReload_e eForceReload ) {//yes, it's happened, someone deleted a map during my build... Com_Error( ERR_FATAL, "Can't find map %s\n", expanded ); } - return; + return false; } #endif @@ -79,6 +80,7 @@ static void SV_Map_( ForceReload_e eForceReload ) } SV_SpawnServer( map, eForceReload, qtrue ); // start up the map + return true; } @@ -250,20 +252,21 @@ static void SV_Map_f( void ) eForceReload = eForceReload_ALL; } - SV_Map_( eForceReload ); - - // set the cheat value - // if the level was started with "map ", then - // cheats will not be allowed. If started with "devmap " - // then cheats will be allowed - if ( !Q_stricmpn( Cmd_Argv(0), "devmap", 6 ) ) { - Cvar_Set( "helpUsObi", "1" ); - } else { + if (SV_Map_( eForceReload )) + { + // set the cheat value + // if the level was started with "map ", then + // cheats will not be allowed. If started with "devmap " + // then cheats will be allowed + if ( !Q_stricmpn( Cmd_Argv(0), "devmap", 6 ) ) { + Cvar_Set( "helpUsObi", "1" ); + } else { #ifdef _XBOX - Cvar_Set( "helpUsObi", "1" ); + Cvar_Set( "helpUsObi", "1" ); #else - Cvar_Set( "helpUsObi", "0" ); + Cvar_Set( "helpUsObi", "0" ); #endif + } } } diff --git a/code/server/vssver.scc b/code/server/vssver.scc index f09e1ce3aa1091537ba4d13b4b35786a2c4a9661..8b8eae320785a546899bfe92433fc4367862251d 100644 GIT binary patch literal 208 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiX9PiI&V&Bg!*F+lo`=aiI;P05msK#^D=pJQ`% ztID!+Fh35+XLb1F74w5tk`*W)59CX#xZl=z!zn2UgDwNv&Y=_H|yDBkqiQiY8J-+x?G#djL!~p3#o>Nlv#Sh9e0!3nhe2&f4 zt%r|Y2J_>9d{&1)Uc9>Z)Ui@qqd3hi| c707>GeaGUeMl{&GG$7whN&dOGc{?3fFRWl)78?T?WCLlI2R2J27%C(ffg(9TelNq)sdGMXfcd#V{>FJp@;q)r eV16Euzk>D3S(Onm=6F@kQGe; delta 97 zcmXRYm>?3v^iGF2i;V#cvVkgentity->client; + forcelevel = pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]; } - playerState_t* pState = cl->gentity->client; - + else + { // always want this to happen in demo mode + forcelevel = uiInfo.forcePowerLevel[powerEnums[forcePowerI].powerEnum]; + } + char itemName[128]; Com_sprintf (itemName, sizeof(itemName), "%s_hexpic", powerEnums[forcePowerI].title); item = (itemDef_s *) Menu_FindItemByName(menu, itemName); @@ -4452,19 +4492,20 @@ static void UI_InitAllocForcePowers ( const char *forceName ) if (item) { char itemGraphic[128]; - Com_sprintf (itemGraphic, sizeof(itemGraphic), "gfx/menus/hex_pattern_%d",pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]); + Com_sprintf (itemGraphic, sizeof(itemGraphic), "gfx/menus/hex_pattern_%d",forcelevel); item->window.background = ui.R_RegisterShaderNoMip(itemGraphic); // If maxed out on power - don't allow update -/* if (pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]>=3) + if (forcelevel>=3) { Com_sprintf (itemName, sizeof(itemName), "%s_fbutton", powerEnums[forcePowerI].title); item = (itemDef_s *) Menu_FindItemByName(menu, itemName); - if (item) // This is okay, because core powers don't have a hex button + if (item) { - item->window.flags &= ~WINDOW_VISIBLE; + item->action = 0; //you are bad, no action for you! + item->descText = 0; //no desc either! } - } */ + } } // Set weapons button to inactive @@ -4605,6 +4646,141 @@ static void UI_ForceHelpActive( void ) } } +// Set the force levels depending on the level chosen +static void UI_DemoSetForceLevels( void ) +{ + menuDef_t *menu; + + menu = Menu_GetFocused(); // Get current menu + + if (!menu) + { + return; + } + + char buffer[MAX_STRING_CHARS]; + + client_t* cl = &svs.clients[0]; // 0 because only ever us as a player + playerState_t* pState = NULL; + if( cl ) + { + pState = cl->gentity->client; + } + + ui.Cvar_VariableStringBuffer( "ui_demo_level", buffer, sizeof(buffer)); + if( Q_stricmp( buffer, "t1_sour")==0 ) + {// NOTE : always set the uiInfo powers + // level 1 in all core powers + uiInfo.forcePowerLevel[FP_LEVITATION]=1; + uiInfo.forcePowerLevel[FP_SPEED]=1; + uiInfo.forcePowerLevel[FP_PUSH]=1; + uiInfo.forcePowerLevel[FP_PULL]=1; + uiInfo.forcePowerLevel[FP_SEE]=1; + uiInfo.forcePowerLevel[FP_SABER_OFFENSE]=1; + uiInfo.forcePowerLevel[FP_SABER_DEFENSE]=1; + uiInfo.forcePowerLevel[FP_SABERTHROW]=1; + // plus these extras + uiInfo.forcePowerLevel[FP_HEAL]=1; + uiInfo.forcePowerLevel[FP_TELEPATHY]=1; + uiInfo.forcePowerLevel[FP_GRIP]=1; + + // and set the rest to zero + uiInfo.forcePowerLevel[FP_ABSORB]=0; + uiInfo.forcePowerLevel[FP_PROTECT]=0; + uiInfo.forcePowerLevel[FP_DRAIN]=0; + uiInfo.forcePowerLevel[FP_LIGHTNING]=0; + uiInfo.forcePowerLevel[FP_RAGE]=0; + } + else + { + // level 3 in all core powers + uiInfo.forcePowerLevel[FP_LEVITATION]=3; + uiInfo.forcePowerLevel[FP_SPEED]=3; + uiInfo.forcePowerLevel[FP_PUSH]=3; + uiInfo.forcePowerLevel[FP_PULL]=3; + uiInfo.forcePowerLevel[FP_SEE]=3; + uiInfo.forcePowerLevel[FP_SABER_OFFENSE]=3; + uiInfo.forcePowerLevel[FP_SABER_DEFENSE]=3; + uiInfo.forcePowerLevel[FP_SABERTHROW]=3; + + // plus these extras + uiInfo.forcePowerLevel[FP_HEAL]=1; + uiInfo.forcePowerLevel[FP_TELEPATHY]=1; + uiInfo.forcePowerLevel[FP_GRIP]=2; + uiInfo.forcePowerLevel[FP_LIGHTNING]=1; + uiInfo.forcePowerLevel[FP_PROTECT]=1; + + // and set the rest to zero + + uiInfo.forcePowerLevel[FP_ABSORB]=0; + uiInfo.forcePowerLevel[FP_DRAIN]=0; + uiInfo.forcePowerLevel[FP_RAGE]=0; + } + + if (pState) + {//i am carrying over from a previous level, so get the increased power! (non-core only) + uiInfo.forcePowerLevel[FP_HEAL] = max(pState->forcePowerLevel[FP_HEAL], uiInfo.forcePowerLevel[FP_HEAL]); + uiInfo.forcePowerLevel[FP_TELEPATHY]=max(pState->forcePowerLevel[FP_TELEPATHY], uiInfo.forcePowerLevel[FP_TELEPATHY]); + uiInfo.forcePowerLevel[FP_GRIP]=max(pState->forcePowerLevel[FP_GRIP], uiInfo.forcePowerLevel[FP_GRIP]); + uiInfo.forcePowerLevel[FP_LIGHTNING]=max(pState->forcePowerLevel[FP_LIGHTNING], uiInfo.forcePowerLevel[FP_LIGHTNING]); + uiInfo.forcePowerLevel[FP_PROTECT]=max(pState->forcePowerLevel[FP_PROTECT], uiInfo.forcePowerLevel[FP_PROTECT]); + + uiInfo.forcePowerLevel[FP_ABSORB]=max(pState->forcePowerLevel[FP_ABSORB], uiInfo.forcePowerLevel[FP_ABSORB]); + uiInfo.forcePowerLevel[FP_DRAIN]=max(pState->forcePowerLevel[FP_DRAIN], uiInfo.forcePowerLevel[FP_DRAIN]); + uiInfo.forcePowerLevel[FP_RAGE]=max(pState->forcePowerLevel[FP_RAGE], uiInfo.forcePowerLevel[FP_RAGE]); + } +} + +// record the force levels into a cvar so when restoring player from map transition +// the force levels are set up correctly +static void UI_RecordForceLevels( void ) +{ + menuDef_t *menu; + + menu = Menu_GetFocused(); // Get current menu + + if (!menu) + { + return; + } + + const char *s2 = ""; + int i; + for (i=0;i< NUM_FORCE_POWERS; i++) + { + s2 = va("%s %i",s2, uiInfo.forcePowerLevel[i]); + } + Cvar_Set( "demo_playerfplvl", s2 ); + +} + +// record the weapons into a cvar so when restoring player from map transition +// the force levels are set up correctly +static void UI_RecordWeapons( void ) +{ + menuDef_t *menu; + + menu = Menu_GetFocused(); // Get current menu + + if (!menu) + { + return; + } + + const char *s2 = ""; + + int wpns = 0; + // always add blaster and saber + wpns |= (1<gentity->client; + forcelevel = pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]; + } + else + { // always want this to happen in demo mode + forcelevel = uiInfo.forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]; } - - playerState_t* pState = cl->gentity->client; - if (uiInfo.forcePowerUpdated == FP_UPDATED_NONE) { @@ -4752,17 +4934,26 @@ static void UI_DecrementCurrentForcePower ( void ) DC->startLocalSound(uiInfo.uiDC.Assets.forceUnchosenSound, CHAN_AUTO ); - if (pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]>0) + if (forcelevel>0) { - pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]--; // Decrement it - // Turn off power if level is 0 - if (pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]<1) + if( pState && !com_demo ) { - pState->forcePowersKnown &= ~( 1 << powerEnums[uiInfo.forcePowerUpdated].powerEnum ); + pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]--; // Decrement it + forcelevel = pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]; + // Turn off power if level is 0 + if (pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]<1) + { + pState->forcePowersKnown &= ~( 1 << powerEnums[uiInfo.forcePowerUpdated].powerEnum ); + } + } + else + { // always want this to happen in demo mode + uiInfo.forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]--; // Decrement it + forcelevel = uiInfo.forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum]; } } - UI_SetHexPicLevel( menu,uiInfo.forcePowerUpdated,pState->forcePowerLevel[powerEnums[uiInfo.forcePowerUpdated].powerEnum],qfalse ); + UI_SetHexPicLevel( menu,uiInfo.forcePowerUpdated,forcelevel,qfalse ); UI_ShowForceLevelDesc ( powerEnums[uiInfo.forcePowerUpdated].title ); @@ -4781,7 +4972,7 @@ static void UI_DecrementCurrentForcePower ( void ) // Show point has not been allocated UI_SetPowerTitleText( qfalse); - // Make weapons button active + // Make weapons button inactive UI_ForcePowerWeaponsButton(qfalse); // Hide the deallocate button @@ -4808,6 +4999,7 @@ static void UI_DecrementCurrentForcePower ( void ) uiInfo.forcePowerUpdated = FP_UPDATED_NONE; // It's as if nothing happened. } + void Item_MouseEnter(itemDef_t *item, float x, float y); // Try to increment force power level (Used by Force Power Allocation screen) @@ -4829,16 +5021,23 @@ static void UI_AffectForcePowerLevel ( const char *forceName ) return; } + int com_demo = Cvar_VariableIntegerValue( "com_demo" ); // Get player state client_t* cl = &svs.clients[0]; // 0 because only ever us as a player - - if (!cl) // No client, get out + playerState_t* pState = NULL; + int forcelevel; + if( cl && !com_demo) { - return; + pState = cl->gentity->client; + forcelevel = pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]; } - playerState_t* pState = cl->gentity->client; + else + { // always want this to happen in demo mode + forcelevel = uiInfo.forcePowerLevel[powerEnums[forcePowerI].powerEnum]; + } + - if (pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]>2) + if (forcelevel>2) { // Too big, can't be incremented return; } @@ -4848,10 +5047,19 @@ static void UI_AffectForcePowerLevel ( const char *forceName ) uiInfo.forcePowerUpdated = forcePowerI; // Remember which power was updated - pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]++; // Increment it - pState->forcePowersKnown |= ( 1 << powerEnums[forcePowerI].powerEnum ); + if( pState && !com_demo ) + { + pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]++; // Increment it + pState->forcePowersKnown |= ( 1 << powerEnums[forcePowerI].powerEnum ); + forcelevel = pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum]; + } + else + { // always want this to happen in demo mode + uiInfo.forcePowerLevel[powerEnums[forcePowerI].powerEnum]++; // Increment it + forcelevel = uiInfo.forcePowerLevel[powerEnums[forcePowerI].powerEnum]; + } - UI_SetHexPicLevel( menu,uiInfo.forcePowerUpdated,pState->forcePowerLevel[powerEnums[forcePowerI].powerEnum],qtrue ); + UI_SetHexPicLevel( menu,uiInfo.forcePowerUpdated,forcelevel,qtrue ); UI_ShowForceLevelDesc ( forceName ); @@ -4888,7 +5096,6 @@ static void UI_AffectForcePowerLevel ( const char *forceName ) // Just grab an item to hand it to the function. item = (itemDef_s *) Menu_FindItemByName(menu, "deallocate_fbutton"); - if (item) { // Show all icons as greyed-out @@ -5046,6 +5253,14 @@ static void UI_UpdateFightingStyle ( void ) { saberStyle = SS_STRONG; } + else if (fightingStyle == 3) + { + saberStyle = SS_DUAL; + } + else if (fightingStyle == 4) + { + saberStyle = SS_STAFF; + } else // 0 is Fast { saberStyle = SS_FAST; @@ -5445,25 +5660,25 @@ static void UI_AddWeaponSelection ( const int weaponIndex, const int ammoIndex, // Get player state client_t* cl = &svs.clients[0]; // 0 because only ever us as a player - if (!cl) // No client, get out + // NOTE : this UIScript can now be run from outside the game, so don't + // return out here, just skip this part + if (cl) { - return; - } - - // Add weapon - if (cl->gentity && cl->gentity->client) - { - playerState_t* pState = cl->gentity->client; - - if ((weaponIndex>0) && (weaponIndexgentity && cl->gentity->client) { - pState->stats[ STAT_WEAPONS ] |= ( 1 << weaponIndex ); - } + playerState_t* pState = cl->gentity->client; - // Give them ammo too - if ((ammoIndex>0) && (ammoIndexammo[ ammoIndex ] = ammoAmount; + if ((weaponIndex>0) && (weaponIndexstats[ STAT_WEAPONS ] |= ( 1 << weaponIndex ); + } + + // Give them ammo too + if ((ammoIndex>0) && (ammoIndexammo[ ammoIndex ] = ammoAmount; + } } } @@ -5549,29 +5764,31 @@ static void UI_RemoveWeaponSelection ( const int weaponSelectionIndex ) // Get player state client_t* cl = &svs.clients[0]; // 0 because only ever us as a player - if (!cl) // No client, get out + // NOTE : this UIScript can now be run from outside the game, so don't + // return out here, just skip this part + if (cl) // No client, get out { - return; - } - // Remove weapon - if (cl->gentity && cl->gentity->client) - { - playerState_t* pState = cl->gentity->client; - - if ((weaponIndex>0) && (weaponIndexgentity && cl->gentity->client) { - pState->stats[ STAT_WEAPONS ] &= ~( 1 << weaponIndex ); - } + playerState_t* pState = cl->gentity->client; - // Remove ammo too - if ((ammoIndex>0) && (ammoIndex0) && (weaponIndexammo[ ammoIndex ] = 0; + pState->stats[ STAT_WEAPONS ] &= ~( 1 << weaponIndex ); + } + + // Remove ammo too + if ((ammoIndex>0) && (ammoIndexammo[ ammoIndex ] = 0; + } } } + } // Now do a little clean up @@ -5731,25 +5948,25 @@ static void UI_AddThrowWeaponSelection ( const int weaponIndex, const int ammoIn client_t* cl = &svs.clients[0]; // 0 because only ever us as a player - if (!cl) // No client, get out + // NOTE : this UIScript can now be run from outside the game, so don't + // return out here, just skip this part + if (cl) // No client, get out { - return; - } - - // Add weapon - if (cl->gentity && cl->gentity->client) - { - playerState_t* pState = cl->gentity->client; - - if ((weaponIndex>0) && (weaponIndexgentity && cl->gentity->client) { - pState->stats[ STAT_WEAPONS ] |= ( 1 << weaponIndex ); - } + playerState_t* pState = cl->gentity->client; - // Give them ammo too - if ((ammoIndex>0) && (ammoIndexammo[ ammoIndex ] = ammoAmount; + if ((weaponIndex>0) && (weaponIndexstats[ STAT_WEAPONS ] |= ( 1 << weaponIndex ); + } + + // Give them ammo too + if ((ammoIndex>0) && (ammoIndexammo[ ammoIndex ] = ammoAmount; + } } } @@ -5810,27 +6027,27 @@ static void UI_RemoveThrowWeaponSelection ( void ) client_t* cl = &svs.clients[0]; // 0 because only ever us as a player - if (!cl) // No client, get out + // NOTE : this UIScript can now be run from outside the game, so don't + // return out here, just skip this part + if (cl) // No client, get out { - return; - } - - // Remove weapon - if (cl->gentity && cl->gentity->client) - { - playerState_t* pState = cl->gentity->client; - - if ((uiInfo.selectedThrowWeapon>0) && (uiInfo.selectedThrowWeapongentity && cl->gentity->client) { - pState->stats[ STAT_WEAPONS ] &= ~( 1 << uiInfo.selectedThrowWeapon ); - } + playerState_t* pState = cl->gentity->client; - // Remove ammo too - if ((uiInfo.selectedThrowWeaponAmmoIndex>0) && (uiInfo.selectedThrowWeaponAmmoIndexammo[ uiInfo.selectedThrowWeaponAmmoIndex ] = 0; - } + if ((uiInfo.selectedThrowWeapon>0) && (uiInfo.selectedThrowWeaponstats[ STAT_WEAPONS ] &= ~( 1 << uiInfo.selectedThrowWeapon ); + } + // Remove ammo too + if ((uiInfo.selectedThrowWeaponAmmoIndex>0) && (uiInfo.selectedThrowWeaponAmmoIndexammo[ uiInfo.selectedThrowWeaponAmmoIndex ] = 0; + } + + } } // Now do a little clean up diff --git a/code/ui/ui_saber.cpp b/code/ui/ui_saber.cpp index a2f5768..fbd319c 100644 --- a/code/ui/ui_saber.cpp +++ b/code/ui/ui_saber.cpp @@ -14,7 +14,7 @@ USER INTERFACE SABER LOADING & DISPLAY CODE #include "ui_shared.h" #include "../ghoul2/G2.h" -#define MAX_SABER_DATA_SIZE 0x8000 +#define MAX_SABER_DATA_SIZE 0x80000 // On Xbox, static linking lets us steal the buffer from wp_saberLoad // Just make sure that the saber data size is the same #ifdef _XBOX @@ -181,6 +181,39 @@ int UI_SaberNumBladesForSaber( const char *saberName ) return numBlades; } +qboolean UI_SaberShouldDrawBlade( const char *saberName, int bladeNum ) +{ + int bladeStyle2Start = 0, noBlade = 0; + char bladeStyle2StartString[8]={0}; + char noBladeString[8]={0}; + UI_SaberParseParm( saberName, "bladeStyle2Start", bladeStyle2StartString ); + if ( bladeStyle2StartString + && bladeStyle2StartString[0] ) + { + bladeStyle2Start = atoi( bladeStyle2StartString ); + } + if ( bladeStyle2Start + && bladeNum >= bladeStyle2Start ) + {//use second blade style + UI_SaberParseParm( saberName, "noBlade2", noBladeString ); + if ( noBladeString + && noBladeString[0] ) + { + noBlade = atoi( noBladeString ); + } + } + else + {//use first blade style + UI_SaberParseParm( saberName, "noBlade", noBladeString ); + if ( noBladeString + && noBladeString[0] ) + { + noBlade = atoi( noBladeString ); + } + } + return ((qboolean)(noBlade==0)); +} + float UI_SaberBladeLengthForSaber( const char *saberName, int bladeNum ) { char lengthString[8]={0}; @@ -795,7 +828,10 @@ void UI_SaberDrawBlades( itemDef_t *item, vec3_t origin, float curYaw ) saberType_t saberType = TranslateSaberType( saberTypeString ); for ( int curBlade = 0; curBlade < numBlades; curBlade++ ) { - UI_SaberDrawBlade( item, saber, saberModel, saberType, origin, curYaw, curBlade ); + if ( UI_SaberShouldDrawBlade( saber, curBlade ) ) + { + UI_SaberDrawBlade( item, saber, saberModel, saberType, origin, curYaw, curBlade ); + } } } } diff --git a/code/ui/ui_shared.cpp b/code/ui/ui_shared.cpp index 8f70cd1..e47ca9f 100644 --- a/code/ui/ui_shared.cpp +++ b/code/ui/ui_shared.cpp @@ -2739,7 +2739,13 @@ qboolean Script_SetCvar(itemDef_t *item, const char **args) const char *cvar, *val; if (String_Parse(args, &cvar) && String_Parse(args, &val)) { - DC->setCVar(cvar, val); + if(!stricmp(val,"(NULL)")) + { + DC->setCVar(cvar, ""); + } + else { + DC->setCVar(cvar, val); + } } return qtrue; @@ -5331,13 +5337,21 @@ menuDef_t *Menus_ActivateByName(const char *p) } + const int com_demo = Cvar_VariableIntegerValue( "com_demo" ); if (!m) { // A hack so we don't have to load all three mission menus before we know what tier we're on if (!Q_stricmp( p, "ingameMissionSelect1" ) ) { - UI_LoadMenus("ui/tier1.txt",qfalse); - Menus_CloseAll(); - Menus_OpenByName("ingameMissionSelect1"); + if ( com_demo ) + { + Menus_OpenByName("demo_MissionSelect"); + } + else + { + UI_LoadMenus("ui/tier1.txt",qfalse); + Menus_CloseAll(); + Menus_OpenByName("ingameMissionSelect1"); + } } else if (!Q_stricmp( p, "ingameMissionSelect2" ) ) { @@ -5356,26 +5370,53 @@ menuDef_t *Menus_ActivateByName(const char *p) Com_Printf(S_COLOR_YELLOW"WARNING: Menus_ActivateByName: Unable to find menu '%s'\n",p); } } - - // First time, show force select instructions - if (!Q_stricmp( p, "ingameForceSelect" ) ) + + if( !com_demo ) { - int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); - - if (tier_storyinfo==1) + // First time, show force select instructions + if (!Q_stricmp( p, "ingameForceSelect" ) ) { - Menus_OpenByName("ingameForceHelp"); + int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); + + if (tier_storyinfo==1) + { + Menus_OpenByName("ingameForceHelp"); + } + } + + // First time, show weapons select instructions + if (!Q_stricmp( p, "ingameWpnSelect" ) ) + { + int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); + + if (tier_storyinfo==1) + { + Menus_OpenByName("ingameWpnSelectHelp"); + } } } - - // First time, show weapons select instructions - if (!Q_stricmp( p, "ingameWpnSelect" ) ) + else // demo { - int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); - - if (tier_storyinfo==1) + // First time, show force select instructions + if (!Q_stricmp( p, "demo_ForceSelect" ) ) { - Menus_OpenByName("ingameWpnSelectHelp"); + int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); + + if (!tier_storyinfo) + { + Menus_OpenByName("ingameForceHelp"); + } + } + + // First time, show weapons select instructions + if (!Q_stricmp( p, "demo_WpnSelect" ) ) + { + int tier_storyinfo = Cvar_VariableIntegerValue( "tier_storyinfo" ); + + if (!tier_storyinfo) + { + Menus_OpenByName("ingameWpnSelectHelp"); + } } } diff --git a/code/ui/vssver.scc b/code/ui/vssver.scc index 4cc024e5f392e4862b2498b26f2c07fd3d1531ad..9149b20e832a9e682a4fce928672809cfbf65764 100644 GIT binary patch literal 288 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiY48eiF3!o~mwr9ir{)RJA}o|Ob6P^1jVFK&&0 z&Y^ux8pJOL@@GEI>@f*@EDh390VERVgrxitdI6TN0`hJ5J~qgC@lje5C|?capYgoa zY%!-*ni`sC zKi>bw)=ioN$e#`5_gS2u-IG!;ode|00rG#UtgB+U%rC73l!0Ndgl>REsvKBe706fI_TZ&YoGREo0ID%fu>b%7 literal 288 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiY4N`>>4urYu^DUdEKwPZIhULeN^6e$Dpi(BKL zzkjm_%r6J>XFksC(fsWp2hvgjBogO@q}VqFg5|4#{14d&MEEzR$w>g^tAYG8p0}Dk z=N8E^1Nk*Te!JHyQA4f@u=-jc|LpuVy6dC)<@kW|bwK{Vm+u<_b(G|Kfc#lNexv^5 z{iXACvAD${^0{L@*{GTf8s(O{KC@2B>bAf!f@CT`HH+w0t0Qsv0 s85p){MaFzl7k4Jc3A1(sI@@)fr|c)57_J_V3}0UI$*K>z>% diff --git a/code/unix/vssver.scc b/code/unix/vssver.scc index 19a43728e3efda1acd19d0422807f9d5ac68b47c..d09a34bd0cce711c4970491b7649ebc0053bf168 100644 GIT binary patch literal 272 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXT&hXzokBtEg<^ySCtr@@PC|OA}0!0=8`A-GZ z%|HBqDh1*%1oC$r-K(8Y`X0<*1mwRutiI!k>JKn~F_6zC%_(QnF$c_F0_2-Ig|IU0 zSpeoQ1@fJhU3ChKSAqGP>;I=Q1cY*mUfc%SUr~al?`hfW> zf&340huE)t2nF+30r`J!B~O~u9R%jD2J)j*?j6q9p9bcy0rKZK${oC6mI3Ck1@dn_ M{C>)#rx45s04QHf4FCWD literal 272 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZ3)_7JnkBtEg<^ySCtr@=$d!{Qe0!0=8`A-GZ z%{zNo!2E?k{*I%2wb}1TgZYbq{8xw7cf9vf1oIaI`CQVRa?K{jVEz&y-_$9Db>e*! zFn=kK@2u>q!=Haz8D#!4Am1%9;G3-388Cl2kY5rexUF^1Z7_cYkbhC_)L+8~_rUy> zK>i20L+tAf--7w8fc!tVk|*7+`T*vy2J)j*?j3f1{2$C;1LV(flsl-M(F*3T1@dn_ M{C=vmWFnXk08N@o(f|Me diff --git a/code/vssver.scc b/code/vssver.scc index 82795906500ab58b91365ec2331f1813e623b305..66e14d8ef6b583462842bc139777e4ef53a27192 100644 GIT binary patch literal 240 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYKz1Oo=WMKdU6(IfSyivo&#hbn|0!2E3{6&*C zF)jU;{*?*HuVrOm==HLht^1k_EdLnD|5`qOy6mIGrzC{`Ncr~c8||HbxRh10Wulh2{14`uLumZz*2jqVM@+&hxe|UIm zDp>z#Apge?|1{nos$Y45@?W6xH{WW4?N1YCU~r6G_G<3wEnxK`Vhjuu{%qN^P-V{- Gkb40R0aV@q literal 240 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW|Xx=BJ$ie^yDnRT?{{K5p}*RnD&^m^IM?mBk-J4pU9kpH!O{`5Pw&EJ`U{3k&ECY`w7AM|^{@Q`=WSA^+{LT)PF9!0rdwkwGN5lU+kjd~)fPvw8MPT4Qp^e|=fcy_Yer4w853jipZ&|LA$_J_VwY|O$+)E{Ag+LWs%#_ zZm^kZ^iaB_=p*nVGp}jrSBCb0!$DH*%&h`_3{HuF5)1>6}hq zkszZ_!Gl(IDRG*LJ_FM%cQMfb7kv)S%?xz%1TOmj|9#-P=0*+W;}`7*3%~j8;-+cz p1=!g=#qOV2KwpB5jIvP^&xF1Lf3i3m<7@#s03MPHA zm)h(^^g6ia)+XkrvM8Rge*>JVon!O#MzZ^!8hkHPxMt$a=uNQwm+n%$-=H<_d1)W% z)AEegg5`&S!yUF4v<^J#q|$`7U+67xm1Mf~Z0rxM2d8TmIwQLW(c9n$Wr3-iIf6ET zmxywsPu3!O2Ru#v8}o2J+R$em{ZK18tT}KcK_!XobSk}cvM=@ qCtzLmKn&OLiarI)Ba(Y2PMzp8@CS{qxJ&Coo5Ah%`Stc)3Hl#CubM&t diff --git a/code/win32/vssver.scc b/code/win32/vssver.scc index 04d99268c3db30a8600df0345484bb0aed885830..585c10964d442d834ad67fdd8043ec10c6aeae00 100644 GIT binary patch literal 704 zcmW;JQAm?f6bJA-H{BG&bX%$2PeP|jk=B?v$d_PR=tGSR5p%PwrmfMI*b+-Y6sP@nzlZyMzkAMiF6UfD29I>S%h1~+ z9@Ws2>{?Famctx*V0R`F_PFpK*QkmW=_T1b?6_eA*$GSTO>uFL!p-&>TTtw0eg&r= ztBq}{eat@CH+II-BHCy6!`@7Dc>QA^^8$RTM?2<;K4$&|*KOsDKHYY50@VKuKUwQc z(LFDs_#}&1)SAJ`E^QN+0Dpm{USDQ^jL&7kU*Y^VW5r@i7OVFS?pAa@qo?QC{{dKD z{kvqP;3qwZ{3Y0O*{b#12WTR^45yv%ZR`z~Q$GA1E^F_9Bj~JV4#Ev5-p>yW5|;l1 zUaq{l+T|A0_&h?eD`3st6y~%1T`?gl#iJrwnT-=79)r#GCtYuKDlT4s57q}_^SiGv zuzvR8p4Pl_qrQQ~iG+|N6{Z(8Z5=GmgOC5+)Tg#fnG@iZI;F#sSHR4NU*`6eddvzg z1@#4RXeRh!WPFy2;6!-mh9g=(@rTCemjnmzAC?rVtbHN#?= zVS=V2o(#`TUzFTc-lp;UF~HGUo7~i@War<3Elan$P5)|G|3-M=tgdQA(9F)8loC?u zHdv=_{$lqt1v_O68~!V6%zN;(eEAnYl+6HFC7DX_)2z E2bdVW&;S4c literal 704 zcmW;KZAg<*6bJA--{vGMH%o0Y>TVB3p^mXA=!Jx3kuAYw_Tn7UhDf#4Tweq?w@*uC zlvxCYy{<{%TnQ8QVfi6RF)?k{%GoA3YMB)aENRyNxzC4t@9&<&fpgEJ77NIgmts>_ zd|2}+qNtNKtauErI_p3dVV@U!K&L4?sW-?4xEX}aWOeawzmeGoH+D@pd{PVZGdOR1 zP3j2kV4i_zhW6QV8z}Qzc(l;6*fKgo`FbH(*G{E>!=K>&m+$z)MQhAa`0TD%(=m^i z<;URp$}yKg9SvA6)<`SX{F6F+B8gFn~q^;iUlnA2f5y}3t} ztfo1rp8+pSM8`)iT%_4>CcJ9!ER6+aEI$j5S_@P@g@TF@7s5MIquQiWN%{B4h6i+y zCHie~ZXGOwr^Zg?pO^M={Cv#tQjJ4(I^M|YU4m_qb55!8D(k-)?khKH9oMgM{Jesj z2&o)2+dJ3iu>au&JfH|AoBVmqYj9#**4irz$d4hvcrzh?hKu#q`XV|1UQReS5#Rc~ IV2aK6KM)kY*#H0l diff --git a/code/win32/win_glimp.cpp b/code/win32/win_glimp.cpp index ee7445e..ad9034c 100644 --- a/code/win32/win_glimp.cpp +++ b/code/win32/win_glimp.cpp @@ -1353,17 +1353,17 @@ static void GLW_InitExtensions( void ) } // Figure out which texture rectangle extension to use. - // TOTAL HACK!!! This will need to be fixed. - // FIXMEFIXMEFIXME! bool bTexRectSupported = false; - if ( strstr( glConfig.extensions_string, "GL_EXT_texture_rectangle" ) ) + if ( strnicmp( glConfig.vendor_string, "ATI Technologies",16 )==0 + && strnicmp( glConfig.version_string, "1.3.3",5 )==0 + && glConfig.version_string[5] < '9' ) //1.3.34 and 1.3.37 and 1.3.38 are broken for sure, 1.3.39 is not { g_bTextureRectangleHack = true; - bTexRectSupported = true; } - else if ( strstr( glConfig.extensions_string, "GL_NV_texture_rectangle" ) ) + + if ( strstr( glConfig.extensions_string, "GL_NV_texture_rectangle" ) + || strstr( glConfig.extensions_string, "GL_EXT_texture_rectangle" ) ) { - g_bTextureRectangleHack = false; bTexRectSupported = true; } diff --git a/code/win32/win_main.cpp b/code/win32/win_main.cpp index 386dc46..ee85260 100644 --- a/code/win32/win_main.cpp +++ b/code/win32/win_main.cpp @@ -937,13 +937,13 @@ void Sys_In_Restart_f( void ) { IN_Init(); } -static inline bool Sys_IsExpired() +static bool Sys_IsExpired() { #if 0 // sec min Hr Day Mon Yr - struct tm t_valid_start = { 0, 0, 8, 5, 8, 103 }; //zero based months! + struct tm t_valid_start = { 0, 0, 8, 23, 6, 103 }; //zero based months! // sec min Hr Day Mon Yr - struct tm t_valid_end = { 0, 0, 20, 13, 8, 103 }; + struct tm t_valid_end = { 0, 0, 20, 30, 6, 103 }; // struct tm t_valid_end = t_valid_start; // t_valid_end.tm_mday += 8; time_t startTime = mktime( &t_valid_start); diff --git a/code/x_exe/mssccprj.scc b/code/x_exe/mssccprj.scc index 3bfb92d..431d5b4 100644 --- a/code/x_exe/mssccprj.scc +++ b/code/x_exe/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_exe.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code/x_exe", YUHAAAAA diff --git a/code/x_exe/vssver.scc b/code/x_exe/vssver.scc index 4e7812608cc2bc4dca8a4da8a9b9e02a71d86835..10c5eccf1f65329043355c242a2291561c82df88 100644 GIT binary patch delta 33 jcmXpom>?n}A(p>tjtB!7tOe4Jc8AtKc$qH81rz}Qgm(xb delta 33 jcmXpom>?qaCa|q#jtB!7tOe4Jc8Aul=Gv&v1rz}Qny3h1 diff --git a/code/x_game/mssccprj.scc b/code/x_game/mssccprj.scc index c5430d3..58a6022 100644 --- a/code/x_game/mssccprj.scc +++ b/code/x_game/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_game.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/code/x_game", XUHAAAAA diff --git a/code/x_game/vssver.scc b/code/x_game/vssver.scc index fd18bfa921766902987b610bf46968d1275fda11..05e60b00af714ef17973042dfb186f63430e5818 100644 GIT binary patch delta 33 jcmXpom>?oE%hJ_twg>|ltOL@)E%qB19Oji{2Z{gyf$RrN delta 33 jcmXpom>?o^aL=;&vqc!dU>%SSZn57eeJDen9Vh|-q^t;z diff --git a/code/zlib32/vssver.scc b/code/zlib32/vssver.scc index 4cf098d90e93ab9ecacf9c2c0f3e66d0f60f3424..e53c57a16490a555304349af3ce75940022dca51 100644 GIT binary patch delta 115 zcmZo*Y+#%qk~1rQYnZJd0~pu=>B9D94lze`X3If7wzR3fqVxb-&5I~ wt!L{UMUcEBkY9F^<#xo%2Z|thCm^4#uh;pGpF literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZ3v(_uH6=VPdJ0M-yzRY3w6Crh0pol$?Z?QV$ zU2dg{IwO$p0OWfro3k-$n}OvWf&8+QEVrG_52=CVoq&9{zFy~E=5t`aGmxKBJ@>_A It?OVu0F-JUCIA2c diff --git a/codemp/Debug/vssver.scc b/codemp/Debug/vssver.scc index 796ec67432a18940fc93953511fdb913f350bacd..cc8d2063a6e5231cf997792ff8c4f793b82960bc 100644 GIT binary patch delta 49 tcmZ>8m>{CFzUf`&6b1;G3Zzu_ojBB1#ZbfuWKRR)v{tszTlZAJd;nVu4GaJP delta 49 tcmZ>8m>{C_efm{~DGU%W6-cSgDwNv&Y=_H|yDBkqiQiWQhVOXc%)|f&EyGn*(^c`Dc!1EMN5bP#eg-0YLu3-vV|aedpUi?hOR;ySJV+u6};4 z4P<{1kUwFT_8r|tm%;MEKz_i{MCBDiZ`xRa@*zNesYq}f%ZsmI`A{HVD`MA^g8Khp z{b4}<=Sk-p+9TS)^5HgDwNv&Y=_H|yDBkqiQiXvv|VR#W?}#X7a;w4pLDykOlmAMP{b9;4_Q;Z z#&S(*EF+Nb2IT*L-EsbWNiCS~4&=9VHAUW)X9KJE0Ph}Wj4^H}axmG~~Ebk5ESKoW6$b8xmtltO7pSt(mR>4VDV0m94UsEG!YVf~f zF(CK&0r@3dHzg7q&&Pn=;}7JYIhwJ&e8mN@d;pNY@V9{7;xYz z!+`wHlg>2=FP#LI4+rvH&Y4*$`pg2`9|7cVl6|z_TzoNDJ`%`(bkpP(JJ$xVd=!xH mUF@qVs=E^`9}SY%3%RH{-#dmAXnzcl&->)@?1`*_V0i%aBXI`+ diff --git a/codemp/Ratl/vssver.scc b/codemp/Ratl/vssver.scc index 1139239ff415c491e3ed7e08261caf05aca4b03f..892935ec103df223b968f21108045bc4d58d1158 100644 GIT binary patch delta 65 zcmWFtm>^=~(zoaQCs774P!eKbm~g3;zvk`pRz{$R4v@dzlWWe4l$WhsK)wNxA96sH MX_Ec7RyH6X0Dd+SL;wH) delta 65 zcmWFtm>^?n}VEdcpqbLIym=6?o!I&)g>M^OeaFcV^6*drt^WSf#6!2%Qk0EL1Es{jB1 diff --git a/codemp/Splines/mssccprj.scc b/codemp/Splines/mssccprj.scc index ed50979..0e0a7a5 100644 --- a/codemp/Splines/mssccprj.scc +++ b/codemp/Splines/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [Splines.dsp] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/Splines", CSAAAAAA diff --git a/codemp/Splines/vssver.scc b/codemp/Splines/vssver.scc index 8c927b75f7e347e48588efb8ad73565db367a551..83b495f825d9ab430158ca0b1c04390475d33d30 100644 GIT binary patch literal 304 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWwb7yY9#>fB$*MW4`{1fk7me_ZKgl+%{wq1f> zWg`xEfcQ6o#N_xYR-KKf!2DZ4{;g$AJB(jl1oLkL`I2Sp<~kj|0p{NU^4<3xRtdCu z0OsEX@^dGs1SW{S2lMX%`J($$Z0@}I0OsEZ@&o&$dmbPC59U7r@}0j1ip57ab}#|$ ze+cAvdYrF5eW?q~e+1+&NORR?izL>9`A>lS!>LTJ)jS)){HH*^ lp9J&SuGAf1{xcwdN7%ZDK}FtR{&OHd(LD0xxsx$qJ^)iqU%LPR literal 304 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWoy|zZ^8Y2T3TnEx!^H02EUN}7tByJtxVE!E--+kX((=V<2C3pX4li8ACAt36Os{mC5z;`NN4oCc{%8 m;U~d-c6Z51F#j2lzawnjL*>60!2IVxexiBg$=s87z + SccProvider="MSSCCI:Microsoft Visual SourceSafe"> @@ -52,6 +52,9 @@ LinkIncremental="1" SuppressStartupBanner="TRUE" ProgramDatabaseFile=".\Release/jk2Ded.pdb" + GenerateMapFile="TRUE" + MapFileName="release\jampDed.map" + MapLines="TRUE" SubSystem="1" OptimizeReferences="2" EnableCOMDATFolding="2" diff --git a/codemp/botlib/mssccprj.scc b/codemp/botlib/mssccprj.scc index ddd41c1..e308a90 100644 --- a/codemp/botlib/mssccprj.scc +++ b/codemp/botlib/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [botlib.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/botlib", EAAAAAAA diff --git a/codemp/botlib/vssver.scc b/codemp/botlib/vssver.scc index 6b5dbb0b2d96ecf67641afe27de4adce8a4997c9..0f4dcde32266bb11bef9ed488f5143f2eba84689 100644 GIT binary patch literal 912 zcmXBS4J?##90zb$-Xd=o@_HQSbq<%e)0Re>rIMG?yfn;P+}%!Xm}aq77E)cv%uHUQ zT4P>jj%rD!7tz+Zv2>F{6zY(UwZ6}%+6UU80R+!Q}n0Vz#R&Wjb8Ke9HjoZ5v7b7@0)9 zAsjju#F{TlBpbmFe>R7c?IdJlxXxQx#hS?`o4_|ESMuN9%_p=}_AB@1A#?&i5$k6%iec^^U=<*L9P$8oX`oNPEC z)3cr=`@*JI)kbq6Yf@&v{Fvv9ocMM{|A^< B?k4~M literal 912 zcmXBS3rJI87zSWh=6z~rmbZDEcjva6a}yC#Lo&0(G|WOJQ)G%R@RmYS8K!88+K>_} zMZ1Wxbl^0rHAM(RDr`tC%OZ59gmY?I)O)@Tyqy2xJ)FybK9Lj4tZc&Re8czQ_#Qp? z3@2yfesf>vdvmk@$1a@aw6R~7Gom9|SX&^xuy_HgCX=ozb!8*ON+Wlmgn0Xc(8S0(Lx$?4? zdV4s2DuyLH+D~?XeSev>wTZ{bj&O%S(%MjzPTmbS6xA?|B!h<&%Tp z{Nh};)F2=S!(%Tb=2h#_Qf9wHkWU?pCDt7i66X8EkcIlTgy)GHWF9|T@^1|2vL= MAX_CLIENTS || !(&cgs.clientinfo[ clientNum ]) ) { return y; } + ci = &cgs.clientinfo[ clientNum ]; + size = ICON_SIZE * 1.25; y += 5; @@ -4369,7 +4375,7 @@ void CG_DrawSiegeMessageNonMenu( const char *str ) trap_SP_GetStringTextString(str+1, text, sizeof(text)); str = text; } - CG_CenterPrint(str, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH); + CG_CenterPrint(str, SCREEN_HEIGHT * 0.20, BIGCHAR_WIDTH); } /* @@ -4873,6 +4879,14 @@ static void CG_DrawCrosshair( vec3_t worldPoint, int chEntValid ) { return; } + /* + if ( cg_drawingRocketLockThisFrame + && cg.snap->ps.m_iVehicleNum ) + {//in vehicle, rocket lock-on replaces crosshair + return; + } + */ + if ( cg_crosshairHealth.integer ) { vec4_t hcolor; @@ -5371,6 +5385,31 @@ void CG_SaberClashFlare( void ) trap_R_RegisterShader( "gfx/effects/saberFlare" )); } +void CG_DottedLine( float x1, float y1, float x2, float y2, float dotSize, int numDots, vec4_t color, float alpha ) +{ + float x, y, xDiff, yDiff, xStep, yStep; + vec4_t colorRGBA; + int dotNum = 0; + + VectorCopy4( color, colorRGBA ); + colorRGBA[3] = alpha; + + trap_R_SetColor( colorRGBA ); + + xDiff = x2-x1; + yDiff = y2-y1; + xStep = xDiff/(float)numDots; + yStep = yDiff/(float)numDots; + + for ( dotNum = 0; dotNum < numDots; dotNum++ ) + { + x = x1 + (xStep*dotNum) - (dotSize*0.5f); + y = y1 + (yStep*dotNum) - (dotSize*0.5f); + + CG_DrawPic( x, y, dotSize, dotSize, cgs.media.whiteShader ); + } +} + void CG_BracketEntity( centity_t *cent, float radius ) { trace_t tr; @@ -5378,6 +5417,7 @@ void CG_BracketEntity( centity_t *cent, float radius ) float len, size, lineLength, lineWidth; float x, y; clientInfo_t *local; + qboolean isEnemy = qfalse; VectorSubtract( cent->lerpOrigin, cg.refdef.vieworg, dif ); len = VectorNormalize( dif ); @@ -5412,19 +5452,31 @@ void CG_BracketEntity( centity_t *cent, float radius ) if ( cent->currentState.m_iVehicleNum //vehicle has a driver && cgs.clientinfo[ cent->currentState.m_iVehicleNum-1 ].infoValid ) { - if ( cgs.clientinfo[ cent->currentState.m_iVehicleNum-1 ].team == local->team ) + if ( cgs.gametype < GT_TEAM ) + {//ffa? + isEnemy = qtrue; + trap_R_SetColor ( g_color_table[ColorIndex(COLOR_RED)] ); + } + else if ( cgs.clientinfo[ cent->currentState.m_iVehicleNum-1 ].team == local->team ) { trap_R_SetColor ( g_color_table[ColorIndex(COLOR_GREEN)] ); } else { + isEnemy = qtrue; trap_R_SetColor ( g_color_table[ColorIndex(COLOR_RED)] ); } } else if ( cent->currentState.teamowner ) { - if ( cent->currentState.teamowner != cg.predictedPlayerState.persistant[PERS_TEAM] ) + if ( cgs.gametype < GT_TEAM ) + {//ffa? + isEnemy = qtrue; + trap_R_SetColor ( g_color_table[ColorIndex(COLOR_RED)] ); + } + else if ( cent->currentState.teamowner != cg.predictedPlayerState.persistant[PERS_TEAM] ) {// on enemy team + isEnemy = qtrue; trap_R_SetColor ( g_color_table[ColorIndex(COLOR_RED)] ); } else @@ -5489,6 +5541,62 @@ void CG_BracketEntity( centity_t *cent, float radius ) //vert CG_DrawPic( x+size-lineWidth, y+size-lineLength, lineWidth, lineLength, cgs.media.whiteShader ); } + //Lead Indicator... + if ( cg_drawVehLeadIndicator.integer ) + {//draw the lead indicator + if ( isEnemy ) + {//an enemy object + if ( cent->currentState.NPC_class == CLASS_VEHICLE ) + {//enemy vehicle + if ( !VectorCompare( cent->currentState.pos.trDelta, vec3_origin ) ) + {//enemy vehicle is moving + if ( cg.predictedPlayerState.m_iVehicleNum ) + {//I'm in a vehicle + centity_t *veh = &cg_entities[cg.predictedPlayerState.m_iVehicleNum]; + if ( veh //vehicle cent + && veh->m_pVehicle//vehicle + && veh->m_pVehicle->m_pVehicleInfo//vehicle stats + && veh->m_pVehicle->m_pVehicleInfo->weapon[0].ID > VEH_WEAPON_BASE )//valid vehicle weapon + { + vehWeaponInfo_t *vehWeapon = &g_vehWeaponInfo[veh->m_pVehicle->m_pVehicleInfo->weapon[0].ID]; + if ( vehWeapon + && vehWeapon->bIsProjectile//primary weapon's shot is a projectile + && !vehWeapon->bHasGravity//primary weapon's shot is not affected by gravity + && !vehWeapon->fHoming//primary weapon's shot is not homing + && vehWeapon->fSpeed )//primary weapon's shot has speed + {//our primary weapon's projectile has a speed + vec3_t vehDiff, vehLeadPos; + float vehDist, eta; + float leadX, leadY; + + VectorSubtract( cent->lerpOrigin, cg.predictedVehicleState.origin, vehDiff ); + vehDist = VectorNormalize( vehDiff ); + eta = (vehDist/vehWeapon->fSpeed);//how many seconds it would take for my primary weapon's projectile to get from my ship to theirs + //now extrapolate their position that number of seconds into the future based on their velocity + VectorMA( cent->lerpOrigin, eta, cent->currentState.pos.trDelta, vehLeadPos ); + //now we have where we should be aiming at, project that onto the screen at a 2D co-ord + if ( !CG_WorldCoordToScreenCoordFloat(cent->lerpOrigin, &x, &y) ) + {//off-screen, don't draw it + return; + } + if ( !CG_WorldCoordToScreenCoordFloat(vehLeadPos, &leadX, &leadY) ) + {//off-screen, don't draw it + //just draw the line + CG_DottedLine( x, y, leadX, leadY, 1, 10, g_color_table[ColorIndex(COLOR_RED)], 0.5f ); + return; + } + //draw a line from the ship's cur pos to the lead pos + CG_DottedLine( x, y, leadX, leadY, 1, 10, g_color_table[ColorIndex(COLOR_RED)], 0.5f ); + //now draw the lead indicator + trap_R_SetColor ( g_color_table[ColorIndex(COLOR_RED)] ); + CG_DrawPic( leadX-8, leadY-8, 16, 16, trap_R_RegisterShader( "gfx/menus/radar/lead" ) ); + } + } + } + } + } + } + } } qboolean CG_InFighter( void ) @@ -5634,6 +5742,7 @@ static void CG_DrawActivePowers(void) } } +//static qboolean cg_drawingRocketLockThisFrame = qfalse; //-------------------------------------------------------------- static void CG_DrawRocketLocking( int lockEntNum, int lockTime ) //-------------------------------------------------------------- @@ -5648,6 +5757,8 @@ static void CG_DrawRocketLocking( int lockEntNum, int lockTime ) int dif = (cg.time - cg.snap->ps.rocketLockTime)/lockTimeInterval; int i; +// cg_drawingRocketLockThisFrame = qfalse; + if (!cg.snap->ps.rocketLockTime) { return; @@ -5775,6 +5886,11 @@ static void CG_DrawRocketLocking( int lockEntNum, int lockTime ) sz = (1.0f - sz) * (1.0f - sz) * 32 + 6; + if ( cg.snap->ps.m_iVehicleNum ) + { + sz *= 2.0f; + } + cy += sz * 0.5f; if ( dif < 0 ) @@ -5839,6 +5955,7 @@ static void CG_DrawRocketLocking( int lockEntNum, int lockTime ) CG_DrawPic( cx - sz, cy - sz * 2, sz * 2, sz * 2, trap_R_RegisterShaderNoMip( "gfx/2d/lock" )); } +// cg_drawingRocketLockThisFrame = qtrue; } } diff --git a/codemp/cgame/cg_ents.c b/codemp/cgame/cg_ents.c index 6ab6049..f8ef310 100644 --- a/codemp/cgame/cg_ents.c +++ b/codemp/cgame/cg_ents.c @@ -1446,7 +1446,14 @@ Ghoul2 Insert End if (cent->currentState.iModelScale) { //if the server says we have a custom scale then set it now. - cent->modelScale[0] = cent->modelScale[1] = cent->modelScale[2] = cent->currentState.iModelScale/100.0f; + if ( cent->currentState.legsFlip ) + {//scalar + cent->modelScale[0] = cent->modelScale[1] = cent->modelScale[2] = cent->currentState.iModelScale; + } + else + {//percentage + cent->modelScale[0] = cent->modelScale[1] = cent->modelScale[2] = cent->currentState.iModelScale/100.0f; + } VectorCopy(cent->modelScale, ent.modelScale); ScaleModelAxis(&ent); } @@ -2831,7 +2838,11 @@ static void CG_Mover( centity_t *cent ) { && (cg.time-cg.predictedVehicleState.hyperSpaceTime) < HYPERSPACE_TIME && (cg.time-cg.predictedVehicleState.hyperSpaceTime) > 1000 ) { - if ( (cg.predictedVehicleState.eFlags2&EF2_HYPERSPACE) ) + if ( cg.snap + && cg.snap->ps.pm_type == PM_INTERMISSION ) + {//in the intermission, stop drawing hyperspace ent + } + else if ( (cg.predictedVehicleState.eFlags2&EF2_HYPERSPACE) ) {//actually hyperspacing now float timeFrac = ((float)(cg.time-cg.predictedVehicleState.hyperSpaceTime-1000))/(HYPERSPACE_TIME-1000); if ( timeFrac < (HYPERSPACE_TELEPORT_FRAC+0.1f) ) @@ -2899,7 +2910,14 @@ Ghoul2 Insert End ent.hModel = cgs.gameModels[s1->modelindex2]; if (s1->iModelScale) { //custom model2 scale - ent.modelScale[0] = ent.modelScale[1] = ent.modelScale[2] = s1->iModelScale/100.0f; + if ( s1->legsFlip ) + {//scalar + ent.modelScale[0] = ent.modelScale[1] = ent.modelScale[2] = s1->iModelScale; + } + else + {//percentage + ent.modelScale[0] = ent.modelScale[1] = ent.modelScale[2] = s1->iModelScale/100.0f; + } ScaleModelAxis(&ent); } trap_R_AddRefEntityToScene(&ent); @@ -3090,8 +3108,10 @@ void CG_CalcEntityLerpPositions( centity_t *cent ) { // first see if we can interpolate between two snaps for // linear extrapolated clients - if ( cent->interpolate && cent->currentState.pos.trType == TR_LINEAR_STOP && - cent->currentState.number < MAX_CLIENTS) { + if ( cent->interpolate + && cent->currentState.pos.trType == TR_LINEAR_STOP + && cent->currentState.number < MAX_CLIENTS ) + { CG_InterpolateEntityPosition( cent ); goAway = qtrue; } @@ -3303,11 +3323,17 @@ static void CG_AddCEntity( centity_t *cent ) { { //don't render anything then if (cent->currentState.eType == ET_GENERAL || cent->currentState.eType == ET_PLAYER || - cent->currentState.eType == ET_NPC || cent->currentState.eType == ET_INVISIBLE) { return; } + if ( cent->currentState.eType == ET_NPC ) + {//NPC in intermission + if ( cent->currentState.NPC_class == CLASS_VEHICLE ) + {//don't render vehicles in intermissions, allow other NPCs for scripts + return; + } + } } // calculate the current origin diff --git a/codemp/cgame/cg_event.c b/codemp/cgame/cg_event.c index feeff94..4738a5a 100644 --- a/codemp/cgame/cg_event.c +++ b/codemp/cgame/cg_event.c @@ -13,6 +13,7 @@ #include "../ghoul2/G2.h" //========================================================================== +extern qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); extern qboolean CG_VehicleWeaponImpact( centity_t *cent ); extern qboolean CG_InFighter( void ); extern qboolean CG_InATST( void ); @@ -106,10 +107,13 @@ static void CG_Obituary( entityState_t *ent ) { const char *targetInfo; const char *attackerInfo; char targetName[32]; + char targetVehName[32] = {0}; char attackerName[32]; + char attackerVehName[32] = {0}; + char attackerVehWeapName[32] = {0}; gender_t gender; clientInfo_t *ci; - + qboolean vehMessage = qfalse; target = ent->otherEntityNum; attacker = ent->otherEntityNum2; @@ -121,7 +125,7 @@ static void CG_Obituary( entityState_t *ent ) { ci = &cgs.clientinfo[target]; if ( attacker < 0 || attacker >= MAX_CLIENTS ) { - attacker = ENTITYNUM_WORLD; + //attacker = ENTITYNUM_WORLD; attackerInfo = NULL; } else { attackerInfo = CG_ConfigString( CS_PLAYERS + attacker ); @@ -134,30 +138,85 @@ static void CG_Obituary( entityState_t *ent ) { Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof(targetName) - 2); strcat( targetName, S_COLOR_WHITE ); + // check for target in a vehicle + if ( ent->lookTarget > VEHICLE_BASE && ent->lookTarget < MAX_VEHICLES && g_vehicleInfo[ent->lookTarget].name ) + { + Q_strncpyz( targetVehName, g_vehicleInfo[ent->lookTarget].name, sizeof(targetVehName) - 2 ); + } + + // check for attacker in a vehicle + if ( ent->brokenLimbs >= MAX_CLIENTS ) + { + centity_t *attVehCent = &cg_entities[ent->brokenLimbs]; + if ( attVehCent && attVehCent->m_pVehicle && attVehCent->m_pVehicle->m_pVehicleInfo ) + { + if ( attVehCent->m_pVehicle->m_pVehicleInfo->name ) + { + Q_strncpyz( attackerVehName, attVehCent->m_pVehicle->m_pVehicleInfo->name, sizeof(attackerVehName) - 2 ); + } + } + } + + //check for specific vehicle weapon + if ( ent->weapon > 0 ) + { + if ( g_vehWeaponInfo[ent->weapon-1].name ) + { + Q_strncpyz( attackerVehWeapName, g_vehWeaponInfo[ent->weapon-1].name, sizeof(attackerVehWeapName) - 2 ); + } + } + // check for single client messages - switch( mod ) { - case MOD_SUICIDE: - case MOD_FALLING: - case MOD_CRUSH: - case MOD_WATER: - case MOD_SLIME: - case MOD_LAVA: - case MOD_TRIGGER_HURT: - message = "DIED_GENERIC"; - break; - case MOD_TARGET_LASER: - message = "DIED_LASER"; - break; - default: - message = NULL; - break; + if ( ent->saberInFlight ) + {//asteroid->vehicle collision + switch ( Q_irand( 0, 2 ) ) + { + default: + case 0: + message = "DIED_ASTEROID1"; + break; + case 1: + message = "DIED_ASTEROID2"; + break; + case 2: + message = "DIED_ASTEROID3"; + break; + } + vehMessage = qtrue; + } + else + { + switch( mod ) { + case MOD_VEHICLE: + case MOD_SUICIDE: + case MOD_FALLING: + case MOD_COLLISION: + case MOD_VEH_EXPLOSION: + case MOD_CRUSH: + case MOD_WATER: + case MOD_SLIME: + case MOD_LAVA: + case MOD_TRIGGER_HURT: + message = "DIED_GENERIC"; + break; + case MOD_TARGET_LASER: + vehMessage = qtrue; + message = "DIED_TURBOLASER"; + break; + default: + message = NULL; + break; + } } // Attacker killed themselves. Ridicule them for it. - if (attacker == target) { + if (attacker == target) + { + vehMessage = qfalse; gender = ci->gender; - switch (mod) { + switch (mod) + { case MOD_BRYAR_PISTOL: case MOD_BRYAR_PISTOL_ALT: case MOD_BLASTER: @@ -229,11 +288,13 @@ static void CG_Obituary( entityState_t *ent ) { goto clientkilled; } - if (message) { + if (message) + { gender = ci->gender; if (!message[0]) { + vehMessage = qfalse; if ( gender == GENDER_FEMALE ) message = "SUICIDE_GENERICDEATH_FEMALE"; else if ( gender == GENDER_NEUTER ) @@ -241,7 +302,14 @@ static void CG_Obituary( entityState_t *ent ) { else message = "SUICIDE_GENERICDEATH_MALE"; } - message = (char *)CG_GetStringEdString("MP_INGAME", message); + if ( vehMessage ) + { + message = (char *)CG_GetStringEdString("MP_INGAMEVEH", message); + } + else + { + message = (char *)CG_GetStringEdString("MP_INGAME", message); + } CG_Printf( "%s %s\n", targetName, message); return; @@ -310,7 +378,7 @@ clientkilled: // check for double client messages if ( !attackerInfo ) { - attacker = ENTITYNUM_WORLD; + //attacker = ENTITYNUM_WORLD; strcpy( attackerName, "noname" ); } else { Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof(attackerName) - 2); @@ -391,6 +459,48 @@ clientkilled: message = "KILLED_DETPACK"; break; case MOD_VEHICLE: + vehMessage = qtrue; + switch ( ent->generic1 ) + { + case WP_BLASTER://primary blasters + switch ( Q_irand( 0, 2 ) ) + { + case 2: + message = "KILLED_VEH_BLASTER3"; + break; + case 1: + message = "KILLED_VEH_BLASTER2"; + break; + default: + message = "KILLED_VEH_BLASTER1"; + break; + } + break; + case WP_ROCKET_LAUNCHER://missile + if ( Q_irand( 0, 1 ) ) + { + message = "KILLED_VEH_MISSILE2"; + } + else + { + message = "KILLED_VEH_MISSILE1"; + } + break; + case WP_THERMAL://bomb + message = "KILLED_VEH_BOMB"; + break; + case WP_DEMP2://ion cannon + message = "KILLED_VEH_ION"; + break; + case WP_TURRET://turret + message = "KILLED_VEH_TURRET"; + break; + default: + vehMessage = qfalse; + message = "KILLED_GENERIC"; + break; + } + break; case MOD_CONC: case MOD_CONC_ALT: message = "KILLED_GENERIC"; @@ -410,19 +520,84 @@ clientkilled: case MOD_FALLING: message = "KILLED_FORCETOSS"; break; + case MOD_COLLISION: + case MOD_VEH_EXPLOSION: + switch ( Q_irand( 0, 2 ) ) + { + default: + case 0: + message = "KILLED_VEH_COLLISION1"; + break; + case 1: + message = "KILLED_VEH_COLLISION2"; + break; + case 2: + message = "KILLED_VEH_COLLISION3"; + break; + } + vehMessage = qtrue; + break; case MOD_TRIGGER_HURT: message = "KILLED_GENERIC";//"KILLED_FORCETOSS"; break; + case MOD_TARGET_LASER: + if ( Q_irand(0,1) ) + { + message = "KILLED_TURRET1"; + } + else + { + message = "KILLED_TURRET2"; + } + vehMessage = qtrue; + break; default: message = "KILLED_GENERIC"; break; } - if (message) { - message = (char *)CG_GetStringEdString("MP_INGAME", message); + if (message) + { + if ( vehMessage ) + { + message = (char *)CG_GetStringEdString("MP_INGAMEVEH", message); + } + else + { + message = (char *)CG_GetStringEdString("MP_INGAME", message); + } - CG_Printf( "%s %s %s\n", - targetName, message, attackerName); + CG_Printf( "%s ", targetName); + if ( targetVehName[0] ) + { + CG_Printf( "(%s) ", targetVehName); + } + if ( mod == MOD_TARGET_LASER ) + {//no attacker name, just a turbolaser or other kind of turret... + CG_Printf( "%s", message); + } + else + { + CG_Printf( "%s %s", message, attackerName); + + if ( attackerVehName[0] + && attackerVehWeapName[0] ) + { + CG_Printf( " (%s %s)", attackerVehName, attackerVehWeapName ); + } + else + { + if ( attackerVehName[0] ) + { + CG_Printf( " (%s)", attackerVehName ); + } + else if ( attackerVehWeapName[0] ) + { + CG_Printf(" (%s)", attackerVehWeapName ); + } + } + } + CG_Printf( "\n" ); return; } } @@ -2147,147 +2322,271 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) { case EV_SABER_ATTACK: DEBUGNAME("EV_SABER_ATTACK"); - trap_S_StartSound(es->pos.trBase, es->number, CHAN_WEAPON, trap_S_RegisterSound(va("sound/weapons/saber/saberhup%i.wav", Q_irand(1, 8)))); + { + qhandle_t swingSound = trap_S_RegisterSound(va("sound/weapons/saber/saberhup%i.wav", Q_irand(1, 8))); + clientInfo_t *client = NULL; + if ( cg_entities[es->number].currentState.eType == ET_NPC ) + { + client = cg_entities[es->number].npcClient; + } + else if ( es->number < MAX_CLIENTS ) + { + client = &cgs.clientinfo[es->number]; + } + if ( client && client->infoValid && client->saber[0].swingSound[0] ) + {//custom swing sound + swingSound = client->saber[0].swingSound[Q_irand(0,2)]; + } + trap_S_StartSound(es->pos.trBase, es->number, CHAN_WEAPON, swingSound ); + } break; case EV_SABER_HIT: DEBUGNAME("EV_SABER_HIT"); - if (es->eventParm == 16) - { //Make lots of sparks, something special happened - vec3_t fxDir; - VectorCopy(es->angles, fxDir); - if (!fxDir[0] && !fxDir[1] && !fxDir[2]) - { - fxDir[1] = 1; - } - trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound(va("sound/weapons/saber/saberhit%i.wav", Q_irand(1, 3)))); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - } - else if (es->eventParm) - { //hit a person - vec3_t fxDir; - VectorCopy(es->angles, fxDir); - if (!fxDir[0] && !fxDir[1] && !fxDir[2]) - { - fxDir[1] = 1; - } - trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound(va("sound/weapons/saber/saberhit%i.wav", Q_irand(1, 3)))); - if ( es->eventParm == 3 ) - { // moderate or big hits. - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparksSmall, es->origin, fxDir, -1, -1 ); - } - else if ( es->eventParm == 2 ) - { // this is for really big hits. - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparksMid, es->origin, fxDir, -1, -1 ); - } - else - { // this should really just be done in the effect itself, no? - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, es->origin, fxDir, -1, -1 ); - } - } - else - { //hit something else - vec3_t fxDir; - VectorCopy(es->angles, fxDir); - if (!fxDir[0] && !fxDir[1] && !fxDir[2]) - { - fxDir[1] = 1; - } - //old jk2mp method - /* - trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound("sound/weapons/saber/saberhit.wav")); - trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/spark.efx"), es->origin, fxDir, -1, -1 ); - */ - - trap_FX_PlayEffectID( cgs.effects.mSaberCut, es->origin, fxDir, -1, -1 ); - } - - //rww - this means we have the number of the ent being hit and the ent that owns the saber doing - //the hit. This being the case, we can store these indecies and the current time in order to do - //some visual tricks on the client between frames to make it look like we're actually continuing - //to hit between server frames. - if (es->otherEntityNum != ENTITYNUM_NONE && es->otherEntityNum2 != ENTITYNUM_NONE) { - centity_t *saberOwner; + int hitPersonFxID = cgs.effects.mSaberBloodSparks; + int hitPersonSmallFxID = cgs.effects.mSaberBloodSparksSmall; + int hitPersonMidFxID = cgs.effects.mSaberBloodSparksMid; + int hitOtherFxID = cgs.effects.mSaberCut; + int hitSound = trap_S_RegisterSound(va("sound/weapons/saber/saberhit%i.wav", Q_irand(1, 3))); + + if ( es->otherEntityNum2 >= 0 + && es->otherEntityNum2 < ENTITYNUM_NONE ) + {//we have a specific person who is causing this effect, see if we should override it with any custom saber effects/sounds + clientInfo_t *client = NULL; + if ( cg_entities[es->otherEntityNum2].currentState.eType == ET_NPC ) + { + client = cg_entities[es->otherEntityNum2].npcClient; + } + else if ( es->otherEntityNum2 < MAX_CLIENTS ) + { + client = &cgs.clientinfo[es->otherEntityNum2]; + } + if ( client && client->infoValid ) + { + int saberNum = es->weapon; + int bladeNum = es->legsAnim; + if ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) ) + {//use second blade style values + if ( client->saber[saberNum].hitPersonEffect2 ) + {//custom hit person effect + hitPersonFxID = hitPersonSmallFxID = hitPersonMidFxID = client->saber[saberNum].hitPersonEffect2; + } + if ( client->saber[saberNum].hitOtherEffect2 ) + {//custom hit other effect + hitOtherFxID = client->saber[saberNum].hitOtherEffect2; + } + if ( client->saber[saberNum].hit2Sound[0] ) + {//custom hit sound + hitSound = client->saber[saberNum].hit2Sound[Q_irand(0,2)]; + } + } + else + {//use first blade style values + if ( client->saber[saberNum].hitPersonEffect ) + {//custom hit person effect + hitPersonFxID = hitPersonSmallFxID = hitPersonMidFxID = client->saber[saberNum].hitPersonEffect; + } + if ( client->saber[saberNum].hitOtherEffect ) + {//custom hit other effect + hitOtherFxID = client->saber[0].hitOtherEffect; + } + if ( client->saber[saberNum].hitSound[0] ) + {//custom hit sound + hitSound = client->saber[saberNum].hitSound[Q_irand(0,2)]; + } + } + } + } - saberOwner = &cg_entities[es->otherEntityNum2]; - - saberOwner->serverSaberHitIndex = es->otherEntityNum; - saberOwner->serverSaberHitTime = cg.time; - - if (es->eventParm) - { - saberOwner->serverSaberFleshImpact = qtrue; + if (es->eventParm == 16) + { //Make lots of sparks, something special happened + vec3_t fxDir; + VectorCopy(es->angles, fxDir); + if (!fxDir[0] && !fxDir[1] && !fxDir[2]) + { + fxDir[1] = 1; + } + trap_S_StartSound(es->origin, es->number, CHAN_AUTO, hitSound ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + } + else if (es->eventParm) + { //hit a person + vec3_t fxDir; + VectorCopy(es->angles, fxDir); + if (!fxDir[0] && !fxDir[1] && !fxDir[2]) + { + fxDir[1] = 1; + } + trap_S_StartSound(es->origin, es->number, CHAN_AUTO, hitSound ); + if ( es->eventParm == 3 ) + { // moderate or big hits. + trap_FX_PlayEffectID( hitPersonSmallFxID, es->origin, fxDir, -1, -1 ); + } + else if ( es->eventParm == 2 ) + { // this is for really big hits. + trap_FX_PlayEffectID( hitPersonMidFxID, es->origin, fxDir, -1, -1 ); + } + else + { // this should really just be done in the effect itself, no? + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, es->origin, fxDir, -1, -1 ); + } } else + { //hit something else + vec3_t fxDir; + VectorCopy(es->angles, fxDir); + if (!fxDir[0] && !fxDir[1] && !fxDir[2]) + { + fxDir[1] = 1; + } + //old jk2mp method + /* + trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound("sound/weapons/saber/saberhit.wav")); + trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/spark.efx"), es->origin, fxDir, -1, -1 ); + */ + + trap_FX_PlayEffectID( hitOtherFxID, es->origin, fxDir, -1, -1 ); + } + + //rww - this means we have the number of the ent being hit and the ent that owns the saber doing + //the hit. This being the case, we can store these indecies and the current time in order to do + //some visual tricks on the client between frames to make it look like we're actually continuing + //to hit between server frames. + if (es->otherEntityNum != ENTITYNUM_NONE && es->otherEntityNum2 != ENTITYNUM_NONE) { - saberOwner->serverSaberFleshImpact = qfalse; + centity_t *saberOwner; + + saberOwner = &cg_entities[es->otherEntityNum2]; + + saberOwner->serverSaberHitIndex = es->otherEntityNum; + saberOwner->serverSaberHitTime = cg.time; + + if (es->eventParm) + { + saberOwner->serverSaberFleshImpact = qtrue; + } + else + { + saberOwner->serverSaberFleshImpact = qfalse; + } } } break; case EV_SABER_BLOCK: DEBUGNAME("EV_SABER_BLOCK"); + { + if (es->eventParm) + { //saber block + qboolean cullPass = qfalse; + int blockFXID = cgs.effects.mSaberBlock; + qhandle_t blockSound = trap_S_RegisterSound(va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) )); + qboolean noFlare = qfalse; - if (es->eventParm) - { //saber block - qboolean cullPass = qfalse; - - if (cg.mInRMG) - { - trace_t tr; - vec3_t vecSub; - - VectorSubtract(cg.refdef.vieworg, es->origin, vecSub); - - if (VectorLength(vecSub) < 5000) - { - CG_Trace(&tr, cg.refdef.vieworg, NULL, NULL, es->origin, ENTITYNUM_NONE, CONTENTS_TERRAIN|CONTENTS_SOLID); - - if (tr.fraction == 1.0 || tr.entityNum < MAX_CLIENTS) + if ( es->otherEntityNum2 >= 0 + && es->otherEntityNum2 < ENTITYNUM_NONE ) + {//we have a specific person who is causing this effect, see if we should override it with any custom saber effects/sounds + clientInfo_t *client = NULL; + if ( cg_entities[es->otherEntityNum2].currentState.eType == ET_NPC ) { - cullPass = qtrue; + client = cg_entities[es->otherEntityNum2].npcClient; + } + else if ( es->otherEntityNum2 < MAX_CLIENTS ) + { + client = &cgs.clientinfo[es->otherEntityNum2]; + } + if ( client && client->infoValid ) + { + int saberNum = es->weapon; + int bladeNum = es->legsAnim; + if ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) ) + {//use second blade style values + if ( client->saber[saberNum].blockEffect2 ) + {//custom saber block effect + blockFXID = client->saber[saberNum].blockEffect2; + } + if ( client->saber[saberNum].block2Sound[0] ) + {//custom hit sound + blockSound = client->saber[saberNum].block2Sound[Q_irand(0,2)]; + } + } + else + { + if ( client->saber[saberNum].blockEffect ) + {//custom saber block effect + blockFXID = client->saber[saberNum].blockEffect; + } + if ( client->saber[saberNum].blockSound[0] ) + {//custom hit sound + blockSound = client->saber[saberNum].blockSound[Q_irand(0,2)]; + } + } + if ( (client->saber[saberNum].saberFlags2&SFL2_NO_CLASH_FLARE) ) + { + noFlare = qtrue; + } + } + } + if (cg.mInRMG) + { + trace_t tr; + vec3_t vecSub; + + VectorSubtract(cg.refdef.vieworg, es->origin, vecSub); + + if (VectorLength(vecSub) < 5000) + { + CG_Trace(&tr, cg.refdef.vieworg, NULL, NULL, es->origin, ENTITYNUM_NONE, CONTENTS_TERRAIN|CONTENTS_SOLID); + + if (tr.fraction == 1.0 || tr.entityNum < MAX_CLIENTS) + { + cullPass = qtrue; + } + } + } + else + { + cullPass = qtrue; + } + + if (cullPass) + { + vec3_t fxDir; + + VectorCopy(es->angles, fxDir); + if (!fxDir[0] && !fxDir[1] && !fxDir[2]) + { + fxDir[1] = 1; + } + trap_S_StartSound(es->origin, es->number, CHAN_AUTO, blockSound ); + trap_FX_PlayEffectID( blockFXID, es->origin, fxDir, -1, -1 ); + + if ( !noFlare ) + { + cg_saberFlashTime = cg.time-50; + VectorCopy( es->origin, cg_saberFlashPos ); } } } else - { - cullPass = qtrue; - } - - if (cullPass) - { + { //projectile block vec3_t fxDir; - VectorCopy(es->angles, fxDir); if (!fxDir[0] && !fxDir[1] && !fxDir[2]) { fxDir[1] = 1; } - trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound(va( "sound/weapons/saber/saberblock%d.wav", Q_irand(1, 9) ))); - trap_FX_PlayEffectID( cgs.effects.mSaberBlock, es->origin, fxDir, -1, -1 ); - - cg_saberFlashTime = cg.time-50; - VectorCopy( es->origin, cg_saberFlashPos ); + trap_FX_PlayEffectID(cgs.effects.mBlasterDeflect, es->origin, fxDir, -1, -1); } } - else - { //projectile block - vec3_t fxDir; - VectorCopy(es->angles, fxDir); - if (!fxDir[0] && !fxDir[1] && !fxDir[2]) - { - fxDir[1] = 1; - } - trap_FX_PlayEffectID(cgs.effects.mBlasterDeflect, es->origin, fxDir, -1, -1); - } break; case EV_SABER_CLASHFLARE: diff --git a/codemp/cgame/cg_info.c b/codemp/cgame/cg_info.c index f7795c5..9bf47cf 100644 --- a/codemp/cgame/cg_info.c +++ b/codemp/cgame/cg_info.c @@ -318,7 +318,7 @@ void CG_DrawInformation( void ) { valueNOFP = atoi( Info_ValueForKey( info, "g_forcePowerDisable" ) ); value = atoi( Info_ValueForKey( info, "g_maxForceRank" ) ); - if ( value && !valueNOFP ) { + if ( value && !valueNOFP && (value < NUM_FORCE_MASTERY_LEVELS) ) { char fmStr[1024]; trap_SP_GetStringTextString("MP_INGAME_MAXFORCERANK",fmStr, sizeof(fmStr)); diff --git a/codemp/cgame/cg_local.h b/codemp/cgame/cg_local.h index 9085783..778439a 100644 --- a/codemp/cgame/cg_local.h +++ b/codemp/cgame/cg_local.h @@ -245,8 +245,8 @@ typedef struct { // char headModelName[MAX_QPATH]; // char headSkinName[MAX_QPATH]; char forcePowers[MAX_QPATH]; - char redTeam[MAX_TEAMNAME]; - char blueTeam[MAX_TEAMNAME]; +// char redTeam[MAX_TEAMNAME]; +// char blueTeam[MAX_TEAMNAME]; char teamName[MAX_TEAMNAME]; @@ -1130,6 +1130,7 @@ typedef struct { qhandle_t purpleSaberGlowShader; qhandle_t purpleSaberCoreShader; qhandle_t saberBlurShader; + qhandle_t swordTrailShader; qhandle_t yellowDroppedSaberShader; @@ -1544,8 +1545,8 @@ typedef struct { int fDisable; char mapname[MAX_QPATH]; - char redTeam[MAX_QPATH]; - char blueTeam[MAX_QPATH]; +// char redTeam[MAX_QPATH]; +// char blueTeam[MAX_QPATH]; int voteTime; int voteYes; @@ -1650,6 +1651,7 @@ extern vmCvar_t cg_drawAmmoWarning; extern vmCvar_t cg_drawCrosshair; extern vmCvar_t cg_drawCrosshairNames; extern vmCvar_t cg_drawRadar; +extern vmCvar_t cg_drawVehLeadIndicator; extern vmCvar_t cg_drawAutomap; extern vmCvar_t cg_drawScores; extern vmCvar_t cg_dynamicCrosshair; @@ -1715,6 +1717,8 @@ extern vmCvar_t cg_fpls; extern vmCvar_t cg_ghoul2Marks; +extern vmCvar_t cg_optvehtrace; + extern vmCvar_t cg_saberDynamicMarks; extern vmCvar_t cg_saberDynamicMarkTime; @@ -1780,16 +1784,13 @@ extern vmCvar_t cg_smallFont; extern vmCvar_t cg_bigFont; extern vmCvar_t cg_noTaunt; extern vmCvar_t cg_noProjectileTrail; -extern vmCvar_t cg_trueLightning; +//extern vmCvar_t cg_trueLightning; -extern vmCvar_t cg_redTeamName; -extern vmCvar_t cg_blueTeamName; +//extern vmCvar_t cg_redTeamName; +//extern vmCvar_t cg_blueTeamName; extern vmCvar_t cg_currentSelectedPlayer; extern vmCvar_t cg_currentSelectedPlayerName; -extern vmCvar_t cg_singlePlayer; -extern vmCvar_t cg_enableDust; -extern vmCvar_t cg_enableBreath; -extern vmCvar_t cg_singlePlayerActive; +//extern vmCvar_t cg_singlePlayerActive; extern vmCvar_t cg_recordSPDemo; extern vmCvar_t cg_recordSPDemoName; @@ -2505,6 +2506,7 @@ void FX_BlasterWeaponHitPlayer( vec3_t origin, vec3_t normal, qboolean humanoid #include "../namespace_begin.h" void trap_G2API_CollisionDetect ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,int frameNumber, int entNum, const vec3_t rayStart, const vec3_t rayEnd, const vec3_t scale, int traceFlags, int useLod, float fRadius ); +void trap_G2API_CollisionDetectCache ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,int frameNumber, int entNum, const vec3_t rayStart, const vec3_t rayEnd, const vec3_t scale, int traceFlags, int useLod, float fRadius ); /* Ghoul2 Insert Start diff --git a/codemp/cgame/cg_main.c b/codemp/cgame/cg_main.c index 74cd368..1f2c39f 100644 --- a/codemp/cgame/cg_main.c +++ b/codemp/cgame/cg_main.c @@ -153,6 +153,7 @@ extern int cg_autoMapInputTime; extern vec3_t cg_autoMapAngle; void CG_MiscEnt(void); +void CG_DoCameraShake( vec3_t origin, float intensity, int radius, int time ); //do we have any force powers that we would normally need to cycle to? qboolean CG_NoUseableForce(void) @@ -342,6 +343,14 @@ int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int a CG_MiscEnt(); return 0; + case CG_FX_CAMERASHAKE: + { + TCGCameraShake *data = (TCGCameraShake *)cg.sharedBuffer; + + CG_DoCameraShake( data->mOrigin, data->mIntensity, data->mRadius, data->mTime ); + } + return 0; + default: CG_Error( "vmMain: unknown command %i", command ); break; @@ -708,6 +717,7 @@ vmCvar_t cg_drawAmmoWarning; vmCvar_t cg_drawCrosshair; vmCvar_t cg_drawCrosshairNames; vmCvar_t cg_drawRadar; +vmCvar_t cg_drawVehLeadIndicator; vmCvar_t cg_dynamicCrosshair; vmCvar_t cg_dynamicCrosshairPrecision; vmCvar_t cg_drawRewards; @@ -773,6 +783,8 @@ vmCvar_t cg_fpls; vmCvar_t cg_ghoul2Marks; +vmCvar_t cg_optvehtrace; + vmCvar_t cg_saberDynamicMarks; vmCvar_t cg_saberDynamicMarkTime; @@ -839,7 +851,7 @@ vmCvar_t cg_timescaleFadeSpeed; vmCvar_t cg_timescale; vmCvar_t cg_noTaunt; vmCvar_t cg_noProjectileTrail; -vmCvar_t cg_trueLightning; +//vmCvar_t cg_trueLightning; /* Ghoul2 Insert Start */ @@ -847,14 +859,11 @@ vmCvar_t cg_debugBB; /* Ghoul2 Insert End */ -vmCvar_t cg_redTeamName; -vmCvar_t cg_blueTeamName; +//vmCvar_t cg_redTeamName; +//vmCvar_t cg_blueTeamName; vmCvar_t cg_currentSelectedPlayer; vmCvar_t cg_currentSelectedPlayerName; -vmCvar_t cg_singlePlayer; -vmCvar_t cg_enableDust; -vmCvar_t cg_enableBreath; -vmCvar_t cg_singlePlayerActive; +//vmCvar_t cg_singlePlayerActive; vmCvar_t cg_recordSPDemo; vmCvar_t cg_recordSPDemoName; vmCvar_t cg_showVehBounds; @@ -892,6 +901,7 @@ static cvarTable_t cvarTable[] = { // bk001129 { &cg_drawCrosshair, "cg_drawCrosshair", "1", CVAR_ARCHIVE }, { &cg_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE }, { &cg_drawRadar, "cg_drawRadar", "1", CVAR_ARCHIVE }, + { &cg_drawVehLeadIndicator, "cg_drawVehLeadIndicator", "1", CVAR_ARCHIVE }, { &cg_drawScores, "cg_drawScores", "1", CVAR_ARCHIVE }, { &cg_dynamicCrosshair, "cg_dynamicCrosshair", "1", CVAR_ARCHIVE }, //Enables ghoul2 traces for crosshair traces.. more precise when pointing at others, but slower. @@ -957,6 +967,8 @@ static cvarTable_t cvarTable[] = { // bk001129 { &cg_ghoul2Marks, "cg_ghoul2Marks", "16", 0 }, + { &cg_optvehtrace, "com_optvehtrace", "0", 0 }, + { &cg_saberDynamicMarks, "cg_saberDynamicMarks", "0", 0 }, { &cg_saberDynamicMarkTime, "cg_saberDynamicMarkTime", "60000", 0 }, @@ -1002,14 +1014,11 @@ static cvarTable_t cvarTable[] = { // bk001129 { &cg_blood, "com_blood", "1", CVAR_ARCHIVE }, { &cg_synchronousClients, "g_synchronousClients", "0", 0 }, // communicated by systeminfo - { &cg_redTeamName, "g_redteam", DEFAULT_REDTEAM_NAME, CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO }, - { &cg_blueTeamName, "g_blueteam", DEFAULT_BLUETEAM_NAME, CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO }, +// { &cg_redTeamName, "g_redteam", DEFAULT_REDTEAM_NAME, CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO }, +// { &cg_blueTeamName, "g_blueteam", DEFAULT_BLUETEAM_NAME, CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO }, { &cg_currentSelectedPlayer, "cg_currentSelectedPlayer", "0", CVAR_ARCHIVE}, { &cg_currentSelectedPlayerName, "cg_currentSelectedPlayerName", "", CVAR_ARCHIVE}, - { &cg_singlePlayer, "ui_singlePlayerActive", "0", CVAR_USERINFO}, - { &cg_enableDust, "g_enableDust", "0", 0}, - { &cg_enableBreath, "g_enableBreath", "0", 0}, - { &cg_singlePlayerActive, "ui_singlePlayerActive", "0", CVAR_USERINFO}, +// { &cg_singlePlayerActive, "ui_singlePlayerActive", "0", CVAR_USERINFO}, { &cg_recordSPDemo, "ui_recordSPDemo", "0", CVAR_ARCHIVE}, { &cg_recordSPDemoName, "ui_recordSPDemoName", "", CVAR_ARCHIVE}, @@ -1018,16 +1027,16 @@ static cvarTable_t cvarTable[] = { // bk001129 { &cg_timescaleFadeEnd, "cg_timescaleFadeEnd", "1", 0}, { &cg_timescaleFadeSpeed, "cg_timescaleFadeSpeed", "0", 0}, { &cg_timescale, "timescale", "1", 0}, - { &cg_scorePlum, "cg_scorePlums", "1", CVAR_USERINFO | CVAR_ARCHIVE}, - { &cg_hudFiles, "cg_hudFiles", "ui/jahud.txt", CVAR_USERINFO | CVAR_ARCHIVE}, - { &cg_smoothClients, "cg_smoothClients", "1", CVAR_USERINFO | CVAR_ARCHIVE}, + { &cg_scorePlum, "cg_scorePlums", "1", CVAR_ARCHIVE}, + { &cg_hudFiles, "cg_hudFiles", "ui/jahud.txt", CVAR_ARCHIVE}, + { &cg_smoothClients, "cg_smoothClients", "1", CVAR_ARCHIVE}, { &cg_cameraMode, "com_cameraMode", "0", CVAR_CHEAT}, { &pmove_fixed, "pmove_fixed", "0", 0}, { &pmove_msec, "pmove_msec", "8", 0}, { &cg_noTaunt, "cg_noTaunt", "0", CVAR_ARCHIVE}, { &cg_noProjectileTrail, "cg_noProjectileTrail", "0", CVAR_ARCHIVE}, - { &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE}, +// { &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE}, { &cg_showVehBounds, "cg_showVehBounds", "0", 0}, { &ui_myteam, "ui_myteam", "0", CVAR_ROM|CVAR_INTERNAL}, @@ -1493,6 +1502,7 @@ static void CG_RegisterSounds( void ) { cgs.media.purpleSaberGlowShader = trap_R_RegisterShader( "gfx/effects/sabers/purple_glow" ); cgs.media.purpleSaberCoreShader = trap_R_RegisterShader( "gfx/effects/sabers/purple_line" ); cgs.media.saberBlurShader = trap_R_RegisterShader( "gfx/effects/sabers/saberBlur" ); + cgs.media.swordTrailShader = trap_R_RegisterShader( "gfx/effects/sabers/swordTrail" ); cgs.media.forceCoronaShader = trap_R_RegisterShaderNoMip( "gfx/hud/force_swirl" ); @@ -3029,10 +3039,10 @@ static int CG_OwnerDrawWidth(int ownerDraw, float scale) { return CG_Text_Width(CG_GetKillerText(), scale, FONT_MEDIUM); break; case CG_RED_NAME: - return CG_Text_Width(cg_redTeamName.string, scale, FONT_MEDIUM); + return CG_Text_Width(DEFAULT_REDTEAM_NAME/*cg_redTeamName.string*/, scale, FONT_MEDIUM); break; case CG_BLUE_NAME: - return CG_Text_Width(cg_blueTeamName.string, scale, FONT_MEDIUM); + return CG_Text_Width(DEFAULT_BLUETEAM_NAME/*cg_blueTeamName.string*/, scale, FONT_MEDIUM); break; diff --git a/codemp/cgame/cg_players.c b/codemp/cgame/cg_players.c index d25f0f8..df4b6d7 100644 --- a/codemp/cgame/cg_players.c +++ b/codemp/cgame/cg_players.c @@ -13,6 +13,7 @@ extern int cgSiegeTeam2PlShader; extern void CG_AddRadarEnt(centity_t *cent); //cg_ents.c extern void CG_AddBracketedEnt(centity_t *cent); //cg_ents.c extern qboolean CG_InFighter( void ); +extern qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); //for g2 surface routines @@ -619,6 +620,10 @@ retryModel: //jetpack bolted to must always be third. trap_G2API_AddBolt(ci->ghoul2Model, 0, "*chestg"); + //claw bolts + trap_G2API_AddBolt(ci->ghoul2Model, 0, "*r_hand_cap_r_arm"); + trap_G2API_AddBolt(ci->ghoul2Model, 0, "*l_hand_cap_l_arm"); + ci->bolt_head = trap_G2API_AddBolt(ci->ghoul2Model, 0, "*head_top"); if (ci->bolt_head == -1) { @@ -1038,9 +1043,9 @@ void CG_LoadClientInfo( clientInfo_t *ci ) { teamname[0] = 0; if( cgs.gametype >= GT_TEAM) { if( ci->team == TEAM_BLUE ) { - Q_strncpyz(teamname, cg_blueTeamName.string, sizeof(teamname) ); + Q_strncpyz(teamname, DEFAULT_BLUETEAM_NAME/*cg_blueTeamName.string*/, sizeof(teamname) ); } else { - Q_strncpyz(teamname, cg_redTeamName.string, sizeof(teamname) ); + Q_strncpyz(teamname, DEFAULT_REDTEAM_NAME/*cg_redTeamName.string*/, sizeof(teamname) ); } } if( teamname[0] ) { @@ -1158,7 +1163,14 @@ static void CG_InitG2SaberData(int saberNum, clientInfo_t *ci) trap_G2API_SetSkin(ci->ghoul2Weapons[saberNum], 0, ci->saber[saberNum].skin, ci->saber[saberNum].skin); } - trap_G2API_SetBoltInfo(ci->ghoul2Weapons[saberNum], 0, saberNum); + if (ci->saber[saberNum].saberFlags & SFL_BOLT_TO_WRIST) + { + trap_G2API_SetBoltInfo(ci->ghoul2Weapons[saberNum], 0, 3+saberNum); + } + else + { + trap_G2API_SetBoltInfo(ci->ghoul2Weapons[saberNum], 0, saberNum); + } while (k < ci->saber[saberNum].numBlades) { @@ -1291,8 +1303,8 @@ static qboolean CG_ScanForExistingClientInfo( clientInfo_t *ci, int clientNum ) && !Q_stricmp( ci->saber2Name, match->saber2Name) // && !Q_stricmp( ci->headModelName, match->headModelName ) // && !Q_stricmp( ci->headSkinName, match->headSkinName ) - && !Q_stricmp( ci->blueTeam, match->blueTeam ) - && !Q_stricmp( ci->redTeam, match->redTeam ) +// && !Q_stricmp( ci->blueTeam, match->blueTeam ) +// && !Q_stricmp( ci->redTeam, match->redTeam ) && (cgs.gametype < GT_TEAM || ci->team == match->team) && ci->siegeIndex == match->siegeIndex && match->ghoul2Model @@ -1583,11 +1595,11 @@ void CG_NewClientInfo( int clientNum, qboolean entitiesInitialized ) { v = Info_ValueForKey( configstring, "tl" ); newInfo.teamLeader = atoi(v); - v = Info_ValueForKey( configstring, "g_redteam" ); - Q_strncpyz(newInfo.redTeam, v, MAX_TEAMNAME); +// v = Info_ValueForKey( configstring, "g_redteam" ); +// Q_strncpyz(newInfo.redTeam, v, MAX_TEAMNAME); - v = Info_ValueForKey( configstring, "g_blueteam" ); - Q_strncpyz(newInfo.blueTeam, v, MAX_TEAMNAME); +// v = Info_ValueForKey( configstring, "g_blueteam" ); +// Q_strncpyz(newInfo.blueTeam, v, MAX_TEAMNAME); // model v = Info_ValueForKey( configstring, "model" ); @@ -2225,6 +2237,10 @@ static void CG_PlayerFootsteps( centity_t *cent, footstepType_t footStepType ) void CG_PlayerAnimEventDo( centity_t *cent, animevent_t *animEvent ) { soundChannel_t channel = CHAN_AUTO; + clientInfo_t *client = NULL; + qhandle_t swingSound = 0; + qhandle_t spinSound = 0; + if ( !cent || !animEvent ) { return; @@ -2243,6 +2259,85 @@ void CG_PlayerAnimEventDo( centity_t *cent, animevent_t *animEvent ) } } break; + case AEV_SABER_SWING: + if (cent->currentState.eType == ET_NPC) + { + client = cent->npcClient; + assert(client); + } + else + { + client = &cgs.clientinfo[cent->currentState.clientNum]; + } + if ( client && client->infoValid && client->saber[animEvent->eventData[AED_SABER_SWING_SABERNUM]].swingSound[0] ) + {//custom swing sound + swingSound = client->saber[0].swingSound[Q_irand(0,2)]; + } + else + { + int randomSwing = 1; + switch ( animEvent->eventData[AED_SABER_SWING_TYPE] ) + { + default: + case 0://SWING_FAST + randomSwing = Q_irand( 1, 3 ); + break; + case 1://SWING_MEDIUM + randomSwing = Q_irand( 4, 6 ); + break; + case 2://SWING_STRONG + randomSwing = Q_irand( 7, 9 ); + break; + } + swingSound = trap_S_RegisterSound(va("sound/weapons/saber/saberhup%i.wav", randomSwing)); + } + trap_S_StartSound(cent->currentState.pos.trBase, cent->currentState.number, CHAN_AUTO, swingSound ); + break; + case AEV_SABER_SPIN: + if (cent->currentState.eType == ET_NPC) + { + client = cent->npcClient; + assert(client); + } + else + { + client = &cgs.clientinfo[cent->currentState.clientNum]; + } + if ( client + && client->infoValid + && client->saber[AED_SABER_SPIN_SABERNUM].spinSound ) + {//use override + spinSound = client->saber[AED_SABER_SPIN_SABERNUM].spinSound; + } + else + { + switch ( animEvent->eventData[AED_SABER_SPIN_TYPE] ) + { + case 0://saberspinoff + spinSound = trap_S_RegisterSound( "sound/weapons/saber/saberspinoff.wav" ); + break; + case 1://saberspin + spinSound = trap_S_RegisterSound( "sound/weapons/saber/saberspin.wav" ); + break; + case 2://saberspin1 + spinSound = trap_S_RegisterSound( "sound/weapons/saber/saberspin1.wav" ); + break; + case 3://saberspin2 + spinSound = trap_S_RegisterSound( "sound/weapons/saber/saberspin2.wav" ); + break; + case 4://saberspin3 + spinSound = trap_S_RegisterSound( "sound/weapons/saber/saberspin3.wav" ); + break; + default://random saberspin1-3 + spinSound = trap_S_RegisterSound( va( "sound/weapons/saber/saberspin%d.wav", Q_irand(1,3)) ); + break; + } + } + if ( spinSound ) + { + trap_S_StartSound( NULL, cent->currentState.clientNum, CHAN_AUTO, spinSound ); + } + break; case AEV_FOOTSTEP: CG_PlayerFootsteps( cent, (footstepType_t)animEvent->eventData[AED_FOOTSTEP_TYPE] ); break; @@ -2496,6 +2591,7 @@ void CG_PlayerAnimEvents( int animFileIndex, int eventFileIndex, qboolean torso, switch ( animEvents[i].eventType ) { case AEV_SOUND: + case AEV_SOUNDCHAN: // Determine probability of playing sound if (!animEvents[i].eventData[AED_SOUND_PROBABILITY]) // 100% { @@ -2506,6 +2602,28 @@ void CG_PlayerAnimEvents( int animFileIndex, int eventFileIndex, qboolean torso, doEvent = qtrue; } break; + case AEV_SABER_SWING: + // Determine probability of playing sound + if (!animEvents[i].eventData[AED_SABER_SWING_PROBABILITY]) // 100% + { + doEvent = qtrue; + } + else if (animEvents[i].eventData[AED_SABER_SWING_PROBABILITY] > Q_irand(0, 99) ) + { + doEvent = qtrue; + } + break; + case AEV_SABER_SPIN: + // Determine probability of playing sound + if (!animEvents[i].eventData[AED_SABER_SPIN_PROBABILITY]) // 100% + { + doEvent = qtrue; + } + else if (animEvents[i].eventData[AED_SABER_SPIN_PROBABILITY] > Q_irand(0, 99) ) + { + doEvent = qtrue; + } + break; case AEV_FOOTSTEP: // Determine probability of playing sound if (!animEvents[i].eventData[AED_FOOTSTEP_PROBABILITY]) // 100% @@ -2748,7 +2866,7 @@ static void CG_SetLerpFrameAnimation( centity_t *cent, clientInfo_t *ci, lerpFra animSpeed *= animSpeedMult; - BG_SaberStartTransAnim(cent->currentState.fireflag, newAnimation, &animSpeed, cent->currentState.brokenLimbs); + BG_SaberStartTransAnim(cent->currentState.number, cent->currentState.fireflag, cent->currentState.weapon, newAnimation, &animSpeed, cent->currentState.brokenLimbs); if (torsoOnly) { @@ -5124,6 +5242,11 @@ static void CG_DoSaberLight( saberInfo_t *saber ) { return; } + + if ( (saber->saberFlags2&SFL2_NO_DLIGHT) ) + {//no dlight! + return; + } for ( i = 0; i < saber->numBlades; i++ ) { @@ -5534,7 +5657,17 @@ qboolean CG_G2TraceCollide(trace_t *tr, vec3_t const mins, vec3_t const maxs, co angles[ROLL] = angles[PITCH] = 0; angles[YAW] = g2Hit->lerpAngles[YAW]; - trap_G2API_CollisionDetect ( G2Trace, g2Hit->ghoul2, angles, g2Hit->lerpOrigin, cg.time, g2Hit->currentState.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, cg_g2TraceLod.integer, fRadius ); + if (cg_optvehtrace.integer && + g2Hit->currentState.eType == ET_NPC && + g2Hit->currentState.NPC_class == CLASS_VEHICLE && + g2Hit->m_pVehicle) + { + trap_G2API_CollisionDetectCache ( G2Trace, g2Hit->ghoul2, angles, g2Hit->lerpOrigin, cg.time, g2Hit->currentState.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, cg_g2TraceLod.integer, fRadius ); + } + else + { + trap_G2API_CollisionDetect ( G2Trace, g2Hit->ghoul2, angles, g2Hit->lerpOrigin, cg.time, g2Hit->currentState.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, cg_g2TraceLod.integer, fRadius ); + } if (G2Trace[0].mEntityNum != g2Hit->currentState.number) { @@ -5662,7 +5795,7 @@ void CG_AddGhoul2Mark(int shader, float size, vec3_t start, vec3_t end, int entn trap_G2API_AddSkinGore(ghoul2, &goreSkin); } -void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner) +void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner, int saberNum, int bladeNum) { trace_t trace; vec3_t startTr; @@ -5670,6 +5803,7 @@ void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner) qboolean backWards = qfalse; qboolean doneWithTraces = qfalse; qboolean doEffect = qfalse; + clientInfo_t *client = NULL; if ((cg.time - owner->serverSaberHitTime) > CG_MAX_SABER_COMP_TIME) { @@ -5718,13 +5852,57 @@ void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner) !trEnt->m_pVehicle || trEnt->m_pVehicle->m_pVehicleInfo->type != VH_FIGHTER) { //don't do on fighters cause they have crazy full axial angles + int weaponMarkShader = 0, markShader = cgs.media.bdecal_saberglow; + VectorSubtract(endTr, trace.endpos, ePos); VectorNormalize(ePos); VectorMA(trace.endpos, 4.0f, ePos, ePos); - CG_AddGhoul2Mark(cgs.media.bdecal_saberglow, flrand(3.0f, 4.0f), + if (owner->currentState.eType == ET_NPC) + { + client = owner->npcClient; + } + else + { + client = &cgs.clientinfo[owner->currentState.clientNum]; + } + if ( client + && client->infoValid ) + { + if ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) ) + { + if ( client->saber[saberNum].g2MarksShader2 ) + {//we have a shader to use instead of the standard mark shader + markShader = client->saber[saberNum].g2MarksShader2; + } + if ( client->saber[saberNum].g2WeaponMarkShader2 ) + {//we have a shader to use as a splashback onto the weapon model + weaponMarkShader = client->saber[saberNum].g2WeaponMarkShader2; + } + } + else + { + if ( client->saber[saberNum].g2MarksShader ) + {//we have a shader to use instead of the standard mark shader + markShader = client->saber[saberNum].g2MarksShader; + } + if ( client->saber[saberNum].g2WeaponMarkShader ) + {//we have a shader to use as a splashback onto the weapon model + weaponMarkShader = client->saber[saberNum].g2WeaponMarkShader; + } + } + } + CG_AddGhoul2Mark(markShader, flrand(3.0f, 4.0f), trace.endpos, ePos, trace.entityNum, trEnt->lerpOrigin, trEnt->lerpAngles[YAW], trEnt->ghoul2, trEnt->modelScale, Q_irand(5000, 10000)); + if ( weaponMarkShader ) + { + vec3_t splashBackDir; + VectorScale( ePos, -1 , splashBackDir ); + CG_AddGhoul2Mark(weaponMarkShader, flrand(0.5f, 2.0f), + trace.endpos, splashBackDir, owner->currentState.clientNum, owner->lerpOrigin, owner->lerpAngles[YAW], + owner->ghoul2, owner->modelScale, Q_irand(5000, 10000)); + } } } } @@ -5737,6 +5915,42 @@ void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner) if (doEffect) { + int hitPersonFxID = cgs.effects.mSaberBloodSparks; + int hitOtherFxID = cgs.effects.mSaberCut; + + if (owner->currentState.eType == ET_NPC) + { + client = owner->npcClient; + } + else + { + client = &cgs.clientinfo[owner->currentState.clientNum]; + } + if ( client && client->infoValid ) + { + if ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) ) + {//use second blade style values + if ( client->saber[saberNum].hitPersonEffect2 ) + { + hitPersonFxID = client->saber[saberNum].hitPersonEffect2; + } + if ( client->saber[saberNum].hitOtherEffect2 ) + {//custom hit other effect + hitOtherFxID = client->saber[saberNum].hitOtherEffect2; + } + } + else + {//use first blade style values + if ( client->saber[saberNum].hitPersonEffect ) + { + hitPersonFxID = client->saber[saberNum].hitPersonEffect; + } + if ( client->saber[saberNum].hitOtherEffect ) + {//custom hit other effect + hitOtherFxID = client->saber[saberNum].hitOtherEffect; + } + } + } if (!trace.plane.normal[0] && !trace.plane.normal[1] && !trace.plane.normal[2]) { //who cares, just shoot it somewhere. trace.plane.normal[1] = 1; @@ -5744,12 +5958,12 @@ void CG_SaberCompWork(vec3_t start, vec3_t end, centity_t *owner) if (owner->serverSaberFleshImpact) { //do standard player/live ent hit sparks - trap_FX_PlayEffectID( cgs.effects.mSaberBloodSparks, trace.endpos, trace.plane.normal, -1, -1 ); + trap_FX_PlayEffectID( hitPersonFxID, trace.endpos, trace.plane.normal, -1, -1 ); //trap_S_StartSound(trace.endpos, trace.entityNum, CHAN_AUTO, trap_S_RegisterSound(va("sound/weapons/saber/saberhit%i.wav", Q_irand(1, 3)))); } else { //do the cut effect - trap_FX_PlayEffectID( cgs.effects.mSaberCut, trace.endpos, trace.plane.normal, -1, -1 ); + trap_FX_PlayEffectID( hitOtherFxID, trace.endpos, trace.plane.normal, -1, -1 ); } doEffect = qfalse; } @@ -5792,6 +6006,7 @@ void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, in vec3_t futureAngles; effectTrailArgStruct_t fx; int scolor = 0; + int useModelIndex = 0; if (cent->currentState.eType == ET_NPC) { @@ -5815,15 +6030,32 @@ void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, in futureAngles[PITCH] = angles[PITCH]; futureAngles[ROLL] = angles[ROLL]; - //Assume bladeNum is equal to the bolt index because bolts should be added in order of the blades. - if (fromSaber) + + if ( fromSaber ) { - trap_G2API_GetBoltMatrix(scent->ghoul2, 0, bladeNum, &boltMatrix, futureAngles, origin, cg.time, cgs.gameModels, scent->modelScale); + useModelIndex = 0; } else { - trap_G2API_GetBoltMatrix(scent->ghoul2, saberNum+1, bladeNum, &boltMatrix, futureAngles, origin, cg.time, cgs.gameModels, scent->modelScale); + useModelIndex = saberNum+1; } + //Assume bladeNum is equal to the bolt index because bolts should be added in order of the blades. + //if there is an effect on this blade, play it + if ( !WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) + && client->saber[saberNum].bladeEffect ) + { + trap_FX_PlayBoltedEffectID(client->saber[saberNum].bladeEffect, scent->lerpOrigin, + scent->ghoul2, bladeNum, scent->currentState.number, useModelIndex, -1, qfalse); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) + && client->saber[saberNum].bladeEffect2 ) + { + trap_FX_PlayBoltedEffectID(client->saber[saberNum].bladeEffect2, scent->lerpOrigin, + scent->ghoul2, bladeNum, scent->currentState.number, useModelIndex, -1, qfalse); + } + //get the boltMatrix + trap_G2API_GetBoltMatrix(scent->ghoul2, useModelIndex, bladeNum, &boltMatrix, futureAngles, origin, cg.time, cgs.gameModels, scent->modelScale); + // work the matrix axis stuff into the original axis and origins used. BG_GiveMeVectorFromMatrix(&boltMatrix, ORIGIN, org_); BG_GiveMeVectorFromMatrix(&boltMatrix, NEGATIVE_Y, axis_[0]); @@ -5901,7 +6133,7 @@ void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, in if (client->saber[saberNum].blade[bladeNum].storageTime < cg.time) { //debounce it in case our framerate is absurdly high. Using storageTime since it's not used for anything else in the client. - CG_SaberCompWork(org_, trace.endpos, cent); + CG_SaberCompWork(org_, trace.endpos, cent, saberNum, bladeNum); client->saber[saberNum].blade[bladeNum].storageTime = cg.time + 5; } @@ -5926,9 +6158,16 @@ void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, in { trDir[1] = 1; } - if (!(trace.surfaceFlags & SURF_NOIMPACT) ) // never spark on sky + + if ( (client->saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS) ) + {//don't actually draw the marks/impact effects + } + else { - trap_FX_PlayEffectID( cgs.effects.mSparks, trace.endpos, trDir, -1, -1 ); + if (!(trace.surfaceFlags & SURF_NOIMPACT) ) // never spark on sky + { + trap_FX_PlayEffectID( cgs.effects.mSparks, trace.endpos, trDir, -1, -1 ); + } } //Stop saber? (it wouldn't look right if it was stuck through a thin wall and unable to hurt players on the other side) @@ -5937,29 +6176,35 @@ void CG_AddSaberBlade( centity_t *cent, centity_t *scent, refEntity_t *saber, in VectorCopy(trace.endpos, end); - // All I need is a bool to mark whether I have a previous point to work with. - //....come up with something better.. - if ( client->saber[saberNum].blade[bladeNum].trail.haveOldPos[i] ) - { - if ( trace.entityNum == ENTITYNUM_WORLD || cg_entities[trace.entityNum].currentState.eType == ET_TERRAIN || (cg_entities[trace.entityNum].currentState.eFlags & EF_PERMANENT) ) - {//only put marks on architecture - // Let's do some cool burn/glowing mark bits!!! - CG_CreateSaberMarks( client->saber[saberNum].blade[bladeNum].trail.oldPos[i], trace.endpos, trace.plane.normal ); - - //make a sound - if ( cg.time - client->saber[saberNum].blade[bladeNum].hitWallDebounceTime >= 100 ) - {//ugh, need to have a real sound debouncer... or do this game-side - client->saber[saberNum].blade[bladeNum].hitWallDebounceTime = cg.time; - trap_S_StartSound ( trace.endpos, -1, CHAN_WEAPON, trap_S_RegisterSound( va("sound/weapons/saber/saberhitwall%i", Q_irand(1, 3)) ) ); - } - } + if ( (client->saber[saberNum].saberFlags2&SFL2_NO_WALL_MARKS) ) + {//don't actually draw the marks } else - { - // if we impact next frame, we'll mark a slash mark - client->saber[saberNum].blade[bladeNum].trail.haveOldPos[i] = qtrue; - // CG_ImpactMark( cgs.media.rivetMarkShader, client->saber[saberNum].blade[bladeNum].trail.oldPos[i], client->saber[saberNum].blade[bladeNum].trail.oldNormal[i], - // 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); + {//draw marks if we hit a wall + // All I need is a bool to mark whether I have a previous point to work with. + //....come up with something better.. + if ( client->saber[saberNum].blade[bladeNum].trail.haveOldPos[i] ) + { + if ( trace.entityNum == ENTITYNUM_WORLD || cg_entities[trace.entityNum].currentState.eType == ET_TERRAIN || (cg_entities[trace.entityNum].currentState.eFlags & EF_PERMANENT) ) + {//only put marks on architecture + // Let's do some cool burn/glowing mark bits!!! + CG_CreateSaberMarks( client->saber[saberNum].blade[bladeNum].trail.oldPos[i], trace.endpos, trace.plane.normal ); + + //make a sound + if ( cg.time - client->saber[saberNum].blade[bladeNum].hitWallDebounceTime >= 100 ) + {//ugh, need to have a real sound debouncer... or do this game-side + client->saber[saberNum].blade[bladeNum].hitWallDebounceTime = cg.time; + trap_S_StartSound ( trace.endpos, -1, CHAN_WEAPON, trap_S_RegisterSound( va("sound/weapons/saber/saberhitwall%i", Q_irand(1, 3)) ) ); + } + } + } + else + { + // if we impact next frame, we'll mark a slash mark + client->saber[saberNum].blade[bladeNum].trail.haveOldPos[i] = qtrue; + // CG_ImpactMark( cgs.media.rivetMarkShader, client->saber[saberNum].blade[bladeNum].trail.oldPos[i], client->saber[saberNum].blade[bladeNum].trail.oldNormal[i], + // 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, 1.1f, qfalse ); + } } // stash point so we can connect-the-dots later @@ -5989,6 +6234,14 @@ CheckTrail: goto JustDoIt; } + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) && client->saber[saberNum].trailStyle > 1 ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) && client->saber[saberNum].trailStyle2 > 1 ) ) + {//don't actually draw the trail at all + goto JustDoIt; + } + + //FIXME: if trailStyle is 1, use the motion blur instead + saberTrail = &client->saber[saberNum].blade[bladeNum].trail; saberTrail->duration = saberMoveData[cent->currentState.saberMove].trailLength; @@ -6109,6 +6362,26 @@ CheckTrail: { //don't draw it if the last time is way out of date float oldAlpha = 1.0f - ( diff / trailDur ); + if (cg_saberTrail.integer == 2 && cg_shadows.integer != 2 && cgs.glconfig.stencilBits >= 4) + {//does other stuff below + } + else + { + if ( (!WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) && client->saber[saberNum].trailStyle == 1 ) + || ( WP_SaberBladeUseSecondBladeStyle( &client->saber[saberNum], bladeNum ) && client->saber[saberNum].trailStyle2 == 1 ) ) + {//motion trail + fx.mShader = cgs.media.swordTrailShader; + VectorSet( rgb1, 32.0f, 32.0f, 32.0f ); // make the sith sword trail pretty faint + trailDur *= 2.0f; // stay around twice as long? + } + else + { + fx.mShader = cgs.media.saberBlurShader; + } + fx.mKillTime = trailDur; + fx.mSetFlags = FX_USE_ALPHA; + } + // New muzzle VectorCopy( rgb1, fx.mVerts[0].rgb ); fx.mVerts[0].alpha = 255.0f; @@ -6161,12 +6434,14 @@ CheckTrail: fx.mShader = 2; //2 is always refractive shader fx.mSetFlags = FX_USE_ALPHA; } + /* else { fx.mShader = cgs.media.saberBlurShader; fx.mKillTime = trailDur; fx.mSetFlags = FX_USE_ALPHA; } + */ trap_FX_AddPrimitive(&fx); } @@ -6187,12 +6462,21 @@ JustDoIt: return; } + if ( (client->saber[saberNum].saberFlags2&SFL2_NO_BLADE) ) + {//don't actually draw the blade at all + if ( client->saber[saberNum].numBlades < 3 + && !(client->saber[saberNum].saberFlags2&SFL2_NO_DLIGHT) ) + {//hmm, but still add the dlight + CG_DoSaberLight( &client->saber[saberNum] ); + } + return; + } // Pass in the renderfx flags attached to the saber weapon model...this is done so that saber glows // will get rendered properly in a mirror...not sure if this is necessary?? //CG_DoSaber( org_, axis_[0], saberLen, client->saber[saberNum].blade[bladeNum].lengthMax, client->saber[saberNum].blade[bladeNum].radius, // scolor, renderfx, (qboolean)(saberNum==0&&bladeNum==0) ); CG_DoSaber( org_, axis_[0], saberLen, client->saber[saberNum].blade[bladeNum].lengthMax, client->saber[saberNum].blade[bladeNum].radius, - scolor, renderfx, (qboolean)(client->saber[saberNum].numBlades < 3) ); + scolor, renderfx, (qboolean)(client->saber[saberNum].numBlades < 3 && !(client->saber[saberNum].saberFlags2&SFL2_NO_DLIGHT)) ); } int CG_IsMindTricked(int trickIndex1, int trickIndex2, int trickIndex3, int trickIndex4, int client) @@ -6919,6 +7203,9 @@ void CG_G2AnimEntModelLoad(centity_t *cent) //jetpack bolted to must always be third. trap_G2API_AddBolt(cent->ghoul2, 0, "*chestg"); + //claw bolts + trap_G2API_AddBolt(cent->ghoul2, 0, "*r_hand_cap_r_arm"); + trap_G2API_AddBolt(cent->ghoul2, 0, "*l_hand_cap_l_arm"); if (strstr(GLAName, "players/rockettrooper/")) { @@ -6979,10 +7266,15 @@ void CG_G2AnimEntModelLoad(centity_t *cent) static void CG_CreateSurfaceDebris(centity_t *cent, int surfNum, int fxID, qboolean throwPart) { int lostPartFX = 0; - int b; + int b = -1; vec3_t v, d; mdxaBone_t boltMatrix; - const char *surfName = bgToggleableSurfaces[surfNum]; + const char *surfName = NULL; + + if ( surfNum > 0 ) + { + surfName = bgToggleableSurfaces[surfNum]; + } if (!cent->ghoul2) { //oh no @@ -7039,21 +7331,25 @@ static void CG_CreateSurfaceDebris(centity_t *cent, int surfNum, int fxID, qbool lostPartFX = cent->m_pVehicle->m_pVehicleInfo->iNoseFX; } } - else + else if ( surfName ) { b = trap_G2API_AddBolt(cent->ghoul2, 0, surfName); } - if (b == -1) - { //couldn't find this surface apparently - return; + if (b == -1 || surfNum == -1) + { //couldn't find this surface apparently, so play on origin? + VectorCopy( cent->lerpOrigin, v ); + AngleVectors( cent->lerpAngles, d, NULL, NULL ); + VectorNormalize( d ); + } + else + { + //now let's get the position and direction of this surface and make a big explosion + trap_G2API_GetBoltMatrix(cent->ghoul2, 0, b, &boltMatrix, cent->lerpAngles, cent->lerpOrigin, cg.time, + cgs.gameModels, cent->modelScale); + BG_GiveMeVectorFromMatrix(&boltMatrix, ORIGIN, v); + BG_GiveMeVectorFromMatrix(&boltMatrix, POSITIVE_Z, d); } - - //now let's get the position and direction of this surface and make a big explosion - trap_G2API_GetBoltMatrix(cent->ghoul2, 0, b, &boltMatrix, cent->lerpAngles, cent->lerpOrigin, cg.time, - cgs.gameModels, cent->modelScale); - BG_GiveMeVectorFromMatrix(&boltMatrix, ORIGIN, v); - BG_GiveMeVectorFromMatrix(&boltMatrix, POSITIVE_Z, d); trap_FX_PlayEffectID(fxID, v, d, -1, -1); if ( throwPart && lostPartFX ) @@ -7313,6 +7609,10 @@ void CG_ForceFPLSPlayerModel(centity_t *cent, clientInfo_t *ci) //jetpack bolted to must always be third. trap_G2API_AddBolt(ci->ghoul2Model, 0, "*chestg"); + //claw bolts + trap_G2API_AddBolt(ci->ghoul2Model, 0, "*r_hand_cap_r_arm"); + trap_G2API_AddBolt(ci->ghoul2Model, 0, "*l_hand_cap_l_arm"); + ci->bolt_head = trap_G2API_AddBolt(ci->ghoul2Model, 0, "*head_top"); if (ci->bolt_head == -1) { @@ -7756,6 +8056,7 @@ static CGAME_INLINE void CG_VehicleEffects(centity_t *cent) // Animals don't exude any effects... if ( pVehNPC->m_pVehicleInfo->type != VH_ANIMAL ) { + qboolean didFireTrail = qfalse; if (pVehNPC->m_pVehicleInfo->surfDestruction && cent->ghoul2) { //see if anything has been blown off int i = 0; @@ -7774,6 +8075,7 @@ static CGAME_INLINE void CG_VehicleEffects(centity_t *cent) //create some flames CG_CreateSurfaceDebris(cent, i, cgs.effects.mShipDestBurning, qfalse); + didFireTrail = qtrue; } } @@ -7785,6 +8087,10 @@ static CGAME_INLINE void CG_VehicleEffects(centity_t *cent) return; } } + if ( !didFireTrail && (cent->currentState.eFlags&EF_DEAD) ) + {//spiralling out of control anyway + CG_CreateSurfaceDebris(cent, -1, cgs.effects.mShipDestBurning, qfalse); + } if ( pVehNPC->m_iLastFXTime <= cg.time ) {//until we attach it, we need to debounce this @@ -8152,6 +8458,13 @@ void CG_Player( centity_t *cent ) { if (cent->currentState.iModelScale) { //if the server says we have a custom scale then set it now. cent->modelScale[0] = cent->modelScale[1] = cent->modelScale[2] = cent->currentState.iModelScale/100.0f; + if ( cent->currentState.NPC_class != CLASS_VEHICLE ) + { + if (cent->modelScale[2] && cent->modelScale[2] != 1.0f) + { + cent->lerpOrigin[2] += 24 * (cent->modelScale[2] - 1); + } + } } else { @@ -8292,6 +8605,10 @@ void CG_Player( centity_t *cent ) { //jetpack bolted to must always be third. trap_G2API_AddBolt(cent->npcClient->ghoul2Model, 0, "*chestg"); + //claw bolts + trap_G2API_AddBolt(cent->npcClient->ghoul2Model, 0, "*r_hand_cap_r_arm"); + trap_G2API_AddBolt(cent->npcClient->ghoul2Model, 0, "*l_hand_cap_l_arm"); + cent->npcClient->bolt_head = trap_G2API_AddBolt(cent->npcClient->ghoul2Model, 0, "*head_top"); if (cent->npcClient->bolt_head == -1) { @@ -8390,7 +8707,14 @@ void CG_Player( centity_t *cent ) { if (cg.predictedPlayerState.pm_type == PM_INTERMISSION) { //don't show all this shit during intermission - return; + if ( cent->currentState.eType == ET_NPC + && cent->currentState.NPC_class != CLASS_VEHICLE ) + {//NPC in intermission + } + else + {//don't render players or vehicles in intermissions, allow other NPCs for scripts + return; + } } CG_VehicleEffects(cent); @@ -9873,7 +10197,7 @@ stillDoSaber: if (!saberEnt->currentState.saberInFlight && saberEnt->currentState.bolt2 != 123) { //owner is pulling is back - if ( !ci->saber[0].returnDamage + if ( !(ci->saber[0].saberFlags&SFL_RETURN_DAMAGE) || cent->currentState.saberHolstered ) { vec3_t owndir; @@ -10216,9 +10540,9 @@ stillDoSaber: if (cent->currentState.number != cg.snap->ps.duelIndex && cent->currentState.number != cg.snap->ps.clientNum) { //everyone not involved in the duel is drawn very dark - legs.shaderRGBA[0] = 50; - legs.shaderRGBA[1] = 50; - legs.shaderRGBA[2] = 50; + legs.shaderRGBA[0] /= 5.0f; + legs.shaderRGBA[1] /= 5.0f; + legs.shaderRGBA[2] /= 5.0f; legs.renderfx |= RF_RGB_TINT; } else @@ -10245,31 +10569,23 @@ stillDoSaber: subLen = 1020; } - legs.shaderRGBA[0] = 255 - subLen/4; - legs.shaderRGBA[1] = 255 - subLen/4; - legs.shaderRGBA[2] = 255 - subLen/4; - - if (legs.shaderRGBA[2] < 1) legs.shaderRGBA[2] = 1; + { + const unsigned char savRGBA[3] = {legs.shaderRGBA[0],legs.shaderRGBA[1],legs.shaderRGBA[2]}; + legs.shaderRGBA[0] = max(255-subLen/4,1); + legs.shaderRGBA[1] = max(255-subLen/4,1); + legs.shaderRGBA[2] = max(255-subLen/4,1); legs.renderfx &= ~RF_RGB_TINT; legs.renderfx &= ~RF_FORCE_ENT_ALPHA; legs.customShader = cgs.media.forceShell; - trap_R_AddRefEntityToScene( &legs ); + trap_R_AddRefEntityToScene( &legs ); //draw the shell - legs.customShader = 0; + legs.customShader = 0; //reset to player model - legs.shaderRGBA[0] = 255 - subLen/8; - legs.shaderRGBA[1] = 255 - subLen/8; - legs.shaderRGBA[2] = 255 - subLen/8; - - if (legs.shaderRGBA[2] < 1) - { - legs.shaderRGBA[2] = 1; - } - if (legs.shaderRGBA[2] > 255) - { - legs.shaderRGBA[2] = 255; + legs.shaderRGBA[0] = max(savRGBA[0]-subLen/8,1); + legs.shaderRGBA[1] = max(savRGBA[1]-subLen/8,1); + legs.shaderRGBA[2] = max(savRGBA[2]-subLen/8,1); } if (subLen <= 1024) @@ -10811,6 +11127,16 @@ void CG_ResetPlayerEntity( centity_t *cent ) if (cent->currentState.eType == ET_NPC) { + if (cent->currentState.NPC_class == CLASS_VEHICLE && + cent->m_pVehicle && + cent->m_pVehicle->m_pVehicleInfo->type == VH_FIGHTER && + cg.predictedPlayerState.m_iVehicleNum && + cent->currentState.number == cg.predictedPlayerState.m_iVehicleNum) + { //holy hackery, batman! + //I don't think this will break anything. But really, do I ever? + return; + } + if (!cent->npcClient) { CG_CreateNPCClient(¢->npcClient); //allocate memory for it diff --git a/codemp/cgame/cg_predict.c b/codemp/cgame/cg_predict.c index 3fca6cd..bdee1e7 100644 --- a/codemp/cgame/cg_predict.c +++ b/codemp/cgame/cg_predict.c @@ -1477,7 +1477,7 @@ void CG_PredictPlayerState( void ) { !CG_Piloting(cg.predictedPlayerState.m_iVehicleNum)) { //a passenger on this vehicle, bolt them in centity_t *veh = &cg_entities[cg.predictedPlayerState.m_iVehicleNum]; - VectorCopy(veh->lerpAngles, cg.predictedPlayerState.viewangles); + //VectorCopy(veh->lerpAngles, cg.predictedPlayerState.viewangles); VectorCopy(veh->lerpOrigin, cg.predictedPlayerState.origin); } diff --git a/codemp/cgame/cg_public.h b/codemp/cgame/cg_public.h index a8e435e..04d6ae5 100644 --- a/codemp/cgame/cg_public.h +++ b/codemp/cgame/cg_public.h @@ -263,6 +263,7 @@ Ghoul2 Insert Start CG_G2_INITGHOUL2MODEL, CG_G2_SETSKIN, CG_G2_COLLISIONDETECT, + CG_G2_COLLISIONDETECTCACHE, CG_G2_CLEANMODELS, CG_G2_ANGLEOVERRIDE, CG_G2_PLAYANIM, @@ -434,6 +435,8 @@ typedef enum { CG_MISC_ENT, //rwwRMG - added CG_GET_SORTED_FORCE_POWER, + + CG_FX_CAMERASHAKE,//mcg post-gold added } cgameExport_t; typedef struct diff --git a/codemp/cgame/cg_servercmds.c b/codemp/cgame/cg_servercmds.c index eb8faab..7cd1ea5 100644 --- a/codemp/cgame/cg_servercmds.c +++ b/codemp/cgame/cg_servercmds.c @@ -139,10 +139,10 @@ void CG_ParseServerinfo( void ) { trap_Cvar_Set ( "ui_about_mapname", mapname ); Com_sprintf( cgs.mapname, sizeof( cgs.mapname ), "maps/%s.bsp", mapname ); - Q_strncpyz( cgs.redTeam, Info_ValueForKey( info, "g_redTeam" ), sizeof(cgs.redTeam) ); - trap_Cvar_Set("g_redTeam", cgs.redTeam); - Q_strncpyz( cgs.blueTeam, Info_ValueForKey( info, "g_blueTeam" ), sizeof(cgs.blueTeam) ); - trap_Cvar_Set("g_blueTeam", cgs.blueTeam); +// Q_strncpyz( cgs.redTeam, Info_ValueForKey( info, "g_redTeam" ), sizeof(cgs.redTeam) ); +// trap_Cvar_Set("g_redTeam", cgs.redTeam); +// Q_strncpyz( cgs.blueTeam, Info_ValueForKey( info, "g_blueTeam" ), sizeof(cgs.blueTeam) ); +// trap_Cvar_Set("g_blueTeam", cgs.blueTeam); trap_Cvar_Set ( "ui_about_gametype", va("%i", cgs.gametype ) ); trap_Cvar_Set ( "ui_about_fraglimit", va("%i", cgs.fraglimit ) ); @@ -1532,7 +1532,7 @@ static void CG_ServerCommand( void ) { x++; } trap_SP_GetStringTextString(x, strEd, MAX_STRINGED_SV_STRING); - CG_CenterPrint( strEd, SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); + CG_CenterPrint( strEd, SCREEN_HEIGHT * 0.20, BIGCHAR_WIDTH ); return; } diff --git a/codemp/cgame/cg_syscalls.c b/codemp/cgame/cg_syscalls.c index 99426cd..aa6ddfb 100644 --- a/codemp/cgame/cg_syscalls.c +++ b/codemp/cgame/cg_syscalls.c @@ -835,6 +835,24 @@ void trap_G2API_CollisionDetect ( syscall ( CG_G2_COLLISIONDETECT, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); } +void trap_G2API_CollisionDetectCache ( + CollisionRecord_t *collRecMap, + void* ghoul2, + const vec3_t angles, + const vec3_t position, + int frameNumber, + int entNum, + const vec3_t rayStart, + const vec3_t rayEnd, + const vec3_t scale, + int traceFlags, + int useLod, + float fRadius + ) +{ + syscall ( CG_G2_COLLISIONDETECTCACHE, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); +} + void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr) { syscall(CG_G2_CLEANMODELS, ghoul2Ptr); diff --git a/codemp/cgame/cg_view.c b/codemp/cgame/cg_view.c index 1725da4..0caec14 100644 --- a/codemp/cgame/cg_view.c +++ b/codemp/cgame/cg_view.c @@ -794,7 +794,10 @@ static void CG_OffsetThirdPersonView( void ) cameraLastFrame=cg.time; } - +void CG_GetVehicleCamPos( vec3_t camPos ) +{ + VectorCopy( cg.refdef.vieworg, camPos ); +} /* =============== @@ -1488,6 +1491,11 @@ qboolean CG_CheckPassengerTurretView( void ) {// valid turret if ( vehCent->m_pVehicle->m_pVehicleInfo->turret[turretNum].passengerNum == cg.predictedPlayerState.generic1 ) {//I control this turret + //Ah, crap, just look around freely... below method is way too wiggy + VectorCopy( cg.predictedPlayerState.origin, cg.refdef.vieworg ); + VectorCopy( cg.predictedPlayerState.viewangles, cg.refdef.viewangles ); + return qtrue; + /* int boltIndex = -1; qboolean hackPosAndAngle = qfalse; if ( vehCent->m_pVehicle->m_iGunnerViewTag[turretNum] != -1 ) @@ -1537,6 +1545,7 @@ qboolean CG_CheckPassengerTurretView( void ) } return qtrue; } + */ } } } @@ -1602,6 +1611,7 @@ static int CG_CalcViewValues( void ) { if ( !manningTurret ) {//not manning a turret on a vehicle VectorCopy( ps->origin, cg.refdef.vieworg ); +#ifdef VEH_CONTROL_SCHEME_4 if ( cg.predictedPlayerState.m_iVehicleNum )//in a vehicle { Vehicle_t *pVeh = cg_entities[cg.predictedPlayerState.m_iVehicleNum].m_pVehicle; @@ -1620,13 +1630,14 @@ static int CG_CalcViewValues( void ) { { VectorCopy( ps->viewangles, cg.refdef.viewangles ); } - /* + } +#else// VEH_CONTROL_SCHEME_4 if ( cg.predictedPlayerState.m_iVehicleNum //in a vehicle && BG_UnrestrainedPitchRoll( &cg.predictedPlayerState, cg_entities[cg.predictedPlayerState.m_iVehicleNum].m_pVehicle ) )//can roll/pitch without restriction {//use the vehicle's viewangles to render view! VectorCopy( cg.predictedVehicleState.viewangles, cg.refdef.viewangles ); - */ } +#endif// VEH_CONTROL_SCHEME_4 else { VectorCopy( ps->viewangles, cg.refdef.viewangles ); @@ -1660,7 +1671,9 @@ static int CG_CalcViewValues( void ) { CG_EmplacedView(cg_entities[cg.snap->ps.emplacedIndex].currentState.angles); } - if ( !manningTurret ) + //FIX: okay, if manning a turret, let view turn freely, + // and use the vehicle chase camera info to place vieworg + //if ( !manningTurret ) { if ( cg.predictedPlayerState.m_iVehicleNum //in a vehicle && BG_UnrestrainedPitchRoll( &cg.predictedPlayerState, cg_entities[cg.predictedPlayerState.m_iVehicleNum].m_pVehicle ) )//can roll/pitch without restriction @@ -2113,6 +2126,28 @@ FF_XboxShake(intensity, duration); #endif } +void CG_DoCameraShake( vec3_t origin, float intensity, int radius, int time ) +{ + //FIXME: When exactly is the vieworg calculated in relation to the rest of the frame?s + + vec3_t dir; + float dist, intensityScale; + float realIntensity; + + VectorSubtract( cg.refdef.vieworg, origin, dir ); + dist = VectorNormalize( dir ); + + //Use the dir to add kick to the explosion + + if ( dist > radius ) + return; + + intensityScale = 1 - ( dist / (float) radius ); + realIntensity = intensity * intensityScale; + + CGCam_Shake( realIntensity, time ); +} + void CGCam_SetMusicMult( float multiplier, int duration ) { if (multiplier < 0.1f) @@ -2415,10 +2450,12 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo float mSensitivity = cg.zoomSensitivity; float mPitchOverride = 0.0f; float mYawOverride = 0.0f; + static centity_t *veh = NULL; +#ifdef VEH_CONTROL_SCHEME_4 float mSensitivityOverride = 0.0f; qboolean bUseFighterPitch = qfalse; - static centity_t *veh = NULL; qboolean isFighter = qfalse; +#endif if (cgQueueLoad) { //do this before you start messing around with adding ghoul2 refents and crap @@ -2514,6 +2551,7 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo { //lower sens for emplaced guns and vehicles mSensitivity = 0.2f; } +#ifdef VEH_CONTROL_SCHEME_4 else if (cg.predictedPlayerState.m_iVehicleNum//in a vehicle && !cg.predictedPlayerState.generic1 )//not as a passenger { @@ -2532,6 +2570,7 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo } if ( !isFighter ) +#endif //VEH_CONTROL_SCHEME_4 { if (cg.predictedPlayerState.m_iVehicleNum) { diff --git a/codemp/cgame/mssccprj.scc b/codemp/cgame/mssccprj.scc index 29690e0..78747a6 100644 --- a/codemp/cgame/mssccprj.scc +++ b/codemp/cgame/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [JK2_cgame.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/cgame", ICAAAAAA diff --git a/codemp/cgame/vssver.scc b/codemp/cgame/vssver.scc index 816c8ab3b7f7f2b5477da35549cfb2a55ddcd5a7..6739b60481a931ec05fbde7d319a2a8e729bf377 100644 GIT binary patch literal 816 zcmXAmc}Nsd9LHzZYb!Oc3_-N$&^%I1P_x{1cg)l^b15x3I1x%+g- zhpl-&Ma#EThV4UpsQ)7dlb3nh>}?w}zXmP`7rR0%Ud@kq8C(HW{j_|xiQydKv4Czh z?wpS>a2B`{$T|Wk`jQCur3Wy5h>f!sq zgz;0}qQf}r0gng6uS2vF;T22v+YdetEM>W5Pl-7Jd2&m`ySS(G>=--|I15#DpJtJ@ zg(rc6k?5OD?iKb6Tn%Raww={2bh6|<$$*RtqegMR18{ZC17-HAiFJmjkRpcEJSf&v z;ayVc*o}Mn>^v@%hHQ;lPWN>xWXby&u&Pj0?Jdx=CHjFRlk4k zQ6m%U8OViqHgzrZd$SwhnV{1DvO!RWvpMiAAn#Pyh3X^4{j-s;*MO$Tm%Gn1HM|a<3r?ugN*pDPJn3g1*kMh|y&hoXBjAUCWo02p9+=Ea z;rU?b#YlTkd#0ERkiYge?b2pycpG>jpeHM;r-QX(y$IR$YD=lr{+O7Hk%w#J4S$5= zVm^%AoFfQFf1D9>339b6Q9Y`5;_cz3z<D=K#_~g?bwT-D0{T%5{k^_3))-u#P{+NeSzg^Jto?oX@G;*Hw r*VdJyD$19>efJ#Jk@LFUC@NTU*IO@1;K=(2ut+HCh?3fFqURuNI z3&AvhAm3lJ@n~>qD^1G$UvYT&^&eagP2o8gxC}IROBQ1*1kM>A5BQgYY<6pmb%h@V zio(cRo$Wh24Nm~hrcma&8}V@ zV+iX2PX$#4D#KLG2eJrPfQ9Xj`oPLLLi}2 z#F{pT(B3jZVc)*)^=B@`7oG(YKgLGAG5eEjI7QZ_Fnsfsi1l-jb=U06dUK{YdRJ<2 zDIiv2HO+84;kjV4E6{Q1X%kll&jaWAjN-OqotzImAB0#_^Z5CGE*gFcEZTmk?-^B` zJ^VBnc|Y1YKbIxu0_3&FcO%u&mD~<^ArK~O8><$o#eEI3=S`z_TDU0YGsu>fq`KjE z4q`4sZd2>^YfLFd2*V}U__W+k-VTnTvq^Qr%sY%D=?zf?%4~XI=H|aT@3JK+ sov(u@!_=0p|4i>&5$pAMF-&;wz}~m6vKZR`5Dw`zro_u7BT}0G0h0OF{r~^~ diff --git a/codemp/client/FxSystem.cpp b/codemp/client/FxSystem.cpp index 9bb5a51..110a25b 100644 --- a/codemp/client/FxSystem.cpp +++ b/codemp/client/FxSystem.cpp @@ -89,8 +89,7 @@ void SFxHelper::CameraShake( vec3_t origin, float intensity, int radius, int tim data->mRadius = radius; data->mTime = time; -// VM_Call( cgvm, CG_FX_CAMERASHAKE ); - //FIXME + VM_Call( cgvm, CG_FX_CAMERASHAKE ); } //------------------------------------------------------ diff --git a/codemp/client/OpenAL/vssver.scc b/codemp/client/OpenAL/vssver.scc index b5e63e3935e82b305a2bd80efbbcc96b21d79e12..2aa56864f52d2e321cb64bbb6e492f585224bf44 100644 GIT binary patch literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZJJN58itT+Q0RIo5G@b7Bd!)N4Q!~_(n1o9WX zfB&SaGXTu50`fHr(`Fr44+itAf&3YAoQXOvv0#1;kbmazSEbHJ@kNY4{k1^8`At6d JYYb6fJ^*m}B`g2{ literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW!{g&&G6=wj03Kj+i{#|W*cu(azG66*@f&4}9 z-#;;rX9x4EfPBruv{`H4h=cjnK>iFl&cvG+rNI0eApgwauS%k#vW|>E{k1^8`At4{ J$2bKr9{`!PA({XH diff --git a/codemp/client/cl_cgame.cpp b/codemp/client/cl_cgame.cpp index 0b86ded..6460965 100644 --- a/codemp/client/cl_cgame.cpp +++ b/codemp/client/cl_cgame.cpp @@ -1351,6 +1351,21 @@ Ghoul2 Insert Start VMF(12) ); return 0; + case CG_G2_COLLISIONDETECTCACHE: + G2API_CollisionDetectCache ( (CollisionRecord_t*)VMA(1), *((CGhoul2Info_v *)args[2]), + (const float*)VMA(3), + (const float*)VMA(4), + args[5], + args[6], + (float*)VMA(7), + (float*)VMA(8), + (float*)VMA(9), + G2VertSpaceClient, + args[10], + args[11], + VMF(12) ); + return 0; + case CG_G2_ANGLEOVERRIDE: return G2API_SetBoneAngles(*((CGhoul2Info_v *)args[1]), args[2], (const char *)VMA(3), (float *)VMA(4), args[5], (const Eorientations) args[6], (const Eorientations) args[7], (const Eorientations) args[8], diff --git a/codemp/client/cl_input.cpp b/codemp/client/cl_input.cpp index 0bf6dd6..fb8b0df 100644 --- a/codemp/client/cl_input.cpp +++ b/codemp/client/cl_input.cpp @@ -16,7 +16,12 @@ float cl_mYawOverride = 0.0f; float cl_mSensitivityOverride = 0.0f; qboolean cl_bUseFighterPitch = qfalse; qboolean cl_crazyShipControls = qfalse; + +#ifdef VEH_CONTROL_SCHEME_4 #define OVERRIDE_MOUSE_SENSITIVITY 5.0f//20.0f = 180 degree turn in one mouse swipe across keyboard +#else// VEH_CONTROL_SCHEME_4 +#define OVERRIDE_MOUSE_SENSITIVITY 10.0f//20.0f = 180 degree turn in one mouse swipe across keyboard +#endif// VEH_CONTROL_SCHEME_4 /* =============================================================================== diff --git a/codemp/client/cl_keys.cpp b/codemp/client/cl_keys.cpp index 9f639a5..c9e76ff 100644 --- a/codemp/client/cl_keys.cpp +++ b/codemp/client/cl_keys.cpp @@ -1505,11 +1505,7 @@ void CL_KeyEvent (int key, qboolean down, unsigned time) { // kg.keys can still be used for bound actions if ( down && /*( key < 128 || key == A_MOUSE1 ) && */ -#ifdef _XBOX // No demos on Xbox ( cls.state == CA_CINEMATIC ) && -#else - ( clc.demoplaying || cls.state == CA_CINEMATIC ) && -#endif !cls.keyCatchers) { if (Cvar_VariableValue ("com_cameraMode") == 0) { diff --git a/codemp/client/cl_main.cpp b/codemp/client/cl_main.cpp index 9c9af3d..46c8218 100644 --- a/codemp/client/cl_main.cpp +++ b/codemp/client/cl_main.cpp @@ -971,6 +971,7 @@ void CL_RequestMotd( void ) { Info_SetValueForKey( info, "challenge", cls.updateChallenge ); Info_SetValueForKey( info, "renderer", cls.glconfig.renderer_string ); + Info_SetValueForKey( info, "rvendor", cls.glconfig.vendor_string ); Info_SetValueForKey( info, "version", com_version->string ); Info_SetValueForKey( info, "cputype", Cvar_VariableString("sys_cpustring") ); @@ -2636,15 +2637,16 @@ void CL_Init( void ) { Cvar_Get ("snaps", "20", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("model", "kyle/default", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("forcepowers", "7-1-032330000000001333", CVAR_USERINFO | CVAR_ARCHIVE ); - Cvar_Get ("g_redTeam", "Empire", CVAR_SERVERINFO | CVAR_ARCHIVE); - Cvar_Get ("g_blueTeam", "Rebellion", CVAR_SERVERINFO | CVAR_ARCHIVE); +// Cvar_Get ("g_redTeam", "Empire", CVAR_SERVERINFO | CVAR_ARCHIVE); +// Cvar_Get ("g_blueTeam", "Rebellion", CVAR_SERVERINFO | CVAR_ARCHIVE); Cvar_Get ("color1", "4", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("color2", "4", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("handicap", "100", CVAR_USERINFO | CVAR_ARCHIVE ); Cvar_Get ("teamtask", "0", CVAR_USERINFO ); Cvar_Get ("sex", "male", CVAR_USERINFO | CVAR_ARCHIVE ); +#ifdef USE_CD_KEY Cvar_Get ("cl_anonymous", "0", CVAR_USERINFO | CVAR_ARCHIVE ); - +#endif Cvar_Get ("password", "", CVAR_USERINFO); Cvar_Get ("cg_predictItems", "1", CVAR_USERINFO | CVAR_ARCHIVE ); @@ -2845,7 +2847,7 @@ void CL_ServerInfoPacket( netadr_t from, msg_t *msg ) { prot = atoi( Info_ValueForKey( infoString, "protocol" ) ); if ( prot != PROTOCOL_VERSION ) { Com_DPrintf( "Different protocol info packet: %s\n", infoString ); -// return; + return; } #ifdef _XBOX @@ -3085,6 +3087,10 @@ void CL_ServerStatusResponse( netadr_t from, msg_t *msg ) { Com_sprintf(&serverStatus->string[len], sizeof(serverStatus->string)-len, "%s", s); if (serverStatus->print) { + Com_Printf( "Server (%i.%i.%i.%i:%i)\n", + serverStatus->address.ip[0], serverStatus->address.ip[1], + serverStatus->address.ip[2], serverStatus->address.ip[3], + BigShort( serverStatus->address.port ) ); Com_Printf("Server settings:\n"); // print cvars while (*s) { diff --git a/codemp/client/cl_scrn.cpp b/codemp/client/cl_scrn.cpp index ec12b2b..9964527 100644 --- a/codemp/client/cl_scrn.cpp +++ b/codemp/client/cl_scrn.cpp @@ -344,9 +344,9 @@ void SCR_DrawDebugGraph (void) // // draw the graph // - w = cls.glconfig.vidWidth; + w = 640; x = 0; - y = cls.glconfig.vidHeight; + y = 480; re.SetColor( g_color_table[0] ); re.DrawStretchPic(x, y - cl_graphheight->integer, w, cl_graphheight->integer, 0, 0, 0, 0, cls.whiteShader ); diff --git a/codemp/client/cl_ui.cpp b/codemp/client/cl_ui.cpp index b0fd9f8..8c006ef 100644 --- a/codemp/client/cl_ui.cpp +++ b/codemp/client/cl_ui.cpp @@ -1270,6 +1270,7 @@ Ghoul2 Insert Start case UI_G2_COLLISIONDETECT: + case UI_G2_COLLISIONDETECTCACHE: return 0; //not supported for ui case UI_G2_ANGLEOVERRIDE: diff --git a/codemp/client/eax/vssver.scc b/codemp/client/eax/vssver.scc index 980e029b3215e678f32cfd61849a75e2819bc2db..c10ae54f6b41dc4b60f77b16f76ba889f2ee1620 100644 GIT binary patch delta 49 ucmZ>8m>{BK6uWdmj5q@r)B)+Yg?Tk8m>{B){7}XyMw|f*>VWjy!n~TrSNA(I14SBve3bynKht-`f%yPIP7J~T diff --git a/codemp/client/snd_dma.cpp b/codemp/client/snd_dma.cpp index 0d340e3..bdfcc58 100644 --- a/codemp/client/snd_dma.cpp +++ b/codemp/client/snd_dma.cpp @@ -536,6 +536,19 @@ void S_Init( void ) { // Sources / Channels are not sending to any Slots (other than the Listener / Primary FX Slot) s_channels[i].lSlotID = -1; + if (s_bEAX) + { + // Remove the RoomAuto flag from each Source (to remove Reverb Engine Statistical + // model that is assuming units are in metres) + // Without this call reverb sends from the sources will attenuate too quickly + // with distance, especially for the non-primary reverb zones. + + unsigned long ulFlags = 0; + + s_eaxSet(&EAXPROPERTYID_EAX40_Source, EAXSOURCE_FLAGS, + s_channels[i].alSource, &ulFlags, sizeof(ulFlags)); + } + s_numChannels++; } @@ -6156,21 +6169,11 @@ void UpdateEAXListener() } } + lVolume = 0; for (i = 0; i < s_NumFXSlots; i++) { - if (s_FXSlotInfo[i].lEnvID == s_EnvironmentID) - { - lVolume = 0; - if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) - OutputDebugString("Failed to set Listener's FX Slot Volume to 0\n"); - } - else - { - // This will change to lower the volume based on distance from aperture ... - lVolume = -600; - if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) - OutputDebugString("Failed to set FX Slot Volume to 0\n"); - } + if (s_eaxSet(&s_FXSlotInfo[i].FXSlotGuid, EAXFXSLOT_VOLUME, NULL, &lVolume, sizeof(long))!=AL_NO_ERROR) + OutputDebugString("Failed to set FX Slot Volume to 0\n"); } } diff --git a/codemp/client/vssver.scc b/codemp/client/vssver.scc index bfad7ab67852dd1f11f288c1b3ed5e1050fa3617..97c54c33724278e1bc9d60461fa5849b1058bbe9 100644 GIT binary patch literal 720 zcmXAndq`7J9LG0ZPG@S2Os6(j2__{4*<^{afkEVgYQ2<^nnh=brs`&a%aPUhQLX`HA5> z`R;e=T4`yxTOlZHspS2CRpCwDTG80nV__oTd%%*UQK?2gLd5XBfH74x_bYEPTDT4f zFLik232G(^z7Mzt2K$>FB}@#Q0l8%v_g6oQXR_ecVB7b!xQUNq`Zl! zH~|e^&1pGna~J_!54^sao6&|`CJ|l(wr2l)`9S9NRCed&cxa#fl%Ulk+{vcX(VU9s@UXlzy3}VOP z4TFgDwNv&Y=_H|yDBkqiQiYOO5E@@iva?%ft1gb%y#LmlWdrP>>ME05Pu=p z>9X8j2*}O_;^_wrH(iYjv55w<^MIIr!NS!qInr#{fb4uAUUcih>GQ{GY&e1J0wC@X ze5_vg>QXpO*Wcak+wGAv^2IL=CPcHmAYnr_vkX;4DiyZYA|5bIf=K`{; zf%y4~_^Q+(AA68}H9)*-)AIA{PjZ6&Qw!vCt^e!t|BswKFOXda#Of?Q9t#T%>?MHg zdLZV0#aG$Rf6k5@$Zi1QS$`zU4ocs$1NpZRh<{F(HhX&Xi5*CP6A(*1@!iuO_s@d$)g^CoNoV z#|LEh0r9pxJL%n~l3?@tf&3>kZakj(*&J;D1R(!Ta98pF&a;lpK=wo+=1C4*bbikx zN09xKfcU3kWC>^YJ4aA_P6pz4e3gmNYzo}7t z?O_KpuMNmQ|9wyV?5=)Ckbm2O{8sVahfk-?b_BV%R0J4DN#ClrZrN-DQeOt-D^E-9 z{ob%2oPNrI{F~m4SG2{8Y(Vx^0QtSQR-VXaV*&f863FM;weEZ?qbk_{RY3m4sG0w7 k-#-jCUqXz5K}T_!_PTP0{M#;{?wfQay?i*0I?0pnE(I) diff --git a/codemp/encryption/vssver.scc b/codemp/encryption/vssver.scc index 0b49e26b4840067bf87fd1d980eba0878007d64b..aa36319fb53ec07708eedcb4cfd028b653eb8a15 100644 GIT binary patch delta 33 jcmXpom>?pffAtR2S5XEq_y(kXzWm&{NZX)@5hwxxrg{l- delta 33 jcmXpom>?pf#^W;Ut0)5)d;`)xUw&?!+OySx5hwxxlokm` diff --git a/codemp/ff/vssver.scc b/codemp/ff/vssver.scc index f018f4c1cbbc5936fb22a3349096bdb1f84eb183..bd49a4feac24386979c43a4abcd1935ff6c237c4 100644 GIT binary patch delta 33 icmXpom>?pPwM$}~m>2^Xhy&@Y%39Sfi^HXiKoJ0Xh6d~a delta 33 icmXpom>?qaUoK~hm>2^Xhy&@Y%39Un&yfy{KoJ0flm{FD diff --git a/codemp/game/FighterNPC.c b/codemp/game/FighterNPC.c index c694b76..e3e7fb1 100644 --- a/codemp/game/FighterNPC.c +++ b/codemp/game/FighterNPC.c @@ -88,6 +88,9 @@ extern qboolean BG_UnrestrainedPitchRoll( playerState_t *ps, Vehicle_t *pVeh ); extern void BG_SetAnim(playerState_t *ps, animation_t *animations, int setAnimParts,int anim,int setAnimFlags, int blendTime); extern int BG_GetTime(void); +#ifdef QAGAME //including game headers on cgame is FORBIDDEN ^_^ +extern void G_DamageFromKiller( gentity_t *pEnt, gentity_t *pVehEnt, gentity_t *attacker, vec3_t org, int damage, int dflags, int mod ); +#endif #endif extern void BG_ExternThisSoICanRecompileInDebug( Vehicle_t *pVeh, playerState_t *riderPS ); @@ -374,6 +377,7 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) float speedInc, speedIdleDec, speedIdle, speedIdleAccel, speedMin, speedMax; bgEntity_t *parent = pVeh->m_pParentEntity; qboolean isLandingOrLaunching = qfalse; + /* #ifndef _JK2MP//SP int curTime = level.time; #elif QAGAME//MP GAME @@ -382,6 +386,10 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) //FIXME: pass in ucmd? Not sure if this is reliable... int curTime = pm->cmd.serverTime; #endif + */ + //this function should only be called from pmove.. if it gets called elsehwere, + //obviously this will explode. + int curTime = pm->cmd.serverTime; #ifdef _JK2MP playerState_t *parentPS = parent->playerState; @@ -496,33 +504,14 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) if ((curTime - pVeh->m_iTurboTime)>pVeh->m_pVehicleInfo->turboRecharge) { pVeh->m_iTurboTime = (curTime + pVeh->m_pVehicleInfo->turboDuration); - if (pVeh->m_pVehicleInfo->iTurboStartFX) - { - int i; - for (i=0; im_iExhaustTag[i]==-1) - { - break; - } - #ifndef _JK2MP//SP - G_PlayEffect(pVeh->m_pVehicleInfo->iTurboStartFX, pVeh->m_pParentEntity->playerModel, pVeh->m_iExhaustTag[i], pVeh->m_pParentEntity->s.number, pVeh->m_pParentEntity->currentOrigin ); - #else - //TODO: MP Play Effect? - #endif - } - } + +#ifdef QAGAME//MP GAME-side //NOTE: turbo sound can't be part of effect if effect is played on every muzzle! if ( pVeh->m_pVehicleInfo->soundTurbo ) { -#ifndef _JK2MP//SP - G_SoundIndexOnEnt( pVeh->m_pParentEntity, CHAN_AUTO, pVeh->m_pVehicleInfo->soundTurbo ); -#elif QAGAME//MP GAME-side G_EntitySound( ((gentity_t *)(pVeh->m_pParentEntity)), CHAN_AUTO, pVeh->m_pVehicleInfo->soundTurbo ); -#elif CGAME//MP CGAME-side - //trap_S_StartSound( NULL, pVeh->m_pParentEntity->s.number, CHAN_AUTO, pVeh->m_pVehicleInfo->soundTurbo ); -#endif } +#endif } } speedInc = pVeh->m_pVehicleInfo->acceleration * pVeh->m_fTimeModifier; @@ -530,7 +519,10 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) {//going turbo speed speedMax = pVeh->m_pVehicleInfo->turboSpeed; //double our acceleration - speedInc *= 2.0f; + //speedInc *= 2.0f; + //no no no! this would el breako el predictiono! we want the following... -rww + speedInc = (pVeh->m_pVehicleInfo->acceleration*2.0f) * pVeh->m_fTimeModifier; + //force us to move forward pVeh->m_ucmd.forwardmove = 127; #ifdef _JK2MP//SP can cheat and just check m_iTurboTime directly... :) @@ -737,7 +729,8 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) && pVeh->m_pVehicleInfo->Inhabited( pVeh )//has to have a driver in order to be capable of landing #endif && !pVeh->m_iRemovedSurfaces - && parentPS->electrifyTimeelectrifyTime < curTime + && parentPS->vehTurnaroundTime < curTime && (pVeh->m_LandTrace.fraction >= 1.0f//no grounf ||pVeh->m_LandTrace.plane.normal[2] < MIN_LANDING_SLOPE//can't land here ||parentPS->speed>MIN_LANDING_SPEED)//going too fast to land @@ -786,7 +779,7 @@ static void ProcessMoveCommands( Vehicle_t *pVeh ) //strafing takes away from forward speed? If so, strafePerc above should use speedMax //parentPS->speed *= (1.0f-pVeh->m_pVehicleInfo->strafePerc); } - else//if ( parentPS->hackingTimef ) + else//if ( parentPS->hackingTime ) { if ( parentPS->hackingTime > 0 ) { @@ -1000,7 +993,7 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta { //pVeh->m_ucmd.forwardmove = 0; //FIXME: don't bias towards pitching down when in space... - if ( !(pVeh->m_pParentEntity->s.number%2) ) + if ( !(pVeh->m_pParentEntity->s.number%3) ) {//NOT everyone should do this pVeh->m_vOrientation[PITCH] += pVeh->m_fTimeModifier; if ( !BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) @@ -1011,7 +1004,7 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta } } } - else if ( !(pVeh->m_pParentEntity->s.number%3) ) + else if ( !(pVeh->m_pParentEntity->s.number%4) ) { pVeh->m_vOrientation[PITCH] -= pVeh->m_fTimeModifier; if ( !BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) @@ -1029,20 +1022,12 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta if ( pVeh->m_LandTrace.fraction < 1.0f ) { //if you land at all when pieces of your ship are missing, then die gentity_t *parent = (gentity_t *)pVeh->m_pParentEntity; - gentity_t *killer = parent; #ifdef _JK2MP//only have this info in MP... - if (parent->client->ps.otherKiller < ENTITYNUM_WORLD && - parent->client->ps.otherKillerTime > level.time) - { - gentity_t *potentialKiller = &g_entities[parent->client->ps.otherKiller]; - - if (potentialKiller->inuse && potentialKiller->client) - { //he's valid I guess - killer = potentialKiller; - } - } -#endif + G_DamageFromKiller( parent, parent, NULL, parent->client->ps.origin, 999999, DAMAGE_NO_ARMOR, MOD_SUICIDE ); +#else + gentity_t *killer = parent; G_Damage(parent, killer, killer, vec3_origin, parent->client->ps.origin, 99999, DAMAGE_NO_ARMOR, MOD_SUICIDE); +#endif } #endif @@ -1060,7 +1045,7 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta factor *= 2.0f; } - if ( !(pVeh->m_pParentEntity->s.number%4)||!(pVeh->m_pParentEntity->s.number%5) ) + if ( !(pVeh->m_pParentEntity->s.number%2)||!(pVeh->m_pParentEntity->s.number%6) ) {//won't yaw, so increase roll factor factor *= 4.0f; } @@ -1077,7 +1062,7 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta factor *= 2.0f; } - if ( !(pVeh->m_pParentEntity->s.number%4)||!(pVeh->m_pParentEntity->s.number%5) ) + if ( !(pVeh->m_pParentEntity->s.number%2)||!(pVeh->m_pParentEntity->s.number%6) ) {//won't yaw, so increase roll factor factor *= 4.0f; } @@ -1094,7 +1079,7 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta factor *= 2.0f; } - if ( !(pVeh->m_pParentEntity->s.number%4)||!(pVeh->m_pParentEntity->s.number%5) ) + if ( !(pVeh->m_pParentEntity->s.number%2)||!(pVeh->m_pParentEntity->s.number%6) ) {//won't yaw, so increase roll factor factor *= 4.0f; } @@ -1104,6 +1089,9 @@ static void FighterDamageRoutine( Vehicle_t *pVeh, bgEntity_t *parent, playerSta } #ifdef _JK2MP + +#ifdef VEH_CONTROL_SCHEME_4 + #define FIGHTER_TURNING_MULTIPLIER 0.8f//was 1.6f //magic number hackery #define FIGHTER_TURNING_DEADZONE 0.25f//no turning if offset is this much void FighterRollAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS) @@ -1178,9 +1166,6 @@ void FighterRollAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *p void FighterYawAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS) { -/* - float angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]); -*/ float angDif = AngleSubtract(pVeh->m_vPrevRiderViewAngles[YAW],riderPS->viewangles[YAW]);///2.0f;//AngleSubtract(pVeh->m_vPrevRiderViewAngles[YAW], riderPS->viewangles[YAW]); if ( fabs( angDif ) < FIGHTER_TURNING_DEADZONE ) { @@ -1246,9 +1231,6 @@ void FighterYawAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *pa void FighterPitchAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS) { -/* - float angDif = AngleSubtract(pVeh->m_vOrientation[PITCH], riderPS->viewangles[PITCH]); -*/ float angDif = AngleSubtract(0,riderPS->viewangles[PITCH]);//AngleSubtract(pVeh->m_vPrevRiderViewAngles[PITCH], riderPS->viewangles[PITCH]); if ( fabs( angDif ) < FIGHTER_TURNING_DEADZONE ) { @@ -1312,6 +1294,61 @@ void FighterPitchAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t * } } +#else// VEH_CONTROL_SCHEME_4 + +void FighterYawAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS) +{ + float angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]); + + if (parentPS && parentPS->speed) + { + float s = parentPS->speed; + float maxDif = pVeh->m_pVehicleInfo->turningSpeed*0.8f; //magic number hackery + + if (s < 0.0f) + { + s = -s; + } + angDif *= s/pVeh->m_pVehicleInfo->speedMax; + if (angDif > maxDif) + { + angDif = maxDif; + } + else if (angDif < -maxDif) + { + angDif = -maxDif; + } + pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f)); + } +} + +void FighterPitchAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS) +{ + float angDif = AngleSubtract(pVeh->m_vOrientation[PITCH], riderPS->viewangles[PITCH]); + + if (parentPS && parentPS->speed) + { + float s = parentPS->speed; + float maxDif = pVeh->m_pVehicleInfo->turningSpeed*0.8f; //magic number hackery + + if (s < 0.0f) + { + s = -s; + } + angDif *= s/pVeh->m_pVehicleInfo->speedMax; + if (angDif > maxDif) + { + angDif = maxDif; + } + else if (angDif < -maxDif) + { + angDif = -maxDif; + } + pVeh->m_vOrientation[PITCH] = AngleNormalize360(pVeh->m_vOrientation[PITCH] - angDif*(pVeh->m_fTimeModifier*0.2f)); + } +} +#endif// VEH_CONTROL_SCHEME_4 + void FighterPitchClamp(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS, int curTime ) { if ( !BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) @@ -1331,7 +1368,8 @@ void FighterPitchClamp(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *p } } } -#endif + +#endif// _JK2MP //MP RULE - ALL PROCESSORIENTCOMMANDS FUNCTIONS MUST BE BG-COMPATIBLE!!! //If you really need to violate this rule for SP, then use ifdefs. @@ -1394,6 +1432,8 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) #endif #ifdef _JK2MP + +#ifdef VEH_CONTROL_SCHEME_4 if ( parentPS->hyperSpaceTime && (curTime - parentPS->hyperSpaceTime) < HYPERSPACE_TIME ) {//Going to Hyperspace @@ -1416,13 +1456,27 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) FighterPitchClamp( pVeh, riderPS, parentPS, curTime ); return; } -#endif + +#else// VEH_CONTROL_SCHEME_4 + + if ( parentPS->hyperSpaceTime + && (curTime - parentPS->hyperSpaceTime) < HYPERSPACE_TIME ) + {//Going to Hyperspace + VectorCopy( riderPS->viewangles, pVeh->m_vOrientation ); + VectorCopy( riderPS->viewangles, parentPS->viewangles ); + return; + } +#endif// VEH_CONTROL_SCHEME_4 + +#endif//_JK2MP if ( pVeh->m_iDropTime >= curTime ) {//you can only YAW during this parentPS->viewangles[YAW] = pVeh->m_vOrientation[YAW] = riderPS->viewangles[YAW]; +#ifdef VEH_CONTROL_SCHEME_4 VectorClear( pVeh->m_vPrevRiderViewAngles ); pVeh->m_vPrevRiderViewAngles[YAW] = AngleNormalize180(riderPS->viewangles[YAW]); +#endif// VEH_CONTROL_SCHEME_4 return; } @@ -1519,19 +1573,25 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) pVeh->m_vOrientation[YAW] = riderPS->viewangles[YAW];//*pVeh->m_LandTrace.fraction; #endif } +#ifdef VEH_CONTROL_SCHEME_4 else { VectorClear( pVeh->m_vPrevRiderViewAngles ); pVeh->m_vPrevRiderViewAngles[YAW] = AngleNormalize180(riderPS->viewangles[YAW]); } +#endif// VEH_CONTROL_SCHEME_4 } else if ( (pVeh->m_iRemovedSurfaces||parentPS->electrifyTime>=curTime)//spiralling out of control - && (!(pVeh->m_pParentEntity->s.number%4)||!(pVeh->m_pParentEntity->s.number%5)) ) + && (!(pVeh->m_pParentEntity->s.number%2)||!(pVeh->m_pParentEntity->s.number%6)) ) {//no yaw control } else if ( pVeh->m_pPilot && pVeh->m_pPilot->s.number < MAX_CLIENTS && parentPS->speed > 0.0f )//&& !( pVeh->m_ucmd.forwardmove > 0 && pVeh->m_LandTrace.fraction != 1.0f ) ) { - if ( 0 && BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) +#ifdef VEH_CONTROL_SCHEME_4 + if ( 0 ) +#else// VEH_CONTROL_SCHEME_4 + if ( BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) +#endif// VEH_CONTROL_SCHEME_4 { VectorCopy( riderPS->viewangles, pVeh->m_vOrientation ); VectorCopy( riderPS->viewangles, parentPS->viewangles ); @@ -1585,7 +1645,9 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) #ifdef _JK2MP FighterPitchAdjust(pVeh, riderPS, parentPS); +#ifdef VEH_CONTROL_SCHEME_4 FighterPitchClamp( pVeh, riderPS, parentPS, curTime ); +#endif// VEH_CONTROL_SCHEME_4 #else pVeh->m_vOrientation[PITCH] = riderPS->viewangles[PITCH]; #endif @@ -1607,6 +1669,7 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) //cap it reasonably //NOTE: was hardcoded to 40.0f, now using extern data +#ifdef VEH_CONTROL_SCHEME_4 if ( !BG_UnrestrainedPitchRoll( riderPS, pVeh ) ) { if ( pVeh->m_pVehicleInfo->rollLimit != -1 ) @@ -1621,6 +1684,19 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) } } } +#else// VEH_CONTROL_SCHEME_4 + if ( pVeh->m_pVehicleInfo->rollLimit != -1 ) + { + if (curRoll > pVeh->m_pVehicleInfo->rollLimit ) + { + curRoll = pVeh->m_pVehicleInfo->rollLimit; + } + else if (curRoll < -pVeh->m_pVehicleInfo->rollLimit) + { + curRoll = -pVeh->m_pVehicleInfo->rollLimit; + } + } +#endif// VEH_CONTROL_SCHEME_4 } } } @@ -1706,7 +1782,7 @@ static void ProcessOrientCommands( Vehicle_t *pVeh ) if ( pVeh->m_vOrientation[ROLL] ) { //continually adjust the yaw based on the roll.. if ( (pVeh->m_iRemovedSurfaces||parentPS->electrifyTime>=curTime)//spiralling out of control - && (!(pVeh->m_pParentEntity->s.number%4)||!(pVeh->m_pParentEntity->s.number%5)) ) + && (!(pVeh->m_pParentEntity->s.number%2)||!(pVeh->m_pParentEntity->s.number%6)) ) {//leave YAW alone } else @@ -1776,7 +1852,6 @@ static void AnimateVehicle( Vehicle_t *pVeh ) int curTime = pm->cmd.serverTime; #endif -#ifdef _JK2MP if ( parentPS->hyperSpaceTime && curTime - parentPS->hyperSpaceTime < HYPERSPACE_TIME ) {//Going to Hyperspace @@ -1788,7 +1863,6 @@ static void AnimateVehicle( Vehicle_t *pVeh ) } } else -#endif { isLanding = FighterIsLanding( pVeh, parentPS ); isLanded = FighterIsLanded( pVeh, parentPS ); diff --git a/codemp/game/NPC_AI_Jedi.c b/codemp/game/NPC_AI_Jedi.c index 9667768..0643fa5 100644 --- a/codemp/game/NPC_AI_Jedi.c +++ b/codemp/game/NPC_AI_Jedi.c @@ -2049,6 +2049,36 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi trace_t trace; int parts, anim; float speed, checkDist; + qboolean allowCartWheels = qtrue; + qboolean allowWallFlips = qtrue; + + if ( self->client->ps.weapon == WP_SABER ) + { + if ( self->client->saber[0].model + && self->client->saber[0].model[0] + && (self->client->saber[0].saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartWheels = qfalse; + } + else if ( self->client->saber[1].model + && self->client->saber[1].model[0] + && (self->client->saber[1].saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartWheels = qfalse; + } + if ( self->client->saber[0].model + && self->client->saber[0].model[0] + && (self->client->saber[0].saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } + else if ( self->client->saber[1].model + && self->client->saber[1].model[0] + && (self->client->saber[1].saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } + } VectorSet(mins, self->r.mins[0],self->r.mins[1],0); VectorSet(maxs, self->r.maxs[0],self->r.maxs[1],24); @@ -2092,7 +2122,7 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi //trace in the dir that we want to go VectorMA( self->r.currentOrigin, checkDist, right, traceto ); trap_Trace( &trace, self->r.currentOrigin, mins, maxs, traceto, self->s.number, CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BOTCLIP ); - if ( trace.fraction >= 1.0f ) + if ( trace.fraction >= 1.0f && allowCartWheels ) {//it's clear, let's do it //FIXME: check for drops? vec3_t fwdAngles, jumpRt; @@ -2145,41 +2175,44 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi trap_Trace( &trace, self->r.currentOrigin, mins, maxs, traceto, self->s.number, CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BOTCLIP ); if ( trace.fraction >= 1.0f ) {//it's clear, let's do it - int parts; + if ( allowWallFlips ) + {//okay to do wall-flips with this saber + int parts; - //FIXME: check for drops? - //turn the cartwheel into a wallflip in the other dir - if ( rightdot > 0 ) - { - anim = BOTH_WALL_FLIP_LEFT; - self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; - VectorMA( self->client->ps.velocity, 150, right, self->client->ps.velocity ); - } - else - { - anim = BOTH_WALL_FLIP_RIGHT; - self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; - VectorMA( self->client->ps.velocity, -150, right, self->client->ps.velocity ); - } - self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - //animate me - parts = SETANIM_LEGS; - if ( !self->client->ps.weaponTime ) - { - parts = SETANIM_BOTH; - } - NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); - self->client->ps.fd.forceJumpZStart = self->r.currentOrigin[2];//so we don't take damage if we land at same height - //self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); - if ( self->client->NPC_class == CLASS_BOBAFETT ) - { - G_AddEvent( self, EV_JUMP, 0 ); - } - else - { - G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); - } - return EVASION_OTHER; + //FIXME: check for drops? + //turn the cartwheel into a wallflip in the other dir + if ( rightdot > 0 ) + { + anim = BOTH_WALL_FLIP_LEFT; + self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; + VectorMA( self->client->ps.velocity, 150, right, self->client->ps.velocity ); + } + else + { + anim = BOTH_WALL_FLIP_RIGHT; + self->client->ps.velocity[0] = self->client->ps.velocity[1] = 0; + VectorMA( self->client->ps.velocity, -150, right, self->client->ps.velocity ); + } + self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + //animate me + parts = SETANIM_LEGS; + if ( !self->client->ps.weaponTime ) + { + parts = SETANIM_BOTH; + } + NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + self->client->ps.fd.forceJumpZStart = self->r.currentOrigin[2];//so we don't take damage if we land at same height + //self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); + if ( self->client->NPC_class == CLASS_BOBAFETT ) + { + G_AddEvent( self, EV_JUMP, 0 ); + } + else + { + G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); + } + return EVASION_OTHER; + } } else {//boxed in on both sides @@ -2212,36 +2245,55 @@ evasionType_t Jedi_CheckFlipEvasions( gentity_t *self, float rightdot, float zdi //Try wall run? if ( bestCheckDist ) {//one of the walls was close enough to wall-run on - int parts; + qboolean allowWallRuns = qtrue; + if ( self->client->ps.weapon == WP_SABER ) + { + if ( self->client->saber[0].model + && self->client->saber[0].model[0] + && (self->client->saber[0].saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } + else if ( self->client->saber[1].model + && self->client->saber[1].model[0] + && (self->client->saber[1].saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } + } + if ( allowWallRuns ) + {//okay to do wallruns with this saber + int parts; - //FIXME: check for long enough wall and a drop at the end? - if ( bestCheckDist > 0 ) - {//it was to the right - anim = BOTH_WALL_RUN_RIGHT; + //FIXME: check for long enough wall and a drop at the end? + if ( bestCheckDist > 0 ) + {//it was to the right + anim = BOTH_WALL_RUN_RIGHT; + } + else + {//it was to the left + anim = BOTH_WALL_RUN_LEFT; + } + self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + //animate me + parts = SETANIM_LEGS; + if ( !self->client->ps.weaponTime ) + { + parts = SETANIM_BOTH; + } + NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + self->client->ps.fd.forceJumpZStart = self->r.currentOrigin[2];//so we don't take damage if we land at same height + //self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); + if ( self->client->NPC_class == CLASS_BOBAFETT ) + { + G_AddEvent( self, EV_JUMP, 0 ); + } + else + { + G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); + } + return EVASION_OTHER; } - else - {//it was to the left - anim = BOTH_WALL_RUN_LEFT; - } - self->client->ps.velocity[2] = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - //animate me - parts = SETANIM_LEGS; - if ( !self->client->ps.weaponTime ) - { - parts = SETANIM_BOTH; - } - NPC_SetAnim( self, parts, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); - self->client->ps.fd.forceJumpZStart = self->r.currentOrigin[2];//so we don't take damage if we land at same height - //self->client->ps.pm_flags |= (PMF_JUMPING|PMF_SLOW_MO_FALL); - if ( self->client->NPC_class == CLASS_BOBAFETT ) - { - G_AddEvent( self, EV_JUMP, 0 ); - } - else - { - G_SoundOnEnt( self, CHAN_BODY, "sound/weapons/force/jump.wav" ); - } - return EVASION_OTHER; } //else check for wall in front, do backflip off wall } diff --git a/codemp/game/NPC_combat.c b/codemp/game/NPC_combat.c index e623b3a..c476469 100644 --- a/codemp/game/NPC_combat.c +++ b/codemp/game/NPC_combat.c @@ -575,6 +575,7 @@ void ChangeWeapon( gentity_t *ent, int newWeapon ) } ent->client->ps.weapon = newWeapon; + ent->client->pers.cmd.weapon = newWeapon; ent->NPC->shotTime = 0; ent->NPC->burstCount = 0; ent->NPC->attackHold = 0; diff --git a/codemp/game/NPC_spawn.c b/codemp/game/NPC_spawn.c index 5d68ad8..59a4f8c 100644 --- a/codemp/game/NPC_spawn.c +++ b/codemp/game/NPC_spawn.c @@ -1244,6 +1244,12 @@ void NPC_Begin (gentity_t *ent) //SP way: //droidEnt->s.m_iVehicleNum = ent->s.number; //droidEnt->owner = ent; + //set team + droidEnt->alliedTeam = ent->alliedTeam; + droidEnt->teamnodmg = ent->teamnodmg; + droidEnt->client->sess.sessionTeam = ent->client->sess.sessionTeam; + droidEnt->client->ps.persistant[PERS_TEAM] = ent->client->ps.persistant[PERS_TEAM]; + //position VectorCopy( ent->r.currentOrigin, droidEnt->s.origin ); VectorCopy( ent->r.currentOrigin, droidEnt->client->ps.origin ); G_SetOrigin( droidEnt, droidEnt->s.origin ); @@ -1467,21 +1473,18 @@ gentity_t *NPC_Spawn_Do( gentity_t *ent ) ent->NPC_type = Q_strlwr( G_NewString( ent->NPC_type ) ); } - /* - if ( ent->svFlags & SVF_NO_BASIC_SOUNDS ) + if ( ent->r.svFlags & SVF_NO_BASIC_SOUNDS ) { - newent->svFlags |= SVF_NO_BASIC_SOUNDS; + newent->r.svFlags |= SVF_NO_BASIC_SOUNDS; } - if ( ent->svFlags & SVF_NO_COMBAT_SOUNDS ) + if ( ent->r.svFlags & SVF_NO_COMBAT_SOUNDS ) { - newent->svFlags |= SVF_NO_COMBAT_SOUNDS; + newent->r.svFlags |= SVF_NO_COMBAT_SOUNDS; } - if ( ent->svFlags & SVF_NO_EXTRA_SOUNDS ) + if ( ent->r.svFlags & SVF_NO_EXTRA_SOUNDS ) { - newent->svFlags |= SVF_NO_EXTRA_SOUNDS; + newent->r.svFlags |= SVF_NO_EXTRA_SOUNDS; } - */ - //rwwFIXMEFIXME: Use all these flags? if ( ent->message ) {//has a key @@ -1617,7 +1620,7 @@ gentity_t *NPC_Spawn_Do( gentity_t *ent ) } newent->NPC->defaultBehavior = newent->NPC->behaviorState = BS_WAIT; newent->classname = "NPC"; - // newent->svFlags |= SVF_NOPUSH; + // newent->r.svFlags |= SVF_NOPUSH; } } //===================================================================== @@ -1947,6 +1950,10 @@ teamnodmg - team that NPC does not take damage from (turrets and other auto-defe 0 - none 1 - red 2 - blue + +"noBasicSounds" - set to 1 to prevent loading and usage of basic sounds (pain, death, etc) +"noCombatSounds" - set to 1 to prevent loading and usage of combat sounds (anger, victory, etc.) +"noExtraSounds" - set to 1 to prevent loading and usage of "extra" sounds (chasing the enemy - detecting them, flanking them... also jedi combat sounds) */ //void NPC_PrecacheModels ( char *NPCName ); extern void NPC_PrecacheAnimationCFG( const char *NPC_type ); @@ -1987,25 +1994,22 @@ void SP_NPC_spawner( gentity_t *self) self->count = 1; } - /* {//Stop loading of certain extra sounds static int garbage; if ( G_SpawnInt( "noBasicSounds", "0", &garbage ) ) { - self->svFlags |= SVF_NO_BASIC_SOUNDS; + self->r.svFlags |= SVF_NO_BASIC_SOUNDS; } if ( G_SpawnInt( "noCombatSounds", "0", &garbage ) ) { - self->svFlags |= SVF_NO_COMBAT_SOUNDS; + self->r.svFlags |= SVF_NO_COMBAT_SOUNDS; } if ( G_SpawnInt( "noExtraSounds", "0", &garbage ) ) { - self->svFlags |= SVF_NO_EXTRA_SOUNDS; + self->r.svFlags |= SVF_NO_EXTRA_SOUNDS; } } - */ - //rwwFIXMEFIXME: Use these flags? if ( !self->wait ) { @@ -2026,7 +2030,7 @@ void SP_NPC_spawner( gentity_t *self) /* if ( self->delay > 0 ) { - self->svFlags |= SVF_NPC_PRECACHE; + self->r.svFlags |= SVF_NPC_PRECACHE; } */ //rwwFIXMEFIXME: support for this flag? @@ -2040,7 +2044,7 @@ void SP_NPC_spawner( gentity_t *self) if ( self->targetname ) {//Wait for triggering self->use = NPC_Spawn; - // self->svFlags |= SVF_NPC_PRECACHE;//FIXME: precache my weapons somehow? + // self->r.svFlags |= SVF_NPC_PRECACHE;//FIXME: precache my weapons somehow? //NPC_PrecacheModels( self->NPC_type ); } @@ -4155,7 +4159,7 @@ void NPC_Kill_f( void ) } } /* - else if ( player && (player->svFlags&SVF_NPC_PRECACHE) ) + else if ( player && (player->r.svFlags&SVF_NPC_PRECACHE) ) {//a spawner Com_Printf( S_COLOR_GREEN"Removing NPC spawner %s named %s\n", player->NPC_type, player->targetname ); G_FreeEntity( player ); diff --git a/codemp/game/NPC_stats.c b/codemp/game/NPC_stats.c index 4941402..583857c 100644 --- a/codemp/game/NPC_stats.c +++ b/codemp/game/NPC_stats.c @@ -751,8 +751,7 @@ void NPC_Precache ( gentity_t *spawner ) if ( COM_ParseString( &p, &value ) ) { continue; } - //if ( !(spawner->svFlags&SVF_NO_BASIC_SOUNDS) ) - if (1) + if ( !(spawner->r.svFlags&SVF_NO_BASIC_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -771,8 +770,7 @@ void NPC_Precache ( gentity_t *spawner ) if ( COM_ParseString( &p, &value ) ) { continue; } - //if ( !(spawner->svFlags&SVF_NO_COMBAT_SOUNDS) ) - if (1) + if ( !(spawner->r.svFlags&SVF_NO_COMBAT_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -791,8 +789,7 @@ void NPC_Precache ( gentity_t *spawner ) if ( COM_ParseString( &p, &value ) ) { continue; } - //if ( !(spawner->svFlags&SVF_NO_EXTRA_SOUNDS) ) - if (1) + if ( !(spawner->r.svFlags&SVF_NO_EXTRA_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -811,8 +808,7 @@ void NPC_Precache ( gentity_t *spawner ) if ( COM_ParseString( &p, &value ) ) { continue; } - //if ( !(spawner->svFlags&SVF_NO_EXTRA_SOUNDS) ) - if (1) + if ( !(spawner->r.svFlags&SVF_NO_EXTRA_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -837,7 +833,7 @@ void NPC_Precache ( gentity_t *spawner ) curWeap = GetIDForString( WPTable, value ); - if (curWeap >= 0 && curWeap < WP_NUM_WEAPONS) + if (curWeap > WP_NONE && curWeap < WP_NUM_WEAPONS) { RegisterItem(BG_FindItemForWeapon((weapon_t)curWeap)); } @@ -2148,8 +2144,7 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) { continue; } - //if ( !(NPC->svFlags&SVF_NO_BASIC_SOUNDS) ) - if (1) + if ( !(NPC->r.svFlags&SVF_NO_BASIC_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -2171,8 +2166,7 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) { continue; } - //if ( !(NPC->svFlags&SVF_NO_COMBAT_SOUNDS) ) - if (1) + if ( !(NPC->r.svFlags&SVF_NO_COMBAT_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -2193,8 +2187,7 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) { continue; } - //if ( !(NPC->svFlags&SVF_NO_EXTRA_SOUNDS) ) - if (1) + if ( !(NPC->r.svFlags&SVF_NO_EXTRA_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -2215,8 +2208,7 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) { continue; } - //if ( !(NPC->svFlags&SVF_NO_EXTRA_SOUNDS) ) - if (1) + if ( !(NPC->r.svFlags&SVF_NO_EXTRA_SOUNDS) ) { //FIXME: store this in some sound field or parse in the soundTable like the animTable... Q_strncpyz( sound, value, sizeof( sound ) ); @@ -2375,13 +2367,13 @@ qboolean NPC_ParseParms( const char *NPCName, gentity_t *NPC ) continue; } - if ( !NPC->client->saber[0].twoHanded ) + if ( !(NPC->client->saber[0].saberFlags&SFL_TWO_HANDED) ) {//can't use a second saber if first one is a two-handed saber...? char *saberName = (char *)BG_TempAlloc(4096);//G_NewString( value ); strcpy(saberName, value); WP_SaberParseParms( saberName, &NPC->client->saber[1] ); - if ( NPC->client->saber[1].twoHanded ) + if ( (NPC->client->saber[1].saberFlags&SFL_TWO_HANDED) ) {//tsk tsk, can't use a twoHanded saber as second saber WP_RemoveSaber( NPC->client->saber, 1 ); } @@ -3288,8 +3280,11 @@ void NPC_LoadParms( void ) trap_FS_Read(npcParseBuffer, len, f); npcParseBuffer[len] = 0; + len = COM_Compress( npcParseBuffer ); + strcat( marker, npcParseBuffer ); strcat(marker, "\n"); + len++; trap_FS_FCloseFile(f); totallen += len; diff --git a/codemp/game/bg_misc.c b/codemp/game/bg_misc.c index 2efcdf9..37642ca 100644 --- a/codemp/game/bg_misc.c +++ b/codemp/game/bg_misc.c @@ -2743,7 +2743,11 @@ int BG_EmplacedView(vec3_t baseAngles, vec3_t angles, float *newYaw, float const //I don't much care for hardcoded strings, but this seems the best way to go. qboolean BG_IsValidCharacterModel(const char *modelName, const char *skinName) { - if (!Q_stricmp(modelName, "kyle")) + if (!Q_stricmp(skinName, "menu")) + { + return qfalse; + } + else if (!Q_stricmp(modelName, "kyle")) { if (!Q_stricmp(skinName, "fpls")) { @@ -2763,16 +2767,7 @@ qboolean BG_IsValidCharacterModel(const char *modelName, const char *skinName) qboolean BG_ValidateSkinForTeam( const char *modelName, char *skinName, int team, float *colors ) { - char trunc[6]; - int i = 0; - while (i < 5) - { - trunc[i] = modelName[i]; - i++; - } - trunc[i] = 0; - - if (!Q_stricmp(trunc, "jedi_")) + if (!Q_stricmpn(modelName, "jedi_",5)) { //argh, it's a custom player skin! if (team == TEAM_RED && colors) { diff --git a/codemp/game/bg_panimate.c b/codemp/game/bg_panimate.c index e73a979..bf529c3 100644 --- a/codemp/game/bg_panimate.c +++ b/codemp/game/bg_panimate.c @@ -17,6 +17,7 @@ extern int trap_FX_RegisterEffect( const char *file); #include "../namespace_end.h" #endif +extern saberInfo_t *BG_MySaber( int clientNum, int saberNum ); /* ============================================================================== BEGIN: Animation utility functions (sequence checking) @@ -215,6 +216,14 @@ qboolean BG_DirectFlippingAnim( int anim ) return qfalse; } +qboolean BG_SaberInAttackPure( int move ) +{ + if ( move >= LS_A_TL2BR && move <= LS_A_T2B ) + { + return qtrue; + } + return qfalse; +} qboolean BG_SaberInAttack( int move ) { if ( move >= LS_A_TL2BR && move <= LS_A_T2B ) @@ -1754,6 +1763,8 @@ stringID_table_t animEventTypeTable[MAX_ANIM_EVENTS+1] = ENUM2STRING(AEV_FIRE), //# animID AEV_FIRE framenum altfire chancetofire ENUM2STRING(AEV_MOVE), //# animID AEV_MOVE framenum forwardpush rightpush uppush ENUM2STRING(AEV_SOUNDCHAN), //# animID AEV_SOUNDCHAN framenum CHANNEL soundpath randomlow randomhi chancetoplay + ENUM2STRING(AEV_SABER_SWING), //# animID AEV_SABER_SWING framenum CHANNEL randomlow randomhi chancetoplay + ENUM2STRING(AEV_SABER_SPIN), //# animID AEV_SABER_SPIN framenum CHANNEL chancetoplay //must be terminated NULL,-1 }; @@ -1990,6 +2001,56 @@ void ParseAnimationEvtBlock(const char *aeb_filename, animevent_t *animEvents, a break; } animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY] = atoi( token ); + + //last part - cheat and check and see if it's a special overridable saber sound we know of... + if ( !Q_stricmpn( "sound/weapons/saber/saberhup", stringData, 28 ) ) + {//a saber swing + animEvents[curAnimEvent].eventType = AEV_SABER_SWING; + animEvents[curAnimEvent].eventData[AED_SABER_SWING_SABERNUM] = 0;//since we don't know which one they meant if we're hacking this, always use first saber + animEvents[curAnimEvent].eventData[AED_SABER_SWING_PROBABILITY] = animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY]; + if ( lowestVal < 4 ) + {//fast swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = 0;//SWING_FAST; + } + else if ( lowestVal < 7 ) + {//medium swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = 1;//SWING_MEDIUM; + } + else + {//strong swing + animEvents[curAnimEvent].eventData[AED_SABER_SWING_TYPE] = 2;//SWING_STRONG; + } + } + else if ( !Q_stricmpn( "sound/weapons/saber/saberspin", stringData, 29 ) ) + {//a saber spin + animEvents[curAnimEvent].eventType = AEV_SABER_SPIN; + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_SABERNUM] = 0;//since we don't know which one they meant if we're hacking this, always use first saber + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_PROBABILITY] = animEvents[curAnimEvent].eventData[AED_SOUND_PROBABILITY]; + if ( stringData[29] == 'o' ) + {//saberspinoff + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 0; + } + else if ( stringData[29] == '1' ) + {//saberspin1 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 2; + } + else if ( stringData[29] == '2' ) + {//saberspin2 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 3; + } + else if ( stringData[29] == '3' ) + {//saberspin3 + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 4; + } + else if ( stringData[29] == '%' ) + {//saberspin%d + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 5; + } + else + {//just plain saberspin + animEvents[curAnimEvent].eventData[AED_SABER_SPIN_TYPE] = 1; + } + } break; case AEV_FOOTSTEP: //# animID AEV_FOOTSTEP framenum footstepType //get footstep type @@ -2123,8 +2184,13 @@ int BG_ParseAnimationEvtFile( const char *as_filename, int animFileIndex, int ev assert(animFileIndex < MAX_ANIM_FILES); assert(eventFileIndex < MAX_ANIM_FILES); - if (eventFileIndex == -1) - { + if ( animFileIndex < 0 || animFileIndex >= MAX_ANIM_FILES ) + {//WTF??!! + return 0; + } + + if ( eventFileIndex < 0 || eventFileIndex >= MAX_ANIM_FILES ) + {//WTF??!! forcedIndex = 0; } else @@ -2664,8 +2730,27 @@ void PM_SetTorsoAnimTimer(int time ) BG_SetTorsoAnimTimer(pm->ps, time); } -void BG_SaberStartTransAnim( int saberAnimLevel, int anim, float *animSpeed, int broken ) +void BG_SaberStartTransAnim( int clientNum, int saberAnimLevel, int weapon, int anim, float *animSpeed, int broken ) { + if ( anim >= BOTH_A1_T__B_ && anim <= BOTH_ROLL_STAB ) + { + if ( weapon == WP_SABER ) + { + saberInfo_t *saber = BG_MySaber( clientNum, 0 ); + if ( saber + && saber->animSpeedScale != 1.0f ) + { + *animSpeed *= saber->animSpeedScale; + } + saber = BG_MySaber( clientNum, 1 ); + if ( saber + && saber->animSpeedScale != 1.0f ) + { + *animSpeed *= saber->animSpeedScale; + } + } + } + if ( ( (anim) >= BOTH_T1_BR__R && (anim) <= BOTH_T1_BL_TL ) || ( (anim) >= BOTH_T2_BR__R && @@ -2729,7 +2814,7 @@ void BG_SetAnimFinal(playerState_t *ps, animation_t *animations, //NOTE: Setting blendTime here breaks actual blending.. blendTime = 0; - BG_SaberStartTransAnim(ps->fd.saberAnimLevel, anim, &editAnimSpeed, ps->brokenLimbs); + BG_SaberStartTransAnim(ps->clientNum, ps->fd.saberAnimLevel, ps->weapon, anim, &editAnimSpeed, ps->brokenLimbs); // Set torso anim if (setAnimParts & SETANIM_TORSO) diff --git a/codemp/game/bg_pmove.c b/codemp/game/bg_pmove.c index 02bd437..450ac5d 100644 --- a/codemp/game/bg_pmove.c +++ b/codemp/game/bg_pmove.c @@ -25,6 +25,7 @@ extern void trap_FX_PlayEffect( const char *file, vec3_t org, vec3_t fwd, int vo extern qboolean BG_FullBodyTauntAnim( int anim ); extern float PM_WalkableGroundDistance(void); extern qboolean PM_GroundSlideOkay( float zNormal ); +extern saberInfo_t *BG_MySaber( int clientNum, int saberNum ); pmove_t *pm; pml_t pml; @@ -260,6 +261,8 @@ qboolean PM_INLINE PM_IsRocketTrooper(void) int PM_GetSaberStance(void) { int anim = BOTH_STAND2; + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); if (!pm->ps->saberEntityNum) { //lost it @@ -271,6 +274,25 @@ int PM_GetSaberStance(void) return BOTH_STAND1; } + if ( saber1 + && saber1->readyAnim != -1 ) + { + return saber1->readyAnim; + } + + if ( saber2 + && saber2->readyAnim != -1 ) + { + return saber2->readyAnim; + } + + if ( saber1 + && saber2 + && !pm->ps->saberHolstered ) + {//dual sabers, both on + return BOTH_SABERDUAL_STANCE; + } + switch ( pm->ps->fd.saberAnimLevel ) { case SS_DUAL: @@ -279,16 +301,16 @@ int PM_GetSaberStance(void) case SS_STAFF: anim = BOTH_SABERSTAFF_STANCE; break; - case FORCE_LEVEL_1: - case FORCE_LEVEL_5: + case SS_FAST: + case SS_TAVION: anim = BOTH_SABERFAST_STANCE; break; - case FORCE_LEVEL_3: + case SS_STRONG: anim = BOTH_SABERSLOW_STANCE; break; - case FORCE_LEVEL_0: - case FORCE_LEVEL_2: - case FORCE_LEVEL_4: + case SS_NONE: + case SS_MEDIUM: + case SS_DESANN: default: anim = BOTH_STAND2; break; @@ -1765,6 +1787,8 @@ PM_CheckJump */ static qboolean PM_CheckJump( void ) { + qboolean allowFlips = qtrue; + if (pm->ps->clientNum >= MAX_CLIENTS) { bgEntity_t *pEnt = pm_entSelf; @@ -1798,6 +1822,22 @@ static qboolean PM_CheckJump( void ) return qfalse; } + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber1 + && (saber1->saberFlags&SFL_NO_FLIPS) ) + { + allowFlips = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_FLIPS) ) + { + allowFlips = qfalse; + } + } + if (pm->ps->groundEntityNum != ENTITYNUM_NONE || pm->ps->origin[2] < pm->ps->fd.forceJumpZStart) { pm->ps->fd.forcePowersActive &= ~(1<cmd.forwardmove > 0 ) + if ( allowFlips ) { - anim = BOTH_FLIP_F; + if ( pm->cmd.forwardmove > 0 ) + { + anim = BOTH_FLIP_F; + } + else if ( pm->cmd.forwardmove < 0 ) + { + anim = BOTH_FLIP_B; + } + else if ( pm->cmd.rightmove > 0 ) + { + anim = BOTH_FLIP_R; + } + else if ( pm->cmd.rightmove < 0 ) + { + anim = BOTH_FLIP_L; + } } - else if ( pm->cmd.forwardmove < 0 ) + else { - anim = BOTH_FLIP_B; - } - else if ( pm->cmd.rightmove > 0 ) - { - anim = BOTH_FLIP_R; - } - else if ( pm->cmd.rightmove < 0 ) - { - anim = BOTH_FLIP_L; + if ( pm->cmd.forwardmove > 0 ) + { + anim = BOTH_FORCEINAIR1; + } + else if ( pm->cmd.forwardmove < 0 ) + { + anim = BOTH_FORCEINAIRBACK1; + } + else if ( pm->cmd.rightmove > 0 ) + { + anim = BOTH_FORCEINAIRRIGHT1; + } + else if ( pm->cmd.rightmove < 0 ) + { + anim = BOTH_FORCEINAIRLEFT1; + } } if ( pm->ps->weaponTime ) {//FIXME: really only care if we're in a saber attack anim... @@ -1883,7 +1944,8 @@ static qboolean PM_CheckJump( void ) (pm->ps->legsAnim) != BOTH_FLIP_F &&//not already flipping (pm->ps->legsAnim) != BOTH_FLIP_B && (pm->ps->legsAnim) != BOTH_FLIP_R && - (pm->ps->legsAnim) != BOTH_FLIP_L ) + (pm->ps->legsAnim) != BOTH_FLIP_L + && allowFlips ) { int anim = BOTH_FORCEINAIR1; int parts = SETANIM_BOTH; @@ -2060,6 +2122,56 @@ static qboolean PM_CheckJump( void ) !BG_HasYsalamiri(pm->gametype, pm->ps) && BG_CanUseFPNow(pm->gametype, pm->ps, pm->cmd.serverTime, FP_LEVITATION) ) { + qboolean allowWallRuns = qtrue; + qboolean allowWallFlips = qtrue; + qboolean allowFlips = qtrue; + qboolean allowWallGrabs = qtrue; + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber1 + && (saber1->saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_WALL_RUNS) ) + { + allowWallRuns = qfalse; + } + if ( saber1 + && (saber1->saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_WALL_FLIPS) ) + { + allowWallFlips = qfalse; + } + if ( saber1 + && (saber1->saberFlags&SFL_NO_FLIPS) ) + { + allowFlips = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_FLIPS) ) + { + allowFlips = qfalse; + } + if ( saber1 + && (saber1->saberFlags&SFL_NO_WALL_GRAB) ) + { + allowWallGrabs = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_WALL_GRAB) ) + { + allowWallGrabs = qfalse; + } + } + if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) {//on the ground //check for left-wall and right-wall special jumps @@ -2069,32 +2181,47 @@ static qboolean PM_CheckJump( void ) {//strafing right if ( pm->cmd.forwardmove > 0 ) {//wall-run - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; - anim = BOTH_WALL_RUN_RIGHT; + if ( allowWallRuns ) + { + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; + anim = BOTH_WALL_RUN_RIGHT; + } } else if ( pm->cmd.forwardmove == 0 ) {//wall-flip - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - anim = BOTH_WALL_FLIP_RIGHT; + if ( allowWallFlips ) + { + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + anim = BOTH_WALL_FLIP_RIGHT; + } } } else if ( pm->cmd.rightmove < 0 && pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 ) {//strafing left if ( pm->cmd.forwardmove > 0 ) {//wall-run - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; - anim = BOTH_WALL_RUN_LEFT; + if ( allowWallRuns ) + { + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.0f; + anim = BOTH_WALL_RUN_LEFT; + } } else if ( pm->cmd.forwardmove == 0 ) {//wall-flip - vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; - anim = BOTH_WALL_FLIP_LEFT; + if ( allowWallFlips ) + { + vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f; + anim = BOTH_WALL_FLIP_LEFT; + } } } else if ( pm->cmd.forwardmove < 0 && !(pm->cmd.buttons&BUTTON_ATTACK) ) {//backflip - vertPush = JUMP_VELOCITY; - anim = BOTH_FLIP_BACK1;//BG_PickAnim( BOTH_FLIP_BACK1, BOTH_FLIP_BACK3 ); + if ( allowFlips ) + { + vertPush = JUMP_VELOCITY; + anim = BOTH_FLIP_BACK1;//BG_PickAnim( BOTH_FLIP_BACK1, BOTH_FLIP_BACK3 ); + } } vertPush += 128; //give them an extra shove @@ -2395,76 +2522,79 @@ static qboolean PM_CheckJump( void ) && PM_WalkableGroundDistance() <= 80 //unfortunately we do not have a happy ground timer like SP (this would use up more bandwidth if we wanted prediction workign right), so we'll just use the actual ground distance. && (pm->ps->legsAnim == BOTH_JUMP1 || pm->ps->legsAnim == BOTH_INAIR1 ) )//not in a flip or spin or anything {//run up wall, flip backwards - //FIXME: have to be moving... make sure it's opposite the wall... or at least forward? - int wallWalkAnim = BOTH_WALL_FLIP_BACK1; - int parts = SETANIM_LEGS; - int contents = MASK_SOLID;//MASK_PLAYERSOLID;//CONTENTS_SOLID; - //qboolean kick = qtrue; - if ( pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_2 ) + if ( allowWallRuns ) { - wallWalkAnim = BOTH_FORCEWALLRUNFLIP_START; - parts = SETANIM_BOTH; - //kick = qfalse; - } - else - { - if ( !pm->ps->weaponTime ) + //FIXME: have to be moving... make sure it's opposite the wall... or at least forward? + int wallWalkAnim = BOTH_WALL_FLIP_BACK1; + int parts = SETANIM_LEGS; + int contents = MASK_SOLID;//MASK_PLAYERSOLID;//CONTENTS_SOLID; + //qboolean kick = qtrue; + if ( pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_2 ) { + wallWalkAnim = BOTH_FORCEWALLRUNFLIP_START; parts = SETANIM_BOTH; + //kick = qfalse; } - } - //if ( PM_HasAnimation( pm->gent, wallWalkAnim ) ) - if (1) //sure, we have it! Because I SAID SO. - { - vec3_t fwd, traceto, mins, maxs, fwdAngles; - trace_t trace; - vec3_t idealNormal; - bgEntity_t *traceEnt; - - VectorSet(mins, pm->mins[0], pm->mins[1], 0.0f); - VectorSet(maxs, pm->maxs[0], pm->maxs[1], 24.0f); - VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0.0f); - - AngleVectors( fwdAngles, fwd, NULL, NULL ); - VectorMA( pm->ps->origin, 32, fwd, traceto ); - - pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, contents );//FIXME: clip brushes too? - VectorSubtract( pm->ps->origin, traceto, idealNormal ); - VectorNormalize( idealNormal ); - traceEnt = PM_BGEntForNum(trace.entityNum); - - if ( trace.fraction < 1.0f - &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) - {//there is a wall there - pm->ps->velocity[0] = pm->ps->velocity[1] = 0; - if ( wallWalkAnim == BOTH_FORCEWALLRUNFLIP_START ) + else + { + if ( !pm->ps->weaponTime ) { - pm->ps->velocity[2] = forceJumpStrength[FORCE_LEVEL_3]/2.0f; + parts = SETANIM_BOTH; } - else - { - VectorMA( pm->ps->velocity, -150, fwd, pm->ps->velocity ); - pm->ps->velocity[2] += 150.0f; - } - //animate me - PM_SetAnim( parts, wallWalkAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 ); -// pm->ps->pm_flags |= PMF_JUMPING|PMF_SLOW_MO_FALL; - //again with the flags! - //G_SoundOnEnt( pm->gent, CHAN_BODY, "sound/weapons/force/jump.wav" ); - //yucky! - PM_SetForceJumpZStart(pm->ps->origin[2]);//so we don't take damage if we land at same height - pm->cmd.upmove = 0; - pm->ps->fd.forceJumpSound = 1; - BG_ForcePowerDrain( pm->ps, FP_LEVITATION, 5 ); + } + //if ( PM_HasAnimation( pm->gent, wallWalkAnim ) ) + if (1) //sure, we have it! Because I SAID SO. + { + vec3_t fwd, traceto, mins, maxs, fwdAngles; + trace_t trace; + vec3_t idealNormal; + bgEntity_t *traceEnt; - //kick if jumping off an ent - /* - if ( kick && traceEnt && (traceEnt->s.eType == ET_PLAYER || traceEnt->s.eType == ET_NPC) ) - { //kick that thang! - pm->ps->forceKickFlip = traceEnt->s.number+1; + VectorSet(mins, pm->mins[0], pm->mins[1], 0.0f); + VectorSet(maxs, pm->maxs[0], pm->maxs[1], 24.0f); + VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0.0f); + + AngleVectors( fwdAngles, fwd, NULL, NULL ); + VectorMA( pm->ps->origin, 32, fwd, traceto ); + + pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, contents );//FIXME: clip brushes too? + VectorSubtract( pm->ps->origin, traceto, idealNormal ); + VectorNormalize( idealNormal ); + traceEnt = PM_BGEntForNum(trace.entityNum); + + if ( trace.fraction < 1.0f + &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) + {//there is a wall there + pm->ps->velocity[0] = pm->ps->velocity[1] = 0; + if ( wallWalkAnim == BOTH_FORCEWALLRUNFLIP_START ) + { + pm->ps->velocity[2] = forceJumpStrength[FORCE_LEVEL_3]/2.0f; + } + else + { + VectorMA( pm->ps->velocity, -150, fwd, pm->ps->velocity ); + pm->ps->velocity[2] += 150.0f; + } + //animate me + PM_SetAnim( parts, wallWalkAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 ); + // pm->ps->pm_flags |= PMF_JUMPING|PMF_SLOW_MO_FALL; + //again with the flags! + //G_SoundOnEnt( pm->gent, CHAN_BODY, "sound/weapons/force/jump.wav" ); + //yucky! + PM_SetForceJumpZStart(pm->ps->origin[2]);//so we don't take damage if we land at same height + pm->cmd.upmove = 0; + pm->ps->fd.forceJumpSound = 1; + BG_ForcePowerDrain( pm->ps, FP_LEVITATION, 5 ); + + //kick if jumping off an ent + /* + if ( kick && traceEnt && (traceEnt->s.eType == ET_PLAYER || traceEnt->s.eType == ET_NPC) ) + { //kick that thang! + pm->ps->forceKickFlip = traceEnt->s.number+1; + } + */ + pm->cmd.rightmove = pm->cmd.forwardmove= 0; } - */ - pm->cmd.rightmove = pm->cmd.forwardmove= 0; } } } @@ -2483,63 +2613,66 @@ static qboolean PM_CheckJump( void ) //&& (pm->ps->legsAnim == BOTH_JUMP1 || pm->ps->legsAnim == BOTH_INAIR1 ) )//not in a flip or spin or anything ) {//see if we're pushing at a wall and jump off it if so - //FIXME: make sure we have enough force power - //FIXME: check to see if we can go any higher - //FIXME: limit to a certain number of these in a row? - //FIXME: maybe don't require a ucmd direction, just check all 4? - //FIXME: should stick to the wall for a second, then push off... - vec3_t checkDir, traceto, mins, maxs, fwdAngles; - trace_t trace; - vec3_t idealNormal; - int anim = -1; - - VectorSet(mins, pm->mins[0], pm->mins[1], 0.0f); - VectorSet(maxs, pm->maxs[0], pm->maxs[1], 24.0f); - VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0.0f); - - if ( pm->cmd.rightmove ) + if ( allowWallGrabs ) { - if ( pm->cmd.rightmove > 0 ) + //FIXME: make sure we have enough force power + //FIXME: check to see if we can go any higher + //FIXME: limit to a certain number of these in a row? + //FIXME: maybe don't require a ucmd direction, just check all 4? + //FIXME: should stick to the wall for a second, then push off... + vec3_t checkDir, traceto, mins, maxs, fwdAngles; + trace_t trace; + vec3_t idealNormal; + int anim = -1; + + VectorSet(mins, pm->mins[0], pm->mins[1], 0.0f); + VectorSet(maxs, pm->maxs[0], pm->maxs[1], 24.0f); + VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0.0f); + + if ( pm->cmd.rightmove ) { - anim = BOTH_FORCEWALLREBOUND_RIGHT; - AngleVectors( fwdAngles, NULL, checkDir, NULL ); + if ( pm->cmd.rightmove > 0 ) + { + anim = BOTH_FORCEWALLREBOUND_RIGHT; + AngleVectors( fwdAngles, NULL, checkDir, NULL ); + } + else if ( pm->cmd.rightmove < 0 ) + { + anim = BOTH_FORCEWALLREBOUND_LEFT; + AngleVectors( fwdAngles, NULL, checkDir, NULL ); + VectorScale( checkDir, -1, checkDir ); + } } - else if ( pm->cmd.rightmove < 0 ) + else if ( pm->cmd.forwardmove > 0 ) { - anim = BOTH_FORCEWALLREBOUND_LEFT; - AngleVectors( fwdAngles, NULL, checkDir, NULL ); + anim = BOTH_FORCEWALLREBOUND_FORWARD; + AngleVectors( fwdAngles, checkDir, NULL, NULL ); + } + else if ( pm->cmd.forwardmove < 0 ) + { + anim = BOTH_FORCEWALLREBOUND_BACK; + AngleVectors( fwdAngles, checkDir, NULL, NULL ); VectorScale( checkDir, -1, checkDir ); } - } - else if ( pm->cmd.forwardmove > 0 ) - { - anim = BOTH_FORCEWALLREBOUND_FORWARD; - AngleVectors( fwdAngles, checkDir, NULL, NULL ); - } - else if ( pm->cmd.forwardmove < 0 ) - { - anim = BOTH_FORCEWALLREBOUND_BACK; - AngleVectors( fwdAngles, checkDir, NULL, NULL ); - VectorScale( checkDir, -1, checkDir ); - } - if ( anim != -1 ) - {//trace in the dir we're pushing in and see if there's a vertical wall there - bgEntity_t *traceEnt; + if ( anim != -1 ) + {//trace in the dir we're pushing in and see if there's a vertical wall there + bgEntity_t *traceEnt; - VectorMA( pm->ps->origin, 8, checkDir, traceto ); - pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID );//FIXME: clip brushes too? - VectorSubtract( pm->ps->origin, traceto, idealNormal ); - VectorNormalize( idealNormal ); - traceEnt = PM_BGEntForNum(trace.entityNum); - if ( trace.fraction < 1.0f - &&fabs(trace.plane.normal[2]) <= 0.2f/*MAX_WALL_GRAB_SLOPE*/ - &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) - {//there is a wall there - float dot = DotProduct( pm->ps->velocity, trace.plane.normal ); - if ( dot < 1.0f ) - {//can't be heading *away* from the wall! - //grab it! - PM_GrabWallForJump( anim ); + VectorMA( pm->ps->origin, 8, checkDir, traceto ); + pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, CONTENTS_SOLID );//FIXME: clip brushes too? + VectorSubtract( pm->ps->origin, traceto, idealNormal ); + VectorNormalize( idealNormal ); + traceEnt = PM_BGEntForNum(trace.entityNum); + if ( trace.fraction < 1.0f + &&fabs(trace.plane.normal[2]) <= 0.2f/*MAX_WALL_GRAB_SLOPE*/ + &&((trace.entityNums.solid!=SOLID_BMODEL)||DotProduct(trace.plane.normal,idealNormal)>0.7) ) + {//there is a wall there + float dot = DotProduct( pm->ps->velocity, trace.plane.normal ); + if ( dot < 1.0f ) + {//can't be heading *away* from the wall! + //grab it! + PM_GrabWallForJump( anim ); + } } } } @@ -3187,7 +3320,6 @@ static void PM_WalkMove( void ) { return; } - if (pm->ps->pm_type != PM_SPECTATOR) { if ( PM_CheckJump () ) { @@ -3489,6 +3621,22 @@ static int PM_TryRoll( void ) return 0; } + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber = BG_MySaber( pm->ps->clientNum, 0 ); + if ( saber + && (saber->saberFlags&SFL_NO_ROLLS) ) + { + return 0; + } + saber = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber + && (saber->saberFlags&SFL_NO_ROLLS) ) + { + return 0; + } + } + VectorSet(mins, pm->mins[0],pm->mins[1],pm->mins[2]+STEPSIZE); VectorSet(maxs, pm->maxs[0],pm->maxs[1],pm->ps->crouchheight); @@ -5171,7 +5319,7 @@ static void PM_Footsteps( void ) { bobmove = 0.5; // ducked characters bob much faster - if ( ( PM_RunningAnim( pm->ps->legsAnim ) || PM_CanRollFromSoulCal( pm->ps ) ) && + if ( ( (PM_RunningAnim( pm->ps->legsAnim )&&VectorLengthSquared(pm->ps->velocity)>=40000/*200*200*/) || PM_CanRollFromSoulCal( pm->ps ) ) && !BG_InRoll(pm->ps, pm->ps->legsAnim) ) {//roll! rolled = PM_TryRoll(); @@ -5422,7 +5570,11 @@ static void PM_Footsteps( void ) { } else { - if ( BG_SabersOff( pm->ps ) ) + if ( pm->ps->weapon == WP_MELEE ) + { + desiredAnim = BOTH_WALK1; + } + else if ( BG_SabersOff( pm->ps ) ) { desiredAnim = BOTH_WALK1; } @@ -5595,6 +5747,16 @@ static void PM_WaterEvents( void ) { // FIXME? } } +void BG_ClearRocketLock( playerState_t *ps ) +{ + if ( ps ) + { + ps->rocketLockIndex = ENTITYNUM_NONE; + ps->rocketLastValidTime = 0; + ps->rocketLockTime = -1; + ps->rocketTargetTime = 0; + } +} /* =============== @@ -5626,6 +5788,8 @@ void PM_BeginWeaponChange( int weapon ) { pm->ps->weaponTime += 200; //PM_StartTorsoAnim( TORSO_DROPWEAP1 ); PM_SetAnim(SETANIM_TORSO, TORSO_DROPWEAP1, SETANIM_FLAG_OVERRIDE, 0); + + BG_ClearRocketLock( pm->ps ); } @@ -5660,6 +5824,53 @@ void PM_FinishWeaponChange( void ) { pm->ps->weaponTime += 250; } +#ifdef QAGAME +extern void WP_GetVehicleCamPos( gentity_t *ent, gentity_t *pilot, vec3_t camPos ); +#else +extern void CG_GetVehicleCamPos( vec3_t camPos ); +#endif +#define MAX_XHAIR_DIST_ACCURACY 20000.0f +int BG_VehTraceFromCamPos( trace_t *camTrace, bgEntity_t *bgEnt, const vec3_t entOrg, const vec3_t shotStart, const vec3_t end, vec3_t newEnd, vec3_t shotDir, float bestDist ) +{ + //NOTE: this MUST stay up to date with the method used in CG_ScanForCrosshairEntity (where it checks the doExtraVehTraceFromViewPos bool) + vec3_t viewDir2End, extraEnd, camPos; + float minAutoAimDist; + +#ifdef QAGAME + WP_GetVehicleCamPos( (gentity_t *)bgEnt, (gentity_t *)bgEnt->m_pVehicle->m_pPilot, camPos ); +#else + CG_GetVehicleCamPos( camPos ); +#endif + + minAutoAimDist = Distance( entOrg, camPos ) + (bgEnt->m_pVehicle->m_pVehicleInfo->length/2.0f) + 200.0f; + + VectorCopy( end, newEnd ); + VectorSubtract( end, camPos, viewDir2End ); + VectorNormalize( viewDir2End ); + VectorMA( camPos, MAX_XHAIR_DIST_ACCURACY, viewDir2End, extraEnd ); + +#ifdef QAGAME + trap_Trace( camTrace, camPos, vec3_origin, vec3_origin, extraEnd, + bgEnt->s.number, CONTENTS_SOLID|CONTENTS_BODY ); +#else + pm->trace( camTrace, camPos, vec3_origin, vec3_origin, extraEnd, + bgEnt->s.number, CONTENTS_SOLID|CONTENTS_BODY ); +#endif + + if ( !camTrace->allsolid + && !camTrace->startsolid + && camTrace->fraction < 1.0f + && (camTrace->fraction*MAX_XHAIR_DIST_ACCURACY) > minAutoAimDist + && ((camTrace->fraction*MAX_XHAIR_DIST_ACCURACY)-Distance( entOrg, camPos )) < bestDist ) + {//this trace hit *something* that's closer than the thing the main trace hit, so use this result instead + VectorCopy( camTrace->endpos, newEnd ); + VectorSubtract( newEnd, shotStart, shotDir ); + VectorNormalize( shotDir ); + return (camTrace->entityNum+1); + } + return 0; +} + void PM_RocketLock( float lockDist, qboolean vehicleLock ) { // Not really a charge weapon, but we still want to delay fire until the button comes up so that we can @@ -5695,6 +5906,19 @@ void PM_RocketLock( float lockDist, qboolean vehicleLock ) pm->trace(&tr, muzzlePoint, NULL, NULL, ang, pm->ps->clientNum, MASK_PLAYERSOLID); + if ( vehicleLock ) + {//vehicles also do a trace from the camera point if the main one misses + if ( tr.fraction >= 1.0f ) + { + trace_t camTrace; + vec3_t newEnd, shotDir; + if ( BG_VehTraceFromCamPos( &camTrace, PM_BGEntForNum(pm->ps->clientNum), pm->ps->origin, muzzlePoint, tr.endpos, newEnd, shotDir, (tr.fraction*lockDist) ) ) + { + memcpy( &tr, &camTrace, sizeof(tr) ); + } + } + } + if (tr.fraction != 1 && tr.entityNum < ENTITYNUM_NONE && tr.entityNum != pm->ps->clientNum) { bgEntity_t *bgEnt = PM_BGEntForNum(tr.entityNum); @@ -7601,6 +7825,7 @@ void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) { // circularly clamp the angles with deltas for (i=0 ; i<3 ; i++) { temp = cmd->angles[i] + ps->delta_angles[i]; +#ifdef VEH_CONTROL_SCHEME_4 if ( pm_entVeh && pm_entVeh->m_pVehicle && pm_entVeh->m_pVehicle->m_pVehicleInfo @@ -7638,6 +7863,19 @@ void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) { } } } +#else //VEH_CONTROL_SCHEME_4 + if ( pm_entVeh && BG_UnrestrainedPitchRoll( ps, pm_entVeh->m_pVehicle ) ) + {//in a fighter + /* + if ( i == ROLL ) + {//get roll from vehicle + ps->viewangles[ROLL] = pm_entVeh->playerState->viewangles[ROLL];//->m_pVehicle->m_vOrientation[ROLL]; + continue; + + } + */ + } +#endif // VEH_CONTROL_SCHEME_4 else { if ( i == PITCH ) { @@ -8092,6 +8330,8 @@ qboolean PM_SaberInTransition( int move ); void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime) { + saberInfo_t *saber; + if (ps->clientNum >= MAX_CLIENTS) { bgEntity_t *bgEnt = pm_entSelf; @@ -8149,7 +8389,6 @@ void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime) ps->speed *= 0.5f; } - if (ps->fd.forceGripCripple) { if (ps->fd.forcePowersActive & (1 << FP_RAGE)) @@ -8255,6 +8494,19 @@ void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime) } //Automatically slow down as the roll ends. } + + saber = BG_MySaber( ps->clientNum, 0 ); + if ( saber + && saber->moveSpeedScale != 1.0f ) + { + ps->speed *= saber->moveSpeedScale; + } + saber = BG_MySaber( ps->clientNum, 1 ); + if ( saber + && saber->moveSpeedScale != 1.0f ) + { + ps->speed *= saber->moveSpeedScale; + } } qboolean BG_InRollAnim( entityState_t *cent ) @@ -9398,7 +9650,11 @@ void PM_VehicleViewAngles(playerState_t *ps, bgEntity_t *veh, usercmd_t *ucmd) if ( veh->m_pVehicle->m_pPilot && veh->m_pVehicle->m_pPilot->s.number == ps->clientNum ) {//set the pilot's viewangles to the vehicle's viewangles - if ( 1 )//!BG_UnrestrainedPitchRoll( ps, veh->m_pVehicle ) ) +#ifdef VEH_CONTROL_SCHEME_4 + if ( 1 ) +#else //VEH_CONTROL_SCHEME_4 + if ( !BG_UnrestrainedPitchRoll( ps, veh->m_pVehicle ) ) +#endif //VEH_CONTROL_SCHEME_4 {//only if not if doing special free-roll/pitch control setAngles = qtrue; clampMin[PITCH] = -pVeh->m_pVehicleInfo->lookPitch; @@ -9414,6 +9670,9 @@ void PM_VehicleViewAngles(playerState_t *ps, bgEntity_t *veh, usercmd_t *ucmd) { if ( veh->m_pVehicle->m_pVehicleInfo->turret[i].passengerNum == ps->generic1 ) {//this turret is my station + //nevermind, don't clamp + return; + /* setAngles = qtrue; clampMin[PITCH] = veh->m_pVehicle->m_pVehicleInfo->turret[i].pitchClampUp; clampMax[PITCH] = veh->m_pVehicle->m_pVehicleInfo->turret[i].pitchClampDown; @@ -9421,6 +9680,7 @@ void PM_VehicleViewAngles(playerState_t *ps, bgEntity_t *veh, usercmd_t *ucmd) clampMax[YAW] = veh->m_pVehicle->m_pVehicleInfo->turret[i].yawClampLeft; clampMin[ROLL] = clampMax[ROLL] = 0; break; + */ } } } @@ -9549,6 +9809,7 @@ void PM_VehForcedTurning(bgEntity_t *veh) yawD *= 0.6f*pml.frametime; pitchD *= 0.6f*pml.frametime; +#ifdef VEH_CONTROL_SCHEME_4 veh->playerState->viewangles[YAW] = AngleSubtract(veh->playerState->viewangles[YAW], yawD); veh->playerState->viewangles[PITCH] = AngleSubtract(veh->playerState->viewangles[PITCH], pitchD); pm->ps->viewangles[YAW] = veh->playerState->viewangles[YAW]; @@ -9558,8 +9819,17 @@ void PM_VehForcedTurning(bgEntity_t *veh) PM_SetPMViewAngle(veh->playerState, veh->playerState->viewangles, &pm->cmd); VectorClear( veh->m_pVehicle->m_vPrevRiderViewAngles ); veh->m_pVehicle->m_vPrevRiderViewAngles[YAW] = AngleNormalize180(pm->ps->viewangles[YAW]); + +#else //VEH_CONTROL_SCHEME_4 + + pm->ps->viewangles[YAW] = AngleSubtract(pm->ps->viewangles[YAW], yawD); + pm->ps->viewangles[PITCH] = AngleSubtract(pm->ps->viewangles[PITCH], pitchD); + + PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd); +#endif //VEH_CONTROL_SCHEME_4 } +#ifdef VEH_CONTROL_SCHEME_4 void PM_VehFaceHyperspacePoint(bgEntity_t *veh) { @@ -9641,6 +9911,85 @@ void PM_VehFaceHyperspacePoint(bgEntity_t *veh) } } +#else //VEH_CONTROL_SCHEME_4 + +void PM_VehFaceHyperspacePoint(bgEntity_t *veh) +{ + + if (!veh || !veh->m_pVehicle) + { + return; + } + else + { + float timeFrac = ((float)(pm->cmd.serverTime-veh->playerState->hyperSpaceTime))/HYPERSPACE_TIME; + float turnRate, aDelta; + int i, matchedAxes = 0; + + pm->cmd.upmove = veh->m_pVehicle->m_ucmd.upmove = 127; + pm->cmd.forwardmove = veh->m_pVehicle->m_ucmd.forwardmove = 0; + pm->cmd.rightmove = veh->m_pVehicle->m_ucmd.rightmove = 0; + + turnRate = (90.0f*pml.frametime); + for ( i = 0; i < 3; i++ ) + { + aDelta = AngleSubtract(veh->playerState->hyperSpaceAngles[i], veh->m_pVehicle->m_vOrientation[i]); + if ( fabs( aDelta ) < turnRate ) + {//all is good + pm->ps->viewangles[i] = veh->playerState->hyperSpaceAngles[i]; + matchedAxes++; + } + else + { + aDelta = AngleSubtract(veh->playerState->hyperSpaceAngles[i], pm->ps->viewangles[i]); + if ( fabs( aDelta ) < turnRate ) + { + pm->ps->viewangles[i] = veh->playerState->hyperSpaceAngles[i]; + } + else if ( aDelta > 0 ) + { + if ( i == YAW ) + { + pm->ps->viewangles[i] = AngleNormalize360( pm->ps->viewangles[i]+turnRate ); + } + else + { + pm->ps->viewangles[i] = AngleNormalize180( pm->ps->viewangles[i]+turnRate ); + } + } + else + { + if ( i == YAW ) + { + pm->ps->viewangles[i] = AngleNormalize360( pm->ps->viewangles[i]-turnRate ); + } + else + { + pm->ps->viewangles[i] = AngleNormalize180( pm->ps->viewangles[i]-turnRate ); + } + } + } + } + + PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd); + + if ( timeFrac < HYPERSPACE_TELEPORT_FRAC ) + {//haven't gone through yet + if ( matchedAxes < 3 ) + {//not facing the right dir yet + //keep hyperspace time up to date + veh->playerState->hyperSpaceTime += pml.msec; + } + else if ( !(veh->playerState->eFlags2&EF2_HYPERSPACE)) + {//flag us as ready to hyperspace! + veh->playerState->eFlags2 |= EF2_HYPERSPACE; + } + } + } +} + +#endif //VEH_CONTROL_SCHEME_4 + void BG_VehicleAdjustBBoxForOrientation( Vehicle_t *veh, vec3_t origin, vec3_t mins, vec3_t maxs, int clientNum, int tracemask, void (*localTrace)(trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentMask)) diff --git a/codemp/game/bg_public.h b/codemp/game/bg_public.h index af6a4cb..ad83dcd 100644 --- a/codemp/game/bg_public.h +++ b/codemp/game/bg_public.h @@ -17,7 +17,7 @@ #define MAX_SPAWN_VARS_CHARS 4096 -#define GAME_VERSION "basejk-1" +#define GAME_VERSION "basejka-1" #define STEPSIZE 18 @@ -252,7 +252,7 @@ extern qboolean BGPAFtextLoaded; extern animation_t bgHumanoidAnimations[MAX_TOTALANIMATIONS]; #include "../namespace_end.h" -#define MAX_ANIM_FILES 16 +#define MAX_ANIM_FILES 64 #define MAX_ANIM_EVENTS 300 typedef enum @@ -292,6 +292,14 @@ extern stringID_table_t footstepTypeTable[NUM_FOOTSTEP_TYPES+1]; #define AED_MOVE_FWD 0 #define AED_MOVE_RT 1 #define AED_MOVE_UP 2 +//indices for AEV_SABER_SWING data +#define AED_SABER_SWING_SABERNUM 0 +#define AED_SABER_SWING_TYPE 1 +#define AED_SABER_SWING_PROBABILITY 2 +//indices for AEV_SABER_SPIN data +#define AED_SABER_SPIN_SABERNUM 0 +#define AED_SABER_SPIN_TYPE 1 //0 = saberspinoff, 1 = saberspin, 2-4 = saberspin1-saberspin3 +#define AED_SABER_SPIN_PROBABILITY 2 typedef enum {//NOTENOTE: Be sure to update animEventTypeTable and ParseAnimationEvtBlock(...) if you change this enum list! @@ -302,6 +310,8 @@ typedef enum AEV_FIRE, //# animID AEV_FIRE framenum altfire chancetofire AEV_MOVE, //# animID AEV_MOVE framenum forwardpush rightpush uppush AEV_SOUNDCHAN, //# animID AEV_SOUNDCHAN framenum CHANNEL soundpath randomlow randomhi chancetoplay + AEV_SABER_SWING, //# animID AEV_SABER_SWING framenum CHANNEL randomlow randomhi chancetoplay + AEV_SABER_SPIN, //# animID AEV_SABER_SPIN framenum CHANNEL chancetoplay AEV_NUM_AEV } animEventType_t; @@ -1073,6 +1083,8 @@ typedef enum { MOD_CRUSH, MOD_TELEFRAG, MOD_FALLING, + MOD_COLLISION, + MOD_VEH_EXPLOSION, MOD_SUICIDE, MOD_TARGET_LASER, MOD_TRIGGER_HURT, @@ -1275,6 +1287,8 @@ typedef struct #endif typedef enum { + //totally invalid + LS_INVALID = -1, // Invalid, or saber not armed LS_NONE = 0, @@ -1593,7 +1607,7 @@ qboolean BG_InDeathAnim( int anim ); qboolean BG_InSaberLockOld( int anim ); qboolean BG_InSaberLock( int anim ); -void BG_SaberStartTransAnim( int saberAnimLevel, int anim, float *animSpeed, int broken ); +void BG_SaberStartTransAnim( int clientNum, int saberAnimLevel, int weapon, int anim, float *animSpeed, int broken ); void BG_ForcePowerDrain( playerState_t *ps, forcePowers_t forcePower, int overrideAmt ); diff --git a/codemp/game/bg_saber.c b/codemp/game/bg_saber.c index 3301739..2234045 100644 --- a/codemp/game/bg_saber.c +++ b/codemp/game/bg_saber.c @@ -5,6 +5,7 @@ #include "../namespace_begin.h" extern qboolean BG_SabersOff( playerState_t *ps ); +saberInfo_t *BG_MySaber( int clientNum, int saberNum ); int PM_irand_timesync(int val1, int val2) { @@ -590,6 +591,19 @@ saberMoveName_t PM_CheckStabDown( void ) vec3_t trmins = {-15, -15, -15}; vec3_t trmaxs = {15, 15, 15}; + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber1 + && (saber1->saberFlags&SFL_NO_STABDOWN) ) + { + return LS_NONE; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_STABDOWN) ) + { + return LS_NONE; + } + if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) {//sorry must be on ground! return LS_NONE; @@ -968,18 +982,21 @@ int PM_SaberLockWinAnim( qboolean victory, qboolean superBreak ) return winAnim; } -#ifdef QAGAME //including game headers on cgame is FORBIDDEN ^_^ - // Need to avoid nesting namespaces! #include "../namespace_end.h" +#ifdef QAGAME //including game headers on cgame is FORBIDDEN ^_^ #include "g_local.h" extern void NPC_SetAnim(gentity_t *ent, int setAnimParts, int anim, int setAnimFlags); extern gentity_t g_entities[]; -#include "../namespace_begin.h" +#elif defined CGAME + +#include "..\cgame\cg_local.h" //ahahahahhahahaha@$!$! #endif +#include "../namespace_begin.h" + int PM_SaberLockLoseAnim( playerState_t *genemy, qboolean victory, qboolean superBreak ) { int loseAnim = -1; @@ -1264,6 +1281,9 @@ void PM_SaberLockBreak( playerState_t *genemy, qboolean victory, int strength ) genemy->otherKiller = pm->ps->clientNum; genemy->otherKillerTime = pm->cmd.serverTime + 5000; genemy->otherKillerDebounceTime = pm->cmd.serverTime + 100; + //genemy->otherKillerMOD = MOD_UNKNOWN; + //genemy->otherKillerVehWeapon = 0; + //genemy->otherKillerWeaponType = WP_NONE; genemy->velocity[0] = oppDir[0]*(strength*40); genemy->velocity[1] = oppDir[1]*(strength*40); @@ -1641,6 +1661,37 @@ saberMoveName_t PM_SaberFlipOverAttackMove(void) // playerState_t *psData; // bgEntity_t *bgEnt; + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) lunge move + if ( saber1 + && saber1->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber1->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber1->jumpAtkFwdMove; + } + } + if ( saber2 + && saber2->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber2->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber2->jumpAtkFwdMove; + } + } + //no overrides, cancelled? + if ( saber1 + && saber1->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + if ( saber2 + && saber2->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + //just do it VectorCopy( pm->ps->viewangles, fwdAngles ); fwdAngles[PITCH] = fwdAngles[ROLL] = 0; AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); @@ -1703,6 +1754,37 @@ saberMoveName_t PM_SaberFlipOverAttackMove(void) int PM_SaberBackflipAttackMove( void ) { + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) lunge move + if ( saber1 + && saber1->jumpAtkBackMove != LS_INVALID ) + { + if ( saber1->jumpAtkBackMove != LS_NONE ) + { + return (saberMoveName_t)saber1->jumpAtkBackMove; + } + } + if ( saber2 + && saber2->jumpAtkBackMove != LS_INVALID ) + { + if ( saber2->jumpAtkBackMove != LS_NONE ) + { + return (saberMoveName_t)saber2->jumpAtkBackMove; + } + } + //no overrides, cancelled? + if ( saber1 + && saber1->jumpAtkBackMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + if ( saber2 + && saber2->jumpAtkBackMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + //just do it pm->cmd.upmove = 127; pm->ps->velocity[2] = 500; return LS_A_BACKFLIP_ATK; @@ -1750,24 +1832,152 @@ qboolean PM_SomeoneInFront(trace_t *tr) return qfalse; } -saberMoveName_t PM_SaberLungeAttackMove( void ) +saberMoveName_t PM_SaberLungeAttackMove( qboolean noSpecials ) { vec3_t fwdAngles, jumpFwd; + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) lunge move + if ( saber1 + && saber1->lungeAtkMove != LS_INVALID ) + { + if ( saber1->lungeAtkMove != LS_NONE ) + { + return (saberMoveName_t)saber1->lungeAtkMove; + } + } + if ( saber2 + && saber2->lungeAtkMove != LS_INVALID ) + { + if ( saber2->lungeAtkMove != LS_NONE ) + { + return (saberMoveName_t)saber2->lungeAtkMove; + } + } + //no overrides, cancelled? + if ( saber1 + && saber1->lungeAtkMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + if ( saber2 + && saber2->lungeAtkMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + //just do it + if (pm->ps->fd.saberAnimLevel == SS_FAST) + { + VectorCopy( pm->ps->viewangles, fwdAngles ); + fwdAngles[PITCH] = fwdAngles[ROLL] = 0; + //do the lunge + AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); + VectorScale( jumpFwd, 150, pm->ps->velocity ); + PM_AddEvent( EV_JUMP ); - VectorCopy( pm->ps->viewangles, fwdAngles ); - fwdAngles[PITCH] = fwdAngles[ROLL] = 0; - //do the lunge - AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); - VectorScale( jumpFwd, 150, pm->ps->velocity ); - PM_AddEvent( EV_JUMP ); + return LS_A_LUNGE; + } + else if ( !noSpecials && pm->ps->fd.saberAnimLevel == SS_STAFF) + { + return LS_SPINATTACK; + } + else if ( !noSpecials ) + { + return LS_SPINATTACK_DUAL; + } + return LS_A_T2B; +} - return LS_A_LUNGE; +saberMoveName_t PM_SaberJumpAttackMove2( void ) +{ + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) lunge move + if ( saber1 + && saber1->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber1->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber1->jumpAtkFwdMove; + } + } + if ( saber2 + && saber2->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber2->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber2->jumpAtkFwdMove; + } + } + //no overrides, cancelled? + if ( saber1 + && saber1->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + if ( saber2 + && saber2->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + //just do it + if (pm->ps->fd.saberAnimLevel == SS_DUAL) + { + return PM_SaberDualJumpAttackMove(); + } + else + { + //rwwFIXMEFIXME I don't like randomness for this sort of thing, gives people reason to + //complain combat is unpredictable. Maybe do something more clever to determine + //if we should do a left or right? + /* + if (PM_irand_timesync(0, 1)) + { + newmove = LS_JUMPATTACK_STAFF_LEFT; + } + else + */ + { + return LS_JUMPATTACK_STAFF_RIGHT; + } + } + return LS_A_T2B; } saberMoveName_t PM_SaberJumpAttackMove( void ) { vec3_t fwdAngles, jumpFwd; - + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) lunge move + if ( saber1 + && saber1->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber1->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber1->jumpAtkFwdMove; + } + } + if ( saber2 + && saber2->jumpAtkFwdMove != LS_INVALID ) + { + if ( saber2->jumpAtkFwdMove != LS_NONE ) + { + return (saberMoveName_t)saber2->jumpAtkFwdMove; + } + } + //no overrides, cancelled? + if ( saber1 + && saber1->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + if ( saber2 + && saber2->jumpAtkFwdMove == LS_NONE ) + { + return LS_A_T2B;//LS_NONE; + } + //just do it VectorCopy( pm->ps->viewangles, fwdAngles ); fwdAngles[PITCH] = fwdAngles[ROLL] = 0; AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); @@ -1822,6 +2032,21 @@ float PM_WalkableGroundDistance(void) qboolean BG_SaberInTransitionAny( int move ); static qboolean PM_CanDoDualDoubleAttacks(void) { + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber = BG_MySaber( pm->ps->clientNum, 0 ); + if ( saber + && (saber->saberFlags&SFL_NO_MIRROR_ATTACKS) ) + { + return qfalse; + } + saber = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber + && (saber->saberFlags&SFL_NO_MIRROR_ATTACKS) ) + { + return qfalse; + } + } if (BG_SaberInSpecialAttack(pm->ps->torsoAnim) || BG_SaberInSpecialAttack(pm->ps->legsAnim)) { @@ -2017,45 +2242,118 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) { saberMoveName_t newmove = LS_NONE; qboolean noSpecials = PM_InSecondaryStyle(); + qboolean allowCartwheels = qtrue; + saberMoveName_t overrideJumpRightAttackMove = LS_INVALID; + saberMoveName_t overrideJumpLeftAttackMove = LS_INVALID; + + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + + if ( saber1 + && saber1->jumpAtkRightMove != LS_INVALID ) + { + if ( saber1->jumpAtkRightMove != LS_NONE ) + {//actually overriding + overrideJumpRightAttackMove = (saberMoveName_t)saber1->jumpAtkRightMove; + } + else if ( saber2 + && saber2->jumpAtkRightMove > LS_NONE ) + {//would be cancelling it, but check the second saber, too + overrideJumpRightAttackMove = (saberMoveName_t)saber2->jumpAtkRightMove; + } + else + {//nope, just cancel it + overrideJumpRightAttackMove = LS_NONE; + } + } + else if ( saber2 + && saber2->jumpAtkRightMove != LS_INVALID ) + {//first saber not overridden, check second + overrideJumpRightAttackMove = (saberMoveName_t)saber2->jumpAtkRightMove; + } + + if ( saber1 + && saber1->jumpAtkLeftMove != LS_INVALID ) + { + if ( saber1->jumpAtkLeftMove != LS_NONE ) + {//actually overriding + overrideJumpLeftAttackMove = (saberMoveName_t)saber1->jumpAtkLeftMove; + } + else if ( saber2 + && saber2->jumpAtkLeftMove > LS_NONE ) + {//would be cancelling it, but check the second saber, too + overrideJumpLeftAttackMove = (saberMoveName_t)saber2->jumpAtkLeftMove; + } + else + {//nope, just cancel it + overrideJumpLeftAttackMove = LS_NONE; + } + } + else if ( saber2 + && saber2->jumpAtkLeftMove != LS_INVALID ) + {//first saber not overridden, check second + overrideJumpLeftAttackMove = (saberMoveName_t)saber1->jumpAtkLeftMove; + } + + if ( saber1 + && (saber1->saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartwheels = qfalse; + } + if ( saber2 + && (saber2->saberFlags&SFL_NO_CARTWHEELS) ) + { + allowCartwheels = qfalse; + } + } if ( pm->cmd.rightmove > 0 ) {//moving right if ( !noSpecials + && overrideJumpRightAttackMove != LS_NONE && pm->ps->velocity[2] > 20.0f //pm->ps->groundEntityNum != ENTITYNUM_NONE//on ground && (pm->cmd.buttons&BUTTON_ATTACK)//hitting attack && PM_GroundDistance() < 70.0f //not too high above ground && ( pm->cmd.upmove > 0 || (pm->ps->pm_flags & PMF_JUMP_HELD) )//focus-holding player && BG_EnoughForcePowerForMove( SABER_ALT_ATTACK_POWER_LR ) )//have enough power {//cartwheel right - vec3_t right, fwdAngles; - - VectorSet(fwdAngles, 0.0f, pm->ps->viewangles[YAW], 0.0f); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_LR); - - AngleVectors( fwdAngles, NULL, right, NULL ); - pm->ps->velocity[0] = pm->ps->velocity[1] = 0.0f; - VectorMA( pm->ps->velocity, 190.0f, right, pm->ps->velocity ); - if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) - { - newmove = LS_BUTTERFLY_RIGHT; - pm->ps->velocity[2] = 350.0f; + if ( overrideJumpRightAttackMove != LS_INVALID ) + {//overridden with another move + return overrideJumpRightAttackMove; } else { - //PM_SetJumped( JUMP_VELOCITY, qtrue ); - PM_AddEvent( EV_JUMP ); - pm->ps->velocity[2] = 300.0f; + vec3_t right, fwdAngles; - //if ( !Q_irand( 0, 1 ) ) - //if (PM_GroundDistance() >= 25.0f) - if (1) + VectorSet(fwdAngles, 0.0f, pm->ps->viewangles[YAW], 0.0f); + + AngleVectors( fwdAngles, NULL, right, NULL ); + pm->ps->velocity[0] = pm->ps->velocity[1] = 0.0f; + VectorMA( pm->ps->velocity, 190.0f, right, pm->ps->velocity ); + if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) { - newmove = LS_JUMPATTACK_ARIAL_RIGHT; + newmove = LS_BUTTERFLY_RIGHT; + pm->ps->velocity[2] = 350.0f; } - else + else if ( allowCartwheels ) { - newmove = LS_JUMPATTACK_CART_RIGHT; + //PM_SetJumped( JUMP_VELOCITY, qtrue ); + PM_AddEvent( EV_JUMP ); + pm->ps->velocity[2] = 300.0f; + + //if ( !Q_irand( 0, 1 ) ) + //if (PM_GroundDistance() >= 25.0f) + if (1) + { + newmove = LS_JUMPATTACK_ARIAL_RIGHT; + } + else + { + newmove = LS_JUMPATTACK_CART_RIGHT; + } } } } @@ -2075,41 +2373,48 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) else if ( pm->cmd.rightmove < 0 ) {//moving left if ( !noSpecials + && overrideJumpLeftAttackMove != LS_NONE && pm->ps->velocity[2] > 20.0f //pm->ps->groundEntityNum != ENTITYNUM_NONE//on ground && (pm->cmd.buttons&BUTTON_ATTACK)//hitting attack && PM_GroundDistance() < 70.0f //not too high above ground && ( pm->cmd.upmove > 0 || (pm->ps->pm_flags & PMF_JUMP_HELD) )//focus-holding player && BG_EnoughForcePowerForMove( SABER_ALT_ATTACK_POWER_LR ) )//have enough power {//cartwheel left - vec3_t right, fwdAngles; - - VectorSet(fwdAngles, 0.0f, pm->ps->viewangles[YAW], 0.0f); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_LR); - AngleVectors( fwdAngles, NULL, right, NULL ); - pm->ps->velocity[0] = pm->ps->velocity[1] = 0.0f; - VectorMA( pm->ps->velocity, -190.0f, right, pm->ps->velocity ); - if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) - { - newmove = LS_BUTTERFLY_LEFT; - pm->ps->velocity[2] = 250.0f; + if ( overrideJumpLeftAttackMove != LS_INVALID ) + {//overridden with another move + return overrideJumpLeftAttackMove; } else { - //PM_SetJumped( JUMP_VELOCITY, qtrue ); - PM_AddEvent( EV_JUMP ); - pm->ps->velocity[2] = 350.0f; + vec3_t right, fwdAngles; - //if ( !Q_irand( 0, 1 ) ) - //if (PM_GroundDistance() >= 25.0f) - if (1) + VectorSet(fwdAngles, 0.0f, pm->ps->viewangles[YAW], 0.0f); + AngleVectors( fwdAngles, NULL, right, NULL ); + pm->ps->velocity[0] = pm->ps->velocity[1] = 0.0f; + VectorMA( pm->ps->velocity, -190.0f, right, pm->ps->velocity ); + if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) { - newmove = LS_JUMPATTACK_ARIAL_LEFT; + newmove = LS_BUTTERFLY_LEFT; + pm->ps->velocity[2] = 250.0f; } - else + else if ( allowCartwheels ) { - newmove = LS_JUMPATTACK_CART_LEFT; + //PM_SetJumped( JUMP_VELOCITY, qtrue ); + PM_AddEvent( EV_JUMP ); + pm->ps->velocity[2] = 350.0f; + + //if ( !Q_irand( 0, 1 ) ) + //if (PM_GroundDistance() >= 25.0f) + if (1) + { + newmove = LS_JUMPATTACK_ARIAL_LEFT; + } + else + { + newmove = LS_JUMPATTACK_CART_LEFT; + } } } } @@ -2144,26 +2449,11 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) (pm->cmd.buttons & BUTTON_ATTACK)&& BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER_FB) ) { //DUAL/STAFF JUMP ATTACK - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); - if (pm->ps->fd.saberAnimLevel == SS_DUAL) + newmove = PM_SaberJumpAttackMove2(); + if ( newmove != LS_A_T2B + && newmove != LS_NONE ) { - newmove = PM_SaberDualJumpAttackMove(); - } - else - { - //rwwFIXMEFIXME I don't like randomness for this sort of thing, gives people reason to - //complain combat is unpredictable. Maybe do something more clever to determine - //if we should do a left or right? - /* - if (PM_irand_timesync(0, 1)) - { - newmove = LS_JUMPATTACK_STAFF_LEFT; - } - else - */ - { - newmove = LS_JUMPATTACK_STAFF_RIGHT; - } + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); } } else if (!noSpecials&& @@ -2179,7 +2469,11 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) //if (PM_SomeoneInFront(&tr)) { newmove = PM_SaberFlipOverAttackMove(); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); + if ( newmove != LS_A_T2B + && newmove != LS_NONE ) + { + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); + } } } else if (!noSpecials&& @@ -2195,7 +2489,11 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) //if (PM_SomeoneInFront(&tr)) { newmove = PM_SaberJumpAttackMove(); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); + if ( newmove != LS_A_T2B + && newmove != LS_NONE ) + { + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); + } } } else if ((pm->ps->fd.saberAnimLevel == SS_FAST || pm->ps->fd.saberAnimLevel == SS_DUAL || pm->ps->fd.saberAnimLevel == SS_STAFF) && @@ -2205,25 +2503,18 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) !BG_SaberInSpecialAttack(pm->ps->torsoAnim)&& BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER_FB)) { //LUNGE (weak) - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); - if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_1) + newmove = PM_SaberLungeAttackMove( noSpecials ); + if ( newmove != LS_A_T2B + && newmove != LS_NONE ) { - newmove = PM_SaberLungeAttackMove(); - } - else if ( !noSpecials && pm->ps->fd.saberAnimLevel == SS_STAFF) - { - newmove = LS_SPINATTACK; - } - else if ( !noSpecials ) - { - newmove = LS_SPINATTACK_DUAL; + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); } } else if ( !noSpecials ) { saberMoveName_t stabDownMove = PM_CheckStabDown(); if (stabDownMove != LS_NONE - && BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER_FB)) + && BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER_FB) ) { newmove = stabDownMove; BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); @@ -2421,6 +2712,7 @@ qboolean PM_CanDoKata( void ) { return qfalse; } + if ( !pm->ps->saberInFlight//not throwing saber && PM_SaberMoveOkayForKata() && !BG_SaberInKata(pm->ps->saberMove) @@ -2438,6 +2730,18 @@ qboolean PM_CanDoKata( void ) && pm->cmd.upmove <= 0//not jumping...? && BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER) )// have enough power {//FIXME: check rage, etc... + saberInfo_t *saber = BG_MySaber( pm->ps->clientNum, 0 ); + if ( saber + && saber->kataMove == LS_NONE ) + {//kata move has been overridden in a way that should stop you from doing it at all + return qfalse; + } + saber = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber + && saber->kataMove == LS_NONE ) + {//kata move has been overridden in a way that should stop you from doing it at all + return qfalse; + } return qtrue; } return qfalse; @@ -2445,6 +2749,21 @@ qboolean PM_CanDoKata( void ) qboolean PM_CheckAltKickAttack( void ) { + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber = BG_MySaber( pm->ps->clientNum, 0 ); + if ( saber + && (saber->saberFlags&SFL_NO_KICKS) ) + { + return qfalse; + } + saber = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber + && (saber->saberFlags&SFL_NO_KICKS) ) + { + return qfalse; + } + } if ( (pm->cmd.buttons&BUTTON_ALT_ATTACK) //&& (!(pm->ps->pm_flags&PMF_ALT_ATTACK_HELD)||PM_SaberInReturn(pm->ps->saberMove)) && (!BG_FlippingAnim(pm->ps->legsAnim)||pm->ps->legsTimer<=250) @@ -2480,6 +2799,25 @@ qboolean PM_SaberPowerCheck(void) return qfalse; } +qboolean PM_CanDoRollStab( void ) +{ + if ( pm->ps->weapon == WP_SABER ) + { + saberInfo_t *saber = BG_MySaber( pm->ps->clientNum, 0 ); + if ( saber + && (saber->saberFlags&SFL_NO_ROLL_STAB) ) + { + return qfalse; + } + saber = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber + && (saber->saberFlags&SFL_NO_ROLL_STAB) ) + { + return qfalse; + } + } + return qtrue; +} /* ================= PM_WeaponLightsaber @@ -2520,14 +2858,17 @@ void PM_WeaponLightsaber(void) { if ( BG_EnoughForcePowerForMove(SABER_ALT_ATTACK_POWER_FB) && !pm->ps->saberInFlight ) { - //make sure the saber is on for this move! - if ( pm->ps->saberHolstered == 2 ) - {//all the way off - pm->ps->saberHolstered = 0; - PM_AddEvent(EV_SABER_UNHOLSTER); + if ( PM_CanDoRollStab() ) + { + //make sure the saber is on for this move! + if ( pm->ps->saberHolstered == 2 ) + {//all the way off + pm->ps->saberHolstered = 0; + PM_AddEvent(EV_SABER_UNHOLSTER); + } + PM_SetSaberMove( LS_ROLL_STAB ); + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); } - PM_SetSaberMove( LS_ROLL_STAB ); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER_FB); } } } @@ -2999,31 +3340,79 @@ weapChecks: if ( PM_CanDoKata() ) { - //FIXME: make sure to turn on saber(s)! - switch ( pm->ps->fd.saberAnimLevel ) + saberMoveName_t overrideMove = LS_INVALID; + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + //see if we have an overridden (or cancelled) kata move + if ( saber1 && saber1->kataMove != LS_INVALID ) { - case SS_FAST: - case SS_TAVION: - PM_SetSaberMove( LS_A1_SPECIAL ); - break; - case SS_MEDIUM: - PM_SetSaberMove( LS_A2_SPECIAL ); - break; - case SS_STRONG: - case SS_DESANN: - PM_SetSaberMove( LS_A3_SPECIAL ); - break; - case SS_DUAL: - PM_SetSaberMove( LS_DUAL_SPIN_PROTECT );//PM_CheckDualSpinProtect(); - break; - case SS_STAFF: - PM_SetSaberMove( LS_STAFF_SOULCAL ); - break; + if ( saber1->kataMove != LS_NONE ) + { + overrideMove = (saberMoveName_t)saber1->kataMove; + } + } + if ( overrideMove == LS_INVALID ) + {//not overridden by first saber, check second + if ( saber2 + && saber2->kataMove != LS_INVALID ) + { + if ( saber2->kataMove != LS_NONE ) + { + overrideMove = (saberMoveName_t)saber2->kataMove; + } + } + } + //no overrides, cancelled? + if ( overrideMove == LS_INVALID ) + { + if ( saber2 + && saber2->kataMove == LS_NONE ) + { + overrideMove = LS_NONE; + } + else if ( saber2 + && saber2->kataMove == LS_NONE ) + { + overrideMove = LS_NONE; + } + } + if ( overrideMove == LS_INVALID ) + {//not overridden + //FIXME: make sure to turn on saber(s)! + switch ( pm->ps->fd.saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + PM_SetSaberMove( LS_A1_SPECIAL ); + break; + case SS_MEDIUM: + PM_SetSaberMove( LS_A2_SPECIAL ); + break; + case SS_STRONG: + case SS_DESANN: + PM_SetSaberMove( LS_A3_SPECIAL ); + break; + case SS_DUAL: + PM_SetSaberMove( LS_DUAL_SPIN_PROTECT );//PM_CheckDualSpinProtect(); + break; + case SS_STAFF: + PM_SetSaberMove( LS_STAFF_SOULCAL ); + break; + } + pm->ps->weaponstate = WEAPON_FIRING; + //G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER );//FP_SPEED, SINGLE_SPECIAL_POWER ); + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER); + } + else if ( overrideMove != LS_NONE ) + { + PM_SetSaberMove( overrideMove ); + pm->ps->weaponstate = WEAPON_FIRING; + BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER); + } + if ( overrideMove != LS_NONE ) + {//not cancelled + return; } - pm->ps->weaponstate = WEAPON_FIRING; - //G_DrainPowerForSpecialMove( pm->gent, FP_SABER_OFFENSE, SABER_ALT_ATTACK_POWER );//FP_SPEED, SINGLE_SPECIAL_POWER ); - BG_ForcePowerDrain(pm->ps, FP_GRIP, SABER_ALT_ATTACK_POWER); - return; } if ( pm->ps->weaponTime > 0 ) @@ -3432,7 +3821,19 @@ void PM_SetSaberMove(short newMove) if ( newMove == LS_DRAW ) { - if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber1 + && saber1->drawAnim != -1 ) + { + anim = saber1->drawAnim; + } + else if ( saber2 + && saber2->drawAnim != -1 ) + { + anim = saber2->drawAnim; + } + else if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) { anim = BOTH_S1_S7; } @@ -3443,7 +3844,19 @@ void PM_SetSaberMove(short newMove) } else if ( newMove == LS_PUTAWAY ) { - if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) + saberInfo_t *saber1 = BG_MySaber( pm->ps->clientNum, 0 ); + saberInfo_t *saber2 = BG_MySaber( pm->ps->clientNum, 1 ); + if ( saber1 + && saber1->putawayAnim != -1 ) + { + anim = saber1->putawayAnim; + } + else if ( saber2 + && saber2->putawayAnim != -1 ) + { + anim = saber2->putawayAnim; + } + else if ( pm->ps->fd.saberAnimLevel == SS_STAFF ) { anim = BOTH_S7_S1; } @@ -3684,4 +4097,47 @@ void PM_SetSaberMove(short newMove) } } +saberInfo_t *BG_MySaber( int clientNum, int saberNum ) +{ + //returns a pointer to the requested saberNum +#ifdef QAGAME + gentity_t *ent = &g_entities[clientNum]; + if ( ent->inuse && ent->client ) + { + if ( !ent->client->saber[saberNum].model + || !ent->client->saber[saberNum].model[0] ) + { //don't have saber anymore! + return NULL; + } + return &ent->client->saber[saberNum]; + } +#elif defined CGAME + clientInfo_t *ci = NULL; + if (clientNum < MAX_CLIENTS) + { + ci = &cgs.clientinfo[clientNum]; + } + else + { + centity_t *cent = &cg_entities[clientNum]; + if (cent->npcClient) + { + ci = cent->npcClient; + } + } + if ( ci + && ci->infoValid ) + { + if ( !ci->saber[saberNum].model + || !ci->saber[saberNum].model[0] ) + { //don't have sabers anymore! + return NULL; + } + return &ci->saber[saberNum]; + } +#endif + + return NULL; +} + #include "../namespace_end.h" diff --git a/codemp/game/bg_saberLoad.c b/codemp/game/bg_saberLoad.c index 1a42396..878c80e 100644 --- a/codemp/game/bg_saberLoad.c +++ b/codemp/game/bg_saberLoad.c @@ -4,6 +4,8 @@ #include "bg_local.h" #include "w_saber.h" +extern stringID_table_t animTable [MAX_ANIMATIONS+1]; + //Could use strap stuff but I don't particularly care at the moment anyway. #include "../namespace_begin.h" extern int trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode ); @@ -20,6 +22,8 @@ extern int G_SoundIndex( const char *name ); #elif defined CGAME #include "../namespace_begin.h" sfxHandle_t trap_S_RegisterSound( const char *sample); +qhandle_t trap_R_RegisterShader( const char *name ); // returns all white if not found +int trap_FX_RegisterEffect(const char *file); #include "../namespace_end.h" #endif @@ -36,7 +40,7 @@ int BG_SoundIndex(char *sound) extern stringID_table_t FPTable[]; -#define MAX_SABER_DATA_SIZE 0x10000 +#define MAX_SABER_DATA_SIZE 0x80000 static char SaberParms[MAX_SABER_DATA_SIZE]; stringID_table_t SaberTable[] = @@ -56,6 +60,71 @@ stringID_table_t SaberTable[] = "", -1 }; +stringID_table_t SaberMoveTable[] = +{ + ENUM2STRING(LS_NONE), + // Attacks + ENUM2STRING(LS_A_TL2BR), + ENUM2STRING(LS_A_L2R), + ENUM2STRING(LS_A_BL2TR), + ENUM2STRING(LS_A_BR2TL), + ENUM2STRING(LS_A_R2L), + ENUM2STRING(LS_A_TR2BL), + ENUM2STRING(LS_A_T2B), + ENUM2STRING(LS_A_BACKSTAB), + ENUM2STRING(LS_A_BACK), + ENUM2STRING(LS_A_BACK_CR), + ENUM2STRING(LS_ROLL_STAB), + ENUM2STRING(LS_A_LUNGE), + ENUM2STRING(LS_A_JUMP_T__B_), + ENUM2STRING(LS_A_FLIP_STAB), + ENUM2STRING(LS_A_FLIP_SLASH), + ENUM2STRING(LS_JUMPATTACK_DUAL), + ENUM2STRING(LS_JUMPATTACK_ARIAL_LEFT), + ENUM2STRING(LS_JUMPATTACK_ARIAL_RIGHT), + ENUM2STRING(LS_JUMPATTACK_CART_LEFT), + ENUM2STRING(LS_JUMPATTACK_CART_RIGHT), + ENUM2STRING(LS_JUMPATTACK_STAFF_LEFT), + ENUM2STRING(LS_JUMPATTACK_STAFF_RIGHT), + ENUM2STRING(LS_BUTTERFLY_LEFT), + ENUM2STRING(LS_BUTTERFLY_RIGHT), + ENUM2STRING(LS_A_BACKFLIP_ATK), + ENUM2STRING(LS_SPINATTACK_DUAL), + ENUM2STRING(LS_SPINATTACK), + ENUM2STRING(LS_LEAP_ATTACK), + ENUM2STRING(LS_SWOOP_ATTACK_RIGHT), + ENUM2STRING(LS_SWOOP_ATTACK_LEFT), + ENUM2STRING(LS_TAUNTAUN_ATTACK_RIGHT), + ENUM2STRING(LS_TAUNTAUN_ATTACK_LEFT), + ENUM2STRING(LS_KICK_F), + ENUM2STRING(LS_KICK_B), + ENUM2STRING(LS_KICK_R), + ENUM2STRING(LS_KICK_L), + ENUM2STRING(LS_KICK_S), + ENUM2STRING(LS_KICK_BF), + ENUM2STRING(LS_KICK_RL), + ENUM2STRING(LS_KICK_F_AIR), + ENUM2STRING(LS_KICK_B_AIR), + ENUM2STRING(LS_KICK_R_AIR), + ENUM2STRING(LS_KICK_L_AIR), + ENUM2STRING(LS_STABDOWN), + ENUM2STRING(LS_STABDOWN_STAFF), + ENUM2STRING(LS_STABDOWN_DUAL), + ENUM2STRING(LS_DUAL_SPIN_PROTECT), + ENUM2STRING(LS_STAFF_SOULCAL), + ENUM2STRING(LS_A1_SPECIAL), + ENUM2STRING(LS_A2_SPECIAL), + ENUM2STRING(LS_A3_SPECIAL), + ENUM2STRING(LS_UPSIDE_DOWN_ATTACK), + ENUM2STRING(LS_PULL_ATTACK_STAB), + ENUM2STRING(LS_PULL_ATTACK_SWING), + ENUM2STRING(LS_SPINATTACK_ALORA), + ENUM2STRING(LS_DUAL_FB), + ENUM2STRING(LS_DUAL_LR), + ENUM2STRING(LS_HILT_BASH), + "", -1 +}; + //Also used in npc code qboolean BG_ParseLiteral( const char **data, const char *string ) { @@ -143,6 +212,279 @@ saber_styles_t TranslateSaberStyle( const char *name ) return SS_NONE; } +qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ) +{ + if ( saber ) + { + if ( saber->bladeStyle2Start > 0 ) + { + if ( bladeNum >= saber->bladeStyle2Start ) + { + return qtrue; + } + } + } + return qfalse; +} + +qboolean WP_SaberBladeDoTransitionDamage( saberInfo_t *saber, int bladeNum ) +{ + if ( !WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && (saber->saberFlags2&SFL2_TRANSITION_DAMAGE) ) + {//use first blade style for this blade + return qtrue; + } + else if ( WP_SaberBladeUseSecondBladeStyle( saber, bladeNum ) + && (saber->saberFlags2&SFL2_TRANSITION_DAMAGE2) ) + {//use second blade style for this blade + return qtrue; + } + return qfalse; +} + +qboolean WP_UseFirstValidSaberStyle( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int *saberAnimLevel ) +{ + qboolean styleInvalid = qfalse; + qboolean saber1Active; + qboolean saber2Active; + qboolean dualSabers = qfalse; + int validStyles = 0, styleNum; + + if ( saber2 && saber2->model && saber2->model[0] ) + { + dualSabers = qtrue; + } + + if ( dualSabers ) + {//dual + if ( saberHolstered > 1 ) + { + saber1Active = saber2Active = qfalse; + } + else if ( saberHolstered > 0 ) + { + saber1Active = qtrue; + saber2Active = qfalse; + } + else + { + saber1Active = saber2Active = qtrue; + } + } + else + { + saber2Active = qfalse; + if ( !saber1 + || !saber1->model + || !saber1->model[0] ) + { + saber1Active = qfalse; + } + else if ( saber1->numBlades > 1 ) + {//staff + if ( saberHolstered > 1 ) + { + saber1Active = qfalse; + } + else + { + saber1Active = qtrue; + } + } + else + {//single + if ( saberHolstered ) + { + saber1Active = qfalse; + } + else + { + saber1Active = qtrue; + } + } + } + + //initially, all styles are valid + for ( styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + { + validStyles |= (1<model + && saber1->model[0] + && saber1->stylesForbidden ) + { + if ( (saber1->stylesForbidden&(1<<*saberAnimLevel)) ) + {//not a valid style for first saber! + styleInvalid = qtrue; + validStyles &= ~saber1->stylesForbidden; + } + } + if ( dualSabers ) + {//check second saber, too + if ( saber2Active + && saber2->stylesForbidden ) + { + if ( (saber2->stylesForbidden&(1<<*saberAnimLevel)) ) + {//not a valid style for second saber! + styleInvalid = qtrue; + //only the ones both sabers allow is valid + validStyles &= ~saber2->stylesForbidden; + } + } + } + if ( styleInvalid && validStyles ) + {//using an invalid style and have at least one valid style to use, so switch to it + int styleNum; + for ( styleNum = SS_FAST; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + { + if ( (validStyles&(1<model && saber2->model[0] ) + { + dualSabers = qtrue; + } + + if ( dualSabers ) + {//dual + if ( saberHolstered > 1 ) + { + saber1Active = saber2Active = qfalse; + } + else if ( saberHolstered > 0 ) + { + saber1Active = qtrue; + saber2Active = qfalse; + } + else + { + saber1Active = saber2Active = qtrue; + } + } + else + { + saber2Active = qfalse; + if ( !saber1 + || !saber1->model + || !saber1->model[0] ) + { + saber1Active = qfalse; + } + else if ( saber1->numBlades > 1 ) + {//staff + if ( saberHolstered > 1 ) + { + saber1Active = qfalse; + } + else + { + saber1Active = qtrue; + } + } + else + {//single + if ( saberHolstered ) + { + saber1Active = qfalse; + } + else + { + saber1Active = qtrue; + } + } + } + + if ( saber1Active + && saber1 + && saber1->model + && saber1->model[0] + && saber1->stylesForbidden ) + { + if ( (saber1->stylesForbidden&(1<model + && saber2->model[0] ) + { + if ( saber2->stylesForbidden ) + {//check second saber, too + if ( (saber2->stylesForbidden&(1<model + && saber1->model[0] + && (saber1->stylesLearned&(1<stylesLearned&(1<bladeStyle2Start > 0 + && saber->numBlades > saber->bladeStyle2Start ) + { + if ( (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) + && (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + {//all blades are always on + return qfalse; + } + } + else + { + if ( (saber->saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//all blades are always on + return qfalse; + } + } + //you can turn some off + return qtrue; +} + void WP_SaberSetDefaults( saberInfo_t *saber ) { int i; @@ -164,23 +506,110 @@ void WP_SaberSetDefaults( saberInfo_t *saber ) saber->soundOff = BG_SoundIndex( "sound/weapons/saber/enemy_saber_off.wav" ); saber->numBlades = 1; saber->type = SABER_SINGLE; - saber->style = SS_NONE; + saber->stylesLearned = 0; + saber->stylesForbidden = 0;//allow all styles saber->maxChain = 0;//0 = use default behavior - saber->lockable = qtrue; - saber->throwable = qtrue; - saber->disarmable = qtrue; - saber->activeBlocking = qtrue; - saber->twoHanded = qfalse; saber->forceRestrictions = 0; saber->lockBonus = 0; saber->parryBonus = 0; saber->breakParryBonus = 0; + saber->breakParryBonus2 = 0; saber->disarmBonus = 0; + saber->disarmBonus2 = 0; saber->singleBladeStyle = SS_NONE;//makes it so that you use a different style if you only have the first blade active - saber->singleBladeThrowable = qfalse;//makes it so that you can throw this saber if only the first blade is on // saber->brokenSaber1 = NULL;//if saber is actually hit by another saber, it can be cut in half/broken and will be replaced with this saber in your right hand // saber->brokenSaber2 = NULL;//if saber is actually hit by another saber, it can be cut in half/broken and will be replaced with this saber in your left hand - saber->returnDamage = qfalse;//when returning from a saber throw, it keeps spinning and doing damage +//===NEW======================================================================================== + //done in cgame (client-side code) + saber->saberFlags = 0; //see all the SFL_ flags + saber->saberFlags2 = 0; //see all the SFL2_ flags + + saber->spinSound = 0; //none - if set, plays this sound as it spins when thrown + saber->swingSound[0] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + saber->swingSound[1] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + saber->swingSound[2] = 0; //none - if set, plays one of these 3 sounds when swung during an attack - NOTE: must provide all 3!!! + + //done in game (server-side code) + saber->moveSpeedScale = 1.0f; //1.0 - you move faster/slower when using this saber + saber->animSpeedScale = 1.0f; //1.0 - plays normal attack animations faster/slower + + saber->kataMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they press both attack buttons at the same time + saber->lungeAtkMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they crouch+fwd+attack + saber->jumpAtkUpMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+attack + saber->jumpAtkFwdMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+fwd+attack + saber->jumpAtkBackMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+back+attack + saber->jumpAtkRightMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+rightattack + saber->jumpAtkLeftMove = LS_INVALID; //LS_INVALID - if set, player will execute this move when they jump+left+attack + saber->readyAnim = -1; //-1 - anim to use when standing idle + saber->drawAnim = -1; //-1 - anim to use when drawing weapon + saber->putawayAnim = -1; //-1 - anim to use when putting weapon away + saber->tauntAnim = -1; //-1 - anim to use when hit "taunt" + saber->bowAnim = -1; //-1 - anim to use when hit "bow" + saber->meditateAnim = -1; //-1 - anim to use when hit "meditate" + saber->flourishAnim = -1; //-1 - anim to use when hit "flourish" + saber->gloatAnim = -1; //-1 - anim to use when hit "gloat" + + //***NOTE: you can only have a maximum of 2 "styles" of blades, so this next value, "bladeStyle2Start" is the number of the first blade to use these value on... all blades before this use the normal values above, all blades at and after this number use the secondary values below*** + saber->bladeStyle2Start = 0; //0 - if set, blades from this number and higher use the following values (otherwise, they use the normal values already set) + + //***The following can be different for the extra blades - not setting them individually defaults them to the value for the whole saber (and first blade)*** + + //===PRIMARY BLADES===================== + //done in cgame (client-side code) + saber->trailStyle = 0; //0 - default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + saber->g2MarksShader = 0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + saber->g2WeaponMarkShader = 0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + //saber->bladeShader = 0; //none - if set, overrides the shader used for the saber blade? + //saber->trailShader = 0; //none - if set, overrides the shader used for the saber trail? + saber->hitSound[0] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hitSound[1] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hitSound[2] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->blockSound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->blockSound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->blockSound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->bounceSound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounceSound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounceSound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->blockEffect = 0; //none - if set, plays this effect when the saber/sword hits another saber/sword (instead of "saber/saber_block.efx") + saber->hitPersonEffect = 0; //none - if set, plays this effect when the saber/sword hits a person (instead of "saber/blood_sparks_mp.efx") + saber->hitOtherEffect = 0; //none - if set, plays this effect when the saber/sword hits something else damagable (instead of "saber/saber_cut.efx") + saber->bladeEffect = 0; //none - if set, plays this effect at the blade tag + + //done in game (server-side code) + saber->knockbackScale = 0; //0 - if non-zero, uses damage done to calculate an appropriate amount of knockback + saber->damageScale = 1.0f; //1 - scale up or down the damage done by the saber + saber->splashRadius = 0.0f; //0 - radius of splashDamage + saber->splashDamage = 0; //0 - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + saber->splashKnockback = 0.0f; //0 - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + + //===SECONDARY BLADES=================== + //done in cgame (client-side code) + saber->trailStyle2 = 0; //0 - default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + saber->g2MarksShader2 = 0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + saber->g2WeaponMarkShader2 = 0; //none - if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + //saber->bladeShader = 0; //none - if set, overrides the shader used for the saber blade? + //saber->trailShader = 0; //none - if set, overrides the shader used for the saber trail? + saber->hit2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hit2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->hit2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber hits a person - NOTE: must provide all 3!!! + saber->block2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->block2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->block2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits another saber/sword - NOTE: must provide all 3!!! + saber->bounce2Sound[0] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounce2Sound[1] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->bounce2Sound[2] = 0; //none - if set, plays one of these 3 sounds when saber/sword hits a wall and bounces off (must set bounceOnWall to 1 to use these sounds) - NOTE: must provide all 3!!! + saber->blockEffect2 = 0; //none - if set, plays this effect when the saber/sword hits another saber/sword (instead of "saber/saber_block.efx") + saber->hitPersonEffect2 = 0; //none - if set, plays this effect when the saber/sword hits a person (instead of "saber/blood_sparks_mp.efx") + saber->hitOtherEffect2 = 0; //none - if set, plays this effect when the saber/sword hits something else damagable (instead of "saber/saber_cut.efx") + saber->bladeEffect2 = 0; //none - if set, plays this effect at the blade tag + + //done in game (server-side code) + saber->knockbackScale2 = 0; //0 - if non-zero, uses damage done to calculate an appropriate amount of knockback + saber->damageScale2 = 1.0f; //1 - scale up or down the damage done by the saber + saber->splashRadius2 = 0.0f; //0 - radius of splashDamage + saber->splashDamage2 = 0; //0 - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + saber->splashKnockback2 = 0.0f; //0 - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius +//========================================================================================================================================= } #define DEFAULT_SABER "Kyle" @@ -194,7 +623,9 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) float f; int n; qboolean triedDefault = qfalse; - + int saberMove = LS_INVALID; + int anim = -1; + if ( !saber ) { return qfalse; @@ -360,7 +791,7 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - if ( n < 1 || n >= MAX_BLADES ) + if ( n < 1 || n > MAX_BLADES ) { Com_Error(ERR_DROP, "WP_SaberParseParms: saber %s has illegal number of blades (%d) max: %d", useSaber, n, MAX_BLADES ); continue; @@ -506,11 +937,46 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) //locked saber style if ( !Q_stricmp( token, "saberStyle" ) ) { + int style, styleNum; if ( COM_ParseString( &p, &value ) ) { continue; } - saber->style = TranslateSaberStyle( value ); + //OLD WAY: only allowed ONE style + style = TranslateSaberStyle( value ); + //learn only this style + saber->stylesLearned = (1<stylesForbidden = 0; + for ( styleNum = SS_NONE+1; styleNum < SS_NUM_SABER_STYLES; styleNum++ ) + { + if ( styleNum != style ) + { + saber->stylesForbidden |= (1<stylesLearned |= (1<stylesForbidden |= (1<lockable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_LOCKABLE; + } continue; } @@ -546,7 +1015,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->throwable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_THROWABLE; + } continue; } @@ -558,7 +1030,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->disarmable = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_DISARMABLE; + } continue; } @@ -570,7 +1045,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->activeBlocking = ((qboolean)(n!=0)); + if ( n == 0 ) + { + saber->saberFlags |= SFL_NOT_ACTIVE_BLOCKING; + } continue; } @@ -582,7 +1060,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->twoHanded = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_TWO_HANDED; + } continue; } @@ -639,6 +1120,18 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) continue; } + //breakParryBonus2 + if ( !Q_stricmp( token, "breakParryBonus2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->breakParryBonus2 = n; + continue; + } + //disarmBonus if ( !Q_stricmp( token, "disarmBonus" ) ) { @@ -651,6 +1144,18 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) continue; } + //disarmBonus2 + if ( !Q_stricmp( token, "disarmBonus2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->disarmBonus2 = n; + continue; + } + //single blade saber style if ( !Q_stricmp( token, "singleBladeStyle" ) ) { @@ -670,7 +1175,10 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->singleBladeThrowable = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_SINGLE_BLADE_THROWABLE; + } continue; } @@ -704,7 +1212,506 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } - saber->returnDamage = ((qboolean)(n!=0)); + if ( n ) + { + saber->saberFlags |= SFL_RETURN_DAMAGE; + } + continue; + } + + //spin sound (when thrown) + if ( !Q_stricmp( token, "spinSound" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->spinSound = BG_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //swing sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "swingSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->swingSound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //you move faster/slower when using this saber + if ( !Q_stricmp( token, "moveSpeedScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->moveSpeedScale = f; + continue; + } + + //plays normal attack animations faster/slower + if ( !Q_stricmp( token, "animSpeedScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->animSpeedScale = f; + continue; + } + + //if non-zero, the saber will bounce back when it hits solid architecture (good for real-sword type mods) + if ( !Q_stricmp( token, "bounceOnWalls" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_BOUNCE_ON_WALLS; + } + continue; + } + + //if set, saber model is bolted to wrist, not in hand... useful for things like claws & shields, etc. + if ( !Q_stricmp( token, "boltToWrist" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_BOLT_TO_WRIST; + } + continue; + } + + //kata move + if ( !Q_stricmp( token, "kataMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->kataMove = saberMove; //LS_INVALID - if set, player will execute this move when they press both attack buttons at the same time + } + continue; + } + //lungeAtkMove move + if ( !Q_stricmp( token, "lungeAtkMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->lungeAtkMove = saberMove; + } + continue; + } + //jumpAtkUpMove move + if ( !Q_stricmp( token, "jumpAtkUpMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkUpMove = saberMove; + } + continue; + } + //jumpAtkFwdMove move + if ( !Q_stricmp( token, "jumpAtkFwdMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkFwdMove = saberMove; + } + continue; + } + //jumpAtkBackMove move + if ( !Q_stricmp( token, "jumpAtkBackMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkBackMove = saberMove; + } + continue; + } + //jumpAtkRightMove move + if ( !Q_stricmp( token, "jumpAtkRightMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkRightMove = saberMove; + } + continue; + } + //jumpAtkLeftMove move + if ( !Q_stricmp( token, "jumpAtkLeftMove" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saberMove = GetIDForString( SaberMoveTable, value ); + if ( saberMove >= LS_INVALID && saberMove < LS_MOVE_MAX ) + { + saber->jumpAtkLeftMove = saberMove; + } + continue; + } + //readyAnim + if ( !Q_stricmp( token, "readyAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->readyAnim = anim; + } + continue; + } + //drawAnim + if ( !Q_stricmp( token, "drawAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->drawAnim = anim; + } + continue; + } + //putawayAnim + if ( !Q_stricmp( token, "putawayAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->putawayAnim = anim; + } + continue; + } + //tauntAnim + if ( !Q_stricmp( token, "tauntAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->tauntAnim = anim; + } + continue; + } + //bowAnim + if ( !Q_stricmp( token, "bowAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->bowAnim = anim; + } + continue; + } + //meditateAnim + if ( !Q_stricmp( token, "meditateAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->meditateAnim = anim; + } + continue; + } + //flourishAnim + if ( !Q_stricmp( token, "flourishAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->flourishAnim = anim; + } + continue; + } + //gloatAnim + if ( !Q_stricmp( token, "gloatAnim" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + anim = GetIDForString( animTable, value ); + if ( anim >= 0 && anim < MAX_ANIMATIONS ) + { + saber->gloatAnim = anim; + } + continue; + } + + //if set, cannot do roll-stab move at end of roll + if ( !Q_stricmp( token, "noRollStab" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_ROLL_STAB; + } + continue; + } + + //if set, cannot do pull+attack move (move not available in MP anyway) + if ( !Q_stricmp( token, "noPullAttack" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_PULL_ATTACK; + } + continue; + } + + //if set, cannot do back-stab moves + if ( !Q_stricmp( token, "noBackAttack" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_BACK_ATTACK; + } + continue; + } + + //if set, cannot do stabdown move (when enemy is on ground) + if ( !Q_stricmp( token, "noStabDown" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_STABDOWN; + } + continue; + } + + //if set, cannot side-run or forward-run on walls + if ( !Q_stricmp( token, "noWallRuns" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_RUNS; + } + continue; + } + + //if set, cannot do backflip off wall or side-flips off walls + if ( !Q_stricmp( token, "noWallFlips" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_FLIPS; + } + continue; + } + + //if set, cannot grab wall & jump off + if ( !Q_stricmp( token, "noWallGrab" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_WALL_GRAB; + } + continue; + } + + //if set, cannot roll + if ( !Q_stricmp( token, "noRolls" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_ROLLS; + } + continue; + } + + //if set, cannot do flips + if ( !Q_stricmp( token, "noFlips" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_FLIPS; + } + continue; + } + + //if set, cannot do cartwheels + if ( !Q_stricmp( token, "noCartwheels" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_CARTWHEELS; + } + continue; + } + + //if set, cannot do kicks (can't do kicks anyway if using a throwable saber/sword) + if ( !Q_stricmp( token, "noKicks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_KICKS; + } + continue; + } + + //if set, cannot do the simultaneous attack left/right moves (only available in Dual Lightsaber Combat Style) + if ( !Q_stricmp( token, "noMirrorAttacks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags |= SFL_NO_MIRROR_ATTACKS; + } + continue; + } + + //stays on in water + if ( !Q_stricmp( token, "onInWater" ) ) + {//ignore in MP + SkipRestOfLine( &p ); continue; } @@ -713,6 +1720,844 @@ qboolean WP_SaberParseParms( const char *SaberName, saberInfo_t *saber ) SkipRestOfLine( &p ); continue; } + +//===ABOVE THIS, ALL VALUES ARE GLOBAL TO THE SABER======================================================== + //bladeStyle2Start - where to start using the second set of blade data + if ( !Q_stricmp( token, "bladeStyle2Start" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->bladeStyle2Start = n; + continue; + } +//===BLADE-SPECIFIC FIELDS================================================================================= + + //===PRIMARY BLADE==================================== + //stops the saber from drawing marks on the world (good for real-sword type mods) + if ( !Q_stricmp( token, "noWallMarks" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_WALL_MARKS; + } + continue; + } + + //stops the saber from drawing a dynamic light (good for real-sword type mods) + if ( !Q_stricmp( token, "noDlight" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DLIGHT; + } + continue; + } + + //stops the saber from drawing a blade (good for real-sword type mods) + if ( !Q_stricmp( token, "noBlade" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_BLADE; + } + continue; + } + + //default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + if ( !Q_stricmp( token, "trailStyle" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->trailStyle = n; + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2MarksShader" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->g2MarksShader = trap_R_RegisterShader( value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2WeaponMarkShader" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->g2WeaponMarkShader = trap_R_RegisterShader( value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if non-zero, uses damage done to calculate an appropriate amount of knockback + if ( !Q_stricmp( token, "knockbackScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->knockbackScale = f; + continue; + } + + //scale up or down the damage done by the saber + if ( !Q_stricmp( token, "damageScale" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->damageScale = f; + continue; + } + + //if non-zero, the saber never does dismemberment (good for pointed/blunt melee weapons) + if ( !Q_stricmp( token, "noDismemberment" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DISMEMBERMENT; + } + continue; + } + + //if non-zero, the saber will not do damage or any effects when it is idle (not in an attack anim). (good for real-sword type mods) + if ( !Q_stricmp( token, "noIdleEffect" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_IDLE_EFFECT; + } + continue; + } + + //if set, the blades will always be blocking (good for things like shields that should always block) + if ( !Q_stricmp( token, "alwaysBlock" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_ALWAYS_BLOCK; + } + continue; + } + + //if set, the blades cannot manually be toggled on and off + if ( !Q_stricmp( token, "noManualDeactivate" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_MANUAL_DEACTIVATE; + } + continue; + } + + //if set, the blade does damage in start, transition and return anims (like strong style does) + if ( !Q_stricmp( token, "transitionDamage" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_TRANSITION_DAMAGE; + } + continue; + } + + //splashRadius - radius of splashDamage + if ( !Q_stricmp( token, "splashRadius" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashRadius = f; + continue; + } + + //splashDamage - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashDamage" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashDamage = n; + continue; + } + + //splashKnockback - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashKnockback" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashKnockback = f; + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hitSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hitSound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "blockSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->blockSound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounceSound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounceSound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //block effect - when saber/sword hits another saber/sword + if ( !Q_stricmp( token, "blockEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->blockEffect = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //hit person effect - when saber/sword hits a person + if ( !Q_stricmp( token, "hitPersonEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->hitPersonEffect = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //hit other effect - when saber/sword hits sopmething else damagable + if ( !Q_stricmp( token, "hitOtherEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->hitOtherEffect = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //blade effect + if ( !Q_stricmp( token, "bladeEffect" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->bladeEffect = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if non-zero, the saber will not do the big, white clash flare with other sabers + if ( !Q_stricmp( token, "noClashFlare" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_CLASH_FLARE; + } + continue; + } + + //===SECONDARY BLADE==================================== + //stops the saber from drawing marks on the world (good for real-sword type mods) + if ( !Q_stricmp( token, "noWallMarks2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_WALL_MARKS2; + } + continue; + } + + //stops the saber from drawing a dynamic light (good for real-sword type mods) + if ( !Q_stricmp( token, "noDlight2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DLIGHT2; + } + continue; + } + + //stops the saber from drawing a blade (good for real-sword type mods) + if ( !Q_stricmp( token, "noBlade2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_BLADE2; + } + continue; + } + + //default (0) is normal, 1 is a motion blur and 2 is no trail at all (good for real-sword type mods) + if ( !Q_stricmp( token, "trailStyle2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->trailStyle2 = n; + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2MarksShader2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->g2MarksShader2 = trap_R_RegisterShader( value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if set, the game will use this shader for marks on enemies instead of the default "gfx/damage/saberglowmark" + if ( !Q_stricmp( token, "g2WeaponMarkShader2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + SkipRestOfLine( &p ); + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->g2WeaponMarkShader2 = trap_R_RegisterShader( value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if non-zero, uses damage done to calculate an appropriate amount of knockback + if ( !Q_stricmp( token, "knockbackScale2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->knockbackScale2 = f; + continue; + } + + //scale up or down the damage done by the saber + if ( !Q_stricmp( token, "damageScale2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->damageScale2 = f; + continue; + } + + //if non-zero, the saber never does dismemberment (good for pointed/blunt melee weapons) + if ( !Q_stricmp( token, "noDismemberment2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_DISMEMBERMENT2; + } + continue; + } + + //if non-zero, the saber will not do damage or any effects when it is idle (not in an attack anim). (good for real-sword type mods) + if ( !Q_stricmp( token, "noIdleEffect2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_IDLE_EFFECT2; + } + continue; + } + + //if set, the blades will always be blocking (good for things like shields that should always block) + if ( !Q_stricmp( token, "alwaysBlock2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_ALWAYS_BLOCK2; + } + continue; + } + + //if set, the blades cannot manually be toggled on and off + if ( !Q_stricmp( token, "noManualDeactivate2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_MANUAL_DEACTIVATE2; + } + continue; + } + + //if set, the blade does damage in start, transition and return anims (like strong style does) + if ( !Q_stricmp( token, "transitionDamage2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_TRANSITION_DAMAGE2; + } + continue; + } + + //splashRadius - radius of splashDamage + if ( !Q_stricmp( token, "splashRadius2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashRadius2 = f; + continue; + } + + //splashDamage - amount of splashDamage, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashDamage2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashDamage2 = n; + continue; + } + + //splashKnockback - amount of splashKnockback, 100% at a distance of 0, 0% at a distance = splashRadius + if ( !Q_stricmp( token, "splashKnockback2" ) ) + { + if ( COM_ParseFloat( &p, &f ) ) + { + SkipRestOfLine( &p ); + continue; + } + saber->splashKnockback2 = f; + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //hit sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "hit2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->hit2Sound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //block sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "block2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->block2Sound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound1" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[0] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[1] = BG_SoundIndex( (char *)value ); + continue; + } + + //bounce sound - NOTE: must provide all 3!!! + if ( !Q_stricmp( token, "bounce2Sound3" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } + saber->bounce2Sound[2] = BG_SoundIndex( (char *)value ); + continue; + } + + //block effect - when saber/sword hits another saber/sword + if ( !Q_stricmp( token, "blockEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->blockEffect2 = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //hit person effect - when saber/sword hits a person + if ( !Q_stricmp( token, "hitPersonEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->hitPersonEffect2 = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //hit other effect - when saber/sword hits sopmething else damagable + if ( !Q_stricmp( token, "hitOtherEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->hitOtherEffect2 = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //blade effect + if ( !Q_stricmp( token, "bladeEffect2" ) ) + { + if ( COM_ParseString( &p, &value ) ) + { + continue; + } +#ifdef QAGAME//cgame-only cares about this + SkipRestOfLine(&p); +#elif defined CGAME + saber->bladeEffect2 = trap_FX_RegisterEffect( (char *)value ); +#else + SkipRestOfLine(&p); +#endif + continue; + } + + //if non-zero, the saber will not do the big, white clash flare with other sabers + if ( !Q_stricmp( token, "noClashFlare2" ) ) + { + if ( COM_ParseInt( &p, &n ) ) + { + SkipRestOfLine( &p ); + continue; + } + if ( n ) + { + saber->saberFlags2 |= SFL2_NO_CLASH_FLARE2; + } + continue; + } +//===END BLADE-SPECIFIC FIELDS============================================================================= + //FIXME: saber sounds (on, off, loop) #ifdef _DEBUG @@ -866,12 +2711,12 @@ void WP_SetSaber( int entNum, saberInfo_t *sabers, int saberNum, const char *sab { WP_SaberParseParms( saberName, &sabers[saberNum] );//get saber info } - if (sabers[1].twoHanded) + if ((sabers[1].saberFlags&SFL_TWO_HANDED)) {//not allowed to use a 2-handed saber as second saber WP_RemoveSaber( sabers, 1 ); return; } - else if (sabers[0].twoHanded && + else if ((sabers[0].saberFlags&SFL_TWO_HANDED) && sabers[1].model[0]) { //you can't use a two-handed saber with a second saber, so remove saber 2 WP_RemoveSaber( sabers, 1 ); @@ -928,6 +2773,8 @@ void WP_SaberLoadParms( void ) trap_FS_Read(bgSaberParseTBuffer, len, f); bgSaberParseTBuffer[len] = 0; + len = COM_Compress( bgSaberParseTBuffer ); + Q_strcat( marker, MAX_SABER_DATA_SIZE-totallen, bgSaberParseTBuffer ); trap_FS_FCloseFile(f); diff --git a/codemp/game/bg_saga.c b/codemp/game/bg_saga.c index fa843a2..5a4aca5 100644 --- a/codemp/game/bg_saga.c +++ b/codemp/game/bg_saga.c @@ -73,6 +73,7 @@ stringID_table_t StanceTable[] = stringID_table_t WPTable[] = { "NULL",WP_NONE, + ENUM2STRING(WP_NONE), // Player weapons ENUM2STRING(WP_STUN_BATON), ENUM2STRING(WP_MELEE), @@ -933,7 +934,7 @@ void BG_SiegeParseClassFile(const char *filename, siegeClassDesc_t *descBuffer) } else { //It's alright, just default to 100 then. - bgSiegeClasses[bgNumSiegeClasses].starthealth = 100; + bgSiegeClasses[bgNumSiegeClasses].starthealth = bgSiegeClasses[bgNumSiegeClasses].maxhealth; } diff --git a/codemp/game/bg_slidemove.c b/codemp/game/bg_slidemove.c index ba49bdb..3970821 100644 --- a/codemp/game/bg_slidemove.c +++ b/codemp/game/bg_slidemove.c @@ -40,6 +40,7 @@ extern void trap_FX_PlayEffectID( int id, vec3_t org, vec3_t fwd, int vol, int r #ifdef QAGAME extern qboolean FighterIsLanded( Vehicle_t *pVeh, playerState_t *parentPS ); +extern void G_DamageFromKiller( gentity_t *pEnt, gentity_t *pVehEnt, gentity_t *attacker, vec3_t org, int damage, int dflags, int mod ); #endif extern void PM_SetPMViewAngle(playerState_t *ps, vec3_t angle, usercmd_t *ucmd); @@ -54,12 +55,12 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) #ifdef QAGAME gentity_t *hitEnt = trace!=NULL?&g_entities[trace->entityNum]:NULL; - if (!hitEnt || - (pSelfVeh && pSelfVeh->m_pPilot && - hitEnt && hitEnt->s.eType == ET_MISSILE && hitEnt->inuse && - hitEnt->r.ownerNum == pSelfVeh->m_pPilot->s.number) + if (!hitEnt || //nothing to hit + (pSelfVeh && pSelfVeh->m_pPilot &&//I'm a piloted vehicle + hitEnt && hitEnt->s.eType == ET_MISSILE && hitEnt->inuse &&//that hit a missile + hitEnt->r.ownerNum == pSelfVeh->m_pPilot->s.number)//and the missile is owned by my pilot ) - { + {//don't hit it return; } @@ -69,20 +70,7 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) if ( hitEnt->s.NPC_class == CLASS_VEHICLE ) {//hit another vehicle, explode! //Give credit to whoever got me into this death spiral state - gentity_t *parent = (gentity_t *)pSelfVeh->m_pParentEntity; - gentity_t *killer = NULL; - if (parent->client->ps.otherKiller < ENTITYNUM_WORLD && - parent->client->ps.otherKillerTime > level.time) - { - gentity_t *potentialKiller = &g_entities[parent->client->ps.otherKiller]; - - if (potentialKiller->inuse && potentialKiller->client) - { //he's valid I guess - killer = potentialKiller; - } - } - //FIXME: damage hitEnt, some, too? Our explosion should hurt them some, but... - G_Damage( (gentity_t *)pEnt, killer, killer, NULL, pm->ps->origin, 999999, DAMAGE_NO_ARMOR, MOD_FALLING );//FIXME: MOD_IMPACT + G_DamageFromKiller( (gentity_t *)pEnt, (gentity_t *)pSelfVeh->m_pParentEntity, (gentity_t *)hitEnt, pm->ps->origin, 999999, DAMAGE_NO_ARMOR, MOD_COLLISION ); return; } else if ( !VectorCompare( trace->plane.normal, vec3_origin ) @@ -96,19 +84,7 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) if ( impactDot <= -0.7f )//hit rather head-on and hard {// Just DIE now //Give credit to whoever got me into this death spiral state - gentity_t *parent = (gentity_t *)pSelfVeh->m_pParentEntity; - gentity_t *killer = NULL; - if (parent->client->ps.otherKiller < ENTITYNUM_WORLD && - parent->client->ps.otherKillerTime > level.time) - { - gentity_t *potentialKiller = &g_entities[parent->client->ps.otherKiller]; - - if (potentialKiller->inuse && potentialKiller->client) - { //he's valid I guess - killer = potentialKiller; - } - } - G_Damage( (gentity_t *)pEnt, killer, killer, NULL, pm->ps->origin, 999999, DAMAGE_NO_ARMOR, MOD_FALLING );//FIXME: MOD_IMPACT + G_DamageFromKiller( (gentity_t *)pEnt, (gentity_t *)pSelfVeh->m_pParentEntity, (gentity_t *)hitEnt, pm->ps->origin, 999999, DAMAGE_NO_ARMOR, MOD_FALLING ); return; } } @@ -169,7 +145,9 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) //FIXME: impact sound and effect should be gotten from g_vehicleInfo...? //FIXME: should pass in trace.endpos and trace.plane.normal vec3_t vehUp; -#ifndef QAGAME +#ifdef QAGAME + qboolean noDamage = qfalse; +#else bgEntity_t *hitEnt; #endif @@ -437,8 +415,10 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) pEnt->m_pVehicle->m_iHitDebounce = pm->cmd.serverTime + 200; magnitude /= pSelfVeh->m_pVehicleInfo->toughness * 50.0f; - if (hitEnt && (hitEnt->s.eType != ET_TERRAIN || !(hitEnt->spawnflags & 1) || pSelfVeh->m_pVehicleInfo->type == VH_FIGHTER)) + if (hitEnt + && (hitEnt->s.eType != ET_TERRAIN || !(hitEnt->spawnflags & 1) || pSelfVeh->m_pVehicleInfo->type == VH_FIGHTER)) { //don't damage the vehicle from terrain that doesn't want to damage vehicles + gentity_t *killer = NULL; if (pSelfVeh->m_pVehicleInfo->type == VH_FIGHTER) { //increase the damage... float mult = (pSelfVeh->m_vOrientation[PITCH]*0.1f); @@ -466,7 +446,26 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) pSelfVeh->m_iLastImpactDmg = magnitude; //FIXME: what about proper death credit to the guy who shot you down? //FIXME: actually damage part of the ship that impacted? - G_Damage( (gentity_t *)pEnt, NULL, NULL, NULL, pm->ps->origin, magnitude*5, DAMAGE_NO_ARMOR, MOD_FALLING );//FIXME: MOD_IMPACT + if ( hitEnt->s.eType == ET_MISSILE )//missile + { + //FIX: NEVER do or take impact damage from a missile... + noDamage = qtrue; + if ( (hitEnt->s.eFlags&EF_JETPACK_ACTIVE)//vehicle missile + && ((gentity_t *)hitEnt)->r.ownerNum < MAX_CLIENTS )//valid client owner + {//I ran into a missile and died because of the impact, give credit to the missile's owner (PROBLEM: might this ever accidently give improper credit to client 0?) + /* + if ( ((gentity_t *)hitEnt)->r.ownerNum == pEnt->s.number ) + {//hit our own missile? Don't damage ourselves or it... (so we don't kill ourselves!) if it hits *us*, then fine, but not here + noDamage = qtrue; + } + */ + killer = &g_entities[((gentity_t *)hitEnt)->r.ownerNum]; + } + } + if ( !noDamage ) + { + G_Damage( (gentity_t *)pEnt, ((gentity_t*)hitEnt), killer!=NULL?killer:((gentity_t *)hitEnt), NULL, pm->ps->origin, magnitude*5, DAMAGE_NO_ARMOR, (hitEnt->s.NPC_class==CLASS_VEHICLE?MOD_COLLISION:MOD_FALLING) );//FIXME: MOD_IMPACT + } if (pSelfVeh->m_pVehicleInfo->surfDestruction) { @@ -510,6 +509,9 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) hitEnt->client->ps.otherKiller = pEnt->s.number; hitEnt->client->ps.otherKillerTime = pm->cmd.serverTime + 5000; hitEnt->client->ps.otherKillerDebounceTime = pm->cmd.serverTime + 100; + hitEnt->client->otherKillerMOD = MOD_COLLISION; + hitEnt->client->otherKillerVehWeapon = 0; + hitEnt->client->otherKillerWeaponType = WP_NONE; //add my velocity into his to force him along in the correct direction from impact VectorAdd(hitEnt->client->ps.velocity, pm->ps->velocity, hitEnt->client->ps.velocity); @@ -532,7 +534,10 @@ void PM_VehicleImpact(bgEntity_t *pEnt, trace_t *trace) { finalD = 1; } - G_Damage( hitEnt, attackEnt, attackEnt, NULL, pm->ps->origin, finalD, 0, MOD_MELEE );//FIXME: MOD_IMPACT + if ( !noDamage ) + { + G_Damage( hitEnt, attackEnt, attackEnt, NULL, pm->ps->origin, finalD, 0, (hitEnt->s.NPC_class==CLASS_VEHICLE?MOD_COLLISION:MOD_FALLING/*MOD_MELEE*/) );//FIXME: MOD_IMPACT + } } #else //this is gonna result in "double effects" for the client doing the prediction. //it doesn't look bad though. could just use predicted events, but I'm too lazy. diff --git a/codemp/game/bg_vehicleLoad.c b/codemp/game/bg_vehicleLoad.c index 865da19..6a83286 100644 --- a/codemp/game/bg_vehicleLoad.c +++ b/codemp/game/bg_vehicleLoad.c @@ -69,8 +69,8 @@ extern stringID_table_t animTable [MAX_ANIMATIONS+1]; // These buffers are filled in with the same contents and then just read from in // a few places. We only need one copy on Xbox. -#define MAX_VEH_WEAPON_DATA_SIZE 0x4000 -#define MAX_VEHICLE_DATA_SIZE 0x10000 +#define MAX_VEH_WEAPON_DATA_SIZE 0x20000 +#define MAX_VEHICLE_DATA_SIZE 0x80000 #if !defined(_XBOX) || defined(QAGAME) char VehWeaponParms[MAX_VEH_WEAPON_DATA_SIZE]; @@ -151,6 +151,7 @@ vehField_t vehWeaponFields[NUM_VWEAP_PARMS] = {"loopSound", VWFOFS(iLoopSound), VF_SOUND_CLIENT}, //index of loopSound {"speed", VWFOFS(fSpeed), VF_FLOAT}, //speed of projectile/range of traceline {"homing", VWFOFS(fHoming), VF_FLOAT}, //0.0 = not homing, 0.5 = half vel to targ, half cur vel, 1.0 = all vel to targ + {"homingFOV", VWFOFS(fHomingFOV), VF_FLOAT},//missile will lose lock on if DotProduct of missile direction and direction to target ever drops below this (-1 to 1, -1 = never lose target, 0 = lose if ship gets behind missile, 1 = pretty much will lose it's target right away) {"lockOnTime", VWFOFS(iLockOnTime), VF_INT}, //0 = no lock time needed, else # of ms needed to lock on {"damage", VWFOFS(iDamage), VF_INT}, //damage done when traceline or projectile directly hits target {"splashDamage", VWFOFS(iSplashDamage), VF_INT},//damage done to ents in splashRadius of end of traceline or projectile origin on impact @@ -1338,6 +1339,7 @@ int VEH_LoadVehicle( const char *vehicleName ) G_SoundIndex( "sound/vehicles/common/release.wav" ); #elif CGAME trap_R_RegisterShader( "gfx/menus/radar/bracket" ); + trap_R_RegisterShader( "gfx/menus/radar/lead" ); trap_R_RegisterShaderNoMip( "gfx/menus/radar/asteroid" ); trap_S_RegisterSound( "sound/vehicles/common/impactalarm.wav" ); trap_S_RegisterSound( "sound/vehicles/common/linkweaps.wav" ); diff --git a/codemp/game/bg_vehicles.h b/codemp/game/bg_vehicles.h index a2559f6..0030084 100644 --- a/codemp/game/bg_vehicles.h +++ b/codemp/game/bg_vehicles.h @@ -50,6 +50,7 @@ typedef struct int iLoopSound; //index of loopSound float fSpeed; //speed of projectile/range of traceline float fHoming; //0.0 = not homing, 0.5 = half vel to targ, half cur vel, 1.0 = all vel to targ + float fHomingFOV; //missile will lose lock on if DotProduct of missile direction and direction to target ever drops below this (-1 to 1, -1 = never lose target, 0 = lose if ship gets behind missile, 1 = pretty much will lose it's target right away) int iLockOnTime; //0 = no lock time needed, else # of ms needed to lock on int iDamage; //damage done when traceline or projectile directly hits target int iSplashDamage;//damage done to ents in splashRadius of end of traceline or projectile origin on impact @@ -62,7 +63,7 @@ typedef struct qboolean bExplodeOnExpire; //when iLifeTime is up, explodes rather than simply removing itself } vehWeaponInfo_t; //NOTE: this MUST stay up to date with the number of variables in the vehFields table!!! -#define NUM_VWEAP_PARMS 24 +#define NUM_VWEAP_PARMS 25 #define VWFOFS(x) ((int)&(((vehWeaponInfo_t *)0)->x)) diff --git a/codemp/game/g_ICARUScb.c b/codemp/game/g_ICARUScb.c index bbbf72c..d015c07 100644 --- a/codemp/game/g_ICARUScb.c +++ b/codemp/game/g_ICARUScb.c @@ -13,9 +13,10 @@ #include "../namespace_begin.h" qboolean BG_SabersOff( playerState_t *ps ); +extern stringID_table_t WPTable[]; +extern stringID_table_t BSTable[]; #include "../namespace_end.h" -extern stringID_table_t BSTable[]; //This is a hack I guess. It's because we can't include the file this enum is in //unless we're using cpp. But we need it for the interpreter stuff. @@ -2138,6 +2139,185 @@ static void Q3_SetOriginOffset( int entID, int axis, float offset ) Q3_Lerp2Origin( -1, entID, origin, duration ); } +/* +============= +Q3_SetEnemy + +Sets the enemy of an entity +============= +*/ +static void Q3_SetEnemy( int entID, const char *name ) +{ + gentity_t *ent = &g_entities[entID]; + + if ( !ent ) + { + G_DebugPrint( WL_WARNING, "Q3_SetEnemy: invalid entID %d\n", entID); + return; + } + + if( !Q_stricmp("NONE", name) || !Q_stricmp("NULL", name)) + { + if(ent->NPC) + { + G_ClearEnemy(ent); + } + else + { + ent->enemy = NULL; + } + } + else + { + gentity_t *enemy = G_Find( NULL, FOFS(targetname), (char *) name); + + if(enemy == NULL) + { + G_DebugPrint( WL_ERROR, "Q3_SetEnemy: no such enemy: '%s'\n", name ); + return; + } + /*else if(enemy->health <= 0) + { + //G_DebugPrint( WL_ERROR, "Q3_SetEnemy: ERROR - desired enemy has health %d\n", enemy->health ); + return; + }*/ + else + { + if(ent->NPC) + { + G_SetEnemy( ent, enemy ); + ent->cantHitEnemyCounter = 0; + } + else + { + G_SetEnemy(ent, enemy); + } + } + } +} + + +/* +============= +Q3_SetLeader + +Sets the leader of an NPC +============= +*/ +static void Q3_SetLeader( int entID, const char *name ) +{ + gentity_t *ent = &g_entities[entID]; + + if ( !ent ) + { + G_DebugPrint( WL_WARNING, "Q3_SetLeader: invalid entID %d\n", entID); + return; + } + + if ( !ent->client ) + { + G_DebugPrint( WL_ERROR, "Q3_SetLeader: ent %d is NOT a player or NPC!\n", entID); + return; + } + + if( !Q_stricmp("NONE", name) || !Q_stricmp("NULL", name)) + { + ent->client->leader = NULL; + } + else + { + gentity_t *leader = G_Find( NULL, FOFS(targetname), (char *) name); + + if(leader == NULL) + { + //G_DebugPrint( WL_ERROR,"Q3_SetEnemy: unable to locate enemy: '%s'\n", name ); + return; + } + else if(leader->health <= 0) + { + //G_DebugPrint( WL_ERROR,"Q3_SetEnemy: ERROR - desired enemy has health %d\n", enemy->health ); + return; + } + else + { + ent->client->leader = leader; + } + } +} + +/* +============= +Q3_SetNavGoal + +Sets the navigational goal of an entity +============= +*/ +static qboolean Q3_SetNavGoal( int entID, const char *name ) +{ + gentity_t *ent = &g_entities[ entID ]; + vec3_t goalPos; + + if ( !ent->health ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNavGoal: tried to set a navgoal (\"%s\") on a corpse! \"%s\"\n", name, ent->script_targetname ); + return qfalse; + } + if ( !ent->NPC ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNavGoal: tried to set a navgoal (\"%s\") on a non-NPC: \"%s\"\n", name, ent->script_targetname ); + return qfalse; + } + if ( !ent->NPC->tempGoal ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNavGoal: tried to set a navgoal (\"%s\") on a dead NPC: \"%s\"\n", name, ent->script_targetname ); + return qfalse; + } + if ( !ent->NPC->tempGoal->inuse ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNavGoal: NPC's (\"%s\") navgoal is freed: \"%s\"\n", name, ent->script_targetname ); + return qfalse; + } + if( Q_stricmp( "null", name) == 0 + || Q_stricmp( "NULL", name) == 0 ) + { + ent->NPC->goalEntity = NULL; + trap_ICARUS_TaskIDComplete( ent, TID_MOVE_NAV ); + return qfalse; + } + else + { + //Get the position of the goal + if ( TAG_GetOrigin2( NULL, name, goalPos ) == qfalse ) + { + gentity_t *targ = G_Find(NULL, FOFS(targetname), (char*)name); + if ( !targ ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNavGoal: can't find NAVGOAL \"%s\"\n", name ); + return qfalse; + } + else + { + ent->NPC->goalEntity = targ; + ent->NPC->goalRadius = sqrt(ent->r.maxs[0]+ent->r.maxs[0]) + sqrt(targ->r.maxs[0]+targ->r.maxs[0]); + ent->NPC->aiFlags &= ~NPCAI_TOUCHED_GOAL; + } + } + else + { + int goalRadius = TAG_GetRadius( NULL, name ); + NPC_SetMoveGoal( ent, goalPos, goalRadius, qtrue, -1, NULL ); + //We know we want to clear the lastWaypoint here + ent->NPC->goalEntity->lastWaypoint = WAYPOINT_NONE; + ent->NPC->aiFlags &= ~NPCAI_TOUCHED_GOAL; + #ifdef _DEBUG + //this is *only* for debugging navigation + ent->NPC->tempGoal->target = G_NewString( name ); + #endif// _DEBUG + return qtrue; + } + } + return qfalse; +} /* ============ SetLowerAnim @@ -2920,9 +3100,14 @@ Q3_SetWeapon Argument : const char *wp_name ============ */ +extern void ChangeWeapon( gentity_t *ent, int newWeapon ); static void Q3_SetWeapon (int entID, const char *wp_name) { - G_DebugPrint( WL_WARNING, "Q3_SetWeapon currently unsupported in MP, ask if you need it.\n"); + gentity_t *ent = &g_entities[entID]; + int wp = GetIDForString( WPTable, wp_name ); + + ent->client->ps.stats[STAT_WEAPONS] = (1<NPC ) + { + G_DebugPrint( WL_ERROR, "Q3_SetWalkSpeed: '%s' is not an NPC!\n", self->targetname ); + return; + } + + if(int_data == 0) + { + self->NPC->stats.walkSpeed = self->client->ps.speed = 1; + } + + self->NPC->stats.walkSpeed = self->client->ps.speed = int_data; } @@ -2969,8 +3172,26 @@ Q3_SetRunSpeed */ static void Q3_SetRunSpeed (int entID, int int_data) { - G_DebugPrint( WL_WARNING, "Q3_SetRunSpeed: NOT SUPPORTED IN MP\n"); - return; + gentity_t *self = &g_entities[entID]; + + if ( !self ) + { + G_DebugPrint( WL_WARNING, "Q3_SetRunSpeed: invalid entID %d\n", entID); + return; + } + + if ( !self->NPC ) + { + G_DebugPrint( WL_ERROR, "Q3_SetRunSpeed: '%s' is not an NPC!\n", self->targetname ); + return; + } + + if(int_data == 0) + { + self->NPC->stats.runSpeed = self->client->ps.speed = 1; + } + + self->NPC->stats.runSpeed = self->client->ps.speed = int_data; } @@ -3152,11 +3373,25 @@ static void Q3_SetScale(int entID, float float_data) if (self->client) { - self->client->ps.iModelScale = float_data*100.0f; + if ( float_data < 0 ) + { + self->client->ps.iModelScale = float_data; + } + else + { + self->client->ps.iModelScale = float_data*100.0f; + } } else { - self->s.iModelScale = float_data*100.0f; + if ( float_data < 0 ) + { + self->s.iModelScale = float_data; + } + else + { + self->s.iModelScale = float_data*100.0f; + } } } @@ -3706,7 +3941,28 @@ Q3_SetWalking */ static void Q3_SetWalking( int entID, qboolean add) { - G_DebugPrint( WL_WARNING, "Q3_SetWalking: NOT SUPPORTED IN MP\n"); + gentity_t *ent = &g_entities[entID]; + + if ( !ent ) + { + G_DebugPrint( WL_WARNING, "Q3_SetWalking: invalid entID %d\n", entID); + return; + } + + if ( !ent->NPC ) + { + G_DebugPrint( WL_ERROR, "Q3_SetWalking: '%s' is not an NPC!\n", ent->targetname ); + return; + } + + if(add) + { + ent->NPC->scriptFlags |= SCF_WALKING; + } + else + { + ent->NPC->scriptFlags &= ~SCF_WALKING; + } return; } @@ -3980,8 +4236,28 @@ Q3_SetNoAvoid */ static void Q3_SetNoAvoid( int entID, qboolean noAvoid) { - G_DebugPrint( WL_WARNING, "Q3_SetNoAvoid: NOT SUPPORTED IN MP\n"); - return; + gentity_t *ent = &g_entities[entID]; + + if ( !ent ) + { + G_DebugPrint( WL_WARNING, "Q3_SetNoAvoid: invalid entID %d\n", entID); + return; + } + + if ( !ent->NPC ) + { + G_DebugPrint( WL_ERROR, "Q3_SetNoAvoid: '%s' is not an NPC!\n", ent->targetname ); + return; + } + + if(noAvoid) + { + ent->NPC->aiFlags |= NPCAI_NO_COLL_AVOID; + } + else + { + ent->NPC->aiFlags &= ~NPCAI_NO_COLL_AVOID; + } } /* @@ -4803,15 +5079,19 @@ qboolean Q3_Set( int taskID, int entID, const char *type_name, const char *data break; case SET_ENEMY: - G_DebugPrint( WL_WARNING, "Q3_SetEnemy: NOT SUPPORTED IN MP\n"); + Q3_SetEnemy( entID, (char *) data ); break; case SET_LEADER: - G_DebugPrint( WL_WARNING, "Q3_SetLeader: NOT SUPPORTED IN MP\n"); + Q3_SetLeader( entID, (char *) data ); break; case SET_NAVGOAL: - G_DebugPrint( WL_WARNING, "Q3_SetNavGoal: NOT SUPPORTED IN MP\n"); + if ( Q3_SetNavGoal( entID, (char *) data ) ) + { + trap_ICARUS_TaskIDSet( ent, TID_MOVE_NAV, taskID ); + return qfalse; //Don't call it back + } break; case SET_ANIM_UPPER: diff --git a/codemp/game/g_active.c b/codemp/game/g_active.c index 22e2c58..965614d 100644 --- a/codemp/game/g_active.c +++ b/codemp/game/g_active.c @@ -11,6 +11,7 @@ extern void Jedi_Decloak( gentity_t *self ); qboolean PM_SaberInTransition( int move ); qboolean PM_SaberInStart( int move ); qboolean PM_SaberInReturn( int move ); +qboolean WP_SaberStyleValidForSaber( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int saberAnimLevel ); #include "../namespace_end.h" qboolean saberCheckKnockdown_DuelLoss(gentity_t *saberent, gentity_t *saberOwner, gentity_t *other); @@ -1688,6 +1689,16 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) { anim = BOTH_ENGAGETAUNT; } + else if ( ent->client->saber[0].tauntAnim != -1 ) + { + anim = ent->client->saber[0].tauntAnim; + } + else if ( ent->client->saber[1].model + && ent->client->saber[1].model[0] + && ent->client->saber[1].tauntAnim != -1 ) + { + anim = ent->client->saber[1].tauntAnim; + } else { switch ( ent->client->ps.fd.saberAnimLevel ) @@ -1738,7 +1749,20 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) } break; case TAUNT_BOW: - anim = BOTH_BOW; + if ( ent->client->saber[0].bowAnim != -1 ) + { + anim = ent->client->saber[0].bowAnim; + } + else if ( ent->client->saber[1].model + && ent->client->saber[1].model[0] + && ent->client->saber[1].bowAnim != -1 ) + { + anim = ent->client->saber[1].bowAnim; + } + else + { + anim = BOTH_BOW; + } if ( ent->client->ps.saberHolstered == 1 && ent->client->saber[1].model && ent->client->saber[1].model[0] ) @@ -1752,7 +1776,20 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) ent->client->ps.saberHolstered = 2; break; case TAUNT_MEDITATE: - anim = BOTH_MEDITATE; + if ( ent->client->saber[0].meditateAnim != -1 ) + { + anim = ent->client->saber[0].meditateAnim; + } + else if ( ent->client->saber[1].model + && ent->client->saber[1].model[0] + && ent->client->saber[1].meditateAnim != -1 ) + { + anim = ent->client->saber[1].meditateAnim; + } + else + { + anim = BOTH_MEDITATE; + } if ( ent->client->ps.saberHolstered == 1 && ent->client->saber[1].model && ent->client->saber[1].model[0] ) @@ -1779,69 +1816,95 @@ void G_SetTauntAnim( gentity_t *ent, int taunt ) G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); } ent->client->ps.saberHolstered = 0; - switch ( ent->client->ps.fd.saberAnimLevel ) + if ( ent->client->saber[0].flourishAnim != -1 ) { - case SS_FAST: - case SS_TAVION: - anim = BOTH_SHOWOFF_FAST; - break; - case SS_MEDIUM: - anim = BOTH_SHOWOFF_MEDIUM; - break; - case SS_STRONG: - case SS_DESANN: - anim = BOTH_SHOWOFF_STRONG; - break; - case SS_DUAL: - anim = BOTH_SHOWOFF_DUAL; - break; - case SS_STAFF: - anim = BOTH_SHOWOFF_STAFF; - break; + anim = ent->client->saber[0].flourishAnim; + } + else if ( ent->client->saber[1].model + && ent->client->saber[1].model[0] + && ent->client->saber[1].flourishAnim != -1 ) + { + anim = ent->client->saber[1].flourishAnim; + } + else + { + switch ( ent->client->ps.fd.saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + anim = BOTH_SHOWOFF_FAST; + break; + case SS_MEDIUM: + anim = BOTH_SHOWOFF_MEDIUM; + break; + case SS_STRONG: + case SS_DESANN: + anim = BOTH_SHOWOFF_STRONG; + break; + case SS_DUAL: + anim = BOTH_SHOWOFF_DUAL; + break; + case SS_STAFF: + anim = BOTH_SHOWOFF_STAFF; + break; + } } } break; case TAUNT_GLOAT: - switch ( ent->client->ps.fd.saberAnimLevel ) + if ( ent->client->saber[0].gloatAnim != -1 ) { - case SS_FAST: - case SS_TAVION: - anim = BOTH_VICTORY_FAST; - break; - case SS_MEDIUM: - anim = BOTH_VICTORY_MEDIUM; - break; - case SS_STRONG: - case SS_DESANN: - if ( ent->client->ps.saberHolstered ) - {//turn on first - G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); + anim = ent->client->saber[0].gloatAnim; + } + else if ( ent->client->saber[1].model + && ent->client->saber[1].model[0] + && ent->client->saber[1].gloatAnim != -1 ) + { + anim = ent->client->saber[1].gloatAnim; + } + else + { + switch ( ent->client->ps.fd.saberAnimLevel ) + { + case SS_FAST: + case SS_TAVION: + anim = BOTH_VICTORY_FAST; + break; + case SS_MEDIUM: + anim = BOTH_VICTORY_MEDIUM; + break; + case SS_STRONG: + case SS_DESANN: + if ( ent->client->ps.saberHolstered ) + {//turn on first + G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); + } + ent->client->ps.saberHolstered = 0; + anim = BOTH_VICTORY_STRONG; + break; + case SS_DUAL: + if ( ent->client->ps.saberHolstered == 1 + && ent->client->saber[1].model + && ent->client->saber[1].model[0] ) + {//turn on second saber + G_Sound( ent, CHAN_WEAPON, ent->client->saber[1].soundOn ); + } + else if ( ent->client->ps.saberHolstered == 2 ) + {//turn on first + G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); + } + ent->client->ps.saberHolstered = 0; + anim = BOTH_VICTORY_DUAL; + break; + case SS_STAFF: + if ( ent->client->ps.saberHolstered ) + {//turn on first + G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); + } + ent->client->ps.saberHolstered = 0; + anim = BOTH_VICTORY_STAFF; + break; } - ent->client->ps.saberHolstered = 0; - anim = BOTH_VICTORY_STRONG; - break; - case SS_DUAL: - if ( ent->client->ps.saberHolstered == 1 - && ent->client->saber[1].model - && ent->client->saber[1].model[0] ) - {//turn on second saber - G_Sound( ent, CHAN_WEAPON, ent->client->saber[1].soundOn ); - } - else if ( ent->client->ps.saberHolstered == 2 ) - {//turn on first - G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); - } - ent->client->ps.saberHolstered = 0; - anim = BOTH_VICTORY_DUAL; - break; - case SS_STAFF: - if ( ent->client->ps.saberHolstered ) - {//turn on first - G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn ); - } - ent->client->ps.saberHolstered = 0; - anim = BOTH_VICTORY_STAFF; - break; } break; } @@ -1962,31 +2025,40 @@ void ClientThink_real( gentity_t *ent ) { } else if (client->saber[0].model[0] && client->saber[1].model[0]) { //with two sabs always use akimbo style - client->ps.fd.saberAnimLevelBase = SS_DUAL; if ( client->ps.saberHolstered == 1 ) {//one saber should be off, adjust saberAnimLevel accordinly + client->ps.fd.saberAnimLevelBase = SS_DUAL; client->ps.fd.saberAnimLevel = SS_FAST; client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; } else { - client->ps.fd.saberAnimLevelBase = client->ps.fd.saberAnimLevel = SS_DUAL; + if ( !WP_SaberStyleValidForSaber( &client->saber[0], &client->saber[1], client->ps.saberHolstered, client->ps.fd.saberAnimLevel ) ) + {//only use dual style if the style we're trying to use isn't valid + client->ps.fd.saberAnimLevelBase = client->ps.fd.saberAnimLevel = SS_DUAL; + } client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; } } - else if (client->saber[0].style == SS_STAFF) - { //then always use the staff style - client->ps.fd.saberAnimLevelBase = SS_STAFF; - if ( client->ps.saberHolstered == 1 - && client->saber[0].singleBladeStyle != SS_NONE) - {//one blade should be off, adjust saberAnimLevel accordinly - client->ps.fd.saberAnimLevel = client->saber[0].singleBladeStyle; - client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; + else + { + if (client->saber[0].stylesLearned == (1<ps.fd.saberAnimLevelBase = SS_STAFF; } - else - { - client->ps.fd.saberAnimLevel = SS_STAFF; - client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; + if ( client->ps.fd.saberAnimLevelBase == SS_STAFF ) + {//using staff style + if ( client->ps.saberHolstered == 1 + && client->saber[0].singleBladeStyle != SS_NONE) + {//one blade should be off, adjust saberAnimLevel accordinly + client->ps.fd.saberAnimLevel = client->saber[0].singleBladeStyle; + client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; + } + else + { + client->ps.fd.saberAnimLevel = SS_STAFF; + client->ps.fd.saberDrawAnimLevel = client->ps.fd.saberAnimLevel; + } } } } @@ -2041,9 +2113,14 @@ void ClientThink_real( gentity_t *ent ) { // // check for exiting intermission // - if ( level.intermissiontime ) { - ClientIntermissionThink( client ); - return; + if ( level.intermissiontime ) + { + if ( ent->s.number < MAX_CLIENTS + || client->NPC_class == CLASS_VEHICLE ) + {//players and vehicles do nothing in intermissions + ClientIntermissionThink( client ); + return; + } } // spectators don't do much @@ -2313,30 +2390,32 @@ void ClientThink_real( gentity_t *ent ) { if (ucmd->buttons & BUTTON_WALKING) { //sort of a hack I guess since MP handles walking differently from SP (has some proxy cheat prevention methods) + /* if (ent->client->ps.speed > 64) { ent->client->ps.speed = 64; } + */ if (ucmd->forwardmove > 64) { - ucmd->forwardmove = ent->client->ps.speed; + ucmd->forwardmove = 64; } else if (ucmd->forwardmove < -64) { - ucmd->forwardmove = -ent->client->ps.speed; + ucmd->forwardmove = -64; } if (ucmd->rightmove > 64) { - ucmd->rightmove = ent->client->ps.speed; + ucmd->rightmove = 64; } else if ( ucmd->rightmove < -64) { - ucmd->rightmove = -ent->client->ps.speed; + ucmd->rightmove = -64; } - ent->client->ps.speed = ent->client->ps.basespeed = NPC_GetRunSpeed( ent ); + //ent->client->ps.speed = ent->client->ps.basespeed = NPC_GetRunSpeed( ent ); } client->ps.basespeed = client->ps.speed; } @@ -2662,6 +2741,9 @@ void ClientThink_real( gentity_t *ent ) { ent->client->ps.otherKiller = thrower->s.number; ent->client->ps.otherKillerTime = level.time + 8000; ent->client->ps.otherKillerDebounceTime = level.time + 100; + ent->client->otherKillerMOD = MOD_FALLING; + ent->client->otherKillerVehWeapon = 0; + ent->client->otherKillerWeaponType = WP_NONE; } else { //see if we can move to be next to the hand.. if it's not clear, break the throw. @@ -3097,6 +3179,27 @@ void ClientThink_real( gentity_t *ent ) { pm.checkDuelLoss = 0; } + if ( ent->client->ps.groundEntityNum < ENTITYNUM_WORLD ) + {//standing on an ent + gentity_t *groundEnt = &g_entities[ent->client->ps.groundEntityNum]; + if ( groundEnt + && groundEnt->s.eType == ET_NPC + && groundEnt->s.NPC_class == CLASS_VEHICLE + && groundEnt->inuse + && groundEnt->health > 0 + && groundEnt->m_pVehicle ) + {//standing on a valid, living vehicle + if ( !groundEnt->client->ps.speed + && groundEnt->m_pVehicle->m_ucmd.upmove > 0 ) + {//a vehicle that's trying to take off! + //just kill me + vec3_t up = {0,0,1}; + G_Damage( ent, NULL, NULL, up, ent->r.currentOrigin, 9999999, DAMAGE_NO_PROTECTION, MOD_CRUSH ); + return; + } + } + } + if (pm.cmd.generic_cmd && (pm.cmd.generic_cmd != ent->client->lastGenCmd || ent->client->lastGenCmdTime < level.time)) { @@ -3314,7 +3417,8 @@ void ClientThink_real( gentity_t *ent ) { if ( ent->client->ps.eventSequence != oldEventSequence ) { ent->eventTime = level.time; } - if (g_smoothClients.integer) { + if (g_smoothClients.integer) + { BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qfalse ); //rww - 12-03-02 - Don't snap the origin of players! It screws prediction all up. } @@ -3427,6 +3531,9 @@ void ClientThink_real( gentity_t *ent ) { faceKicked->client->ps.otherKiller = ent->s.number; faceKicked->client->ps.otherKillerTime = level.time + 5000; faceKicked->client->ps.otherKillerDebounceTime = level.time + 100; + faceKicked->client->otherKillerMOD = MOD_MELEE; + faceKicked->client->otherKillerVehWeapon = 0; + faceKicked->client->otherKillerWeaponType = WP_NONE; faceKicked->client->ps.velocity[0] = oppDir[0]*(strength*40); faceKicked->client->ps.velocity[1] = oppDir[1]*(strength*40); @@ -3721,7 +3828,11 @@ void ClientEndFrame( gentity_t *ent ) { // the player any normal movement attributes // if ( level.intermissiontime ) { - return; + if ( ent->s.number < MAX_CLIENTS + || ent->client->NPC_class == CLASS_VEHICLE ) + {//players and vehicles do nothing in intermissions + return; + } } // burn from lava, etc diff --git a/codemp/game/g_bot.c b/codemp/game/g_bot.c index c54e25d..b936023 100644 --- a/codemp/game/g_bot.c +++ b/codemp/game/g_bot.c @@ -135,6 +135,9 @@ int G_GetMapTypeBits(char *type) typeBits |= (1 << GT_FFA); typeBits |= (1 << GT_TEAM); } + if( strstr( type, "team" ) ) { + typeBits |= (1 << GT_TEAM); + } if( strstr( type, "holocron" ) ) { typeBits |= (1 << GT_HOLOCRON); } diff --git a/codemp/game/g_client.c b/codemp/game/g_client.c index 4b5cb31..5088205 100644 --- a/codemp/game/g_client.c +++ b/codemp/game/g_client.c @@ -13,6 +13,8 @@ extern int g_siegeRespawnCheck; void WP_SaberAddG2Model( gentity_t *saberent, const char *saberModel, qhandle_t saberSkin ); void WP_SaberRemoveG2Model( gentity_t *saberent ); +extern qboolean WP_SaberStyleValidForSaber( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int saberAnimLevel ); +extern qboolean WP_UseFirstValidSaberStyle( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int *saberAnimLevel ); forcedata_t Client_Force[MAX_CLIENTS]; @@ -105,6 +107,36 @@ void SP_info_player_start(gentity_t *ent) { SP_info_player_deathmatch( ent ); } +/*QUAKED info_player_start_red (1 0 0) (-16 -16 -24) (16 16 32) INITIAL +For Red Team DM starts + +Targets will be fired when someone spawns in on them. +equivalent to info_player_deathmatch + +INITIAL - The first time a player enters the game, they will be at an 'initial' spot. + +"nobots" will prevent bots from using this spot. +"nohumans" will prevent non-bots from using this spot. +*/ +void SP_info_player_start_red(gentity_t *ent) { + SP_info_player_deathmatch( ent ); +} + +/*QUAKED info_player_start_blue (1 0 0) (-16 -16 -24) (16 16 32) INITIAL +For Blue Team DM starts + +Targets will be fired when someone spawns in on them. +equivalent to info_player_deathmatch + +INITIAL - The first time a player enters the game, they will be at an 'initial' spot. + +"nobots" will prevent bots from using this spot. +"nohumans" will prevent non-bots from using this spot. +*/ +void SP_info_player_start_blue(gentity_t *ent) { + SP_info_player_deathmatch( ent ); +} + void SiegePointUse( gentity_t *self, gentity_t *other, gentity_t *activator ) { //Toggle the point on/off @@ -190,13 +222,37 @@ void SP_info_player_siegeteam2(gentity_t *ent) { ent->use = SiegePointUse; } -/*QUAKED info_player_intermission (1 0 1) (-16 -16 -24) (16 16 32) +/*QUAKED info_player_intermission (1 0 1) (-16 -16 -24) (16 16 32) RED BLUE The intermission will be viewed from this point. Target an info_notnull for the view direction. +RED - In a Siege game, the intermission will happen here if the Red (attacking) team wins +BLUE - In a Siege game, the intermission will happen here if the Blue (defending) team wins */ void SP_info_player_intermission( gentity_t *ent ) { } +/*QUAKED info_player_intermission_red (1 0 1) (-16 -16 -24) (16 16 32) +The intermission will be viewed from this point. Target an info_notnull for the view direction. + +In a Siege game, the intermission will happen here if the Red (attacking) team wins +target - ent to look at +target2 - ents to use when this intermission point is chosen +*/ +void SP_info_player_intermission_red( gentity_t *ent ) { + +} + +/*QUAKED info_player_intermission_blue (1 0 1) (-16 -16 -24) (16 16 32) +The intermission will be viewed from this point. Target an info_notnull for the view direction. + +In a Siege game, the intermission will happen here if the Blue (defending) team wins +target - ent to look at +target2 - ents to use when this intermission point is chosen +*/ +void SP_info_player_intermission_blue( gentity_t *ent ) { + +} + #define JMSABER_RESPAWN_TIME 20000 //in case it gets stuck somewhere no one can reach void ThrowSaberToAttacker(gentity_t *self, gentity_t *attacker) @@ -595,7 +651,7 @@ SelectRandomFurthestSpawnPoint Chooses a player start, deathmatch start, etc ============ */ -gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { +gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles, team_t team ) { gentity_t *spot; vec3_t delta; float dist; @@ -606,42 +662,89 @@ gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, ve numSpots = 0; spot = NULL; - while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { - if ( SpotWouldTelefrag( spot ) ) { - continue; + //in Team DM, look for a team start spot first, if any + if ( g_gametype.integer == GT_TEAM + && team != TEAM_FREE + && team != TEAM_SPECTATOR ) + { + char *classname = NULL; + if ( team == TEAM_RED ) + { + classname = "info_player_start_red"; } - VectorSubtract( spot->s.origin, avoidPoint, delta ); - dist = VectorLength( delta ); - for (i = 0; i < numSpots; i++) { - if ( dist > list_dist[i] ) { - if ( numSpots >= 64 ) - numSpots = 64-1; - for (j = numSpots; j > i; j--) { - list_dist[j] = list_dist[j-1]; - list_spot[j] = list_spot[j-1]; + else + { + classname = "info_player_start_blue"; + } + while ((spot = G_Find (spot, FOFS(classname), classname)) != NULL) { + if ( SpotWouldTelefrag( spot ) ) { + continue; + } + VectorSubtract( spot->s.origin, avoidPoint, delta ); + dist = VectorLength( delta ); + for (i = 0; i < numSpots; i++) { + if ( dist > list_dist[i] ) { + if ( numSpots >= 64 ) + numSpots = 64-1; + for (j = numSpots; j > i; j--) { + list_dist[j] = list_dist[j-1]; + list_spot[j] = list_spot[j-1]; + } + list_dist[i] = dist; + list_spot[i] = spot; + numSpots++; + if (numSpots > 64) + numSpots = 64; + break; } - list_dist[i] = dist; - list_spot[i] = spot; + } + if (i >= numSpots && numSpots < 64) { + list_dist[numSpots] = dist; + list_spot[numSpots] = spot; numSpots++; - if (numSpots > 64) - numSpots = 64; - break; } } - if (i >= numSpots && numSpots < 64) { - list_dist[numSpots] = dist; - list_spot[numSpots] = spot; - numSpots++; - } } - if (!numSpots) { - spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch"); - if (!spot) - G_Error( "Couldn't find a spawn point" ); - VectorCopy (spot->s.origin, origin); - origin[2] += 9; - VectorCopy (spot->s.angles, angles); - return spot; + + if ( !numSpots ) + {//couldn't find any of the above + while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { + if ( SpotWouldTelefrag( spot ) ) { + continue; + } + VectorSubtract( spot->s.origin, avoidPoint, delta ); + dist = VectorLength( delta ); + for (i = 0; i < numSpots; i++) { + if ( dist > list_dist[i] ) { + if ( numSpots >= 64 ) + numSpots = 64-1; + for (j = numSpots; j > i; j--) { + list_dist[j] = list_dist[j-1]; + list_spot[j] = list_spot[j-1]; + } + list_dist[i] = dist; + list_spot[i] = spot; + numSpots++; + if (numSpots > 64) + numSpots = 64; + break; + } + } + if (i >= numSpots && numSpots < 64) { + list_dist[numSpots] = dist; + list_spot[numSpots] = spot; + numSpots++; + } + } + if (!numSpots) { + spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch"); + if (!spot) + G_Error( "Couldn't find a spawn point" ); + VectorCopy (spot->s.origin, origin); + origin[2] += 9; + VectorCopy (spot->s.angles, angles); + return spot; + } } // select a random spot from the spawn points furthest away @@ -748,8 +851,8 @@ SelectSpawnPoint Chooses a player start, deathmatch start, etc ============ */ -gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { - return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles ); +gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles, team_t team ) { + return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles, team ); /* gentity_t *spot; @@ -788,7 +891,7 @@ Try to find a spawn point marked 'initial', otherwise use normal spawn selection. ============ */ -gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) { +gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles, team_t team ) { gentity_t *spot; spot = NULL; @@ -799,7 +902,7 @@ gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) { } if ( !spot || SpotWouldTelefrag( spot ) ) { - return SelectSpawnPoint( vec3_origin, origin, angles ); + return SelectSpawnPoint( vec3_origin, origin, angles, team ); } VectorCopy (spot->s.origin, origin); @@ -1344,8 +1447,14 @@ qboolean G_SaberModelSetup(gentity_t *ent) trap_G2API_SetSkin(ent->client->weaponGhoul2[i], 0, ent->client->saber[i].skin, ent->client->saber[i].skin); } - // bolt to right hand for 0, or left hand for 1 - trap_G2API_SetBoltInfo(ent->client->weaponGhoul2[i], 0, i); + if (ent->client->saber[i].saberFlags & SFL_BOLT_TO_WRIST) + { + trap_G2API_SetBoltInfo(ent->client->weaponGhoul2[i], 0, 3+i); + } + else + { // bolt to right hand for 0, or left hand for 1 + trap_G2API_SetBoltInfo(ent->client->weaponGhoul2[i], 0, i); + } //Add all the bolt points while (j < ent->client->saber[i].numBlades) @@ -1721,6 +1830,10 @@ void SetupGameGhoul2Model(gentity_t *ent, char *modelname, char *skinName) //jetpack bolted to must always be third. trap_G2API_AddBolt(ent->ghoul2, 0, "*chestg"); + //claw bolts + trap_G2API_AddBolt(ent->ghoul2, 0, "*r_hand_cap_r_arm"); + trap_G2API_AddBolt(ent->ghoul2, 0, "*l_hand_cap_l_arm"); + trap_G2API_SetBoneAnim(ent->ghoul2, 0, "model_root", 0, 12, BONE_ANIM_OVERRIDE_LOOP, 1.0f, level.time, -1, -1); trap_G2API_SetBoneAngles(ent->ghoul2, 0, "upper_lumbar", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); trap_G2API_SetBoneAngles(ent->ghoul2, 0, "cranium", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, NULL, 0, level.time); @@ -1783,8 +1896,8 @@ void ClientUserinfoChanged( int clientNum ) { gclient_t *client; char c1[MAX_INFO_STRING]; char c2[MAX_INFO_STRING]; - char redTeam[MAX_INFO_STRING]; - char blueTeam[MAX_INFO_STRING]; +// char redTeam[MAX_INFO_STRING]; +// char blueTeam[MAX_INFO_STRING]; char userinfo[MAX_INFO_STRING]; char className[MAX_QPATH]; //name of class type to use in siege char saberName[MAX_QPATH]; @@ -2074,8 +2187,8 @@ void ClientUserinfoChanged( int clientNum ) { strcpy(c1, Info_ValueForKey( userinfo, "color1" )); strcpy(c2, Info_ValueForKey( userinfo, "color2" )); - strcpy(redTeam, Info_ValueForKey( userinfo, "g_redteam" )); - strcpy(blueTeam, Info_ValueForKey( userinfo, "g_blueteam" )); +// strcpy(redTeam, Info_ValueForKey( userinfo, "g_redteam" )); +// strcpy(blueTeam, Info_ValueForKey( userinfo, "g_blueteam" )); // send over a subset of the userinfo keys so other clients can // print scoreboards, display models, and play custom sounds @@ -2087,14 +2200,14 @@ void ClientUserinfoChanged( int clientNum ) { } else { if (g_gametype.integer == GT_SIEGE) { //more crap to send - s = va("n\\%s\\t\\%i\\model\\%s\\g_redteam\\%s\\g_blueteam\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d\\siegeclass\\%s\\st\\%s\\st2\\%s\\dt\\%i\\sdt\\%i", - client->pers.netname, client->sess.sessionTeam, model, redTeam, blueTeam, c1, c2, + s = va("n\\%s\\t\\%i\\model\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d\\siegeclass\\%s\\st\\%s\\st2\\%s\\dt\\%i\\sdt\\%i", + client->pers.netname, client->sess.sessionTeam, model, c1, c2, client->pers.maxHealth, client->sess.wins, client->sess.losses, teamTask, teamLeader, className, saberName, saber2Name, client->sess.duelTeam, client->sess.siegeDesiredTeam); } else { - s = va("n\\%s\\t\\%i\\model\\%s\\g_redteam\\%s\\g_blueteam\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d\\st\\%s\\st2\\%s\\dt\\%i", - client->pers.netname, client->sess.sessionTeam, model, redTeam, blueTeam, c1, c2, + s = va("n\\%s\\t\\%i\\model\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d\\st\\%s\\st2\\%s\\dt\\%i", + client->pers.netname, client->sess.sessionTeam, model, c1, c2, client->pers.maxHealth, client->sess.wins, client->sess.losses, teamTask, teamLeader, saberName, saber2Name, client->sess.duelTeam); } } @@ -2147,6 +2260,7 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { // char *areabits; gclient_t *client; char userinfo[MAX_INFO_STRING]; + char IPstring[32]={0}; gentity_t *ent; gentity_t *te; @@ -2156,6 +2270,9 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { // check to see if they are on the banned IP list value = Info_ValueForKey (userinfo, "ip"); + Q_strncpyz(IPstring, value, sizeof(IPstring) ); + + if ( G_FilterPacket( value ) ) { return "Banned."; } @@ -2190,6 +2307,9 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { } G_ReadSessionData( client ); + client->sess.IPstring[0] = 0; + Q_strncpyz(client->sess.IPstring, IPstring, sizeof(client->sess.IPstring) ); + if (g_gametype.integer == GT_SIEGE && (firstTime || level.newSession)) { //if this is the first time then auto-assign a desired siege team and show briefing for that team @@ -2225,6 +2345,7 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { // get and distribute relevent paramters G_LogPrintf( "ClientConnect: %i\n", clientNum ); ClientUserinfoChanged( clientNum ); + G_LogPrintf( "%s connected with IP: %s\n", client->pers.netname, client->sess.IPstring ); // don't do the "xxx connected" messages if they were caried over from previous level if ( firstTime ) { @@ -2639,7 +2760,7 @@ tryTorso: f = torsoAnim; - BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, f, &animSpeedScale, self->client->ps.brokenLimbs); + BG_SaberStartTransAnim(self->s.number, self->client->ps.fd.saberAnimLevel, self->client->ps.weapon, f, &animSpeedScale, self->client->ps.brokenLimbs); animSpeed = 50.0f / bgAllAnims[self->localAnimIndex].anims[f].frameLerp; lAnimSpeedScale = (animSpeed *= animSpeedScale); @@ -2916,7 +3037,7 @@ void ClientSpawn(gentity_t *ent) { { //dual ent->client->ps.fd.saberAnimLevelBase = ent->client->ps.fd.saberAnimLevel = ent->client->ps.fd.saberDrawAnimLevel = SS_DUAL; } - else if (ent->client->saber[0].twoHanded) + else if ((ent->client->saber[0].saberFlags&SFL_TWO_HANDED)) { //staff ent->client->ps.fd.saberAnimLevel = ent->client->ps.fd.saberDrawAnimLevel = SS_STAFF; } @@ -2938,6 +3059,15 @@ void ClientSpawn(gentity_t *ent) { ent->client->ps.fd.saberAnimLevelBase = ent->client->ps.fd.saberAnimLevel = ent->client->ps.fd.saberDrawAnimLevel = ent->client->sess.saberLevel = ent->client->ps.fd.forcePowerLevel[FP_SABER_OFFENSE]; } } + if ( g_gametype.integer != GT_SIEGE ) + { + //let's just make sure the styles we chose are cool + if ( !WP_SaberStyleValidForSaber( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, ent->client->ps.fd.saberAnimLevel ) ) + { + WP_UseFirstValidSaberStyle( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, &ent->client->ps.fd.saberAnimLevel ); + ent->client->ps.fd.saberAnimLevelBase = ent->client->saberCycleQueue = ent->client->ps.fd.saberAnimLevel; + } + } } l = 0; @@ -3005,12 +3135,12 @@ void ClientSpawn(gentity_t *ent) { // the first spawn should be at a good looking spot if ( !client->pers.initialSpawn && client->pers.localClient ) { client->pers.initialSpawn = qtrue; - spawnPoint = SelectInitialSpawnPoint( spawn_origin, spawn_angles ); + spawnPoint = SelectInitialSpawnPoint( spawn_origin, spawn_angles, client->sess.sessionTeam ); } else { // don't spawn near existing origin if possible spawnPoint = SelectSpawnPoint ( client->ps.origin, - spawn_origin, spawn_angles); + spawn_origin, spawn_angles, client->sess.sessionTeam ); } } @@ -3755,6 +3885,7 @@ void ClientDisconnect( int clientNum ) { } G_LogPrintf( "ClientDisconnect: %i\n", clientNum ); + G_LogPrintf( "%s disconnected with IP: %s\n", ent->client->pers.netname, ent->client->sess.IPstring ); // if we are playing in tourney mode, give a win to the other player and clear his frags for this round if ( (g_gametype.integer == GT_DUEL ) diff --git a/codemp/game/g_cmds.c b/codemp/game/g_cmds.c index 2a7f2ee..ff6a5a3 100644 --- a/codemp/game/g_cmds.c +++ b/codemp/game/g_cmds.c @@ -521,6 +521,56 @@ void Cmd_TeamTask_f( gentity_t *ent ) { ClientUserinfoChanged(client); } +extern void AddIP( char *str ); +extern vmCvar_t g_autoKickTKSpammers; +extern vmCvar_t g_autoBanTKSpammers; +void G_CheckTKAutoKickBan( gentity_t *ent ) +{ + if ( !ent || !ent->client || ent->s.number >= MAX_CLIENTS ) + { + return; + } + + if ( g_autoKickTKSpammers.integer > 0 + || g_autoBanTKSpammers.integer > 0 ) + { + ent->client->sess.TKCount++; + if ( g_autoBanTKSpammers.integer > 0 + && ent->client->sess.TKCount >= g_autoBanTKSpammers.integer ) + { + if ( ent->client->sess.IPstring ) + {//ban their IP + AddIP( ent->client->sess.IPstring ); + } + + trap_SendServerCommand( -1, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStringEdString("MP_SVGAME_ADMIN", "TKBAN")) ); + //Com_sprintf ( level.voteString, sizeof(level.voteString ), "clientkick %d", ent->s.number ); + //Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "kick %s", ent->client->pers.netname ); + //trap_SendConsoleCommand( EXEC_INSERT, va( "banClient %d\n", ent->s.number ) ); + trap_SendConsoleCommand( EXEC_INSERT, va( "clientkick %d\n", ent->s.number ) ); + return; + } + if ( g_autoKickTKSpammers.integer > 0 + && ent->client->sess.TKCount >= g_autoKickTKSpammers.integer ) + { + trap_SendServerCommand( -1, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStringEdString("MP_SVGAME_ADMIN", "TKKICK")) ); + //Com_sprintf ( level.voteString, sizeof(level.voteString ), "clientkick %d", ent->s.number ); + //Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "kick \"%s\"\n", ent->client->pers.netname ); + trap_SendConsoleCommand( EXEC_INSERT, va( "clientkick %d\n", ent->s.number ) ); + return; + } + //okay, not gone (yet), but warn them... + if ( g_autoBanTKSpammers.integer > 0 + && (g_autoKickTKSpammers.integer <= 0 || g_autoBanTKSpammers.integer < g_autoKickTKSpammers.integer) ) + {//warn about ban + trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStringEdString("MP_SVGAME_ADMIN", "WARNINGTKBAN")) ); + } + else if ( g_autoKickTKSpammers.integer > 0 ) + {//warn about kick + trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStringEdString("MP_SVGAME_ADMIN", "WARNINGTKKICK")) ); + } + } +} /* @@ -528,6 +578,8 @@ void Cmd_TeamTask_f( gentity_t *ent ) { Cmd_Kill_f ================= */ +extern vmCvar_t g_autoKickKillSpammers; +extern vmCvar_t g_autoBanKillSpammers; void Cmd_Kill_f( gentity_t *ent ) { if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { return; @@ -546,6 +598,45 @@ void Cmd_Kill_f( gentity_t *ent ) { } } + if ( g_autoKickKillSpammers.integer > 0 + || g_autoBanKillSpammers.integer > 0 ) + { + ent->client->sess.killCount++; + if ( g_autoBanKillSpammers.integer > 0 + && ent->client->sess.killCount >= g_autoBanKillSpammers.integer ) + { + if ( ent->client->sess.IPstring ) + {//ban their IP + AddIP( ent->client->sess.IPstring ); + } + + trap_SendServerCommand( -1, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStringEdString("MP_SVGAME_ADMIN", "SUICIDEBAN")) ); + //Com_sprintf ( level.voteString, sizeof(level.voteString ), "clientkick %d", ent->s.number ); + //Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "kick %s", ent->client->pers.netname ); + //trap_SendConsoleCommand( EXEC_INSERT, va( "banClient %d\n", ent->s.number ) ); + trap_SendConsoleCommand( EXEC_INSERT, va( "clientkick %d\n", ent->s.number ) ); + return; + } + if ( g_autoKickKillSpammers.integer > 0 + && ent->client->sess.killCount >= g_autoKickKillSpammers.integer ) + { + trap_SendServerCommand( -1, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStringEdString("MP_SVGAME_ADMIN", "SUICIDEKICK")) ); + //Com_sprintf ( level.voteString, sizeof(level.voteString ), "clientkick %d", ent->s.number ); + //Com_sprintf ( level.voteDisplayString, sizeof(level.voteDisplayString), "kick %s", ent->client->pers.netname ); + trap_SendConsoleCommand( EXEC_INSERT, va( "clientkick %d\n", ent->s.number ) ); + return; + } + //okay, not gone (yet), but warn them... + if ( g_autoBanKillSpammers.integer > 0 + && (g_autoKickKillSpammers.integer <= 0 || g_autoBanKillSpammers.integer < g_autoKickKillSpammers.integer) ) + {//warn about ban + trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStringEdString("MP_SVGAME_ADMIN", "WARNINGSUICIDEBAN")) ); + } + else if ( g_autoKickKillSpammers.integer > 0 ) + {//warn about kick + trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStringEdString("MP_SVGAME_ADMIN", "WARNINGSUICIDEKICK")) ); + } + } ent->flags &= ~FL_GODMODE; ent->client->ps.stats[STAT_HEALTH] = ent->health = -999; player_die (ent, ent, ent, 100000, MOD_SUICIDE); @@ -1300,6 +1391,8 @@ argCheck: } } +extern qboolean WP_SaberStyleValidForSaber( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int saberAnimLevel ); +extern qboolean WP_UseFirstValidSaberStyle( saberInfo_t *saber1, saberInfo_t *saber2, int saberHolstered, int *saberAnimLevel ); qboolean G_SetSaber(gentity_t *ent, int saberNum, char *saberName, qboolean siegeOverride) { char truncSaberName[64]; @@ -1352,6 +1445,12 @@ qboolean G_SetSaber(gentity_t *ent, int saberNum, char *saberName, qboolean sieg strcpy(ent->client->sess.saber2Type, ent->client->saber[1].name); } + if ( !WP_SaberStyleValidForSaber( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, ent->client->ps.fd.saberAnimLevel ) ) + { + WP_UseFirstValidSaberStyle( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, &ent->client->ps.fd.saberAnimLevel ); + ent->client->ps.fd.saberAnimLevelBase = ent->client->saberCycleQueue = ent->client->ps.fd.saberAnimLevel; + } + return qtrue; } @@ -2105,19 +2204,27 @@ Cmd_CallTeamVote_f ================== */ void Cmd_CallTeamVote_f( gentity_t *ent ) { - int i, team, cs_offset; + int i, targetClientNum=ENTITYNUM_NONE, team, cs_offset; char arg1[MAX_STRING_TOKENS]; char arg2[MAX_STRING_TOKENS]; + if ( g_gametype.integer < GT_TEAM ) + { + trap_SendServerCommand( ent-g_entities, "print \"Cannot call a team vote in a non-team gametype!\n\"" ); + return; + } team = ent->client->sess.sessionTeam; if ( team == TEAM_RED ) cs_offset = 0; else if ( team == TEAM_BLUE ) cs_offset = 1; else + { + trap_SendServerCommand( ent-g_entities, "print \"Cannot call a team vote if not on a team!\n\"" ); return; + } - if ( !g_allowVote.integer ) { + if ( !g_allowTeamVote.integer ) { trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStringEdString("MP_SVGAME", "NOVOTE")) ); return; } @@ -2149,11 +2256,12 @@ void Cmd_CallTeamVote_f( gentity_t *ent ) { return; } - if ( !Q_stricmp( arg1, "leader" ) ) { - char netname[MAX_NETNAME], leader[MAX_NETNAME]; + if ( !Q_stricmp( arg1, "leader" ) + || !Q_stricmp( arg1, "kick" ) ) { + char netname[MAX_NETNAME], target[MAX_NETNAME]; if ( !arg2[0] ) { - i = ent->client->ps.clientNum; + targetClientNum = ent->client->ps.clientNum; } else { // numeric values are just slot numbers @@ -2162,20 +2270,20 @@ void Cmd_CallTeamVote_f( gentity_t *ent ) { break; } if ( i >= 3 || !arg2[i]) { - i = atoi( arg2 ); - if ( i < 0 || i >= level.maxclients ) { - trap_SendServerCommand( ent-g_entities, va("print \"Bad client slot: %i\n\"", i) ); + targetClientNum = atoi( arg2 ); + if ( targetClientNum < 0 || targetClientNum >= level.maxclients ) { + trap_SendServerCommand( ent-g_entities, va("print \"Bad client slot: %i\n\"", targetClientNum) ); return; } - if ( !g_entities[i].inuse ) { - trap_SendServerCommand( ent-g_entities, va("print \"Client %i is not active\n\"", i) ); + if ( !g_entities[targetClientNum].inuse ) { + trap_SendServerCommand( ent-g_entities, va("print \"Client %i is not active\n\"", targetClientNum) ); return; } } else { - Q_strncpyz(leader, arg2, sizeof(leader)); - Q_CleanStr(leader); + Q_strncpyz(target, arg2, sizeof(target)); + Q_CleanStr(target); for ( i = 0 ; i < level.maxclients ; i++ ) { if ( level.clients[i].pers.connected == CON_DISCONNECTED ) continue; @@ -2183,24 +2291,44 @@ void Cmd_CallTeamVote_f( gentity_t *ent ) { continue; Q_strncpyz(netname, level.clients[i].pers.netname, sizeof(netname)); Q_CleanStr(netname); - if ( !Q_stricmp(netname, leader) ) { + if ( !Q_stricmp(netname, target) ) + { + targetClientNum = i; break; } } - if ( i >= level.maxclients ) { + if ( targetClientNum >= level.maxclients ) { trap_SendServerCommand( ent-g_entities, va("print \"%s is not a valid player on your team.\n\"", arg2) ); return; } } } - Com_sprintf(arg2, sizeof(arg2), "%d", i); + if ( targetClientNum >= MAX_CLIENTS ) + {//wtf? + trap_SendServerCommand( ent-g_entities, va("print \"%s is not a valid player on your team.\n\"", arg2) ); + return; + } + if ( level.clients[targetClientNum].sess.sessionTeam != ent->client->sess.sessionTeam ) + {//can't call a team vote on someone not on your team! + trap_SendServerCommand( ent-g_entities, va("print \"Cannot call a team vote on someone not on your team (%s).\n\"", level.clients[targetClientNum].pers.netname) ); + return; + } + //just use the client number + Com_sprintf(arg2, sizeof(arg2), "%d", targetClientNum); } else { trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string.\n\"" ); - trap_SendServerCommand( ent-g_entities, "print \"Team vote commands are: leader .\n\"" ); + trap_SendServerCommand( ent-g_entities, "print \"Team vote commands are: leader OR kick .\n\"" ); return; } - Com_sprintf( level.teamVoteString[cs_offset], sizeof( level.teamVoteString[cs_offset] ), "%s %s", arg1, arg2 ); + if ( !Q_stricmp( "kick", arg1 ) ) + {//use clientkick and number (so they can't change their name) + Com_sprintf( level.teamVoteString[cs_offset], sizeof( level.teamVoteString[cs_offset] ), "clientkick %s", arg2 ); + } + else + {//just a number + Com_sprintf( level.teamVoteString[cs_offset], sizeof( level.teamVoteString[cs_offset] ), "%s %s", arg1, arg2 ); + } for ( i = 0 ; i < level.maxclients ; i++ ) { if ( level.clients[i].pers.connected == CON_DISCONNECTED ) @@ -2220,6 +2348,14 @@ void Cmd_CallTeamVote_f( gentity_t *ent ) { } ent->client->mGameFlags |= PSG_TEAMVOTED; + /* + if ( !Q_stricmp( "kick", arg1 ) ) + {//if you're voting to kick somebody, make them auto-vote yes + level.clients[targetClientNum].mGameFlags |= PSG_TEAMVOTED; + level.teamVoteYes[cs_offset]++; + } + */ + trap_SetConfigstring( CS_TEAMVOTE_TIME + cs_offset, va("%i", level.teamVoteTime[cs_offset] ) ); trap_SetConfigstring( CS_TEAMVOTE_STRING + cs_offset, level.teamVoteString[cs_offset] ); trap_SetConfigstring( CS_TEAMVOTE_YES + cs_offset, va("%i", level.teamVoteYes[cs_offset] ) ); @@ -2535,10 +2671,12 @@ void Cmd_ToggleSaber_f(gentity_t *ent) extern vmCvar_t d_saberStanceDebug; +extern qboolean WP_SaberCanTurnOffSomeBlades( saberInfo_t *saber ); void Cmd_SaberAttackCycle_f(gentity_t *ent) { int selectLevel = 0; - + qboolean usingSiegeStyle = qfalse; + if ( !ent || !ent->client ) { return; @@ -2552,31 +2690,44 @@ void Cmd_SaberAttackCycle_f(gentity_t *ent) if (ent->client->saber[0].model[0] && ent->client->saber[1].model[0]) { //no cycling for akimbo - if ( ent->client->ps.saberHolstered == 1 ) - {//have one holstered - //unholster it - G_Sound(ent, CHAN_AUTO, ent->client->saber[1].soundOn); - ent->client->ps.saberHolstered = 0; - //g_active should take care of this, but... - ent->client->ps.fd.saberAnimLevel = SS_DUAL; - } - else if ( ent->client->ps.saberHolstered == 0 ) - {//have none holstered - //holster it - G_Sound(ent, CHAN_AUTO, ent->client->saber[1].soundOff); - ent->client->ps.saberHolstered = 1; - //g_active should take care of this, but... - ent->client->ps.fd.saberAnimLevel = SS_FAST; - } + if ( WP_SaberCanTurnOffSomeBlades( &ent->client->saber[1] ) ) + {//can turn second saber off + if ( ent->client->ps.saberHolstered == 1 ) + {//have one holstered + //unholster it + G_Sound(ent, CHAN_AUTO, ent->client->saber[1].soundOn); + ent->client->ps.saberHolstered = 0; + //g_active should take care of this, but... + ent->client->ps.fd.saberAnimLevel = SS_DUAL; + } + else if ( ent->client->ps.saberHolstered == 0 ) + {//have none holstered + if ( (ent->client->saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//can't turn it off manually + } + else if ( ent->client->saber[1].bladeStyle2Start > 0 + && (ent->client->saber[1].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + {//can't turn it off manually + } + else + { + //turn it off + G_Sound(ent, CHAN_AUTO, ent->client->saber[1].soundOff); + ent->client->ps.saberHolstered = 1; + //g_active should take care of this, but... + ent->client->ps.fd.saberAnimLevel = SS_FAST; + } + } - if (d_saberStanceDebug.integer) - { - trap_SendServerCommand( ent-g_entities, va("print \"SABERSTANCEDEBUG: Attempted to toggle dual saber blade.\n\"") ); + if (d_saberStanceDebug.integer) + { + trap_SendServerCommand( ent-g_entities, va("print \"SABERSTANCEDEBUG: Attempted to toggle dual saber blade.\n\"") ); + } + return; } - return; } - - if (ent->client->saber[0].numBlades > 1 ) + else if (ent->client->saber[0].numBlades > 1 + && WP_SaberCanTurnOffSomeBlades( &ent->client->saber[0] ) ) { //use staff stance then. if ( ent->client->ps.saberHolstered == 1 ) {//second blade off @@ -2592,33 +2743,44 @@ void Cmd_SaberAttackCycle_f(gentity_t *ent) G_Sound(ent, CHAN_AUTO, ent->client->saber[0].soundOn); ent->client->ps.saberHolstered = 0; //g_active should take care of this, but... - if ( ent->client->saber[0].style != SS_NONE ) - { + if ( ent->client->saber[0].stylesForbidden ) + {//have a style we have to use + WP_UseFirstValidSaberStyle( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, &selectLevel ); if ( ent->client->ps.weaponTime <= 0 ) { //not busy, set it now - ent->client->ps.fd.saberAnimLevel = ent->client->saber[0].style; + ent->client->ps.fd.saberAnimLevel = selectLevel; } else { //can't set it now or we might cause unexpected chaining, so queue it - ent->client->saberCycleQueue = ent->client->saber[0].style; + ent->client->saberCycleQueue = selectLevel; } } } else if ( ent->client->ps.saberHolstered == 0 ) {//both blades on - //turn second one off - G_Sound(ent, CHAN_AUTO, ent->client->saber[0].soundOff); - ent->client->ps.saberHolstered = 1; - //g_active should take care of this, but... - if ( ent->client->saber[0].singleBladeStyle != SS_NONE ) + if ( (ent->client->saber[0].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE) ) + {//can't turn it off manually + } + else if ( ent->client->saber[0].bladeStyle2Start > 0 + && (ent->client->saber[0].saberFlags2&SFL2_NO_MANUAL_DEACTIVATE2) ) + {//can't turn it off manually + } + else { - if ( ent->client->ps.weaponTime <= 0 ) - { //not busy, set it now - ent->client->ps.fd.saberAnimLevel = ent->client->saber[0].singleBladeStyle; - } - else - { //can't set it now or we might cause unexpected chaining, so queue it - ent->client->saberCycleQueue = ent->client->saber[0].singleBladeStyle; + //turn second one off + G_Sound(ent, CHAN_AUTO, ent->client->saber[0].soundOff); + ent->client->ps.saberHolstered = 1; + //g_active should take care of this, but... + if ( ent->client->saber[0].singleBladeStyle != SS_NONE ) + { + if ( ent->client->ps.weaponTime <= 0 ) + { //not busy, set it now + ent->client->ps.fd.saberAnimLevel = ent->client->saber[0].singleBladeStyle; + } + else + { //can't set it now or we might cause unexpected chaining, so queue it + ent->client->saberCycleQueue = ent->client->saber[0].singleBladeStyle; + } } } } @@ -2644,6 +2806,8 @@ void Cmd_SaberAttackCycle_f(gentity_t *ent) { //we have a flag of useable stances so cycle through it instead int i = selectLevel+1; + usingSiegeStyle = qtrue; + while (i != selectLevel) { //cycle around upward til we hit the next style or end up back on this one if (i >= SS_NUM_SABER_STYLES) @@ -2692,6 +2856,12 @@ void Cmd_SaberAttackCycle_f(gentity_t *ent) } #endif */ + if ( !usingSiegeStyle ) + { + //make sure it's valid, change it if not + WP_UseFirstValidSaberStyle( &ent->client->saber[0], &ent->client->saber[1], ent->client->ps.saberHolstered, &selectLevel ); + } + if (ent->client->ps.weaponTime <= 0) { //not busy, set it now ent->client->ps.fd.saberAnimLevelBase = ent->client->ps.fd.saberAnimLevel = selectLevel; @@ -3068,6 +3238,8 @@ void ClientCommand( int clientNum ) { return; } + //note: these voice_cmds come from the ui/jamp/ingame_voicechat.menu menu file... + // the strings are in strings/English/menus.str and all start with "VC_" if (Q_stricmp(cmd, "voice_cmd") == 0) { Cmd_VoiceCommand_f(ent); diff --git a/codemp/game/g_combat.c b/codemp/game/g_combat.c index 306fcd4..ced984e 100644 --- a/codemp/game/g_combat.c +++ b/codemp/game/g_combat.c @@ -11,7 +11,8 @@ extern qboolean G_FlyVehicleDestroySurface( gentity_t *veh, int surface ); extern void G_VehicleSetDamageLocFlags( gentity_t *veh, int impactDir, int deathPoint ); extern void G_VehUpdateShields( gentity_t *targ ); extern void G_LetGoOfWall( gentity_t *ent ); - +extern void BG_ClearRocketLock( playerState_t *ps ); +extern void G_CheckTKAutoKickBan( gentity_t *ent ); //rww - pd void BotDamageNotification(gclient_t *bot, gentity_t *attacker); //end rww @@ -2053,6 +2054,56 @@ void G_AddPowerDuelLoserScore(int team, int score) } } + +extern qboolean g_noPDuelCheck; +void G_BroadcastObit( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int killer, int meansOfDeath, int wasInVehicle, qboolean wasJediMaster ) +{ + // broadcast the death event to everyone + if (self->s.eType != ET_NPC && !g_noPDuelCheck) + { + gentity_t *ent; + + ent = G_TempEntity( self->r.currentOrigin, EV_OBITUARY ); + ent->s.eventParm = meansOfDeath; + ent->s.otherEntityNum = self->s.number; + if ( attacker ) + { + ent->s.otherEntityNum2 = attacker->s.number; + } + else + {//??? + ent->s.otherEntityNum2 = killer; + } + if ( inflictor + && !Q_stricmp( "vehicle_proj", inflictor->classname ) ) + {//a vehicle missile + ent->s.eventParm = MOD_VEHICLE; + //store index into g_vehWeaponInfo + ent->s.weapon = inflictor->s.otherEntityNum2+1; + //store generic rocket or blaster type of missile + ent->s.generic1 = inflictor->s.weapon; + } + if ( wasInVehicle && self->s.number < MAX_CLIENTS ) + {//target is in a vehicle, store the entnum + ent->s.lookTarget = wasInVehicle; + } + if ( attacker ) + { + if ( attacker->s.m_iVehicleNum && attacker->s.number < MAX_CLIENTS ) + {//target is in a vehicle, store the entnum + ent->s.brokenLimbs = attacker->s.m_iVehicleNum; + } + else if ( ent->s.lookTarget + && !Q_stricmp( "func_rotating", attacker->classname ) ) + {//my vehicle was killed by a func_rotating, probably an asteroid, so... + ent->s.saberInFlight = qtrue; + } + } + ent->r.svFlags = SVF_BROADCAST; // send to everyone + ent->s.isJediMaster = wasJediMaster; + } +} + /* ================== player_die @@ -2069,9 +2120,7 @@ extern void Rancor_DropVictim( gentity_t *self ); extern qboolean g_dontFrickinCheck; extern qboolean g_endPDuel; -extern qboolean g_noPDuelCheck; void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath ) { - gentity_t *ent; int anim; int contents; int killer; @@ -2079,6 +2128,10 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int char *killerName, *obit; qboolean wasJediMaster = qfalse; int sPMType = 0; + int wasInVehicle = 0; + gentity_t *tempInflictorEnt = inflictor; + qboolean tempInflictor = qfalse; + int actualMOD = meansOfDeath; if ( self->client->ps.pm_type == PM_DEAD ) { return; @@ -2130,6 +2183,18 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int if (murderPilot->inuse && murderPilot->client) { //give the pilot of the offending vehicle credit for the kill murderer = murderPilot; + actualMOD = self->client->otherKillerMOD; + if ( self->client->otherKillerVehWeapon > 0 ) + { + tempInflictorEnt = G_Spawn(); + if ( tempInflictorEnt ) + {//fake up the inflictor + tempInflictor = qtrue; + tempInflictorEnt->classname = "vehicle_proj"; + tempInflictorEnt->s.otherEntityNum2 = self->client->otherKillerVehWeapon-1; + tempInflictorEnt->s.weapon = self->client->otherKillerWeaponType; + } + } } } } @@ -2171,9 +2236,16 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int } //no valid murderer.. just use self I guess - if (!murderer) + if (!murderer) { - murderer = self; + if ( !attacker ) + { + murderer = self; + } + else + { + murderer = attacker; + } } if ( self->m_pVehicle->m_pVehicleInfo->hideRider ) @@ -2181,11 +2253,10 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int killEnt = (gentity_t *)self->m_pVehicle->m_pPilot; if (killEnt && killEnt->inuse && killEnt->client) { - G_Damage(killEnt, murderer, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, MOD_BLASTER); + G_Damage(killEnt, tempInflictorEnt, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, actualMOD); } if ( self->m_pVehicle->m_pVehicleInfo ) - {//FIXME: this wile got stuck in an endless loop, that's BAD!! This method SUCKS (not initting "i", not incrementing it or using it directly, all sorts of badness), so I'm rewriting it - //while (i < self->m_pVehicle->m_iNumPassengers) + { int numPass = self->m_pVehicle->m_iNumPassengers; for ( i = 0; i < numPass && self->m_pVehicle->m_iNumPassengers; i++ ) {//go through and eject the last passenger @@ -2195,7 +2266,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int self->m_pVehicle->m_pVehicleInfo->Eject(self->m_pVehicle, (bgEntity_t *)killEnt, qtrue); if ( killEnt->inuse && killEnt->client ) { - G_Damage(killEnt, murderer, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, MOD_BLASTER); + G_Damage(killEnt, tempInflictorEnt, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, actualMOD); } } } @@ -2205,8 +2276,15 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int if (killEnt && killEnt->inuse && killEnt->client) { killEnt->flags &= ~FL_UNDYING; - G_Damage(killEnt, murderer, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, MOD_BLASTER); + G_Damage(killEnt, tempInflictorEnt, murderer, NULL, killEnt->client->ps.origin, 99999, DAMAGE_NO_PROTECTION, actualMOD); } + if ( tempInflictor ) + { + G_FreeEntity( tempInflictorEnt ); + } + tempInflictorEnt = inflictor; + tempInflictor = qfalse; + actualMOD = meansOfDeath; } self->client->ps.emplacedIndex = 0; @@ -2241,6 +2319,8 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int if (veh->inuse && veh->client && veh->m_pVehicle) { + //remember it for obit + wasInVehicle = (veh->m_pVehicle->m_pVehicleInfo-&g_vehicleInfo[0]); veh->m_pVehicle->m_pVehicleInfo->Eject(veh->m_pVehicle, (bgEntity_t *)self, qtrue); if (veh->m_pVehicle->m_pVehicleInfo->type == VH_FIGHTER) @@ -2376,6 +2456,9 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); self->client->ps.heldByClient = 0; self->client->beingThrown = 0; self->client->doingThrow = 0; + BG_ClearRocketLock( &self->client->ps ); + self->client->isHacking = 0; + self->client->ps.hackingTime = 0; if (inflictor && inflictor->activator && !inflictor->client && !attacker->client && inflictor->activator->client && inflictor->activator->inuse && @@ -2397,10 +2480,25 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); self->client->ps.fd.forceDeactivateAll = 1; if ((self == attacker || !attacker->client) && - (meansOfDeath == MOD_CRUSH || meansOfDeath == MOD_FALLING || meansOfDeath == MOD_TRIGGER_HURT || meansOfDeath == MOD_UNKNOWN) && + (meansOfDeath == MOD_CRUSH || meansOfDeath == MOD_FALLING || meansOfDeath == MOD_TRIGGER_HURT || meansOfDeath == MOD_UNKNOWN || meansOfDeath == MOD_SUICIDE) && self->client->ps.otherKillerTime > level.time) - { + {//remember who last attacked us attacker = &g_entities[self->client->ps.otherKiller]; + if ( self->client->otherKillerMOD != MOD_UNKNOWN ) + { + actualMOD = self->client->otherKillerMOD; + } + if ( self->client->otherKillerVehWeapon > 0 ) + { + tempInflictorEnt = G_Spawn(); + if ( tempInflictorEnt ) + {//fake up the inflictor + tempInflictor = qtrue; + tempInflictorEnt->classname = "vehicle_proj"; + tempInflictorEnt->s.otherEntityNum2 = self->client->otherKillerVehWeapon-1; + tempInflictorEnt->s.weapon = self->client->otherKillerWeaponType; + } + } } // check for an almost capture @@ -2462,15 +2560,10 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); G_LogWeaponFrag(killer, self->s.number); } - // broadcast the death event to everyone - if (self->s.eType != ET_NPC && !g_noPDuelCheck) + G_BroadcastObit( self, inflictor, attacker, killer, actualMOD, wasInVehicle, wasJediMaster ); + if ( tempInflictor ) { - ent = G_TempEntity( self->r.currentOrigin, EV_OBITUARY ); - ent->s.eventParm = meansOfDeath; - ent->s.otherEntityNum = self->s.number; - ent->s.otherEntityNum2 = killer; - ent->r.svFlags = SVF_BROADCAST; // send to everyone - ent->s.isJediMaster = wasJediMaster; + G_FreeEntity( tempInflictorEnt ); } self->enemy = attacker; @@ -2482,13 +2575,34 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); self->client->ps.fd.suicides++; } - if (attacker && attacker->client) { - attacker->client->lastkilled_client = self->s.number; + if (attacker && attacker->client) + {//killed by a client of some kind (player, NPC or vehicle) + if ( self->s.number < MAX_CLIENTS ) + {//only remember real clients + attacker->client->lastkilled_client = self->s.number; + } G_CheckVictoryScript(attacker); - if ( attacker == self || OnSameTeam (self, attacker ) ) { - if (g_gametype.integer == GT_DUEL) + if ( self->s.number >= MAX_CLIENTS//not a player client + && self->client //an NPC client + && self->client->NPC_class != CLASS_VEHICLE //not a vehicle + && self->s.m_iVehicleNum )//a droid in a vehicle + {//no credit for droid, you do get credit for the vehicle kill and the pilot (2 points) + } + else if ( meansOfDeath == MOD_COLLISION + || meansOfDeath == MOD_VEH_EXPLOSION ) + {//no credit for veh-veh collisions? + } + else if ( attacker == self || OnSameTeam (self, attacker ) ) + {//killed self or teammate + if ( meansOfDeath == MOD_FALLING + && attacker != self + && attacker->s.number < MAX_CLIENTS + && attacker->s.m_iVehicleNum ) + {//crushed by a teammate in a vehicle, no penalty + } + else if (g_gametype.integer == GT_DUEL) { //in duel, if you kill yourself, the person you are dueling against gets a kill for it int otherClNum = -1; if (level.sortedClients[0] == self->s.number) @@ -2514,6 +2628,12 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); else { AddScore( attacker, self->r.currentOrigin, -1 ); + if ( attacker != self + && attacker->s.number < MAX_CLIENTS + && self->s.number < MAX_CLIENTS ) + { + G_CheckTKAutoKickBan( attacker ); + } } if (g_gametype.integer == GT_JEDIMASTER) { @@ -2525,7 +2645,9 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); self->client->ps.isJediMaster = qfalse; } } - } else { + } + else + { if (g_gametype.integer == GT_JEDIMASTER) { if ((attacker->client && attacker->client->ps.isJediMaster) || @@ -2576,7 +2698,13 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); attacker->client->lastKillTime = level.time; } - } else { + } + else if ( meansOfDeath == MOD_COLLISION + || meansOfDeath == MOD_VEH_EXPLOSION ) + {//no credit for veh-veh collisions? + } + else + { if (self->client && self->client->ps.isJediMaster) { //killed ourself so return the saber to the original position //(to avoid people jumping off ledges and making the saber @@ -3239,8 +3367,10 @@ void G_GetDismemberBolt(gentity_t *self, vec3_t boltPoint, int limbType) boltAngles[2] = -boltMatrix.matrix[2][1]; te = G_TempEntity( boltPoint, EV_SABER_HIT ); - te->s.otherEntityNum = ENTITYNUM_NONE; - te->s.otherEntityNum2 = self->s.number; + te->s.otherEntityNum = self->s.number; + te->s.otherEntityNum2 = ENTITYNUM_NONE; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum VectorCopy(boltPoint, te->s.origin); VectorCopy(boltAngles, te->s.angles); @@ -4237,6 +4367,11 @@ void G_LocationBasedDamageModifier(gentity_t *ent, vec3_t point, int mod, int df return; } + if ( ent->client && ent->client->NPC_class == CLASS_VEHICLE ) + {//no location-based damage on vehicles + return; + } + if ((d_saberGhoul2Collision.integer && ent->client && ent->client->g2LastSurfaceTime == level.time && mod == MOD_SABER) || //using ghoul2 collision? Then if the mod is a saber we should have surface data from the last hit (unless thrown). (d_projectileGhoul2Collision.integer && ent->client && ent->client->g2LastSurfaceTime == level.time)) //It's safe to assume we died from the projectile that just set our surface index. So, go ahead and use that as the surf I guess. { @@ -4325,6 +4460,89 @@ void G_Knockdown( gentity_t *victim ) } } +void G_ApplyVehicleOtherKiller( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, int mod, qboolean vehicleDying ) +{ + if ( targ && targ->client && attacker ) + { + if ( targ->client->ps.otherKillerDebounceTime > level.time ) + {//wait a minute, I already have a last damager + if ( targ->health < 0 + || (targ->m_pVehicle && targ->m_pVehicle->m_iRemovedSurfaces) ) + {//already dying? don't let credit transfer to anyone else + return; + } + //otherwise, still alive, so, fine, use this damager... + } + + targ->client->ps.otherKiller = attacker->s.number; + targ->client->ps.otherKillerTime = level.time + 25000; + targ->client->ps.otherKillerDebounceTime = level.time + 25000; + targ->client->otherKillerMOD = mod; + if ( inflictor && !Q_stricmp( "vehicle_proj", inflictor->classname ) ) + { + targ->client->otherKillerVehWeapon = inflictor->s.otherEntityNum2+1; + targ->client->otherKillerWeaponType = inflictor->s.weapon; + } + else + { + targ->client->otherKillerVehWeapon = 0; + targ->client->otherKillerWeaponType = WP_NONE; + } + if ( vehicleDying ) + { + //propogate otherkiller down to pilot and passengers so that proper credit is given if they suicide or eject... + if ( targ->m_pVehicle ) + { + int passNum; + if ( targ->m_pVehicle->m_pPilot ) + { + gentity_t *pilot = &g_entities[targ->m_pVehicle->m_pPilot->s.number]; + if ( pilot->client ) + { + pilot->client->ps.otherKiller = targ->client->ps.otherKiller; + pilot->client->ps.otherKillerTime = targ->client->ps.otherKillerTime; + pilot->client->ps.otherKillerDebounceTime = targ->client->ps.otherKillerDebounceTime; + pilot->client->otherKillerMOD = targ->client->otherKillerMOD; + pilot->client->otherKillerVehWeapon = targ->client->otherKillerVehWeapon; + pilot->client->otherKillerWeaponType = targ->client->otherKillerWeaponType; + } + } + for ( passNum = 0; passNum < targ->m_pVehicle->m_iNumPassengers; passNum++ ) + { + gentity_t *pass = &g_entities[targ->m_pVehicle->m_ppPassengers[passNum]->s.number]; + if ( pass->client ) + { + pass->client->ps.otherKiller = targ->client->ps.otherKiller; + pass->client->ps.otherKillerTime = targ->client->ps.otherKillerTime; + pass->client->ps.otherKillerDebounceTime = targ->client->ps.otherKillerDebounceTime; + pass->client->otherKillerMOD = targ->client->otherKillerMOD; + pass->client->otherKillerVehWeapon = targ->client->otherKillerVehWeapon; + pass->client->otherKillerWeaponType = targ->client->otherKillerWeaponType; + } + } + } + } + } +} + +qboolean G_CheckVehicleNPCTeamDamage( gentity_t *ent ) +{ + //NOTE: this covers both the vehicle and NPCs riding vehicles (droids) + if ( !ent || ent->s.number < MAX_CLIENTS || ent->s.eType != ET_NPC ) + {//not valid or a real client or not an NPC + return qfalse; + } + + if ( ent->s.NPC_class != CLASS_VEHICLE ) + {//regualar NPC + if ( ent->s.m_iVehicleNum ) + {//an NPC in a vehicle, check for team damage + return qtrue; + } + } + return qfalse; +} + /* ============ T_Damage @@ -4448,10 +4666,13 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, mod != MOD_CONC_ALT && mod != MOD_SABER && mod != MOD_TURBLAST && + mod != MOD_TARGET_LASER && mod != MOD_SUICIDE && mod != MOD_FALLING && mod != MOD_CRUSH && mod != MOD_TELEFRAG && + mod != MOD_COLLISION && + mod != MOD_VEH_EXPLOSION && mod != MOD_TRIGGER_HURT) { if ( mod != MOD_MELEE || !G_HeavyMelee( attacker ) ) @@ -4499,9 +4720,12 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, } } - if (targ && targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE))) - { - damage *= 0.5; + if ( !(dflags & DAMAGE_NO_PROTECTION) ) + {//rage overridden by no_protection + if (targ && targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE))) + { + damage *= 0.5; + } } // the intermission has allready been qualified for, so don't @@ -4527,7 +4751,11 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, } // reduce damage by the attacker's handicap value // unless they are rocket jumping - if ( attacker->client && attacker != targ && attacker->s.eType == ET_PLAYER ) { + if ( attacker->client + && attacker != targ + && attacker->s.eType == ET_PLAYER + && g_gametype.integer != GT_SIEGE ) + { max = attacker->client->ps.stats[STAT_MAX_HEALTH]; damage = damage * max / 100; } @@ -4590,7 +4818,48 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, if (mod == MOD_SABER) { - VectorScale (dir, (g_knockback.value * (float)knockback / mass)*g_saberDmgVelocityScale.integer, kvel); + float saberKnockbackScale = g_saberDmgVelocityScale.value; + if ( (dflags&DAMAGE_SABER_KNOCKBACK1) + || (dflags&DAMAGE_SABER_KNOCKBACK2) ) + {//saber does knockback, scale it by the right number + if ( !saberKnockbackScale ) + { + saberKnockbackScale = 1.0f; + } + if ( attacker + && attacker->client ) + { + if ( (dflags&DAMAGE_SABER_KNOCKBACK1) ) + { + if ( attacker && attacker->client ) + { + saberKnockbackScale *= attacker->client->saber[0].knockbackScale; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK1_B2) ) + { + if ( attacker && attacker->client ) + { + saberKnockbackScale *= attacker->client->saber[0].knockbackScale2; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK2) ) + { + if ( attacker && attacker->client ) + { + saberKnockbackScale *= attacker->client->saber[1].knockbackScale; + } + } + if ( (dflags&DAMAGE_SABER_KNOCKBACK2_B2) ) + { + if ( attacker && attacker->client ) + { + saberKnockbackScale *= attacker->client->saber[1].knockbackScale2; + } + } + } + } + VectorScale (dir, (g_knockback.value * (float)knockback / mass)*saberKnockbackScale, kvel); } else { @@ -4598,22 +4867,9 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, } VectorAdd (targ->client->ps.velocity, kvel, targ->client->ps.velocity); - if (attacker && attacker->client && attacker != targ) - { - float dur = 5000; - float dur2 = 100; - if (targ->client && targ->s.eType == ET_NPC && targ->s.NPC_class == CLASS_VEHICLE) - { - dur = 25000; - dur2 = 25000; - } - targ->client->ps.otherKiller = attacker->s.number; - targ->client->ps.otherKillerTime = level.time + dur; - targ->client->ps.otherKillerDebounceTime = level.time + dur2; - } // set the timer so that the other client can't cancel // out the movement immediately - if ( !targ->client->ps.pm_time && (g_saberDmgVelocityScale.integer || mod != MOD_SABER) ) { + if ( !targ->client->ps.pm_time && (g_saberDmgVelocityScale.integer || mod != MOD_SABER || (dflags&DAMAGE_SABER_KNOCKBACK1) || (dflags&DAMAGE_SABER_KNOCKBACK2) || (dflags&DAMAGE_SABER_KNOCKBACK1_B2) || (dflags&DAMAGE_SABER_KNOCKBACK2_B2) ) ) { int t; t = knockback * 2; @@ -4627,13 +4883,6 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, targ->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; } } - else if (targ->client && targ->s.eType == ET_NPC && targ->s.NPC_class == CLASS_VEHICLE && attacker != targ) - { - targ->client->ps.otherKiller = attacker->s.number; - targ->client->ps.otherKillerTime = level.time + 25000; - targ->client->ps.otherKillerDebounceTime = level.time + 25000; - } - if ( (g_trueJedi.integer || g_gametype.integer == GT_SIEGE) && client ) @@ -4838,6 +5087,25 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, if ( damage < 1 ) { damage = 1; } + + //store the attacker as the potential killer in case we die by other means + if ( targ->client && attacker && attacker != targ ) + { + if ( targ->s.eType == ET_NPC && targ->s.NPC_class == CLASS_VEHICLE) + {//vehicle + G_ApplyVehicleOtherKiller( targ, inflictor, attacker, mod, qfalse ); + } + else + {//other client + targ->client->ps.otherKiller = attacker->s.number; + targ->client->ps.otherKillerTime = level.time + 5000; + targ->client->ps.otherKillerDebounceTime = level.time + 100; + targ->client->otherKillerMOD = mod; + targ->client->otherKillerVehWeapon = 0; + targ->client->otherKillerWeaponType = WP_NONE; + } + } + take = damage; save = 0; @@ -4916,9 +5184,15 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, { if ( targ->locationDamage[surface] >= deathPoint) { //this area of the ship is now dead + qboolean wasDying = (targ->m_pVehicle->m_iRemovedSurfaces!=0); if ( G_FlyVehicleDestroySurface( targ, surface ) ) {//actually took off a surface G_VehicleSetDamageLocFlags( targ, surface, deathPoint ); + if ( !wasDying ) + {//always take credit for kill if they were healthy before + targ->client->ps.otherKillerDebounceTime = 0; + } + G_ApplyVehicleOtherKiller( targ, inflictor, attacker, mod, qtrue ); } } else @@ -5136,71 +5410,74 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, targ->client->lasthurt_mod = mod; } - if (take && targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_PROTECT))) - { - if (targ->client->ps.fd.forcePower) + if ( !(dflags & DAMAGE_NO_PROTECTION) ) + {//protect overridden by no_protection + if (take && targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_PROTECT))) { - int maxtake = take; - - //G_Sound(targ, CHAN_AUTO, protectHitSound); - if (targ->client->forcePowerSoundDebounce < level.time) + if (targ->client->ps.fd.forcePower) { - G_PreDefSound(targ->client->ps.origin, PDSOUND_PROTECTHIT); - targ->client->forcePowerSoundDebounce = level.time + 400; - } + int maxtake = take; - if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_1) - { - famt = 1; - hamt = 0.40; - - if (maxtake > 100) + //G_Sound(targ, CHAN_AUTO, protectHitSound); + if (targ->client->forcePowerSoundDebounce < level.time) { - maxtake = 100; + G_PreDefSound(targ->client->ps.origin, PDSOUND_PROTECTHIT); + targ->client->forcePowerSoundDebounce = level.time + 400; } - } - else if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_2) - { - famt = 0.5; - hamt = 0.60; - if (maxtake > 200) + if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_1) { - maxtake = 200; + famt = 1; + hamt = 0.40; + + if (maxtake > 100) + { + maxtake = 100; + } } - } - else if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_3) - { - famt = 0.25; - hamt = 0.80; - - if (maxtake > 400) + else if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_2) { - maxtake = 400; + famt = 0.5; + hamt = 0.60; + + if (maxtake > 200) + { + maxtake = 200; + } } - } - - if (!targ->client->ps.powerups[PW_FORCE_BOON]) - { - targ->client->ps.fd.forcePower -= maxtake*famt; - } - else - { - targ->client->ps.fd.forcePower -= (maxtake*famt)/2; - } - subamt = (maxtake*hamt)+(take-maxtake); - if (targ->client->ps.fd.forcePower < 0) - { - subamt += targ->client->ps.fd.forcePower; - targ->client->ps.fd.forcePower = 0; - } - if (subamt) - { - take -= subamt; - - if (take < 0) + else if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_3) { - take = 0; + famt = 0.25; + hamt = 0.80; + + if (maxtake > 400) + { + maxtake = 400; + } + } + + if (!targ->client->ps.powerups[PW_FORCE_BOON]) + { + targ->client->ps.fd.forcePower -= maxtake*famt; + } + else + { + targ->client->ps.fd.forcePower -= (maxtake*famt)/2; + } + subamt = (maxtake*hamt)+(take-maxtake); + if (targ->client->ps.fd.forcePower < 0) + { + subamt += targ->client->ps.fd.forcePower; + targ->client->ps.fd.forcePower = 0; + } + if (subamt) + { + take -= subamt; + + if (take < 0) + { + take = 0; + } } } } @@ -5269,9 +5546,12 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, } } - if (targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE)) && (inflictor->client || attacker->client)) - { - take /= (targ->client->ps.fd.forcePowerLevel[FP_RAGE]+1); + if ( !(dflags & DAMAGE_NO_PROTECTION) ) + {//rage overridden by no_protection + if (targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE)) && (inflictor->client || attacker->client)) + { + take /= (targ->client->ps.fd.forcePowerLevel[FP_RAGE]+1); + } } targ->health = targ->health - take; @@ -5287,15 +5567,18 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, targ->client->ps.stats[STAT_HEALTH] = targ->health; } - if (targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE)) && (inflictor->client || attacker->client)) - { - if (targ->health <= 0) + if ( !(dflags & DAMAGE_NO_PROTECTION) ) + {//rage overridden by no_protection + if (targ->client && (targ->client->ps.fd.forcePowersActive & (1 << FP_RAGE)) && (inflictor->client || attacker->client)) { - targ->health = 1; - } - if (targ->client->ps.stats[STAT_HEALTH] <= 0) - { - targ->client->ps.stats[STAT_HEALTH] = 1; + if (targ->health <= 0) + { + targ->health = 1; + } + if (targ->client->ps.stats[STAT_HEALTH] <= 0) + { + targ->client->ps.stats[STAT_HEALTH] = 1; + } } } @@ -5387,7 +5670,8 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, (targ->s.eFlags & EF_DEAD)) { //an NPC that's already dead. Maybe we can cut some more limbs off! if ( (mod == MOD_SABER || (mod == MOD_MELEE && G_HeavyMelee( attacker )) )//saber or heavy melee (claws) - && take > 2) + && take > 2 + && !(dflags&DAMAGE_NO_DISMEMBER) ) { G_CheckForDismemberment(targ, attacker, targ->pos1, take, targ->client->ps.torsoAnim, qtrue); } @@ -5430,6 +5714,48 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, } +void G_DamageFromKiller( gentity_t *pEnt, gentity_t *pVehEnt, gentity_t *attacker, vec3_t org, int damage, int dflags, int mod ) +{ + gentity_t *killer = attacker, *inflictor = attacker; + qboolean tempInflictor = qfalse; + if ( !pEnt || !pVehEnt || !pVehEnt->client ) + { + return; + } + if (pVehEnt->client->ps.otherKiller < ENTITYNUM_WORLD && + pVehEnt->client->ps.otherKillerTime > level.time) + { + gentity_t *potentialKiller = &g_entities[pVehEnt->client->ps.otherKiller]; + + if ( potentialKiller->inuse )//&& potentialKiller->client) + { //he's valid I guess + killer = potentialKiller; + mod = pVehEnt->client->otherKillerMOD; + inflictor = killer; + if ( pVehEnt->client->otherKillerVehWeapon > 0 ) + { + inflictor = G_Spawn(); + if ( inflictor ) + {//fake up the inflictor + tempInflictor = qtrue; + inflictor->classname = "vehicle_proj"; + inflictor->s.otherEntityNum2 = pVehEnt->client->otherKillerVehWeapon-1; + inflictor->s.weapon = pVehEnt->client->otherKillerWeaponType; + } + } + } + } + //FIXME: damage hitEnt, some, too? Our explosion should hurt them some, but... + if ( killer && killer->s.eType == ET_NPC && killer->s.NPC_class == CLASS_VEHICLE && killer->m_pVehicle && killer->m_pVehicle->m_pPilot ) + { + killer = (gentity_t *)killer->m_pVehicle->m_pPilot; + } + G_Damage( pEnt, inflictor, killer, NULL, org, damage, dflags, mod ); + if ( tempInflictor ) + { + G_FreeEntity( inflictor ); + } +} /* ============ @@ -5577,11 +5903,11 @@ qboolean G_RadiusDamage ( vec3_t origin, gentity_t *attacker, float damage, floa attacker->s.eType == ET_NPC && attacker->s.NPC_class == CLASS_VEHICLE && attacker->m_pVehicle && attacker->m_pVehicle->m_pPilot) { //say my pilot did it. - G_Damage (ent, NULL, (gentity_t *)attacker->m_pVehicle->m_pPilot, dir, origin, (int)points, DAMAGE_RADIUS, mod); + G_Damage (ent, missile, (gentity_t *)attacker->m_pVehicle->m_pPilot, dir, origin, (int)points, DAMAGE_RADIUS, mod); } else { - G_Damage (ent, NULL, attacker, dir, origin, (int)points, DAMAGE_RADIUS, mod); + G_Damage (ent, missile, attacker, dir, origin, (int)points, DAMAGE_RADIUS, mod); } if (ent && ent->client && roastPeople && missile && diff --git a/codemp/game/g_local.h b/codemp/game/g_local.h index fdf7c7e..8c1023c 100644 --- a/codemp/game/g_local.h +++ b/codemp/game/g_local.h @@ -26,7 +26,7 @@ extern vec3_t gPainPoint; //================================================================== // the "gameversion" client command will print this plus compile date -#define GAMEVERSION "basejk" +#define GAMEVERSION "basejka" #define BODY_QUEUE_SIZE 8 @@ -425,6 +425,9 @@ typedef struct { char saber2Type[64]; int duelTeam; int siegeDesiredTeam; + int killCount; + int TKCount; + char IPstring[32]; // yeah, I know, could be 16, but, just in case... } clientSession_t; // playerstate mGameFlags @@ -737,6 +740,11 @@ struct gclient_s { int lastGenCmd; int lastGenCmdTime; + + //can't put these in playerstate, crashes game (need to change exe?) + int otherKillerMOD; + int otherKillerVehWeapon; + int otherKillerWeaponType; }; //Interest points @@ -1095,6 +1103,8 @@ qboolean trap_G2API_RemoveGhoul2Models(void *ghlInfo); void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr); void trap_G2API_CollisionDetect ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position, int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, int traceFlags, int useLod, float fRadius ); +void trap_G2API_CollisionDetectCache ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position, + int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, int traceFlags, int useLod, float fRadius ); qboolean trap_G2API_SetBoneAngles(void *ghoul2, int modelIndex, const char *boneName, const vec3_t angles, const int flags, const int up, const int right, const int forward, qhandle_t *modelList, @@ -1173,6 +1183,11 @@ extern int gGAvoidDismember; #define DAMAGE_HEAVY_WEAP_CLASS 0x00001000 // Heavy damage #define DAMAGE_NO_HIT_LOC 0x00002000 // No hit location #define DAMAGE_NO_SELF_PROTECTION 0x00004000 // Dont apply half damage to self attacks +#define DAMAGE_NO_DISMEMBER 0x00008000 // Dont do dismemberment +#define DAMAGE_SABER_KNOCKBACK1 0x00010000 // Check the attacker's first saber for a knockbackScale +#define DAMAGE_SABER_KNOCKBACK2 0x00020000 // Check the attacker's second saber for a knockbackScale +#define DAMAGE_SABER_KNOCKBACK1_B2 0x00040000 // Check the attacker's first saber for a knockbackScale2 +#define DAMAGE_SABER_KNOCKBACK2_B2 0x00080000 // Check the attacker's second saber for a knockbackScale2 // // g_exphysics.c // @@ -1261,7 +1276,7 @@ team_t TeamCount( int ignoreClientNum, int team ); int TeamLeader( int team ); team_t PickTeam( int ignoreClientNum ); void SetClientViewAngle( gentity_t *ent, vec3_t angle ); -gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ); +gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles, team_t team ); void MaintainBodyQueue(gentity_t *ent); void respawn (gentity_t *ent); void BeginIntermission (void); @@ -1545,6 +1560,8 @@ extern vmCvar_t d_projectileGhoul2Collision; extern vmCvar_t g_g2TraceLod; +extern vmCvar_t g_optvehtrace; + extern vmCvar_t g_locationBasedDamage; extern vmCvar_t g_allowHighPingDuelist; @@ -1601,6 +1618,7 @@ extern vmCvar_t g_warmup; extern vmCvar_t g_doWarmup; extern vmCvar_t g_blood; extern vmCvar_t g_allowVote; +extern vmCvar_t g_allowTeamVote; extern vmCvar_t g_teamAutoJoin; extern vmCvar_t g_teamForceBalance; extern vmCvar_t g_banIPs; @@ -1608,8 +1626,8 @@ extern vmCvar_t g_filterBan; extern vmCvar_t g_debugForward; extern vmCvar_t g_debugRight; extern vmCvar_t g_debugUp; -extern vmCvar_t g_redteam; -extern vmCvar_t g_blueteam; +//extern vmCvar_t g_redteam; +//extern vmCvar_t g_blueteam; extern vmCvar_t g_smoothClients; #include "../namespace_begin.h" @@ -1617,8 +1635,6 @@ extern vmCvar_t pmove_fixed; extern vmCvar_t pmove_msec; #include "../namespace_end.h" -extern vmCvar_t g_rankings; -extern vmCvar_t g_enableDust; extern vmCvar_t g_enableBreath; extern vmCvar_t g_singlePlayer; extern vmCvar_t g_dismember; diff --git a/codemp/game/g_log.c b/codemp/game/g_log.c index 9c29e21..8237856 100644 --- a/codemp/game/g_log.c +++ b/codemp/game/g_log.c @@ -70,6 +70,7 @@ int weaponFromMOD[MOD_MAX] = WP_NONE, //MOD_CRUSH, WP_NONE, //MOD_TELEFRAG, WP_NONE, //MOD_FALLING, + WP_NONE, //MOD_COLLISION, WP_NONE, //MOD_SUICIDE, WP_NONE, //MOD_TARGET_LASER, WP_NONE, //MOD_TRIGGER_HURT, diff --git a/codemp/game/g_main.c b/codemp/game/g_main.c index cd5181d..c796bf3 100644 --- a/codemp/game/g_main.c +++ b/codemp/game/g_main.c @@ -74,6 +74,8 @@ vmCvar_t d_projectileGhoul2Collision; vmCvar_t g_g2TraceLod; +vmCvar_t g_optvehtrace; + vmCvar_t g_locationBasedDamage; vmCvar_t g_allowHighPingDuelist; @@ -140,6 +142,7 @@ vmCvar_t g_blood; vmCvar_t g_podiumDist; vmCvar_t g_podiumDrop; vmCvar_t g_allowVote; +vmCvar_t g_allowTeamVote; vmCvar_t g_teamAutoJoin; vmCvar_t g_teamForceBalance; vmCvar_t g_banIPs; @@ -154,12 +157,10 @@ vmCvar_t pmove_fixed; vmCvar_t pmove_msec; #include "../namespace_end.h" -vmCvar_t g_rankings; vmCvar_t g_listEntity; -vmCvar_t g_redteam; -vmCvar_t g_blueteam; +//vmCvar_t g_redteam; +//vmCvar_t g_blueteam; vmCvar_t g_singlePlayer; -vmCvar_t g_enableDust; vmCvar_t g_enableBreath; vmCvar_t g_dismember; vmCvar_t g_forceDodge; @@ -174,6 +175,11 @@ vmCvar_t g_saberDebugPrint; vmCvar_t g_siegeTeamSwitch; vmCvar_t bg_fighterAltControl; +vmCvar_t g_vehAutoAimLead; +vmCvar_t g_autoKickKillSpammers; +vmCvar_t g_autoBanKillSpammers; +vmCvar_t g_autoKickTKSpammers; +vmCvar_t g_autoBanTKSpammers; #ifdef DEBUG_SABER_BOX vmCvar_t g_saberDebugBox; @@ -237,22 +243,22 @@ static cvarTable_t gameCvarTable[] = { { NULL, "sv_mapname", "", CVAR_SERVERINFO | CVAR_ROM, 0, qfalse }, // latched vars - { &g_gametype, "g_gametype", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, - { &g_MaxHolocronCarry, "g_MaxHolocronCarry", "3", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, + { &g_gametype, "g_gametype", "0", CVAR_SERVERINFO | CVAR_LATCH, 0, qfalse }, + { &g_MaxHolocronCarry, "g_MaxHolocronCarry", "3", CVAR_SERVERINFO | CVAR_LATCH, 0, qfalse }, { &g_maxclients, "sv_maxclients", "8", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qfalse }, { &g_maxGameClients, "g_maxGameClients", "0", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qfalse }, + { &g_trueJedi, "g_jediVmerc", "0", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qtrue }, + // change anytime vars { &g_ff_objectives, "g_ff_objectives", "0", /*CVAR_SERVERINFO |*/ CVAR_CHEAT | CVAR_NORESTART, 0, qtrue }, - { &g_trueJedi, "g_jediVmerc", "0", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qtrue }, - { &g_autoMapCycle, "g_autoMapCycle", "0", CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_dmflags, "dmflags", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue }, - { &g_maxForceRank, "g_maxForceRank", "6", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, - { &g_forceBasedTeams, "g_forceBasedTeams", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_USERINFO | CVAR_LATCH, 0, qfalse }, + { &g_maxForceRank, "g_maxForceRank", "6", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_LATCH, 0, qfalse }, + { &g_forceBasedTeams, "g_forceBasedTeams", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_LATCH, 0, qfalse }, { &g_privateDuel, "g_privateDuel", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue }, { &g_allowNPC, "g_allowNPC", "1", CVAR_SERVERINFO | CVAR_CHEAT, 0, qtrue }, @@ -285,6 +291,8 @@ static cvarTable_t gameCvarTable[] = { { &g_g2TraceLod, "g_g2TraceLod", "3", 0, 0, qtrue }, + { &g_optvehtrace, "com_optvehtrace", "0", 0, 0, qtrue }, + { &g_locationBasedDamage, "g_locationBasedDamage", "1", 0, 0, qtrue }, { &g_allowHighPingDuelist, "g_allowHighPingDuelist", "1", 0, 0, qtrue }, @@ -370,6 +378,7 @@ static cvarTable_t gameCvarTable[] = { { &g_podiumDrop, "g_podiumDrop", "70", 0, 0, qfalse }, { &g_allowVote, "g_allowVote", "1", CVAR_ARCHIVE, 0, qfalse }, + { &g_allowTeamVote, "g_allowTeamVote", "1", CVAR_ARCHIVE, 0, qfalse }, { &g_listEntity, "g_listEntity", "0", 0, 0, qfalse }, #if 0 @@ -378,18 +387,15 @@ static cvarTable_t gameCvarTable[] = { { &g_debugUp, "g_debugUp", "0", 0, 0, qfalse }, #endif - { &g_redteam, "g_redteam", "Empire", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue }, - { &g_blueteam, "g_blueteam", "Rebellion", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue }, +// { &g_redteam, "g_redteam", "Empire", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue }, +// { &g_blueteam, "g_blueteam", "Rebellion", CVAR_ARCHIVE | CVAR_SERVERINFO | CVAR_USERINFO , 0, qtrue, qtrue }, { &g_singlePlayer, "ui_singlePlayerActive", "", 0, 0, qfalse, qfalse }, - { &g_enableDust, "g_enableDust", "0", 0, 0, qtrue, qfalse }, { &g_enableBreath, "g_enableBreath", "0", 0, 0, qtrue, qfalse }, { &g_smoothClients, "g_smoothClients", "1", 0, 0, qfalse}, { &pmove_fixed, "pmove_fixed", "0", CVAR_SYSTEMINFO, 0, qfalse}, { &pmove_msec, "pmove_msec", "8", CVAR_SYSTEMINFO, 0, qfalse}, - { &g_rankings, "g_rankings", "0", 0, 0, qfalse}, - { &g_dismember, "g_dismember", "0", CVAR_ARCHIVE, 0, qtrue }, { &g_forceDodge, "g_forceDodge", "1", 0, 0, qtrue }, @@ -412,6 +418,11 @@ static cvarTable_t gameCvarTable[] = { { &g_siegeTeamSwitch, "g_siegeTeamSwitch", "1", CVAR_SERVERINFO|CVAR_ARCHIVE, qfalse }, { &bg_fighterAltControl, "bg_fighterAltControl", "0", CVAR_SERVERINFO, 0, qtrue }, + { &g_vehAutoAimLead, "g_vehAutoAimLead", "0", CVAR_ARCHIVE }, + { &g_autoKickKillSpammers, "g_autoKickKillSpammers", "0", CVAR_ARCHIVE, 0, qtrue }, + { &g_autoBanKillSpammers, "g_autoBanKillSpammers", "0", CVAR_ARCHIVE, 0, qtrue }, + { &g_autoKickTKSpammers, "g_autoKickTKSpammers", "0", CVAR_ARCHIVE, 0, qtrue }, + { &g_autoBanTKSpammers, "g_autoBanTKSpammers", "0", CVAR_ARCHIVE, 0, qtrue }, #ifdef DEBUG_SABER_BOX { &g_saberDebugBox, "g_saberDebugBox", "0", CVAR_CHEAT, 0, qfalse }, @@ -445,7 +456,7 @@ static cvarTable_t gameCvarTable[] = { { &d_saberCombat, "d_saberCombat", "0", CVAR_CHEAT }, - { &g_spskill, "g_npcspskill", "0", CVAR_ARCHIVE | CVAR_USERINFO }, + { &g_spskill, "g_npcspskill", "0", CVAR_ARCHIVE | CVAR_INTERNAL }, //for overriding the level defaults { &g_siegeTeam1, "g_siegeTeam1", "none", CVAR_ARCHIVE|CVAR_SERVERINFO, 0, qfalse }, @@ -498,6 +509,9 @@ This must be the very first function compiled into the .q3vm file ================ */ #include "../namespace_begin.h" +#ifdef __linux__ +extern "C" { +#endif int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) { switch ( command ) { case GAME_INIT: @@ -680,6 +694,9 @@ int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int a return -1; } +#ifdef __linux__ +} +#endif #include "../namespace_end.h" @@ -876,6 +893,7 @@ G_InitGame */ extern void RemoveAllWP(void); extern void BG_ClearVehicleParseParms(void); +extern void G_LoadIPBans(void); void G_InitGame( int levelTime, int randomSeed, int restart ) { int i; vmCvar_t mapname; @@ -912,7 +930,8 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) { G_RegisterCvars(); - G_ProcessIPBans(); + //G_ProcessIPBans(); + G_LoadIPBans(); G_InitMemory(); @@ -1105,12 +1124,14 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) { G_ShutdownGame ================= */ +extern void G_SaveBanIP( void ); void G_ShutdownGame( int restart ) { int i = 0; gentity_t *ent; // G_Printf ("==== ShutdownGame ====\n"); + G_SaveBanIP(); G_CleanAllFakeClients(); //get rid of dynamically allocated fake client structs. BG_ClearAnimsets(); //free all dynamic allocations made through the engine @@ -1952,14 +1973,43 @@ FindIntermissionPoint This is also used for spectator spawns ================== */ +extern qboolean gSiegeRoundBegun; +extern qboolean gSiegeRoundEnded; +extern qboolean gSiegeRoundWinningTeam; void FindIntermissionPoint( void ) { - gentity_t *ent, *target; + gentity_t *ent = NULL; + gentity_t *target; vec3_t dir; // find the intermission spot - ent = G_Find (NULL, FOFS(classname), "info_player_intermission"); + if ( g_gametype.integer == GT_SIEGE + && level.intermissiontime + && level.intermissiontime <= level.time + && gSiegeRoundEnded ) + { + if (gSiegeRoundWinningTeam == SIEGETEAM_TEAM1) + { + ent = G_Find (NULL, FOFS(classname), "info_player_intermission_red"); + if ( ent && ent->target2 ) + { + G_UseTargets2( ent, ent, ent->target2 ); + } + } + else if (gSiegeRoundWinningTeam == SIEGETEAM_TEAM2) + { + ent = G_Find (NULL, FOFS(classname), "info_player_intermission_blue"); + if ( ent && ent->target2 ) + { + G_UseTargets2( ent, ent, ent->target2 ); + } + } + } + if ( !ent ) + { + ent = G_Find (NULL, FOFS(classname), "info_player_intermission"); + } if ( !ent ) { // the map creator forgot to put in an intermission point... - SelectSpawnPoint ( vec3_origin, level.intermission_origin, level.intermission_angle ); + SelectSpawnPoint ( vec3_origin, level.intermission_origin, level.intermission_angle, TEAM_SPECTATOR ); } else { VectorCopy (ent->s.origin, level.intermission_origin); VectorCopy (ent->s.angles, level.intermission_angle); @@ -3223,8 +3273,9 @@ void CheckVote( void ) { if (g_fraglimitVoteCorrection.integer) { //This means to auto-correct fraglimit when voting to and from duel. - int currentGT = trap_Cvar_VariableIntegerValue("g_gametype"); - int currentFL = trap_Cvar_VariableIntegerValue("fraglimit"); + const int currentGT = trap_Cvar_VariableIntegerValue("g_gametype"); + const int currentFL = trap_Cvar_VariableIntegerValue("fraglimit"); + const int currentTL = trap_Cvar_VariableIntegerValue("timelimit"); if ((level.votingGametypeTo == GT_DUEL || level.votingGametypeTo == GT_POWERDUEL) && currentGT != GT_DUEL && currentGT != GT_POWERDUEL) { @@ -3232,6 +3283,10 @@ void CheckVote( void ) { { //if voting to duel, and fraglimit is more than 3 (or unlimited), then set it down to 3 trap_SendConsoleCommand(EXEC_APPEND, "fraglimit 3\n"); } + if (currentTL) + { //if voting to duel, and timelimit is set, make it unlimited + trap_SendConsoleCommand(EXEC_APPEND, "timelimit 0\n"); + } } else if ((level.votingGametypeTo != GT_DUEL && level.votingGametypeTo != GT_POWERDUEL) && (currentGT == GT_DUEL || currentGT == GT_POWERDUEL)) diff --git a/codemp/game/g_missile.c b/codemp/game/g_missile.c index b22f6aa..a409b49 100644 --- a/codemp/game/g_missile.c +++ b/codemp/game/g_missile.c @@ -232,6 +232,13 @@ void G_ExplodeMissile( gentity_t *ent ) { ent->takedamage = qfalse; // splash damage if ( ent->splashDamage ) { + //NOTE: vehicle missiles don't have an ent->parent set, so check that here and set it + if ( ent->s.eType == ET_MISSILE//missile + && (ent->s.eFlags&EF_JETPACK_ACTIVE)//vehicle missile + && ent->r.ownerNum < MAX_CLIENTS )//valid client owner + {//set my parent to my owner for purposes of damage credit... + ent->parent = &g_entities[ent->r.ownerNum]; + } if( G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent, ent, ent->splashMethodOfDeath ) ) { @@ -339,6 +346,8 @@ void G_MissileBounceEffect( gentity_t *ent, vec3_t org, vec3_t dir ) VectorCopy(org, te->s.origin); VectorCopy(dir, te->s.angles); te->s.eventParm = 0; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum } break; } @@ -436,7 +445,9 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) { ent->methodOfDeath != MOD_CONC && ent->methodOfDeath != MOD_CONC_ALT && ent->methodOfDeath != MOD_SABER && - ent->methodOfDeath != MOD_TURBLAST) + ent->methodOfDeath != MOD_TURBLAST && + ent->methodOfDeath != MOD_TARGET_LASER)// && + //ent->methodOfDeath != MOD_COLLISION) { vec3_t fwd; @@ -465,6 +476,7 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) { ent->methodOfDeath != MOD_REPEATER_ALT && ent->methodOfDeath != MOD_FLECHETTE_ALT_SPLASH && ent->methodOfDeath != MOD_TURBLAST && + ent->methodOfDeath != MOD_TARGET_LASER && ent->methodOfDeath != MOD_VEHICLE && ent->methodOfDeath != MOD_CONC && ent->methodOfDeath != MOD_CONC_ALT && @@ -508,6 +520,8 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) { VectorCopy(ent->r.currentOrigin, te->s.origin); VectorCopy(trace->plane.normal, te->s.angles); te->s.eventParm = 0; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum /*if (other->client->ps.velocity[2] > 0 || other->client->pers.cmd.forwardmove || @@ -583,6 +597,8 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) { VectorCopy(ent->r.currentOrigin, te->s.origin); VectorCopy(trace->plane.normal, te->s.angles); te->s.eventParm = 0; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum /*if (otherOwner->client->ps.velocity[2] > 0 || otherOwner->client->pers.cmd.forwardmove || diff --git a/codemp/game/g_mover.c b/codemp/game/g_mover.c index d1ea0fe..3bb9644 100644 --- a/codemp/game/g_mover.c +++ b/codemp/game/g_mover.c @@ -155,6 +155,7 @@ G_TryPushingEntity Returns qfalse if the move is blocked ================== */ +extern void G_DamageFromKiller( gentity_t *pEnt, gentity_t *pVehEnt, gentity_t *attacker, vec3_t org, int damage, int dflags, int mod ); qboolean G_TryPushingEntity( gentity_t *check, gentity_t *pusher, vec3_t move, vec3_t amove ) { vec3_t matrix[3], transpose[3]; vec3_t org, org2, move2; @@ -173,7 +174,16 @@ qboolean G_TryPushingEntity( gentity_t *check, gentity_t *pusher, vec3_t move, v && (pusher->spawnflags&16) //IMPACT && Q_stricmp( "func_rotating", pusher->classname ) == 0 ) {//just blow the fuck out of them - G_Damage( check, pusher, pusher, NULL, NULL, pusher->damage, DAMAGE_NO_KNOCKBACK, MOD_CRUSH ); + /* + if ( check->m_pVehicle ) + { + G_DamageFromKiller( check, check, pusher, NULL, pusher->damage, DAMAGE_NO_KNOCKBACK, MOD_CRUSH ); + } + else + */ + { + G_Damage( check, pusher, pusher, NULL, NULL, pusher->damage, DAMAGE_NO_KNOCKBACK, MOD_CRUSH ); + } return qtrue; } @@ -1984,7 +1994,9 @@ void SP_func_static( gentity_t *ent ) #endif if (ent->s.iModelScale < 0) { - ent->s.iModelScale = 0; + //NOTE: -1 scale is x -100% (so -3 is 300%) + ent->s.legsFlip = qtrue;//treat it as a scalar + ent->s.iModelScale = -ent->s.iModelScale; } else if (ent->s.iModelScale > 1023) { @@ -2062,7 +2074,7 @@ the point around which it is rotated. It will rotate around the Z axis by defaul check either the X_AXIS or Y_AXIS box to change that. "model2" .md3 model to also draw -"model2scale" percent of normal scale (on all x y and z axii) to scale the model2 if there is one. 100 is normal scale, min is 1 (100 times smaller than normal), max is 1000 (ten times normal). +"model2scale" percent of normal scale (on all x y and z axes) to scale the model2 if there is one. 100 is normal scale, min is 1 (100 times smaller than normal), max is 1000 (ten times normal). "speed" determines how fast it moves; default value is 100. "dmg" damage to inflict when blocked (2 default) "color" constantLight color @@ -2148,7 +2160,9 @@ void SP_func_rotating (gentity_t *ent) { #endif if (ent->s.iModelScale < 0) { - ent->s.iModelScale = 0; + //NOTE: -1 scale is x -100% (so -3 is 300%) + ent->s.legsFlip = qtrue;//treat it as a scalar + ent->s.iModelScale = -ent->s.iModelScale; } else if (ent->s.iModelScale > 1023) { diff --git a/codemp/game/g_nav.c b/codemp/game/g_nav.c index a78ae83..ed7457b 100644 --- a/codemp/game/g_nav.c +++ b/codemp/game/g_nav.c @@ -917,6 +917,10 @@ qboolean NAV_AvoidCollision( gentity_t *self, gentity_t *goal, navInfo_t *info ) VectorMA( self->r.currentOrigin, info->distance, info->direction, movepos ); VectorCopy( info->direction, movedir ); + if ( self && self->NPC && (self->NPC->aiFlags&NPCAI_NO_COLL_AVOID) ) + {//pretend there's no-one in the way + return qtrue; + } //Now test against entities if ( NAV_CheckAhead( self, movepos, &info->trace, CONTENTS_BODY ) == qfalse ) { diff --git a/codemp/game/g_public.h b/codemp/game/g_public.h index 07abab6..1dcf025 100644 --- a/codemp/game/g_public.h +++ b/codemp/game/g_public.h @@ -36,6 +36,10 @@ #define SVF_GLASS_BRUSH 0x08000000 // Ent is a glass brush +#define SVF_NO_BASIC_SOUNDS 0x10000000 // No basic sounds +#define SVF_NO_COMBAT_SOUNDS 0x20000000 // No combat sounds +#define SVF_NO_EXTRA_SOUNDS 0x40000000 // No extra or jedi sounds + //rww - ghoul2 trace flags #define G2TRFLAG_DOGHOULTRACE 0x00000001 //do the ghoul2 trace #define G2TRFLAG_HITCORPSES 0x00000002 //will try g2 collision on the ent even if it's EF_DEAD @@ -524,6 +528,7 @@ Ghoul2 Insert Start G_G2_REMOVEGHOUL2MODELS, G_G2_CLEANMODELS, G_G2_COLLISIONDETECT, + G_G2_COLLISIONDETECTCACHE, G_G2_SETROOTSURFACE, G_G2_SETSURFACEONOFF, diff --git a/codemp/game/g_saga.c b/codemp/game/g_saga.c index 3de8101..faa3629 100644 --- a/codemp/game/g_saga.c +++ b/codemp/game/g_saga.c @@ -35,6 +35,7 @@ int imperial_attackers = 0; qboolean gSiegeRoundBegun = qfalse; qboolean gSiegeRoundEnded = qfalse; +qboolean gSiegeRoundWinningTeam = 0; int gSiegeBeginTime = Q3_INFINITE; int g_preroundState = 0; //default to starting as spec (1 is starting ingame) @@ -684,6 +685,7 @@ void SiegeRoundComplete(int winningteam, int winningclient) trap_SetConfigstring(CS_SIEGE_STATE, va("3|%i", level.time)); //ended gSiegeRoundBegun = qfalse; gSiegeRoundEnded = qtrue; + gSiegeRoundWinningTeam = winningteam; if (BG_SiegeGetValueGroup(siege_info, teamstr, gParseObjectives)) { diff --git a/codemp/game/g_spawn.c b/codemp/game/g_spawn.c index bf89820..4280cb0 100644 --- a/codemp/game/g_spawn.c +++ b/codemp/game/g_spawn.c @@ -163,7 +163,11 @@ void SP_info_player_deathmatch (gentity_t *ent); void SP_info_player_siegeteam1 (gentity_t *ent); void SP_info_player_siegeteam2 (gentity_t *ent); void SP_info_player_intermission (gentity_t *ent); +void SP_info_player_intermission_red (gentity_t *ent); +void SP_info_player_intermission_blue (gentity_t *ent); void SP_info_jedimaster_start (gentity_t *ent); +void SP_info_player_start_red (gentity_t *ent); +void SP_info_player_start_blue (gentity_t *ent); void SP_info_firstplace(gentity_t *ent); void SP_info_secondplace(gentity_t *ent); void SP_info_thirdplace(gentity_t *ent); @@ -200,6 +204,7 @@ void SP_trigger_hurt (gentity_t *ent); void SP_trigger_space(gentity_t *self); void SP_trigger_shipboundary(gentity_t *self); void SP_trigger_hyperspace(gentity_t *self); +void SP_trigger_asteroid_field(gentity_t *self); void SP_target_remove_powerups( gentity_t *ent ); void SP_target_give (gentity_t *ent); @@ -438,7 +443,11 @@ spawn_t spawns[] = { {"info_player_siegeteam1", SP_info_player_siegeteam1}, {"info_player_siegeteam2", SP_info_player_siegeteam2}, {"info_player_intermission", SP_info_player_intermission}, + {"info_player_intermission_red", SP_info_player_intermission_red}, + {"info_player_intermission_blue", SP_info_player_intermission_blue}, {"info_jedimaster_start", SP_info_jedimaster_start}, + {"info_player_start_red", SP_info_player_start_red}, + {"info_player_start_blue", SP_info_player_start_blue}, {"info_null", SP_info_null}, {"info_notnull", SP_info_notnull}, // use target_position instead {"info_camp", SP_info_camp}, @@ -480,6 +489,7 @@ spawn_t spawns[] = { {"trigger_space", SP_trigger_space}, {"trigger_shipboundary", SP_trigger_shipboundary}, {"trigger_hyperspace", SP_trigger_hyperspace}, + {"trigger_asteroid_field", SP_trigger_asteroid_field}, // targets perform no action by themselves, but must be triggered // by another entity @@ -1323,9 +1333,6 @@ void SP_worldspawn( void ) G_SpawnString( "gravity", "800", &text ); trap_Cvar_Set( "g_gravity", text ); - G_SpawnString( "enableDust", "0", &text ); - trap_Cvar_Set( "g_enableDust", text ); - G_SpawnString( "enableBreath", "0", &text ); trap_Cvar_Set( "g_enableBreath", text ); diff --git a/codemp/game/g_svcmds.c b/codemp/game/g_svcmds.c index bcea59f..6e59c7f 100644 --- a/codemp/game/g_svcmds.c +++ b/codemp/game/g_svcmds.c @@ -170,7 +170,7 @@ qboolean G_FilterPacket (char *from) AddIP ================= */ -static void AddIP( char *str ) +void AddIP( char *str ) { int i; @@ -273,6 +273,111 @@ void Svcmd_RemoveIP_f (void) G_Printf ( "Didn't find %s.\n", str ); } +void Svcmd_ListIPs_f( void ) +{ + int i; + char *str; + byte b[4]; + + G_Printf ( "%d IP slots used.\n", numIPFilters ); + for ( i = 0 ; i < numIPFilters ; i++ ) + { + G_Printf ( "%d: ", i ); + if (ipFilters[i].compare == 0xffffffff) + { + G_Printf ( "unused\n" ); + } + else + { + *(unsigned *)b = ipFilters[i].compare; + str = va("%i.%i.%i.%i \n", b[0], b[1], b[2], b[3]); + G_Printf ( "%s\n", str ); + } + } +} + +void G_SaveBanIP( void ) +{//save out all the banned IPs + int i; + char *str; + fileHandle_t fh; + byte b[4]; + + trap_FS_FOpenFile("banip.txt", &fh, FS_WRITE); + if ( !fh ) + { + G_Printf ( "G_SaveBanIP - ERROR: can't open banip.txt\n" ); + return; + } + + str = va("%d \n", numIPFilters); + trap_FS_Write(str, strlen(str), fh); + for ( i = 0 ; i < numIPFilters ; i++ ) + { + if (ipFilters[i].compare == 0xffffffff) + { + str = "unused \n"; + trap_FS_Write(str, strlen(str), fh); + } + else + { + *(unsigned *)b = ipFilters[i].compare; + str = va("%i.%i.%i.%i \n", b[0], b[1], b[2], b[3]); + trap_FS_Write(str, strlen(str), fh); + } + } + + trap_FS_FCloseFile(fh); +} + +void G_LoadIPBans( void ) +{//load in all the banned IPs + int i, len; + char *p, *token; + fileHandle_t fh; + char banIPBuffer[MAX_IPFILTERS*32]; // The list of file names read in + char banIPFile[MAX_QPATH]; + + len = trap_FS_FOpenFile("banip.txt", &fh, FS_READ); + if ( !fh ) + { + G_Printf ( "G_LoadBanIP - ERROR: can't open banip.txt\n" ); + return; + } + + trap_FS_Read(banIPBuffer, len, fh); + banIPBuffer[len] = 0; + trap_FS_FCloseFile(fh); + p = banIPBuffer; + COM_BeginParseSession(banIPFile); + + token = COM_ParseExt( &p, qtrue ); + if ( token ) + { + numIPFilters = atoi(token); + + for ( i = 0 ; i < numIPFilters ; i++ ) + { + token = COM_ParseExt( &p, qtrue ); + if ( token ) + {//have an ip + if ( !Q_stricmp("unused",token) ) + { + ipFilters[i].compare = 0xffffffffu; + } + else + { + StringToFilter(token,&ipFilters[i]); + } + } + else + { + break; + } + } + } +} + /* =================== Svcmd_EntityList_f @@ -451,7 +556,8 @@ qboolean ConsoleCommand( void ) { } if (Q_stricmp (cmd, "listip") == 0) { - trap_SendConsoleCommand( EXEC_NOW, "g_banIPs\n" ); + Svcmd_ListIPs_f(); + //trap_SendConsoleCommand( EXEC_NOW, "g_banIPs\n" ); return qtrue; } diff --git a/codemp/game/g_syscalls.c b/codemp/game/g_syscalls.c index 61b87f1..5fc18db 100644 --- a/codemp/game/g_syscalls.c +++ b/codemp/game/g_syscalls.c @@ -8,9 +8,15 @@ static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1; #include "../namespace_begin.h" +#ifdef __linux__ +extern "C" { +#endif void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) { syscall = syscallptr; } +#ifdef __linux__ +} +#endif int PASSFLOAT( float x ) { float floatTemp; @@ -1317,6 +1323,24 @@ void trap_G2API_CollisionDetect ( syscall ( G_G2_COLLISIONDETECT, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); } +void trap_G2API_CollisionDetectCache ( + CollisionRecord_t *collRecMap, + void* ghoul2, + const vec3_t angles, + const vec3_t position, + int frameNumber, + int entNum, + vec3_t rayStart, + vec3_t rayEnd, + vec3_t scale, + int traceFlags, + int useLod, + float fRadius + ) +{ + syscall ( G_G2_COLLISIONDETECTCACHE, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); +} + void trap_G2API_GetSurfaceName(void *ghoul2, int surfNumber, int modelIndex, char *fillBuf) { syscall(G_G2_GETSURFACENAME, ghoul2, surfNumber, modelIndex, fillBuf); diff --git a/codemp/game/g_target.c b/codemp/game/g_target.c index 94ba33a..ac4c4f9 100644 --- a/codemp/game/g_target.c +++ b/codemp/game/g_target.c @@ -133,11 +133,8 @@ void Use_Target_Print (gentity_t *ent, gentity_t *other, gentity_t *activator) { if (!ent || !ent->inuse) { - Com_Error(ERR_DROP, "Bad ent in Use_Target_Print"); - } - else if (!activator || !activator->inuse) - { - Com_Error(ERR_DROP, "Bad activator in Use_Target_Print"); + Com_Printf("ERROR: Bad ent in Use_Target_Print"); + return; } if (ent->wait) @@ -150,6 +147,15 @@ void Use_Target_Print (gentity_t *ent, gentity_t *other, gentity_t *activator) } #ifndef FINAL_BUILD + if (!ent || !ent->inuse) + { + Com_Error(ERR_DROP, "Bad ent in Use_Target_Print"); + } + else if (!activator || !activator->inuse) + { + Com_Error(ERR_DROP, "Bad activator in Use_Target_Print"); + } + if (ent->genericValue15 > level.time) { Com_Printf("TARGET PRINT ERRORS:\n"); @@ -175,15 +181,24 @@ void Use_Target_Print (gentity_t *ent, gentity_t *other, gentity_t *activator) #endif G_ActivateBehavior(ent,BSET_USE); - if ( activator->client && ( ent->spawnflags & 4 ) ) { - if (ent->message[0] == '@' && ent->message[1] != '@') + if ( ( ent->spawnflags & 4 ) ) + {//private, to one client only + if (!activator || !activator->inuse) { - trap_SendServerCommand( activator-g_entities, va("cps \"%s\"", ent->message )); + Com_Printf("ERROR: Bad activator in Use_Target_Print"); } - else - { - trap_SendServerCommand( activator-g_entities, va("cp \"%s\"", ent->message )); + if ( activator && activator->client ) + {//make sure there's a valid client ent to send it to + if (ent->message[0] == '@' && ent->message[1] != '@') + { + trap_SendServerCommand( activator-g_entities, va("cps \"%s\"", ent->message )); + } + else + { + trap_SendServerCommand( activator-g_entities, va("cp \"%s\"", ent->message )); + } } + //NOTE: change in functionality - if there *is* no valid client ent, it won't send it to anyone at all return; } diff --git a/codemp/game/g_team.c b/codemp/game/g_team.c index d9eaec6..48c75a8 100644 --- a/codemp/game/g_team.c +++ b/codemp/game/g_team.c @@ -183,6 +183,7 @@ void AddTeamScore(vec3_t origin, int team, int score) { OnSameTeam ============== */ +extern qboolean G_CheckVehicleNPCTeamDamage( gentity_t *ent ); qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 ) { if ( !ent1->client || !ent2->client ) { return qfalse; @@ -252,6 +253,14 @@ qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 ) { if (ent1->s.eType == ET_NPC && ent2->s.eType == ET_PLAYER) { + if ( G_CheckVehicleNPCTeamDamage( ent1 ) ) + {//hit an NPC that is in a vehicle - a droid? + if ( ent1->client->sess.sessionTeam == ent2->client->sess.sessionTeam + || ent1->teamnodmg == ent2->client->sess.sessionTeam ) + { + return qtrue; + } + } return qfalse; } else if (ent1->s.eType == ET_PLAYER && ent2->s.eType == ET_NPC) @@ -1043,7 +1052,7 @@ gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3 spot = SelectRandomTeamSpawnPoint ( teamstate, team, -1 ); if (!spot) { - return SelectSpawnPoint( vec3_origin, origin, angles ); + return SelectSpawnPoint( vec3_origin, origin, angles, team ); } VectorCopy (spot->s.origin, origin); @@ -1065,7 +1074,7 @@ gentity_t *SelectSiegeSpawnPoint ( int siegeClass, team_t team, int teamstate, v spot = SelectRandomTeamSpawnPoint ( teamstate, team, siegeClass ); if (!spot) { - return SelectSpawnPoint( vec3_origin, origin, angles ); + return SelectSpawnPoint( vec3_origin, origin, angles, team ); } VectorCopy (spot->s.origin, origin); diff --git a/codemp/game/g_trigger.c b/codemp/game/g_trigger.c index 34adc5f..68a3c91 100644 --- a/codemp/game/g_trigger.c +++ b/codemp/game/g_trigger.c @@ -1364,6 +1364,9 @@ void hurt_touch( gentity_t *self, gentity_t *other, trace_t *trace ) { { //we're as good as dead, so if someone pushed us into this then remember them other->client->ps.otherKillerTime = level.time + 20000; other->client->ps.otherKillerDebounceTime = level.time + 10000; + other->client->otherKillerMOD = MOD_FALLING; + other->client->otherKillerVehWeapon = 0; + other->client->otherKillerWeaponType = WP_NONE; } other->client->ps.fallingToDeath = level.time; @@ -1625,6 +1628,7 @@ void hyperspace_touch( gentity_t *self, gentity_t *other, trace_t *trace ) fDiff = DotProduct( fwd, diff ); rDiff = DotProduct( right, diff ); uDiff = DotProduct( up, diff ); + //Now get the base position of the destination ent = G_Find (NULL, FOFS(targetname), self->target2); if (!ent || !ent->inuse) @@ -1635,9 +1639,9 @@ void hyperspace_touch( gentity_t *self, gentity_t *other, trace_t *trace ) VectorCopy( ent->s.origin, newOrg ); //finally, add the offset into the new origin AngleVectors( ent->s.angles, fwd, right, up ); - VectorMA( newOrg, fDiff, fwd, newOrg ); - VectorMA( newOrg, rDiff, right, newOrg ); - VectorMA( newOrg, uDiff, up, newOrg ); + VectorMA( newOrg, fDiff*self->radius, fwd, newOrg ); + VectorMA( newOrg, rDiff*self->radius, right, newOrg ); + VectorMA( newOrg, uDiff*self->radius, up, newOrg ); //G_Printf("hyperspace from %s to %s\n", vtos(other->client->ps.origin), vtos(newOrg) ); //now put them in the offset position, facing the angles that position wants them to be facing TeleportPlayer( other, newOrg, ent->s.angles ); @@ -1700,9 +1704,12 @@ Ship will turn to face the angles of the first target_position then fly forward, "target" whatever position the ship teleports from in relation to the target_position specified here, that's the relative position the ship will spawn at around the target2 target_position "target2" name of target_position to teleport the ship to (will be relative to it's origin) +"exitscale" Can use this to make the vehicle appear farther from the exit position than they were from the entry position at the time of teleporting (scales the relative position - default is "1" - normal, no scale) */ void SP_trigger_hyperspace(gentity_t *self) { + G_SpawnFloat( "exitscale", "1", &self->radius); + //register the hyperspace end sound (start sounds are customized) G_SoundIndex( "sound/vehicles/common/hyperend.wav" ); @@ -1788,4 +1795,213 @@ void SP_func_timer( gentity_t *self ) { self->r.svFlags = SVF_NOCLIENT; } +gentity_t *asteroid_pick_random_asteroid( gentity_t *self ) +{ + int t_count = 0, pick; + gentity_t *t = NULL; + while ( (t = G_Find (t, FOFS(targetname), self->target)) != NULL ) + { + if (t != self) + { + t_count++; + } + } + + if(!t_count) + { + return NULL; + } + + if(t_count == 1) + { + return (G_Find (NULL, FOFS(targetname), self->target)); + } + + //FIXME: need a seed + pick = Q_irand(1, t_count); + t_count = 0; + while ( (t = G_Find (t, FOFS(targetname), self->target)) != NULL ) + { + if (t != self) + { + t_count++; + } + else + { + continue; + } + + if(t_count == pick) + { + return t; + } + } + return NULL; +} + +int asteroid_count_num_asteroids( gentity_t *self ) +{ + int i, count = 0; + + for ( i = MAX_CLIENTS; i < ENTITYNUM_WORLD; i++ ) + { + if ( !g_entities[i].inuse ) + { + continue; + } + if ( g_entities[i].r.ownerNum == self->s.number ) + { + count++; + } + } + return count; +} + +extern void SP_func_rotating (gentity_t *ent); +extern void Q3_Lerp2Origin( int taskID, int entID, vec3_t origin, float duration ); +void asteroid_move_to_start(gentity_t *self); +void asteroid_move_to_start2(gentity_t *self, gentity_t *ownerTrigger) +{//move asteroid to a new start position + if ( ownerTrigger ) + {//move it + vec3_t startSpot, endSpot, startAngles; + float dist, speed = flrand( self->speed * 0.25f, self->speed * 2.0f ); + int capAxis, axis, time = 0; + + capAxis = Q_irand( 0, 2 ); + for ( axis = 0; axis < 3; axis++ ) + { + if ( axis == capAxis ) + { + if ( Q_irand( 0, 1 ) ) + { + startSpot[axis] = ownerTrigger->r.mins[axis]; + endSpot[axis] = ownerTrigger->r.maxs[axis]; + } + else + { + startSpot[axis] = ownerTrigger->r.maxs[axis]; + endSpot[axis] = ownerTrigger->r.mins[axis]; + } + } + else + { + startSpot[axis] = ownerTrigger->r.mins[axis]+(flrand(0,1.0f)*(ownerTrigger->r.maxs[axis]-ownerTrigger->r.mins[axis])); + endSpot[axis] = ownerTrigger->r.mins[axis]+(flrand(0,1.0f)*(ownerTrigger->r.maxs[axis]-ownerTrigger->r.mins[axis])); + } + } + //FIXME: maybe trace from start to end to make sure nothing is in the way? How big of a trace? + + G_SetOrigin( self, startSpot ); + dist = Distance( endSpot, startSpot ); + time = ceil(dist/speed)*1000; + Q3_Lerp2Origin( -1, self->s.number, endSpot, time ); + + //spin it + startAngles[0] = flrand( -360, 360 ); + startAngles[1] = flrand( -360, 360 ); + startAngles[2] = flrand( -360, 360 ); + G_SetAngles( self, startAngles ); + self->s.apos.trDelta[0] = flrand( -100, 100 ); + self->s.apos.trDelta[1] = flrand( -100, 100 ); + self->s.apos.trDelta[2] = flrand( -100, 100 ); + self->s.apos.trTime = level.time; + self->s.apos.trType = TR_LINEAR; + //move itownerTrigger back to a new start when done + self->think = asteroid_move_to_start; + self->nextthink = level.time+time; + } + else + {//crap, go bye-bye + self->think = G_FreeEntity; + self->nextthink = level.time+FRAMETIME; + } +} + +void asteroid_move_to_start(gentity_t *self) +{//move asteroid to a new start position + asteroid_move_to_start2( self, &g_entities[self->r.ownerNum] ); +} + +void asteroid_field_think(gentity_t *self) +{ + int numAsteroids = asteroid_count_num_asteroids( self ); + + self->nextthink = level.time + 500; + + if ( numAsteroids < self->count ) + { + //need to spawn a new asteroid + gentity_t *newAsteroid = G_Spawn(); + if ( newAsteroid ) + { + gentity_t *copyAsteroid = asteroid_pick_random_asteroid( self ); + if ( copyAsteroid ) + { + newAsteroid->model = copyAsteroid->model; + newAsteroid->model2 = copyAsteroid->model2; + newAsteroid->health = copyAsteroid->health; + newAsteroid->spawnflags = copyAsteroid->spawnflags; + newAsteroid->mass = copyAsteroid->mass; + newAsteroid->damage = copyAsteroid->damage; + newAsteroid->speed = copyAsteroid->speed; + + G_SetOrigin( newAsteroid, copyAsteroid->s.origin ); + G_SetAngles( newAsteroid, copyAsteroid->s.angles ); + newAsteroid->classname = "func_rotating"; + + SP_func_rotating( newAsteroid ); + + newAsteroid->genericValue15 = copyAsteroid->genericValue15; + newAsteroid->s.iModelScale = copyAsteroid->s.iModelScale; + newAsteroid->maxHealth = newAsteroid->health; + G_ScaleNetHealth(newAsteroid); + newAsteroid->radius = copyAsteroid->radius; + newAsteroid->material = copyAsteroid->material; + //CacheChunkEffects( self->material ); + + //keep track of it + newAsteroid->r.ownerNum = self->s.number; + + //position it + asteroid_move_to_start2( newAsteroid, self ); + + //think again sooner if need even more + if ( numAsteroids+1 < self->count ) + {//still need at least one more + //spawn it in 100ms + self->nextthink = level.time + 100; + } + } + } + } +} + +/*QUAKED trigger_asteroid_field (.5 .5 .5) ? +speed - how fast, on average, the asteroid moves +count - how many asteroids, max, to have at one time +target - target this at func_rotating asteroids +*/ +void SP_trigger_asteroid_field(gentity_t *self) +{ + trap_SetBrushModel( self, self->model ); +// self->r.contents = CONTENTS_TRIGGER; // replaces the -1 from trap_SetBrushModel + self->r.contents = 0; + self->r.svFlags = SVF_NOCLIENT; + + if ( !self->count ) + { + self->health = 20; + } + + if ( !self->speed ) + { + self->speed = 10000; + } + + self->think = asteroid_field_think; + self->nextthink = level.time + 100; + + trap_LinkEntity(self); +} \ No newline at end of file diff --git a/codemp/game/g_turret.c b/codemp/game/g_turret.c index 8a30494..6633b02 100644 --- a/codemp/game/g_turret.c +++ b/codemp/game/g_turret.c @@ -656,11 +656,15 @@ Large 2-piece turbolaser turret 0 - none 1 - red 2 - blue + +"icon" - icon that represents the objective on the radar */ //----------------------------------------------------- void SP_misc_turret( gentity_t *base ) //----------------------------------------------------- { + char* s; + base->s.modelindex2 = G_ModelIndex( "models/map_objects/hoth/turret_bottom.md3" ); base->s.modelindex = G_ModelIndex( "models/map_objects/hoth/turret_base.md3" ); //base->playerModel = gi.G2API_InitGhoul2Model( base->ghoul2, "models/map_objects/imp_mine/turret_canon.glm", base->s.modelindex ); @@ -669,6 +673,14 @@ void SP_misc_turret( gentity_t *base ) //gi.G2API_SetBoneAngles( &base->ghoul2[base->playerModel], "Bone_body", vec3_origin, BONE_ANGLES_POSTMULT, POSITIVE_Y, POSITIVE_Z, POSITIVE_X, NULL ); //base->torsoBolt = gi.G2API_AddBolt( &base->ghoul2[base->playerModel], "*flash03" ); + G_SpawnString( "icon", "", &s ); + if (s && s[0]) + { + // We have an icon, so index it now. We are reusing the genericenemyindex + // variable rather than adding a new one to the entity state. + base->s.genericenemyindex = G_IconIndex(s); + } + G_SetAngles( base, base->s.angles ); G_SetOrigin( base, base->s.origin ); diff --git a/codemp/game/g_turret_G2.c b/codemp/game/g_turret_G2.c index afe6573..b38eaca 100644 --- a/codemp/game/g_turret_G2.c +++ b/codemp/game/g_turret_G2.c @@ -251,6 +251,14 @@ void turretG2_die ( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, self->s.shouldtarget = qfalse; //self->s.owner = MAX_CLIENTS; //not owned by any client + if ( attacker + && attacker->s.number < MAX_CLIENTS + && !OnSameTeam( attacker, self ) ) + {//give them a point for the kill + AddScore( attacker, self->r.currentOrigin, 1 ); + //should we send an obit? nah... + } + // hack the effect angle so that explode death can orient the effect properly if ( self->spawnflags & 2 ) { @@ -1014,12 +1022,16 @@ Turret that hangs from the ceiling, will aim and shoot at enemies 2 - blue customscale - custom scaling size. 100 is normal size, 1024 is the max scaling. this will change the bounding box size, so be careful of starting in solid! + +"icon" - icon that represents the objective on the radar */ //----------------------------------------------------- void SP_misc_turretG2( gentity_t *base ) //----------------------------------------------------- { int customscaleVal; + char* s; + turretG2_set_models( base, qfalse ); G_SpawnInt("painwait", "0", &base->genericValue4); @@ -1036,6 +1048,14 @@ void SP_misc_turretG2( gentity_t *base ) base->modelScale[0] = base->modelScale[1] = base->modelScale[2] = base->s.iModelScale/100.0f; } + G_SpawnString( "icon", "", &s ); + if (s && s[0]) + { + // We have an icon, so index it now. We are reusing the genericenemyindex + // variable rather than adding a new one to the entity state. + base->s.genericenemyindex = G_IconIndex(s); + } + finish_spawning_turretG2( base ); if (( base->spawnflags & 1 )) // Start_Off diff --git a/codemp/game/g_utils.c b/codemp/game/g_utils.c index ca84b3a..1e5cdde 100644 --- a/codemp/game/g_utils.c +++ b/codemp/game/g_utils.c @@ -744,7 +744,7 @@ static void G_SpewEntList(void) numTempEntST++; } - str = va("TEMPENT %4i: EV %i\n", ent->s.number, (ent->s.event&~EV_EVENT_BITS)); + str = va("TEMPENT %4i: EV %i\n", ent->s.number, ent->s.eType-ET_EVENTS); Com_Printf(str); #ifndef VM_OR_FINAL_BUILD if (fh) @@ -1065,6 +1065,10 @@ gentity_t *G_TempEntity( vec3_t origin, int event ) { VectorCopy( origin, snapped ); SnapVector( snapped ); // save network bandwidth G_SetOrigin( e, snapped ); + //WTF? Why aren't we setting the s.origin? (like below) + //cg_events.c code checks origin all over the place!!! + //Trying to save bandwidth...? + //VectorCopy( snapped, e->s.origin ); // find cluster for PVS trap_LinkEntity( e ); diff --git a/codemp/game/g_vehicleTurret.c b/codemp/game/g_vehicleTurret.c index 41a8a04..0a34ffc 100644 --- a/codemp/game/g_vehicleTurret.c +++ b/codemp/game/g_vehicleTurret.c @@ -348,6 +348,11 @@ void VEH_TurretThink( Vehicle_t *pVeh, gentity_t *parent, int turretNum ) {//this turret does not think on its own. return; } + //okay, so it has AI, but still don't think if there's no pilot! + if ( !pVeh->m_pPilot ) + { + return; + } vehWeapon = &g_vehWeaponInfo[turretStats->iWeapon]; rangeSq = (turretStats->fAIRange*turretStats->fAIRange); @@ -377,8 +382,12 @@ void VEH_TurretThink( Vehicle_t *pVeh, gentity_t *parent, int turretNum ) } else if ( parent->enemy && parent->enemy->s.number < ENTITYNUM_WORLD ) { - turretEnemy = parent->enemy; - doAim = qtrue; + if ( g_gametype.integer < GT_TEAM + || !OnSameTeam( parent->enemy, parent ) ) + {//either not in a team game or the enemy isn't on the same team + turretEnemy = parent->enemy; + doAim = qtrue; + } } if ( turretEnemy ) {//found one diff --git a/codemp/game/g_vehicles.c b/codemp/game/g_vehicles.c index 88ac841..56fad48 100644 --- a/codemp/game/g_vehicles.c +++ b/codemp/game/g_vehicles.c @@ -44,7 +44,10 @@ #ifdef _JK2MP extern gentity_t *NPC_Spawn_Do( gentity_t *ent ); extern void NPC_SetAnim(gentity_t *ent,int setAnimParts,int anim,int setAnimFlags); +extern void G_DamageFromKiller( gentity_t *pEnt, gentity_t *pVehEnt, gentity_t *attacker, vec3_t org, int damage, int dflags, int mod ); + #else + extern gentity_t *NPC_Spawn_Do( gentity_t *pEnt, qboolean fullSpawnNow ); extern qboolean G_ClearLineOfSight(const vec3_t point1, const vec3_t point2, int ignore, int clipmask); @@ -590,6 +593,7 @@ bool ValidateBoard( Vehicle_t *pVeh, bgEntity_t *pEnt ) return true; } +#ifdef VEH_CONTROL_SCHEME_4 void FighterStorePilotViewAngles( Vehicle_t *pVeh, bgEntity_t *parent ) { playerState_t *riderPS; @@ -620,6 +624,7 @@ void FighterStorePilotViewAngles( Vehicle_t *pVeh, bgEntity_t *parent ) VectorClear( pVeh->m_vPrevRiderViewAngles ); pVeh->m_vPrevRiderViewAngles[YAW] = AngleNormalize180(riderPS->viewangles[YAW]); } +#endif// VEH_CONTROL_SCHEME_4 // Board this Vehicle (get on). The first entity to board an empty vehicle becomes the Pilot. bool Board( Vehicle_t *pVeh, bgEntity_t *pEnt ) @@ -852,10 +857,13 @@ bool Board( Vehicle_t *pVeh, bgEntity_t *pEnt ) #endif } +#ifdef VEH_CONTROL_SCHEME_4 if ( pVeh->m_pVehicleInfo->type == VH_FIGHTER ) {//clear their angles FighterStorePilotViewAngles( pVeh, (bgEntity_t *)parent ); } +#endif //VEH_CONTROL_SCHEME_4 + VectorCopy( pVeh->m_vOrientation, vPlayerDir ); vPlayerDir[ROLL] = 0; SetClientViewAngle( ent, vPlayerDir ); @@ -1581,7 +1589,7 @@ static void DeathUpdate( Vehicle_t *pVeh ) bottom[2] += parent->mins[2] - 32; G_VehicleTrace( &trace, parent->currentOrigin, lMins, lMaxs, bottom, parent->s.number, CONTENTS_SOLID ); #ifdef _JK2MP - G_RadiusDamage( trace.endpos, NULL, pVeh->m_pVehicleInfo->explosionDamage, pVeh->m_pVehicleInfo->explosionRadius, NULL, NULL, MOD_EXPLOSIVE );//FIXME: extern damage and radius or base on fuel + G_RadiusDamage( trace.endpos, parent, pVeh->m_pVehicleInfo->explosionDamage, pVeh->m_pVehicleInfo->explosionRadius, NULL, NULL, MOD_VEH_EXPLOSION );//FIXME: extern damage and radius or base on fuel #else G_RadiusDamage( trace.endpos, NULL, pVeh->m_pVehicleInfo->explosionDamage, pVeh->m_pVehicleInfo->explosionRadius, NULL, MOD_EXPLOSIVE );//FIXME: extern damage and radius or base on fuel #endif @@ -2285,26 +2293,15 @@ maintainSelfDuringBoarding: { if (pVeh->m_iRemovedSurfaces) { - gentity_t *killer = parent; float dmg; G_VehicleDamageBoxSizing(pVeh); //damage him constantly if any chunks are currently taken off - if (parent->client->ps.otherKiller < ENTITYNUM_WORLD && - parent->client->ps.otherKillerTime > level.time) - { - gentity_t *potentialKiller = &g_entities[parent->client->ps.otherKiller]; - - if (potentialKiller->inuse && potentialKiller->client) - { //he's valid I guess - killer = potentialKiller; - } - } - //FIXME: aside from bypassing shields, maybe set m_iShields to 0, too... ? // 3 seconds max on death. dmg = (float)parent->client->ps.stats[STAT_MAX_HEALTH] * pVeh->m_fTimeModifier / 180.0f; - G_Damage(parent, killer, killer, NULL, parent->client->ps.origin, dmg, DAMAGE_NO_SELF_PROTECTION|DAMAGE_NO_HIT_LOC|DAMAGE_NO_PROTECTION|DAMAGE_NO_ARMOR, MOD_SUICIDE); + //FIXME: aside from bypassing shields, maybe set m_iShields to 0, too... ? + G_DamageFromKiller( parent, parent, parent, parent->client->ps.origin, dmg, DAMAGE_NO_SELF_PROTECTION|DAMAGE_NO_HIT_LOC|DAMAGE_NO_PROTECTION|DAMAGE_NO_ARMOR, MOD_SUICIDE ); } //make sure playerstate value stays in sync @@ -3078,8 +3075,8 @@ void G_VehicleSetDamageLocFlags( gentity_t *veh, int impactDir, int deathPoint ) { perc = 0.99f; } - heavyDamagePoint = ceil( deathPoint*perc*0.25f ); - lightDamagePoint = ceil( deathPoint*perc ); + lightDamagePoint = ceil( deathPoint*perc*0.25f ); + heavyDamagePoint = ceil( deathPoint*perc ); } else { @@ -3091,14 +3088,14 @@ void G_VehicleSetDamageLocFlags( gentity_t *veh, int impactDir, int deathPoint ) {//destroyed G_SetVehDamageFlags( veh, impactDir, 3 ); } - else if ( veh->locationDamage[impactDir] <= heavyDamagePoint ) - {//heavy only - G_SetVehDamageFlags( veh, impactDir, 2 ); - } else if ( veh->locationDamage[impactDir] <= lightDamagePoint ) {//light only G_SetVehDamageFlags( veh, impactDir, 1 ); } + else if ( veh->locationDamage[impactDir] <= heavyDamagePoint ) + {//heavy only + G_SetVehDamageFlags( veh, impactDir, 2 ); + } } } @@ -3182,7 +3179,7 @@ qboolean G_FlyVehicleDestroySurface( gentity_t *veh, int surface ) veh->m_pVehicle->m_iRemovedSurfaces |= smashedBits; //do some explosive damage, but don't damage this ship with it - G_RadiusDamage(veh->client->ps.origin, veh, 100, 500, veh, NULL, MOD_SUICIDE); + G_RadiusDamage(veh->client->ps.origin, veh, 100, 500, veh, NULL, MOD_VEH_EXPLOSION); //when spiraling to your death, do the electical shader veh->client->ps.electrifyTime = level.time + 10000; diff --git a/codemp/game/g_weapon.c b/codemp/game/g_weapon.c index ac5fbad..ebfe0ec 100644 --- a/codemp/game/g_weapon.c +++ b/codemp/game/g_weapon.c @@ -170,6 +170,8 @@ void touch_NULL( gentity_t *ent, gentity_t *other, trace_t *trace ) void laserTrapExplode( gentity_t *self ); void RocketDie(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod); +extern vmCvar_t g_vehAutoAimLead; + //We should really organize weapon data into tables or parse from the ext data so we have accurate info for this, float WP_SpeedOfMissileForWeapon( int wp, qboolean alt_fire ) { @@ -401,8 +403,8 @@ void WP_FireTurboLaserMissile( gentity_t *ent, vec3_t start, vec3_t dir ) missile->splashDamage = ent->splashDamage; //FIXME: externalize missile->splashRadius = ent->splashRadius; //FIXME: externalize missile->dflags = DAMAGE_DEATH_KNOCKBACK; - missile->methodOfDeath = MOD_TURBLAST; //count as a heavy weap - missile->splashMethodOfDeath = MOD_TURBLAST;// ?SPLASH; + missile->methodOfDeath = MOD_TARGET_LASER;//MOD_TURBLAST; //count as a heavy weap + missile->splashMethodOfDeath = MOD_TARGET_LASER;//MOD_TURBLAST;// ?SPLASH; missile->clipmask = MASK_SHOT; // we don't want it to bounce forever @@ -564,6 +566,8 @@ static void WP_DisruptorMainFire( gentity_t *ent ) te->s.angles[1] = 1; } te->s.eventParm = 0; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum return; } @@ -767,6 +771,8 @@ void WP_DisruptorAltFire( gentity_t *ent ) te->s.angles[1] = 1; } te->s.eventParm = 0; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum return; } @@ -1701,6 +1707,38 @@ void rocketThink( gentity_t *ent ) // Now the rocket can't do a 180 in space, so we'll limit the turn to about 45 degrees. dot = DotProduct( targetdir, ent->movedir ); + if ( (ent->spawnflags&1) ) + {//vehicle rocket + if ( ent->radius > -1.0f ) + {//can lose the lock if DotProduct drops below this number + if ( dot < ent->radius ) + {//lost the lock!!! + //HMM... maybe can re-lock on if they come in front again? + /* + //OR: should it stop trying to lock altogether? + if ( ent->genericValue1 ) + {//have a timelimit, set next think to that + ent->nextthink = ent->genericValue1; + if ( ent->genericValue2 ) + {//explode when die + ent->think = G_ExplodeMissile; + } + else + { + ent->think = G_FreeEntity; + } + } + else + { + ent->think = NULL; + ent->nextthink = -1; + } + */ + return; + } + } + } + // a dot of 1.0 means right-on-target. if ( dot < 0.0f ) @@ -3107,6 +3145,9 @@ static void WP_FireConcussionAlt( gentity_t *ent ) traceEnt->client->ps.otherKiller = ent->s.number; traceEnt->client->ps.otherKillerTime = level.time + 5000; traceEnt->client->ps.otherKillerDebounceTime = level.time + 100; + traceEnt->client->otherKillerMOD = MOD_UNKNOWN; + traceEnt->client->otherKillerVehWeapon = 0; + traceEnt->client->otherKillerWeaponType = WP_NONE; traceEnt->client->ps.velocity[0] += pushDir[0]*pStr; traceEnt->client->ps.velocity[1] += pushDir[1]*pStr; @@ -3669,10 +3710,13 @@ gentity_t *WP_FireVehicleWeapon( gentity_t *ent, vec3_t start, vec3_t dir, vehWe if ( vehWeapon->iHealth ) {//the missile can take damage + /* + //don't do this - ships hit them first and have no trace.plane.normal to bounce off it at and end up in the middle of the asteroid... missile->health = vehWeapon->iHealth; missile->takedamage = qtrue; missile->r.contents = MASK_SHOT; missile->die = RocketDie; + */ } //pilot should own this projectile on server if we have a pilot @@ -3748,6 +3792,7 @@ gentity_t *WP_FireVehicleWeapon( gentity_t *ent, vec3_t start, vec3_t dir, vehWe missile->spawnflags |= 1;//just to let it know it should be faster... missile->speed = vehWeapon->fSpeed; missile->angle = vehWeapon->fHoming; + missile->radius = vehWeapon->fHomingFOV; //crap, if we have a lifetime, need to store that somewhere else on ent and have rocketThink func check it every frame... if ( vehWeapon->iLifeTime ) {//expire after a time @@ -3771,6 +3816,13 @@ gentity_t *WP_FireVehicleWeapon( gentity_t *ent, vec3_t start, vec3_t dir, vehWe } if ( !vehWeapon->fSpeed ) {//a mine or something? + if ( vehWeapon->iHealth ) + {//the missile can take damage + missile->health = vehWeapon->iHealth; + missile->takedamage = qtrue; + missile->r.contents = MASK_SHOT; + missile->die = RocketDie; + } //only do damage when someone touches us missile->s.weapon = WP_THERMAL;//does this really matter? G_SetOrigin( missile, start ); @@ -3851,6 +3903,7 @@ void G_EstimateCamPos( vec3_t viewAngles, vec3_t cameraFocusLoc, float viewheigh cameraFocusAngles[PITCH] += pitchOffset; if ( !bg_fighterAltControl.integer ) {//clamp view pitch + cameraFocusAngles[PITCH] = AngleNormalize180( cameraFocusAngles[PITCH] ); if (cameraFocusAngles[PITCH] > 80.0) { cameraFocusAngles[PITCH] = 80.0; @@ -3954,13 +4007,48 @@ void WP_GetVehicleCamPos( gentity_t *ent, gentity_t *pilot, vec3_t camPos ) } } + //Control Scheme 3 Method: + G_EstimateCamPos( ent->client->ps.viewangles, pilot->client->ps.origin, pilot->client->ps.viewheight, thirdPersonRange, + thirdPersonHorzOffset, vertOffset, pitchOffset, + pilot->s.number, camPos ); + /* + //Control Scheme 2 Method: G_EstimateCamPos( ent->m_pVehicle->m_vOrientation, ent->r.currentOrigin, pilot->client->ps.viewheight, thirdPersonRange, thirdPersonHorzOffset, vertOffset, pitchOffset, pilot->s.number, camPos ); + */ +} + +void WP_VehLeadCrosshairVeh( gentity_t *camTraceEnt, vec3_t newEnd, const vec3_t dir, const vec3_t shotStart, vec3_t shotDir ) +{ + if ( g_vehAutoAimLead.integer ) + { + if ( camTraceEnt + && camTraceEnt->client + && camTraceEnt->client->NPC_class == CLASS_VEHICLE ) + {//if the crosshair is on a vehicle, lead it + float dot, distAdjust = DotProduct( camTraceEnt->client->ps.velocity, dir ); + vec3_t predPos, predShotDir; + if ( distAdjust > 500 || DistanceSquared( camTraceEnt->client->ps.origin, shotStart ) > 7000000 ) + {//moving away from me at a decent speed and/or more than @2600 units away from me + VectorMA( newEnd, distAdjust, dir, predPos ); + VectorSubtract( predPos, shotStart, predShotDir ); + VectorNormalize( predShotDir ); + dot = DotProduct( predShotDir, shotDir ); + if ( dot >= 0.75f ) + {//if the new aim vector is no more than 23 degrees off the original one, go ahead and adjust the aim + VectorCopy( predPos, newEnd ); + } + } + } + } + VectorSubtract( newEnd, shotStart, shotDir ); + VectorNormalize( shotDir ); } #define MAX_XHAIR_DIST_ACCURACY 20000.0f extern float g_cullDistance; +extern int BG_VehTraceFromCamPos( trace_t *camTrace, bgEntity_t *bgEnt, const vec3_t entOrg, const vec3_t shotStart, const vec3_t end, vec3_t newEnd, vec3_t shotDir, float bestDist ); qboolean WP_VehCheckTraceFromCamPos( gentity_t *ent, const vec3_t shotStart, vec3_t shotDir ) { //FIXME: only if dynamicCrosshair and dynamicCrosshairPrecision is on! @@ -4011,28 +4099,12 @@ qboolean WP_VehCheckTraceFromCamPos( gentity_t *ent, const vec3_t shotStart, vec } else {//NOW do the trace from the camPos and compare with above trace - //NOTE: this MUST stay up to date with the method used in CG_ScanForCrosshairEntity (where it checks the doExtraVehTraceFromViewPos bool) trace_t extraTrace; - vec3_t viewDir2End, extraEnd, camPos; - float minAutoAimDist; - - WP_GetVehicleCamPos( ent, (gentity_t *)ent->m_pVehicle->m_pPilot, camPos ); - - minAutoAimDist = Distance( ent->r.currentOrigin, camPos ) + (ent->m_pVehicle->m_pVehicleInfo->length/2.0f) + 200.0f; - - VectorSubtract( end, camPos, viewDir2End ); - VectorNormalize( viewDir2End ); - VectorMA( camPos, MAX_XHAIR_DIST_ACCURACY, viewDir2End, extraEnd ); - trap_Trace( &extraTrace, camPos, vec3_origin, vec3_origin, extraEnd, - ent->s.number, CONTENTS_SOLID|CONTENTS_BODY ); - if ( !extraTrace.allsolid - && !extraTrace.startsolid - && extraTrace.fraction < 1.0f - && (extraTrace.fraction*MAX_XHAIR_DIST_ACCURACY) > minAutoAimDist - && ((extraTrace.fraction*MAX_XHAIR_DIST_ACCURACY)-Distance( ent->r.currentOrigin, camPos )) < (trace.fraction*g_cullDistance) ) - {//this trace hit *something* that's closer than the thing the main trace hit, so use this result instead - VectorSubtract( extraTrace.endpos, shotStart, shotDir ); - VectorNormalize( shotDir ); + vec3_t newEnd; + int camTraceEntNum = BG_VehTraceFromCamPos( &extraTrace, (bgEntity_t *)ent, ent->r.currentOrigin, shotStart, end, newEnd, shotDir, (trace.fraction*g_cullDistance) ); + if ( camTraceEntNum ) + { + WP_VehLeadCrosshairVeh( &g_entities[camTraceEntNum-1], newEnd, dir, shotStart, shotDir ); return qtrue; } } @@ -4225,6 +4297,7 @@ void FireVehicleWeapon( gentity_t *ent, qboolean alt_fire ) trace_t trace; vec3_t end; vec3_t ang; + vec3_t fixedDir; if (pVeh->m_pVehicleInfo->type == VH_SPEEDER) { @@ -4234,14 +4307,15 @@ void FireVehicleWeapon( gentity_t *ent, qboolean alt_fire ) { VectorCopy(pVeh->m_vOrientation, ang); } - AngleVectors( ang, dir, NULL, NULL ); - VectorMA( ent->r.currentOrigin, 32768, dir, end ); + AngleVectors( ang, fixedDir, NULL, NULL ); + VectorMA( ent->r.currentOrigin, 32768, fixedDir, end ); //VectorMA( ent->r.currentOrigin, 8192, dir, end ); trap_Trace( &trace, ent->r.currentOrigin, vec3_origin, vec3_origin, end, ent->s.number, MASK_SHOT ); if ( trace.fraction < 1.0f && !trace.allsolid && !trace.startsolid ) { - VectorSubtract( trace.endpos, start, dir ); - VectorNormalize( dir ); + vec3_t newEnd; + VectorCopy( trace.endpos, newEnd ); + WP_VehLeadCrosshairVeh( &g_entities[trace.entityNum], newEnd, fixedDir, start, dir ); } } diff --git a/codemp/game/mssccprj.scc b/codemp/game/mssccprj.scc index da4c818..38c4259 100644 --- a/codemp/game/mssccprj.scc +++ b/codemp/game/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [JK2_game.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/game", EGAAAAAA diff --git a/codemp/game/q_math.c b/codemp/game/q_math.c index aab7f34..6f61016 100644 --- a/codemp/game/q_math.c +++ b/codemp/game/q_math.c @@ -1442,14 +1442,16 @@ float flrand(float min, float max) { float result; - assert((max - min) < 32768); - holdrand = (holdrand * 214013L) + 2531011L; result = (float)(holdrand >> 17); // 0 - 32767 range result = ((result * (max - min)) / 32768.0F) + min; return(result); } +float Q_flrand(float min, float max) +{ + return flrand(min,max); +} // Returns an integer min <= x <= max (ie inclusive) @@ -1466,6 +1468,11 @@ int irand(int min, int max) return(result); } +int Q_irand(int value1, int value2) +{ + return irand(value1, value2); +} + float powf ( float x, int y ) { float r = x; diff --git a/codemp/game/q_shared.c b/codemp/game/q_shared.c index e026398..c495668 100644 --- a/codemp/game/q_shared.c +++ b/codemp/game/q_shared.c @@ -1365,14 +1365,6 @@ void Info_SetValueForKey_Big( char *s, const char *key, const char *value ) { strcat (s, newi); } - -//rww - convience function.. -int Q_irand(int value1, int value2) -{ - value2++; //so it can round down - return ((rand() * (value2 - value1)) >> 15) + value1; -} - //==================================================================== diff --git a/codemp/game/q_shared.h b/codemp/game/q_shared.h index 8926d97..26ae173 100644 --- a/codemp/game/q_shared.h +++ b/codemp/game/q_shared.h @@ -682,6 +682,56 @@ typedef enum SS_NUM_SABER_STYLES } saber_styles_t; +//SABER FLAGS +//Old bools converted to a flag now +#define SFL_NOT_LOCKABLE (1<<0)//can't get into a saberlock +#define SFL_NOT_THROWABLE (1<<1)//can't be thrown - FIXME: maybe make this a max level of force saber throw that can be used with this saber? +#define SFL_NOT_DISARMABLE (1<<2)//can't be dropped +#define SFL_NOT_ACTIVE_BLOCKING (1<<3)//don't to try to block incoming shots with this saber +#define SFL_TWO_HANDED (1<<4)//uses both hands +#define SFL_SINGLE_BLADE_THROWABLE (1<<5)//can throw this saber if only the first blade is on +#define SFL_RETURN_DAMAGE (1<<6)//when returning from a saber throw, it keeps spinning and doing damage +//NEW FLAGS +#define SFL_ON_IN_WATER (1<<7)//if set, weapon stays active even in water +#define SFL_BOUNCE_ON_WALLS (1<<8)//if set, the saber will bounce back when it hits solid architecture (good for real-sword type mods) +#define SFL_BOLT_TO_WRIST (1<<9)//if set, saber model is bolted to wrist, not in hand... useful for things like claws & shields, etc. +//#define SFL_STICK_ON_IMPACT (1<94Q<-itX-ztLORG|Mz?|-|@ch_vUQci^pnBSHyM|O-pODS!@y3 zqfD9{>#yK_|2d66lHke4Te{=L9_T4ZYl~;2+w+6s0qCj7y>zqm)Ue}XK6)DR<6*Nm zjyF_dbMy>E=#gr$)lfu_pMeVsJ_f(oArtGND-oBtj?j~#{irkHKFR+Soh=+lodqvw z8K07Oz>Hc2C(Km;R9<6FeHQkN`j=_2vZ2m~MJj96gOS$MIq>;&cP^Rjnn-;P_Puda)rfEs09z731x{l6qF+REZv}h!{Hl|X@hw5Fbgfp8bh;@a_kRhwB{1+# zkE@g#qL(87O`NS9q*pC9K);N%HeI}Ga^{nSjP(`bgcD!mCdbk5Yv2#ocAe92CQ62* zmmzH%Y@Nq>rAo-T%Mm@1D8Frlza$C00{Jr4_r;%9VUiZ~tH_G=_c{a#ZW14KE%Lap z#k~BZx7q9Hl?eY-wSzwQg6)l7MUJo0>L1tJ!IEoLBOby5Lwb@ESn@nINQl5Z#fG24 zhN0IYqdJ>>&%DiL$Dr3Cs-5=RtWu`3e(3ecNYA{i*G^J;{%i2#)xWvdRPb3hbRA+l zdtTbVW~OX7I=QFDI=G&c{)JtH-hias($$ZcT*K+3-$VqS2G4i> z)5?+S-$KL|$saBgz<2W*3w~sf%EfoLSngTgEjx_<0MQvKR(gaTkdgcA zKsHWHuk>H|w~SoxA=2>2Ypc|aKC76l zb%qmy7kP_AVZVMn-mzDE^G4lfBxF7N!+o<8LvoZ=94apWzj7|pCwFh9%cO3+wwvZVq&amXi6-hTSdBe=D`ilpDi2@Z<9l?^Ia_`^OXm48;V1!TxIlpYB(r7 zJ}_y_KsmXeeAv>HeRhs-MqL2M%qi(L=8diVcN{N-g@wu8Z!|y4-QglQ!rp7}=KW=| zA#gFwbPrAFI`x*$_eIz-+RL_&CWh`GCGaS_V)^~|r=(;&F2NbnZC?XsDx~CjOX0wQ zT}$>kO{cyLhrbfI%&73ApT7bpI*JU3^(>~=z)@udvl?D5m6G`=gU#KcYLRs7+4JUkwMQIn3#IwnI*?UjuIs8PmVT`#t@9EgW!rVWc7_ijIFB zJo??y0CSrd>aVbu=A-`nu9tNFrw`)s*6<}d1H~#P2YzK_}Pvw;zT zd;SZd`~4|X9&b_qJ5ya!ZJA(vUIpI|il4Jg?I$MdVHY-yLnrgT=P%>w_zV(Ye|XT|Tx{$n zChMut4F8`KzaH@{6>!7gM{vTHszd8T1~5{%7K@^&`CXxV*aL|Ou7{VIe3oZMO%pr8 z*Wi~i?sf9LJgyAZ!IleLruTN*F7t-3!(|st_6S1%qU+0iD32FfG4}JIGg)+f{SWX@ BfG_|6 literal 2144 zcmXBV30zEh00;1yhR8_LWQvlO4k{@stW z`tRH}sQE_d8Hi#*D%-O$k59H=Mv9Avz2=8j^EJ>j5r@M)D^flSXKJ@Yz87D!g#_oA7f18);|5Aqi*?!i414}a^n4_>_Va4!{S20q!%LnIdLc4(1mmmQ?>N)Cd<~&FA zQsj7IqsX@8g^lkbWImyXi?!p=z~&hu(

{?XOCbkokCo#Aiz9n)O_!{RIA^ z`2BRS(Q4XVurWWebN-{o#pHfJMVOK0jj>bu7nAXKBT;S4i1v%K7DuB$Lt3?y*O|y& zJ;?ZakS+7lZ`kNcJjnTaky3RIQIwMliFuZ8WIa8IA17I!#}e*Uk(ALe8Z=697-{^w^B0x0yu5jv{?41y;3rsLO5b`nRih9St&Vw z5iDO5?>_W0UrNSv4K`W0t^c5cN4pqqe($@+g|$iQjqN2cRp5JXr5RUB)_*A+Xz8NI ztez>I2$#X(AGxQv6MEdqc*@~fu`Xse?RDw*M+H39ye!gIWh)``Q3+@4*z>)ie7=N? zrwVo-_sYL-O^cYg8eTKVaWD;gC?@;Yz^7-0jLlZQpSbhp zZ@|N9RdUd?*D`YcCb;(6q>p`e!!mOGX4pN=dWn<85g9rEO*qWpUUHxOf!g~e}7{17>pC=#XFbvCJ4y= zh=ZG=qBo^B1&FNScsR+NbK7>&4%$cHyJzM$G6y4Nn*L1Qo(Ba`gA#XKRoMJ z4{(`$ay=#b48|Y*OCBin?n$`tb9h;sUH8D$*}ScA3l_zQ%?>%8%X5U}_wE+_+xV}M z8@|2f+rqcu0q-5mQ9GSQRd6e8;^QF9Ek5Mo2H%0}^2Z+tp}OR#3?rOmMT6DXpJf{K G`{X}@7iMw* diff --git a/codemp/game/w_force.c b/codemp/game/w_force.c index 87d793c..d38f91f 100644 --- a/codemp/game/w_force.c +++ b/codemp/game/w_force.c @@ -161,6 +161,11 @@ void WP_InitForcePowers( gentity_t *ent ) { //if server has no max rank, default to max (50) maxRank = FORCE_MASTERY_JEDI_MASTER; } + else if (maxRank >= NUM_FORCE_MASTERY_LEVELS) + {//ack, prevent user from being dumb + maxRank = FORCE_MASTERY_JEDI_MASTER; + trap_Cvar_Set( "g_maxForceRank", va("%i", maxRank) ); + } /* if (g_forcePowerDisable.integer) @@ -462,7 +467,7 @@ void WP_InitForcePowers( gentity_t *ent ) { if (warnClient || !ent->client->sess.setForce) { //the client's rank is too high for the server and has been autocapped, so tell them - if (g_gametype.integer != GT_HOLOCRON && g_gametype.integer != GT_JEDIMASTER) + if (g_gametype.integer != GT_HOLOCRON && g_gametype.integer != GT_JEDIMASTER ) { #ifdef EVENT_FORCE_RANK gentity_t *te = G_TempEntity( vec3_origin, EV_GIVE_NEW_RANK ); @@ -501,7 +506,7 @@ void WP_InitForcePowers( gentity_t *ent ) ent->client->sess.setForce = qtrue; } - if (!didEvent) + if (!didEvent ) { #ifdef EVENT_FORCE_RANK gentity_t *te = G_TempEntity( vec3_origin, EV_GIVE_NEW_RANK ); @@ -879,7 +884,7 @@ qboolean WP_ForcePowerUsable( gentity_t *self, forcePowers_t forcePower ) if ( !self->client->ps.saberHolstered ) { - if ( self->client->saber[0].twoHanded ) + if ( (self->client->saber[0].saberFlags&SFL_TWO_HANDED) ) { if ( g_saberRestrictForce.integer ) { @@ -897,7 +902,7 @@ qboolean WP_ForcePowerUsable( gentity_t *self, forcePowers_t forcePower ) } } - if ( self->client->saber[0].twoHanded + if ( (self->client->saber[0].saberFlags&SFL_TWO_HANDED) || (self->client->saber[0].model && self->client->saber[0].model[0]) ) {//this saber requires the use of two hands OR our other hand is using an active saber too if ( (self->client->saber[0].forceRestrictions&(1<client->ps.otherKiller = self->s.number; push_list[x]->client->ps.otherKillerTime = level.time + 5000; push_list[x]->client->ps.otherKillerDebounceTime = level.time + 100; + push_list[x]->client->otherKillerMOD = MOD_UNKNOWN; + push_list[x]->client->otherKillerVehWeapon = 0; + push_list[x]->client->otherKillerWeaponType = WP_NONE; pushPowerMod -= (dirLen*0.7); if (pushPowerMod < 16) @@ -4034,6 +4042,9 @@ void DoGripAction(gentity_t *self, forcePowers_t forcePower) gripEnt->client->ps.otherKiller = self->s.number; gripEnt->client->ps.otherKillerTime = level.time + 5000; gripEnt->client->ps.otherKillerDebounceTime = level.time + 100; + gripEnt->client->otherKillerMOD = MOD_UNKNOWN; + gripEnt->client->otherKillerVehWeapon = 0; + gripEnt->client->otherKillerWeaponType = WP_NONE; gripEnt->client->ps.forceGripChangeMovetype = PM_FLOAT; @@ -4067,6 +4078,9 @@ void DoGripAction(gentity_t *self, forcePowers_t forcePower) gripEnt->client->ps.otherKiller = self->s.number; gripEnt->client->ps.otherKillerTime = level.time + 5000; gripEnt->client->ps.otherKillerDebounceTime = level.time + 100; + gripEnt->client->otherKillerMOD = MOD_UNKNOWN; + gripEnt->client->otherKillerVehWeapon = 0; + gripEnt->client->otherKillerWeaponType = WP_NONE; gripEnt->client->ps.forceGripChangeMovetype = PM_FLOAT; diff --git a/codemp/game/w_saber.c b/codemp/game/w_saber.c index ab3e1c7..41fcfd1 100644 --- a/codemp/game/w_saber.c +++ b/codemp/game/w_saber.c @@ -27,13 +27,19 @@ qboolean BG_SaberInReturn( int move ); qboolean BG_InKnockDownOnGround( playerState_t *ps ); qboolean BG_StabDownAnim( int anim ); qboolean BG_SabersOff( playerState_t *ps ); +qboolean BG_SaberInTransitionAny( int move ); +qboolean BG_SaberInAttackPure( int move ); +qboolean WP_SaberBladeUseSecondBladeStyle( saberInfo_t *saber, int bladeNum ); +qboolean WP_SaberBladeDoTransitionDamage( saberInfo_t *saber, int bladeNum ); #include "../namespace_end.h" void WP_SaberAddG2Model( gentity_t *saberent, const char *saberModel, qhandle_t saberSkin ); void WP_SaberRemoveG2Model( gentity_t *saberent ); float RandFloat(float min, float max) { - return ((rand() * (max - min)) / 32768.0F) + min; +// return ((rand() * (max - min)) / 32768.0F) + min; +//for linux: + return ((rand() * (max - min)) / (float)RAND_MAX) + min; } #ifdef DEBUG_SABER_BOX @@ -374,6 +380,9 @@ static GAME_INLINE void SetSaberBoxSize(gentity_t *saberent) int i; int j = 0; int k = 0; + qboolean dualSabers = qfalse; + qboolean alwaysBlock[MAX_SABERS][MAX_BLADES]; + qboolean forceBlock = qfalse; assert(saberent && saberent->inuse); @@ -393,18 +402,63 @@ static GAME_INLINE void SetSaberBoxSize(gentity_t *saberent) return; } + if ( owner->client->saber[1].model + && owner->client->saber[1].model[0] ) + { + dualSabers = qtrue; + } + if ( PM_SaberInBrokenParry(owner->client->ps.saberMove) || BG_SuperBreakLoseAnim( owner->client->ps.torsoAnim ) ) { //let swings go right through when we're in this state - VectorSet( saberent->r.mins, 0, 0, 0 ); - VectorSet( saberent->r.maxs, 0, 0, 0 ); -#ifndef FINAL_BUILD - if (g_saberDebugPrint.integer > 1) + for ( i = 0; i < MAX_SABERS; i++ ) { - Com_Printf("Client %i in broken parry, saber box 0\n", owner->s.number); + if ( i > 0 && !dualSabers ) + {//not using a second saber, set it to not blocking + for ( j = 0; j < MAX_BLADES; j++ ) + { + alwaysBlock[i][j] = qfalse; + } + } + else + { + if ( (owner->client->saber[i].saberFlags2&SFL2_ALWAYS_BLOCK) ) + { + for ( j = 0; j < owner->client->saber[i].numBlades; j++ ) + { + alwaysBlock[i][j] = qtrue; + forceBlock = qtrue; + } + } + if ( owner->client->saber[i].bladeStyle2Start > 0 ) + { + for ( j = owner->client->saber[i].bladeStyle2Start; j < owner->client->saber[i].numBlades; j++ ) + { + if ( (owner->client->saber[i].saberFlags2&SFL2_ALWAYS_BLOCK2) ) + { + alwaysBlock[i][j] = qtrue; + forceBlock = qtrue; + } + else + { + alwaysBlock[i][j] = qfalse; + } + } + } + } } + if ( !forceBlock ) + {//no sabers/blades to FORCE to be on, so turn off blocking altogether + VectorSet( saberent->r.mins, 0, 0, 0 ); + VectorSet( saberent->r.maxs, 0, 0, 0 ); +#ifndef FINAL_BUILD + if (g_saberDebugPrint.integer > 1) + { + Com_Printf("Client %i in broken parry, saber box 0\n", owner->s.number); + } #endif - return; + return; + } } if ((level.time - owner->client->lastSaberStorageTime) > 200 || @@ -415,6 +469,27 @@ static GAME_INLINE void SetSaberBoxSize(gentity_t *saberent) return; } + if ( dualSabers + || owner->client->saber[0].numBlades > 1 ) + {//dual sabers or multi-blade saber + if ( owner->client->ps.saberHolstered > 1 ) + {//entirely off + //no blocking at all + VectorSet( saberent->r.mins, 0, 0, 0 ); + VectorSet( saberent->r.maxs, 0, 0, 0 ); + return; + } + } + else + {//single saber + if ( owner->client->ps.saberHolstered ) + {//off + //no blocking at all + VectorSet( saberent->r.mins, 0, 0, 0 ); + VectorSet( saberent->r.maxs, 0, 0, 0 ); + return; + } + } //Start out at the saber origin, then go through all the blades and push out the extents //for each blade, then set the box relative to the origin. VectorCopy(saberent->r.currentOrigin, saberent->r.mins); @@ -428,9 +503,35 @@ static GAME_INLINE void SetSaberBoxSize(gentity_t *saberent) { break; } - + if ( dualSabers + && owner->client->ps.saberHolstered == 1 + && j == 1 ) + { //this mother is holstered, get outta here. + j++; + continue; + } for (k = 0; k < owner->client->saber[j].numBlades; k++) { + if ( k > 0 ) + {//not the first blade + if ( !dualSabers ) + {//using a single saber + if ( owner->client->saber[j].numBlades > 1 ) + {//with multiple blades + if( owner->client->ps.saberHolstered == 1 ) + {//all blades after the first one are off + break; + } + } + } + } + if ( forceBlock ) + {//only do blocking with blades that are marked to block + if ( !alwaysBlock[j][k] ) + {//this blade shouldn't be blocking + continue; + } + } //VectorMA(owner->client->saber[j].blade[k].muzzlePoint, owner->client->saber[j].blade[k].lengthMax*0.5f, owner->client->saber[j].blade[k].muzzleDir, saberOrg); VectorCopy(owner->client->saber[j].blade[k].muzzlePoint, saberOrg); VectorMA(owner->client->saber[j].blade[k].muzzlePoint, owner->client->saber[j].blade[k].lengthMax, owner->client->saber[j].blade[k].muzzleDir, saberTip); @@ -1462,22 +1563,22 @@ qboolean WP_SabersCheckLock( gentity_t *ent1, gentity_t *ent2 ) return qfalse; } - if ( !ent1->client->saber[0].lockable - || !ent2->client->saber[0].lockable ) + if ( (ent1->client->saber[0].saberFlags&SFL_NOT_LOCKABLE) + || (ent2->client->saber[0].saberFlags&SFL_NOT_LOCKABLE) ) { return qfalse; } if ( ent1->client->saber[1].model && ent1->client->saber[1].model[0] && !ent1->client->ps.saberHolstered - && !ent1->client->saber[1].lockable ) + && (ent1->client->saber[1].saberFlags&SFL_NOT_LOCKABLE) ) { return qfalse; } if ( ent2->client->saber[1].model && ent2->client->saber[1].model[0] && !ent2->client->ps.saberHolstered - && !ent2->client->saber[1].lockable ) + && (ent2->client->saber[1].saberFlags&SFL_NOT_LOCKABLE) ) { return qfalse; } @@ -2146,7 +2247,7 @@ static GAME_INLINE int G_GetAttackDamage(gentity_t *self, int minDmg, int maxDmg float animSpeedFactor = 1.0f; //Be sure to scale by the proper anim speed just as if we were going to play the animation - BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, self->client->ps.torsoAnim, &animSpeedFactor, self->client->ps.brokenLimbs); + BG_SaberStartTransAnim(self->s.number, self->client->ps.fd.saberAnimLevel, self->client->ps.weapon, self->client->ps.torsoAnim, &animSpeedFactor, self->client->ps.brokenLimbs); speedDif = attackAnimLength - (attackAnimLength * animSpeedFactor); attackAnimLength += speedDif; peakPoint = attackAnimLength; @@ -2195,7 +2296,7 @@ static GAME_INLINE float G_GetAnimPoint(gentity_t *self) float animPercentage = 0; //Be sure to scale by the proper anim speed just as if we were going to play the animation - BG_SaberStartTransAnim(self->client->ps.fd.saberAnimLevel, self->client->ps.torsoAnim, &animSpeedFactor, self->client->ps.brokenLimbs); + BG_SaberStartTransAnim(self->s.number, self->client->ps.fd.saberAnimLevel, self->client->ps.weapon, self->client->ps.torsoAnim, &animSpeedFactor, self->client->ps.brokenLimbs); speedDif = attackAnimLength - (attackAnimLength * animSpeedFactor); attackAnimLength += speedDif; @@ -2287,7 +2388,17 @@ static GAME_INLINE qboolean G_G2TraceCollide(trace_t *tr, vec3_t lastValidStart, angles[YAW] = g2Hit->r.currentAngles[YAW]; } - trap_G2API_CollisionDetect ( G2Trace, g2Hit->ghoul2, angles, g2HitOrigin, level.time, g2Hit->s.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, g_g2TraceLod.integer, fRadius ); + if (g_optvehtrace.integer && + g2Hit->s.eType == ET_NPC && + g2Hit->s.NPC_class == CLASS_VEHICLE && + g2Hit->m_pVehicle) + { + trap_G2API_CollisionDetectCache ( G2Trace, g2Hit->ghoul2, angles, g2HitOrigin, level.time, g2Hit->s.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, g_g2TraceLod.integer, fRadius ); + } + else + { + trap_G2API_CollisionDetect ( G2Trace, g2Hit->ghoul2, angles, g2HitOrigin, level.time, g2Hit->s.number, lastValidStart, lastValidEnd, g2Hit->modelScale, 0, g_g2TraceLod.integer, fRadius ); + } if (G2Trace[0].mEntityNum != g2Hit->s.number) { @@ -3391,9 +3502,12 @@ static GAME_INLINE int G_PowerLevelForSaberAnim( gentity_t *ent, int saberNum, q #define MAX_SABER_VICTIMS 16 static int victimEntityNum[MAX_SABER_VICTIMS]; +static qboolean victimHitEffectDone[MAX_SABER_VICTIMS]; static float totalDmg[MAX_SABER_VICTIMS]; static vec3_t dmgDir[MAX_SABER_VICTIMS]; static vec3_t dmgSpot[MAX_SABER_VICTIMS]; +static qboolean dismemberDmg[MAX_SABER_VICTIMS]; +static int saberKnockbackFlags[MAX_SABER_VICTIMS]; static int numVictims = 0; void WP_SaberClearDamage( void ) { @@ -3402,13 +3516,17 @@ void WP_SaberClearDamage( void ) { victimEntityNum[ven] = ENTITYNUM_NONE; } - memset( totalDmg, 0, sizeof( totalDmg) ); + memset( victimHitEffectDone, 0, sizeof( victimHitEffectDone ) ); + memset( totalDmg, 0, sizeof( totalDmg ) ); memset( dmgDir, 0, sizeof( dmgDir ) ); memset( dmgSpot, 0, sizeof( dmgSpot ) ); + memset( dismemberDmg, 0, sizeof( dismemberDmg ) ); + memset( saberKnockbackFlags, 0, sizeof( saberKnockbackFlags ) ); numVictims = 0; } -void WP_SaberDamageAdd( int trVictimEntityNum, vec3_t trDmgDir, vec3_t trDmgSpot, int trDmg ) +void WP_SaberDamageAdd( int trVictimEntityNum, vec3_t trDmgDir, vec3_t trDmgSpot, + int trDmg, qboolean doDismemberment, int knockBackFlags ) { if ( trVictimEntityNum < 0 || trVictimEntityNum >= ENTITYNUM_WORLD ) { @@ -3448,6 +3566,11 @@ void WP_SaberDamageAdd( int trVictimEntityNum, vec3_t trDmgDir, vec3_t trDmgSpot { VectorCopy( trDmgSpot, dmgSpot[curVictim] ); } + if ( doDismemberment ) + { + dismemberDmg[curVictim] = qtrue; + } + saberKnockbackFlags[curVictim] |= knockBackFlags; } } @@ -3460,8 +3583,8 @@ void WP_SaberApplyDamage( gentity_t *self ) } for ( i = 0; i < numVictims; i++ ) { - gentity_t *te = NULL, *victim = NULL; - qboolean isDroid = qfalse; + gentity_t *victim = NULL; + int dflags = 0; victim = &g_entities[victimEntityNum[i]]; @@ -3471,7 +3594,37 @@ void WP_SaberApplyDamage( gentity_t *self ) totalDmg[i] *= g_saberWallDamageScale.value; } - G_Damage( victim, self, self, dmgDir[i], dmgSpot[i], totalDmg[i], 0, MOD_SABER ); + if ( !dismemberDmg[i] ) + {//don't do dismemberment! + dflags |= DAMAGE_NO_DISMEMBER; + } + dflags |= saberKnockbackFlags[i]; + + G_Damage( victim, self, self, dmgDir[i], dmgSpot[i], totalDmg[i], dflags, MOD_SABER ); + } +} + + +void WP_SaberDoHit( gentity_t *self, int saberNum, int bladeNum ) +{ + int i; + if ( !numVictims ) + { + return; + } + for ( i = 0; i < numVictims; i++ ) + { + gentity_t *te = NULL, *victim = NULL; + qboolean isDroid = qfalse; + + if ( victimHitEffectDone[i] ) + { + continue; + } + + victimHitEffectDone[i] = qtrue; + + victim = &g_entities[victimEntityNum[i]]; if ( victim->client ) { @@ -3491,6 +3644,8 @@ void WP_SaberApplyDamage( gentity_t *self ) { te->s.otherEntityNum = victimEntityNum[i]; te->s.otherEntityNum2 = self->s.number; + te->s.weapon = saberNum; + te->s.legsAnim = bladeNum; VectorCopy(dmgSpot[i], te->s.origin); //VectorCopy(tr.plane.normal, te->s.angles); @@ -3519,12 +3674,118 @@ void WP_SaberApplyDamage( gentity_t *self ) } else { - if (totalDmg[i] > SABER_NONATTACK_DAMAGE) - { //I suppose I could tie this into the saberblock event, but I'm tired of adding flags to that thing. - gentity_t *teS = G_TempEntity( te->s.origin, EV_SABER_CLASHFLARE ); - VectorCopy(te->s.origin, teS->s.origin); + if ( !WP_SaberBladeUseSecondBladeStyle( &self->client->saber[saberNum], bladeNum ) + && (self->client->saber[saberNum].saberFlags2&SFL2_NO_CLASH_FLARE) ) + {//don't do clash flare + } + else if ( WP_SaberBladeUseSecondBladeStyle( &self->client->saber[saberNum], bladeNum ) + && (self->client->saber[saberNum].saberFlags2&SFL2_NO_CLASH_FLARE2) ) + {//don't do clash flare + } + else + { + if (totalDmg[i] > SABER_NONATTACK_DAMAGE) + { //I suppose I could tie this into the saberblock event, but I'm tired of adding flags to that thing. + gentity_t *teS = G_TempEntity( te->s.origin, EV_SABER_CLASHFLARE ); + VectorCopy(te->s.origin, teS->s.origin); + } + te->s.eventParm = 0; + } + } + } + } +} + +extern qboolean G_EntIsBreakable( int entityNum ); +extern void G_Knockdown( gentity_t *victim ); +void WP_SaberRadiusDamage( gentity_t *ent, vec3_t point, float radius, int damage, float knockBack ) +{ + if ( !ent || !ent->client ) + { + return; + } + else if ( radius <= 0.0f || (damage <= 0 && knockBack <= 0) ) + { + return; + } + else + { + vec3_t mins, maxs, entDir; + int radiusEnts[128]; + gentity_t *radiusEnt = NULL; + int numEnts, i; + float dist; + + //Setup the bbox to search in + for ( i = 0; i < 3; i++ ) + { + mins[i] = point[i] - radius; + maxs[i] = point[i] + radius; + } + + //Get the number of entities in a given space + numEnts = trap_EntitiesInBox( mins, maxs, radiusEnts, 128 ); + + for ( i = 0; i < numEnts; i++ ) + { + radiusEnt = &g_entities[radiusEnts[i]]; + if ( !radiusEnt->inuse ) + { + continue; + } + + if ( radiusEnt == ent ) + {//Skip myself + continue; + } + + if ( radiusEnt->client == NULL ) + {//must be a client + if ( G_EntIsBreakable( radiusEnt->s.number ) ) + {//damage breakables within range, but not as much + G_Damage( radiusEnt, ent, ent, vec3_origin, radiusEnt->r.currentOrigin, 10, 0, MOD_MELEE ); + } + continue; + } + + if ( (radiusEnt->client->ps.eFlags2&EF2_HELD_BY_MONSTER) ) + {//can't be one being held + continue; + } + + VectorSubtract( radiusEnt->r.currentOrigin, point, entDir ); + dist = VectorNormalize( entDir ); + if ( dist <= radius ) + {//in range + if ( damage > 0 ) + {//do damage + int points = ceil((float)damage*dist/radius); + G_Damage( radiusEnt, ent, ent, vec3_origin, radiusEnt->r.currentOrigin, points, DAMAGE_NO_KNOCKBACK, MOD_MELEE ); + } + if ( knockBack > 0 ) + {//do knockback + if ( radiusEnt->client + && radiusEnt->client->NPC_class != CLASS_RANCOR + && radiusEnt->client->NPC_class != CLASS_ATST + && !(radiusEnt->flags&FL_NO_KNOCKBACK) )//don't throw them back + { + float knockbackStr = knockBack*dist/radius; + entDir[2] += 0.1f; + VectorNormalize( entDir ); + G_Throw( radiusEnt, entDir, knockbackStr ); + if ( radiusEnt->health > 0 ) + {//still alive + if ( knockbackStr > 50 ) + {//close enough and knockback high enough to possibly knock down + if ( dist < (radius*0.5f) + || radiusEnt->client->ps.groundEntityNum != ENTITYNUM_NONE ) + {//within range of my fist or within ground-shaking range and not in the air + G_Knockdown( radiusEnt );//, ent, entDir, 500, qtrue ); + } + } + } + } } - te->s.eventParm = 0; } } } @@ -3534,7 +3795,7 @@ static qboolean saberDoClashEffect = qfalse; static vec3_t saberClashPos = {0}; static vec3_t saberClashNorm = {0}; static int saberClashEventParm = 1; -void WP_SaberDoClash( void ) +void WP_SaberDoClash( gentity_t *self, int saberNum, int bladeNum ) { if ( saberDoClashEffect ) { @@ -3542,6 +3803,43 @@ void WP_SaberDoClash( void ) VectorCopy(saberClashPos, te->s.origin); VectorCopy(saberClashNorm, te->s.angles); te->s.eventParm = saberClashEventParm; + te->s.otherEntityNum2 = self->s.number; + te->s.weapon = saberNum; + te->s.legsAnim = bladeNum; + } +} + +void WP_SaberBounceSound( gentity_t *ent, int saberNum, int bladeNum ) +{ + int index = 1; + if ( !ent || !ent->client ) + { + return; + } + index = Q_irand( 1, 9 ); + if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->saber[saberNum], bladeNum ) + && ent->client->saber[saberNum].bounceSound[0] ) + { + G_Sound( ent, CHAN_AUTO, ent->client->saber[saberNum].bounceSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->saber[saberNum], bladeNum ) + && ent->client->saber[saberNum].bounce2Sound[0] ) + { + G_Sound( ent, CHAN_AUTO, ent->client->saber[saberNum].bounce2Sound[Q_irand( 0, 2 )] ); + } + else if ( !WP_SaberBladeUseSecondBladeStyle( &ent->client->saber[saberNum], bladeNum ) + && ent->client->saber[saberNum].blockSound[0] ) + { + G_Sound( ent, CHAN_AUTO, ent->client->saber[saberNum].blockSound[Q_irand( 0, 2 )] ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &ent->client->saber[saberNum], bladeNum ) + && ent->client->saber[saberNum].block2Sound[0] ) + { + G_Sound( ent, CHAN_AUTO, ent->client->saber[saberNum].block2Sound[Q_irand( 0, 2 )] ); + } + else + { + G_Sound( ent, CHAN_AUTO, G_SoundIndex( va( "sound/weapons/saber/saberblock%d.wav", index ) ) ); } } @@ -3635,8 +3933,16 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int int traceTests = 0; float trDif = 8; - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + if ( (level.time-self->client->saber[rSaberNum].blade[rBladeNum].trail.lastTime) > 100 ) + {//no valid last pos, use current + VectorCopy(saberStart, oldSaberStart); + VectorCopy(saberEnd, oldSaberEnd); + } + else + {//trace from last pos + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + } VectorSubtract(saberStart, saberEnd, saberDif); VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif); @@ -3674,8 +3980,16 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int while (tr.fraction == 1.0 && traceTests < 4 && tr.entityNum >= ENTITYNUM_NONE) { - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + if ( (level.time-self->client->saber[rSaberNum].blade[rBladeNum].trail.lastTime) > 100 ) + {//no valid last pos, use current + VectorCopy(saberStart, oldSaberStart); + VectorCopy(saberEnd, oldSaberEnd); + } + else + {//trace from last pos + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + } VectorSubtract(saberStart, saberEnd, saberDif); VectorSubtract(oldSaberStart, oldSaberEnd, oldSaberDif); @@ -3759,11 +4073,13 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int saberTraceDone = qtrue; } - if ( (SaberAttacking(self) + if ( self->client->ps.saberAttackWound < level.time + && (SaberAttacking(self) || BG_SuperBreakWinAnim(self->client->ps.torsoAnim) || (d_saberSPStyleDamage.integer&&self->client->ps.saberInFlight&&rSaberNum==0) - || (self->client->ps.m_iVehicleNum && self->client->ps.saberMove > LS_READY) ) && - self->client->ps.saberAttackWound < level.time ) + || (WP_SaberBladeDoTransitionDamage( &self->client->saber[rSaberNum], rBladeNum )&&BG_SaberInTransitionAny(self->client->ps.saberMove)) + || (self->client->ps.m_iVehicleNum && self->client->ps.saberMove > LS_READY) ) + ) { //this animation is that of the last attack movement, and so it should do full damage qboolean saberInSpecial = BG_SaberInSpecial(self->client->ps.saberMove); qboolean inBackAttack = G_SaberInBackAttack(self->client->ps.saberMove); @@ -3991,6 +4307,10 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int else if (self->client->ps.saberAttackWound < level.time && self->client->ps.saberIdleWound < level.time) { //just touching, do minimal damage and only check for it every 200ms (mainly to cut down on network traffic for hit events) + if ( (self->client->saber[0].saberFlags2&SFL2_NO_IDLE_EFFECT) ) + {//no idle damage or effects + return qtrue;//true cause even though we didn't get a hit, we don't want to do those extra traces because the debounce time says not to. + } trMask &= ~CONTENTS_LIGHTSABER; if ( d_saberSPStyleDamage.integer ) { @@ -4089,6 +4409,18 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int { dmg *= g_saberDamageScale.value; + //see if this specific saber has a damagescale + if ( !WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && self->client->saber[rSaberNum].damageScale != 1.0f ) + { + dmg = ceil( (float)dmg*self->client->saber[rSaberNum].damageScale ); + } + else if ( WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && self->client->saber[rSaberNum].damageScale2 != 1.0f ) + { + dmg = ceil( (float)dmg*self->client->saber[rSaberNum].damageScale2 ); + } + if ((self->client->ps.brokenLimbs & (1 << BROKENLIMB_RARM)) || (self->client->ps.brokenLimbs & (1 << BROKENLIMB_LARM))) { //weaken it if an arm is broken @@ -4139,6 +4471,81 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int saberHitWall = qtrue; } + if (saberHitWall + && (self->client->saber[rSaberNum].saberFlags & SFL_BOUNCE_ON_WALLS) + && (BG_SaberInAttackPure( self->client->ps.saberMove ) //only in a normal attack anim + || self->client->ps.saberMove == LS_A_JUMP_T__B_ ) //or in the strong jump-fwd-attack "death from above" move + ) + { //then bounce off + /* + qboolean onlyIfNotSpecial = qfalse; + qboolean skipIt = qfalse; + if (tr.plane.normal[2] >= 0.8f || + tr.plane.normal[2] <= -0.8f || + VectorCompare(tr.plane.normal, vec3_origin)) + { + if ((tr.plane.normal[2] >= 0.8f || VectorCompare(tr.plane.normal, vec3_origin)) && + self->client->ps.viewangles[PITCH] <= 30.0f && + self->client->pers.cmd.upmove >= 0) + { //don't hit the ground if we are not looking down a lot/crouched + skipIt = qtrue; + } + else + { + onlyIfNotSpecial = qtrue; + } + } + if (!skipIt && (!onlyIfNotSpecial || !BG_SaberInSpecial(self->client->ps.saberMove))) + */ + { + gentity_t *te = NULL; + /* + qboolean pre = saberDoClashEffect; + + VectorCopy( tr.endpos, saberClashPos ); + VectorCopy( tr.plane.normal, saberClashNorm ); + saberClashEventParm = 1; + saberDoClashEffect = qtrue; + WP_SaberDoClash( self, rSaberNum, rBladeNum ); + saberDoClashEffect = pre; + */ + + self->client->ps.saberMove = BG_BrokenParryForAttack(self->client->ps.saberMove); + self->client->ps.saberBlocked = BLOCKED_PARRY_BROKEN; + if (self->client->ps.torsoAnim == self->client->ps.legsAnim) + { //set anim now on both parts + int anim = saberMoveData[self->client->ps.saberMove].animToUse; + G_SetAnim(self, &self->client->pers.cmd, SETANIM_BOTH, anim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0); + } + + //do bounce sound & force feedback + WP_SaberBounceSound( self, rSaberNum, rBladeNum ); + //do hit effect + te = G_TempEntity( tr.endpos, EV_SABER_HIT ); + te->s.otherEntityNum = ENTITYNUM_NONE;//we didn't hit anyone in particular + te->s.otherEntityNum2 = self->s.number;//send this so it knows who we are + te->s.weapon = rSaberNum; + te->s.legsAnim = rBladeNum; + VectorCopy(tr.endpos, te->s.origin); + VectorCopy(tr.plane.normal, te->s.angles); + if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2]) + { //don't let it play with no direction + te->s.angles[1] = 1; + } + //do radius damage/knockback, if any + if ( !WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) ) + { + WP_SaberRadiusDamage( self, tr.endpos, self->client->saber[rSaberNum].splashRadius, self->client->saber[rSaberNum].splashDamage, self->client->saber[rSaberNum].splashKnockback ); + } + else + { + WP_SaberRadiusDamage( self, tr.endpos, self->client->saber[rSaberNum].splashRadius2, self->client->saber[rSaberNum].splashDamage2, self->client->saber[rSaberNum].splashKnockback2 ); + } + + return qtrue; + } + } + //rww - I'm saying || tr.startsolid here, because otherwise your saber tends to skip positions and go through //people, and the compensation traces start in their bbox too. Which results in the saber passing through people //when you visually cut right through them. Which sucks. @@ -4192,7 +4599,7 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int } saberDoClashEffect = qtrue; VectorCopy( tr.endpos, saberClashPos ); - VectorCopy( tr.endpos, saberClashNorm ); + VectorCopy( tr.plane.normal, saberClashNorm ); saberClashEventParm = 1; if (dmg > SABER_NONATTACK_DAMAGE) @@ -4232,14 +4639,26 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int } else {//damage the thing we hit - if (g_entities[tr.entityNum].client - && !g_entities[tr.entityNum].client->ps.weapon != WP_SABER )//fd.forcePowerLevel[FP_SABER_OFFENSE]) + qboolean doDismemberment = qfalse; + int knockbackFlags = 0; + + if (g_entities[tr.entityNum].client) { //not a "jedi", so make them suffer more if ( dmg > SABER_NONATTACK_DAMAGE ) { //don't bother increasing just for idle touch damage dmg *= 1.5; } } + /* + if (g_entities[tr.entityNum].client + && g_entities[tr.entityNum].client->ps.weapon != WP_SABER )//fd.forcePowerLevel[FP_SABER_OFFENSE]) + { //not a "jedi", so make them suffer more + if ( dmg > SABER_NONATTACK_DAMAGE ) + { //don't bother increasing just for idle touch damage + dmg *= 1.5; + } + } + */ if ( !d_saberSPStyleDamage.integer ) { @@ -4270,7 +4689,44 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int } //store the damage, we'll apply it later - WP_SaberDamageAdd( tr.entityNum, dir, tr.endpos, dmg ); + if ( !WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && !(self->client->saber[rSaberNum].saberFlags2&SFL2_NO_DISMEMBERMENT) ) + { + doDismemberment = qtrue; + } + if ( WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && !(self->client->saber[rSaberNum].saberFlags2&SFL2_NO_DISMEMBERMENT) ) + { + doDismemberment = qtrue; + } + + if ( !WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && self->client->saber[rSaberNum].knockbackScale > 0.0f ) + { + if ( rSaberNum < 1 ) + { + knockbackFlags = DAMAGE_SABER_KNOCKBACK1; + } + else + { + knockbackFlags = DAMAGE_SABER_KNOCKBACK2; + } + } + + if ( WP_SaberBladeUseSecondBladeStyle( &self->client->saber[rSaberNum], rBladeNum ) + && self->client->saber[rSaberNum].knockbackScale > 0.0f ) + { + if ( rSaberNum < 1 ) + { + knockbackFlags = DAMAGE_SABER_KNOCKBACK1_B2; + } + else + { + knockbackFlags = DAMAGE_SABER_KNOCKBACK2_B2; + } + } + + WP_SaberDamageAdd( tr.entityNum, dir, tr.endpos, dmg, doDismemberment, knockbackFlags ); if (g_entities[tr.entityNum].client) { @@ -4370,7 +4826,7 @@ static GAME_INLINE qboolean CheckSaberDamage(gentity_t *self, int rSaberNum, int saberDoClashEffect = qtrue; VectorCopy( tr.endpos, saberClashPos ); - VectorCopy( tr.endpos, saberClashNorm ); + VectorCopy( tr.plane.normal, saberClashNorm ); saberClashEventParm = 1; sabersClashed = qtrue; @@ -4832,8 +5288,16 @@ void G_SPSaberDamageTraceLerped( gentity_t *self, int saberNum, int bladeNum, ve vec3_t mp1, mp2; vec3_t md1, md2; - VectorCopy( self->client->saber[saberNum].blade[bladeNum].trail.base, baseOld ); - VectorCopy( self->client->saber[saberNum].blade[bladeNum].trail.tip, endOld ); + if ( (level.time-self->client->saber[saberNum].blade[bladeNum].trail.lastTime) > 100 ) + {//no valid last pos, use current + VectorCopy(baseNew, baseOld); + VectorCopy(endNew, endOld); + } + else + {//trace from last pos + VectorCopy( self->client->saber[saberNum].blade[bladeNum].trail.base, baseOld ); + VectorCopy( self->client->saber[saberNum].blade[bladeNum].trail.tip, endOld ); + } VectorCopy( baseOld, mp1 ); VectorCopy( baseNew, mp2 ); @@ -5078,7 +5542,7 @@ void WP_SaberStartMissileBlockCheck( gentity_t *self, usercmd_t *ucmd ) return; } - if ( !self->client->saber[0].activeBlocking ) + if ( (self->client->saber[0].saberFlags&SFL_NOT_ACTIVE_BLOCKING) ) {//can't actively block with this saber type return; } @@ -5481,6 +5945,8 @@ static GAME_INLINE qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity te->s.angles[1] = 1; } te->s.eventParm = 1; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum if (saberCheckKnockdown_Thrown(saberent, saberOwner, &g_entities[tr.entityNum])) { //it was knocked out of the air @@ -5498,6 +5964,7 @@ static GAME_INLINE qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity else { //a good hit vec3_t dir; + int dflags = 0; VectorSubtract(tr.endpos, saberent->r.currentOrigin, dir); VectorNormalize(dir); @@ -5507,18 +5974,30 @@ static GAME_INLINE qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity dir[1] = 1; } + if ( (saberOwner->client->saber[0].saberFlags2&SFL2_NO_DISMEMBERMENT) ) + { + dflags |= DAMAGE_NO_DISMEMBER; + } + + if ( saberOwner->client->saber[0].knockbackScale > 0.0f ) + { + dflags |= DAMAGE_SABER_KNOCKBACK1; + } + if (saberOwner->client->ps.isJediMaster) { //2x damage for the Jedi Master - G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage*2, 0, MOD_SABER); + G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage*2, dflags, MOD_SABER); } else { - G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage, 0, MOD_SABER); + G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, saberent->damage, dflags, MOD_SABER); } te = G_TempEntity( tr.endpos, EV_SABER_HIT ); te->s.otherEntityNum = ent->s.number; te->s.otherEntityNum2 = saberOwner->s.number; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum VectorCopy(tr.endpos, te->s.origin); VectorCopy(tr.plane.normal, te->s.angles); if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2]) @@ -5574,23 +6053,35 @@ static GAME_INLINE qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity if (tr.fraction == 1 || tr.entityNum == ent->s.number) { vec3_t dir; + int dflags = 0; VectorSubtract(tr.endpos, entOrigin, dir); VectorNormalize(dir); + if ( (saberOwner->client->saber[0].saberFlags2&SFL2_NO_DISMEMBERMENT) ) + { + dflags |= DAMAGE_NO_DISMEMBER; + } + if ( saberOwner->client->saber[0].knockbackScale > 0.0f ) + { + dflags |= DAMAGE_SABER_KNOCKBACK1; + } + if (ent->s.eType == ET_NPC) { //an animent - G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 40, 0, MOD_SABER); + G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 40, dflags, MOD_SABER); } else { - G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 5, 0, MOD_SABER); + G_Damage(ent, saberOwner, saberOwner, dir, tr.endpos, 5, dflags, MOD_SABER); } te = G_TempEntity( tr.endpos, EV_SABER_HIT ); te->s.otherEntityNum = ENTITYNUM_NONE; //don't do this for throw damage //te->s.otherEntityNum = ent->s.number; - //te->s.otherEntityNum2 = saberOwner->s.number; + te->s.otherEntityNum2 = saberOwner->s.number;//actually, do send this, though - for the overridden per-saber hit effects/sounds + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum VectorCopy(tr.endpos, te->s.origin); VectorCopy(tr.plane.normal, te->s.angles); if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2]) @@ -5598,13 +6089,22 @@ static GAME_INLINE qboolean CheckThrownSaberDamaged(gentity_t *saberent, gentity te->s.angles[1] = 1; } - if (ent->s.eType == ET_MOVER) + if ( ent->s.eType == ET_MOVER ) { - //I suppose I could tie this into the saberblock event, but I'm tired of adding flags to that thing. - gentity_t *teS = G_TempEntity( te->s.origin, EV_SABER_CLASHFLARE ); - VectorCopy(te->s.origin, teS->s.origin); + if ( saberOwner + && saberOwner->client + && (saberOwner->client->saber[0].saberFlags2&SFL2_NO_CLASH_FLARE) ) + {//don't do clash flare - NOTE: assumes same is true for both sabers if using dual sabers! + G_FreeEntity( te );//kind of a waste, but... + } + else + { + //I suppose I could tie this into the saberblock event, but I'm tired of adding flags to that thing. + gentity_t *teS = G_TempEntity( te->s.origin, EV_SABER_CLASHFLARE ); + VectorCopy(te->s.origin, teS->s.origin); - te->s.eventParm = 0; + te->s.eventParm = 0; + } } else { @@ -6133,7 +6633,7 @@ qboolean saberKnockOutOfHand(gentity_t *saberent, gentity_t *saberOwner, vec3_t { return qfalse; } - if ( !saberOwner->client->saber[0].disarmable ) + if ( (saberOwner->client->saber[0].saberFlags&SFL_NOT_DISARMABLE) ) { return qfalse; } @@ -6533,7 +7033,7 @@ void saberBackToOwner(gentity_t *saberent) //I'm just doing this now. I don't really like the spin on the way back. And it does weird stuff with the new saber-knocked-away code. if (saberOwner->client->ps.saberEntityNum == saberent->s.number) { - if ( !saberOwner->client->saber[0].returnDamage + if ( !(saberOwner->client->saber[0].saberFlags&SFL_RETURN_DAMAGE) || saberOwner->client->ps.saberHolstered ) { saberent->s.saberInFlight = qfalse; @@ -7087,6 +7587,9 @@ static gentity_t *G_KickTrace( gentity_t *ent, vec3_t kickDir, float kickDist, v hitEnt->client->ps.otherKiller = ent->s.number; hitEnt->client->ps.otherKillerDebounceTime = level.time + 10000; hitEnt->client->ps.otherKillerTime = level.time + 10000; + hitEnt->client->otherKillerMOD = MOD_MELEE; + hitEnt->client->otherKillerVehWeapon = 0; + hitEnt->client->otherKillerWeaponType = WP_NONE; } if (d_saberKickTweak.integer) @@ -7927,9 +8430,9 @@ void WP_SaberPositionUpdate( gentity_t *self, usercmd_t *ucmd ) if (self->client->ps.saberThrowDelay < level.time) { - if ( !self->client->saber[0].throwable ) + if ( (self->client->saber[0].saberFlags&SFL_NOT_THROWABLE) ) {//cant throw it normally! - if ( self->client->saber[0].singleBladeThrowable ) + if ( (self->client->saber[0].saberFlags&SFL_SINGLE_BLADE_THROWABLE) ) {//but can throw it if only have 1 blade on if ( self->client->saber[0].numBlades > 1 && self->client->ps.saberHolstered == 1 ) @@ -8175,7 +8678,14 @@ nextStep: VectorScale(dir, 400, saberent->s.pos.trDelta ); saberent->s.pos.trTime = level.time; - saberent->s.loopSound = saberSpinSound; + if ( self->client->saber[0].spinSound ) + { + saberent->s.loopSound = self->client->saber[0].spinSound; + } + else + { + saberent->s.loopSound = saberSpinSound; + } saberent->s.loopIsSoundset = qfalse; self->client->ps.saberDidThrowTime = level.time; @@ -8238,6 +8748,8 @@ nextStep: VectorCopy(g_entities[saberNum].r.currentOrigin, te->s.origin); VectorCopy(dir, te->s.angles); te->s.eventParm = 1; + te->s.weapon = 0;//saberNum + te->s.legsAnim = 0;//bladeNum self->client->ps.saberIdleWound = level.time + Q_irand(400, 600); } @@ -8249,6 +8761,7 @@ nextStep: { //Don't bother updating the bolt for each blade for this, it's just a very rough fallback method for during saberlocks VectorCopy(boltOrigin, self->client->saber[saberNum].blade[rBladeNum].trail.base); VectorCopy(end, self->client->saber[saberNum].blade[rBladeNum].trail.tip); + self->client->saber[saberNum].blade[rBladeNum].trail.lastTime = level.time; rBladeNum++; } @@ -8443,8 +8956,16 @@ nextStep: vec3_t saberSubBase; float deltaX, deltaY, deltaZ; - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); - VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + if ( (level.time-self->client->saber[rSaberNum].blade[rBladeNum].trail.lastTime) > 100 ) + {//no valid last pos, use current + VectorCopy(boltOrigin, oldSaberStart); + VectorCopy(end, oldSaberEnd); + } + else + {//trace from last pos + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.base, oldSaberStart); + VectorCopy(self->client->saber[rSaberNum].blade[rBladeNum].trail.tip, oldSaberEnd); + } VectorSubtract(oldSaberEnd, oldSaberStart, saberAngleBefore); vectoangles(saberAngleBefore, saberAngleBefore); @@ -8540,19 +9061,26 @@ nextStep: VectorCopy(boltOrigin, self->client->saber[rSaberNum].blade[rBladeNum].trail.base); VectorCopy(end, self->client->saber[rSaberNum].blade[rBladeNum].trail.tip); + self->client->saber[rSaberNum].blade[rBladeNum].trail.lastTime = level.time; //VectorCopy(boltOrigin, self->client->lastSaberBase); //VectorCopy(end, self->client->lastSaberTip); self->client->hasCurrentPosition = qtrue; + //do hit effects + WP_SaberDoHit( self, rSaberNum, rBladeNum ); + WP_SaberDoClash( self, rSaberNum, rBladeNum ); + rBladeNum++; } rSaberNum++; } - - //now actually go through and apply all the damage we did + WP_SaberApplyDamage( self ); - WP_SaberDoClash(); + //NOTE: doing one call like this after the 2 loops above is a bit cheaper, tempentity-wise... but won't use the correct saber and blade numbers... + //now actually go through and apply all the damage we did + //WP_SaberDoHit( self, 0, 0 ); + //WP_SaberDoClash( self, 0, 0 ); if (mySaber && mySaber->inuse) { diff --git a/codemp/ghoul2/G2.h b/codemp/ghoul2/G2.h index 69bf6d2..f74d40f 100644 --- a/codemp/ghoul2/G2.h +++ b/codemp/ghoul2/G2.h @@ -9,6 +9,10 @@ #define BONE_ANGLES_POSTMULT 0x0002 #define BONE_ANGLES_REPLACE 0x0004 +//added for a trace optimization. set in routines where a bone is +//set to be transformed in any way. -rww +#define BONE_NEED_TRANSFORM 0x8000 + //rww - RAGDOLL_BEGIN #define BONE_ANGLES_RAGDOLL 0x2000 // the rag flags give more details //rww - RAGDOLL_END diff --git a/codemp/ghoul2/G2_API.cpp b/codemp/ghoul2/G2_API.cpp index b24719c..44d71f3 100644 --- a/codemp/ghoul2/G2_API.cpp +++ b/codemp/ghoul2/G2_API.cpp @@ -2000,10 +2000,139 @@ static int QDECL QsortDistance( const void *a, const void *b ) { return 1; } +static inline bool G2_NeedRetransform(CGhoul2Info *g2, int frameNum) +{ //see if we need to do another transform + int i = 0; + bool needTrans = false; + while (i < g2->mBlist.size()) + { + float time; + boneInfo_t &bone = g2->mBlist[i]; + + if (bone.pauseTime) + { + time = (bone.pauseTime - bone.startTime) / 50.0f; + } + else + { + time = (frameNum - bone.startTime) / 50.0f; + } + int newFrame = bone.startFrame + (time * bone.animSpeed); + + if (newFrame < bone.endFrame || + (bone.flags & BONE_ANIM_OVERRIDE_LOOP) || + (bone.flags & BONE_NEED_TRANSFORM)) + { //ok, we're gonna have to do it. bone is apparently animating. + bone.flags &= ~BONE_NEED_TRANSFORM; + needTrans = true; + } + i++; + } + + return needTrans; +} + +void G2API_CollisionDetectCache(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position, + int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius) +{ //this will store off the transformed verts for the next trace - this is slower, but for models that do not animate + //frequently it is much much faster. -rww + int *test = ghoul2[0].mTransformedVertsArray; + if (G2_SetupModelPointers(ghoul2)) + { + vec3_t transRayStart, transRayEnd; + + int tframeNum=G2API_GetTime(frameNumber); + // make sure we have transformed the whole skeletons for each model + if (G2_NeedRetransform(&ghoul2[0], tframeNum) || !ghoul2[0].mTransformedVertsArray) + { //optimization, only create new transform space if we need to, otherwise + //store it off! + int i = 0; + while (i < ghoul2.size()) + { + CGhoul2Info &g2 = ghoul2[i]; + + /* + if ((g2.mFlags & GHOUL2_ZONETRANSALLOC) && g2.mTransformedVertsArray) + { //clear it out, yo. + Z_Free(g2.mTransformedVertsArray); + g2.mTransformedVertsArray = 0; + } + */ + if (!g2.mTransformedVertsArray || !(g2.mFlags & GHOUL2_ZONETRANSALLOC)) + { //reworked so we only alloc once! + //if we have a pointer, but not a ghoul2_zonetransalloc flag, then that means + //it is a miniheap pointer. Just stomp over it. + int iSize = g2.currentModel->mdxm->numSurfaces * 4; + g2.mTransformedVertsArray = (int *)Z_Malloc(iSize, TAG_GHOUL2, qtrue); + } + + g2.mFlags |= GHOUL2_ZONETRANSALLOC; + + i++; + } + G2_ConstructGhoulSkeleton(ghoul2, frameNumber, true, scale); + G2VertSpace->ResetHeap(); + + // now having done that, time to build the model +#ifdef _G2_GORE + G2_TransformModel(ghoul2, frameNumber, scale, G2VertSpace, useLod, false); +#else + G2_TransformModel(ghoul2, frameNumber, scale, G2VertSpace, useLod); +#endif + + //don't need to do this anymore now that I am using a flag for zone alloc. + /* + i = 0; + while (i < ghoul2.size()) + { + CGhoul2Info &g2 = ghoul2[i]; + int iSize = g2.currentModel->mdxm->numSurfaces * 4; + + int *zoneMem = (int *)Z_Malloc(iSize, TAG_GHOUL2, qtrue); + memcpy(zoneMem, g2.mTransformedVertsArray, iSize); + g2.mTransformedVertsArray = zoneMem; + g2.mFlags |= GHOUL2_ZONETRANSALLOC; + i++; + } + */ + } + + // pre generate the world matrix - used to transform the incoming ray + G2_GenerateWorldMatrix(angles, position); + + // model is built. Lets check to see if any triangles are actually hit. + // first up, translate the ray to model space + TransformAndTranslatePoint(rayStart, transRayStart, &worldMatrixInv); + TransformAndTranslatePoint(rayEnd, transRayEnd, &worldMatrixInv); + + // now walk each model and check the ray against each poly - sigh, this is SO expensive. I wish there was a better way to do this. +#ifdef _G2_GORE + G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius,0,0,0,0,0,qfalse); +#else + G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius); +#endif + int i; + for ( i = 0; i < MAX_G2_COLLISIONS && collRecMap[i].mEntityNum != -1; i ++ ); + + // now sort the resulting array of collision records so they are distance ordered + qsort( collRecMap, i, + sizeof( CollisionRecord_t ), QsortDistance ); + } +} + void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position, int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius) { + /* + if (1) + { + G2API_CollisionDetectCache(collRecMap, ghoul2, angles, position, frameNumber, entNum, + rayStart, rayEnd, scale, G2VertSpace, traceFlags, useLod, fRadius); + return; + } + */ + if (G2_SetupModelPointers(ghoul2)) { vec3_t transRayStart, transRayEnd; @@ -2030,7 +2159,7 @@ void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, // now walk each model and check the ray against each poly - sigh, this is SO expensive. I wish there was a better way to do this. #ifdef _G2_GORE - G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius,0,0,0,0,0); + G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius,0,0,0,0,0,qfalse); #else G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius); #endif @@ -2469,7 +2598,7 @@ void G2API_AddSkinGore(CGhoul2Info_v &ghoul2,SSkinGoreData &gore) G2_TransformModel(ghoul2, gore.currentTime, gore.scale,G2VertSpaceServer,lod,true); // now walk each model and compute new texture coordinates - G2_TraceModels(ghoul2, transHitLocation, transRayDirection, 0, gore.entNum, 0,lod,0.0f,gore.SSize,gore.TSize,gore.theta,gore.shader,&gore); + G2_TraceModels(ghoul2, transHitLocation, transRayDirection, 0, gore.entNum, 0,lod,0.0f,gore.SSize,gore.TSize,gore.theta,gore.shader,&gore,qtrue); } } #endif diff --git a/codemp/ghoul2/G2_bones.cpp b/codemp/ghoul2/G2_bones.cpp index ccf1269..11493a2 100644 --- a/codemp/ghoul2/G2_bones.cpp +++ b/codemp/ghoul2/G2_bones.cpp @@ -649,6 +649,9 @@ qboolean G2_Set_Bone_Anim_Index( { return qtrue; // don't accept any calls on ragdoll bones } + + //mark it for needing a transform for the cached trace transform stuff + blist[index].flags |= BONE_NEED_TRANSFORM; } if (setFrame != -1) diff --git a/codemp/ghoul2/G2_local.h b/codemp/ghoul2/G2_local.h index 949b468..051bd6d 100644 --- a/codemp/ghoul2/G2_local.h +++ b/codemp/ghoul2/G2_local.h @@ -66,7 +66,7 @@ void G2_List_Model_Surfaces(const char *fileName); void G2_List_Model_Bones(const char *fileName, int frame); qboolean G2_GetAnimFileName(const char *fileName, char **filename); #ifdef _G2_GORE -void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore); +void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore, qboolean skipIfLODNotMatch); #else void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod, float fRadius); #endif @@ -151,6 +151,8 @@ int G2API_GetGhoul2ModelFlags(CGhoul2Info *ghlInfo); qboolean G2API_GetAnimFileName(CGhoul2Info *ghlInfo, char **filename); void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position, int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius); +void G2API_CollisionDetectCache(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position, + int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius); void G2API_GiveMeVectorFromMatrix(mdxaBone_t *boltMatrix, Eorientations flags, vec3_t vec); int G2API_CopyGhoul2Instance(CGhoul2Info_v &g2From, CGhoul2Info_v &g2To, int modelIndex); diff --git a/codemp/ghoul2/G2_misc.cpp b/codemp/ghoul2/G2_misc.cpp index 032e2d3..1dadcf9 100644 --- a/codemp/ghoul2/G2_misc.cpp +++ b/codemp/ghoul2/G2_misc.cpp @@ -37,7 +37,7 @@ static map,int> GoreTagsTemp; // this is a surface index to gore t // temporarily during the generation phase so we reuse gore tags per LOD int goreModelIndex; -bool AddGoreToAllModels=false; +static cvar_t *cg_g2MarksAllModels=NULL; GoreTextureCoordinates *FindGoreRecord(int tag); static inline void DestroyGoreTexCoordinates(int tag) @@ -564,6 +564,18 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, { int i, lod; vec3_t correctScale; + qboolean firstModelOnly = qfalse; + + if ( cg_g2MarksAllModels == NULL ) + { + cg_g2MarksAllModels = Cvar_Get( "cg_g2MarksAllModels", "0", 0 ); + } + + if (cg_g2MarksAllModels == NULL + || !cg_g2MarksAllModels->integer ) + { + firstModelOnly = qtrue; + } VectorCopy(scale, correctScale); @@ -604,7 +616,13 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, if (lod>=g.currentModel->numLods) { g.mTransformedVertsArray = 0; - return; + if ( firstModelOnly ) + { + // we don't really need to do multiple models for gore. + return; + } + //do the rest + continue; } } else @@ -616,10 +634,13 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, #endif // give us space for the transformed vertex array to be put in - g.mTransformedVertsArray = (int*)G2VertSpace->MiniHeapAlloc(g.currentModel->mdxm->numSurfaces * 4); - if (!g.mTransformedVertsArray) - { - Com_Error(ERR_DROP, "Ran out of transform space for Ghoul2 Models. Adjust MiniHeapSize in SV_SpawnServer.\n"); + if (!(g.mFlags & GHOUL2_ZONETRANSALLOC)) + { //do not stomp if we're using zone space + g.mTransformedVertsArray = (int*)G2VertSpace->MiniHeapAlloc(g.currentModel->mdxm->numSurfaces * 4); + if (!g.mTransformedVertsArray) + { + Com_Error(ERR_DROP, "Ran out of transform space for Ghoul2 Models. Adjust MiniHeapSize in SV_SpawnServer.\n"); + } } memset(g.mTransformedVertsArray, 0,(g.currentModel->mdxm->numSurfaces * 4)); @@ -630,7 +651,7 @@ void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, G2_TransformSurfaces(g.mSurfaceRoot, g.mSlist, g.mBoneCache, g.currentModel, lod, correctScale, G2VertSpace, g.mTransformedVertsArray, false); #ifdef _G2_GORE - if (ApplyGore&&!AddGoreToAllModels) + if (ApplyGore && firstModelOnly) { // we don't really need to do multiple models for gore. break; @@ -1490,7 +1511,7 @@ static void G2_TraceSurfaces(CTraceSurface &TS) } #ifdef _G2_GORE -void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore) +void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int eG2TraceType, int useLod, float fRadius, float ssize,float tsize,float theta,int shader, SSkinGoreData *gore, qboolean skipIfLODNotMatch) #else void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int eG2TraceType, int useLod, float fRadius) #endif @@ -1498,6 +1519,18 @@ void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, Colli int i, lod; skin_t *skin; shader_t *cust_shader; + qboolean firstModelOnly = qfalse; + + if ( cg_g2MarksAllModels == NULL ) + { + cg_g2MarksAllModels = Cvar_Get( "cg_g2MarksAllModels", "0", 0 ); + } + + if (cg_g2MarksAllModels == NULL + || !cg_g2MarksAllModels->integer ) + { + firstModelOnly = qtrue; + } // walk each possible model for this entity and try tracing against it for (i=0; i=ghoul2[i].currentModel->numLods) - { - return; + lod = G2_DecideTraceLod(ghoul2[i],useLod); + if ( skipIfLODNotMatch ) + {//we only want to hit this SPECIFIC LOD... + if ( lod != useLod ) + {//doesn't match, skip this model + continue; } } -#else - lod = G2_DecideTraceLod(ghoul2[i],useLod); -#endif //reset the quick surface override lookup G2_FindOverrideSurface(-1, ghoul2[i].mSlist); @@ -1577,7 +1601,7 @@ void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, Colli break; } #ifdef _G2_GORE - if (!collRecMap&&!AddGoreToAllModels) + if (!collRecMap&&firstModelOnly) { // we don't really need to do multiple models for gore. break; diff --git a/codemp/ghoul2/ghoul2_shared.h b/codemp/ghoul2/ghoul2_shared.h index f193fb2..9b67cc8 100644 --- a/codemp/ghoul2/ghoul2_shared.h +++ b/codemp/ghoul2/ghoul2_shared.h @@ -231,6 +231,9 @@ typedef vector > mdxaBone_v; #define GHOUL2_NOMODEL 0x004 #define GHOUL2_NEWORIGIN 0x008 +//for transform optimization -rww +#define GHOUL2_ZONETRANSALLOC 0x2000 + class CBoneCache; // NOTE order in here matters. We save out from mModelindex to mFlags, but not the STL vectors that are at the top or the bottom. diff --git a/codemp/ghoul2/vssver.scc b/codemp/ghoul2/vssver.scc index ad42de0845c4c20883f2bd207d90ca3f5f62d179..d293ab092ab9f118c36198d8f20df620ab6bb9e1 100644 GIT binary patch literal 176 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW|Ka)`OlmP;s0jWD1|8jXvV5(vTvY!Jni>^lE z+_idDAwc#EAoi-aG7WPys$v7OUjng%=EY^c?N@4}fb3U5+&be}A=~a7wVXiqYaq_4 zoo}vk_Fb(Eko^XTFSBQN@Z9=YD+Oe~1>%q=%%6{*@2%wpvflymc}Jhz-;8r=C4p=J DkkdD| literal 176 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZFIbQO5$^Ze+fKuGpZr*W?B_sy+Asep z|IX=t0YLT(Aoi-aGX1VT*N+XzehI|S?W+2U<+l1o0@<&CxOK*{Lh%#sew;w|YY^Xt zeR2B#5I-p(`wb8~a9_Q}S&-)^0c5`g;*clIpN)?)`tbtU?|^uAOU&ErTZF;#0D#yv A*Z=?k diff --git a/codemp/goblib/mssccprj.scc b/codemp/goblib/mssccprj.scc index 65afff4..3c6070f 100644 --- a/codemp/goblib/mssccprj.scc +++ b/codemp/goblib/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [goblib.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/goblib", FBIAAAAA diff --git a/codemp/goblib/vssver.scc b/codemp/goblib/vssver.scc index 41e0b8853415ebe3d88d6c92114cd950f348ad01..5331d4af51061211706bab84ba1ca54d6587a17c 100644 GIT binary patch delta 65 zcmWFtm>^=~e^4afUX%e09DwxmGfp2{m^Rlk0!18we38kIkF$St2J@YOe0Pz;E2_*v IwM;;H03!^;k_wnjgdr<~3Z~)TJ&p3TF_0{lW1d2EU`681aAHRS6a3F~91mwGm6kZ7x KzZA#>gDwNv&Y=_H|yDBkqiQiWg9{l+$Tz~-#B7iho=UaPTf!tbFphzT;f7`@u zM#q8LS{5Kb3doPTU3NtCpbS_(8pyABeTTC(Lamk!C?5mldv9!;JY}P9Ei;fG3*;wC zn@Ps`Xo1zofz%f|gr7QWT+0NMj|cL3%eW?FAGuTm;wJ$4n|)Zrjz>SK0qIW!@;{oM z>g*JISOc;@3CQPK=&*2x|BD(%AU_$%zb>}G{j}tAu=*4rf5N}BvFh(v)UX5PQ-OSk zU$4&pXxUQ(a$g#d&ueq)Lx_|cSUw%dH;+HPM3>L22ISuiAm1)Cuj83=9N0aXKz_&C z+wO^z^1%EoAm94gho*wlrC|HAf&5m+Q1*2~Jhj|F{W&1M;fecuy}7~u%LVeUYZ|Ca v+x@HoG8yuK#QVgifIF9a!20un{N8ID%RE+21M>@j{6*5Hw?3s#2HOV!h`D$b literal 432 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW+UAgWUF2Dc=5kQ))^R4|-uIGWQK#@ow|F((S zjIWko0$G6kC?G%TcG;1MR@=bx(LjF1>pPqeHN6AbfbuawzW2tq$(~_>fy_XDERdfl zZ6?_|I~1%w4y3-&A-sE0Tp$xrJ|4*DE#sQ7J|`c{PXO{a`>=+IPb~xMPXzKmnx5)Z z-BS;?KMBa^TIjG)+nqg-5vV^I$iFVOz&e`jL_*PIJr2l7*ae1~7J z&YQ~J4*or(D9mqG2KfQ$e%GUspe=~r5yUe_f&rZz&Aopbg`5kL- zyW6hp0Q0keeCuZ)n(DVs0o#`iF0Ol6}`HQ4YZ{^>%2I~g^MF@2@ diff --git a/codemp/jpeg-6/vssver.scc b/codemp/jpeg-6/vssver.scc index 7cd142b6b9e397b624bd2c7719a8b47477f2ed9d..6ae5f449d3233266a690f6496fe4b604be447b48 100644 GIT binary patch literal 784 zcmXBSe@GJn6bJB|Yns_~{zx-*&NOW@vdF}2qzf}ASP&r*vs^hb*Dpl|t+iE?ery?) z{h$J4VzShkMr8lk1k)kWS{6i3CmN&(#&nuf)AjXr@b2D+_q}(=ap_?!M%5dpF#dX% z+c=yg&tRs`2i1k1x{dcoF7~@wBH9uEceN_AGt$w1`nMW=Y<63 z-zT%+#AaiYV&oaw56%(gYW8|wk=bx9zb&n~po6>yu59JVPHFd(IdJrp&OI`Bkn9g9 z7n`2^-d02ofcatS#bb>p$ZKIGb9LeE9yvJ>u43}^n>#AV>)_y}tg0Q8mGu5W@Q=)& z-4^*Jny-ghhBKzo-gq(>PROvP_79{|J{We~9`bH6i)kJLAFls&Xr;JYyZU{3aBbkE zpyF#kITW_LxvoUpFd4rC6QJp_K0iKA4u|Jc$36#rn;=KPB7Wy1VVRG-0p6FAXBmsp zYuVTz33Iw;3#Y3MTC_|QPW-GG3DbIy@*82^>*P9pYy&wO&NH7(^VPLbeiJPHSTAnB zVWoKtEb8hph~gx)KNfCju+;2Su2jky+;q~#=am_s zX_nrH1+RZt+d4k=k{kqQN#w>{=?8K!TqkNz+1lbFFN1ZD*xJUV88RD=ovCmSG%k`u z;KT!_2F z{_W`wLqFv!VOGsaQ-xwTnG1`z4J5l>6;OXT?6^ASQ`ngqx+i-BITDtLtarTaTgXBku*-`HbWPg%#$al)B1k>R$~jhnh1? zdJpAsu%ypcV-*I}OY_&jZFeozmpC`6e=VGJ%okDG*+3S-#ishC_nG&}>tKVSv}F26 cCtV*8Ta~Qa*9x;~z8H?*JDJv0luP~p027_dVE_OC diff --git a/codemp/mp3code/vssver.scc b/codemp/mp3code/vssver.scc index 8a610cc5edc1d1fc842cc0fa3614e218e289432a..088367cbd9a886d8771b72f8d6ba7b1f559b79d2 100644 GIT binary patch literal 528 zcmW;ITPTA86bJBcGz||JD?H2?o7>D~C?bl{5V?%a#8<8*Oz}X*w@^$HDVIDbVI?HP ziU%So4=zs>9uz`(FoeS2IS>DHey8(vR6-upeju!|+-+sdT?HG&?8joAbfZ6r$52Vp zdCbk=P@%~5zY0dEU$VzC)qdm<*xR7zJa{s)3=Zrx$A~)=WI3GqDz_<$ROC>2#d!St zHhainWWo^Q*ya>A@rWD__vMVYw0NG7BVgAT$#~}gY7Fu z%~aJaSq01Fm)BO^A~_y5D!&=Na*dn-YpfljFrESm5a89ru?g>j0ruw?keK{;L1+?cGy~uwkZG%7n literal 528 zcmW;ITPVYE6bJDC3?;>y_96{4W^)^c&_r&Fq-Jy5n13OQ+Ws^z%Voa>eP zBk-lbPb1!@q7M|(P>Tyuq`*@CzB?6re zwo~_ijgc{EKA4@S5f{y}&;qcjenETqk%i6xM|qPjetpI0OmIbfgr=W;zjmNd**=Yj*>yXuQe6FLvPs8h2mD=g@I z@Tr}uv+OOSMc_1^>s9AkLl=OloFBqnZbKJ>o82qNZD+OUBCx@^HF2HXfDSF;oFHec zHW|7J{E{+gy`q$88JIjjO)oGEphMC3+}l;UtwT41tBwrjJM9R%1#GTi+4h6s=vMHb sEcofWVaVxlpEmH^m&zf2Opu3x+ri`f66R*70Ou88)@b7J4w;Ys2gOZgDwNv&Y=_H|yDBkqiQiW+E1uViVPpVgDwNv&Y=_H|yDBkqiQiXr-HvUGVPpV (5 * 60000)) && !Cvar_VariableIntegerValue( "dedicated" ) -// && !Cvar_VariableIntegerValue( "com_blindlyLoadDLLs" ) ) { - if (0) { - if (FS_FileExists(filename)) { - lastWarning = timestamp; - ret = MessageBoxEx( NULL, "You are about to load a .DLL executable that\n" - "has not been verified for use with Quake III Arena.\n" - "This type of file can compromise the security of\n" - "your computer.\n\n" - "Select 'OK' if you choose to load it anyway.", - "Security Warning", MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2 | MB_TOPMOST | MB_SETFOREGROUND, - MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ) ); - if( ret != IDOK ) { - return NULL; - } - } + if (!Sys_UnpackDLL(filename)) + { + return NULL; } -#endif - // rjr disable for final release #ifndef NDEBUG libHandle = LoadLibrary( filename ); diff --git a/codemp/png/vssver.scc b/codemp/png/vssver.scc index 5b6ff2131518927970711c3c7a2af1fac089d49b..11cc4f99807d70485836b070ab784897d0e920e6 100644 GIT binary patch delta 49 ycmZ>8m>{CFBD^ZpO^^W$E($O(IR5;0cx~I$1~#C`B_Q9Z?^~s$%=-pLARhp0P!65| delta 49 ycmZ>8m>{Cl_UCD^n;-)iTohnnaQyl0@XMb4A#6aAOF+I+-?z%%I*$-WARhpeJr8{V diff --git a/codemp/qcommon/common.cpp b/codemp/qcommon/common.cpp index 60c57e9..eae5eda 100644 --- a/codemp/qcommon/common.cpp +++ b/codemp/qcommon/common.cpp @@ -50,6 +50,8 @@ cvar_t *com_cl_running; cvar_t *com_logfile; // 1 = buffer log, 2 = flush after each print cvar_t *com_showtrace; +cvar_t *com_optvehtrace; + #ifdef G2_PERFORMANCE_ANALYSIS cvar_t *com_G2Report; #endif @@ -1318,6 +1320,8 @@ void Com_Init( char *commandLine ) { com_timedemo = Cvar_Get ("timedemo", "0", 0); com_cameraMode = Cvar_Get ("com_cameraMode", "0", CVAR_CHEAT); + com_optvehtrace = Cvar_Get("com_optvehtrace", "0", 0); + cl_paused = Cvar_Get ("cl_paused", "0", CVAR_ROM); sv_paused = Cvar_Get ("sv_paused", "0", CVAR_ROM); com_sv_running = Cvar_Get ("sv_running", "0", CVAR_ROM); diff --git a/codemp/qcommon/files_pc.cpp b/codemp/qcommon/files_pc.cpp index be51e16..3ee6165 100644 --- a/codemp/qcommon/files_pc.cpp +++ b/codemp/qcommon/files_pc.cpp @@ -563,6 +563,8 @@ fileHandle_t FS_FOpenFileAppend( const char *filename ) { return f; } +#ifndef __linux__ + bool Sys_GetFileTime(LPCSTR psFileName, FILETIME &ft) { bool bSuccess = false; @@ -627,6 +629,8 @@ bool Sys_FileOutOfDate( LPCSTR psFinalFileName /* dest */, LPCSTR psDataFileName return false; } +#endif // !__linux__ + bool FS_FileCacheable(const char* const filename) { extern cvar_t *com_buildScript; @@ -890,7 +894,7 @@ int FS_FOpenFileRead( const char *filename, fileHandle_t *file, qboolean uniqueF && Q_stricmp( filename + l - 4, ".dat" ) ) { // for journal files fs_fakeChkSum = random(); } - +#ifndef __linux__ // if running with fs_copyfiles 2, and search path == local, then we need to fail to open // if the time/date stamp != the network version (so it'll loop round again and use the network path, // which comes later in the search order) @@ -905,7 +909,7 @@ int FS_FOpenFileRead( const char *filename, fileHandle_t *file, qboolean uniqueF continue; //carry on to find the cdpath version. } } - +#endif Q_strncpyz( fsh[*file].name, filename, sizeof( fsh[*file].name ) ); fsh[*file].zipFile = qfalse; if ( fs_debug->integer ) { @@ -913,6 +917,7 @@ int FS_FOpenFileRead( const char *filename, fileHandle_t *file, qboolean uniqueF dir->path, dir->gamedir ); } +#ifndef __linux__ // if we are getting it from the cdpath, optionally copy it // to the basepath if ( fs_copyfiles->integer && !Q_stricmp( dir->path, fs_cdpath->string ) ) { @@ -960,7 +965,7 @@ int FS_FOpenFileRead( const char *filename, fileHandle_t *file, qboolean uniqueF break; } } - +#endif if (bFasterToReOpenUsingNewLocalFile) { break; // and re-read the local copy, not the net version diff --git a/codemp/qcommon/qcommon.h b/codemp/qcommon/qcommon.h index d53b858..48be0e8 100644 --- a/codemp/qcommon/qcommon.h +++ b/codemp/qcommon/qcommon.h @@ -202,7 +202,7 @@ PROTOCOL ============================================================== */ -#define PROTOCOL_VERSION 25 +#define PROTOCOL_VERSION 26 #ifndef _XBOX // No gethostbyname(), and can't really use this stuff #define UPDATE_SERVER_NAME "updatejk3.ravensoft.com" @@ -699,6 +699,8 @@ extern cvar_t *com_buildScript; // for building release pak files extern cvar_t *com_journal; extern cvar_t *com_cameraMode; +extern cvar_t *com_optvehtrace; + #ifdef G2_PERFORMANCE_ANALYSIS extern cvar_t *com_G2Report; #endif diff --git a/codemp/qcommon/vssver.scc b/codemp/qcommon/vssver.scc index 3f48578c3e0ea9a4b93cd626efe39842256c73cc..ff8e5bedcfe35ec3bf386adf5dd2c2ad64e21b79 100644 GIT binary patch literal 1184 zcmW;LdrVVT90%|#F9F$BNvTt@!-slcflJy>{k~PdD&v)z2Fr1 zw(C0oo!4S`Z}?ky;?}*Tx4uc>J>l~|7pUBqFfa_b;i3!mI;sQ7m)^^oC zn2ebcS-wZ$QJu|SUQ;5jhO^+#K*>Hd-c6gsk9zGZ# z;*n#`YQ64|=JgutKL+2=%u~;{ZK3{Lc)!Q9(9Yu>0?R)SHV;11KYe(EEyaD0#-y>y zE_DwI8u&OY?XP_No@!KZhfl!yimO|1L>3B*;e7agb7(~1P=&ziR{+n&xoN5gU(x!7 zaE5D6=J{YJxd>Lsr}ZcI)X?~1SbZnn>!8{yu=I!_^R)U)V#A-RgY4L+i3 z@^_BZ(fQgAE9K^wDy@WP-){#zH6A>YT>K98hr+wAck2F$`+&~30=|~gayoW>2#pVe z$8EyIK9Aq%`*A4h&DNwp!(JxP{)#0Wwk1e#t z()q84_ZBB;JSa9Q=T?T)Hcs$VZWn{;Kv zyIGfMKhNQr&xbk5zULJ01zi51ef_|Wr?j6jSYy|ZKJgnT=gT0q14mtBx{zy3~~i01c<5Wu=nq?Kfe3EexL8-=llJ}2F_u$ z-v?$@x;hn2gApG{GVixU6*XwL&SB`M#(&7sRrW!3ddggU(ZIpS-dp?rm9P{acsu-~ zC@Rz$Ax-gxKZ9qk+z7c_e}VIccfgAJ)|JJ!i=5Cu2VT^8^}%1d+vHr>+xPR(dy)wb zRVELGe7@9}zULk%g0*n%>^!%-wUP6Jb%LcQK8=Y_rt$OPrmlpnv+rhd^AOj=svo|* zmDlD;6Mdc)<}<+KBeG;!m5CMh zR|qFfI@2P%lUPsK2)9|M8V*K$$a=s<@VT+YdjH&Qtgydgct))14SP;UHo;TAN3%;y z3t3c|5)?0MGPkOicu;&d?9`Vf9M<_$ycFK#c}I3u5Cb~d11Z# z;CxZBzHajnc|Rk-%o?7_E^M--Q4PMm04j#U)`}!N}0^Sep>){pQEL*9U(tH*;=c`Tf z99KLqc0!Vp4E9~y*iTSH^8|kOMb5@cclvFT?nuK*Aln%ba|>U|1r3+EU@2rq>ApB z6;_Gg*llwiq5IziOD0?D6Zcxl$Ki8-m&CPiTg3|fuLa{x_KTBr-O-faez>L~Y`O80 zlk)d7{CJCP@xsw&+Rp_1D1C?-<<*q0f8g3%J+D9cNK5S}Vda=+eDkP*Tp?zdPg;HE KhFI3oe*XvCK1integer != 0) && glConfig.maxTextureFilterAnisotropy] ); Com_Printf ("(%f of %f)\n", r_ext_texture_filter_anisotropic->value, glConfig.maxTextureFilterAnisotropy ); Com_Printf ("Dynamic Glow: %s\n", enablestrings[r_DynamicGlow->integer] ); + if (g_bTextureRectangleHack) Com_Printf ("Dynamic Glow ATI BAD DRIVER HACK %s\n", enablestrings[g_bTextureRectangleHack] ); if ( r_finish->integer ) { Com_Printf ("Forcing glFinish\n" ); @@ -968,6 +971,11 @@ void GfxInfo_f( void ) } } +void R_AtiHackToggle_f(void) +{ + g_bTextureRectangleHack = !g_bTextureRectangleHack; +} + #endif // !DEDICATED /* =============== @@ -993,7 +1001,7 @@ void R_Register( void ) #endif r_ext_texture_filter_anisotropic = Cvar_Get( "r_ext_texture_filter_anisotropic", "16", CVAR_ARCHIVE ); - r_DynamicGlow = Cvar_Get( "r_DynamicGlow", "1", CVAR_ARCHIVE ); + r_DynamicGlow = Cvar_Get( "r_DynamicGlow", "0", CVAR_ARCHIVE ); r_DynamicGlowPasses = Cvar_Get( "r_DynamicGlowPasses", "5", CVAR_CHEAT ); r_DynamicGlowDelta = Cvar_Get( "r_DynamicGlowDelta", "0.8f", CVAR_CHEAT ); r_DynamicGlowIntensity = Cvar_Get( "r_DynamicGlowIntensity", "1.13f", CVAR_CHEAT ); @@ -1184,6 +1192,7 @@ extern qboolean Sys_LowPhysicalMemory(); Cmd_AddCommand( "screenshot", R_ScreenShot_f ); Cmd_AddCommand( "screenshot_tga", R_ScreenShotTGA_f ); Cmd_AddCommand( "gfxinfo", GfxInfo_f ); + Cmd_AddCommand( "r_atihack", R_AtiHackToggle_f ); Cmd_AddCommand( "r_we", R_WorldEffect_f); Cmd_AddCommand( "imagecacheinfo", RE_RegisterImages_Info_f); #endif @@ -1331,6 +1340,7 @@ void RE_Shutdown( qboolean destroyWindow ) { Cmd_RemoveCommand ("screenshot"); Cmd_RemoveCommand ("screenshot_tga"); Cmd_RemoveCommand ("gfxinfo"); + Cmd_RemoveCommand ("r_atihack"); Cmd_RemoveCommand ("r_we"); Cmd_RemoveCommand ("imagecacheinfo"); Cmd_RemoveCommand ("modellist"); diff --git a/codemp/renderer/vssver.scc b/codemp/renderer/vssver.scc index 6f5404c3eaa368e338db1fc4bdbab89b1dab8d6e..ab4a3edae8e9e7f3277f7ba9b6871423db8c7617 100644 GIT binary patch literal 752 zcmW;KZAep57zc38(v_JtrYoYMEf-o?$;=SV%{S6av^GJ#In#_n3!$uJ%vqh=4Yaof zWlJm4WlWnctC_3TDrW|Prsd31Gx38;&Qh!oTK{|RhkNuiI1ggU8;-(H?LOEX=!Sf1*^t?w~x`>6^#-7X+YG5!QjcZU1- zQX;OOr|__Ti$?ZwBNuOhiOWRRI5rU>;#*PQj;KZDCI%qIs~2AC+g4d#i@ zMC>=dW7zywSnS2~S!kSM0^sLxL-ovYi|jYU?&k|QI&y{y^Q~l7!7pJ!jPE8DWx{u|lLu=^pyAw*Gn-@bkg?FGx>E~h%B z#%>`9b&G{(3r{(Ew$*a$3qX-PX-h`vzER?b@j!T3BE4QQJ;v>a1BX)V)Y-qtmE3*N zqUeHT!l=3$&)vUrcyp(Dm*U7#?!NUR$)&AES6S&!dI|DGrQIWo;hC?w?)%SaY|&%J-#%jcfo`JMAS=O+^h1sD58C(33! z57dnZs{_)P8$bQ7`fCsh_~$OZnzYTLl}2Y3`&EtC{e^~!q7|9S3BCtQGRk)-6bjWU z_yL?eofkD_eoxoHkKn4$O3ChqIm+T|;kP-awEgw@Gy<-J<=J1RZYnFO2W*5>9Al~B zM=jJ9u7}IIGryg!jit_T1Diiwn(QS@rffYEY%?qde0LI33OB*$-W>Kjb;Xx%g_~hd zzYERW*ghHuKZe!hTA#x)P1eFKaOC`e)#B?QF>ot9@vvyQWWAn<;V1C4S*<=}sUmFu zX85-Ik#(&FM#AcAgN4dH#Yuiv;t99ITD^Mkq&%9i{XK=PKQtjVZVAKW=N^S5M5!+twAQm|;YfnkkYUoBd2%Zd;-Ksd4#ozA$E+yNh@4Znd=ld(q zM^qwt$)?Y3=~-ef{FU7X$g+AJYrc KIwy3p0{H-J(h?j1 delta 65 zcmWFtm>^;kWEHq>fdB&-ECkZ=#jMVU9X7`^14R}A`KgNjx6KuT;<*?{VKt2Eh<_|*v diff --git a/codemp/server/server.h b/codemp/server/server.h index 86341ef..118573d 100644 --- a/codemp/server/server.h +++ b/codemp/server/server.h @@ -259,9 +259,10 @@ extern cvar_t *sv_maxPing; extern cvar_t *sv_gametype; extern cvar_t *sv_pure; extern cvar_t *sv_floodProtect; -extern cvar_t *sv_allowAnonymous; extern cvar_t *sv_needpass; - +#ifdef USE_CD_KEY +extern cvar_t *sv_allowAnonymous; +#endif //=========================================================== diff --git a/codemp/server/sv_ccmds.cpp b/codemp/server/sv_ccmds.cpp index 599ce07..7167a96 100644 --- a/codemp/server/sv_ccmds.cpp +++ b/codemp/server/sv_ccmds.cpp @@ -163,7 +163,7 @@ static void SV_Map_f( void ) { #endif // force latched values to get set - Cvar_Get ("g_gametype", "0", CVAR_SERVERINFO | CVAR_USERINFO | CVAR_LATCH ); + Cvar_Get ("g_gametype", "0", CVAR_SERVERINFO | CVAR_LATCH ); cmd = Cmd_Argv(0); if( Q_stricmpn( cmd, "sp", 2 ) == 0 ) { diff --git a/codemp/server/sv_game.cpp b/codemp/server/sv_game.cpp index 28af282..46b2a2e 100644 --- a/codemp/server/sv_game.cpp +++ b/codemp/server/sv_game.cpp @@ -1452,7 +1452,22 @@ int SV_GameSystemCalls( int *args ) { args[11], VMF(12) ); return 0; - + + case G_G2_COLLISIONDETECTCACHE: + G2API_CollisionDetectCache ( (CollisionRecord_t*)VMA(1), *((CGhoul2Info_v *)args[2]), + (const float*)VMA(3), + (const float*)VMA(4), + args[5], + args[6], + (float*)VMA(7), + (float*)VMA(8), + (float*)VMA(9), + G2VertSpaceServer, + args[10], + args[11], + VMF(12) ); + return 0; + case G_G2_SETROOTSURFACE: return G2API_SetRootSurface(*((CGhoul2Info_v *)args[1]), args[2], (const char *)VMA(3)); diff --git a/codemp/server/sv_init.cpp b/codemp/server/sv_init.cpp index 647666d..e69cbfa 100644 --- a/codemp/server/sv_init.cpp +++ b/codemp/server/sv_init.cpp @@ -807,6 +807,7 @@ void SV_Init (void) { Cvar_Get ("dmflags", "0", CVAR_SERVERINFO); Cvar_Get ("fraglimit", "20", CVAR_SERVERINFO); Cvar_Get ("timelimit", "0", CVAR_SERVERINFO); + Cvar_Get ("capturelimit", "0", CVAR_SERVERINFO); // Get these to establish them and to make sure they have a default before the menus decide to stomp them. Cvar_Get ("g_maxHolocronCarry", "3", CVAR_SERVERINFO); @@ -829,8 +830,9 @@ void SV_Init (void) { sv_minPing = Cvar_Get ("sv_minPing", "0", CVAR_ARCHIVE | CVAR_SERVERINFO ); sv_maxPing = Cvar_Get ("sv_maxPing", "0", CVAR_ARCHIVE | CVAR_SERVERINFO ); sv_floodProtect = Cvar_Get ("sv_floodProtect", "1", CVAR_ARCHIVE | CVAR_SERVERINFO ); +#ifdef USE_CD_KEY sv_allowAnonymous = Cvar_Get ("sv_allowAnonymous", "0", CVAR_SERVERINFO); - +#endif // systeminfo Cvar_Get ("sv_cheats", "0", CVAR_SYSTEMINFO | CVAR_ROM ); sv_serverid = Cvar_Get ("sv_serverid", "0", CVAR_SYSTEMINFO | CVAR_ROM ); diff --git a/codemp/server/sv_main.cpp b/codemp/server/sv_main.cpp index 16507a2..ce2dca7 100644 --- a/codemp/server/sv_main.cpp +++ b/codemp/server/sv_main.cpp @@ -37,9 +37,10 @@ cvar_t *sv_maxPing; cvar_t *sv_gametype; cvar_t *sv_pure; cvar_t *sv_floodProtect; -cvar_t *sv_allowAnonymous; cvar_t *sv_needpass; - +#ifdef USE_CD_KEY +cvar_t *sv_allowAnonymous; +#endif /* ============================================================================= @@ -445,7 +446,9 @@ void SVC_Info( netadr_t from ) { if( *gamedir ) { Info_SetValueForKey( infostring, "game", gamedir ); } +#ifdef USE_CD_KEY Info_SetValueForKey( infostring, "sv_allowAnonymous", va("%i", sv_allowAnonymous->integer) ); +#endif #ifdef _XBOX // Include Xbox specific networking info diff --git a/codemp/server/sv_world.cpp b/codemp/server/sv_world.cpp index f05fb1f..4fb55b6 100644 --- a/codemp/server/sv_world.cpp +++ b/codemp/server/sv_world.cpp @@ -734,8 +734,19 @@ Ghoul2 Insert Start Com_Printf( "Ghoul2 trace lod=%1d length=%6.0f to %s\n",clip->useLod,VectorDistance(clip->start, clip->end),(*((CGhoul2Info_v *)touch->ghoul2))[0].mFileName); } #endif - G2API_CollisionDetect(G2Trace, *((CGhoul2Info_v *)touch->ghoul2), angles, touch->r.currentOrigin, svs.time, touch->s.number, clip->start, clip->end, touch->modelScale, G2VertSpaceServer, 0, clip->useLod, fRadius); + if (com_optvehtrace && + com_optvehtrace->integer && + touch->s.eType == ET_NPC && + touch->s.NPC_class == CLASS_VEHICLE && + touch->m_pVehicle) + { //for vehicles cache the transform data. + G2API_CollisionDetectCache(G2Trace, *((CGhoul2Info_v *)touch->ghoul2), angles, touch->r.currentOrigin, svs.time, touch->s.number, clip->start, clip->end, touch->modelScale, G2VertSpaceServer, 0, clip->useLod, fRadius); + } + else + { + G2API_CollisionDetect(G2Trace, *((CGhoul2Info_v *)touch->ghoul2), angles, touch->r.currentOrigin, svs.time, touch->s.number, clip->start, clip->end, touch->modelScale, G2VertSpaceServer, 0, clip->useLod, fRadius); + } tN = 0; while (tN < MAX_G2_COLLISIONS) diff --git a/codemp/server/vssver.scc b/codemp/server/vssver.scc index a124f85d9342314ed7132b532f472b9118542fb6..033553e3afc97519a124d45c0cd4c0d8a50a7331 100644 GIT binary patch literal 208 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXqR8^Fk-c i{&(r5FI~sXZwG literal 208 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiY`dwgAYh>-yd4g={gyXxz^dn;pjfg(qM{HVB; zJy&P4#;^hTM}hn>@9xb1Lh>=(K>jfxfAg268VjEr#fSj;$ANra!!3GKT`t611NkR_ z{EqpJJD*lRjh6uOPXhU(Iu`FuGk?YN0r{tZe7^@G@8?c$jAsGz&j9)IMjop-I!*%1 gp9S)lg`Ga6KXDOQzlR_L1IOm-*4^_`Vt`T%05`Tjk^lez diff --git a/codemp/smartheap/vssver.scc b/codemp/smartheap/vssver.scc index 2d62d8863663b4904b5d7e96780f164cd489db1e..5b34795a965cd457b9f65d04547af76521411227 100644 GIT binary patch literal 144 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYKbygUiV`Kn>^FUf<--$!2cU(I`LKlDp%LAJw z%GK#${zV|amtpBtqmVo>{}Pa&*2)%|e!m*bzYOGWoR=hjIgA&~zXIg1V7+p7ikBdm Re-+5D54)_xa6k&o2LOS>DQ5rx literal 144 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW+l*oQP$H)K%=Yh1!z7vPCx3I;7gf0LHmIpRV za&2_M{EI+-FT>KQ>p3jJ{7XQ7S}R+qcJjqIkowC&V&l9d`N=PDfcaN|{1vQM&Tfx> S3Fcn~^6SGc>lklp0`mcE2`Xy< diff --git a/codemp/strings/vssver.scc b/codemp/strings/vssver.scc index 725fcc8a83d80b5ff5a7a0160bd7385becb9e8a5..b6291c128b300bca0db246671a66d1f110d965a4 100644 GIT binary patch delta 33 jcmXpom>?qayz`6qcTol~_yMF>RM>BA|C`Xk2owPTy2lD? delta 33 jcmXpom>?qae=6&b@1hJ~@B>J%sIcG4xcglqBTxhYv)u{n diff --git a/codemp/ui/mssccprj.scc b/codemp/ui/mssccprj.scc index 468ec41..2cc4590 100644 --- a/codemp/ui/mssccprj.scc +++ b/codemp/ui/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [ui.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/ui", YSAAAAAA diff --git a/codemp/ui/ui_gameinfo.c b/codemp/ui/ui_gameinfo.c index bfcc625..b418bf8 100644 --- a/codemp/ui/ui_gameinfo.c +++ b/codemp/ui/ui_gameinfo.c @@ -164,6 +164,9 @@ void UI_LoadArenas( void ) { if( strstr( type, "ffa" ) ) { uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_FFA); } + if( strstr( type, "team" ) ) { + uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_TEAM); + } if( strstr( type, "holocron" ) ) { uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_HOLOCRON); } diff --git a/codemp/ui/ui_local.h b/codemp/ui/ui_local.h index f72aa20..8e990c4 100644 --- a/codemp/ui/ui_local.h +++ b/codemp/ui/ui_local.h @@ -15,9 +15,6 @@ extern vmCvar_t ui_ffa_fraglimit; extern vmCvar_t ui_ffa_timelimit; -extern vmCvar_t ui_tourney_fraglimit; -extern vmCvar_t ui_tourney_timelimit; - extern vmCvar_t ui_selectedModelIndex; extern vmCvar_t ui_team_fraglimit; @@ -41,23 +38,6 @@ extern vmCvar_t ui_drawCrosshair; extern vmCvar_t ui_drawCrosshairNames; extern vmCvar_t ui_marks; -extern vmCvar_t ui_server1; -extern vmCvar_t ui_server2; -extern vmCvar_t ui_server3; -extern vmCvar_t ui_server4; -extern vmCvar_t ui_server5; -extern vmCvar_t ui_server6; -extern vmCvar_t ui_server7; -extern vmCvar_t ui_server8; -extern vmCvar_t ui_server9; -extern vmCvar_t ui_server10; -extern vmCvar_t ui_server11; -extern vmCvar_t ui_server12; -extern vmCvar_t ui_server13; -extern vmCvar_t ui_server14; -extern vmCvar_t ui_server15; -extern vmCvar_t ui_server16; - extern vmCvar_t ui_captureLimit; extern vmCvar_t ui_fragLimit; extern vmCvar_t ui_gameType; diff --git a/codemp/ui/ui_main.c b/codemp/ui/ui_main.c index 19401d1..1dc0a3e 100644 --- a/codemp/ui/ui_main.c +++ b/codemp/ui/ui_main.c @@ -2112,27 +2112,24 @@ static void UI_DrawForceMastery(rectDef_t *rect, float scale, vec4_t color, int char *s; i = val; - if (i < min || i > max) + if (i < min) { i = min; } + if (i > max) + { + i = max; + } - s = (char *)UI_GetStringEdString("MP_INGAME", forceMasteryLevels[val]); + s = (char *)UI_GetStringEdString("MP_INGAME", forceMasteryLevels[i]); Text_Paint(rect->x, rect->y, scale, color, s, 0, 0, textStyle, iMenuFont); } static void UI_DrawSkinColor(rectDef_t *rect, float scale, vec4_t color, int textStyle, int val, int min, int max, int iMenuFont) { - int i; char s[256]; - i = val; - if (i < min || i > max) - { - i = min; - } - switch(val) { case TEAM_RED: @@ -2154,18 +2151,11 @@ static void UI_DrawSkinColor(rectDef_t *rect, float scale, vec4_t color, int tex static void UI_DrawForceSide(rectDef_t *rect, float scale, vec4_t color, int textStyle, int val, int min, int max, int iMenuFont) { - int i; char s[256]; menuDef_t *menu; char info[MAX_INFO_VALUE]; - i = val; - if (i < min || i > max) - { - i = min; - } - info[0] = '\0'; trap_GetConfigString(CS_SERVERINFO, info, sizeof(info)); @@ -5213,8 +5203,8 @@ static void UI_StartSkirmish(qboolean next) { trap_Cvar_Set("g_warmup", "15"); trap_Cvar_Set("sv_pure", "0"); trap_Cvar_Set("g_friendlyFire", "0"); - trap_Cvar_Set("g_redTeam", UI_Cvar_VariableString("ui_teamName")); - trap_Cvar_Set("g_blueTeam", UI_Cvar_VariableString("ui_opponentName")); +// trap_Cvar_Set("g_redTeam", UI_Cvar_VariableString("ui_teamName")); +// trap_Cvar_Set("g_blueTeam", UI_Cvar_VariableString("ui_opponentName")); if (trap_Cvar_VariableValue("ui_recordSPDemo")) { Com_sprintf(buff, MAX_STRING_CHARS, "%s_%i", uiInfo.mapList[ui_currentMap.integer].mapLoadName, g); @@ -6227,8 +6217,8 @@ static void UI_RunMenuScript(char **args) trap_Cvar_SetValue( "dedicated", Com_Clamp( 0, 2, ui_dedicated.integer ) ); } trap_Cvar_SetValue( "g_gametype", Com_Clamp( 0, 8, uiInfo.gameTypes[ui_netGameType.integer].gtEnum ) ); - trap_Cvar_Set("g_redTeam", UI_Cvar_VariableString("ui_teamName")); - trap_Cvar_Set("g_blueTeam", UI_Cvar_VariableString("ui_opponentName")); + //trap_Cvar_Set("g_redTeam", UI_Cvar_VariableString("ui_teamName")); + //trap_Cvar_Set("g_blueTeam", UI_Cvar_VariableString("ui_opponentName")); trap_Cmd_ExecuteText( EXEC_APPEND, va( "wait ; wait ; map %s\n", uiInfo.mapList[ui_currentNetMap.integer].mapLoadName ) ); skill = trap_Cvar_VariableValue( "g_spSkill" ); @@ -6253,6 +6243,7 @@ static void UI_RunMenuScript(char **args) trap_Cvar_VariableValue( "g_gametype" ) == GT_POWERDUEL) { //always set fraglimit 1 when starting a duel game trap_Cvar_Set("fraglimit", "1"); + trap_Cvar_Set("timelimit", "0"); } for (i = 0; i < PLAYERS_PER_TEAM; i++) @@ -6525,6 +6516,10 @@ static void UI_RunMenuScript(char **args) if (uiInfo.teamIndex >= 0 && uiInfo.teamIndex < uiInfo.myTeamCount) { trap_Cmd_ExecuteText( EXEC_APPEND, va("callteamvote leader \"%s\"\n",uiInfo.teamNames[uiInfo.teamIndex]) ); } + } else if (Q_stricmp(name, "voteTeamKick") == 0) { + if (uiInfo.teamIndex >= 0 && uiInfo.teamIndex < uiInfo.myTeamCount) { + trap_Cmd_ExecuteText( EXEC_APPEND, va("callteamvote kick \"%s\"\n",uiInfo.teamNames[uiInfo.teamIndex]) ); + } } else if (Q_stricmp(name, "addBot") == 0) { if (trap_Cvar_VariableValue("g_gametype") >= GT_TEAM) { trap_Cmd_ExecuteText( EXEC_APPEND, va("addbot \"%s\" %i %s\n", UI_GetBotNameByNumber(uiInfo.botIndex), uiInfo.skillIndex+1, (uiInfo.redBlue == 0) ? "Red" : "Blue") ); @@ -7869,11 +7864,6 @@ static void UI_BuildServerDisplayList(qboolean force) { numinvisible++; } } - else - { - trap_LAN_MarkServerVisible(ui_netSource.integer, i, qfalse); -// visible = qfalse; - } } uiInfo.serverStatus.refreshtime = uiInfo.uiDC.realTime; @@ -9663,7 +9653,10 @@ qboolean UI_FeederSelection(float feederFloat, int index, itemDef_t *item) index = actual; if (index >= 0 && index < uiInfo.q3HeadCount) { - trap_Cvar_Set( "model", uiInfo.q3HeadNames[index]); + trap_Cvar_Set( "model", uiInfo.q3HeadNames[index]); //standard model + trap_Cvar_Set ( "char_color_red", "255" ); //standard colors + trap_Cvar_Set ( "char_color_green", "255" ); + trap_Cvar_Set ( "char_color_blue", "255" ); } } else if (feederID == FEEDER_MOVES) @@ -11293,9 +11286,6 @@ typedef struct { vmCvar_t ui_ffa_fraglimit; vmCvar_t ui_ffa_timelimit; -vmCvar_t ui_tourney_fraglimit; -vmCvar_t ui_tourney_timelimit; - vmCvar_t ui_selectedModelIndex; vmCvar_t ui_char_model; vmCvar_t ui_char_skin_head; @@ -11330,23 +11320,6 @@ vmCvar_t ui_drawCrosshair; vmCvar_t ui_drawCrosshairNames; vmCvar_t ui_marks; -vmCvar_t ui_server1; -vmCvar_t ui_server2; -vmCvar_t ui_server3; -vmCvar_t ui_server4; -vmCvar_t ui_server5; -vmCvar_t ui_server6; -vmCvar_t ui_server7; -vmCvar_t ui_server8; -vmCvar_t ui_server9; -vmCvar_t ui_server10; -vmCvar_t ui_server11; -vmCvar_t ui_server12; -vmCvar_t ui_server13; -vmCvar_t ui_server14; -vmCvar_t ui_server15; -vmCvar_t ui_server16; - vmCvar_t ui_redteam; vmCvar_t ui_redteam1; vmCvar_t ui_redteam2; @@ -11427,9 +11400,6 @@ static cvarTable_t cvarTable[] = { { &ui_ffa_fraglimit, "ui_ffa_fraglimit", "20", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_ffa_timelimit, "ui_ffa_timelimit", "0", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_tourney_fraglimit, "ui_tourney_fraglimit", "0", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_tourney_timelimit, "ui_tourney_timelimit", "15", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_selectedModelIndex, "ui_selectedModelIndex", "16", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_char_model, "ui_char_model", "jedi_tf",CVAR_ROM|CVAR_INTERNAL}, @@ -11468,29 +11438,13 @@ static cvarTable_t cvarTable[] = { { &ui_browserShowFull, "ui_browserShowFull", "1", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_browserShowEmpty, "ui_browserShowEmpty", "1", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_drawCrosshair, "cg_drawCrosshair", "1", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_marks, "cg_marks", "1", CVAR_ARCHIVE|CVAR_INTERNAL }, + { &ui_drawCrosshair, "cg_drawCrosshair", "1", CVAR_ARCHIVE }, + { &ui_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE }, + { &ui_marks, "cg_marks", "1", CVAR_ARCHIVE }, - { &ui_server1, "server1", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server2, "server2", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server3, "server3", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server4, "server4", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server5, "server5", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server6, "server6", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server7, "server7", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server8, "server8", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server9, "server9", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server10, "server10", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server11, "server11", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server12, "server12", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server13, "server13", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server14, "server14", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server15, "server15", "", CVAR_ARCHIVE|CVAR_INTERNAL }, - { &ui_server16, "server16", "", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_debug, "ui_debug", "0", CVAR_TEMP|CVAR_INTERNAL }, { &ui_initialized, "ui_initialized", "0", CVAR_TEMP|CVAR_INTERNAL }, - { &ui_teamName, "ui_teamName", "Empire", CVAR_ARCHIVE|CVAR_INTERNAL }, + //{ &ui_teamName, "ui_teamName", "Empire", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_opponentName, "ui_opponentName", "Rebellion", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_rankChange, "ui_rankChange", "0", CVAR_ARCHIVE|CVAR_INTERNAL }, { &ui_freeSaber, "ui_freeSaber", "0", CVAR_ARCHIVE|CVAR_INTERNAL }, @@ -11559,8 +11513,8 @@ static cvarTable_t cvarTable[] = { { &ui_captureLimit, "ui_captureLimit", "5", CVAR_INTERNAL}, { &ui_findPlayer, "ui_findPlayer", "Kyle", CVAR_ARCHIVE|CVAR_INTERNAL}, { &ui_recordSPDemo, "ui_recordSPDemo", "0", CVAR_ARCHIVE|CVAR_INTERNAL}, - { &ui_realWarmUp, "g_warmup", "20", CVAR_ARCHIVE|CVAR_INTERNAL}, - { &ui_realCaptureLimit, "capturelimit", "8", CVAR_SERVERINFO | CVAR_ARCHIVE| CVAR_INTERNAL | CVAR_NORESTART}, + { &ui_realWarmUp, "g_warmup", "20", CVAR_ARCHIVE}, + { &ui_realCaptureLimit, "capturelimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE| CVAR_NORESTART}, { &ui_serverStatusTimeOut, "ui_serverStatusTimeOut", "7000", CVAR_ARCHIVE|CVAR_INTERNAL}, { &se_language, "se_language","english", CVAR_ARCHIVE | CVAR_NORESTART}, //text (string ed) @@ -11626,7 +11580,7 @@ static void UI_StopServerRefresh( void ) uiInfo.serverStatus.numPlayersOnServers); count = trap_LAN_GetServerCount(ui_netSource.integer); if (count - uiInfo.serverStatus.numDisplayServers > 0) { - Com_Printf("%d servers not listed due to packet loss or pings higher than %d\n", + Com_Printf("%d servers not listed due to filters, packet loss, or pings higher than %d\n", count - uiInfo.serverStatus.numDisplayServers, (int) trap_Cvar_VariableValue("cl_maxPing")); } diff --git a/codemp/ui/ui_public.h b/codemp/ui/ui_public.h index 5c9ae58..25b9655 100644 --- a/codemp/ui/ui_public.h +++ b/codemp/ui/ui_public.h @@ -148,6 +148,7 @@ Ghoul2 Insert Start UI_G2_GETBOLT_NOREC_NOROT, UI_G2_INITGHOUL2MODEL, UI_G2_COLLISIONDETECT, + UI_G2_COLLISIONDETECTCACHE, UI_G2_CLEANMODELS, UI_G2_ANGLEOVERRIDE, UI_G2_PLAYANIM, diff --git a/codemp/ui/ui_saber.c b/codemp/ui/ui_saber.c index ce230b8..a63812c 100644 --- a/codemp/ui/ui_saber.c +++ b/codemp/ui/ui_saber.c @@ -14,7 +14,7 @@ USER INTERFACE SABER LOADING & DISPLAY CODE #include "ui_shared.h" //#define MAX_SABER_DATA_SIZE 0x8000 -#define MAX_SABER_DATA_SIZE 0x9000 +#define MAX_SABER_DATA_SIZE 0x80000 // On Xbox, static linking lets us steal the buffer from wp_saberLoad // Just make sure that the saber data size is the same @@ -196,6 +196,39 @@ int UI_SaberNumBladesForSaber( const char *saberName ) return numBlades; } +qboolean UI_SaberShouldDrawBlade( const char *saberName, int bladeNum ) +{ + int bladeStyle2Start = 0, noBlade = 0; + char bladeStyle2StartString[8]={0}; + char noBladeString[8]={0}; + UI_SaberParseParm( saberName, "bladeStyle2Start", bladeStyle2StartString ); + if ( bladeStyle2StartString + && bladeStyle2StartString[0] ) + { + bladeStyle2Start = atoi( bladeStyle2StartString ); + } + if ( bladeStyle2Start + && bladeNum >= bladeStyle2Start ) + {//use second blade style + UI_SaberParseParm( saberName, "noBlade2", noBladeString ); + if ( noBladeString + && noBladeString[0] ) + { + noBlade = atoi( noBladeString ); + } + } + else + {//use first blade style + UI_SaberParseParm( saberName, "noBlade", noBladeString ); + if ( noBladeString + && noBladeString[0] ) + { + noBlade = atoi( noBladeString ); + } + } + return ((qboolean)(noBlade==0)); +} + qboolean UI_IsSaberTwoHanded( const char *saberName ) { @@ -973,7 +1006,10 @@ void UI_SaberDrawBlades( itemDef_t *item, vec3_t origin, vec3_t angles ) saberType = TranslateSaberType( saberTypeString ); for ( curBlade = 0; curBlade < numBlades; curBlade++ ) { - UI_SaberDrawBlade( item, saber, saberModel, saberType, origin, angles, curBlade ); + if ( UI_SaberShouldDrawBlade( saber, curBlade ) ) + { + UI_SaberDrawBlade( item, saber, saberModel, saberType, origin, angles, curBlade ); + } } } } diff --git a/codemp/ui/ui_shared.c b/codemp/ui/ui_shared.c index 55fe8de..549431b 100644 --- a/codemp/ui/ui_shared.c +++ b/codemp/ui/ui_shared.c @@ -5838,7 +5838,18 @@ void Item_Model_Paint(itemDef_t *item) memset( &ent, 0, sizeof(ent) ); // use item storage to track - if (modelPtr->rotationSpeed) + if ( (item->flags&ITF_ISANYSABER) && !(item->flags&ITF_ISCHARACTER) ) + {//hack to put saber on it's side + if (modelPtr->rotationSpeed) + { + VectorSet( angles, modelPtr->angle+(float)refdef.time/modelPtr->rotationSpeed, 0, 90 ); + } + else + { + VectorSet( angles, modelPtr->angle, 0, 90 ); + } + } + else if (modelPtr->rotationSpeed) { VectorSet( angles, 0, modelPtr->angle + (float)refdef.time/modelPtr->rotationSpeed, 0 ); } @@ -5847,11 +5858,6 @@ void Item_Model_Paint(itemDef_t *item) VectorSet( angles, 0, modelPtr->angle, 0 ); } - if ( (item->flags&ITF_ISANYSABER) && !(item->flags&ITF_ISCHARACTER) ) - {//hack to put saber on it's side - VectorSet( angles, modelPtr->angle, 0, 90 ); - } - AnglesToAxis( angles, ent.axis ); if (item->ghoul2) diff --git a/codemp/ui/ui_shared.h b/codemp/ui/ui_shared.h index e631e45..84c94fe 100644 --- a/codemp/ui/ui_shared.h +++ b/codemp/ui/ui_shared.h @@ -562,6 +562,8 @@ Ghoul2 Insert Start */ // UI specific API access void trap_G2API_CollisionDetect ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,int frameNumber, int entNum, const vec3_t rayStart, const vec3_t rayEnd, const vec3_t scale, int traceFlags, int useLod, float fRadius ); +void trap_G2API_CollisionDetectCache ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,int frameNumber, int entNum, const vec3_t rayStart, const vec3_t rayEnd, const vec3_t scale, int traceFlags, int useLod, float fRadius ); + void trap_G2_ListModelSurfaces(void *ghlInfo); void trap_G2_ListModelBones(void *ghlInfo, int frame); diff --git a/codemp/ui/ui_syscalls.c b/codemp/ui/ui_syscalls.c index cbbda6c..1c3f106 100644 --- a/codemp/ui/ui_syscalls.c +++ b/codemp/ui/ui_syscalls.c @@ -519,6 +519,24 @@ void trap_G2API_CollisionDetect ( syscall ( UI_G2_COLLISIONDETECT, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); } +void trap_G2API_CollisionDetectCache ( + CollisionRecord_t *collRecMap, + void* ghoul2, + const vec3_t angles, + const vec3_t position, + int frameNumber, + int entNum, + const vec3_t rayStart, + const vec3_t rayEnd, + const vec3_t scale, + int traceFlags, + int useLod, + float fRadius + ) +{ + syscall ( UI_G2_COLLISIONDETECTCACHE, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) ); +} + void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr) { syscall(UI_G2_CLEANMODELS, ghoul2Ptr); diff --git a/codemp/ui/vssver.scc b/codemp/ui/vssver.scc index 6a3ff90801b6f6cd527e5f22b4243780f66ff1de..868844b30da84a460a1a87440e9b68fbbccccbb8 100644 GIT binary patch literal 352 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXvuueYxhLHgb-U4aC_Gl|Am3g$=!d+D6j=Tvkk6&HAYV^bv4aID{|U(F-p%+xWY3{)5dSlfUwk^% z&+FWUZZ;tQ3y?qm#!B90uD7~@Oop#OqIGufkG`O<-CRKaHz0p*aE#=dC%?M|f&A}4 ze)+8R=O1{?=-vzD{{Zs4uCeWnxwjCk|0j?y&-PJV^wUi)nG)u875#zT(LnXT zf&4w$cLWU=r*?}0`F}v_7gqXlg=cp20{MS|d=|g8ynBSpz~=oIU|`oVKtpM{ki83%edluI8?)grzc>n=tYKH&- literal 352 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiXze_g`-hLHgb-U4aCq ztiN&-*?{t2fc*J4R`PPsEd%TS3gl0S%RTs+yC#tnDE|$}e_W+=F*8~?ksrwa4&-w` zj(F8sYnr$f$o~Q4cU@!K``-F;0+7k@6G%M#Y!%h~^lpLxkpBzFkFGt&cD!;zLKKky z8_4&1xUot+e`$g!kpBnBmv|Cn`hV)01Rfy&FObjTx0bhe&sMN`|AB^t7(9yJzuhyD w4=C>`$iOhyLCDEBE)eYAH9`yw^@ZK(>4n{3{wAQIS1#%w-&*%Qfg7kE0Q^^LIsgCw diff --git a/codemp/unix/makefile b/codemp/unix/makefile index 4b12a1a..455dca5 100644 --- a/codemp/unix/makefile +++ b/codemp/unix/makefile @@ -77,7 +77,7 @@ DLL_ONLY=false # bk001205: no mo' -Dstricmp=strcasecmp, see q_shared.h #BASE_CFLAGS = -pipe -fsigned-char -x c++ -D_JK2 -D_M_IX86 -I/home/drews/STLport-4.5.3/stlport -I/opt/intel/compiler50/ia32/include #BASE_CFLAGS = -pipe -fsigned-char -Kc++ -D_JK2 -D_M_IX86 -I/opt/intel/compiler50/ia32/include - BASE_CFLAGS = -Kc++ -D_JK2 -D_M_IX86 -w -I/opt/intel/compiler50/ia32/include + BASE_CFLAGS = -D_JK2 -D_M_IX86 -Kc++ -w -I/opt/intel/compiler50/ia32/include # rcg010216: DLL_ONLY for PPC ifeq ($(strip $(DLL_ONLY)),true) BASE_CFLAGS += -DDLL_ONLY @@ -112,7 +112,8 @@ DLL_ONLY=false # TTimo: legacy RELEASE_CFLAGS # NOTE: the -fomit-frame-pointer option leads to an unstable binary on my test box if it was built on the main box # but building on the Mdk 7.2 baseline seems to work - RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O2 -unroll -tpp6 +# -O2 -unroll + RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O2 -unroll # TTimo: use this for building on P3 gcc 2.95.3 libc2.2 for all targets (experimental! -fomit-fram-pointer removed) # RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -pipe -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing -fstrength-reduce endif @@ -121,7 +122,7 @@ DLL_ONLY=false LIBEXT=a SHLIBEXT=so - SHLIBCFLAGS=-fPIC + SHLIBCFLAGS=-D_JK2 -DJK2AWARDS -DQAGAME -DMISSIONPACK SHLIBLDFLAGS=-shared $(LDFLAGS) ARFLAGS=ar rv @@ -134,19 +135,19 @@ DLL_ONLY=false TARGETS=\ $(B)/$(PLATFORM)jampded \ - $(B)/$(BUILD_NAME)game$(ARCH)-debug.so + $(B)/baseq3/jampgame$(ARCH).$(SHLIBEXT) DO_CC=$(CC) $(CFLAGS) -o $@ -c $< DO_CXX=$(CXX) $(CFLAGS) -o $@ -c $< DO_SMP_CC=$(CC) $(CFLAGS) -DSMP -o $@ -c $< -DO_BOT_CC=$(CC) $(CFLAGS) -DBOTLIB -o $@ -c $< # $(SHLIBCFLAGS) # bk001212 +DO_BOT_CC=$(CC) $(CFLAGS) -use_msasm -DBOTLIB -o $@ -c $< # $(SHLIBCFLAGS) # bk001212 DO_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) -o $@ -c $< -DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $< +DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -use_msasm -o $@ -c $< DO_SHLIB_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) $(SHLIBCFLAGS) -o $@ -c $< DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $< DO_NASM=nasm -f elf -o $@ $< DO_DED_CC=$(CC) -DDEDICATED -DC_ONLY $(CFLAGS) -use_msasm -o $@ -c $< -DO_DED_CC2=$(CC) -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $< +DO_DED_CC2=$(CC) -D__linux2__ -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $< DO_DED_CPP=$(CXX) -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $< #DO_LCC=$(LCC) -o $@ -S -Wf-target=bytecode -Wf-g -DQ3_VM -I$(CGDIR) -I$(GDIR) -I$(UIDIR) $< @@ -166,6 +167,7 @@ build_release: #Build both debug and release builds all:build_debug build_release + targets:makedirs $(TARGETS) @@ -302,7 +304,7 @@ Q3DOBJ = \ $(B)/ded/gameCallbacks.o \ $(B)/ded/files_common.o \ $(B)/ded/cmd_common.o \ - $(B)/ded/files_linux.o \ + $(B)/ded/files_pc.o \ $(B)/ded/RM_Manager.o \ $(B)/ded/RM_Mission.o \ $(B)/ded/RM_Instance.o \ @@ -360,9 +362,6 @@ endif $(B)/$(PLATFORM)jampded : $(Q3DOBJ) $(CC) -o $@ $(Q3DOBJ) $(LDFLAGS) -$(B)/$(BUILD_NAME)game$(ARCH)-debug.so : $(Q3GOBJ) - $(CC) -o $@ $(Q3GOBJ) $(LDFLAGS) -shared - $(B)/ded/sv_bot.o : $(SDIR)/sv_bot.cpp; $(DO_DED_CC) $(B)/ded/sv_client.o : $(SDIR)/sv_client.cpp; $(DO_DED_CC) $(B)/ded/sv_ccmds.o : $(SDIR)/sv_ccmds.cpp; $(DO_DED_CC) @@ -396,7 +395,7 @@ $(B)/ded/q_math.o : $(GDIR)/q_math.c; $(DO_DED_CC) $(B)/ded/z_memman_pc.o : $(CMDIR)/z_memman_pc.cpp; $(DO_DED_CC) $(B)/ded/files_common.o : $(CMDIR)/files_common.cpp; $(DO_DED_CC) $(B)/ded/cmd_common.o : $(CMDIR)/cmd_common.cpp; $(DO_DED_CC) -$(B)/ded/files_linux.o : $(UDIR)/files_linux.cpp; $(DO_DED_CC) +$(B)/ded/files_pc.o : $(CMDIR)/files_pc.cpp; $(DO_DED_CC) $(B)/ded/RM_Manager.o : $(RMGDIR)/RM_Manager.cpp; $(DO_DED_CC) $(B)/ded/RM_Mission.o : $(RMGDIR)/RM_Mission.cpp; $(DO_DED_CC) @@ -487,7 +486,7 @@ $(B)/ded/l_struct.o : $(BLIBDIR)/l_struct.cpp; $(DO_BOT_CC) $(B)/ded/linux_common.o : $(UDIR)/linux_common.c; $(DO_CC) $(B)/ded/linux_glimp.o : $(UDIR)/linux_glimp.c; $(DO_DED_CC) -$(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC2) +$(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC) $(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC) $(B)/ded/unix_shared.o : $(UDIR)/unix_shared.cpp; $(DO_DED_CC) $(B)/ded/linux_qgl.o : $(UDIR)/linux_qgl.c; $(DO_DED_CC) @@ -620,75 +619,187 @@ $(B)/baseq3/cgame/q_shared.o : $(GDIR)/q_shared.c; $(DO_SHLIB_CC) ############################################################################# Q3GOBJ = \ - $(B)/baseq3/game/ai_chat.o \ - $(B)/baseq3/game/ai_cmd.o \ - $(B)/baseq3/game/ai_dmnet.o \ - $(B)/baseq3/game/ai_dmq3.o \ + $(B)/baseq3/game/g_main.o \ + $(B)/baseq3/game/AnimalNPC.o \ + $(B)/baseq3/game/FighterNPC.o \ + $(B)/baseq3/game/NPC.o \ + $(B)/baseq3/game/NPC_AI_Atst.o \ + $(B)/baseq3/game/NPC_AI_Default.o \ + $(B)/baseq3/game/NPC_AI_Droid.o \ + $(B)/baseq3/game/NPC_AI_GalakMech.o \ + $(B)/baseq3/game/NPC_AI_Grenadier.o \ + $(B)/baseq3/game/NPC_AI_Howler.o \ + $(B)/baseq3/game/NPC_AI_ImperialProbe.o \ + $(B)/baseq3/game/NPC_AI_Interrogator.o \ + $(B)/baseq3/game/NPC_AI_Jedi.o \ + $(B)/baseq3/game/NPC_AI_Mark1.o \ + $(B)/baseq3/game/NPC_AI_Mark2.o \ + $(B)/baseq3/game/NPC_AI_MineMonster.o \ + $(B)/baseq3/game/NPC_AI_Rancor.o \ + $(B)/baseq3/game/NPC_AI_Remote.o \ + $(B)/baseq3/game/NPC_AI_Seeker.o \ + $(B)/baseq3/game/NPC_AI_Sentry.o \ + $(B)/baseq3/game/NPC_AI_Sniper.o \ + $(B)/baseq3/game/NPC_AI_Stormtrooper.o \ + $(B)/baseq3/game/NPC_AI_Utils.o \ + $(B)/baseq3/game/NPC_AI_Wampa.o \ + $(B)/baseq3/game/NPC_behavior.o \ + $(B)/baseq3/game/NPC_combat.o \ + $(B)/baseq3/game/NPC_goal.o \ + $(B)/baseq3/game/NPC_misc.o \ + $(B)/baseq3/game/NPC_move.o \ + $(B)/baseq3/game/NPC_reactions.o \ + $(B)/baseq3/game/NPC_senses.o \ + $(B)/baseq3/game/NPC_sounds.o \ + $(B)/baseq3/game/NPC_spawn.o \ + $(B)/baseq3/game/NPC_stats.o \ + $(B)/baseq3/game/NPC_utils.o \ + $(B)/baseq3/game/SpeederNPC.o \ + $(B)/baseq3/game/WalkerNPC.o \ $(B)/baseq3/game/ai_main.o \ - $(B)/baseq3/game/ai_team.o \ - $(B)/baseq3/game/ai_vcmd.o \ + $(B)/baseq3/game/ai_util.o \ + $(B)/baseq3/game/ai_wpnav.o \ + $(B)/baseq3/game/bg_g2_utils.o \ + $(B)/baseq3/game/bg_lib.o \ $(B)/baseq3/game/bg_misc.o \ + $(B)/baseq3/game/bg_panimate.o \ $(B)/baseq3/game/bg_pmove.o \ + $(B)/baseq3/game/bg_saber.o \ + $(B)/baseq3/game/bg_saberLoad.o \ + $(B)/baseq3/game/bg_saga.o \ $(B)/baseq3/game/bg_slidemove.o \ + $(B)/baseq3/game/bg_vehicleLoad.o \ + $(B)/baseq3/game/bg_weapons.o \ + $(B)/baseq3/game/g_ICARUScb.o \ $(B)/baseq3/game/g_active.o \ $(B)/baseq3/game/g_arenas.o \ $(B)/baseq3/game/g_bot.o \ $(B)/baseq3/game/g_client.o \ $(B)/baseq3/game/g_cmds.o \ $(B)/baseq3/game/g_combat.o \ + $(B)/baseq3/game/g_exphysics.o \ $(B)/baseq3/game/g_items.o \ - $(B)/baseq3/game/g_main.o \ + $(B)/baseq3/game/g_log.o \ $(B)/baseq3/game/g_mem.o \ $(B)/baseq3/game/g_misc.o \ $(B)/baseq3/game/g_missile.o \ $(B)/baseq3/game/g_mover.o \ + $(B)/baseq3/game/g_nav.o \ + $(B)/baseq3/game/g_navnew.o \ + $(B)/baseq3/game/g_object.o \ + $(B)/baseq3/game/g_saga.o \ $(B)/baseq3/game/g_session.o \ $(B)/baseq3/game/g_spawn.o \ + $(B)/baseq3/game/g_strap.o \ $(B)/baseq3/game/g_svcmds.o \ $(B)/baseq3/game/g_syscalls.o \ $(B)/baseq3/game/g_target.o \ $(B)/baseq3/game/g_team.o \ + $(B)/baseq3/game/g_timer.o \ $(B)/baseq3/game/g_trigger.o \ + $(B)/baseq3/game/g_turret.o \ + $(B)/baseq3/game/g_turret_G2.o \ $(B)/baseq3/game/g_utils.o \ + $(B)/baseq3/game/g_vehicleTurret.o \ + $(B)/baseq3/game/g_vehicles.o \ $(B)/baseq3/game/g_weapon.o \ + $(B)/baseq3/game/tri_coll_test.o \ + $(B)/baseq3/game/w_force.o \ + $(B)/baseq3/game/w_saber.o \ \ $(B)/baseq3/game/q_math.o \ $(B)/baseq3/game/q_shared.o -$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ) +$(B)/baseq3/jampgame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ) $(CC) $(SHLIBLDFLAGS) -o $@ $(Q3GOBJ) -$(B)/baseq3/game/ai_chat.o : $(GDIR)/ai_chat.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_cmd.o : $(GDIR)/ai_cmd.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_dmnet.o : $(GDIR)/ai_dmnet.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_dmq3.o : $(GDIR)/ai_dmq3.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_main.o : $(GDIR)/ai_main.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_team.o : $(GDIR)/ai_team.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/ai_vcmd.o : $(GDIR)/ai_vcmd.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/bg_pmove.o : $(GDIR)/bg_pmove.c; $(DO_SHLIB_CC) -$(B)/baseq3/game/bg_slidemove.o : $(GDIR)/bg_slidemove.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/ai_main.o : $(GDIR)/ai_main.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/ai_util.o : $(GDIR)/ai_util.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/ai_wpnav.o : $(GDIR)/ai_wpnav.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/AnimalNPC.o : $(GDIR)/AnimalNPC.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/FighterNPC.o : $(GDIR)/FighterNPC.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC.o : $(GDIR)/NPC.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Atst.o : $(GDIR)/NPC_AI_Atst.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Default.o : $(GDIR)/NPC_AI_Default.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Droid.o : $(GDIR)/NPC_AI_Droid.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_GalakMech.o : $(GDIR)/NPC_AI_GalakMech.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Grenadier.o : $(GDIR)/NPC_AI_Grenadier.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Howler.o : $(GDIR)/NPC_AI_Howler.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_ImperialProbe.o : $(GDIR)/NPC_AI_ImperialProbe.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Interrogator.o : $(GDIR)/NPC_AI_Interrogator.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Jedi.o : $(GDIR)/NPC_AI_Jedi.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Mark1.o : $(GDIR)/NPC_AI_Mark1.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Mark2.o : $(GDIR)/NPC_AI_Mark2.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_MineMonster.o : $(GDIR)/NPC_AI_MineMonster.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Rancor.o : $(GDIR)/NPC_AI_Rancor.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Remote.o : $(GDIR)/NPC_AI_Remote.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Seeker.o : $(GDIR)/NPC_AI_Seeker.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Sentry.o : $(GDIR)/NPC_AI_Sentry.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Sniper.o : $(GDIR)/NPC_AI_Sniper.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Stormtrooper.o : $(GDIR)/NPC_AI_Stormtrooper.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Utils.o : $(GDIR)/NPC_AI_Utils.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_AI_Wampa.o : $(GDIR)/NPC_AI_Wampa.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_behavior.o : $(GDIR)/NPC_behavior.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_combat.o : $(GDIR)/NPC_combat.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_goal.o : $(GDIR)/NPC_goal.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_misc.o : $(GDIR)/NPC_misc.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_reactions.o : $(GDIR)/NPC_reactions.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_senses.o : $(GDIR)/NPC_senses.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_sounds.o : $(GDIR)/NPC_sounds.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_spawn.o : $(GDIR)/NPC_spawn.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_stats.o : $(GDIR)/NPC_stats.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_utils.o : $(GDIR)/NPC_utils.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/SpeederNPC.o : $(GDIR)/SpeederNPC.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/WalkerNPC.o : $(GDIR)/WalkerNPC.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/NPC_move.o : $(GDIR)/NPC_move.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_g2_utils.o : $(GDIR)/bg_g2_utils.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_lib.o : $(GDIR)/bg_lib.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_panimate.o : $(GDIR)/bg_panimate.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_pmove.o : $(GDIR)/bg_pmove.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_saber.o : $(GDIR)/bg_saber.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_saberLoad.o : $(GDIR)/bg_saberLoad.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_saga.o : $(GDIR)/bg_saga.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_slidemove.o : $(GDIR)/bg_slidemove.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_vehicleLoad.o : $(GDIR)/bg_vehicleLoad.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/bg_weapons.o : $(GDIR)/bg_weapons.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_ICARUScb.o : $(GDIR)/g_ICARUScb.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_active.o : $(GDIR)/g_active.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_arenas.o : $(GDIR)/g_arenas.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_bot.o : $(GDIR)/g_bot.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_client.o : $(GDIR)/g_client.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_cmds.o : $(GDIR)/g_cmds.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_combat.o : $(GDIR)/g_combat.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_exphysics.o : $(GDIR)/g_exphysics.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_items.o : $(GDIR)/g_items.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_log.o : $(GDIR)/g_log.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_main.o : $(GDIR)/g_main.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_mem.o : $(GDIR)/g_mem.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_misc.o : $(GDIR)/g_misc.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_missile.o : $(GDIR)/g_missile.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_mover.o : $(GDIR)/g_mover.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_nav.o : $(GDIR)/g_nav.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_navnew.o : $(GDIR)/g_navnew.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_object.o : $(GDIR)/g_object.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_saga.o : $(GDIR)/g_saga.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_session.o : $(GDIR)/g_session.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_spawn.o : $(GDIR)/g_spawn.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_strap.o : $(GDIR)/g_strap.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_svcmds.o : $(GDIR)/g_svcmds.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_syscalls.o : $(GDIR)/g_syscalls.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_target.o : $(GDIR)/g_target.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_team.o : $(GDIR)/g_team.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_timer.o : $(GDIR)/g_timer.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_trigger.o : $(GDIR)/g_trigger.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_turret.o : $(GDIR)/g_turret.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_turret_G2.o : $(GDIR)/g_turret_G2.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_utils.o : $(GDIR)/g_utils.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_vehicleTurret.o : $(GDIR)/g_vehicleTurret.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/g_vehicles.o : $(GDIR)/g_vehicles.c; $(DO_SHLIB_CC) $(B)/baseq3/game/g_weapon.o : $(GDIR)/g_weapon.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/tri_coll_test.o : $(GDIR)/tri_coll_test.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/w_force.o : $(GDIR)/w_force.c; $(DO_SHLIB_CC) +$(B)/baseq3/game/w_saber.o : $(GDIR)/w_saber.c; $(DO_SHLIB_CC) $(B)/baseq3/game/q_math.o : $(GDIR)/q_math.c; $(DO_SHLIB_CC) $(B)/baseq3/game/q_shared.o : $(GDIR)/q_shared.c; $(DO_SHLIB_CC) diff --git a/codemp/unix/unix_main.c b/codemp/unix/unix_main.c index 8d58b9b..789aafe 100644 --- a/codemp/unix/unix_main.c +++ b/codemp/unix/unix_main.c @@ -382,7 +382,11 @@ void *Sys_LoadDll( const char *name, // bk001129 - from cvs1.17 (mkv), was fname not fn libHandle = dlopen( fn, Q_RTLD ); - + +#ifndef NDEBUG + if (libHandle == NULL) Com_Printf("Failed to open DLL\n"); +#endif + if ( !libHandle ) { if( cdpath[0] ) { // bk001206 - report any problem @@ -415,9 +419,16 @@ void *Sys_LoadDll( const char *name, //#endif dllEntry = (void (*)(int (*)(int,...))) dlsym( libHandle, "dllEntry" ); + if (!dllEntry) + { + err = dlerror(); + Com_Printf("Sys_LoadDLL(%s) failed dlsym(dllEntry): \"%s\" ! \n",name,err); + } + //int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) *entryPoint = (int(*)(int,...))dlsym( libHandle, "vmMain" ); + if (!*entryPoint) + err = dlerror(); if ( !*entryPoint || !dllEntry ) { - err = dlerror(); #ifdef NDEBUG // bk001206 - in debug abort on failure Com_Error ( ERR_FATAL, "Sys_LoadDll(%s) failed dlsym(vmMain): \"%s\" !\n", name, err ); #else @@ -1062,7 +1073,7 @@ void Sys_Print( const char *msg ) void Sys_ConfigureFPU() { // bk001213 - divide by zero -#ifdef __linux__ +#ifdef __linux2__ #ifdef __i386 #ifndef NDEBUG // bk0101022 - enable FPE's in debug mode diff --git a/codemp/unix/unix_shared.cpp b/codemp/unix/unix_shared.cpp index fb6beed..ff26e18 100644 --- a/codemp/unix/unix_shared.cpp +++ b/codemp/unix/unix_shared.cpp @@ -317,7 +317,7 @@ char *Sys_DefaultHomePath(void) #ifdef MACOS_X Q_strcat(homePath, sizeof(homePath), "/Library/Application Support/Quake3"); #else - Q_strcat(homePath, sizeof(homePath), "/.jkii"); + Q_strcat(homePath, sizeof(homePath), "/.ja"); #endif if (mkdir(homePath, 0777)) { if (errno != EEXIST) diff --git a/codemp/unix/vssver.scc b/codemp/unix/vssver.scc index 9ad194a7b7c1c7f8e3277f4a0cb4e5bf62b7ddf7..c2e3447200c50b959dff67861da1c9e76bf3afdf 100644 GIT binary patch literal 240 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiYqvW9Q`$H)K%|AF+UoBMZd?p~@?1%p6_qMuVJ~NOXYx#7^#2=bqJ`0dE4w$yLf=|>_GlEo>x`rDbK+296| sOa@LMk)N_=uYci3usj!#?|-{u%I*`tx>$hn+(5ooOp{G+b30fb0Exjty8r+H literal 256 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiZB>NVW>$H)K%|AF+UoBM+g8e}AZg_sx^m=-PK zfBL8j%x47hMO6<+|NiPc<(<;klR1HWb|C*7&#S86>5swk96-LA%F*A+Z(f1< zoIrkl%9_3Jk2Hb#TtI$_v}8`WZ$~mSP(L@2uNBi|lPWS1EWbjWfx(gSV*PeQ{{)~E F0|4K0Lk<7{ diff --git a/codemp/vssver.scc b/codemp/vssver.scc index 09af4229c62b4a33674dac6ec88b0a8f88fc9f41..0ae558e315f7390bb922810423e483bd4529a7be 100644 GIT binary patch literal 384 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiWg+)!~~Vt@cZC4czD zX0Zaye-GqKJ0AF%`PCcDPX{X6q!aghL4gsN{~E}jQ1za*Blc`A8&Itb(BS05T}RI- zKFS4|-O0khuxQdIrgv<+vp{w}W@TXbT0VdJ`xw0}ko->p28O-<&e?uZ{8>Uk{x2Z^ zNYwf>Ya=tV)PVfoK)%oMh*|yL@{ zb3y(w1@dj?PhwK>+6T6OG0>8;YVK=A1-FCwYk~X@J~NMFO$Tzhfa=qQ85lNxW?wUZ z+ZC|>Vi5+0k7_yw?0&*v^GkqyvpfUM;-e~HzNi=jgXd*e7RSPixgh_k1Nj2a!?>g7 H_<-dB6p3o< literal 384 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW!32oWL!~g-zKc|?Rem)BJ)9WkbF9j*rXHpJFwja%zq8!PpEp&x^P#dIU7)3254~d;jW{z zl^D!HW_PkMFf5w1iRogljtR)l$E*wtU(4rD-+OfzSpKH~1H)c_=j`2UCz}fa<$nSB zN21oBdGG$zTn)(o4dgekI6u9=S>2om$Y&5_V5rRe{6RD5BiMdMD8F^*d@!F0$}i{8 z1@ldTe4F``m=1esgY91owB)Rs``X4jc`$!1kl(>)=3&VbWX=UNK3$lBVdH1^HQQqo z!TO6u7#KdP=@{gyEd}#SfPAw&1I^-->%e?bF$M ja diff --git a/codemp/win32/vssver.scc b/codemp/win32/vssver.scc index bd69e451da0e6966ac53f647ac2ea717adf2f574..9eacd378fc6b2ffb3891a6014300b19a2a7c286d 100644 GIT binary patch literal 640 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiW&|1SE6hlv3Uc!Bhr`u!U_OSX4`g!q6&=q}?~ zcMOBOSb%(fAm7%A&${hQd>12-F977L2i@@b-EyV}Brgc$FRj=lRUIhY#SG*N0r?q+ zGnH9_jJlM7d|@D8r}drTwCYp6Y(TyUkiUA_u{E1?e)WRXivszlX7>HJo!!+d0_2MU z`7_pcMcLc7YFjSX8GH#;Y{mg2l6F={HdIRnK8*cy&(G~fqc%j+~-8a1;FM> z0r~o2wL7DlbiwvX1NpT-&CUpKGwkI6s&52ZQa4@M%PC`b7b}q81mx>6c8B$3SAyN& z4CHGc`2A|K3j^4{EkJ&_#evL_3K6h;E08bkRehh4XJCOe( z++qdO$IHE-@ah2aPdop6cKg|Lu=_iK{Nq2LOfj!{36}2y^7m^pU0D426Ig#Ykbf!E z@1D<>iD3C2AYb9m_4%wXmV(0r6i7*urD4-I?(GG+zYoZ7$@*|?wtq!07m(i%;Ka99j>?;#+6oyyhE$9Jv*^JT>t7*2K_(A@Xm2OR%$K>icO zB)f!No?yN_kpK8>`ys~N8DPEwkS}CkaJiq?8f?BIkbkTtYt8>P^Sh#f_ICsMysw@q Kd~!|%n-2gAXSNvt literal 640 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiY;IbZvlhlv3Uc!Bhr`u!W7YvYqaLVQ3XbeHk0 z{5r{G79gJ=$hS4(vtH??n#>5~3jq1*K{tHfFG@%S$qNGcODi@>{Wh4C#0=yM0r_)o zxZiUu-7&I<4;vw_XWNVgvF;fc(|Vj;(pQf)lJ>6v#g{v+sZU4~ZlZpu8B6 zUwH1+p2&pbsT@GQIFPS3%ipeF_fsl6kS_t`PvsQM{Jd!**nUYMpK~quxoGS8sUZ8M zfPDS1+MT>Tn^HmcNdx({Kh4f4);WXCYXn+SH(l8)T|YCK6)4{XITn?(YQhkNNi!|5B*m zz4K{mVEG;(U*XR6`JBE+Nt{6ay+D4FWNBFKrHiQ`_xAz$EmpkelgS^y4@gQ5%!-W&3ouIhS#string, port + i ); - if ( ip_socket ) { + if ( ip_socket != INVALID_SOCKET ) { Cvar_SetValue( "net_port", port + i ); if ( net_socksEnabled->integer ) { NET_OpenSocks( port + i ); diff --git a/codemp/x_botlib/mssccprj.scc b/codemp/x_botlib/mssccprj.scc index e91b3f3..34b5181 100644 --- a/codemp/x_botlib/mssccprj.scc +++ b/codemp/x_botlib/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_botlib.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/x_botlib", SUHAAAAA diff --git a/codemp/x_botlib/vssver.scc b/codemp/x_botlib/vssver.scc index e36998b12c8bb3a0f7e55af8d8678e95172c6684..4690e62a49b70c6e84c2412a495c7e0e300fe9cb 100644 GIT binary patch delta 33 icmXpom>?ok&BdlXO@sjqRsv~tj=q|f*2g_eKoJ0KQwHe( delta 33 icmXpom>?o!_H~>1G!X_cSP7)nIr?gLckre%0Yw0dN(XQN diff --git a/codemp/x_exe/mssccprj.scc b/codemp/x_exe/mssccprj.scc index 66fedab..14c842c 100644 --- a/codemp/x_exe/mssccprj.scc +++ b/codemp/x_exe/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_exe.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/x_exe", TUHAAAAA diff --git a/codemp/x_exe/vssver.scc b/codemp/x_exe/vssver.scc index 4afeb9c3fca2a7e9a630016c01d58f8365d81a9e..eac3b8160a6c6359ebb002c36e2c6f3856ca5104 100644 GIT binary patch delta 33 jcmXpom>?o^KlkhF=^_kZumVV%zrUN=q|)2N1rz}Qw+9L7 delta 33 jcmXpom>?o^pt!?kx(EXptN_yH@9$>rH84r#0*U|tmv0Dr diff --git a/codemp/x_jk2cgame/mssccprj.scc b/codemp/x_jk2cgame/mssccprj.scc index 3bcec23..b9149cc 100644 --- a/codemp/x_jk2cgame/mssccprj.scc +++ b/codemp/x_jk2cgame/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_jk2cgame.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/x_jk2cgame", UUHAAAAA diff --git a/codemp/x_jk2cgame/vssver.scc b/codemp/x_jk2cgame/vssver.scc index ccaae4811f7c4cc280e7766f0be2666e00fc13ac..74fed8e2048df957f9a0e745f4d7e71e6355d05a 100644 GIT binary patch delta 33 icmXpom>?qK(?o^DQ4y086pf|unI^s7h7=5ZCsVY3={zXpP&dt diff --git a/codemp/x_jk2game/mssccprj.scc b/codemp/x_jk2game/mssccprj.scc index eb9c743..4c8defe 100644 --- a/codemp/x_jk2game/mssccprj.scc +++ b/codemp/x_jk2game/mssccprj.scc @@ -1,5 +1,5 @@ SCC = This is a Source Code Control file [x_jk2game.vcproj] -SCC_Aux_Path = "\\ravendata1\vss\central_code" +SCC_Aux_Path = "\\ravendata1\VSS\central_code" SCC_Project_Name = "$/jedi/codemp/x_jk2game", VUHAAAAA diff --git a/codemp/x_jk2game/vssver.scc b/codemp/x_jk2game/vssver.scc index dc6db291929be2890384b678a6e411bb7d7c2e25..ca360eb55ed4fb00172c897ba2d7df3b0d925009 100644 GIT binary patch delta 33 jcmXpom>?qaWW_d~nIa5euo_6eU$x>`dZ$AVD^LUgsN@Nw delta 33 jcmXpom>?p?n}WUrwyON0Ro)&S|db2&cj&Q0xM28sXxch(2K delta 33 jcmXpom>?qKul=BXmIwnFtO3$@=W={F`l}{|87Kk(oJt9V diff --git a/codemp/zlib32/vssver.scc b/codemp/zlib32/vssver.scc index 2a04f56c63f72f57a2d751513d0b744d56fe4257..acfabc16b4d397bf081d7920377dea14427fbdeb 100644 GIT binary patch literal 128 zcmXpJVq_>gDwNv&Y=_H|yDBkqiQiX*{qQ{QBFF#+c0jtYeVIdZRY4CcP{ba{w^$wW z?*GTi9!4PF0m%1MHfLMd!v>aj1oF#HvfSp=WCY7Q0r_lwz0TS0%wWDVke^aL_r->% HykI^6mtZ2I delta 115 zcmZo*Y+#%ql5?x=`DzzI1~9M#(uM8I9PDegQ&@o__CUVH>X3K*0v0KZK)wTz@2PCg wwmbB2I!N9T$S*s|a{K$d

0>UuJ8lRv*GM_!I9}T7Fze(E%|GI$*;N!h=!& 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%0AOnSo7H6#vxohnt)fm@ z|4JEpYbPn$kg?JIs=#wxpEMVaamOoC!V&fJQ(rbdW=qY3n4Zux$#E)f#+F9n_d@BU zQDl7W{LY(y%X-XaBSm1|>j~2yQb#ExKu#%kPyPDFJa6$=5Lm| zTI5G52Tm7c3tPbsO=Ipdf>rer1-~C1b&$&;YY$jX1|-RhBmGa*oA!D*S!vn9q0Nlj z33g^Qyh`GI4RCD@l)Hjdxv-c(S+oR?2zNF4JX8(-7&Zgcu(s}#^AP_Wd_8BZ09*rjqhL?n_{&gb z?;v@UWGpF4bp?Sto@WbJxTkPYS$y26J1Kle`XIV$3IGrg?2KY>r5SwG?@cyizZL{_ zbhwbW`@1QXq?WidT;}_KP-2VRwuPQI1z08SB8;UFp=ekZP^?lxs8;PBq^jYc@TgXo z#5DStu4nY8qie7|pNPDIRq4CEQu}jfMO=^yg5s&mZo+kT6VQU%f*zazUiG(ICp&#J z11DqJHUSG@sHXMEae+)IXQ{8Qrb>y1NQ;iglv{g@Y6Cs%3iZSnIud<})~=O}>=#b=bCG#p=vap;}@fi=Ma5l$|9d z;6N{(zPtuaW*v7C3>Fy4T-2dx`+hYUaBWw}qU6FCYp)#*bL87Hk!7Xn8Lw1xR%1P( z7>(+E^}KIW;T>9_?(^JIS=3lTCpi`xLF0JQP=I2$9OAFEudae1queZTw`MHLx%0A6 z&8(;6G4;qh1M~-&`pbyY8p1vnQfYw39B5^BAveK}Bv=z3ZvOnO($!Nz3e6873m;z> zk+PdmNS3MS{l!!KeBaKC3mXFHcj6mW_y>pRktt+~G@W!%GNJbLrXgw_CxPduwr?UL zw_bQ*5|bT2g-ZOD(XO9Fcbpcr$sfqf%tp%-XiF=%aNn%+l_+AC+N$8sRCFJM&*}&n zO{|~Z)E^kZda2VXq!{oAQA`?UBv|0dL=8X~9mly0RBglS@g^ox6E~iFf|rDg93yzc zocz4{N8ZyKGASjZM*gOD?_5+s)|jI2-lX{{6wwSwr$55PKG%JSt$gj=23HXBQpCb2 zd8Z`Enpn9cL>4v}0TXFgRSAdDV^>eKE?=Z%)kcW!$TVn+R~Y4vk%zPcnHz@QBImZ7 z+9O$yz1~C?q+NE$imEqm&C22i#vleQCk**sBho&{E-u~Mhy&DDgHM^JgOeSUD ze#w+-m&>x9xVB5zoh!cn^@hE%BbPpBtZZlQi`O}}3w5g&f9-7s7`8`T%X-%%uKivg z!Emz;!d$y@C$;>E;eOZJt@7Hi5|?6&^VCF12E9~itIKZfPxI_&8ezJ`&N=bK&l)$G z-us9cDMZ3t{^A~^|Kr?MVsJo-Sz^{Fzlp>TpHocr^ed;+2?iIfUJpKXsL}A45=BsG zh&`z~Gijjmz@gSFu-5gO1!ae4LAH^ZrBT%ld$?iPAU@zzq|BQ{AK(>srct)bkQfst zWj`7tG=TVQF_yxQ65tAQ(hIrR=gs73grde4e^5v^Qsv9l zRL!7YIS8N}rw$pBg9CuxBtLdl@TjEZ$e=5Y6xrIRVDSibb$Sf}NqJGQ2(lqw$K}A( zl8)m9>*h@^dNMgp9zq3Ud$=_?h(j85*7R-^BcA+tz6#$`jdv*8>a`x{&=tqXsgcZ$ za~a)3)@DDe9qzrG(>w$%g!Ny6pQAM(r&H?W`8KM+T48KOw%lrl#W7a3Qr#cv7V@n! zB%yX%uh*GE$`Ri4FlZ*Wkcc?OHnbocY(!4SvY#BOGnQasYf=Nq0Y#}!RhtG*eEocg znNwyCB=p$dfQ`AiF|+St-!!0Kwp?zQ0{i^w|8zV3`qsSu`WAM9Z+7W*+_87tD1kB8 zyus^-E#-zadQxV6U|e@JpD&@5!!|$%g{AlV*7+Pd$eTYJ@!yAlBwC!uIeoKS4V{N8K43sZ-vWTjn|otD39OLbA?gw|~~vR0CE7RFaDq%>1t zuC`*)R)(lc7zowKvF@X&B|4tD?Tk$7D z|CuF4cTyuCC6KE|!XVcn5kD0@0@QS4O5@(VGEfl68MY`zZ#hk=w6oHwa}#|?3Uf5S z*)-E)S|t4qwnX|mG>cUW{@RKWQ(+_*;LY4mxRw~OQ05teItrZb9(Ea#!}F;8VSf6X z{!sS&glw#s#v0=&Qz8*6U$01mC7xCd;Tl1M7sf;wYy`gBK8XG#+S-~#%x~1q?vZVp zB$!1WahKF6PUz7ml_%iQ9Ym->h_p>-0 z&$zJ2ho0AM%$)hm>)S9B2k$!lM?hk43hG>11Vo_G_wu8ce@{ss-LO>n+Z=L28bj}2i4p&k`$*TyV!3}HFqbiflCa)r}!13f~cI;{_| zN*#W54*5+Kiai-i7*Y6g`SN1G8=(07 zBZ*b|JyGH*3Dae)*6+oheYOcBvtBULVEpviCP75;kILmrl|RHRj%pD`;5v8%@u?Of z5NYc%%&{V;U-Jai)H}`O z-S*J#*7))+O|>W^{_v&eDi2>JF7K7Mpu-Hr7EA@Q363<6UnaZErM=-1C_-!<0L>V0 zL9Qnox8qk>3X+*-qmp>qiD@o{(!N2`{4+sYmEjbRcZ?J5#71P%)+Ht&JiKFj;)j3L z`H#}yRtDby#uFT~Nu$2!woum2;YS&j)M}BgoOu>w`_&KMwKeQig`=fbm=QR%wl54* zsYO+^WY8YiahUwrv;8*lr`;AP(82bRAS%V>klQR)+$S>fD^rhgriQD~35}5}uk=Yl z+iFvs7QDp3xi^X>;moo8a040($up9BBLfoIk6gPtVhB$~>lTtJSQ5{Zry}Io0X1?s zfAJ=c<%pY=?zV&va?;GF#x@gAwVRGneK_#x7tyBeD|WT6-tk;|Jsc!`X39;X*)Uxz z)t!$KZkbZfy#7J)-Mn!4r_K;^y^&N$m523kQs?`5Iq6#M?U%2`l=F)k*e&>#2$8t~)^i*nX$@`whylEaUAG~Hg0yEX2@owI)eY;r zJ*kd%CLP3l8e8+NYh>Z^&Vqsi}Yop#IevbZHFZ9CSJs&bXA>%}-fKa4@h_bgap zGBU!X@Kz7@vAb;B<;-1HIQTD%{OrL>-S>-=8-2>r75CYrwArn)yT#aIJ?TAu&k(mh z*Z9MKkp)@XCOiqCz(pi(5X-ewUfQ%sfyJW>G|5VDyT{b6ijWL~@wTc6 zAMVKv!j*!Vuqe3$_ROw}Af&3a6HBc(Zulz&Pa^?Dm$Se9?5F@-NB&(g`=g z1g2gAY}$Bbpzd9pcEZ-jK;A{52`~chMLzu=T=YhpQ5JmiOFX;pQKs$8mc1Hk{RXG_ z{qg^Nwd>9^+o~X~Gu5usLnR5gT|HH$LQ% zeDlvu3#%^~Ffb=^u98x=uRF)Z3mfOc6knFUisuG?U!#?9%4DLguUxfrkb#A%;KNwa z<0z1*ZIxozfb1Nz-5S!Rh#b7pl5qD__c!M_1@28tdKSgQzm*36&!Zm zCj(_Q1c~EGl8o&7VGo4NKf_TmFteGuCwuLz|s_uY~y zfOw?YnMe89jwg1eJ4h{~>hgHJV-$@~mCaVAICf4zo@gLdGr|hFX%oq0E`M7Im9%`K zu2K%roir^MDMoLZDu@78l#h7>jb5P3sLYA6IjIGfci?4LBLr*Uu~*LPr=RJbaVSx- zNk(PTs#x?grqLp`;J#CBGST{|bB}enoX;#K4o@#kmXj926^sm$UPa8N^)HK1r3}fx z#j{DMrmhUZH6Ign_PT286JpL0j)7N`0*3PW&@gqlAro(OA)<%tmesE%lV6mlqr#4~ zZ$jFbQbe40g+QDs8@JQ4KkI19PbvOCuDOo%AL0kWZ!<}fuVfBC{!8GD1!YXZ!l1$; z4~BvgG*I=XP}h_-`ZZR)J7NfiDyQ;O9$kB_C7K7A0lEQJqJ4#w%p zPSi(1w5_gw-@Zs3#^EMNf0$Aat`IKZ8A-^<$i9TAse>_- zNY4pGRFE{84iQGU9O?N8D00Ft-TCI*K}(M{UgiOg1R;bu3xq)LbjgpN654QyHpeT&&2=@i!xk?YobH;5#J<)sKalXlz#(^@1@9$B=$p z$D}C(3esS{&cXr|3fD>b1`6mvNQM3^xy?3|ZZd0oSZowedTYa9I7g`I0+QNPX)GT@ z)PZsLzmN9AJaZyr?ott*YSY>@g!A}+)cPU@ql~K%t(|357HkDszzPgkmLm`f`;8ds zv{ksj9S!y>gS(DQ9Rdw6DI^hZanu?hPPgYB1ikZo{{WfKi!}QbRKv*h@&JMDiz*=@ zH)&egtbQ>X&Ke9s7)4XFr(GWC0DW~3$lCP zR^5W&Doo}|iq}z5yK0)T=efth0}XAPIESYFnPEV=7xl%tKo?04NoPwNe7=TP>BNQ2 z2yxk-f7N}+ z4Bze#^!~y5Mfg`hDN}nbSznqQF28Lak-1v)KBOfIOlFsxWBA6>V8{A{{cG7hgg*z> zl-DK)zj5l8ciK4jKj8y@?oT0vr?f#grv8qaxAHo47Ywt<_qf?B7U7A>nqKPaHZApS`5p+%hU zlsOw(DA3W3n*OlbB2hc!=MlT{?#OMxz0`+-6*2M_3CI?s%t-CioaAviX~MH5phP@k-!BL1w68b zHS!$E0AJ32xbVacBjfb)iGT%|!Bp=0eY*T&NzS2m31yOLyWmqnug{NmgUK+n;&RHg zIWljq`)(i>>*pLfbINAJs<|y}Mbs!GiC%X7;8@Z;eZg$f{EBt7zY@At3J?;$o+m~U zrZV17L_G_Mc9ELyyM~{l3;3${F=#!L=9M=Ts5iA5?eA@NlCIiIQ{?BqpGt=aD6xs^;7wzER?48*-+{O8$2Eot#kI6fYgUzz z$%EK_8g`tva8FPG8>5%bmyBNRuC2;3X89G+0{T9zt&oRTQ$D0b)v1OW%3QZ`)!~KC zqwftgn3%Q+ad`l|GZDzLD&A&ylk3vAAFa<^(Or5gChGqvkvNN zL5U@?<<>j8U~LeEOe}lim1xAG6mMa8G|!)e3X9U@=UCS4Oj|Y z52+8hAi|Y$hxJ%59g<2vY1|iI+XM#B>sZR2-)s8QSo9X^$76Y=H~@Hf@8i#dGqOjd zFlq1`KpW_=bE99v(JyMhc?-YMJu@$9{rlH_ftUO83b%E+%j6(Ff|8?xf0=4nTu%UV z4%F)@^9hVe+NA=dx2YtsU2(sUACsJsMwiu~vnnc+3{lMO6p=uu{9mwiVc;Gyf7$6L1Wjo8XA{7Z3NNv@XnKfMjDvhvJB0H>mZWvMbNqRLErq!Nj>MyP)TIc~fTr z4p*1_9Fir5Q`||xr#g;aS+Y|gkRxnO)qTJ|G&7*E+`^N>VPsBwX?-JIKuURRms)6> zP^30Rgg#el072NzAI8A5I2+nQ$JUK>>7oiE{0mxAPWU$y?t07)Q7BU${8om)Av2-k zv@i*)plcHLljE4CTrD#b3uYklNG$a`@@Zho^AQlu>6K-#H|S5b!mm+W8H;>;UrFN z)1%wx)Ac4=ZVrY^ncyjZj_5pk%#gF9!Pi<)uuRm*kms9kaho<|p0Gcs?nD@EY0I%` z_*_4N($havkHmJ;mJrrTEtX>|UFrCwC&!ml7=PwI@NCoclDWHzQWnPL?NkIy_=b^m zty(%Dej;DoOwD>k8WvWvjEcZOKMiD0%!uwnQ>X073MLVuI4~k}d ztwf~)9iO)2WnQ1e_!c3yl3t3g9Qk=M$qjLoMW8=TUR1hF9r@jiJC*4y34p5==1oKd zWs+EueM-zI>Bufx)M`R@3Y}R5HcizhdBhp-IB?4j;mSfv zcR8TjP14$IMaly%X@RA&Et`@qWjze!;k>Fm=G`u%;U?Y#s&8|q?I;k8z7kV`ve5Q? zXMM=McXuhq4gL}2^Lc1dO)_p2Jn}aiEv1r=1RC(66@x#G#%bfD`cq7Z?B8|!J02jf z!jktz4qTDF7pB)8u@O=t_!-~ziNvKQ0B44es-y+K+tK3VLmc+UQXXL>Ji9ffuq;spXT@I!w23`S#0HRLahO z9LmQ-+aECeqQWH zBMHE_EY1)iKPa?KI!KWL4F?9%@gR{$M05Sts(uCF_)* z%?QTVhg}dKx6Oe&g$NmUjnqZlWcZA#|x z$O$I|!2&t9!r-uMw{IRrs;ga1K&-77ROFC|qFZHwsn8~!WN2xyJsw_)^80Omy&d2> zC-*|h9lta(zngWPiL6BVO#U&?O2gY_2OVuwtd=jM^gVc9djwSWHXk^|f*n|Q(86Ig z<*$eg2uNNQ`r?VNZq>8?yRdHM4PJJ=(oyVtvOv=PksN9XpNHx0G8g??ZBvcYwAFP= znGt$p^C1&HTv4w&0t^CoM;m)(SK6CUHKI9tb@Un!4}Aal_=7rU?z`4~+?nd$mVpmS zB+aSsvbEM3oggFF;MrHq!!M-tYiZV26rAp^7W_d^zo|#-UfHd8^TICW#Dwj_)#F<^ zP!)*7*u`aOJK8t$;ZUJgn45f`jf~~Q)Ymuy3Vbe@h?wFjNfKLfrN*djpRjb^ikn1R zM$Bx%+tW>9>XC)=Qrcg9!qlFi(Bz^|_OdRB zY6_G#oG>*A(%{>?I5-~!FYkg0G~^8TE2ssHcn8?ct2j(F&l>;^XvB;)%lIH{z^S=e zhk^9Lr_8W^w<<6jqsbRMMptk$9|6;6u23VDQ{3M~Ruyq_D9n$G)5eGE!;`*A`kUC> z>}MPJsq6jfz+;}awmawvA<(?OOpycG2vr4@Bf{Dk{WlUlGRS+t2HCYe_lpn@6sN{n zH7?>A)e^tSt}k}-!TPE;LNT;1Dcz%HdEtu-4BrfB86kPnp;5rgXss~Xvps=Tpspx% z54tnrZUkat8ARMx4y^;SN@W8m4L{LeSoE;0{dMoxb7J?*su3ghki^SOG52#)xs5N^ zow{FF;{g>qK&ELN-j@cwz#!>as=h?nVe3g|85|u%YjHjmk6uSHGK?=i2;AnUuCjyCDO!(rGIYP!}Osm^`kEPm2$JGYPj$S+I#WcT1gtF zPC!)kmcg=Bc@X)n%TqD-{us1jX7yFlpO6D4jAnKL_e;J2 zIZfd`##FMKU~~LSqM;&^8*!9~Ubn>6M!9*?Qxp$b=q+cV;lO`&q$t z@FQ8xr`(xM{#e_tZJJP;cIjc;^C79{ZywUE@Xxb2-$5#S0U-8g%@e>_^F&Rx{f^**u=jNqVP z%oVkc-a^aX<`~bNsITmxAnOv)Kc@u33RCa{9ua;I4r8r010N_M!IZPUf5c+20=+8Z zq#cfK5O;`MbZkR)uRO@rPc0i=m8z(g7TluJBUC;CtnPrNREyhe+z0bhj6G zw>?hGmLE9=yY!Ca3S(4f8Cw7*(=(hO<*Ja6-o36-iFaW2D%2_QvUu2J`VG`KcP)>} zrr0NE=N^lWqSwh1{PkDuR#c!h@DbClq4xDQiZ8vMW3P^Hs@>j&;BWPIocxoP^V-&K zOXNT>m7c5^Y7}lw4(Njxwl=d}d0Iz`{E|ix8eN#O>&*O44Bz*P7UZNEs`yfUT{C^& zPX^}PZi(_IXi2?GcFEGa!_MZWeqd%1IyFq*iPbsDJD;O93o{`v-8`K$<3xM+C~b7y z_c!@Ga`GDj-2?Z6H)@;XZ&+d`W_=b^I71RLTj=XmCMCEY3|uY5GTV9ti_kpA`f?IX zw(BlYscxL_DqKJKnw&OYN2LTNZUzk7KBX_4KhNL32e}T?yqI%bJxeZCqt9VcOK=lB zWhK}Hav;Mtyz|wpgQ{0klHiXXB0mSu8hH4|EqF3teCYDkGwJY`!=vK$1%0g)UuRb2 z!+JX-jKc@z>B;Y}pMWXS`ycmgeu3%AcEC#wTH`mxb6e}mvnzJiD!ZP-3HW5C!aSc2 z=>CbSs)h36VE#RW*(28VUCqB2xEvHwJy>BqP-FX6{C}CB0zaoF?0jHd){y8@Yq;V; zmvr0?`2qjC>(74;DTfOU002z%|9AaOZS7r5|1&$R(e$?827JKv;4H8%i^D%Z zu64ImYH!WLxUXt$iau~az=&>aNflL1$t~`BzhM_vVk%jSjI~40<~VW~^ZY*9*NO#+ zsl|{y=^+TjXA(kw14i=@X&1LZNH81q4DesJL_wT|&mh2yAFp?nH4+1b7j4nv<$3GE zmkTbL9GjoYWWH$BP&pM32Y=i3x}AZ1O968lMLh_Il-O^8VqClXOaNSe<(?5-Lokuz`(z|WKk5<( z?w5G~x-%H|O^;a%BA@#AI(WVl(ixQXsG8(inyGVhpSzIh;j-;o{<2!Gx}D`AHLh6^ z9gmRMn+^$`4CUbI(+>yt$HCLszAxr%$o(m>9~^$3*zZp^vDw*l4F0NlF!o<_V(Div zQ|8KTLb6LiJ)}0DO8?LF@I`?O>8*n;cTr=>$g{llZn*g*uy5JBlS^pio!R7)@D9=t zuaP%iHu(t!TAj540Nim+7{wu7vXQ(Z`fxBf+4dI>UM8{}zemDbXR`o|LxqW!Mq}?- z<|bTkPaYZX6c-Q&Tdj1jQSw3%5jE%1;Ypw&k6O8 z`z|MGX)=R!1gXDG;!)GnenA=tPt^nvn<5uUdfW)2K)(h*iw_A;!fmx1HKD5!1ntx0EBxp2wqh|P%+;*E)nC5O;x$VSZA!Je?WKB}0~UHZry ziC&Q6UHY@<*tji{iJWK%A&BVFrwW(EKtYn#ad=49YW^qMAQ3s2rHC$K#1S^SR z@m_Znlf1_J!5bs&Hj?GiAADlkoDowh)umK3uZvAU+5J&rdu$Qu2*|Aj(sd?<~q#g+xUdsR4yJLK!6g zEIzp@UwXu(H3puZ1{peKVC!z1;WLQRhn|q+MR{Y^) zFQH_yx&K&xV`lYG2^*thV)2s;8{=bQ&6;>HNslLPV+)9K|cBg$nidx?+1*~4>EwR;Boj_ zPinAmP94ES80dsqPQVT^0J*w8@&Q!lBX~Bs$iC6L3vV#8fH(=HZ+$-`>#sdId2D~s|y32VFfx0 zWCwMeGr4beMwXNT4(JT|Gf}&pmD!{N$|LNqR2*0-fu?QWq8~hqo7~hnlt_#4;K`7L z13}#c>#mMcDQZk= z2I=-i*~?Y5xby=$5tSg^-xfo3=cNwDcY*2mAqZf*#DpeI zCW{UFlsGJ=N11gTY?(&G)5i%$NV19|fMC)rOfYoBLA|2o#%yVG21_fDZ-N(IQ6P;0P;&2dm41sr`0+};=Fd_?Du5`f~Nia2F! zqDOy-@vwSQ5T$HZ5Gu5KsNLZ)u92-0kv4bAG(>f-oVr7W^FR~IE?+!)0*4%FR)hRl)XD!dWytFF6WaHz&=w!A#BuTVs4(i{?p-y(f9yXn2ZGE2*|cXiQ2=E znS3;bVj(pySK6Xektpg~bKiK^zY4*U$7ZxxGO76S#CgtDP?+%G$fp~2t8_S^#x) zG1mGKc~N;(d-BU~Wv>0H%pk>z!6QhVozeJ~I?6$ucr5OZMXQ5O-xMwyR3Z|laiDg5 zvGFt0zUAZ?u>}yF1ii4i@h_(${8no}j3C+c`Si z?B9ZyC(2E($wj*LCNtZCt6;p-`x5qZZdX0LogZF#{!RF_ab42N|GX!*=1W)l>u4@k&ox~$Z6-1RVtu{zqC!6Iy5fe6ivwz^M77@lK5WY>C+wo3TIRf8m?eX+)jWYwihdR1hnUh- zjRS+e=c9fJJZ8&oYV#U%k3kxy3oFp8JTLwNb;7~-ucWb=U6}iAY03qr(7mLSb`BX| z5%Dcc88ZAYNj4CW>n=spLNB6 zQxM@$gpX}2+MT{Y8x`2#A@Eh+9C!Q)Q&?|w|7voLBD}DWarrKDz36IkB$`YLQ%o^2CF2@u$fh(qNjZo#f zF|N<7^G7r_ZtfcihwuCK?3Kk|JajjNr4W#O`frZEaJP&`o-?LILkcQ_zie@7Jx3Mv zH^=>|Y_NLOl#!DHgt@6s*+Ys}2TINYlgv1E+n2jclkOA}`02;WHpflo-2JTG?76*P-HpWq0j5+CltF9ksZNT(EDY*{FqwEH)D5p~x1448 zi@Z|=R~+j#TB_>;^8B-(%ZnEE0p9L8q|*BJeej%*NN<3!^I4+KC!m1V&m*_{b$q&Y z>s#>c29FeGtJkYECwUP08_d@ORo5pje_7~#>!8z=m-MG$kCOpw=ZujjJw+To!aCLrzh@tOHXo%LV9 z4p%IetbRFep2CXm@5&bD@8NGACwCkq*x>i|K?4ON zFueAwVGE?#81eN-eJ*6v|I#FabpO14R3+h)O@ZH~(v57t=g24PaU9-GUSZ?yu!6+k z&wg?Lzy`Lr$7_u43>xRE%^xBg<}(_(cdF=O#}3RS`E1=t%$c4vDZ9A<;nT0V-`zh^ z;h!+e9O3bw9G1bR;KqNU)@Kj0-pLYMFLhn*#Dw!uHubx9K~>cT!hbmcW>#0D)&ebca>*@^4iYiEQ<7YrYFzt%*a)o$Zfn}Ga=TzF?E_# z-=+!Yqq2b1&wrA_V@8~0&JMrNAnO22{Hn+81@jmpq2^M6FieD!#wEhD@MktT87YBv znGeCt2sgwO4rPNloXEmNq+3lue=l>s6gfW@gZ4g44c?Tqp6SMYZbuuYezUw7XLNi$ zSUqV$z7|zJAGRmOc`V!O#?|qqT8tb~y`cM9pfzJJ<3VPwn9#4?KmL-SNa3Vy zpxfHB;?V`lOkS1m~g=|yL|!Z3(GZPn!UbWdU%cL3VDXavXLXWLWNm~%qBeI+{t<%i$v z?e&#N6E!O|_yUE*GAu!W!$D!O((8Y-2hfQG7njejj9N@C3u+`wXZL3ed7R-Mi65%_ zEijjoX;2h9wgZ2VPa+{`N3>St8WJ2#76d*H(3U{JOvvd0#A64I zR`VIeCO{b<2jzw7LIBCpPM)*^D!)u>%*E?~sRPY9c0^k1Ig)sxkio;CNkXdelQd%y z4du4mLoA6lvYQgTvUnDmQ&0>$p!nnt6?Fi`R@*0y1&s&M28is1cEg)cqd)uo@63iY z99Z2D=zd+CGu;;#t%4c&Q>J)mB`k%`S>29zLs40Ic=j^L@|dah+abnAnEJQgXd0!w zMGMy(+5-iI@H&VL5_#i%5_1;MDz*F;5HlxoJ_}ag%by^qL?R9*NuYq-w@6k#DCD)O zfcxvJ{(tlf*nbC1uHLy;fWJ$WfEd!W;M;!E2e9Gis2+ltr2jG&8W(9)$pzP}FA3^a z$Bsm0eMFv)uW04DZPoALJ^H+KS8NAu>1^VpH--mynP=9#e;U{lk-pLpaZC+{)d?^| z;z9Ge09oSsIRjQh^c9)w6YH304f@LyNhQpZP-@@=!$LB6P?=o+j`N9pDF#_YA!`Sy zfQ$cvAVW{>B?-Z2+Z;8$byHlp7^58|cJn2ToAcUj@Gwu2TdzBMvF9Z|@Ev{^0LFqlqgNG`bH($rAD=wxPJZGHNZ{0aPEkj=^zco;peCE8qi4c!o1qvM zh!)t&i#d*~76zd%X*&i5nLnZ!BcXR_J;Nk^PUG(kVc~+lx4}W1SP^od7s8Jf?1f>J z&L6-(f`%yzloSCS;YV76pe?YKg?M2~dmSXG6_ZACUQ$-6G+=!e(4M#etq(vXnN7-2 zM+I~k@U?by+TTkjlQP9)CG!}6Bm;jCyW$VDPlhM*iJY5JyqW!jH|lZ*VB4W%x}Hww zx!0~bKELv39+8=MX{^^y2&0Q-xX3&~!%d-RSl1#qRD{KfS|JzvkoE|{(F2s)5cu4n zg`ePcX8WFmC1ZuwWQvv{seWY{7FquFvow}2PsJ=6Fwr4j{0HYN?8Gm@fh6d2#9JR5 zK?!imh}GJqOWPGyu^EUGN9#{06*t<>^u1X{xn_Ks(Z=2MUIclLtbnEe}?P-F$hA_07{w&2bc<3O{v zE#@_h_bt2yr-iwv^RI@9u@#wpcGQmaQfi(v6E-#s{zCHm`+L=Q^D@D?1)N>g?Erq8 zhXj!7<2K2=3s~cYj#G33+)zvcRy6(z9_zs>mD<9Ttfk3I*wq(5Ac@@rK#pa*{~Cd2 z+yaZAroS-ZZxy+-W^nKWZ;AC@-_H|uixGF)Fs=HF{)$9`Z7`~=@+W}Oa?k;7;dxTdhszydPr7+^eAd3-ibdOFH8xTt91xY50`1JHN zCTMIt=?Uy9__trzAb2I4>%1mtO*6U>`3Uass5&15pS05ZPBYq-E#JXX^PVjQvfnNVy(KH7>Mg})T zPw}sW8)77XcPM2rCqa6nR)u2RA5+#)fYZoeX}Vw#WPF#EfwHwp;pRXzho%6gdl3Tc z^7MS33X0204!v&kb}cAsw3z@TaaZyVpksV?k>{{ezPeZK?h ztn#Hc2Ht*z?jxYw3m+sUlY)>zGjhBXbRSC=?Gfqt8$-5+T!2ed;vL!J@o27&sPA!{ zk1VyMH4CE{TyNraBsfS6Yz3LK^nu+J-2>a)Vg?=|jd4c3E3;uA7B`fQl>!K2!a$Yv z5K(CEZ`NRxCKQjMS*AfGh^JPtC~)Vp%18i+5PMM}wED1EOj za6dloVjo*lrzWa1$76V`rn6~jPTMlA=%T$~&zi2`;XFQt$6L17Vl37IrCaR`40*l) ze4Vk(ERqyytBMl0%;Bxw6%iFU;xH!QvGTNJXWB}-zzYoT=fj!kOUhB{zzjAk_T-d- z@7^2zGWhutoYO&9?Oz{2ogi7p(fu%q(dEPn(lVm!jfHl8gcR@1pF&XT$KI7-)UG>9XlmXQEWqDb#3L#nki@T&sQ zvWQaM2NMK8jpu>R*;UyQCS#yaiU7S_&U$7Vr#i+yB#Argq|Y!dXqln~Th(C_z&=)z zwEI1b$D~`qy^x+qPM1PRdZfVLfLxizk$;K-?^@yF#A!_;u(AR!%J%-So4qs5sVKVf zS(UYLkfHXYADU%s|Mj{zYQKJ0IjkL3izxNZ=l62SUw>)6eOF~oXC+vpO`YFBKU&2F zWp-PFM$A{7aJ(cP2||Jd!(#KGLbHnqr8J6P$|k{= zRTT5=8LZ4n^JME`8YgbbP>e-uW@mYFJHH3vk!rL$Ts`Dvg_9j4_^ZHM2=)O))2s38 zZoe~r`OA3N8g$0(n{I3L^G)|8b@CwVCmOKR1QF2 zpH*y<%$i%yEIF3n@GboAb^6^RlRBI0{Jer)T5d;8kzX z8!7zTyjyAq|Wf>6}`U)o5}Ey0a90sZ!|I3j7jBXFVg+-B?3?D()QqwgIs?b4E!`z(I~;wMeBX zg7f%vq7JrlJpn-!BwjjECh%>>S-f2oOMT;-;nd$E=n5(sPhO&uuk(lmdJqPC@dI+%fw7?=8vQ|^(naDZQ^`j}(h{!W30fP}S84n}NWcSD_ z=7n_<#rRJ0Bxh+UtK%Z4^+9U4Cl*2G6i8yw`jSd4ps#Qv{|1_+LunvmmtTR0eqirZ zCKOl&1Oc{VgDj29WK=SNMefB|E0B)&tvaKUOkH6*MHLH~($l6aJ$;rbJ*BLn|IQ?0 zohl?~uPNJ}n3K{pJ32qLI?KF~Ivk8x_;oV!eJ*<8%jiA2j(V?Emcpk>@TurbvBCmO zP&-OpX>27qphcI8Y$7(Oz2Nj3)-DXBh_+DVze9^1a~76Gfrbh+rUA5)8S4zi%$(6S zplgP={+g_Z5Q!D8% zrXE_DaCme`C!E3oJeU>i;xku$+q%4N{oRW?D)BE^++K5V)wyZCt+>dAQGR&m3x5*u zBCHmY+P;qc+p8Ni=j?SOyV&8;V->86YGN9ALLj%a`>o;71!%_J$|ct{>6ck#PH=nG z2e^$|Hy7PeWw(5g7T^w!#=QRi2a!y`wpn(^nAT`G(j@|hh$x~irIBD%T`7`pMZqDY ziI+-N5T*qdnJWb=CvG?rz5NyL4WxR+yy+CsjLF~VoUyk{j7fovI5z;Z7Cf`Wy#;Su z2RMRXJ(F6)-!2E!51*h;Nwq+}MPwaHjRVKu+RtwD0H*4xvdd8BvIYG7gN>iohfk5%Utm6V`st zPIX}S50z)Ms;&#@rrzry&FAgW6^lhAY?JTFR+Os9WkXkH_?t;%>)apKeDs8hGuzG^ zK9FNh?7UXC*ahWaW)9n$vrKslOv*FLI_@8p@xQf(6Y_G4#q;ZLGM;66mVJG?$IE*1 zolX@dU0lTrEA_sAsSplSSjDfZu&``b7S?j-Q4cF8V2}c13#r6$w#~YM0cFb0$V~0G zD39n2g7cNW47!e^HHHy6l>>Q#ERcjPy%}Y7VE)eoWqKql)$LGMp)m0T&l4kdXfpK= z@YX^MUiOv;scw>JvddnPkiZppN*KL)HSS-vf9!U;gYM-orgF*)?!5GJDL1ZWEq7AUmbuo$W^cWuFIJ1+m24NdEUwAg>V zayLGGpzSeWT?i2K+NX&7W{rV$FQiLwY=w?KR*{0*UT~~+z{&y@NG}4NjW()t&7iIb zz<5svDVms#rriN@b?fAFl6BIi*Vk6|qwZ*KS5vr`S#CLB>+3735_;yxn5?)*Hn6V; zS$8sIqBkoZt+eMOR;;Z!(i$OalXbiF_$K^ye?b5l=o;@ef>13_b$&5R= zIw>$)x?$p`;GFEpzM|8$a*XiaOE6+4_Bjg1PvZ(ne!#Qnt;zB&U;rs3p6eTMc=?eE z8d0Jkz}!NX2;F#)G2p6fc{jGTEFrQpsA=7k%ajk0GTvqF*=DZ8*aGW9sPNb_x6tyH z=}NK{yZ~mMVf`7tBVfjexzE#3e!2-&(C)rrfo@%GnREvS3K#og@CDXdq!$zg53#gG zqNogfY)auOKsZ83KkJ#s67v?6(YLE&NqD=Jv8kllt|oV)3`Lhw-D^*2t?MV8@-ql^ za5X~To?h>P)sJ{R;J7A_&Sro-_B)2Fe8j3hT~bx~x4_l^#?U3Wj*@oSCRC8)eyku% zwxm=CJw@V@S=0=Y*@5w{1HXlgxZ#OarJ?rbNm(U3<@{CIyf z=27~K97507NxKW0vh`h=ss_j9+0`+1oc6gp>$s}Xt@nUlfh_UbhKH#WwNf`Zq@4jv z=8Yzrk{vOz^)8h{bLX+!zRn%p?M}}7A=10N+ACYFJ!5Ntc09^2_rq7KL`clCR&fe~ zh6-dB9+J7Vh=d1?VjU&BuM4M+@m`jSLKGGE=_^(RII?SjGEQfHEgYV=@B(P&y&C2) zD1i&^cosNuuQy@livDgD__zinNd(xS;$oEg(jBAwE2`{}u3l5b<_jykJWZxBzDxb; z3uL+aF{KPgIej=~f4Oe5Yl3g&foaE&g;N6n=9fn5pT^UZ|EEZj`3+k0XR^-a(@)y5 z0soi3p7sTyfjJOElJ1!6jaW)*B6?(OJF9QX01iu5HsR>_hj)cJ|L>cHNqy5QRv>^o zewjGOhoM`Trg1|Maa{xO=Sf!VBxCa0LDRg~{aWmZwjx8hCbvFT#)& zV#Aa1lt5(^6H49WZ%AA)&S8DRP zw+WJh%e5+D?Obz`p)YzZ3El;|ESuU_?yX|KLB z#vz!`&v2PStI~S^&psBV(SCS)Pr8rkYe4j!ppr##`Yxw^iR}TX3tt*ZHKq%J*$|BM z(cLcjR2Ji}d4#VEpiIfVv?2B7u5)Kf=>$*`LtaucTXOpm{mwm%FBf!_Ub|SzJ8qa* zn4y=Bt0R+OfzTb!dB=DXlSV!uX9M&Ih;t7d4 zeaB5ckuh%&inuAYF)*!hKQLr6!D4mf#i_i;NAG^0zKEi6zG5f^`26 zfEfUx1{*X}JcKf^Ku>xFxP09a3OP5akQePcZip06D0_B4mT#i^!{7w-2QEHHZkeN^ z9wiVez~gUvcaXfuD7ZwJbz^w5KDAz9rc;YierEB1TDij3gkd21dH*8&D9AuIHU?v3 zFm(fEKS8R-S?JbM>%@P*dzWiXnzIz#S6h=dO>&p_?!73cD`=X4=lBildN6BA)d&^YrKO1{nf4*WCtay;_QquajVA%~3GS90`o6AfI4z(m&)Oc#^VTGx9#GCI3c7l?V|p|mm%;^Nj9X3Ajwb)Sni-Zlhw20LyZu}-? zn#j0xU`h-x1FL%V3Z;3CDO%m|G#UcW}Y0$oB+Z_mD)lJJhQ_ zEYI&T%_Lbrb6FMC#jS#)>1wupJz~*L$bb)OH3QA*5$8)wOSwZzADjX*dktXZ_XVp; z_g~w_{_9Ytm1Ll61GjOwlR;uL4zbr8q zT}QO({Q*!*0|XQR0ssgAtCOBEw8-+zGhzS$Yu5n)Bme*aaB^>IWn*-6FKT6EX)j}M zWMwa7XJKt+FJot4ZDDC{E@NA=!*cGO%kk3PAt=5#145t zct9Ts4M^a6guBqn$oP-akyou);Yb2gY)?Vsy@Y-dG*% z?=_oAQ=`!gP57Dd74_L%w5K5e*>VkPiKbMw&E_V}R9`+!j1`-Q7V{M?y|4comdTvp zziXQsz%9$uw9Mry;4$iA&K6|W>-W3kNpCnvQ)@03@FQt3XKpS?vsn)Ov*Fsd>ohqJ zd=Qk9#9%n>;{Vs=oDm-S3}j1;6?K+Oh}SlK-vz-C!v#8~Lzc0m_V%?N5zlodQ)(N#xqJitbNrRHNguJad)Mg`}86YAyvrqT;*h9d4 zhotK(hm_AepLMXzC;j5-}yJgz-)LubybL{37_S-7)+92zF6 zCCESDxv-w7L#}4+`Fz42rfxrUe0L(aCsoPkp&U#-0sr~JJ$HkZAk}P^bJATbm=ORI z0i!l_kAL+3O(%e^N7U!6?U?qZX|V|lpj+30^{+br!YmfJ&Hw~bPqo-ENfuV09o6yz zx$x=z1r6wk&U?-pMBw_56Ch;(eF1|w`+E_1&oQ9^8RE=eGrt4thdLmWpF`#tOhCuu z2lx&!0tE%8k&FmVR$(xA?;WiPsYA;Z3p&8HPe(3@X3dNf5RD;fJeLl)^2lhswPgaCB3H=2%Se47a5wa?7$3J%+2HiR=>DJi+t=f@8i?EiWv>k8C zY)^D)&mSm0AabB8^XPdQcAa@7!9)RnI3Iq9w-YXT(z%&+p@`c7H_+6ySrvIfqEZ=4 z3JHfdE}dV8^FDLJ7*ebaXFW4<@;~(k?`Hk>htIf9#S+3M)O!5WXL7c`_v`-NLHDNH znU06&y}__^d($3I4qyo#oVPpEHtDnny~(sY7FCmO_eb@3)4RH!l6HSYu7+1vH(iO- zo=n=eH&Zg{4yNOeqUvfmyy$hwkKI3BoOC<4j?|y=LHP?(+)vn$RuLscQ)cCUW z(b_0noaei^atda%1p7S$h3DjyaslKeil9JySGq zFMXKHs*+|E-4W)Bx>-;YlHD+t&UiSPT(^7U+32SIu{+Lk=DQrcLen3CF=c+5wGMDI zZo}rBWU$gkzbee)VGa2!!fy|*%J79Nkj39<9b@9-?xgoW-Pu(ul2>ehvIeLo1&4wv zms3n`c0RnBW@!owoHD`BCOYWmiGs098Q5nMo!pKu+npTU$nIwi|1+siyZuoS+p(Qa z8R|{MHyZ2oM!0BC+oSfy4D`L|7b2sov21XMdNnNnD!eYC#m~ss5OoQKV1k`hP%qzl zydlE`a2!7iRw{X0f)pg5PdR3bIU1h-yDN6-dUh(kfAkUQPrmvDv^s{Ha8 zDxQjW%^waEgezLXhL>-BfmhX?>Zc;Q&x#{t2dZuNK6Z&UBHo>6(A_B*k%VQ_?xdd+ zugD&v#}2MIb^-|+PHLiip%Y{}Mu5o*NlGabK?p`3K_M8HB~TBnjN(kCqzDiE&VN#tq-}&~yHD-1-3r@sv=M!&PBVs!mEEs?$S9 zboM)I>H`db_@U#WUwfLX27lkm)ZV#wp_i{KA^_C|1i%Rd7nf%{gLs(vQy23gq0cTq z6k>Hk%esK+p^m{a01MX*VBWkeVNUOu-*tjM^}l4>JQ{MC=XB*9)G3DQenI`^Xi`u+ z0R_%iZcxzFwr%%4^&Qh$7PQ7bai-0P>U(qCM2p8Mcsnc*X~PtaM~M7QV=Eb97OqVv zCQ^PpBUqXKe8hb2X6H|98RI*U^5#B$*a87zskNbb zgsWt@Sn%BH)_~rD{oV#6gWwBld*v{47Zt$3PHMxNy~G?&&Uom9vAh-CFjkvT?5Occb0h96|3dUT-sp$S2D9Sa&s<#-fGccOLN;WSk`G-wsQI%W|%#A z%;BKrMyp3|8obDmz;s!`>YVz#%=e5@4&~En?D-uUP#j1T7F7W<4Xr@FYdnoTNrZ&; zB%Jgof~6_SOgV<&F$JcfS0~T--azp2tH>rK)~PODHYeo+s5pjSop7_)a?0P0=dQ#APvv~~j%*E^NI%&nv z*N(QQtO^R@?;>oZ>@x>SCva5wP;!w$(m_hY!zSPQYL7! zyb~%ooe3TkBBY}nq=*6%SWy&hYa?I!o668`7wj}aT}%< z{V7$NRFvaBf6qj*s_eur)ze$ZGw>N@5{_{3dKmnPk{+Y{lCqboB+c~EQ7hB2ZgFJ> zD#pV?g!b(QQHmTDk!a$1M9?3dPiXcdol_sX7V+ zV?`=XcK~YqTtX+?yRJ1em1UfWh`Ev`C6Xx`72yl)z=Cw@HAE&VHe)8a7^Oe4Jjb$f zo|Ge*@ik=fAu(^VT(ZAJTDCo(vpG3FZXSK#JZdFtGfG&f)fp8fsjbr$r7#j~ENRGT zxK;|TRSI{Kf;%aNdzFHFr8BK^Aqrj#&LxUgky0Cx$M8Yf32X_Bhvq?}5U z=*dw@nk1EPV=6_2l5|auP|{Rn>a$6sdgY*?_5iAn8|5mXD7TcS6ty5VZGx0#do9fx zC=QGIIkTy2*Ej_x$Ew$q+Rqptvqu1ge+n0ho?TLKQBkV1j5dpNPS6-X=P5^7C<&$M zCtVEqnrh)oKGOghM>@02rT{xA*Zd#V0!4DNpbpY z0Wmoq00uCd03u5X17EwK7%laj(!b+jKW!pZVh>>AXGBngAjx`&GJVh(KPTZGfF`S0 z%l-jCRO*-xvoTeYWk}oxoEgP1Ol^I*V4E+Ea$NuuY#SE$Na?{zX}rZ2h*lE|Viv zK6bh?tMm#mEgBS{LaoI8ejBpLE*4V|O(K8OXl2Q$1fO$5(ybXi{iG)!#hJ}0>4;GnCY#`oyQn7hq(++g+D}KHH=JBO+uzgfPhbX> z7XsnwhU{$%0Ue!<6L6eG?#&^OdJEpR~g~#WK1TLG*4C z(qRA3W8~&?b<#@;Q#nJK~@ms%r9rpr!`2ny@L_ z$tiJCNqG|SeuD=Q@C&U9w7UWwoxs6^NAxZYz`p5#-_4c9l9XtH7|sWXr< zo8py@8h3I^=jd}|iRT8t{<^3d7L@2}OS3p$xHj2+SDfzwfgU{*;|&pKe?H=={P)B0 z%>}6m7eZ%RoQjillS7R~y%x3>_wZ}834RQ9h&-93WJnM%I*vzD$0>Im(dULPxrTfr z0NZq$xS>Ql;ipaRAL|c~cVSoPaWvQ?8@VD|nZ6XI&H$ot|6CSAFx*Zs%q~d1(`Hle z$oQQ-S*1PhN^^h55Lfo?ILA+zZtaom8c=o(tx zAYkB$ufY+IZePd|J+eUDXZ;;)?=X$x^z=p@Q!Y%o=|n(AJW(wd#%1qAAEK}O6%7cz zb3+`W@deM?L4~A7GKf&Ur2ZVQipmHCVzo83LiVqW%9IS@wJb4I*I(ubRyrC@_f&PE zsbuHb8F@dNP1@((@o&GCw)eX?-7Xjs7`*Ml6wP0gugat(g(PptsDX;inGndIFf#4* z?^BU+D!C=88&AzVMV7JDLQzbr@Onb3T;2t=k^#Ph@wKzGiiemwH7ipX>ITegk#}AK z0U+(Qe5)QX9(;Nw4@M@<;JTFETS1{DaBslZQFdE0rr1LA;L5c9<+_RoD6kuRk6JrT z)_2$uuKoknBjAD!RRG!0&$ugVr!0vvPsA>PB(GGlYd|KRWB1*TDjY`v`P+^ z2KlE6Kj5CnEY}GQT(c@T68=st@m&&0j$ow*i}bx>o5PC3p5=hobY_7ITd4qLFVK!I z1neRBbbQo`qzZtN`>KSj6QCqyx#phe2P7))!ipXwkZh;;ZY;v9oyKyF*h4guJ3QUR zeDL3vcg0J|xHk3%w9RtqN4EwWl0NAv7Y`nOxqhcC(G&3$=&k*VwGphzFN+G7BM8x7M< z#C6nHBQT$|bFi57BIT>@j4K&0u_#Zw|yn-&P><;|2tyJ((C3AG*M$1{}){ z@f;v4Soel}8_`Kr#zFJ}37qfO_slh^|3McK?Y zyhl>SPQPxkUR-hATDd1~`rUTRsMJZzl+0O;SrpnEf$4sScx zf5}!9ef>SR;{V(Imz!Nlw{$+A%D%u;vd5B*hF^uiQ@&!*2ww)P@0%1-=G!o8NdE!1 z#&4L7qa-{r`?*%-0SF<;ES+qtYR*iY_Z8n}iuh_Lx=4QFLWUW6 zjt{7PCt_P^p*RcpLF9JeCkXtYn*O?vYHK!;kk~RY1;9N^3DwZi# z^=hGHHGbr3W#cz9*5N3=tZt9jIp}vJppH+=C8jUFT3nl5cuVHMG+62=Y`o~=h5Dxeu66@ zS4^z6g&N3|i957S9^TC)VnVao)Tn~_9=PHYYP+y0t}$X}3j$h!R5EbK#bc_^8Mxz8 zz$jrdpw^d&SY@|?;{pvGQ+#f$P@EQi(@N6ZWvUVUSP;t4!INRnpo8EV9Z)6ur{f}2 z`MEH_WzM?EEpyIh^N zdcTV{A{Na^0?}1d{9MX_7ZXmAzM}zPKX&BUHjvIQNaZ3b3i`fDFLn7vvYj?#OdF6e z?NBIan{iG-SmrZn%G0@pdt11k&)M7pp{WoRhbfx(H1K=Q29l(j-bRQpGo7O8$EINz zJeQao24&Q4pUv6-w)d^wX&l+2pSf$@|4>$zZLkp%$j;1(?06wS5+?|B0NKg)c(Gd0 zppJkh-HjeInPA8_J#0Ch=elSP!L*0d6DW%$CDz_s&zG zePwT=|L6NNjqd-XAA09bb+;1+H_@`Gl*_U+hCN- zkn5PqVMzII^4tmfRPR5dcyfg&LG-Fc<=YY;NjgH zX7<2emNkDikb>knnsD=n7rthTCL<|az35~^FcA3rxrbCNQmAEf$|>j@~x5Zs)C zh~HCCaN#YsT7u`z^QTyWh~DPp1MHrHdi2J0gKaj*d8^txeIoR3>5FPZ{61CdjVHs7 zK6v&wrQfIK**C{8ocp(1ozCsfr>8ia0lh7j9>wk{wnhl*`z@AUuiCCZ1@!>EEvQGa zdkX4J0w)Z&S$rqmYOnVM^kWEaPC&%(DJVGdf@m88)|=h_6VMOQ+njuW-IFj@%dIx= z*~L@rT|jONmg?fEcJ7Tk-G+E{YkX|9o@Va?id$`7is4gGF<4Hv*}UD0lP91bAh$X3 zC~i-}lKTEuTlZ6^^Avj*(c7GOfL%uFNwrvM>N}%Wt=jGNB4+~rDrj(M(HNnzKtf%_ zVyBCMlBfwpc?7d@jSNGHTbImTcO-OMM&!!ZWmIp0xd&KDdMr!;i}*eEBqp^Us~%fu z#r_y&?tgKKK{he2024z94L39O#C~bTFJQ|0viy=1z%>8HoipVn)5b1*e~Nx6BUFtJ zr%RAjgTXTNH}!7`*uC)#HlY^W)@n_q+oGgUzmh`zMc~F!JI!fGjvp=GIv4GFPanQi z7jnZ-ld!DKYk@1bzY&elM~PbsTn4Ul9UC5CO|2qO_SH*SA42PU^QDWr=ON~yVf8f- z&+^`jzZDdF34;zX{)*`~YzizG2z6}g4oE;)VHIR%!jbes6CG}$GatEkdhVGQY^Ou% z3(#K9-6;`)*jKBWV*{hdRx=BuBBo|$)(D6#YM0-ZD_^*I5b=tHBdu$i$t%=V#F}PP z4~t!JqH882JLB>A&d}%XXf`A)w(X+`5wS0ehz>5v)#oT9(Q5IbHZIn`G7M-+vR_Rp zs4l>(c4K5sQOOfvI-EN5>rD~0i4-&9Di2Lvr=D@$F?D+Cx-<0PYk;aMa2@1Pr~XS) zL&&sw*?@9IUJBTxT5kiW{xZr2_F@xUm-8$nkm{>7kS*$~ER!a*SsOtIZB|y`jkSv+ zq1;+^$i=`Xfjf6b?h(C~hHg3IY6cU?nKRwHWUaCcLhGlpRX>%r$M!lNOek~HY+luk zZf9yRFF??CGj#L3B$IVD*b zZGLP6T4#KjZhH9uhlN_J*=YAkvwhr2H`m-6K8w=-+ZCpY8$>EEbLu*y-Zf-MQn?ez zYk4NJ{uL8N(14XlcJ3AMcXJ445vnXvE_VePnk;5_5}TZW$gS(*3p7t;8i zmYYI=MrF?#LsN&t?@@2}NAWdf-%YiBCl|KXk}vMPy{(q_S}f@{r@+3-5LbPTQmWzcp3FZpb(c>=+N=^AaWg;STB9xhk+p5`! zHlKpckJ4-um}jznSK#Nw*5Jl_7AEbP-mt)fCS18MLky3>(p@`K zdfEi{EN|&_1ZhhX`+w^Z9oR>-&5-P4vTyd@pw?-1D8NSD-1mqpf)-oe=w{t1n{w@` zYlVmK_{CphJU~iakh)R~LN_A*+)*{C~Q5^_Wb6B0*Er&1kD^>94E}_v&ujB+$gV&Ro=ge z#_#sy`N_D#lUR|&22DQYRuEW3s$P}y*T%$JqCn!R?#jSj`2?Fu;;3HmCGa$UM^3E(gHUaFiX ztF0bC3}u8r@*)badL?<#D~ZZ58%0@qpqHKcA;T9NQUWa2rab= zB*u6Smh&MbZjeJkd8D9>eo+V7JuYtRv z!{j9LdpI$TFH!cUA8YexoRB)fU zL}VJ#3S0CP{#n?c?IdF=?d|Pm`5#nNc@pMV7~*IA=M*(;p|E#C<<9Ct_S=J_xSHuJ*9@o}Tp@6j{BGi1Us z3}$2)FHOzRP^#J2c&g@OioYr-_!Sfh6c4bo&kr3*o;U;&{vUKF%iwxQ%+ccDA-@-y% zJD(Uj`eCywK|E+$(|3q#QWrZ7LG=|MpA!W81&&ixz!s0gKZ27bFc}<*@-CJT|~L+XG~Ik#tgn z3H}O7L-Au0TEMG3GQ5LFhWFT14rYE}ka_BkWv@{DP%_)#ZBFJCKnITn=*<>@Y!to1 zBw*5n;XA0@jfqMG)2O>!Ix&#<O z)xep!5@NS{(y$}C2>gh?R%OleZl~X<_3f3N%g_%lW!>sguhTs$rcNYY8!-W@XK6D^ z(Zw@3*#M7Kdy7%vc<~CTcdJe7ko?zH-%>y86Ayh7hG5Hei4bUIvk>AKv@eeT|}gc(fMJq8H^`iny` zd!f3J)w2(VLgVEeGwPyV2U1EcBbS*Nk)gj_OkJ=ZntAi33`y^h5P~+0yzsiTHYG<5 zlR}?);jjUs9gO0iu8TPdoW&Jo4^y*j6EYg4lX8$w%)ttBMuT*M(y~;NMuSwM(xP;- zMuQcErPT4#2e_8F!?na6t|0C(ow&nv;tp34cesMM!xh9GrW1F#inzm7#2scKF4^1r z@PYXhf0atw8XUVt5T?$hXth)-(Ni;Y;lJ*Jo>eT_h9zHp@l~j#RAFD$R4Uy8j3?*~-MO2W?(oS- zI0yDfIOx&tEEKn*@4WFGW4HW#)cKiUvVVF%Oxy^P>VQ4Lh=6^_EoA72#7sY5`gal+ zfQ~xHGiQ+mF3c}eP<)dTtY-r4kw)A?ArY$Q{XWycmdl1GyAs|4*G7-E|LlFCmqfzN z3Jcr*nMZLKSA_S4n9(@G8NG0m@YaEgQUMOHmh)?n@#+xQ0UYW8r5=}C5YzKyr5Fr))E()XwajHb|JP)AU&ifz_mNdfV4^lt<{e7IuRaqYf$ol ztyj>|({K3GC?hsZPdHt=Ex3i00B(Hq;dXOFSKoz+J*2^;H`uKoT+{8wvg}%;)tfCY z1OM8cYYq1HGLX>=Ks_oc0S7%CrW0rCTr+n9`g$4pZU|PdXq64ufPXtDJZo|2lO{bL zpjeAn$Bt`wn^5KDp+nvnuxA2>M0w}V=omy^naDYFDFe6% z%@)pRM{dsvypc!ru{{;61lbL4Z}nAx<%7#*FrPWWb$QJ?7&$Y_zU;~BiDQn#Lt(;% zKAE9bCXiYS<+w_6PH)$9PVA0~lj8s*3~YxqCx~5-ejU$#_&_dMW=P0drZE!2XNcuK z2ZPXggy|NMPZZ`bB)VToRiD^xPYey^yj#Ab$A=8Dzqtygd#TD-MMGL*THt4ufu| z_S2>a1pe?E|FMuDOMjJZ`>Sl%-@&&19cRAv8`x9qaAeV1EM_0wsy z-(ahEtHpbpwu3C81hFAYUzW?38%?tJ;U1cvPKQpglL)y6IYU=M6(N8HlY>nLBNy~+ z_erLiu9qVa6mp;|F%=+h=^;3vFTn6>#|91~yJ5r6`(Ls_WEpQ*Ot^J0%Ui&#>?BgQ z(V5%^Qsn*@TTdDW3neRIos2Am}4HdFz|d%MXBF zvAk7S{Y(EYN7i#gaWF;JjFS53T`}3gV(wIwdMuGshbg`fB7q2?cR+$ z7-BQajMmRF(Be4+59!>v0ey&*m2?KU%(jg34#8A;g|<6=%Ey5tICBa2nJp?Pq?lXy zn7z-y0@Wcm?v)24p`03K9Ui(PGFdXuaVh45r`^n1=<*z1`xGrnjvS6&Mv`#r7pBHm zUeG*+C1JTT#e4D=#I?(iskSEm{CY*=%vD&ZuQzOy>6JYSeEM9z@!Z?Qf>?&Gb2)WS znXbtSMh;o28*e{?$)}eKo{IhSqE0To*u?~do8CLn*q>E@K7{DaYX0Vn=HSGQgxwDs zsiHhYGyn0vl;AxSM;|gvF-g5FePI^go%>-*(S3T+tv8CUQp&DSvTsLb=uiD1rCt0+ z)J2{rkXU;zsT9wcD_Rrd+ zD&Ms^RlaLes(eojQpBne>a*cwz>{5Q$}{#+yjhgWob@uR^UrZ!jP28NWX-|xm?=0E z=Rl}($;LmWm?Lq4FUE-US`es&2q~?Zl)D?Tr$2h((wQpxIpWw)HZ&$)|9;^D&dvVd zw9~3rk6MkwO3Y~!XF>_mY=49sQN!Px-=O7A_}SKIjlkGw0&o&z5EqWjAc5PDEP!Vt z*fRl!35<7go-jSRy@Kd9c_I8l`>4Tr=ToEGvxvRMk_lvncWdO_x|N>yg@-g?UbkO) zOdI7vNqN_YZ%;USX#|B;VS?%VFUV(8D2A%7a}vA4C+4mj{eUQ z;zqEI1qLUzDYj$DF+^H4iKAZQdo-e$OmSWzOx03iZPjI z&b1ptR-38sUz4eKjgca*-08GL$k9D#VWV4L3ZPN#I`YP76%dij<#YnpR^t#MU1C|=t9O^QngU!^=yjGCxPvka6GeE2-YA&Trd$QV2$2iZ)E?Q73L zhUW*=1GDYh70YI(Mc#vG?44z_SVndCaw#wYZTxrNeP^}uE&M=?zMhYuvw!S75C5?P z0sg$A?4z(I-`?L3g~N7gbY#mMVsOhxnZDX7Mdqhw`w?eQg4}Wvad1{X5`%K;)0g{d zr=JXvXyz1Ce3`|N<2ZO@`u>6U8Z*aW?#V=)P(;RaX}h;I>GEt#T*Et~yWem{=Uv8O zpz^Bsxpq|1GOef-yP(Sl#NHk_sN1U9z0eDy*(VpGEQQM%ld!VS9H`}4rBVazRM+-6 z*CKl5aw$Ilc~910??Ui_-{&cMFpe>+O~m8YnbP$#x|b>OM#7p(>EILA&8Hx_2)Qmo zF~!2ZQ>&w016{MFNd>r)kQ?;yDC0Sma%l!#8^Tsl`}zFkzZV zg!^LM-Jt+P>5BqM2E9wc6m5a~t}}~aaGbuzaxoUM(n8Yk=6LE%P_g{+n7PGu8?|cf zw87%Osdb?gOvchnV#?E7O#0UWcP46xyO^7?fg}c#V}T%+hi_fP?YvMn6t`fS5EO1} zTGw_}OAzth47`(AWF}pO^fWO_S;Q05VAxM@I9ue?D$=(ebpDYkZy^HZdwSIubk2jT z#`<)`O_p1?Iv*R_B08jC@nb%fAcyKo z5ivy}=;&U8J5pUH%@u6`GDNW!qet#ks2MyaT@Y7TB>WdEN;qc5;f9#UXO4xL%s~vw z!R6AMj(WquTSRe4BBLOVY)JkUzl+mFWpn3dFvQ2~j(pFrZ!wh?>DlT#K_I1PnHtO~ zWp@k~J&*DaC0q8z(cq|eu5;(wE9f#@@HfwXCJBhF$UlV3OZiEJEq7;&L@e@L+>z~Z zMUk{Wk$JO~ffj9t#SVo?=nx_YT)dbK*B3I(^Lt%~4DSux+r2i^{68OoMn36q1h{#|;6p36BC>|T_ zK8LUsUXk7nmm;gmc4P4&3Ga4lkHKaZSA~??!U#%@qr}fP7$lcC%`L8 zM+gT1EK2OSEk4!{(@vItqYH5Zdiv3#0882EqMZz@DmJ>(RPq?v_WBOqDX7n3FoaQ0 zJd9W}E!Iw-73Gy~)gz*N#-gjr@_Lb2s$#fSdX@WQH04sOfXP055-$D{asvT(`DcNL z*7V!Oj7!Z0hY=0b*-8y2pav&N%rJ5)$ffXb0Vw{!4?LhD`|;y@7JaYNK5m}$`rT&x zq$h-DdSqc0{tx8R88HYyaQPMM%SeL?y9%5xC@T@Ur4ZZJoyeh!&Q{c6TE5R5+Lyye zq`aE7q~*=8YYl}p z_Q8|sqcdH);c)<2@10Q(ydBkK%Y;s3pYT}!?05wcFW^T>O!orXY@iWH57pX-YN2$B zlVvH0!T&QNq9kang+!5I1>74qxJQ?6=GG8w~0-(|$3KSFk6E<*^B zLsy0hZnVUBI&>NP(N#_9n|-4_66?)Hdx-s<;S&ni(YyTTylc(w|BE^DT%SAeMo#2hcPBK6kX5#RlTdG zY|2ysHwEXVyPo*s7!}kPzZDx5yit3o=tV7LZ0IGkr13GiaWjHM+fKr>)mTHh|S- z!CJsKHLY^2z!#(f&tWq2={-dtlLuUti@^2hNrrX-{8VfCbcr`OqnPJ51H23b;phJJ zUIMic2idQfb{Z?F5dl^CfDX%_=!B7EK$eRUoqi?&gz4_#!t2wcJ&RrC!~*%x`VonF-A zQgN3mg?)&de+*&n`(7+gQ!2FSpv-d4;Ry!eQ$P=MdhRxEylL&^lpe0VXgMCM&xDCr zsxB6EP4s;@jbTUSUmlawA zC-e+bzo2z6S|-xdj{Xklk+%$$5C3Fx2M9cX*T z${#}*$S_(i=t5vm0hW-Kp+!gb)fg;OhVWO7QIr$Pn9mwDzaU=N0s~Iae|*SYHxfB< zOA;Vg1+XlewK8D#Z+v8d%hXQ!=c58x!09j# zZHX)JQ32c!913W3>`M+sc_m?F0K+tLZ#QC`PO%BRJOK{cCYy{N&5)2Cdn5mX3_8zR#Z z`}>e63s3m;3|;l+hTFCyZg_dRko*e3B%pXA6h$tB({ksN=t`^{ zrQ&YhSZD?E?mhW?`M)Z!;Gex$pu`*Tl?RxXZh%LBwZ|2}l$#iPcQf|~&T&ov zcFq)s2cfki@mkE~#H`7)!`O4&N~VgpL*K97d10Oymj)!IM_K1VS(ePa$O4%t?9gVtTtI>xfhQZY<#tx_) zQ|TM2ZT)`W%tH)wcJ2l_asmux-n3Ukm-`{fN7A8oMBpI--nt6`NJ_Ed9i=PR z=$E!JGzx*D@C0!`k+lG6>fj4=s6n>3{y7|a4oVrL{!Ugf^9CbE7L zrBy7dKHZ!ccck8G;dL33JX1P^%S$F>BwS6vLT2(H{IOt??y`VuZVGFI8vi@+6`?=EXRu71#X-`h^+SZn6M7zr#5wyeD-5m1yQnnVC{0+TZ?TfK^O5| zrH%MjFauDh$QxIwK5>N@%Y*BnK>x;)EwB^|7)&RzNY<_ZoPK;pF^?mjv$y9`{+3=P zLa7ZtJ=XH~_I8T&7%UchK&&0QoxsDoV=;RaY9FfgEI zu?l8R#L~jM5J{ZGp$Ec2Bm?WOPxiBMwx6u&ezN8J$(HbEO9An@plBy; z>~@+>J{-3(Ba^g=iJ`&;TB8%-PhEZoD%v@=AcW>vIQ6292?j`91Wd7vQQKMLBG@er zuUMr^mpIGFp9#sdxGaNPCm1oAisCHHI0O3Op3wIriX!P!^e1ylmJtDwwgADWj=p3# z&LqEcO*`C?(HFF$2_#xcDe^}tCA518jTfaB52y5KvllMsqkDQuq?FRRhsX5757R5i z=!Yp)@HMX0Vce-cm2{TKWDwpAXQQw*Tr6ym*eeZU_@s^0xk)QoDC~kc1~^1(5RfWu zkWgV&+2xdO|5W(Favq|KNNNq{ixs)fETtD#0blB?hf&3=pmq;lL-CGdra$MDzgR9n z4X!DRQCaPUV2}W2!ZvL)FNTe|40~6Yl3%gKQ>q-J1hOaecZyLD|90hs?3qCS_USq1 zj!OFJR-5{vTb)k1nOcwSyZD$R5Y3G3S+vRpBWW}VlY0{3qFLA6S%g=9w3hGhT`eQ9 zX;657k#g;kn19iOH1QLnN6PR)b_Yr;X&i9;^Wd0{G#}e)(*Kcq8s|joXMG+VgumZi}Yx1^iC_p66P*VzNxuk>N!5nH_ zI%FP~8RCjsoTQ}QHRP6Em zflB2q2K`q)m+hY`U!SAosO(vcEwW;xilN>v)(c{ho9-8rXjNu(I~p zu6|7Gbbo7FBEu#YjLkLY;o}C+qevOxpn^ocj!0Xj!(PyHrQf~(ZtjYgZCcbe^fkJZZP*~176VAS=;o}rXApgbR>rOFG85!JtA z3g|alQs}qx-?!x=*}%ED2tj2GZ_PsuuU55t(#VWf`RzBvE2klL)aulJYSb0fxb_v7 z8Kl~T#fLB0eex9<%xc_U7(U!1ca=+7IMlOAS+H(#xTFl#MYFv@--L=XfVetH(5>w7@EOPldb3ccN$$H zT(QDhcUrB^r}IuP3xh4kww}TM9Y-f(hx8i_2z{~b!PY!Gr#oQKs~$HV=Y0DkF+Y58 zbl!W-qgEsHOEJsB{=LWcu|cmJuX_L^o`Iw(zE4qvQl=t&qnQKhhX!1Xf3wpmPdo*TFY; z=r4m11FEQtknND(0^Iy#I<~k> zVmGChhA4)Me4~9)ZyX;tTMcm8d9(jt-!p3!j5@H6iGjc{s+A*zo@6#eWZ?|2Ng*Q? zCFU2LYGLR`Jb;=SQt;J6nB1seBmWvB3+Nx+*`gN(-0g?p3h#OU$`p zyD#AW0NA;`PWVXQ#-`THf+toUNlZXN6I9wz81-x zfg`_`6Ws`>P&=MqcX(WCk^~`wnFt8n^B^43LLepPBT z>5ch90ug?zoD8fPI@8Bhw1}!n%7`NlQsU6A>a|j!`Y3Ri#Tao6d_t??5)DfbX$)$v zaK(iXh2T7KypnLTie)x%cybkRD$#}TLQo3FEGqz!pfn~z7AkB@0f~4<63|mocr3vM z3dw)Lz8d{3F)JU~e4m|{){v_5A55#&TkO)Cj8n#L?65yNIp|2%6Jr7#sXLD@ogkei zN~LYq#Abu!*o!`o9AI0cz*(fY5*X*1eV8tow}a&@#sW(pDcH?6<|1a;lMPnyR*W~1 za!{PXYsPx#MOlYRtNson6}>)ipb&rY*ryMiH6zvQJ=sw8ZXY;Spxe>%pa0A-sj}LW zPO9wnAp^A!YDiyne&XaoEKt^@@>)MK1qp_PCSbM&-2;n4kc|?;GYjzzFUz6 z$Q-X4OrLiN9*>vT`}^g}{u|2Q-(KB=Gu;O@d44E4HA;vm^|EF0g(M4GBn*ZYZB3wYF?TNM8%l(X z0&$FrQHfk2mLfj-(!;dxv>M)wr3A*g3<&QSPcJ$=Fk~o*$$}~Of z;F87^>5S;ej-<#b;jnPhw4y4BLg($adz)V*Gg4d6IJu42_%DJh`9L0VsfU~@D2~hi#dxK+$W&mjB|z+}Nz|-pb{loFBd#thuCy=S6ZrgzD^Hwj&+M3g)ietjul2|Grm|)|5fQr> ztBBqVQ;0AC6ojx>&piyYh|zm*!4)xNd6VJ^#1)k6H_l-Pltou>M%pp4$GzoMA=q{v zRvd@StHTnczrVz;>S=&k778Il*g2XiTEm#gp#$*ljkHbQpkwer7GHW@nZ2PS8cpfb+-7T$+iOv1Iw%j zo>QI_juFDo5nTJp!-c*d@Z>3EJ7442D;ZB%(EtMnT5d_YU3)I30D6UMQITpZk`##8 zmo8^H6fH5#8?%lP)qDJttb-xG@L)dohES2K#py4tPA{U{YIwyfacFg|K&uZSA~-ns zlP+wJ#o@ymptxeWL6j=^L94=(geY~`mqU{_BIKn>6&d&vYtQ0kNHn+gi3jx|2$-zL`*aYJ+IWk-#VH6#gQLH{!FPQzsZ^yR0l&>DtOoAM_JEF z#=2A*SR!F6goIG9W{Yn8H9>OJrX?v3pJiSDcJ2l+q$b3<<{Lz@#fN^GM~UUXFx;#GY^#YHi`aD1UnmJm0;;PU34 zUXr9QI|qJp?@bEJf_Q_t?g#?juppASN8&F=Etve~jHOPFYs#;d+REW^tbH`=pJfuSUBl>v`1@No$uGwuGk2;*EopRw8(6sI*Y!(`wRkVbiPo^Fy?{9pUpOnE_OT$trH}WLuCdhO+<%4}5A4ue%Q#xMRcugu>W}te0 z9=JDh$_L|=r6P?}&H9PBUy%$a&O{r0QxH>7c4(y6h8@L>RUH;ow*;vQ&Ye*+k>N0o zg2@wxL$(Wg-VErwoM5U8O%jj-Xm?i;dgoKCanQJ$x}BqDyHmSpRl7Yj6I#*i$M*sy z9_5^Hu}NBk_araIuuIBJ!p5GI@_C$g8l?j*@XX-3bcMkxjKqYn^Co=}LAJI{7Lif^ z&%1~)D*qp95n20@i|Ij2>BS3@rzZ}N7Moi03zwrj&Z0|ScAG7_j7yG3y?Zs}@2w4% zAir4RWWOx_JVu1PqE|>Lt`vwf83*=-c=0S;tuwlT+#A3d$YKm4$)AJpm;hxp{KT2E z9REej{YMHIO^A;JffaIM6p0%@MP8Y*zq|);EN{(@@;2N`UgkaIeS^*8t=~1?%I%`$ zKWC4&Jo9?kFOu46wLPd_^gF6QLx@1IYDJi7rOavSR`j;sgBM^bv~CMRW6YQ^Ue1Te zZm|Rol*g*gMg|NPFE@^syPCn@jC;w*yZm(q{LW`Uf;D@}GvFay*njBmPn8k;-~V$= zpSQ9%l!!T#l&Y{3CtzR;DJ*U6^62U5ObSUhFkVe%zM3vEu@1Bh6Dta*>5?UThp5`0 zy)UJSM|%L-3GD!8C0UG~p>(122dAA@y?TU-JN3{o zib+vD4~*q_zk zLdUYVCqB`MRMNxdoDpkq;|||ITDlx4YiiOFyL3>ljEki7H;7hJ`o2=;o`Wn17&mK! zCZEgul{a7B|7$-^$H0!}5fk_ky1GWLGm5j=mlgrtjKjzs4Ol#LOk3!JI5i4C_xja7 zCLQUYeu0c@s2Rm(Qdk6$P#tpM=<%;FOc-%Q>WXilS2AklyZ2&k?`6g zBzY%9BzTG8)fIwIFKj*GmPBuCPKDG?=@!1L6z?m=+e-1OBBYnkxa{-9MK=eC$DZGj zh_O@bYB|~|zMzd?(AF<#^A}f@LLv3RM+Y`Egf8~M%4vj47xW=aTtir|EIC9-78pbx zx3L%_%jE>73ow4VbLn|}IrT4j@3bb5Jg-Haryb#9X36)LvrFdVjOPOZ+5HHw(m2!A z23I9lTHCH45AT}zs`0*P)*8?sOCe|2Qar<=f@(O?JBN8dwv0@h0Y8K>1gwNx>AemrIFO3B-1)h8=T1ZLEr6ERtV(=qGM!MnIPe#K0E!l8%JIG{lKTpIO)8Zl?-LYTbR#vo z{;b++9e3J&?lRs7f_|p^qFJMR1VXNSS;r8;$#&)dk_Q-_1O8U#9`hFYOyCPu#X_k$ z)8P`_;0f@9Xr##MqPM)WSU}zqy6IdGgdRvcJ_d_}%>0L^C?N!pcjY+yo z3;@a@X+5iO&iKrD@8TTN9+BMZZrQr{V9P)!;7~{_zu7<3$}hc%Qu=qJbm5FJy#JvA z6&G{Gs0>=zH|6-GgW<7d345i-K7R6pYjWufuOY<@4;{b->|*ud^-f{k(Lv|)3W9r; z0^O>B(`$WPxC5_*?S($%SA^dN^o}}r1Cd=3I085}kV7aW+E7+NVJK6 z^LBTcaQgguctORB^m|19;?W^a~f+QF@+#k9CqynZcMEwP?Ye1F7AE3s1n>SlYf z#SOkL`12sPvB~2q{+S+|ugj1UNu^ujr`iuGs7~xkH>;0T(RF({JNDe^h#gEn(-iQr%}MOH!X1+jCI8h^-T)&ePqlv3H6jf4{43s9k**(K-d3Ri%pYV4DcIy;P=4;6sW`%{#=5@XIlMcDT{72+Zh`4ii#HqC|-0D}^`Y$YCD;n4%|wOo!N; zd^&r~Zpr$BwhAHCm=KJ?1x}IvclXEP)CofvtK}2e8Wc2xNU#QkN|2%LbLH*#l&}<8 zhrO84<%!dS-KHVS3q8GO8Kdb9f9bN+sc3Zj;RB%+U5s!rb0WH-JH?!dKR-%Xd;Ty>Wn~q(Fn~BIE&QTyDmH8}?)9uJ1CoK2&1K?dc}=A|Zq$gl zQ-&qao1QixPa|zxc~cNWk#gdk2WASH5Af3;b!rtm1Q6&~fs_`=hem3>VfiVTvS zN8nlL*0Bh$iIqe6Mhw9!c0dzen28omdMJ#+{$C8ipNb)Py_O+B%EMNU1slR1Ft2;5 z6xq-C#1YY$?jqJJFBcfs-EjE1{FY_CrE|2?Zd`ObgI=}zaZqpcYCA>x?WkJoSL2_} z_WxWod(D2Q8-Ht62Pd7AlUAb_e>?AV`ykjH^yu@q`%7GK(&^NjjloY1%l>U+_{n2Df zDONQbiIyHwxI|0OQNHy38=KVWpkhj$*n;{QLRDJCPm{n|TzSJ^c=4Nk<&1o&C`#$s zDwE#VvMT-<{HeN3|8qrGY1V%!60Gz&Ri`xGg%;74Lf1zX za;1#q31waB!!FoX)oSrq%5btv!Lr;aPcH~i4rrT1fSu2O2?hQ-j(^AF_;tqP82rFkljb^w z9zN&bv9rQ=N_b1@mH)`@QZ`?q%-&LR`k%mK%I?&(&Y>!!$JFZ9hlX$uEQWA$LyQR1 zJB7qrpBmksl+NXj&j;0`UZ;ChWIw>ti~o7v?er;C`L8}DF{B>*rN{!^pVM90Xw*gB zi{7dHvn3$(8Vy;y-mNy<{Cf+;{%yK#`R{J^q{06@={C=$kdBEK<58gECT%3jNx()_ z0coH58OE0Q$VZv@e%5T)``u>kCoIv+aO6oylm?cMtz@5+F7z)8U?ftax+GVkq+ad* zgw#uv039o_xRdUKpImpr)mpf&!IyavlBr~CK-3e^f1UY=j2z0=FkypONc<#K)>Hl5 zHV^QYl`tQ$!hq|C%p0sjzHk~Jn|;jZUCg`&t4ED)|Fqlrq<$FG8^?`yuc3YG9Bbdi z;@#V;12uYbINK~`>uDXIzJrg>)ElK7*3zBVte=nlcp2>{uFNaLOgX_Dd@{hVo*RDN z=aHZwtXmL~yuOz}KyNy%xDt|9!0<$=Lsns((8B$K$n-7Ncs0^GHt{%zDUx^a8p?~r_ zdE;*C-)MG{aK2#je|=F|JTOc+nj4m-T!i0>ff|k#i3W&^@#0DBM@z#(rbVVaTpsE_ zk>)318Bta@DR4a6VCkCG|6016EM3ie$Tn~9$o~4pY8=BLK>yRO-iNGTO{I$?-bjzD zv`BTg!@qQmtFCX&thlvme^Dcw)W>3j`_6bAx{(`zpv`eyyy09(Hmtv^sJ;8BoOy<72)x)B`v{Gn_VfLgW%}N&<1irER3`PS^aiFoy z&l7vl{G|f_O9j4-3OrqDeXvq#{k`2IqLSSsqQX_So_!B#>UY6@NG*we8fh*bDYkjv z)W<^8bd;s0BX5xXb-9pKJ;$t-)Nw)vbwGQf|_RAMT zU~QT|QiAb&X`Naly$iyf${$66yJ9q!b@(M#&OY3WK&3^xo^=!C7z-;c$x`-`rg(gx ze1oQFA0Nr!c-8Ju&n(;?30>fO+mkt6A^5*>Z)~AVL+=ZJ4yp*<^`ayL^QEi64B@zK zVcJz)a%$I_C9btf6wU#etP)e)0#dvJ)LG$pr07z!xeKgRp2f?R%eps}%4*FXESyy( zs;a162HxLPa;i)4w-cb+U_7lHm4#p1Kpd59u=**lNEJ2+onwvLmPJPN&Ya)$=xyty zoGI0Wuv1$^)_80iNf)%s<=8F@=n2#7)W?)2G42 zX1DxDSUQ_79;S1SE21F@vz_VI8UsVyxx>CP1!wGg!oGqO&HTnyp5|xJHV;tUEK6kB ze_x!PoApuenSg!KJ57FTC2(NcPSlCoi@0*sUdXkii9+q8{EWI%v#wN{ngyUeHNSxx zHQ~Ht&Qj}UTHa))S|3|w>vY))#GKj6l!?=d_1UwvWK(GE59ZNc(6VEw&S-kMnAY?f zVs5Q9k|oA0+gim_Z7aq3wiV!{YXz!Bh&Jz)4d=a*Ht&@c^Ilm!@0IjtUs|8Pv_4yC zeIDSf__yD~Se`i>qPCEBiLr5_C!ylpvf2@=QCat%8eu4lk&sKV7VC46LzHD{s^pGqD#-6 z(B%bTli>)obqB5uII5MfDvt>3ARDYlBX}%Bub;zr|md^11TN6=L#H6EF?)&ILM)W7c2r@K!de4S=8GT6+A*3f;dIwx0o(XQ1{ zrzw?JU2*Tf z+RmF}cA*(}wBFmxL9!)GL%fIr6bI1m{aZ2=No_-bOebX+Kyo53O$G8VYFO$BRWK9GIK%>>6Y?1Mb@ z6aWGM2mq^-o-klAQc7a<004?+1OO)h003}uZ)#;@baO9iWn^hDV{c?-FJot6ZDlWG zXJ2q^VR>b8b1q|WaO^y5bKADEpOu;X2gGNZ$c`-AN^|a=xK73o+4ZSoyOz_mlV&s! z2}+15k|9XRYL5T=-Cckr_>kk+?U~M;o0%ly0$42eh1~_n$B#BPSTd1{`7#h}nyQ4U zgfAFRSQ17|h0rS4d=mPCo$vpMeSW`!u8ko(fm;3i$AP;7o*@`Xa8hbi2Qg z`BeNqo`k928>$J9g}bB=59CxWX`4qw#YfB04`*T`9bYtzzeqj*_lZhkU{HkvCue6r z4F~U!PmhL!{oRv(YqR^(D=~-~2j~6%K?@pRcr-f4jua<+%pPlIIPi#DT09S2@GOxPMdbeIehHo`uq>6EQ*=V)i4baRx0 zIV@)orh(gLV-X}WSs)7dr4bM=K+s_ddtNRg0qyy3!dqaT?$3BUOj;mcSB%o}kAnNj zWRJ%Rx^1js*U0A!5i^=f3Wbx3m?wg9HjV|Tr3+(N=)vq>7*Ba3!+?2lIAwAg`O=XI z`RCY%?*wuwx@ z8tg|`#)9bSu*Z*D@CV1kQUc_-=?0HcsHEyz(V;?Z@>$yqvGxk*5M?Q2Ky22lT z{Ru5iUwYzFPR)}iW0kzcF8P3zUxTk$ef;PPkRv_TW>1PmcVUni1DBw^^<`tj4TEP1 zn{!<9L@0qPh((gd0kEfagY0jCvq^yMg8^{#D2&AcPe9P{0|BHvt*MwQk-$_>GkAw> zc8GJK*Un(8M%7vwpgWGk`9T_M4cTGqTiXnrog1XUbj;a}`(j|V*ql0)u*#_q5rP6Z8Gz$3NTT}Rxx%6fX-SGsEuGHkFrX3~Iu z+0X6LoVk1uQ~rQ`(3V;o8>eTN{a4_`<9N|w6Fw8Dz^+v2OJHtStcPiW#xzCwb(q6b z1$4oH1l3+DMW#fO&Z&9LHc7xJ&Vm*|c9td;a@RJy#C5<5dkC1`476hrrdlZ`A{J~N z>`!Y$8QI0rp2bOoFpvjAdEhecM-vW8suI|8Z~>oi=hDzN$~O?g6|S~o-#6w9D;&Xk zGfHq3=mlE#+)f(DU_NFc&bXUY*$%DfG3n2aF~(Ad!2ndV)q+OU(Nfdp@+M6pwV{J3 zwSoC0oSHm8hV{2MyPIC;pWWX7dPeI}LS&qE(b)P%{4BK=#Qw9~P>}kf+~A5RnUI-~ zRc&sAqVaenlbFW~My0vC#GGMEj&z>h<2YnIrd&AgUTzm+DVHy=YAEcuM{bRel^JJS>PEE`g2ia_^ zmdpxCH1{P(USh0vAQ4vzOd6=2aX%GhC1BOnEhj^7Jk_CP+5vC^acMzLse5VN`Iro( z2jpPdh}DPRcHe*0?t%bjuae!P-tPG^1_{{?*fx7~zOg}9A~_HDAgH(yV+p=5-uES7 zB)1Jxq@RH1dh?uQmfKHuHId1aRCY(;U=wO5X*qwj{DqMnq+P;dx z7h|;q0XAjh&1P<*gDjLfr`Yf?3=>#;q+qp0L~1ZmVCtD3CK|=Zfq5jvjc9iv$nMWz zJmAIX2ZQcI>5JpQ71y02*rs*r04elch!pa0srYHOh-y&1cQice4MegBCbdgyQCS@`e5g%dZ?cYthv(&_l1`u@iO#|IFuPX^$6uFk;?Qrgtc2-kk6Q(cF7oY^6#!iaLa zp7or+)hWtxFo=XBxxbqvu+#(&**#myj87wv&4Ug4@ zbYX)wz-o@SlqG2d*(Ri8SMQ}+XK7iOSM6~HHinTqgl7&!1CWR*Oe7%=m|%_q5!eFv z77W!Cj$rL8AtDygQWZLSuD~XcKF}9TzW}6vU|a_|mxM5K-GMX>yTE3RbqUzW3a`>y zgY-mCPV`VFiw;J8c)R=SaR1%l^6c$!Z+CFKKOCIBJ3Sbnlh*0Y%9@J`yw#oa*-EDX z^s0at7T{AljqDK-mqG7k1@LmS0{EY54+se?$T*ElNb$Ku1tc?p-Og2HJ^Em>_HYQI zd|+4(x-k-ahubSxnC+&J`HCrOfXR4AxipdWkStFzImb|Z!v6rzz#tHx{`EqHP-euF zW-0EUz1`crY!D+j7ZID)LaaLA3rGP35axVNAu@nf(1Hxql`f{Olr5opjs(yt3Pd*J z31EwVCNWG{G)#6SeIMCt=CXVD>IiI{zz7eVU;|Fm;@aJM^^rERC{+{THsFFqI$~Wn zTRnTVu_e+b;g#5`0(w<|J;d{1BMC|X45;s~i=YO9yT+)BQjr6Y}_-$6e{;!u8 zyAApW7*vHzydo$Blx054Rki^1s({*%@2h~9C1;gD6f4}V23W5F_M!pyeFMy%!w*$r z;}6pWB9h>$31-hJAa{vur)0sJ`q{LNJu6xbm;Jv46oV%_jD*{=spR zh0(T9wikr-YLL=i-DD7-nk?c|lSw2z4N7wopjQQyW~{k_Pc>igspbqmRgH=Oy(*w= zuAUDBZ`DD)I;dn7SU=vX0(w8dHkVnGddR)0YUNE;i} z(@7Hr-RA*T`N$^Ljnb3{qc-{B95zvxO}R6X0j3RzqSX>(X3@{uk)PrrRj&j8yjW!p z?7btwPzOQXK?Sie2mq>7SpzjqCP%arREX>MNk2(9hrek0_6c9x?ifYt5=*QfKI(8^ z_Jbr|&?!kCMUM_~!!1nxF z9dlN_FUm*uh=2dPPO+|dnI&UMGl`u^+|E~@FZ*NXS@&61kOR4}r%ze5-ea#>Ltku^ z%7yeWX-6N{w?3{S;N>y)rY1=MLT#-3eNQkJSdiDA=A;3BWfx-QP4SEv?7()NcI1y&vYmx zcQ&_~{GkW`Jb%85lWu|Ju;v9B`6LXLFsM7M2fB|9Fwo29L%P7_`d}%m`GD)|>#YvM zDjF6}eIO+c)A1xH!YojWP@%IWU;Fd=kQ2k?`y1p`_CKR>x9}RcPK?Em+aQrSQZoWyaep-?=LtgMZcTNZwB< zttaAIk{MbW+2|=;wiMm){_DFF<>~Ui~0RSE`|aIN|cSw8B6?r zf~<0;k!7c52+B|kFCS10ZP9TSpLEQMa6+(CaH6RDu}~t&S4d~oWE9~QI$B*bXDF5e zTk+d8*XhaSPu1Yk5A**`#&Be}PTV{hm^2G1bix>Di$Wcm04+iSg)xztnGUIRsA1P= zGYkS}WgWVLw}rJ}z{t{wl3vKTqs*MF722|_n);1(WB~ux7M)vCR`1oDLCeuw!Pm|i@QUCTy=TnYBF!LYEQfFCDwPBO4?P{xF%lvY^c;Ml zKHboy`WTJB;+n1{> z{ntB_Qw$r3g#0wBQgs_c=|FeXOY0Oo$A#wc1k7XYnYFi=jkr-4^O4LtIo6xSc$i&L z`;af;V^p4F@;Z9$KrAHQ9`@;�g-i$oYLe1#}Z$eF4zN8(S$B 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

@p(hLy6IVdwK6JvS|jVBS1 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