GDevelop JavaScript Line Break and Carriage Return Implementation Guide

Written by Yannick Brun

November 16, 2025

🚀 Quick Answer: Using n for Line Breaks in GDevelop JavaScript

In GDevelop, you can create line breaks in JavaScript strings using the standard newline character n. This works identically to standard JavaScript and functions properly in both JavaScript events and extensions within your GDevelop projects.

💡 Key Point: The n character creates carriage returns (line breaks) that display correctly in GDevelop Text objects and work across all supported platforms.

Basic Line Break Implementation

Creating multiline strings in GDevelop JavaScript follows standard JavaScript conventions. Here’s how to implement basic line breaks:

Simple String Creation with Line Breaks

const textWithLineBreaks = "Line 1nLine 2nLine 3";
const gameDialogue = "Welcome to the game!nPress SPACE to continuenGood luck!";

The n character is universally recognized and will create proper line breaks when displayed in GDevelop Text objects.

Variable Assignment with Multiline Content

You can assign multiline strings to GDevelop variables through JavaScript events:

// Setting a scene variable with line breaks
runtimeScene.getVariables().get("DialogueText").setString("Hello player!nWelcome to our worldnEnjoy your adventure!");

Working with GDevelop Text Objects

To display multiline text in your game, you’ll need to work with Text objects through JavaScript. Here’s the complete process:

Getting Text Object Instances

First, retrieve the Text object from your scene:

const textObjects = runtimeScene.getObjects("MyTextObject");
if (textObjects.length > 0) {
    const textObject = textObjects[0];
    // Now you can modify the text
}

Setting Multiline Text with setString()

Use the setString() method to apply your multiline text:

const texts = runtimeScene.getObjects("GameText");
if (texts.length > 0) {
    texts[0].setString("Score: 1000nLevel: 5nLives: 3");
}
⚠️ Important: Always check if the object array has elements before accessing them to prevent runtime errors.

JavaScript Code Block Integration

GDevelop allows you to insert JavaScript events directly into your game logic. Here’s how to effectively use line breaks within these code blocks:

Event-Based Text Manipulation

Insert a JavaScript code event in your scene and use this pattern:

// Dynamic text creation based on game state
const playerStats = `Health: ${player.health}nMana: ${player.mana}nExperience: ${player.xp}`;

const statusText = runtimeScene.getObjects("PlayerStatus");
if (statusText.length > 0) {
    statusText[0].setString(playerStats);
}

Conditional Multiline Display

Create conditional text with line breaks based on game conditions:

let messageText = "Game Over!";

if (playerScore > 1000) {
    messageText += "nNew High Score!";
}

if (playerLevel > 5) {
    messageText += "nLevel Master Achievement Unlocked!";
}

const messageObject = runtimeScene.getObjects("GameMessage");
if (messageObject.length > 0) {
    messageObject[0].setString(messageText);
}

Extension Development with Line Breaks

When developing custom extensions, you can return multiline strings using the same n approach:

Returning Multiline Values from Extensions

// In a custom extension function
const formattedData = "Player Name: " + playerName + "nScore: " + score + "nRank: " + rank;
eventsFunctionContext.returnValue = formattedData;

Extension Parameter Handling

Process parameters that may contain line breaks:

const inputText = eventsFunctionContext.getArgument("InputText");
const processedText = inputText.replace(/\n/g, 'n'); // Convert escaped n to actual line breaks
eventsFunctionContext.returnValue = processedText;

Practical Code Examples

Dynamic Dialogue System

Create a dynamic dialogue system with proper line breaks:

const dialogues = {
    intro: "Welcome, adventurer!nYour quest begins now.nChoose your path wisely.",
    shop: "Welcome to the shop!nWhat would you like to buy?n[1] Sword [2] Shield [3] Potion",
    victory: "Congratulations!nYou have completed the quest!nYour reward awaits..."
};

function displayDialogue(dialogueKey) {
    const dialogueText = runtimeScene.getObjects("DialogueBox");
    if (dialogueText.length > 0 && dialogues[dialogueKey]) {
        dialogueText[0].setString(dialogues[dialogueKey]);
    }
}

User Input Processing

Handle user input that may contain line breaks:

// Processing user input from a text input field
const userInput = runtimeScene.getVariables().get("UserInput").getAsString();
const formattedInput = "You entered:n" + userInput + "nnIs this correct?";

const displayText = runtimeScene.getObjects("InputDisplay");
if (displayText.length > 0) {
    displayText[0].setString(formattedInput);
}

Common Issues and Solutions

Issue Solution
Line breaks not displaying Ensure the Text object supports multiline display in its properties
String escaping problems Use template literals (backticks) or properly escape backslashes
Performance issues with large texts Limit text updates per frame and cache processed strings
Cross-platform inconsistencies Stick to n only; avoid rn or r

Alternative Approaches

Template Literals for Complex Formatting

Use template literals (backticks) for more readable multiline strings:

const complexText = `
Player Statistics:
==================
Name: ${playerName}
Level: ${playerLevel}
Health: ${playerHealth}/${playerMaxHealth}
Experience: ${playerExp}/${nextLevelExp}
`;

const statsDisplay = runtimeScene.getObjects("StatsText");
if (statsDisplay.length > 0) {
    statsDisplay[0].setString(complexText.trim());
}

String Array Join Method

Build multiline text using array joining:

const textLines = [
    "Game Instructions:",
    "- Use arrow keys to move",
    "- Press SPACE to jump",
    "- Collect coins for points",
    "- Avoid enemies"
];

const instructionText = textLines.join('n');
const instructionObject = runtimeScene.getObjects("Instructions");
if (instructionObject.length > 0) {
    instructionObject[0].setString(instructionText);
}

Testing and Debugging Tips

Console Logging for Verification

Verify your multiline strings are formatted correctly:

const testText = "Line 1nLine 2nLine 3";
console.log("Text preview:");
console.log(testText);
console.log("Character codes:", testText.split('').map(c => c.charCodeAt(0)));

Preview Testing in GDevelop

Always test your multiline text implementation across different scenarios:

  • Preview in GDevelop’s built-in preview
  • Test on different screen sizes
  • Verify text wrapping behavior
  • Check font rendering with line breaks
💡 Pro Tip: Create a test scene specifically for text formatting to quickly verify line break behavior across different Text object configurations.

Frequently Asked Questions

❓ How do I create line breaks in GDevelop JavaScript?

Use the standard JavaScript newline character n within your strings. For example: "Line 1nLine 2". This works in all GDevelop JavaScript contexts including events and extensions.

❓ Why aren’t my line breaks showing in the Text object?

Ensure your Text object is configured to display multiline text. Check the object’s properties and make sure it supports text wrapping and multiline display. Also verify you’re using n and not other characters.

❓ Can I use template literals for multiline text in GDevelop?

Yes! Template literals (backticks) work perfectly in GDevelop JavaScript. You can use them for more readable multiline string creation: `Line 1nLine 2nLine 3`.

❓ How do I return multiline strings from GDevelop extensions?

In extensions, set eventsFunctionContext.returnValue to a string containing n characters: eventsFunctionContext.returnValue = "Result 1nResult 2".

❓ Do line breaks work on all platforms where GDevelop games run?

Yes, the n character is universally supported across all platforms where GDevelop games can be exported, including web, desktop, and mobile platforms.

❓ How can I handle user input that contains line breaks?

Process user input strings normally – if they contain n characters, they’ll display as line breaks when assigned to Text objects using the setString() method.

❓ What’s the difference between n, r, and rn in GDevelop?

In GDevelop, stick to n for line breaks. While rn (Windows) and r (old Mac) exist, n provides the most consistent cross-platform behavior in game engines.

❓ Can I dynamically add line breaks to existing text?

Yes! Retrieve the current text using appropriate methods, concatenate with n and additional text, then update the Text object: currentText + "n" + newLine.

Hi, I’m Yannick Brun, the creator of ListPoint.co.uk.
I’m a software developer passionate about building smart, reliable, and efficient digital solutions. For me, coding is not just a job — it’s a craft that blends creativity, logic, and problem-solving.

Leave a Comment