Garry Ware (Fretta) - Contribute and craft your own minigames!

Hi !

http://www.hurricaaanes.info/ai/garryware_two_banner_2.png

Have you guys ever played Wario Ware ? That stupid great game where you have to perform actions in a short timespan ?

Well, as I am a fan of this series of games, I’ve thought I could try to make a gamemode where every Lua coder could contribute by adding their own minigame !

It’s still an early prototype, but I’m in need of feedback.


We are not recruiting, but you can submit your scripts if you made one !


Essential Links

Download
The game is available but still in a prototype status.


Garry's Mod Beta contains a "stable revision" of our SVN.

If you want to take part in the


experimental revision

with maybe new minigames but also code tweak and on-work gameplay changes,


use this

:
[ul]
[li] Create a folder called “garryware” in “SourceMods/garrysmod/gamemodes/”.
[/li][li] Use this SVN on the folder : http://subversion.assembla.com/svn/garryware
[/li][/ul]

If you people desire, you can join Garry Ware Steam Community Group.

Changelog
SVN Changelog


In descendant chronological order :

Most recent YouTube videos :

GarryWare Two
[hd]http://www.youtube.com/watch?v=kiyOfJEIqJM[/hd]

Old (Garry Ware One, but on a public server)
Revision 161 with 24 players (public).
[hd]http://www.youtube.com/watch?v=LvUjn_5rewk[/hd]

Older YouTube videos :

Gameplay with 24-32 players
[hd]http://www.youtube.com/watch?v=M4qLkeeCfMA[/hd]

What new minigames (2):
[hd]http://www.youtube.com/watch?v=huEvSScTZEk[/hd]

What new minigames :
[hd]http://www.youtube.com/watch?v=gIrhjFkkUoQ[/hd]

Real gameplay footage, at an early stage :
[hd]http://www.youtube.com/watch?v=xekDCyFIPjE[/hd]

[media]http://www.youtube.com/watch?v=NR9q0lO9JT8


What is that game?
It’s a game where you play very rapidly a series of microgames. Every microgame lasts from 4 to 12 seconds, and requires the player to be very active.

Can you name example of microgames?
[ul]
[li] Don’t move ! : You have 3.5 seconds to hide, and then don’t move or don’t get hit by other player’s thrown crowbars for 2 seconds !
[/li][li] Break 1 chair ! : Chair spawns in the map, but there is not enough for all the players. Break at least one !
[/li][li] Watch the props … Stand on the missing prop ! : Dryers randomly spawns on boxes. Watch them all, and the one will be disappearing, so rush on the box to earn a point ! You could also block the others players from jumping on the box.
[/li][/ul]

How many microgames are there?
There are currently 34 microgames. It is possible to make minigames for it just by placing your script in a folder that will be automatically loaded.

Currently available minigames:
[lua]

Added wares (33) : “alarmcrates” “avoidball” “barrelroll” “battery” “bigcrate” “breakallcrates” “buildtothetop” “bullseye” “calc” “calcthink” “catchball” “chair” “climb” “dontmove” “findthemissing” “flee” “forest” “getoncolor” “hlss” “jumpbox” “meloncrates” “melonharvest” “memorycrates” “paparazzi” “pickupthatcan” “rightorder” “rocketjump” “rollingcolor” “shootcolor” “sprint” “touchsky” “tryclimb” “_empty”
Author [wares] : [1 wares] Kilburn [8 wares] Kelth [5 wares] Frostyfrog [1 wares] Hurricaaane (Ha3) [17 wares] xandar [1 wares]

[/lua]

Where to download it ?
The game is available but still in a prototype status.
[ul]
[li] Create a folder called “garryware” in “SourceMods/garrysmod/gamemodes/”.
[/li][li] Use this SVN on the folder : http://subversion.assembla.com/svn/garryware
[/li][/ul]

Outdated screenies :
http://www.hurricaaanes.info/ai/garryware_test1.jpg
http://www.hurricaaanes.info/ai/garryware_test2.jpg

Technical details about making minigames
What do I need ?
First, you need an idea. You need to stay within this nomenclature :

  • All players are equal. You give them the same weapons and the same abilities.
    That means, no “haunted” minigame where a player needs to flee from the other players.
  • Players can’t get damage or be killed.
  • Presence of an item disappears when the minigame ends.
  • Player must win or fail at a minigame. No draw game is possible.

The minigames
Basically, a minigame is composed of 2 phases :

  • The Warmup period, where players winning or losing isn’t defined. For example, in the “Don’t move”, it’s the time where the players can still move without being penalized.
  • The Action period, where a trigger gets activated. In the case of “Stand on the missing prop !”, it’s the time when a hidden landmark is used to find all the entities in a box. If a player gets in the bix, he wins.
  • The time required for the warmup and the action phases are defined during the warmup using a function.
  • You can hook functions by naming the function using the hook name as the WARE method name.

The map
The map contains hidden landmarks used for the coder in order to spawns entities in or use them for detection. There are:

  • On the boxes.
  • Over the boxes.
  • Over the boxes in the sky level.
  • In the cross of the corridors.
    You can get the list of all the entities in a table using a function.

The victory states
When a minigame starts, an “Achieved” status is set : It determines if the player starts with a winning scenario or a losing scenario. It can take 3 values :
false : The player starts as a loser and much complete something to win.
true : The player starts as a winner, but needs to avoid doing something.
nil : The player starts as a loser, but won’t know if he won until the end of the minigame. (Currently, only one minigame uses this.)

During the minigame, a player Achieved status can dynamically change. When he completed a certain thing (bad or good), we can change his Achieved status and Lock his state. Locking validates the point for a player, and prevents that player from changing their Achieved state and/or lock multiple times. You can’t unlock a player’s status, there is no point.
Something else can also be done : We can Lock the status a player currently have.

When a minigame ends, a function in the minigame is called to do some stuff.
AFTER this function has been called, every player that doesn’t have their status Locked, gets it Locked.
That means it is possible to change someone’s Achieved state at the very end of the minigame, which is useful for games like “Break all crates !” or “Stand on a missing prop !”.

Where do I put my minigames ?
In
garrysmod\gamemodes\garryware2\gamemode\wareminigames
all files will be loaded automatically. Create a new file in there with your nickname.

I need to play all your minigames to finally test my own ! Can I test my minigame rightaway ?
Yes :
“ware_debug 1” : Enables debug mode, no waiting time before game starts, only one minigame game plays repeteadly.
“ware_debugname dontmove” : Replace dontmove with the name of your minigame to debug.
Other options :
“ware_debug 2” : Enables complete game mode with no waiting time (Solo mode)
“ware_debug 3” : Enables complete game mode with no introduction minigame (Beware : the introduction minigame is not a useless phase : It helps players to perform a double-model caching so that game doesn’t stutter.

Beware ! These settings sticks on server shutdown. Be sure to put debug to “0” when you don’t need it anymore !

Do you want to contribute?
Read the minigame examples and don’t hesitate to post your minigames.

Here’s an example of the “Calc” minigame :
[lua]WARE.Author = “Hurricaaane (Ha3)”
WARE.Room = “none”

WARE.CorrectColor = Color(0,0,0,255)
WARE.ChatCorrect = Color(0,192,0,0)
WARE.ChatWrong = Color(192,0,0,0)
WARE.ChatBleh = Color(192,192,0,0)
WARE.ChatRegular = Color(255,255,255,0)

function WARE:Initialize()
GAMEMODE:SetWareWindupAndLength( 2 , 8 )

GAMEMODE:SetPlayersInitialStatus( false )
GAMEMODE:DrawInstructions( "Prepare to type in the chat ..." )

end

function WARE:StartAction()

local a = math.random(10,99)
local b = math.random(10,99)
self.WareSolution = a + b

GAMEMODE:DrawInstructions("Calculate : "..a.." + "..b.." = ?")
GAMEMODE:PrintInfoMessage( "Calculate", " : ", a.." + "..b.." = ?" )

end

function WARE:EndAction()
GAMEMODE:DrawInstructions( “Answer was “…self.WareSolution…” !” , self.CorrectColor)

GAMEMODE:PrintInfoMessage( "Answer", " was ", self.WareSolution.." !" )

end

function WARE:PlayerSay(ply, text, say)
if not ply:IsWarePlayer() then
if (text == tostring(self.WareSolution)) or string.find(text, tostring(self.WareSolution)) then
return false
end
return
end

if text == tostring(self.WareSolution) then
	local initialLocked = ply:GetLocked()

	ply:ApplyWin( )
	if ( ply:GetLocked() and not(ply:GetAchieved()) ) then
		chat.AddText( self.ChatBleh, ply:GetName(), self.ChatRegular, " thought ", self.ChatWrong, "he could have multiple tries." )
	elseif initialLocked and ply:GetAchieved() then
		chat.AddText( self.ChatBleh, ply:GetName(), self.ChatRegular, " has found ", self.ChatBleh, "the correct answer ... but no need to say it twice." )
		
	else
		chat.AddText( self.ChatBleh, ply:GetName(), self.ChatRegular, " has found ", self.ChatCorrect, "the correct answer !" )
	end
	return false
	
else
	ply:ApplyLose( )
	
	if string.find(text, tostring(self.WareSolution)) then
		local txtReplace = string.Replace(text, tostring(self.WareSolution), "<answer>")
		chat.AddText( self.ChatBleh, ply:GetName(), self.ChatRegular, " said \"" .. txtReplace .. "\" ... ", self.ChatWrong, "not quite right !" )

		return false
	end
end

end
[/lua]

“Don’t move” minigame :
[lua]WARE.Author = “Hurricaaane (Ha3)”

function WARE:Initialize()
GAMEMODE:SetWareWindupAndLength(3.5,2)

GAMEMODE:SetPlayersInitialStatus( true )
GAMEMODE:DrawInstructions( "Don't move !" )
return

end

function WARE:StartAction()
for k,v in pairs(team.GetPlayers(TEAM_HUMANS)) do
v:Give( “ware_weap_crowbar” )
end
return
end

function WARE:EndAction()

end

function WARE:Think( )
for k,v in pairs(team.GetPlayers(TEAM_HUMANS)) do
if (v:GetVelocity():Length() > 16) then v:ApplyLose( ) end
end
end[/lua]

We are awaiting feedback. Feel free to tell us what you think. Also, you may want to come and play that game with a lot of people, so get on the Facepunch Test Server (get informed here : http://www.facepunch.com/showthread.php?t=702614 ) which contains a stable revision of Garry Ware. If you would like to play the experimental version, I’d suggest you Vent Mod Server : 78.129.250.5:27016

Also, please note that this gamemode uses modified entities of other gamemodes to test ideas fast, but it’ll come a time when those weapons will be real custom ones.

Thanks for reading !

It’s looks really good ! nice idea for a gamemode .

Looking from the video, it looks like much fun :smiley:

We need more game modes for this incredible masterpiece.

While I can’t code anything, here’s a few suggestions:

Avoid falling boxes/smashing fists
Some sort of race, where you can delay the other people by hitting them with crates, furthest person along wings
Moving floor/ “The-floor-is-lava” type thing.

I admit there is still a problem with having a static map. If we find good designs of other rooms that can be used by more than one minigame, we could make very fast (8 second) races and other cool stuff.

There’s plenty of space in both the X Y and Z spaces of a map. :wink:

I’d suggest making all the rooms look the same, and then have a entity in the center of the room. After the mini-gamemode switches, teleport them to the appropriate room, and that way that room can be moving and look different. If done right, no one would notice the teleporting around, and it would look like one big multi-dimension moving room.

Now that looks pretty awesome, can’t wait to code a few contribution for you guys.
By the way, can’t you just automatically register Think and other various hooks inside the registerMinigame function? Having to do the whole “if GAMEMODE:GetWareID() == “dontmove” then” doesn’t look really practical.

I may try to make a registerTrigger or similar. Thanks for asking, it’s in the works.

EDIT: Well, it might not be possible…

Meet the Sniper has the greatest sounds.

What about ‘Catch the X’
Give the players a gravity gun and make em catch an extremely quickly bouncing thing

How about one with platforms that appear that you have to jump on, and they disappear, so you have to move fast, and they keep going faster and faster.

How about everyone is on fire and a whole bunch of medkits are spawned. Everyone alive after about 30 seconds wins.

Thanks for the suggestion !
Kelth made this minigame into the list of available minigames.

Not yet possible with the available map concept.

Nomenclature says :

  • Players can’t get damage or be killed.

Still, this concept can be adapted.

The only thing I don’t like is the math part… No one wants to play Gmod to do math… No one even likes math…

edit: also, is there a server for this up?

The most funny thing is when we talk on voice chat about how ridiculous a player got wrong at math.

I know no one likes to do math, but well, the funny part is when someone miscounts :smiley:

Currently there is no server running the mod, but you will occasionally find ourselves testing the mod live under the name of “Garry Ware - Test server” with a variable IP.

How about a gamemode where you need to whack someone with your crowbar in two seconds, but they can’t have been whacked already?

I love math. Add in integrals.

A quick randomized Simon says concept, example would be to pick up a crate <random number between 2 and 4> times

How about a bunch of bouncy balls and if it touches you, you die :open_mouth: Last person alive wins

And a hot potatoe gamemode. Don’t know how you could implement that

-snip- Double post v:v:v