Ini Dia, Daftar Pemenang Penghargaan the Game Awards 2020
Robert Thorne
••13 min read
Lihat Foto Ilustrasu Ajang the Game Awards 2020(Cbr) Kompas. Com - Ajang Penghargaan Game Tahunan the Game Awards 2020 Usai Digelar. Ini Artinya, Pemenang Di...
KOMPAS.com - Ajang penghargaan game tahunan The Game Awards 2020 usai digelar. Ini artinya, pemenang di 30 kategori penghargaan, seperti Game of The Year, Best Game Direction, dan lain sebagainya sudah bisa diketahui.
Berdasarkan acara virtual The Game Awards 2020 yang digelar selama sekitar 3 jam itu, kategori penghargaan yang paling prestisius, yakni "Game of The Year", didapat oleh game bikinan Naughty Dog, The Last of Us Part 2.
Selain Game of The Year, game tersebut juga menyabet piala dari enam kategori lainnya, mencakup Best Game Direction, Best Action/Adventure, Best Performance, Best Narrative, Best Audio Design, dan Innovation in Accessibility.
Youtube/TheGameAwards Ilustrasi The Last of Us Part 2 di The Game Awards 2020
Dengan tujuh piala, The Last of Us Part 2 memborong penghargaan terbanyak di The Game Awards 2020.
Beberapa game populer lainnya, seperti Final Fantasy 7 Remake, Ghost of Tsushima, Among Us, Animal Crossing: New Horizons, dan lain sebagainya turut mendapat piala, tapi dalam jumlah lebih sedikit.
Final Fantasy 7 Remake, misalnya, hanya memenangkan dua kategori The Game Awards 2020, mencakup Best Score and Music dan Best Role-Playing. Begitu juga Among Us, yang membawa pulang dua piala di kategori Best Mobile Game dan Best Multiplayer.
Sedangkan Ghost of Tsushima, yang memenangkan hati penggemar di kategori Player's Voice, memenangkan satu kategori, yakni Best Art Direction. Kemudian, Animal Crossing: New Horizon memboyong piala Best Family.
Selengkapnya simak daftar pemenang di 30 kategori The Game Awards 2020 di bawah ini, sebagaimana diumumkan di ajang The Game Awards 2020 yang digelar secara virtual, Jumat (11/12/2020) pagi WIB.
Best Score and Music:Final Fantasy 7 Remake Best Action/Adventure:The Last of Us Part 2 Best Family:Animal Crossing: New Horizons Best Community Support:Fall Guys: Ultimate Knockout Best Debut Game:Phasmophobia Best Esports Game:League of Legends Best Esports Coach: Danny "Zonic" Sorensen (Counter-Strike: Global Offensive) Best Esports Event: League of Legends World Championship 2020 Best Esports Host: Eefje "Sjokz" Depoortere Best Esports Team: G2 Esports (League of Legends) Best Esports Athlete: Heo "Showmaker" Su (League of Legends) Best Performance: Laura Bailey (Abby), The Last of Us Part 2 Best Ongoing:No Man's Sky Best Art Direction:Ghost of Tsushima Best Action:Hades Best VR/AR:Half-Life: Alyx Best Sports/Racing:Tony Hawk's Pro Skater 1+2 Best Narrative:The Last of Us Part 2 Games for Impact:Tell Me Why Best Multiplayer:Among Us Best Indie Game:Hades Best Audio Design:The Last of Us Part 2 Best Role-Playing:Final Fantasy 7 Remake Best Simulation/Strategy: Microsoft Flight Simulator Best Fighting:Mortal Kombat 11/Ultimate Innovation in Accessibility:The Last of Us Part 2 Best Mobile Game:Among Us Content Creator of The Year:Valkyrae Best Game Direction:The Last of Us Part 2 Game of The Year:The Last of Us Part 2
Dapatkan update berita pilihan dan breaking news setiap hari dari Kompas.com. Mari bergabung di Grup Telegram "Kompas.com News Update", caranya klik link , kemudian join. Anda harus install aplikasi Telegram terlebih dulu di ponsel.
Pilihan Untukmu
`);
var wSpecStop = createElementFromHTML(`
Konten disembunyikan. Muat ulang halaman untuk perbarui rekomendasi.
`);
reactionPopup.querySelector('.buttonShare').setAttribute('data-title', item.title);
reactionPopup.querySelector('.buttonShare').setAttribute('data-url', itemUrl);
reactionPopup.querySelector('.buttonShare').setAttribute('data-campaign', 'AIML_Widget_Desktop');
let userFeedback = new UserFeedback(resultObj.engine['tracker_algsrc'], itemUrl + tracker_params, jxRecHelper, index);
reactionPopup.querySelector('.buttonBookmark').addEventListener('click', function() {
do_bookmark(itemUrl, index, userFeedback);
});
reactionPopup.querySelector('.buttonShare').addEventListener('click', function() {
userFeedback.event('share');
});
reactionPopup.querySelector('.buttonNotInterest').addEventListener('click', function() {
if (getCookie('kmps_usrid')) {
hideThisArt(this);
userFeedback.event('not-interested');
} else {
const parentAction = this.parentElement.parentElement.parentElement
if (!!parentAction) {
let indexElement = parentAction.getAttribute('data-index')
if (indexElement != 'undefined') {
localStorage.setItem('reaction_not_interest_temp', JSON.stringify({
urlpage: items[indexElement].url
}))
}
}
window.location.href = "" + btoa(window.location.href);
}
});
/**
* trigger action "userFeedback" that user not interest item before, when not interest without login
*/
if (getCookie('kmps_usrid') && localStorage.getItem('reaction_not_interest_temp')) {
const tempUrlNotInterest = JSON.parse(localStorage.getItem('reaction_not_interest_temp'))
if (itemUrl == tempUrlNotInterest.urlpage) {
userFeedback.event('not-interested');
localStorage.removeItem('reaction_not_interest_temp');
}
}
wSpecStop.querySelector('.wSpec-stop-undo').addEventListener('click', function() {
showThisArt(this);
userFeedback.event('un-not-interested');
});
recItem.appendChild(buttonOption);
recItem.appendChild(reactionPopup);
recItem.appendChild(wSpecStop);
}
var recItemWrapperA = createElement('a', null, null, null);
recItemWrapperA.setAttribute('href', itemUrl + tracker_params);
var titleDiv = createElement('h4', null, null, [cssClasses.title]);
var titleTextNode = document.createTextNode(item.title);
if (item.itemType == 'video') {
var iconVideo = createElement('div', null, null, ['icoInline', 'icoVideo']);
iconVideo.style.marginRight = '5px';
titleDiv.appendChild(iconVideo);
}
titleDiv.appendChild(titleTextNode);
var sourceDiv = null;
if (item.hasOwnProperty('method')) {
sourceDiv = createElement('div', null, null, [cssClasses.source], resultObj.engine['type'] + ' . ' + item.method.toUpperCase());
} else {
var sourceDiv = createElement('div', null, null, [cssClasses.source], resultObj.engine['type']);
}
var textWrapper = createElement('div', null, null, [cssClasses.text_wrapper]);
textWrapper.appendChild(categoryDiv);
textWrapper.appendChild(titleDiv);
textWrapper.appendChild(sourceDiv);
recItemWrapper.appendChild(imgWrapper);
recItemWrapper.appendChild(textWrapper);
recItemWrapperA.appendChild(recItemWrapper);
recItem.appendChild(recItemWrapperA);
widgetWrapper.appendChild(recItem);
// hook up the click handler for this item
// recItem.onclick = handleClick.bind(null, jxRecHelper, itemUrl + tracker_params, index);
recItemWrapperA.onclick = handleClick.bind(null, jxRecHelper, itemUrl + tracker_params, index);
});
} // end while
var endDate = new Date();
var loadtime = (endDate.getTime() - startDate.getTime());
trackEventGa('AIML Article Recommendation', 'Content Loaded', 'algsrc='+algsrc+',site=TEKNO,device=desktop,loadtime=' + loadtime)
let domain = window.location.hostname;
if(domain=='){
var url=window.location.href.split("/");
domain=url[2]+'/'+url[3]
}
let user_subs_type = "Gues";
let subs_type = "";
let is_lgn = 0;
let engine = algsrc;
if(getCookie('kmps_usrid')){is_lgn=1};
let time_load = loadtime;
resolve();
/***
* JXRECSDK NOTES 3 of 5 -
* pass all the info about the items to the rec helper
* each one is an object: ALL MANDATORY
* div
* id
* pos
*/
jxRecHelper.items(widgetItemArr);
/***
* JXRECSDK NOTES 4 of 5 -
* Call the ready() of the helper object when the recommendation
* results have been populated to the widget
* (This will register the action=ready event)
*/
if (resultObj.engine['type'] == 'api-1') {
jxRecHelper.ready(resultObj.options.algo + ":" + resultObj.options.version);
} else {
jxRecHelper.ready(resultObj.engine['type']);
}
} else {
jxRecHelper.error(204);
console.error("Error: no recommendation items");
return;
}
} catch (err) {
jxRecHelper.error(901);
console.log(err.stack);
let domain = window.location.hostname;
if(domain=='){
var url=window.location.href.split("/");
domain=url[2]+'/'+url[3]
}
let user_subs_type = "Gues";
let subs_type = ""
let is_lgn = 0;
let engine = algsrc;
if(getCookie('kmps_usrid')){is_lgn=1};
let endDate = new Date();
let time_load = (endDate.getTime() - startDate.getTime());
}
});
}
const _jxRecSdkURL = '
var startDate = new Date();
class OneWidget {
constructor() {
//this is also the one we will pass to the JX rec helper object when
//we instantiate it:
//In this implementation most of these come from the options obj
//on the publisher page.
this._options = {
accountid: '9262bf2590d558736cac4fff7978fcb1',
pageurl: '
widget_id: '1000183-6xWeiWZFIM',
type: 'pages',
container: 'rekomendasi-konten-pilihan-untukmu-aiml',
keywords: content_tags,
title: title,
customid: "7",
count: 14,
};
this._containerId = this._options.container;
this._container = document.getElementById(this._containerId);
this._engines = [{"url":"https:\/\/recommendation.jixie.media\/v1\/recommendation","method":"GET","pageurl":"https:\/\/tekno.kompas.com\/read\/2020\/12\/11\/13250047\/ini-dia-daftar-pemenang-penghargaan-the-game-awards-2020","system":"jx","type":"api-1","tracker_params":"?source=widgetML","tracker_algsrc":"V","count":14,"page_status":"read","excludeitemids":"2020121113250047"}];
}
kickOff() {
startDate = new Date();
const rand = Math.floor(Math.random() * 1000);
/*const randSystem = Math.floor(Math.random() * 3);
this._engine = this._engines[randSystem]
if (location.hostname.indexOf('lestari') != -1) {
this._engine = this._engines[1]
}*/
this._engine = this._engines[0];
this._options.system = this._engine['system']
trackEventGa('AIML Article Recommendation', 'Widget load', 'algsrc=' + this._engine['tracker_algsrc'] + ',site=TEKNO,device=desktop')
let promJXSDK = fetchJSFileP(_jxRecSdkURL);
let thisObj = this;
// first we wait on the JX REC SDK to be loaded and initialized
let recHelperObj = null;
let recResults = null;
promJXSDK
.then(function() {
/***
* JXRECSDK NOTES 1 of 5 - INSTANTIATION OF A JX REC HELPER OBJECT
* Call this AFTER JX REC SDK is loaded but BEFORE you call your REC
* backend.
*
* param: MANDATORY options object
* options object must at a minimal have
* accountid: get from jixie
* widgetid: get from jixie
* container: DIV ID of the destination div to house the widget
* (for jixie widget this is just the options object passed from the page)
*
* (This will also register the action=load event)
*/
recHelperObj = jxRecMgr.createJxRecHelper(thisObj._options);
let basicInfo = thisObj._options;
basicInfo.engine = thisObj._engine
if (basicInfo.engine.type == 'api-1') {
var options = {
count: basicInfo['count'],
adpositions: "",
keywords: basicInfo['keywords'],
title: basicInfo['title'],
date_published: "2020-12-11",
pagecategory: "TEKNO",
algo: "mixed"
};
if(getCookie('kmps_usrid')){
var kg = {
pagetype:basicInfo.engine.page_status,
uid:getCookie('kmps_usrid'),
ukid:getCookie('kmp_uid')
}
if(basicInfo.engine.page_status=='read'){
kg['excludeitemids'] = basicInfo.engine.excludeitemids;
kg['multiFormat'] = true;
}
options['additional'] = {
kg:kg
};
}
return recHelperObj.getJxRecommendations(options);
} else {
return fetchRecommendationsP(basicInfo, recHelperObj.getJxUserInfo());
}
})
.then(function(resp) {
if (thisObj._engine.type == 'api-3') {
recResults = new Object
recResults.items = resp.docs.result;
} else {
recResults = resp;
}
recResults.engine = thisObj._engine;
if (!resp || !recResults.items || recResults.items.length == 0) {
/***
* JXRECSDK NOTES 2 of 5 -
* Call the error() function on the recHelper when either an error
* has occured in the fetching or there are no recommended items
*
* (This will register the action=error event)
*/
recHelperObj.error(204);
throw "no recommendation results";
}
})
.then(function() {
// everything is ready (recommendation results, css):
document.getElementById("rekomendasi-konten-pilihan-untukmu-aiml").classList.remove("-loading");
document.querySelector('.wSpec-list').remove();
createDisplay(rand, thisObj._container, recResults, recHelperObj)
.then(function() {
toggleDropdown();
//observe lozad
lozad('.lozad', {
load: function(el) {
el.src = el.dataset.src;
el.onload = function() {
el.classList.add('fade')
}
}
}).observe()
})
})
.catch(function(error) {
console.log(`Unable to create recommendations widget ${error.stack} ${error.message}`);
});
}
}
var limit_gtm_ready = 1;
function check_gtm_ready() {
if ('ga' in window) {
// create a new instance of our widget based on the options
const newW = new OneWidget();
newW.kickOff();
} else {
const timeout_gtm_ready = setTimeout(check_gtm_ready, 500)
limit_gtm_ready += 1;
if (limit_gtm_ready > 10) {
clearTimeout(timeout_gtm_ready);
const newW = new OneWidget();
newW.kickOff();
}
}
}
check_gtm_ready()
document.querySelector('.wSpec-secret').addEventListener('click', function(e) {
e.preventDefault();
let wSl = document.querySelectorAll('.wSpec-source');
if (wSl.length > 0) {
for (let i = 0; i < wSl.length; i++) {
wSl[i].classList.toggle('show')
}
}
})
function trackEventGa(category, action, label) {
if ("ga" in window) {
ga(function() {
tracker = ga.getAll()[0];
if (tracker) {
tracker.send("event", category, action, label);
console.log('track event ', category, action, label)
}
})
}
}
function formBody(obj) {
let formBody = [];
for (var property in obj) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(obj[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
return formBody.join("&");
}
function getCookie(name) {
var name = name + '=';
var cookies = decodeURIComponent(document.cookie).split(';');
for (var i = 0; i < cookies.length; i++) {
var c = cookies[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
}
function get_guid(url) {
const videoPath = url.match(/\/watch\/(\d+)/);
if (videoPath) {
return `video.${videoPath[1]}`;
}
let arrayUrl = url.split('/');
let readPath = arrayUrl.indexOf('read');
if (arrayUrl[readPath + 1] == 'xml') {
readPath += 1;
}
let year = arrayUrl[readPath + 1];
let month = arrayUrl[readPath + 2];
let date = arrayUrl[readPath + 3];
let id = arrayUrl[readPath + 4];
let guid = `.xml.${year}.${month}.${date}.${id}`;
return guid;
}
function toggleDropdown() {
let tdd = document.querySelectorAll('[data-dropdown]')
if (!!tdd) {
tdd.forEach((el) => {
el.addEventListener('click', function() {
el.parentElement.classList.toggle('-active')
let saved = el.parentElement.getAttribute('data-saved')
let kmps_usrid = getCookie('kmps_usrid');
if (kmps_usrid && !saved && el.parentElement.classList.contains('-active')) {
let url = el.parentElement.getAttribute('data-url');
let guid = get_guid(url);
check_bookmark(
kmps_usrid,
guid
).then(function(resp) {
if (resp.hasOwnProperty('total_data')) {
if (resp.total_data > 0) {
el.parentElement.querySelector('.buttonBookmark').classList.add('-active');
el.parentElement.querySelector('.buttonBookmark').innerHTML = 'Hapus dari tersimpan';
el.parentElement.setAttribute('data-saved', 'true');
} else {
el.parentElement.setAttribute('data-saved', 'false');
}
}
})
}
})
document.addEventListener("click", function(e) {
// console.log(e.target)
if (el.contains(e.target)) {
// console.log(tdd)
} else {
el.parentElement.classList.remove('-active')
}
});
});
}
}
function check_bookmark(kmps_usrid, guid) {
let url = `
return new Promise(function(resolve, reject) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(JSON.parse(this.responseText))
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
});
}
function do_bookmark(pageurl, pos, userFeedback) {
const wSpecItem = document.querySelector(`.wSpec-item[data-index="${pos}"]`);
const btnBookmark = wSpecItem.querySelector('.buttonBookmark');
const kmps_usrid = getCookie('kmps_usrid');
const guid = get_guid(pageurl);
const type = pageurl.match(/\/watch\/(\d+)/) ? 'video' : 'article';
if (kmps_usrid) {
if (btnBookmark.classList.contains('-active')) {
set_unbookmark({
guid: guid,
kmps_usrid: kmps_usrid,
type: type
}).then(function(resp) {
btnBookmark.classList.remove('-active');
btnBookmark.innerHTML = 'Simpan artikel';
reactionToast('Artikel berhasil dihapus dari list yang disimpan');
userFeedback.event('un-save');
}).catch(function(resp) {
// message: "Data doesn't exists"
if (resp.hasOwnProperty('message') && resp.message.includes('exist')) {
btnBookmark.classList.remove('-active');
btnBookmark.innerHTML = 'Simpan artikel';
reactionToast('Artikel berhasil dihapus dari list yang disimpan');
}
})
} else {
const user_bookmark_url = "";
set_bookmark({
guid: guid,
kmps_usrid: kmps_usrid,
type: type,
publisher: 'kompas',
platform: 'desktop'
}).then(function(resp) {
btnBookmark.classList.add('-active');
btnBookmark.innerHTML = 'Hapus dari tersimpan';
reactionToast('Artikel berhasil disimpan', user_bookmark_url);
userFeedback.event('save');
}).catch(function(resp) {
// message: "Data already exist"
if (resp.hasOwnProperty('message') && resp.message.includes('exist')) {
btnBookmark.classList.add('-active');
btnBookmark.innerHTML = 'Hapus dari tersimpan';
reactionToast('Artikel berhasil disimpan', user_bookmark_url);
}
})
}
} else {
const login_url = "" + btoa(window.location.href);
window.location.href = login_url;
}
}
function set_bookmark(data) {
const url = "";
return new Promise(function(resolve, reject) {
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 201) {
resolve(JSON.parse(this.responseText));
} else if (this.readyState == 4 && this.status == 400) {
reject(JSON.parse(this.responseText));
}
};
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(formBody(data));
});
}
function set_unbookmark(data) {
const url = "";
return new Promise(function(resolve, reject) {
const xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(JSON.parse(this.responseText));
} else if (this.readyState == 4 && this.status == 400) {
reject(JSON.parse(this.responseText));
}
};
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(formBody(data));
});
}
class UserFeedback {
constructor(engine, pageurl, jxRecHelper, pos) {
this.engine = engine;
this.pageurl = pageurl;
this.jxRecHelper = jxRecHelper;
this.pos = pos;
}
event(feedback) {
if (this.engine == 'C') {
const xmlhttp = new XMLHttpRequest();
let params = {
domain: 'kompas.com',
ce_userid: getCookie('kmps_usrid'),
ce_sessionid: getCookie('ukid'),
ce_pageurl: this.pageurl,
engine: 'C',
ce_feedback: feedback
}
xmlhttp.open("GET", ' + formatParams(params));
xmlhttp.send();
} else if (this.engine == 'V') {
if (feedback == 'share') {
this.jxRecHelper.shared(this.pos);
} else if (feedback == 'save') {
this.jxRecHelper.bookmarked(this.pos);
} else if (feedback == 'not-interested') {
this.jxRecHelper.hidden(this.pos);
} else if (feedback == 'un-not-interested') {
this.jxRecHelper.unhidden(this.pos);
}
}
}
}
function formatParams(params) {
return "?" + Object
.keys(params)
.map(function(key) {
return key + "=" + encodeURIComponent(params[key])
})
.join("&")
}
document.addEventListener("click", function(e){
let dx = document.querySelectorAll('[data-dropdown]')
if(dx) {
dx.forEach(function(el){
if(el.contains(e.target)) {
el.parentElement.classList.toggle('-active')
} else {
el.parentElement.classList.remove('-active')
}
})
}
})