From 11f73f06589471b1b3e6a1cd52f4bcea359bd205 Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Tue, 8 Jul 2025 15:09:12 +0200 Subject: [PATCH 1/7] New Minigame | Jackpot --- .../tf2ware_ultimate/minigames/jackpot.vmt | 24 +++ .../tf2ware_ultimate/minigames/jackpot.vtf | Bin 0 -> 131200 bytes .../tf2ware_ultimate/minigames/jackpot.nut | 190 ++++++++++++++++++ 3 files changed, 214 insertions(+) create mode 100644 materials/hud/tf2ware_ultimate/minigames/jackpot.vmt create mode 100644 materials/hud/tf2ware_ultimate/minigames/jackpot.vtf create mode 100644 scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut diff --git a/materials/hud/tf2ware_ultimate/minigames/jackpot.vmt b/materials/hud/tf2ware_ultimate/minigames/jackpot.vmt new file mode 100644 index 000000000..d47cdcad4 --- /dev/null +++ b/materials/hud/tf2ware_ultimate/minigames/jackpot.vmt @@ -0,0 +1,24 @@ +UnlitGeneric +{ + $basetexture hud/tf2ware_ultimate/minigames/jackpot + $basetexturetransform "center .5 .2 scale 1.5 14.0 rotate 0 translate 0 0" + + $translucent 1 + $frame 0 + $world_mins "[0.0 0.0 0.0]" + $world_maxs "[0.0 0.0 0.0]" + $zero 0.0 + Proxies + { + WorldDims + { + } + Clamp + { + srcVar1 $zero + min "$world_mins[0]" + max "$world_mins[0]" + resultVar $frame + } + } +} \ No newline at end of file diff --git a/materials/hud/tf2ware_ultimate/minigames/jackpot.vtf b/materials/hud/tf2ware_ultimate/minigames/jackpot.vtf new file mode 100644 index 0000000000000000000000000000000000000000..5771e9378034a9c1f448d629ba364770561b9ef6 GIT binary patch literal 131200 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 O!DxLjS|1GF`Tziqh6CgP literal 0 HcmV?d00001 diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut new file mode 100644 index 000000000..1cc40b7f4 --- /dev/null +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -0,0 +1,190 @@ +minigame <- Ware_MinigameData +({ + name = "Hit the Jackpot" + author = ["PedritoGMG"] + description = "Hit the Jackpot!" + duration = 10.0 + music = "casino" +}) + +local charactersConst = [ + "Scout", // 1 + "Sniper", // 2 + "Soldier", // 3 + "Demoman", // 4 + "Medic", // 5 + "Heavy", // 6 + "Pyro", // 7 + "Spy", // 8 + "Engineer" // 9 +] + +first <- true + +camera <- null +centerPos <- Ware_MinigameLocation.center * 1.0 +cameraOrigin <- Vector(0, 0, 500) + centerPos +cameraAngle <- QAngle(90, 90, 0) +columnSize <- 3 +// More speed = Less Sync +speedDefault <- 17.5 +local separation = 30 + +panelSize <- 125 + +local columnCharacters = (function() { + local chars = clone(charactersConst) + local result = [] + while (result.len() != columnSize) { + result.append(RemoveRandomElement(chars)) + } + return result +})() + +local model_head = "models/mariokart/head.mdl" +model_dispenser <- "models/buildables/dispenser_lvl3_light.mdl" +overlay_fail <- "hud/tf2ware_ultimate/minigames/memorize_a_pair_fail" + +local AllSlotsIcons = [] +class ColumnSlot { + player = null + speed = 0 + size = 0 + icons = null + origin = Vector() + angles = QAngle() + + constructor(player, speed, size, origin, angles) { + this.player = player + this.speed = speed + this.size = size + this.icons = [] + this.origin = origin + this.angles = angles + for (local i = 0; i < size; i++) { + local icon = SpawnIconToPlayer(player, columnCharacters[i]) + icon.SetOrigin(origin + Vector( 0, separation*i, 0)) + icon.SetAbsAngles(angles) + icon.SetAbsVelocity(Vector(0, -speed, 0)) + icon.ValidateScriptScope() + icon.GetScriptScope().ColumnSlot <- this + this.icons.append(icon) + AllSlotsIcons.append(icon) + } + } + + function SpawnIconToPlayer(player, name) + { + local ent = Ware_CreateEntity("obj_teleporter") + ent.DispatchSpawn() + ent.SetModel(model_head) + ent.SetModelScale(2.85, 0.0) + ent.SetBodygroup(0, charactersConst.find(name)) + ent.AddEFlags(Constants.FEntityEFlags.EFL_NO_THINK_FUNCTION) + ent.SetSolid(SOLID_NONE) + ent.SetMoveType(MOVETYPE_FLY, MOVECOLLIDE_FLY_BOUNCE) + SetPropBool(ent, "m_bPlacing", true) + SetPropInt(ent, "m_fObjectFlags", 2) + SetPropEntity(ent, "m_hBuilder", player) + SetPropString(ent, "m_iName", "slot_icon") + return ent + } + function GetMiddleOne() { + this.OnGetMiddleOne() + return + } + function OnGetMiddleOne() { + foreach (icon in this.icons) { + icon.SetMoveType(MOVETYPE_NONE, 0) + } + } +} + +function OnPrecache() +{ + PrecacheModel(model_head) + PrecacheModel(model_dispenser) + PrecacheOverlay(overlay_fail) +} + + +function OnStart() +{ + camera = Ware_SpawnEntity("point_viewcontrol", + { + origin = cameraOrigin + angles = cameraAngle + spawnflags = 8 + }) + camera.SetMoveType(MOVETYPE_NONE, 0) + + local dispenser = Ware_SpawnEntity("prop_dynamic_override", + { + origin = cameraOrigin + Vector(-2.5, -150, -120) + angles = QAngle(-90, -90, 0) + model = model_dispenser + modelscale = 3.75 + }) + + + foreach (player in Ware_MinigamePlayers) { + TogglePlayerViewcontrol(player, camera, true) + player.AddHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) + player.RemoveHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) + + local minidata = Ware_GetPlayerMiniData(player) + minidata.holding_attack <- 0 + minidata.clicks <- 0 + minidata.SlotMachine <- [] + for (local i = 1; i <= columnSize; i++) { + local origin = cameraOrigin + Vector(-separation*2, 0, 0) + minidata.SlotMachine.append( + ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(separation*i, -25, -90), cameraAngle) + ) + } + } +} + +function OnEnd() +{ + foreach (player in Ware_MinigamePlayers) { + TogglePlayerViewcontrol(player, camera, false) + player.RemoveHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) + AddThinkToEnt(player, null) + } +} + +function OnUpdate() +{ + foreach (icon in AllSlotsIcons) + { + //less space = less sync | idk how to fix + local limit = 22.5 + local IconSlot = icon.GetScriptScope().ColumnSlot + local origin = icon.GetOrigin() + + if (IconSlot.origin.y - limit > origin.y) + { + icon.KeyValueFromVector("origin", (IconSlot.origin + Vector(0, limit*3, 0))) + } + } + foreach (player in Ware_MinigamePlayers) { + local minidata = Ware_GetPlayerMiniData(player) + local buttons = GetPropInt(player, "m_nButtons") + if (buttons & IN_ATTACK && !minidata.holding_attack) + { + if (minidata.clicks < columnSize) + minidata.SlotMachine[minidata.clicks].GetMiddleOne() + minidata.clicks++ + printl(minidata.clicks) + } + if (buttons & IN_ATTACK) + { + minidata.holding_attack = true + } + else + { + minidata.holding_attack = false + } + } +} \ No newline at end of file From 7cad3fe6025b9ab7fdc61631bd8cf2ba75e55171 Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Tue, 8 Jul 2025 20:00:28 +0200 Subject: [PATCH 2/7] Remaining code --- .../minigames/jackpot_fail.vmt | 24 +++ .../minigames/jackpot_fail.vtf | Bin 0 -> 65664 bytes .../tf2ware_ultimate/minigames/jackpot.nut | 145 +++++++++++++----- 3 files changed, 133 insertions(+), 36 deletions(-) create mode 100644 materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vmt create mode 100644 materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vtf diff --git a/materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vmt b/materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vmt new file mode 100644 index 000000000..b5653cff9 --- /dev/null +++ b/materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vmt @@ -0,0 +1,24 @@ +UnlitGeneric +{ + $basetexture hud/tf2ware_ultimate/minigames/jackpot_fail + $basetexturetransform "center .5 .2 scale 3 14.0 rotate 0 translate 0 0" + + $translucent 1 + $frame 0 + $world_mins "[0.0 0.0 0.0]" + $world_maxs "[0.0 0.0 0.0]" + $zero 0.0 + Proxies + { + WorldDims + { + } + Clamp + { + srcVar1 $zero + min "$world_mins[0]" + max "$world_mins[0]" + resultVar $frame + } + } +} \ No newline at end of file diff --git a/materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vtf b/materials/hud/tf2ware_ultimate/minigames/jackpot_fail.vtf new file mode 100644 index 0000000000000000000000000000000000000000..3b3c50eef0525aeccbecb94c4cee09d4d7bef54a GIT binary patch literal 65664 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 literal 0 HcmV?d00001 diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 1cc40b7f4..085f3d403 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -4,6 +4,7 @@ minigame <- Ware_MinigameData author = ["PedritoGMG"] description = "Hit the Jackpot!" duration = 10.0 + max_players = 64 // 9 ents for each player | 576 music = "casino" }) @@ -26,12 +27,11 @@ centerPos <- Ware_MinigameLocation.center * 1.0 cameraOrigin <- Vector(0, 0, 500) + centerPos cameraAngle <- QAngle(90, 90, 0) columnSize <- 3 +local centerToSlotOrigin = Vector(0, 27.5, 0) // More speed = Less Sync -speedDefault <- 17.5 +speedDefault <- 32 local separation = 30 -panelSize <- 125 - local columnCharacters = (function() { local chars = clone(charactersConst) local result = [] @@ -43,7 +43,10 @@ local columnCharacters = (function() { local model_head = "models/mariokart/head.mdl" model_dispenser <- "models/buildables/dispenser_lvl3_light.mdl" -overlay_fail <- "hud/tf2ware_ultimate/minigames/memorize_a_pair_fail" +sound_dispenser <- "weapons/dispenser_idle.wav" +sound_heal <- "weapons/dispenser_heal.wav" +sound_ammo <- "weapons/dispenser_generate_metal.wav" +overlay_fail <- "hud/tf2ware_ultimate/minigames/jackpot_fail" local AllSlotsIcons = [] class ColumnSlot { @@ -61,9 +64,10 @@ class ColumnSlot { this.icons = [] this.origin = origin this.angles = angles + local cloneCC = clone(columnCharacters) for (local i = 0; i < size; i++) { - local icon = SpawnIconToPlayer(player, columnCharacters[i]) - icon.SetOrigin(origin + Vector( 0, separation*i, 0)) + local icon = SpawnIconToPlayer(RemoveRandomElement(cloneCC)) + icon.SetOrigin(origin + Vector( 0, separation * i, 0)) icon.SetAbsAngles(angles) icon.SetAbsVelocity(Vector(0, -speed, 0)) icon.ValidateScriptScope() @@ -73,7 +77,7 @@ class ColumnSlot { } } - function SpawnIconToPlayer(player, name) + function SpawnIconToPlayer(name) { local ent = Ware_CreateEntity("obj_teleporter") ent.DispatchSpawn() @@ -85,31 +89,53 @@ class ColumnSlot { ent.SetMoveType(MOVETYPE_FLY, MOVECOLLIDE_FLY_BOUNCE) SetPropBool(ent, "m_bPlacing", true) SetPropInt(ent, "m_fObjectFlags", 2) - SetPropEntity(ent, "m_hBuilder", player) + SetPropEntity(ent, "m_hBuilder", this.player) SetPropString(ent, "m_iName", "slot_icon") return ent } function GetMiddleOne() { - this.OnGetMiddleOne() - return + return FindClosestEntity(this.icons, this.origin + centerToSlotOrigin) } - function OnGetMiddleOne() { + function Stop() { foreach (icon in this.icons) { icon.SetMoveType(MOVETYPE_NONE, 0) } } + + function FindClosestEntity(entities, targetOrigin) { + if (entities.len() == 0) return null + + local closest = null + local minDist = null + + foreach (ent in entities) { + local dist = VectorDistance(ent.GetOrigin(), targetOrigin) + if (closest == null || dist < minDist) { + minDist = dist + closest = ent + } + } + + return closest + } } function OnPrecache() { PrecacheModel(model_head) PrecacheModel(model_dispenser) + PrecacheSound(sound_dispenser) + PrecacheSound(sound_heal) + PrecacheSound(sound_ammo) PrecacheOverlay(overlay_fail) } function OnStart() { + Ware_PlaySoundOnAllClients(sound_dispenser) + Ware_PlaySoundOnAllClients(sound_heal) + camera = Ware_SpawnEntity("point_viewcontrol", { origin = cameraOrigin @@ -124,67 +150,114 @@ function OnStart() angles = QAngle(-90, -90, 0) model = model_dispenser modelscale = 3.75 + skin = RandomInt(0, 1) }) - foreach (player in Ware_MinigamePlayers) { TogglePlayerViewcontrol(player, camera, true) - player.AddHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) - player.RemoveHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) local minidata = Ware_GetPlayerMiniData(player) minidata.holding_attack <- 0 minidata.clicks <- 0 minidata.SlotMachine <- [] for (local i = 1; i <= columnSize; i++) { - local origin = cameraOrigin + Vector(-separation*2, 0, 0) + local origin = cameraOrigin + Vector(-separation*2, -20, -90) // Center to Left minidata.SlotMachine.append( - ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(separation*i, -25, -90), cameraAngle) + ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(separation*i, 0, 0), cameraAngle) ) } + minidata.SlotMachine } + + // Tesing | to see the places where straight icons are checked + /* + local minidata = Ware_GetPlayerMiniData(GetListenServerHost()) + foreach (slot in minidata.SlotMachine) { + DebugDrawCircle(slot.origin + centerToSlotOrigin, Vector(0, 255, 0), 50, 10.0, true, 10.0) + } + */ + } function OnEnd() { - foreach (player in Ware_MinigamePlayers) { + Ware_PlaySoundOnAllClients(sound_dispenser, 1.0, 100, SND_STOP) + Ware_PlaySoundOnAllClients(sound_heal, 1.0, 100, SND_STOP) + foreach (player in Ware_MinigamePlayers) TogglePlayerViewcontrol(player, camera, false) - player.RemoveHudHideFlags(HIDEHUD_MISCSTATUS|HIDEHUD_HEALTH) - AddThinkToEnt(player, null) - } } function OnUpdate() { foreach (icon in AllSlotsIcons) { - //less space = less sync | idk how to fix + // Less Space = Less Sync | idk how to fix local limit = 22.5 + local IconSlot = icon.GetScriptScope().ColumnSlot local origin = icon.GetOrigin() - if (IconSlot.origin.y - limit > origin.y) - { - icon.KeyValueFromVector("origin", (IconSlot.origin + Vector(0, limit*3, 0))) + if (IconSlot.origin.y - limit > origin.y) { + icon.KeyValueFromVector("origin", (IconSlot.origin + Vector(0, limit * 3, 0))) + + //Fix for visible teleport + local currentIcon = icon // Local Copy + SetPropInt(icon, "m_nRenderMode", 10) + Ware_CreateTimer(@() SetPropInt(currentIcon, "m_nRenderMode", 0), 0.05) } } - foreach (player in Ware_MinigamePlayers) { + foreach (player in Ware_MinigamePlayers) + { local minidata = Ware_GetPlayerMiniData(player) local buttons = GetPropInt(player, "m_nButtons") + if (buttons & IN_ATTACK && !minidata.holding_attack) { - if (minidata.clicks < columnSize) - minidata.SlotMachine[minidata.clicks].GetMiddleOne() + if (minidata.clicks < columnSize) { + Ware_PlaySoundOnClient(player, sound_ammo) + minidata.SlotMachine[minidata.clicks].Stop() + } + + if (minidata.clicks == columnSize-1) { + local iconsResult = [] + + for (local i = 0; i < columnSize; i++) + iconsResult.append(minidata.SlotMachine[i].GetMiddleOne()) + + if (allSameBodygroup(iconsResult, 0)) + { + Ware_PassPlayer(player, true) + if (first) + { + Ware_ChatPrint(null, "{player} {color}was the first to hit the jackpot!", player, TF_COLOR_DEFAULT) + Ware_GiveBonusPoints(player) + first = false + } + } else { + Ware_ShowScreenOverlay(player, overlay_fail) + } + + } minidata.clicks++ - printl(minidata.clicks) - } - if (buttons & IN_ATTACK) - { - minidata.holding_attack = true - } - else - { - minidata.holding_attack = false } + + minidata.holding_attack = (buttons & IN_ATTACK) != 0 } +} + +function allSameBodygroup(entities, groupId) { + if (entities.len() == 0) return true; + + local firstBg = entities[0].GetBodygroup(groupId); + foreach (ent in entities) { + if (ent.GetBodygroup(groupId) != firstBg) { + return false; + } + } + return true; +} + +function SetRenderModeAll(ents, mode) { + foreach (ent in ents) + SetPropInt(ents, "m_nRenderMode", mode) } \ No newline at end of file From 9010f505c00034252ee2a0d38da17190d439a337 Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Tue, 8 Jul 2025 20:01:16 +0200 Subject: [PATCH 3/7] Update jackpot.nut --- scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 085f3d403..017500bd3 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -246,15 +246,15 @@ function OnUpdate() } function allSameBodygroup(entities, groupId) { - if (entities.len() == 0) return true; + if (entities.len() == 0) return true - local firstBg = entities[0].GetBodygroup(groupId); + local firstBg = entities[0].GetBodygroup(groupId) foreach (ent in entities) { if (ent.GetBodygroup(groupId) != firstBg) { - return false; + return false } } - return true; + return true } function SetRenderModeAll(ents, mode) { From 33b381c56d5f99c736a1471e6095aff584ca8223 Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Wed, 9 Jul 2025 08:17:16 +0200 Subject: [PATCH 4/7] Last Cleanup --- .../tf2ware_ultimate/minigames/jackpot.nut | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 017500bd3..71a1f9be4 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -27,10 +27,14 @@ centerPos <- Ware_MinigameLocation.center * 1.0 cameraOrigin <- Vector(0, 0, 500) + centerPos cameraAngle <- QAngle(90, 90, 0) columnSize <- 3 +slotSize <- 3 local centerToSlotOrigin = Vector(0, 27.5, 0) +local centerToLeft = Vector(0, -20, -90) // More speed = Less Sync speedDefault <- 32 local separation = 30 +// Less Space = Less Sync +limit <- 22.5 local columnCharacters = (function() { local chars = clone(charactersConst) @@ -64,14 +68,11 @@ class ColumnSlot { this.icons = [] this.origin = origin this.angles = angles + local cloneCC = clone(columnCharacters) for (local i = 0; i < size; i++) { local icon = SpawnIconToPlayer(RemoveRandomElement(cloneCC)) icon.SetOrigin(origin + Vector( 0, separation * i, 0)) - icon.SetAbsAngles(angles) - icon.SetAbsVelocity(Vector(0, -speed, 0)) - icon.ValidateScriptScope() - icon.GetScriptScope().ColumnSlot <- this this.icons.append(icon) AllSlotsIcons.append(icon) } @@ -82,7 +83,6 @@ class ColumnSlot { local ent = Ware_CreateEntity("obj_teleporter") ent.DispatchSpawn() ent.SetModel(model_head) - ent.SetModelScale(2.85, 0.0) ent.SetBodygroup(0, charactersConst.find(name)) ent.AddEFlags(Constants.FEntityEFlags.EFL_NO_THINK_FUNCTION) ent.SetSolid(SOLID_NONE) @@ -91,15 +91,23 @@ class ColumnSlot { SetPropInt(ent, "m_fObjectFlags", 2) SetPropEntity(ent, "m_hBuilder", this.player) SetPropString(ent, "m_iName", "slot_icon") + + ent.SetModelScale(2.85, 0.0) + ent.SetAbsAngles(angles) + ent.SetAbsVelocity(Vector(0, -speed, 0)) + ent.ValidateScriptScope() + ent.GetScriptScope().ColumnSlot <- this + return ent } + function GetMiddleOne() { return FindClosestEntity(this.icons, this.origin + centerToSlotOrigin) } + function Stop() { - foreach (icon in this.icons) { + foreach (icon in this.icons) icon.SetMoveType(MOVETYPE_NONE, 0) - } } function FindClosestEntity(entities, targetOrigin) { @@ -160,13 +168,13 @@ function OnStart() minidata.holding_attack <- 0 minidata.clicks <- 0 minidata.SlotMachine <- [] - for (local i = 1; i <= columnSize; i++) { - local origin = cameraOrigin + Vector(-separation*2, -20, -90) // Center to Left + for (local i = 1; i <= slotSize; i++) { + local origin = cameraOrigin + centerToLeft + origin.x += -separation*2 minidata.SlotMachine.append( ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(separation*i, 0, 0), cameraAngle) ) } - minidata.SlotMachine } // Tesing | to see the places where straight icons are checked @@ -175,11 +183,11 @@ function OnStart() foreach (slot in minidata.SlotMachine) { DebugDrawCircle(slot.origin + centerToSlotOrigin, Vector(0, 255, 0), 50, 10.0, true, 10.0) } + DebugDrawLine(minidata.SlotMachine[0].origin + centerToSlotOrigin, minidata.SlotMachine[slotSize-1].origin + centerToSlotOrigin, 0, 255, 0, true, 10) */ - } -function OnEnd() +function OnCleanup() { Ware_PlaySoundOnAllClients(sound_dispenser, 1.0, 100, SND_STOP) Ware_PlaySoundOnAllClients(sound_heal, 1.0, 100, SND_STOP) @@ -191,9 +199,6 @@ function OnUpdate() { foreach (icon in AllSlotsIcons) { - // Less Space = Less Sync | idk how to fix - local limit = 22.5 - local IconSlot = icon.GetScriptScope().ColumnSlot local origin = icon.GetOrigin() @@ -206,6 +211,7 @@ function OnUpdate() Ware_CreateTimer(@() SetPropInt(currentIcon, "m_nRenderMode", 0), 0.05) } } + foreach (player in Ware_MinigamePlayers) { local minidata = Ware_GetPlayerMiniData(player) @@ -213,15 +219,15 @@ function OnUpdate() if (buttons & IN_ATTACK && !minidata.holding_attack) { - if (minidata.clicks < columnSize) { + if (minidata.clicks < slotSize) { Ware_PlaySoundOnClient(player, sound_ammo) minidata.SlotMachine[minidata.clicks].Stop() } - if (minidata.clicks == columnSize-1) { + if (minidata.clicks == slotSize-1) { local iconsResult = [] - for (local i = 0; i < columnSize; i++) + for (local i = 0; i < slotSize; i++) iconsResult.append(minidata.SlotMachine[i].GetMiddleOne()) if (allSameBodygroup(iconsResult, 0)) @@ -249,15 +255,8 @@ function allSameBodygroup(entities, groupId) { if (entities.len() == 0) return true local firstBg = entities[0].GetBodygroup(groupId) - foreach (ent in entities) { - if (ent.GetBodygroup(groupId) != firstBg) { + foreach (ent in entities) + if (ent.GetBodygroup(groupId) != firstBg) return false - } - } return true -} - -function SetRenderModeAll(ents, mode) { - foreach (ent in ents) - SetPropInt(ents, "m_nRenderMode", mode) } \ No newline at end of file From 6b3243107adc82c2e356f0ce4f576632d3e0cd5b Mon Sep 17 00:00:00 2001 From: Pedro Manuel <146210335+PedritoGMG@users.noreply.github.com> Date: Sun, 21 Sep 2025 02:08:41 +0200 Subject: [PATCH 5/7] Added Camera Fov --- scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 71a1f9be4..70e233f76 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -148,6 +148,7 @@ function OnStart() { origin = cameraOrigin angles = cameraAngle + fov = 90 spawnflags = 8 }) camera.SetMoveType(MOVETYPE_NONE, 0) @@ -259,4 +260,4 @@ function allSameBodygroup(entities, groupId) { if (ent.GetBodygroup(groupId) != firstBg) return false return true -} \ No newline at end of file +} From ede74893e9fe7e717d83f0bbf68f6e3e4c3230ea Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Tue, 21 Oct 2025 13:43:14 +0200 Subject: [PATCH 6/7] Better View Now instead of being seen from a point_viewcontrol, it is now seen from the viewmodel with a point_camera and vgui_screen for more immersion --- materials/dev/camera_transparency.vmt | 5 ++ materials/dev/camera_transparency.vtf | Bin 0 -> 592 bytes .../tf2ware_ultimate/minigames/jackpot.nut | 78 ++++++++++++++++-- 3 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 materials/dev/camera_transparency.vmt create mode 100644 materials/dev/camera_transparency.vtf diff --git a/materials/dev/camera_transparency.vmt b/materials/dev/camera_transparency.vmt new file mode 100644 index 000000000..881cb0a4f --- /dev/null +++ b/materials/dev/camera_transparency.vmt @@ -0,0 +1,5 @@ +UnlitGeneric +{ + $basetexture dev/camera_transparency + $nofog 1 +} \ No newline at end of file diff --git a/materials/dev/camera_transparency.vtf b/materials/dev/camera_transparency.vtf new file mode 100644 index 0000000000000000000000000000000000000000..c9854e25ce18af38ed1d8e42849fb0b8b64f6852 GIT binary patch literal 592 zcmWFwabsX-U|?VY;shWT073_41_nkT8#`#Q=Lbr#@&X9~0kASAB!wV>1Ryp5;s-zs Y0;_;vplC)0&q*pk1hapXPuuVS0RDxU)c^nh literal 0 HcmV?d00001 diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 70e233f76..5524449dd 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -4,7 +4,7 @@ minigame <- Ware_MinigameData author = ["PedritoGMG"] description = "Hit the Jackpot!" duration = 10.0 - max_players = 64 // 9 ents for each player | 576 + max_players = 64 // 10 ents for each player | 640 music = "casino" }) @@ -23,11 +23,11 @@ local charactersConst = [ first <- true camera <- null -centerPos <- Ware_MinigameLocation.center * 1.0 -cameraOrigin <- Vector(0, 0, 500) + centerPos +cameraOrigin <- Vector(-5076, 3161, 385) cameraAngle <- QAngle(90, 90, 0) columnSize <- 3 slotSize <- 3 +backgroundSize <- 640.0 local centerToSlotOrigin = Vector(0, 27.5, 0) local centerToLeft = Vector(0, -20, -90) // More speed = Less Sync @@ -51,6 +51,8 @@ sound_dispenser <- "weapons/dispenser_idle.wav" sound_heal <- "weapons/dispenser_heal.wav" sound_ammo <- "weapons/dispenser_generate_metal.wav" overlay_fail <- "hud/tf2ware_ultimate/minigames/jackpot_fail" +material_transparency <- "dev/camera_transparency" +material_tv <- "models/mariokart/hud/map" local AllSlotsIcons = [] class ColumnSlot { @@ -136,6 +138,8 @@ function OnPrecache() PrecacheSound(sound_heal) PrecacheSound(sound_ammo) PrecacheOverlay(overlay_fail) + PrecacheMaterial(material_transparency) + PrecacheMaterial(material_tv) } @@ -144,14 +148,23 @@ function OnStart() Ware_PlaySoundOnAllClients(sound_dispenser) Ware_PlaySoundOnAllClients(sound_heal) - camera = Ware_SpawnEntity("point_viewcontrol", + camera = Ware_SpawnEntity("point_camera", { origin = cameraOrigin angles = cameraAngle fov = 90 - spawnflags = 8 }) - camera.SetMoveType(MOVETYPE_NONE, 0) + camera.AcceptInput("SetOn", "", null, null) + // workaround for networking bug + SetPropInt(camera, "m_nTransmitStateOwnedCounter", 1) + // needed for camera to get networked for everyone + local network_dummy = Ware_SpawnEntity("handle_dummy", + { + origin = cameraOrigin + }) + local camera_link = Ware_CreateEntity("info_camera_link") + SetPropEntity(camera_link, "m_hCamera", camera) + SetPropEntity(camera_link, "m_hTargetEntity", network_dummy) local dispenser = Ware_SpawnEntity("prop_dynamic_override", { @@ -162,8 +175,20 @@ function OnStart() skin = RandomInt(0, 1) }) + local background = Ware_SpawnEntity("vgui_screen", + { + origin = cameraOrigin + Vector(backgroundSize/2, backgroundSize/2, -200) + angles = QAngle(270, 270, 180) + panelname = "pda_panel_spy_invis" + overlaymaterial = material_transparency + width = backgroundSize + height = backgroundSize + }) + foreach (player in Ware_MinigamePlayers) { - TogglePlayerViewcontrol(player, camera, true) + + player.AddCustomAttribute("no_attack", 1, -1) + SetJackpotViewModel(player) local minidata = Ware_GetPlayerMiniData(player) minidata.holding_attack <- 0 @@ -192,8 +217,10 @@ function OnCleanup() { Ware_PlaySoundOnAllClients(sound_dispenser, 1.0, 100, SND_STOP) Ware_PlaySoundOnAllClients(sound_heal, 1.0, 100, SND_STOP) - foreach (player in Ware_MinigamePlayers) - TogglePlayerViewcontrol(player, camera, false) + foreach (player in Ware_MinigamePlayers) { + player.RemoveCustomAttribute("no_attack") + SetPropBool(player, "m_Local.m_bDrawViewmodel", true) + } } function OnUpdate() @@ -252,6 +279,39 @@ function OnUpdate() } } +function SetJackpotViewModel(player) { + local viewmodel = GetPropEntity(player, "m_hViewModel") + if (viewmodel) + { + SetPropBool(player, "m_Local.m_bDrawViewmodel", false) + + local pos = viewmodel.GetOrigin() + local ang = viewmodel.GetAbsAngles() + local screenSize = 24 + + local offset = ang.Forward() * 8.0 + - ang.Up() * (screenSize / 2.0) + - ang.Left() * (screenSize / 2.0) + local angFacing = QAngle(-ang.Pitch(), ang.Yaw() + 180.0, ang.Roll()) + + local screen = Ware_SpawnEntity("vgui_screen", + { + origin = pos + offset, + angles = angFacing, + panelname = "pda_panel_spy_invis", + overlaymaterial = material_tv, + width = screenSize, + height = screenSize + }) + + SetEntityParent(screen, viewmodel) + } + else + { + Ware_PassPlayer(player, true) + } +} + function allSameBodygroup(entities, groupId) { if (entities.len() == 0) return true From 7f17f150837b6fd834e56fb864fefd1051ab2eeb Mon Sep 17 00:00:00 2001 From: PedritoGMG <146210335+PedritoGMG@users.noreply.github.com> Date: Mon, 27 Oct 2025 08:28:44 +0100 Subject: [PATCH 7/7] Touching Icons Calculations | Teleports Things MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Renamed some variables for better clarity. Changed the way it checks for going out of bounds and when teleporting. Icons that don’t move now skip the check. Increased the timer duration to prevent visible teleportation. Moved the SlotMachine to better align with the icons so teleports aren’t visible. Many thanks to Rain for testing! Hopefully, it works properly now. --- .../tf2ware_ultimate/minigames/jackpot.nut | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut index 5524449dd..eee818c15 100644 --- a/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut +++ b/scripts/vscripts/tf2ware_ultimate/minigames/jackpot.nut @@ -28,13 +28,13 @@ cameraAngle <- QAngle(90, 90, 0) columnSize <- 3 slotSize <- 3 backgroundSize <- 640.0 -local centerToSlotOrigin = Vector(0, 27.5, 0) +local centerToSlotOrigin = Vector(0, 7.5, 0) local centerToLeft = Vector(0, -20, -90) // More speed = Less Sync speedDefault <- 32 -local separation = 30 +local offsetX = 30 // Less Space = Less Sync -limit <- 22.5 +local offsetY = 30 local columnCharacters = (function() { local chars = clone(charactersConst) @@ -74,7 +74,7 @@ class ColumnSlot { local cloneCC = clone(columnCharacters) for (local i = 0; i < size; i++) { local icon = SpawnIconToPlayer(RemoveRandomElement(cloneCC)) - icon.SetOrigin(origin + Vector( 0, separation * i, 0)) + icon.SetOrigin(origin + Vector( 0, offsetY * i, 0)) this.icons.append(icon) AllSlotsIcons.append(icon) } @@ -196,9 +196,9 @@ function OnStart() minidata.SlotMachine <- [] for (local i = 1; i <= slotSize; i++) { local origin = cameraOrigin + centerToLeft - origin.x += -separation*2 + origin.x += -offsetX*2 minidata.SlotMachine.append( - ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(separation*i, 0, 0), cameraAngle) + ColumnSlot(player, speedDefault*i , columnSize, origin + Vector(offsetX*i, 20, 0), cameraAngle) ) } } @@ -227,16 +227,24 @@ function OnUpdate() { foreach (icon in AllSlotsIcons) { + if (icon.GetMoveType() == MOVETYPE_NONE) + continue + local IconSlot = icon.GetScriptScope().ColumnSlot local origin = icon.GetOrigin() - if (IconSlot.origin.y - limit > origin.y) { - icon.KeyValueFromVector("origin", (IconSlot.origin + Vector(0, limit * 3, 0))) + if (IconSlot.origin.y - offsetY > origin.y) { + icon.KeyValueFromVector("origin", (IconSlot.origin + Vector(0, offsetY * (columnSize - 1), 0))) //Fix for visible teleport local currentIcon = icon // Local Copy SetPropInt(icon, "m_nRenderMode", 10) - Ware_CreateTimer(@() SetPropInt(currentIcon, "m_nRenderMode", 0), 0.05) + Ware_CreateTimer(function() + { + //Make it not visible from above when stopped + if (currentIcon.GetMoveType() != MOVETYPE_NONE) + SetPropInt(currentIcon, "m_nRenderMode", 0) + }, 0.175) // 0.175 Perfect balance for CL_INTERP 0 or 0.1 (Default) } }