Greenlight Link - If you haven’t voted yet, please do so! If you have voted, please share the link with other gamers you know and encourage them to do the same! We need your help to keep our spot on Greenlight.
That’s pretty good! We haven’t moved up as much as we did in previous weeks, but things are going to get more and more congested as we move up.
However, the downside is in the last two days we’ve had a pretty scary falloff in traffic, check out this graph of the last week:
The drop over the last two days has been really hard to watch, mostly because there’s not much we can do about it. At this point the bulk of our traffic is directly from within steam, and the drop off corresponds to that traffic going down. The traffic from twitter and other sources is pretty consistent still.
So, what to do?
I’m not sure what to do beyond continuing to post new content on a regular basis and encourage people to get the word out and vote. So I’ll keep writing devblogs, sharing gifs, etc. If there’s something in particular you’d like to see, let me know!
We’re also considering doing key giveaways for games as we hit certain vote thresholds. Is that something that would encourage you to share more? I’m happy to do it if it’s an idea people are into.
Two weeks ago we launched our Greenlight campaign to get Monsters & Monocles on Steam. As of last week, we were 82% of the way to the top 100 and still rising. So, after another week how are we doing?
Not only are we in the top 100, we’re inside the top 50! Once again we’d like to give a massive thank you to everyone who’s voted. You’re directly responsible for the success we’ve had on Greenlight so far and we are incredibly grateful.
We’ve had some great press mentions this week, here are a few:
We’ve continued to try and post at least one thing about the game every day, regardless of the type of content. So far we’ve done concept art, new sprites, gun implementations, procedural generation devblogs, and more.
None of them seem to get significantly more attention than the others, although the pixel art posts tend to do quite well. We hope the variety of content appeals to different sets of people, but we don’t really have the metrics to back that up.
In the short term? We’re going to keep doing the stuff we’ve been doing. It seems to be working and we’re continuing to climb up the charts.
The next greenlight batch should be coming soon (this Friday maybe?) and if we’re accepted then we’ll need to figure out what kind of content/posting cycle we’ll use as we work on the game. I’d love for this to happen so I can start integrating steamworks! The network game creation stuff needs an overhaul and I’d really rather use steamworks than create my own separate system.
If we’re not accepted in this batch we’ll need to continue promoting to hopefully get accepted into the subsequent batch. But we’ll deal with that if/when it happens. For now here’s hoping we’re greenlit soon!
If you work with procedural generation, you will invariably run into issues where your generation goes crazy and it’s not immediately clear what’s gone wrong. One of the best ways to debug these issues is by trying to visualize your results in a different, more abstract way.
When working on our room generation system I decided to use a tool called Graphviz to debug the room connections. To give you an idea of what that looks like, graphviz takes these floors:
And displays it like:
So, what data do we see in this graphviz version of the map?
Rooms and all of their logical connections (doors)
Floor start and end points (green and red rooms)
The first floor has a locked door & key objective, the locked connection and room containing the key are highlighted in purple
A floating node used as a comment gives the seed used to generate the map. That’s the blue box.
Beyond the raw data you can use the graphviz model to discuss the properties of the generated map and ask questions like “is this what I want for the game?” For example:
The critical path for each floor seems to be about 7-10 rooms long. Is this what I want for gameplay? How long does it take to clear a room? What does that mean for how long it takes to clear a floor if you take the optimal path?
Dead ends rarely exceed two rooms in length. Is this enough to feel like you’re exploring?
The keygun for the locked door on floor 1 ended up really near to the locked door. Would it be more interesting for the key to be earlier in the level? It takes up a gun slot for the player which can be limiting, but it’s also the best crowd control gun. How would it affect play?
It’s really hard to reason about those types of questions without having this kind of data. When I’m working on map generation I’ll often generate 20-30 mapsets and graphviz equivalents and use that as the start of analysis in addition to playtesting.
Create your own Graphviz maps
So, I’ve convinced you on the value of graphviz. Great! Now let’s do a quick overview of how to make your own maps. Fortunately it’s really easy! The graphviz file format is a text based format that revolved around nodes and connections between those nodes.
Here’s a small sample graph with three nodes and a connection:
Everything gets included in a graph block. The word after graph is the identifier, I’m just using ‘map’ for mine. You can use anything you like though.
The next two lines are directives that tell graphviz how to process all nodes and edges by default. The “node” line tells graphviz to make all nodes dark gray boxes with white text for their labels. The “edge” line tells graphviz to make all edges a lighter gray.
The next three lines create three nodes, which we call room0, room1, and room2. The label in the options block is what will actually show up in the generated graph image, the identifier at the start of the line is used for telling graphviz about the connections between nodes. If it makes sense you can give your rooms a different label that’s more readable (e.g. “Start Room” instead of “room0”). Note on room1 we show how you can override default values as necessary. In this case we’re setting room1 to be green in the generated graph.
The last section defines all the connections in our graph, and they take the format <node 1> — <node 2>. In our example our graph is not directional, but graphviz does support one way paths if you need them. Again note that you can add labels or override colors as necessary.
The graphviz website will tell you different ways to generate your graph, but on os x I use the following command line:
neato -Ln100 mymap.gv -Tpng > mymap.gv
Which for our sample map, gives us the following output:
I’ve shown how we use graphviz to debug our maps, what else could you use it for? Anything where you have elements and transitions! Use it to validate the flow of text dialogue in your scripts, asset dependencies, level transitions. If you think of any other uses, let me know! For more graphviz options and a full specification of the language you can go here.
We hit the top 50! I couldn’t be happier hitting that milestone in less than two weeks since we started our greenlight campaign.
The number of votes we need to keep moving up is incredibly high, so if you haven’t voted yet please consider clicking the link and voting for us. And a huge thanks to everyone who’s voted already, you’re directly responsible for the success we’ve had so far.
Last Tuesday we launched our Greenlight campaign to get Monsters & Monocles on Steam. It’s our first PC game so we didn’t have a great idea of how the community would respond.
I’m happy to say the support has been overwhelmingly positive. Right now we’re 82% of the way to the top 100, and we continue to climb a bit closer each day.
I’ve included all of our stats page as it looks right now so you can see it, it may be interesting or useful to other teams considering doing greenlight.
Twitter: Twitter has been a great resource for us. People have been really generous in spreading the word and we’ve seen a steady stream of visitors to our page because of it.
Daily Content: To give people a visit to visit the greenlight page, our website, etc we’ve been trying to post at least one content update a day. People have really seemed to like this, and it does seem to be driving some people to the greenlight page.
The Trailer: We put a lot of work into the trailer, and the reaction to it has been really positive. It even got picked up by Gametrailers! The trailer is the first impression a lot of people have about the game, so I’m glad we took the time to make it as solid as we could.
What Could Have Been Better
Press Contacts: Being our first PC game, a lot of our attempts to contact the press have been ‘cold call’ emails, and we haven’t gotten a lot of responses. The exception was Destructoid, they were fantastic about taking a look and posting a bit about it last Friday. So, thanks Destructoid!
It’s also been hard for us to find the right press contacts. Lots of sides (CVG, etc) don’t even have a tip/contact email on their website that I could find. So we’re slowly building a list of people to try and contact but I really wish we had this sorted out when we launched the greenlight.
No Press/Demo Build: This is just a reality of where we are in the project. But I think we would have a much easier time talking to press if we had a demo build to send them, and we also could have talked to youtube folks since they’d have something to show. We’re working on getting this done ASAP since I think it will be a big help.
'Nuclear Clone': Because our first trailer focused on a lot of the action, we’ve gotten a lot of accusations of being a clone of Nuclear Throne. I’m confident that our game will stand on its own when people see more of it, but I wish in retrospect we had highlighted some more of the differences in the trailer.
I’d like to thank Rami and the rest of the Vlambeer team again for their support when we launched last week, I think it helped minimize a lot of the negative reaction. But we could have done more on our part as well, and we’ll have to as we continue to promote the game.
I’m not sure how many votes we actually need to get greenlight - for now we’re focusing on getting into the top 100. It seems like Valve greenlights 50-100 games every few weeks, so that seems like a good initial goal.
So, we still need your help! If you haven’t voted yet, please go vote for us by clicking here. If you have friends who you think might be interested, please let them know as well.
Any questions about any of this? Leave a question in the comments, use the ‘ask’ tumblr feature, or hit me up on twitter (I’m @rje). Thanks for reading!
In my last post, I described one of our methods of creating a room-based map. At the end of the generation we were left with a map that looks like this:
So now we have a series of adjacent rooms, but none of them are connected! The next step in the generation process is to add a series of doors to connect the map together.
Like with the layout, I had a few design goals that I wanted to achieve with my door placement:
The map needs to be well-connected - the player should be able to start in one room and eventually traverse to any other room.
The map shouldn’t just be a linear path where each room has two connections. That’s boring to navigate and doesn’t give you a lot of options in terms of placement of objectives. Having multiple ‘dead end’ rooms is immensely helpful.
Ideally, generate some rooms that act as ‘hubs’ that players can travel in multiple directions from. This is mostly a personal preference, but I like having a set of rooms that you branch out from and come back to as you explore a map.
To start, let’s give each room an ID to make talking about the generation a bit easier:
So the system I currently use works something like this:
Put all of the rooms into a list I call ‘remaining rooms’, these are rooms that have not yet been connected
Pick a random room from the list and add it to the ‘placed rooms’
While there are rooms left in the ‘remaining rooms’ list, find the subset of rooms that are adjacent to placed rooms. Pick one of those at random to place.
For the room we’ve chosen to place, create a door between it and one of the placed rooms. We pick the room to join with by picking the one with the most existing doors (this helps us create hubs).
Return to step 3 until all rooms are placed.
This is pretty straightforward, just stuff a reference to all the rooms into an array. No rooms are placed in this step. To help with visualization I’ll put all unplaced rooms in purple, and placed rooms will be in the original blue.
Here’s when we start placing. This step is easy though since it’s just picking a room at random. We’ll place room 2 into the map.
In this step we find all the rooms adjacent to placed rooms, and pick one of them at random to place. In this first run only the rooms adjacent to room 2 would be available, so our options are rooms 1, 3, and 7. We choose an available room at random, in this case we’ll choose room 1 for placement.
Now we need to create a door between the newly placed room (room 1) and any of the adjacent placed rooms. In this case it’s easy since there’s only one adjacent room. But in the case of there being multiple options we’d pick the adjacent room that has the most doors already.
We continue the process until all rooms are placed, you can see the full process in the gif below. Note that in cases where there are multiple adjacent rooms it picks the connecting room with the most existing doors, and is random in the case of a tie.
And that’s how we place doors in the mansion! We still have start/end point, enemy placement, prop placement, and objectives placement left to go in future posts.
Monsters & Monacles looks like a very fun arcade style game. Supported on steam greenlight! :) Any advice for a group of 10 teens forming a game studio?
Thanks for the support!
Advice for a new 10 person group - that’s a lot of people, especially when you’re first getting started. That’s not to say it can’t work or you should try to do something else, just know that having that many people involved from day 1 will add to the challenge.
I think with a new team a big challenge is learning how everyone can best work together. If you haven’t already, find some game jams that sound interesting and work on them as a group. Focus on communication! How are all 10 people going to know what the next goals of the project are, what the design decisions are, etc.
Let me know when you release something! I’d love to see what you make.
If you haven’t seen the game before, mansion levels in Monsters & Monocles look like this:
There are several of these floors connected by up/down stairs.
So to create these levels I had a few design constraints that I wanted to work within:
I wanted the floors to all have the same exterior bounds
I wanted the floors to be room based, connected by a series of doorways
I wanted control over the number of rooms generated and the minimum size of the rooms
I wanted the stairs between floors to be logically consistent in terms of position
To implement this, I used an algorithm that I call the “GossRix” algorithm, in honor of Owen and Matt who first told me about it. At a high level, the algorithm works like this:
Create a map with defined exterior bounds
Place a ‘seed’ for each room, and immediately grow it to the minimum room width/height
Pick a room at random, and try to expand it in a random direction.
Repeat step 3 until all rooms are fully expanded.
For our example we’ll use a rectangle, but you can use any arbitrary shape. In our example case the bounds are represented by the red rectangle:
In our example we’ll use 7 room seeds to fill the space, and a minimum room width & height of three tiles. So we start by placing seeds randomly:
And then expanding them to fill the minimum width/height:
The light blue color now represents the room walls, and the dark blue is walkable floor space.
Depending on the number of room seeds and the min width/height you can easily run into a case where you can’t place all your seeds. If that happens you have a few different options to handle it. You can just accept the number of seeds that do fit, you can throw out everything and start over, or you can reduce the minimum width/height and try again. In Monsters & Monocles right now we start over if we hit an error state.
In this phase we pick a room at random, and push out a random wall if we’re able. So our first step might take us from:
See how the room in the upper left corner pushed the left wall out by one? That’s what an individual move in this step looks like.
We continue to do the moves in step 3 until all rooms have been expanded as much as possible. That process ends up looking something like this:
And that gives us our basic room structure! There’s still lots of procedural work that occurs after that (door placement, prop placement, floor decoration, enemy placement, objective placement) but those all deserve posts of their own.
Hi I am using spaceunity for my backgrounds in my game. For the life of me i can not get the backgrounds to work correctly with oculus rift. Could you share with me how you was able to get it working in your project? Thanks
It’s been a while since I did the initial work, but I think I had to create a cube with inverted normals and apply the skybox textures to that instead of using the default unity skybox system.
This is a quick set of notes from my findings today that will hopefully help people who run into similar issues. If you have questions about any of this please leave a question and I’ll update the post where I can.
Obviously, windows only. mac/linux SDK release dates are unknown
Install the windows runtime from the oculus website
After installing the runtime, use the configuration tool to update the firmware! It mentioned in the release notes but it can be hard to find. The config tool has the firmware update option.
Use unity 4.5.2p2 (link) - it lets you specify a monitor to launch on, useful for reasons below. (Also improves dx11 latency)
Direct HMD Access mode isn’t working with any unity builds at the moment on my setup. (GTX770, win 8.1, x64)
To get builds to work set “Extend Desktop to HMD” mode, then have apps run on the DK2 screen.
If apps aren’t running on the DK2 (they’d probably show up in a window on your main monitor), hold down the control key when you start the game to bring up the display setting. Pick the DK2’s monitor from the display dropdown
If your camera isn’t working, is it plugged in to a powered USB port? Directly to your computer is best, but a powered hub may also work. (From @OwenGoss)
Having unity open while trying to run a build causes an immense amount of judder for me despite the frame rate reading at a constant 75fps. So close unity when you test builds!
If you’re using the above configuration and you’re noticing judder, it’s likely that you’re not running at 75fps. This can be caused by a few things so check the following:
In Screen Resolution -> Advanced Settings for the DK2 monitor, make sure that refresh rate is set to 75Hz.
In your nvidia or ati control panels, also make sure that it’s set to 75Hz for the DK2 screen and not 60Hz.
For me, this wasn’t sufficient and my games were still locked at 60Hz. To get them to run successfully I had to set the DK2 screen as my primary display in the Screen Resolution control panel. An oculus dev suggested that this might be a nvidia driver issue. If you do/don’t have this issue please leave a comment so we can start collecting info!
If you’re sitting down while you play, the positional tracking camera is probably better off below your monitor and pointing upwards than on top of your monitor and pointing downwards. Seemed more effective to me from my testing today.
AMD Specific: If you’re getting a black screen on unity demos try creating a shortcut to the game and adding “-force-d3d11” to the target line. (From: @mikekasprzak)
Win 7 Specific: If you’re having judder issues try disabling Aero. (From @OwenGoss)
If you’re making an app - please please please include a way to pop up the current FPS. As people run into configuration issues that cause them not to run at 75fps, it’s super helpful to let people check to see if they’re locked at 60fps for some reason.
Unity shadows seem to be messed up if you’re using deferred rendering. First Law is using forward rendering because of old issues with deferred, but you may notice issues with other games and shadows.
The unity game screen will only work if you’re set to “Free Aspect” - being set to anything else will make the game not render.
Enabling positional tracking has messed up the head/eye placement in First Law relative to the body fixed in the ship. I’m not actually sure the best method to deal with this, would love suggestions.
too easy this time, unforetunately. The large shapes made is very easy to see the basic pattern at first glance.
Yeah I thought this was a fairly straightforward puzzle, although some folks are still getting hung up on it. it’s an interesting data point for trying to craft puzzles that are intentionally easy or hard.
Back to triangles with this puzzle - I tried a slightly different method of constructing the puzzle, not sure if it got better results or not.
But both this puzzle and the previous one were an attempt to keep the total number of pieces to 4 or less. I’m trying to determine if the number of the pieces in a puzzle changes difficulty more than the size/complexity of the shape. (e.g. is a puzzle with 5 pieces that have 15 triangles each easier or harder than a puzzle with 15 pieces that have 5 triangles each?) I figure the best thing to do is try to make a baseline of fairly simple puzzles and then scale out from there.
Please, no spoilers in the comments.
New to dissection puzzles? Click here for a description and an example.
Divide the shape below along the indicated lines to end up with 4 identical pieces. All pieces may be rotated and flipped, as necessary. No remaining pieces may be left.
I’ve gotten interested in puzzle design lately, and it’s a far cry from the more action/arcade stuff I’m used to making. So to try and learn more about it, I’ll be making puzzles occasionally and posting them here for people to try.
So, enjoy! If you have any feedback (too easy, too hard, unclear, evil, boring, etc) I’d love to hear it. You can talk to me on twitter or just leave a comment on the puzzle. But no spoilers, please!
The solution is posted as a link below the puzzle.
New to dissection puzzles? Click here for a description and an example.
Divide the shape below along the indicated lines to end up with 5 identical pieces. All pieces may be rotated and flipped, as necessary. No remaining pieces may be left.
Today unity’s Master Server has been down for me and so I decided to finally get my own version of it up and running. But it doesn’t compile out of the box, so here were the changes I needed to make to get things up and running on linux (Ubuntu 14):
On ubuntu install all the tools you’ll need for compilation (sudo apt-get install build-essentials)
Download the master server and facilitator source from here.
Unzip Master Server into a new directory.
In the Makefile, replace all instances of “-lpthread” with “-pthread”
At the bottom of the Makefile , find the cpp.o target and add “-fpermissive” to the command (e.g.: $(CC) -c -Wall -fpermissive -I$(INCLUDE)…)
Unzip Facilitator to another directory and do steps 4-6 again.
At this point you should have both a MasterServer and Facilitator binary for your server. Setting them up to run automatically and tuning their settings is really an individual thing, but I set mine up to automatically start with the server by using an init.d script. I also set up a separate user to run them.
So now you need to tell your client to use your up and running master server. This is pretty easy, just four lines of code that you set before you make any other networking calls:
That was my initial reaction, but after sleeping on it I’m more interested in trying to understand what it actually means for the Rift and VR over the long term. I think we can look at it from a few different perspectives, so I’ll try to address them individually.
For those of you who don’t want to read my rambling: The tl;dr is that in the short term I think this is a win for both the hardware and the low level software, but I have concerns about long term direction, research, and dealing with Facebook as a 3rd party developer.
The Hardware (Short-Term)
The FB acquisition gives Oculus a ton of purchasing power and leverage when trying to get components to build the consumer kit. It’s hard to see how this is anything but a major win for consumers - the hardware will get better and do so more quickly than it ever could have with Oculus as an independent company.
People discussing this aspect seem to be overhyping what can happen for CV1 though. The Facebook acquisition doesn’t mean we’ll magically get a 4k screen in the initial consumer version. Even if that were a viable part, how many people actually have a computer that can drive 4k at 75Hz or 90Hz?
The Hardware (Long-Term)
The big risk for the gaming community here is if/when the R&D needed for Facebook’s social VR experiences diverges from what is good for games. I don’t think they’ll ever completely diverge, over the last few years we’ve seen game designers use almost every device for games in a unique way. But I do think that tracking and input for games could end up being different than tracking and input for a social experience, and it’ll be sad if Oculus focuses on the social side because of the acquisition.
I could also see a future where Facebook wants Oculus to focus on capture devices for Virtual Reality content and providing that to consumers. As a medium Facebook needs content to share, and right now there is no good way for consumers to author VR content. Again, people will find ways to make a game out of it, but that’s different than focusing on devices that are for games.
The Software (Low Level/Drivers/API)
Like the hardware, I think everyone gets better low level software thanks to the acquisition. They’ll have a bigger team to work on the drivers and libraries, and it should make for a better experience.
The Software (High Level/Platform/Marketplace)
I know Palmer has said that you’ll never be required to have a Facebook login to use the Rift, and I think in the low-level ‘make a game that runs on the rift’, he’s probably correct. I hope so. At the high level, I would be shocked if distributing content through the official Oculus channels will be done without a Facebook account. I’d also be surprised if any apps or games from Oculus didn’t leverage the Facebook platform as well. Zuckerberg said that they’re a software platform company, and I expect if you’re using their platform you’re going to have to be part of their ecosystem.
Facebook has a huge audience that they could promote the Rift to, but I’m not sure there’s messaging that could convince the vast majority that buy run of the mill desktop machines to buy a new machine and a VR headset to experience … whatever it is that Facebook wants them to experience.
The early adopters are currently riled up, and I don’t know if any significant number will actually cancel their preorder. But at the very least it’s created a short-term antagonistic relationship with people who I think Oculus still needs to promote VR. Because VR isn’t something you can sell to someone with words or a video, it has to be experienced. So that’s not great.
Facebook as the Steward of Virtual Reality
This is really where a lot of the lashback has come from. Facebook has a negative perception in the community for their behavior towards privacy, antagonistic relationships with 3rd party developers on their platform, and poor support for their libraries and SDKs.
In terms of privacy, there’s no reason to think that Facebook will be well-behaved. If there are metrics or information that are beneficial to their core business (advertising) they will track them. As VR incorporates more sensors, I assume those will also be included if they make sense. Does this mean that the tracking camera that ships with DK2 is going to start sending pictures back to Facebook? There’s no real value there for Facebook, so I’m guessing the answer is no. If the Oculus ever gets eye tracking would they track what you look at in their content? That seems way more valuable and far more likely. Our best hope here is that the tracking and metrics are part of the higher level software, and I think they’d need to be to have any contextual information. If that’s the case, then developers who target the Rift as a low level VR device should still be able to skip out on it. When Facebook has a VR experience though, assume that data is being tracked.
Anyone worrying about Facebook somehow injecting ads into 3rd party content not running on their platform is being silly, there’s no realistic way that’s going to happen. Could they require ads in stuff that ships on their platform? Sure. We’ll see if that happens in the long run, but in the short term I wouldn’t expect them to dictate that stuff except in their own first party experiences.
For being a 3rd party developer, I don’t know many folks who have had positive experiences with Facebook. But then, Oculus hasn’t exactly been stellar with 3rd party developers either. As a small team they’ve focused on working with a few key partners, and the rest of us have been left to sort things out on our own. I’d like to think that the additional resources provided by Facebook will let Oculus improve their developer outreach, but until that actually happens I’m in ‘wait and see’ mode.
So… What Does All That Mean?
As I said at the top, I think this is a win for the technology in the short term. I have no doubt CV1 will be a better device because of the acquisition, and the software will likely ship in a better state than it would have otherwise.
But for VR to succeed as a platform, the technology isn’t sufficient. It needs early adopters, advocates, and developers pushing the state of the art forward. And that’s the weak spot of this acquisition, may developers and early adopters are turned off by the thought of working with Facebook either due to ethical concerns or past experience as a third party developer.
Free Rider - A Card Game Using the Standard 52 Card Deck
Objective - Finish all the tasks, and do the least amount of work! Number of Players - 4
Before initial shuffle and deal, have each player draw a card. The highest draw will be the first player, and the game flows clockwise.
Each player is dealt 10 cards. These are your work cards, and represent work you can do to get an assignment done. Of course, you won’t want to use these if you don’t have to. The numerical value on the card represents the amount of work a card is worth. Aces are worth 1 unit, face cards are ‘excuse’ cards, and are explained below.
One of the remaining deck cards is flipped over, this card is the Team Assignment. To finish an assignment, the team must play enough work cards such that the work is equal to or greater than the numerical value of the team assignment. Face card assignments are all a value of 10.
The player who’s turn it is has several options available. You may:
1. Play a work card. This will reduce the remaining points necessary to finish an assignment. If the assignment is not completed, then the game continues to the next player. If the work card completes an assignment the player gets stuck with the assignment and takes the trick. A new assignment is then started with the next player’s turn.
2. Play an excuse card. This adds zero to the value of the assignment, and passes it on to the next player.
Play continues until all players are out of work cards, or until all assignments are completed.
If a player runs out of work and excuse cards before the game is over, the professor has caught them free riding and they have lost.
Amongst all players who are left at the end of a game, whoever has taken the least number of assignments is the winner. If there is a draw, then whoever has more cards left is the winner. If the number of cards remaining is also equal, then it is a true draw.
Alternatively, if a player takes all of the assignments then they win by ratting out their team to the professor. Their extensive body of work and all of the evidence is enough for the professor to be convinced the rest of the team was free riding.