PageSourceSearch

https://tfcmaps.net/

html tfcmaps.net collected 2026-10-06 13:16:53 UTC 14,628 bytes, 329 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4	<title>TFC Maps Archive</title>
5
6	<!-- Bootstrap 4 CSS  -->
7	<!-- <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.css"> -->
8	<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css">
9	<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css'>
10        <!-- <link rel='stylesheet' href='https://cdn.datatables.net/1.10.22/css/dataTables.bootstrap4.min.css'> -->
11
12	<!-- My CSS -->
13	<link rel='stylesheet' href='./css/main.css'>
14        <link rel='icon' href='./favicon.ico?' type='image/x-icon'>
15  
16</head>
17<body>
18	<div class='content'>
19	<a href='./' style='text-decoration: none'>
20		<div class='head'>
21			<h1><img src='../images/tfc_logo_tp.png' class='tfc_logo'>TFC Maps Archive</h1>
22        	</div>
23	</a>
24
25	<div class='intro'>
26		<p>
27			This is an archive of maps for <i>Team Fortress Classic</i>, a 1999 class-based shooter and modification of the original <i>Half-Life</i>. 
28			The archive consists of <b>5,000+</b> custom, fan-made maps that I've accumulated over the years. TFC had an incredibly creative community of map makers. 
29			I wanted to preserve their work, even if TFC is no longer actively played.
30		</p>
31		<p>You can use the table below to search for information about the maps. You can use the following links to download the maps as one complete file or as a collection of individual files. Also, the maps are downloadable as packaged ZIP files by selecting them from the table.</p>
32		<p class='repo_link'>DOWNLOAD MAPS</p>
33		<div class='link_table_div'>
34		<table class='download_options_table'>
35			<tr class='first_row'>
36				<td class='download_options_desc'>One complete file (.7z):</td>
37				<td class='download_options_link_single'><a href='https://drive.google.com/file/d/1OORy1_U25ycF7lWtd0aeAVifxjpwZziY/view?usp=share_link' target='_blank'>Google Drive</a> <b>|</b> <a href='https://mega.nz/file/UHBiQbyK#tsgA9EgykPC4k9XisNoKmI-fFJKLsubO4vREwtgpRSs' target='_blank'>MEGA</a> <b>|</b> <a href='https://www.mediafire.com/file/7h66b4d5l06wzr8/TFC_Maps_Archive.7z/file' target='_blank'>MediaFire</a></td>
38			</tr>
39			<tr>
40				<td class='download_options_desc'>Individual resource files:</td>
41				<td class='download_options_link_loose'><a href='https://mega.nz/folder/cK5RGKAR#MwPZ_9S3lRWvT4z7CzegJA' target='_blank'>MEGA</a></td>
42			</tr>
43		</table>
44		</div>
45                <p class='repo_version'>Last updated: <b>October 3, 2026</b> (<a href='./changelog.txt' target='_blank'>changelog</a>)</p>
46		<p class='request'>Have any custom maps that aren't on this list? <a href='./submit_maps.php'><b>Submit them here.</b></a></p>
47	</div>
48
49	
50
51	<div class="container">
52		<div class="row">
53			<div class="col-12 m-auto">
54				<table class='cell-border row-border stripe hover' id='mapTable'>
55					<thead>
56						<th> Map (<a href='#' class='map_tooltip'>?</a>)<br>
57						  <div class="filter-controls">
58						    <input type="text" placeholder="Filter map name" class="form-control" id="filterMap">
59                                                    <span id="clearfilterMap" class="cancel-btn">&#10006;</span>
60	       					  </div>
61						</th>
62						
63						<th> Game Type (<a href='game_types' class='game_type_tooltip' target='_blank'>?</a>)<br>
64						  <div class="filter-controls"
65                                                    <label for="filterGameType"></label>
66         					    <select class="form-control" id="filterGameType">
67	    					      <option value="">All</option>
68            					      <option value="Arena">Arena</option>
69			                              <option value="Attack and defend">Attack and defend</option>
70	                                              <option value="Capture the flag">Capture the flag</option>
71						      <option value="Climb">Climb</option>
72						      <option value="Destruction">Destruction</option>
73						      <option value="Flag run">Flag run</option>
74						      <option value="Hunted">Hunted</option>
75						      <option value="Kill the carrier">Kill the carrier</option>
76						      <option value="King of the hill">King of the hill</option>
77					  	      <option value="Push CTF">Push CTF</option>
78						      <option value="Racing">Racing</option>
79	 				              <option value="Reverse CTF">Reverse CTF</option>
80	                                              <option value="Skill">Skill</option>
81					              <option value="Sniper war">Sniper war</option>
82						      <option value="Social/cooperative">Social/cooperative</option>
83						      <option value="Team deathmatch">Team deathmatch</option>
84						      <option value="Territorial control">Territorial control</option>
85						      <option value="Vote">Vote</option>
86	                                            </select>
87	                                          </div>
88	                                        </th>
89
90						<th> Author<br>
91						  <div class="filter-controls">
92						    <input type="text" placeholder="Filter author" class="form-control" id="filterAuthor">
93						    <span id="clearfilterAuthor" class="cancel-btn">&#10006;</span>
94	 					  </div>
95						</th>
96
97						<th> Year (<a href='#' class='year_tooltip'>?</a>)<br>
98						  <div class="filter-controls">
99						    <input type="text" placeholder="Filter year" class="form-control" id="filterYear">
100                                                    <span id="clearfilterYear" class="cancel-btn">&#10006;</span>
101	       					  </div>
102						</th>
103
104						<th> Status (<a href='#' class='status_tooltip'>?</a>)<br> 
105						  <div class="filter-controls"
106                                                    <label for="filterStatus"></label>
107                                                    <select class="form-control" id="filterStatus">
108	                                              <option value="">All</option>
109                                                      <option value="Working">Working</option>
110	                                              <option value="Broken">Broken</option>
111	                                            </select>
112	                                         </div>
113				               </th>
114
115					       <!-- Hidden headers for columns that don't appear in the table. -->
116					       <th> Col 5</th>
117					       <th> Col 6</th>
118					       <th> Col 7</th>
119					       <th> Col 8</th>
120
121					       <th> Date Added<br>
122					         <div class="filter-controls">
123						   <input type="text" placeholder="Filter date added" class="form-control" id="filterDateAdded">
124						   <span id="clearfilterDateAdded" class="cancel-btn">&#10006;</span>
125	 					 </div>
126					       </th>
127					</thead>
128					<tbody>
129						<tr>
130						</tr>
131					</tbody>	
132				</table>
133			</div>
134		</div>
135	</div>
136
137	<div class='disclaimer'>
138		<p>This is a fan site and is in no way affiliated with or endorsed by Valve Corporation.</p>
139	</div>
140    </div>
141            
142	<!-- 
142<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
142 -->
143	
143<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
143
144	
144<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
144
145	
145<script src='https://cdn.jdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css'></script>
145
146        <!-- 
146<script src='https://cdn.datatables.net/1.10.22/js/dataTables.bootstrap4.min.js'></script>
146 -->
147
148	<!-- CDN jQuery Datatable -->
149	<!-- 
149<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.js"></script>
149 -->
150	
150<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script>
150
151
152  <div class='tipjar'>
153	
153<script type='text/javascript' src='Widget_2.js'></script>
153
154	
154<script type='text/javascript'>kofiwidget2.init('Tips', '#CEAF4A', 'P5P6IOMK4');kofiwidget2.draw();</script>
154
155  </div>
156
157</body>
158</html>
159
160<script>
161	// Limit page numbers in pagination controls.
162	$.fn.DataTable.ext.pager.numbers_length = 5;
163
164	$(document).ready(function() {
165
166	 // Function to get URL parameters
167	 function getUrlParameter(name) {
168             name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
169             var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
170             var results = regex.exec(location.search);
171             return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
172         }
173
174         // DataTable initialization
175    	 var dataTable = $('#mapTable').DataTable( {
176             'bPaginate': true,
177             'iDisplayLength': 10,
178             'processing': true,
179             'serverSide': true,
180	     'ajax': './serv_proc/server_processing.php',
181	     'bAutoWidth': false,
182
183	     // 'search': {
184               // 'regex': true
185             // },
186
187	     // Adds pagination to top.
188	     // dom: 'lpftrip',
189	     dom: "<'row'<'col-sm-3'l><'col-sm-4'f><'col-sm-5'p>>" +
190                  "<'row'<'col-sm-12'tr>>" +
191                  "<'row'<'col-sm-5'i><'col-sm-7'p>>",
192	  
193	     columnDefs: [
194               { type: 'text', targets: '_all' },  // Set default column type to text.
195               { targets: [0, 1, 2, 3, 4, 9], searchable: true, visible: true },  // Enable filtering for visible columns.
196	       { targets: [5, 6, 7, 8], visible: false }  // Hide these columns.
197             ]
198         } );
199
200 	// Function to update URL parameters
201        function updateUrlParameter(key, value) {
202            // Get current URL parameters
203            var urlParams = new URLSearchParams(window.location.search);
204           
205            // Update or add the parameter
206            if (value === '') {
207                urlParams.delete(key);
208            } else {
209                urlParams.set(key, value);
210            }
211
212            // Replace the current state in the browser history
213            var newUrl = window.location.pathname + '?' + urlParams.toString();
214            history.replaceState(null, null, newUrl);
215         }
216
217        // Function to set filter controls based on URL parameters
218        function setFilterControlsFromUrl() {
219            $('#filterMap').val(getUrlParameter('filterMap'));
220            $('#filterGameType').val(getUrlParameter('filterGameType'));
221	    $('#filterAuthor').val(getUrlParameter('filterAuthor'));
222	    $('#filterYear').val(getUrlParameter('filterYear'));
223            $('#filterStatus').val(getUrlParameter('filterStatus'));
224	    $('#filterDateAdded').val(getUrlParameter('filterDateAdded'));
225        }
226
227        // Apply filters from URL parameters or use default value
228        var filterMap = getUrlParameter('filterMap') || '';
229        if (filterMap) {
230            // Apply filterMap to the DataTable
231            dataTable.column(0).search(filterMap).draw();
232        }
233
234        var filterGameType = getUrlParameter('filterGameType') || '';
235        if (filterGameType) {
236            // Apply filterGameType to the DataTable
237            dataTable.column(1).search(filterGameType).draw();
238        }
239
240        var filterAuthor = getUrlParameter('filterAuthor') || '';
241        if (filterAuthor) {
242            // Apply filterAuthor to the DataTable
243            dataTable.column(2).search(filterAuthor).draw();
244        }
245
246        var filterYear = getUrlParameter('filterYear') || '';
247        if (filterYear) {
248            // Apply filterYear to the DataTable
249            dataTable.column(3).search(filterYear).draw();
250        }
251
252        var filterStatus = getUrlParameter('filterStatus') || '';
253        if (filterStatus) {
254            // Apply filterStatus to the DataTable
255            dataTable.column(4).search(filterStatus).draw();
256        }
257
258	var filterDateAdded = getUrlParameter('filterDateAdded') || '';
259	if (filterDateAdded) {
260	    // Apply filterDateAdded to the DataTable
261	    dataTable.column(9).search(filterDateAdded).draw();
262	}
263
264        // Set filter controls based on URL parameters
265        setFilterControlsFromUrl();
266
267	// Drop-down-menu filtering logic
268	$('#filterGameType').on('change', function() {
269 	  var selectedGameType = $(this).val();
270          dataTable.column(1).search(selectedGameType).draw();
271          updateUrlParameter('filterGameType', selectedGameType);
272        });
273
274	$('#filterStatus').on('change', function() {
275          var selectedStatus = $(this).val();
276	  dataTable.column(4).search(selectedStatus).draw();
277          updateUrlParameter('filterStatus', selectedStatus);
278	});
279
280	// Text-box filtering logic
281	$('#filterMap, #filterAuthor, #filterYear, #filterDateAdded').on('keyup', function() {
282	  dataTable.column(0).search($('#filterMap').val()).draw();
283	  dataTable.column(2).search($('#filterAuthor').val()).draw();
284          dataTable.column(3).search($('#filterYear').val()).draw();
285	  dataTable.column(9).search($('#filterDateAdded').val()).draw();
286
287          // Update URL parameters
288          updateUrlParameter('filterMap', $('#filterMap').val());
289          updateUrlParameter('filterAuthor', $('#filterAuthor').val());
290	  updateUrlParameter('filterYear', $('#filterYear').val());
291	  updateUrlParameter('filterDateAdded', $('#filterDateAdded').val());
292	});
293
294	// Prevent sorting when interacting with filter controls.
295	$('.filter-controls input, .filter-controls select, .filter-controls span').click(function (e) {
296	  e.stopPropagation();
297	});
298
299	// Clear map filter when user selects "X" button.
300	$('#clearfilterMap').click(function() {
301	  $('#filterMap').val('');
302	  dataTable.column(0).search($('#filterMap').val()).draw();
303          updateUrlParameter('filterMap', '');
304	});
305
306	// Clear author filter when user selects "X" button.
307	$('#clearfilterAuthor').click(function() {
308	  $('#filterAuthor').val('');
309	  dataTable.column(2).search($('#filterAuthor').val()).draw();
310          updateUrlParameter('filterAuthor', '');
311	});
312
313	// Clear year filter when user selects "X" button.
314	$('#clearfilterYear').click(function() {
315	  $('#filterYear').val('');
316	  dataTable.column(3).search($('#filterYear').val()).draw();
317          updateUrlParameter('filterYear', '');
318	});
319
320	// Clear date added filter when user selects "X" button.
321	$('#clearfilterDateAdded').click(function() {
322	  $('#filterDateAdded').val('');
323	  dataTable.column(9).search($('#filterDateAdded').val()).draw();
324          updateUrlParameter('filterDateAdded', '');
325	});
326
327     } );
328
329</script>
vendor: 2 bytes, line 329
329

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.