{"id":146,"date":"2020-01-14T10:20:25","date_gmt":"2020-01-14T09:20:25","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/john-romero-25-years-of-doom\/"},"modified":"2020-07-22T10:56:00","modified_gmt":"2020-07-22T08:56:00","slug":"john-romero-25-years-of-doom","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/","title":{"rendered":"John Romero: 25 years of DOOM!"},"content":{"rendered":"\n<p>The <span id=\"urn:enhancement-7d9a8186\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">creator<\/span> of the iconic <span id=\"urn:enhancement-bcb19a2f\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game\">videogame<\/span>  <strong>DOOM<\/strong> , John <span id=\"urn:enhancement-f712fab1\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span>, started developing games in 1980,then he co-founders <span id=\"urn:enhancement-20da2721\" class=\"textannotation disambiguated wl-organisation\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/id_software\">Id software<\/span>, an American <span id=\"urn:enhancement-493eb82a\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">video game development company<\/span> known for having produced very popular games such as <span id=\"urn:enhancement-6fd7ac07\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/doom_1993_video_game\">Doom<\/span>, <span id=\"urn:enhancement-8bff5ecf\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/wolfenstein_2009_video_game\">Wolfenstein<\/span> and <span id=\"urn:enhancement-8ed8f890\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/quake_video_game\">Quake<\/span>. He participated in the development of hundreds of games and is now among the most influential <span id=\"urn:enhancement-699061de\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">game developers<\/span> all around the world.<\/p>\n\n\n\n<p>So it was no surprise that he was invited to deliver a speech at Codemotion Milan 2018, where he told his story from the beginning of his career until today. During his talk, he used anecdotes and prior experiences to build a set of <strong>10 programming principles that apply to game development<\/strong>. In this article, we provide a summary of these principles, serving as a sort of \u201cvademecum\u201d for any <span id=\"urn:enhancement-338c6443\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">game developers<\/span>.<\/p>\n\n\n\n<q>Keep your code absolutely simple. Keep looking at your functions and figure out how you can simplify further.<\/q>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Principle 1 \u2013 No buggy prototypes<\/h2>\n\n\n\n<p>During his talk, John <span id=\"urn:enhancement-7f8d9881\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> explained that some of the current policies taken by software development companies should not be used in the context of game development. Software developers often put some TODOs in their code, as a marker to remember to fix a bug later, just because it is simple to solve and they prefer to continue with the rest of the development. <span id=\"urn:enhancement-b9caca4e\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> suggests exactly the opposite: fix any bug immediately, make the code polished and working, in order to maintain production code.<\/p>\n\n\n\n<q>No prototypes. Just make the game. Polish as you go. Don&#8217;t depend on polish happening later. Always maintain constantly shippable code.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 2 \u2013 Fallbacks on load failure<\/h2>\n\n\n\n<p>In the development of a game, it is crucial that the entire team must be able to test the game they are creating. Always, at any time of the development process. As <span id=\"urn:enhancement-8c844716\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> said (and this is part of principle 5), \u201cwe are our own best testing team, and we should never allow anyone else to experience bugs or see the game crash [\u2026]\u201d. To allow testing during the development process, it is thus important to always provide defaults on load failure.<\/p>\n\n\n\n<q>It&#8217;s incredibly important that your game can always be run by your team. Bulletproof your engine by providing defaults upon load failure.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 3 \u2013 Simple code<\/h2>\n\n\n\n<p>This principle is, to some extent, a sort of corollary of the Occam\u2019s razor principle. <strong>When you can do something simple, you should do it<\/strong>. There is no reason to complicate things and this is especially true when you are part of a <span id=\"urn:enhancement-fc32f72\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_development\">game development<\/span> team. Moreover, even if you arrive at a working code for your goal, if it doesn\u2019t seem intuitive, or is difficult to maintain, it is crucially important that you stop and try to figure out how to make it simpler.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 4 \u2013 Great tools make great games<\/h2>\n\n\n\n<p>Throughout his career, <span id=\"urn:enhancement-f52c2da9\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> has had the need (and the opportunity) to build several <span id=\"urn:enhancement-ad239b52\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/game_engine\">game engines<\/span>, some of which gained a lot of popularity in the <span id=\"urn:enhancement-4631bd91\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_development\">game development<\/span> community. This is the case with the <span id=\"urn:enhancement-da82d3f8\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/doom_engine\">Doom Engine<\/span> (actually <span id=\"urn:enhancement-75cd652\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">developed<\/span> mostly by <span id=\"urn:enhancement-1559212a\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_carmack\">John Carmack<\/span>), which is still downloadable and has been release with <span id=\"urn:enhancement-4e83dfae\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/gnu_general_public_license\">GPL<\/span> License. In his talk, <span id=\"urn:enhancement-2b4ad97a\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> explained how the ability of creating great games strongly depends on the tools and the engines used for building them. He told about how many tests he and his team did in order to find and chose the best tools for their games. The great results of their products are clearly due to the hard work in finding (or creating) such powerful tools.<\/p>\n\n\n\n<q>Great tools help make great games. Spend as much time on tools as possible.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 5 \u2013 We are our own best testing team<\/h2>\n\n\n\n<p>There are two main concepts summarised by this principle: firstly, the best testing team is made up by who <span id=\"urn:enhancement-f5e60380\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/video_game_developer\">developed<\/span> the game; secondly, do not allow other people to waste their time and see your <span id=\"urn:enhancement-96c96cb\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bugs<\/span>. You might think that developers should be able to see all the <span id=\"urn:enhancement-8583be5c\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bugs<\/span> they program. But you can ask another developer to test your <span id=\"urn:enhancement-29526389\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>, gathering more informed feedback and more help in fixing the <span id=\"urn:enhancement-71c169b9\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bugs<\/span>.<\/p>\n\n\n\n<q>We are our own best testing team and should never allow anyone else to experience bugs or see the game crash. Don&#8217;t waste others&#8217; time. Test thoroughly before checking in your code.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 6 \u2013 Fix your bugs<\/h2>\n\n\n\n<p>This principle is related to the first one. Instead of postponing your work on <span id=\"urn:enhancement-501dc2a5\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bug<\/span> fixing, when you see a <span id=\"urn:enhancement-3cf63468\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bug<\/span> you should immediately work on that, and fix it. If you don\u2019t do so, you can easily forget about it. Solving <span id=\"urn:enhancement-7f4e523e\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_bug\">bugs<\/span> later may cause a lot of struggle, and additional work. It\u2019s wasting time.<\/p>\n\n\n\n<q>As soon as you see a bug, you fix it. Do not continue on. If you don&#8217;t fix your bugs your new code will be built on a buggy codebase and ensure an unstable foundation.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 7 \u2013 Do not write code for future games<\/h2>\n\n\n\n<p>Reusing <span id=\"urn:enhancement-5bc4bbd4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> is one of the basic principles of object-oriented programming. But this <span id=\"urn:enhancement-26ebd65a\" class=\"textannotation disambiguated wl-person\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/john_romero\">Romero<\/span> principle is not in contrast with it. It is ok if you can reuse some <span id=\"urn:enhancement-d2005cb3\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> that you wrote before, but when you are developing a game, remember that you are working for it, not for future games. When you will develop a new game, you will find new things, new ideas and new technologies, probably better than the current ones. With <span id=\"urn:enhancement-3560d28f\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/quake_video_game\">Quake<\/span>, id software used new tools and a new game <span id=\"urn:enhancement-211b8fe3\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/game_engine\">engine<\/span> instead of reusing the <span id=\"urn:enhancement-c2340f90\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/doom_engine\">Doom Engine<\/span>.<\/p>\n\n\n\n<q>Write your code for this game only &#8211; not for a future game. You&#8217;re going to be writing new code later because you&#8217;ll be smarter.<\/q>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 8 \u2013 Encapsulate functionality to ensure design consistency<\/h2>\n\n\n\n<p>Using this principle allows creating more efficient <span id=\"urn:enhancement-ddcfd1af\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span>, and more flexibility with design choices and changes. <strong>Creating modular <span id=\"urn:enhancement-5da35e78\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span><\/strong> is a way to put this principle into practice.<br><q>Encapsulate functionality to ensure design consistency. This minimizes mistakes and saves design time.<\/q><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 9 \u2013 Code Transparently<\/h2>\n\n\n\n<p><strong>Discussing issues about the development process with other team members is very important<\/strong>. You can get useful feedback for easing the development. At the same time, you will inform other team members about what you are doing, so that they can help (or even \u201creplace\u201d) you in future stages of the development.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Principle 10 \u2013 Programming is a creative art<\/h2>\n\n\n\n<p>As with any creative art, programming requires the right amount of time and patience, which are different for every <span id=\"urn:enhancement-9d52b2a5\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programmer\">programmer<\/span>. So it is important to keep in mind that every developer is different. You must acknowledge this, and respect other team members.<\/p>\n\n\n\n<q>Programming is a creative art form based in logic. Every programmer is different and will code differently. It&#8217;s the output that matters.<\/q>\n\n\n","protected":false},"excerpt":{"rendered":"<p>At Codemotion Milan 2018, DOOM&#8217;s creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.<\/p>\n","protected":false},"author":3,"featured_media":147,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[15],"tags":[22],"collections":[],"class_list":{"0":"post-146","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-gamedev","8":"tag-codemotion-milan","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>John Romero: how to make DOOM, game design principles - Codemotion<\/title>\n<meta name=\"description\" content=\"At Codemotion Milan 2018, DOOM&#039;s creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"John Romero: 25 years of DOOM!\" \/>\n<meta property=\"og:description\" content=\"At Codemotion Milan 2018, DOOM&#039;s creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-14T09:20:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-22T08:56:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1013\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Vito Gentile\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"John Romero: 25 years of DOOM!\" \/>\n<meta name=\"twitter:creator\" content=\"@ViGentile\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vito Gentile\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\"},\"author\":{\"name\":\"Vito Gentile\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313\"},\"headline\":\"John Romero: 25 years of DOOM!\",\"datePublished\":\"2020-01-14T09:20:25+00:00\",\"dateModified\":\"2020-07-22T08:56:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\"},\"wordCount\":1108,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg\",\"keywords\":[\"Codemotion Milan\"],\"articleSection\":[\"Game Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\",\"name\":\"John Romero: how to make DOOM, game design principles - Codemotion\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg\",\"datePublished\":\"2020-01-14T09:20:25+00:00\",\"dateModified\":\"2020-07-22T08:56:00+00:00\",\"description\":\"At Codemotion Milan 2018, DOOM's creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg\",\"width\":1013,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Game Development\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"John Romero: 25 years of DOOM!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313\",\"name\":\"Vito Gentile\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g\",\"caption\":\"Vito Gentile\"},\"description\":\"I\u2019m a data scientist, tech writer, software developer with experience in mobile, web (full-stack) and Python programming, and former researcher with interests in human-computer interaction. I thus have a multi-faceted experience in the area of software development, and that\u2019s why I love my job(s)!\",\"sameAs\":[\"https:\/\/vitogentile.it\",\"https:\/\/www.linkedin.com\/in\/vitogentile\/en\",\"https:\/\/x.com\/ViGentile\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"John Romero: how to make DOOM, game design principles - Codemotion","description":"At Codemotion Milan 2018, DOOM's creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/","og_locale":"en_US","og_type":"article","og_title":"John Romero: 25 years of DOOM!","og_description":"At Codemotion Milan 2018, DOOM's creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-01-14T09:20:25+00:00","article_modified_time":"2020-07-22T08:56:00+00:00","og_image":[{"width":1013,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg","type":"image\/jpeg"}],"author":"Vito Gentile","twitter_card":"summary_large_image","twitter_title":"John Romero: 25 years of DOOM!","twitter_creator":"@ViGentile","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Vito Gentile","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/"},"author":{"name":"Vito Gentile","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313"},"headline":"John Romero: 25 years of DOOM!","datePublished":"2020-01-14T09:20:25+00:00","dateModified":"2020-07-22T08:56:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/"},"wordCount":1108,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg","keywords":["Codemotion Milan"],"articleSection":["Game Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/","name":"John Romero: how to make DOOM, game design principles - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg","datePublished":"2020-01-14T09:20:25+00:00","dateModified":"2020-07-22T08:56:00+00:00","description":"At Codemotion Milan 2018, DOOM's creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg","width":1013,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/john-romero-25-years-of-doom\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/"},{"@type":"ListItem","position":3,"name":"Game Development","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/"},{"@type":"ListItem","position":4,"name":"John Romero: 25 years of DOOM!"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313","name":"Vito Gentile","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g","caption":"Vito Gentile"},"description":"I\u2019m a data scientist, tech writer, software developer with experience in mobile, web (full-stack) and Python programming, and former researcher with interests in human-computer interaction. I thus have a multi-faceted experience in the area of software development, and that\u2019s why I love my job(s)!","sameAs":["https:\/\/vitogentile.it","https:\/\/www.linkedin.com\/in\/vitogentile\/en","https:\/\/x.com\/ViGentile"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-600x600.jpg","author_info":{"display_name":"Vito Gentile","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg",1013,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg",1013,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg",1013,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg",1013,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/04\/romero-1-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Vito Gentile","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"},"uagb_comment_info":0,"uagb_excerpt":"At Codemotion Milan 2018, DOOM's creator John Romero discussed 10 fundamental principles to help game developers in creating great and successful games.","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=146"}],"version-history":[{"count":7,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/146\/revisions"}],"predecessor-version":[{"id":6692,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/146\/revisions\/6692"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/147"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=146"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}