I'm presuming that Team and Player are only ever in unidirectional relationships: Teams don't know what Games they're involved in, you need Rosters to figure that out. You can arrange bidirectional relationships, but the mapping is more complex. If you want to do that, check out ternary associations, ref docs section 6.3.4.
Start with this, see what breaks...
Code:
<class name="Roster" ...>
...
<many-to-one name="Team" class="Team" column="TeamID"/>
<many-to-one name="Game" class="Game" column="GameID"/>
<set name="Players" ...>
...
<many-to-many class="Player" column="PlayerID" .../>
</set>
...
</class>
<class name="Game" ...>
...
<properties name="HomeTeamRosterID" insert="false" update="false" unique="true">
<property column="HomeTeamID" name="HomeTeamID"/>
<property column="GameID" name="GameID"/>
</properties>
<set name="HomeTeamRoster" ...>
<key property-ref="HomeTeamRosterID">
<column name="HomeTeamID"/>
<column name="GameID"/>
</key>
<one-to-many class="Roster"/>
</set>
<properties name="AwayTeamRosterID" insert="false" update="false" unique="true">
<property column="AwayTeamID" name="AwayTeamID"/>
<property column="GameID" name="GameID"/>
</properties>
<set name="AwayTeamRoster" ...>
<key property-ref="AwayTeamRosterID">
<column name="AwayTeamID"/>
<column name="GameID"/>
</key>
<one-to-many class="Roster"/>
</set>
...
</class>