diff --git a/README.md b/README.md index fd57cafa..6ffbc8ad 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,27 @@ # FreeCS Free-software implementation of Counter-Strike running on the FTE QuakeWorld engine. -You still have to provide the assets yourself, but hey - CS 1.5 is a free download. -Screen 1 Screen 2 +Screen 1 Screen 2 -Screen 3 Screen 4 +Screen 3 Screen 4 -Android Port +Android Port # Goals The goal of this project is to provide an open-source version of Counter-Strike 1.5. -Counter-Strike, being one of the most popular multiplayer games to exist, surprisingly hasn't had -a free-software implementation done until now. +Counter-Strike, being one of the most popular multiplayer games to exist, hasn't had +a free-software implementation done until now. +** This project distributes no assets from either Half-Life or Counter-Strike. You have to provide them yourself. ** +** This project shares no code with the Half-Life SDK. The entities are re-creations based on descriptions on TWHL.info. ** +** Read the HL SDK EULA to find out [why.](http://twhl.info/articulator.php?art=1) ** -Six cool random things you can do with this: +Five cool random things you can do with this: 1. Play/Host CS on virtually every platform. 2. Customize the game to whatever extent you like. 3. Create entirely new weapons! 4. Create completely new and refreshing gamemodes! 5. Have a guarantee to be able to play it 20 years into the future! -6. Use it as a base for your own games/mods! # Status All the weapons are implemented, so are the gamemodes: diff --git a/Source/Client/VGUIRadio.c b/Source/Client/VGUIRadio.c index fcdc4b79..415da83b 100755 --- a/Source/Client/VGUIRadio.c +++ b/Source/Client/VGUIRadio.c @@ -69,7 +69,7 @@ void VGUI_Radio_Draw( void ) { vector vSize, vPos; if ( fVGUI_Display == VGUI_RADIO1 ) { - vSize_x = ( 33 * 8 ) + 16; + vSize_x = 312; vSize_y = ( 10 * VGUIRADIO_COMMANDS ) + 64; vPos = [ 16, vVideoResolution_y - 148 - vSize_y ]; @@ -82,7 +82,7 @@ void VGUI_Radio_Draw( void ) { VGUI_Radio_DrawCommand( i, fRadioCommands[ i ], vPos ); } } else if ( fVGUI_Display == VGUI_RADIO2 ) { - vSize_x = ( 24 * 8 ) + 16; + vSize_x = 312; vSize_y = ( 10 * VGUIRADIO_GROUPCOMMANDS ) + 64; vPos = [ 16, vVideoResolution_y - 148 - vSize_y ]; @@ -95,7 +95,7 @@ void VGUI_Radio_Draw( void ) { VGUI_Radio_DrawCommand( i, fRadioGroupCommands[ i ], vPos ); } } else { - vSize_x = ( 37 * 8 ) + 16; + vSize_x = 312; vSize_y = ( 10 * VGUIRADIO_RESPONSES ) + 64; vPos = [ 16, vVideoResolution_y - 148 - vSize_y ]; diff --git a/Source/Client/VGUIScoreboard.c b/Source/Client/VGUIScoreboard.c index 0d246071..d2b523f9 100755 --- a/Source/Client/VGUIScoreboard.c +++ b/Source/Client/VGUIScoreboard.c @@ -52,11 +52,11 @@ vector VGUI_Scores_DrawTeam( vector vPos, float fTeam ) { } if ( getplayerkeyvalue( i, "*dead" ) == "1" ) { - CSQC_DrawText( vNewPos + '38 0', sprintf( _("SCORE_DEAD"), getplayerkeyvalue( i, "name" ) ), '8 8', vColor, 1, 0, FONT_DEFAULT ); + CSQC_DrawText( vNewPos + '38 0', sprintf( _("SCORE_DEAD"), getplayerkeyvalue( i, "name" ) ), '8 8', vColor, 1.0f, 0, FONT_DEFAULT ); } else if ( getplayerkeyvalue( i, "*dead" ) == "2" ) { - CSQC_DrawText( vNewPos + '38 0', sprintf( _("SCORE_VIP"), getplayerkeyvalue( i, "name" ) ), '8 8', vColor, 1, 0, FONT_DEFAULT ); + CSQC_DrawText( vNewPos + '38 0', sprintf( _("SCORE_VIP"), getplayerkeyvalue( i, "name" ) ), '8 8', vColor, 1.0f, 0, FONT_DEFAULT ); } else { - CSQC_DrawText( vNewPos + '38 0', getplayerkeyvalue( i, "name" ), '8 8', vColor, 1, 0, FONT_DEFAULT ); + CSQC_DrawText( vNewPos + '38 0', getplayerkeyvalue( i, "name" ), '8 8', vColor, 1.0f, 0, FONT_DEFAULT ); } @@ -85,8 +85,8 @@ vector VGUI_Scores_DrawTeam( vector vPos, float fTeam ) { // If we've got no spectators, don't draw them. if ( ( fTeam != TEAM_SPECTATOR ) || ( fTeam == TEAM_SPECTATOR && iPlayerCount > 0 ) ) { // The name/title of the team - CSQC_DrawText( vPos + '24 0', sScoreTeams[ fTeam ], '16 16', vColor, 1, 0, FONT_16 ); - drawline( 1.0, vPos + '19 24', vPos + '512 24 0', vColor, 1, 0 ); + CSQC_DrawText( vPos + '24 0', sScoreTeams[ fTeam ], '16 16', vColor, 1.0f, 0, FONT_16 ); + drawfill( vPos + '19 24', '493 1', vColor, 1.0f ); // Draw the amount of rounds we've von if ( fTeam == TEAM_CT ) { @@ -98,7 +98,7 @@ vector VGUI_Scores_DrawTeam( vector vPos, float fTeam ) { // Now we know the playercount, so let's calculate the position next to the Teamname String and print it vector vCountPos = vPos + '24 6'; vCountPos_x += stringwidth( sScoreTeams[ fTeam ], FALSE, '16 16' ) + 8; - CSQC_DrawText( vCountPos, sprintf( _("SCORE_PLAYERS"), iPlayerCount ), '8 8', vColor, 1, 0, FONT_DEFAULT ); + CSQC_DrawText( vCountPos, sprintf( _("SCORE_PLAYERS"), iPlayerCount ), '8 8', vColor, 1.0f, 0, FONT_DEFAULT ); } return vNewPos + '0 24'; } @@ -123,13 +123,13 @@ void VGUI_Scores_Show( void ) { drawfill( [vMainPos_x + vSize_x - 1, vMainPos_y], [1, vSize_y], '0.35 0.35 0.35', 1.0f ); // Server title - CSQC_DrawText( vMainPos + '24 13', serverkey( "hostname" ), '16 16', VGUI_WINDOW_FGCOLOR, 1, 0, FONT_16 ); + CSQC_DrawText( vMainPos + '24 13', serverkey( "hostname" ), '16 16', VGUI_WINDOW_FGCOLOR, 1.0f, 0, FONT_16 ); // Tabs like Score, Ping etc. - CSQC_DrawText( vMainPos + '280 32', _("SCORE_SCORE"), '8 8', VGUI_WINDOW_FGCOLOR, 1, 0, FONT_DEFAULT ); - CSQC_DrawText( vMainPos + '336 32', _("SCORE_DEATHS"), '8 8', VGUI_WINDOW_FGCOLOR, 1, 0, FONT_DEFAULT ); - CSQC_DrawText( vMainPos + '400 32', _("SCORE_LATENCY"), '8 8', VGUI_WINDOW_FGCOLOR, 1, 0, FONT_DEFAULT ); - CSQC_DrawText( vMainPos + '472 32', _("SCORE_VOICE"), '8 8', VGUI_WINDOW_FGCOLOR, 1, 0, FONT_DEFAULT ); + CSQC_DrawText( vMainPos + '280 32', _("SCORE_SCORE"), '8 8', VGUI_WINDOW_FGCOLOR, 1.0f, 0, FONT_DEFAULT ); + CSQC_DrawText( vMainPos + '336 32', _("SCORE_DEATHS"), '8 8', VGUI_WINDOW_FGCOLOR, 1.0f, 0, FONT_DEFAULT ); + CSQC_DrawText( vMainPos + '400 32', _("SCORE_LATENCY"), '8 8', VGUI_WINDOW_FGCOLOR, 1.0f, 0, FONT_DEFAULT ); + CSQC_DrawText( vMainPos + '472 32', _("SCORE_VOICE"), '8 8', VGUI_WINDOW_FGCOLOR, 1.0f, 0, FONT_DEFAULT ); vector vOffset = VGUI_Scores_DrawTeam( vMainPos + '0 50', TEAM_CT ); vOffset = VGUI_Scores_DrawTeam( vOffset, TEAM_T ); diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj index 21b6a58b..2e0f8ed5 100755 --- a/Source/FreeCS-CE.prj +++ b/Source/FreeCS-CE.prj @@ -112,7 +112,12 @@ - - + + + + + + + diff --git a/Source/Server/Player.c b/Source/Server/Player.c index fc8d0639..1905e9e2 100755 --- a/Source/Server/Player.c +++ b/Source/Server/Player.c @@ -84,6 +84,18 @@ void Player_Death( int iHitBody ) { eCorpse.angles = [ 0, self.angles_y, 0 ]; eCorpse.movetype = MOVETYPE_BOUNCE; + // Drop primary weapon as well as the bomb if present + if ( self.fSlotPrimary ) { + Weapon_DropWeapon( SLOT_PRIMARY ); + } else { + if ( self.fSlotSecondary ) { + Weapon_DropWeapon( SLOT_PRIMARY ); + } + } + if ( self.fSlotGrenade ) { + Weapon_DropWeapon( SLOT_GRENADE ); + } + // Make ourselves disappear self.modelindex = 0; diff --git a/Source/Web/about.html b/Source/Web/about.html index d8fb1a8a..86fd76df 100755 --- a/Source/Web/about.html +++ b/Source/Web/about.html @@ -30,8 +30,8 @@
About FreeCS

The goal of this project is to provide a documented, open-source version of Counter-Strike 1.5. 

Counter-Strike, being one of the most popular multiplayer games to exist, surprisingly hasn't had a free-software implementation done until now.

-

Six cool random things you can do with this:

-
  1. Play/Host CS on virtually every platform.
  2. Customize the game to whatever extent you like.
  3. Create entirely new weapons!
  4. Create completely new and refreshing gamemodes!
  5. Have a guarantee to be able to play it 20 years into the future!
  6. Use it as a base for your own games/mods!
+

Five cool random things you can do with this:

+
  1. Play/Host CS on virtually every platform.
  2. Customize the game to whatever extent you like.
  3. Create entirely new weapons!
  4. Create completely new and refreshing gamemodes!
  5. Have a guarantee to be able to play it 20 years into the future!
diff --git a/Source/Web/faq.html b/Source/Web/faq.html index 74acc1c5..55140f80 100755 --- a/Source/Web/faq.html +++ b/Source/Web/faq.html @@ -31,22 +31,29 @@
The Frequently Asked Questions

Please refer to this FAQ before sending any mails or C&D letters to my door.

Q: Is this the full version of Counter-Strike?
A: These are only binaries for a rewritten, specific version of Counter-Strike, the mod. It has nothing to do with the CS games of the -past 15 years.

Q: Do I have to own Half-Life to play this?
A: -It will run without. Hell, it can even "run" without the CS content. +past 15 years.

Q: Why emulate Counter-Strike 1.5?
A: +It was the last release handled by the original CS team. It's the +version me and my friends preferred playing (we did not care about the +new weapons and that shield they added...) and it's free for Half-Life +owners.

Q: Should I have to own Half-Life to play this?
A: +In short: Yes. It will run without. Hell, it can even "run" without the CS content. But you certainly will have difficulties connecting to FreeCS servers.

Q: Why do I have to download CS 1.5 manually?
A: Legal reasons, cannot re-distribute them without potentially causing some trouble.

Q: Why is this not using the Half-Life engine?
A: -The SDK for that engine has one of the least open-source friendly -licenses ever written. Open-sourcing a Half-Life mod is actually +Many reasons. The SDK for that engine does not encourage free and +open-source software. Open-sourcing a Half-Life mod is actually against the EULA of that SDK. Making it a QuakeWorld mod means I own -all the rights to it.

Q: What does FreeCS mean?
A: Primarily +all the rights to it, too. Secondly, CS 1.5 does not run on Steam +Half-Life. Even if it did, it would only run on Windows.

Q: What does FreeCS mean?
A: Primarily it stands for Free Counter-Strike, as in Free-Software... it can also mean "free" as in free beer because you don't have to pay anything to download FreeCS itself. Some people have also speculated that it's a political message... gotta love synonyms!

Q: Can I connect to Counter-Strike 1.5 servers with this?
A: No.

Q: Can I connect to (anything other than FreeCS) with this?
A: No.

Q: Hey, can I take redistribute this on the PlayStore and make money off of this?
A: -You'd be a scumbag if you did and possibly force me to adjust my -license. If you want to contribute towards a proper Android version, -contact me.

Q: What motivated you to do all this?
A: Good +You'd be a scumbag if you did. If you want to contribute towards a proper Android version, please do.

Q: What motivated you to do all this?
A: +Good memories, love, passion for Counter-Strike. Also as a middle finger to -anyone who told me to "do it better" when criticising the new CS game.

Q: How can I contact you for further questions?
A: E-Mail! Please send it to: marco at icculus dot org
+anyone who told me to "do it better" when criticising a new CS game. +Besides, x86 will go away eventually. Making CS run on an engine that +has already been ported to multiple platforms ensures that we won't +have to emulate WON Half-Life to play anymore!

Q: How can I contact you for further questions?
A: E-Mail! Please send it to: marco at icculus dot org
diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index b1f08bda..88124eee 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/default.cfg b/freecs/default.cfg index 72a8d52c..848e206a 100755 --- a/freecs/default.cfg +++ b/freecs/default.cfg @@ -70,4 +70,6 @@ seta com_nogamedirnativecode "0" seta cl_cursor_scale "1" seta r_shadow_realtime_world_shadows "0" seta r_shadow_realtime_dlight_shadows "0" -seta r_imageexensions "tga bmp pcx" \ No newline at end of file +seta r_imageexensions "tga bmp pcx" +seta vid_conautoscale "1" +seta scr_conalpha "1" \ No newline at end of file diff --git a/freecs/menu.dat b/freecs/menu.dat index 4df67af7..39e158ea 100755 Binary files a/freecs/menu.dat and b/freecs/menu.dat differ diff --git a/freecs/progs.dat b/freecs/progs.dat index ae6caea8..24437875 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ