Docs that make complex APIs feel obvious.
I'm a technical writer and software engineer who lives at the intersection of both disciplines. With a BEng (Hons) in Software Engineering from the University of Westminster and hands-on experience building real-world applications, I bring genuine technical depth to the work of documentation and developer experience.
"role": "Junior Technical Writer",
"employer": "Programus Ltd.",
"based_in": "Sri Lanka",
"education": "BEng (Hons) Software Engineering, University of Westminster (Upper Second Class Honours)",
"toolchain": ["OpenAPI", "Swagger", "Postman", "Git", "Azure DevOps", "RoboHelp"],
"background": "full-stack, Android & API engineering before technical writing",
"open_to_roles": ["Technical Writer", "Documentation Engineer", "Content Developer", "Information Developer", "Developer Advocate"],
"employment_type": ["Full-time", "Contract"],
"start_date": "Immediately",
"targeting": "technical writing / documentation engineering / developer relations, EU",
"status": "open_to_work"
}
Overview
Currently at Programus Ltd., I manage end-to-end documentation for multiple enterprise clients including API docs, user guides, configuration documents, tutorial videos, and release notes. I own API documentation and validation workflows using OpenAPI/Swagger and Postman, working closely with development and QA teams to keep everything accurate and useful.
Before moving into technical writing I spent time as a software engineer across full-stack web, Android, and API layers with a focus on Java, JavaScript, React.js, Node.js, SQL, Spring Boot, and more. I've written Bash scripts and Ansible playbooks, managed Linux environments, and contributed to open source. That background means I can read a codebase, understand what developers are building, and document it without needing everything explained from scratch.
I also write about software engineering on Medium. One article, a technical explainer on Python operators, was curated and featured by Medium's editorial team, reaching 2.5K+ readers.
I'm actively looking for technical writing, documentation engineering, and developer relations roles in Europe, particularly in Germany, the Netherlands, Ireland, and the UK. If you're building a developer-facing product and need someone who genuinely understands both sides, feel free to reach out or check out my portfolio below.
Experience
Junior Technical Writer - Programus Ltd.
- Independently manage end-to-end documentation deliverables including user guides, configuration documents, tutorial videos, release notes, and client-specific documentation, supporting multiple enterprise clients.
- Own API documentation and validation workflows using OpenAPI/Swagger and Postman, collaborating with development and QA teams to ensure accuracy, reduce integration issues, and support ongoing feature releases.
- Partner cross-functionally with project managers, developers, support teams, and clients to clarify complex workflows, streamline knowledge base content, and improve documentation usability and consistency.
Trainee Software Engineer - hSenid Mobile Solutions
- Did bug fixes and added new features for the Applova Admin web, Merchant web, API services and Android based mobile/kiosk applications.
- Wrote several Bash scripts and Ansible playbooks to automate module builds, checking build status as well as backing up/restoring databases.
Associate Software Engineer - Sustainable Education Foundation
- Fixed issues and added new features to the SEF site.
- Was responsible for creating the SEF handbook, taking part in creating wireframes for ScholarX version 2 and writing/proof-reading content for the SEF site/SEF related activities.
- Hosted a Google Summer of Code awareness session and lead multiple interviews with Mentors of the 'Scholarx' Program to gather feedback.
Case studies
Sanitized enterprise documentation samples, published under the placeholder product name "Venuix."
Venuix - event & venue management platform
What it is: A selection of user guides I wrote in my current role as Junior Technical Writer at Programus Ltd., documenting workflows and features for an enterprise event and venue management platform used by multiple enterprise clients. Venuix is a fictional name used in place of the actual product name for confidentiality purposes. These guides cover three distinct workflows. These are simplified event setup, seating chart management, and booking status configuration and it represent the type of end-to-end documentation I produce daily in a professional enterprise environment.
What it shows: Ability to document complex, multi-step administrative workflows accurately and consistently for a non-technical audience, covering varied feature complexity across a single platform, from high-level setup processes to granular configuration and conditional logic.
Read full guide - Simplified Event Setup (Quick Flow)
To set up an Event using the Simplified Event Setup Process in Venuix,
- Visit the Venuix Portal and sign in using the username and password provided to you.
- Go to the Setup Module by clicking on the Setup button.
- You may then select the Events and Products option from the left side panel.
- A list of modules will be displayed from where you may select the Events option.
- Select the Add New Event button, which will direct you to a new page.
- Under the General tab you may make the following changes:
- Provide a name for the event under the Name field (note that any fields denoted with an asterisk are mandatory, therefore should be treated as such).
- To add an image to the event, select the Upload new image here! button. A pop-up window will open where you may drag and drop or select an image from the computer.
- You may then either select Public or Private from the Event Type drop-down.
- Public events are scheduled in advance before opening to the public for bookings such as sports events, classes and courses.
- Private events on the other hand are customer driven events such as weddings and product launches, which may not be open to the general public.
- You may assign a primary venue to the event from the Primary Venue drop-down. When a booking is placed on the event, the selected venue will be booked by default.
- You may select a preferred option from the Event Category drop-down. This selection will categorize the event based on the activities that will take place (i.e., the event could be an exhibition, a children and family focused event or a community and causes focused event).
- The manager responsible for handling event specific tasks should be selected through the Event Manager drop-down.
- Any campaign monitor codes can be entered under the Event Campaign Code field. This process will link the respective campaign to the event.
- If you prefer to further categorize the event, you may do so by selecting an option from the Event Group drop-down.
- Enter any additional details regarding the event under the Description field. Please note that the description should be no less than 20 words.
- You may enter a Short Description if you wish, under the respective field. This description will be reflected on the Partner Platform as well.
- If there are any keywords related to the event, you may enter them under the Keyword field. In the process of searching for events, these keywords will help further narrow down the search results.
- Under the Event Email and Templates section you may make the following changes:
- Enter an email under the Event Email field, which ideally should be an event dedicated email address.
- If you wish, you may enter a preferred name under the Send As field. Once configured, the Send As field will be automatically populated when sending any event related emails.
- You may select the appropriate templates from the respective Email Template drop-downs. Each template will be situation specific as follows and can be used to send out custom emails to the client:
- Email Template - Booking Confirmation - Will be used to send a confirmation email to the customer once a booking is confirmed.
- Email Template - Enquiry Confirmation - Will be used to send a confirmation email to the customer once a booking enquiry is confirmed.
- Email Template - Waitlist Confirmation - Will be used to send a confirmation email to the customer once a waitlist slot is confirmed.
- Email Template - Waitlist Availability Confirmation - Will be used to send a confirmation email to the customer once the availability of a waitlist slot is confirmed.
- A facility is a space in a venue where some activity takes place, such as restaurants, meeting rooms, etc.
Adding a facility to the event
- Navigate to the Facilities section.
- Click on the Add button, which will open a new pop-up window.
- A list of facilities will be displayed.
- By default, the Primary Venue Only toggle button will be selected. If you wish, you may un-toggle this to display all the facilities.
- Select the preferred facilities and click Save to finalize and close the window.
- Click Save again to create the event and refresh the page.
Note: This step is mandatory before adding an Event Period.
- To specify the duration details of the event (how long it will last and on what dates):
Setting the Event Period
- Navigate to the Event Period section.
- Click the Add button, which will open a new pop-up window.
- You may set the date on which the event is held by selecting a date from the Date drop-down.
- You may also set the start and end times of the event from the Start Time and End Time drop-downs.
- If there are any conflicting timeslots (i.e., any overlapping events), a red flag will appear under the Capacity field. In such instances, please re-select a different date/time that will not overlap with any existing events until the red flag no longer appears.
- Under the Asset Type section, select the Facility radio button and the preferred Facility from the respective drop-down.
- You may set a preferred configuration under the Configuration field. This determines how a facility is set up for an event and what capacity can be accommodated.
- Enter the maximum capacity of the event under the Capacity field. This defines the maximum number of covers that can be accommodated by the facility.
- You may then enter the Session Code (a unique identifier for a specific timeslot).
- Enter any additional information regarding the timeslot under the Description field.
- Click Add to save and close the window, then Save again to save the new changes and refresh the page.
Note: This step is mandatory before adding a Package to the event.
- To add packages to the event:
Adding a package
- Navigate to the Packages section and click Add to open a new pop-up window.
- You may initially fill out the details regarding the full added package. The Name field will already be populated. You may change it, if you wish.
- Select a preferred Business Area and set a Price for the package, then select the Single Day radio button.
- If you'd like a waiting list, tick Enable Waitlisting, and enter a preferred Capacity plus a processing rule from the Waitlist Processing Rule drop-down.
- Select preferred options from the Package Class, Payment Term, Cancellation Policy and Sales Category drop-downs.
- You may also select an option from the Attendee Capture Profile drop-down and the relevant questionnaire from Attendee Questionnaire.
- From Sales Channel, select Corporate and/or Internet to show the channel to assisted staff flows and the portal respectively.
- Select the preferred method of delivery from Delivery Method.
- To request documents from attendees, select the preferred documents from Document Restrictions.
- To create additional packages, you may navigate to the Linked Packages section and click Add Package Type button. A new entry will be created on the linked packages table. You may select a Package Type and enter a preferred Gross Price for the linked package.
- Click Add to save and close the window, then Save to finalize setting up the event.
- Click Save to create the event (refer to Event Setup - Single Day for additional changes to the event).
Read full guide - Seating Chart in Maintenance Mode
Login to the Venuix portal using the username and password provided to you. There are two ways in which the seating chart page can be accessed,
a. Booking Module:
- Locate the relevant booking from the list (use Find Existing Booking) and Select to access the booking details.
- Navigate to the Booking Details section and select the Add button.
- A new drop-down menu will open, from where you may select the Package button.
- A new pop-up window will list down all existing packages.
- You may locate the preferred package (use Add New Package to Existing Booking) from the list, and click the corresponding Select Seats button.
- Alternatively you may edit the seating allocation for an existing package. To do so, expand the preferred package section, and click the Seat Allocation button. A new pop-up window will open, from where you may select the Edit Seats in the Venue Map button.
b. Diary Module:
- Locate the relevant booking from the diary (use Using the search panel with filters) and click on the timeslot.
- A new drop-down will open. Select the Maintenance Mode option.
Once the seating chart has been accessed, you may use the following steps to navigate through the page:
- First switch to the maintenance mode by selecting the respective toggle button from the upper right corner.
- By default, the different seating categories will be grouped by price band. You may also group the seating categories by further criteria such as booking list and block.
- You may use the arrow keys located in the middle to expand either the seating details section or the seating chart section to full width.
- The seating details section is comprised of multiple tabs and can be used to display all or specific seating arrangements such as general admission, seats, tables, boxes and accommodations.
- The search field may be used to filter specific bookings. To do this, select the search bar, enter the specific search criteria such as booking reference number, client name, contact name, package name, or notes and click the search button.
- If you wish to filter the columns in the seating details section (i.e., omit certain columns and/or add new columns), first click the Select Fields button (note that this button is only visible if the Group By option is set to Booking List).
- A new drop-down menu will display the list of columns. Check or un-check the preferred fields from the list and click Save. To reset the columns to their default state, click the Reset button located at the bottom of the drop-down menu.
- The list of bookings can also be filtered by criteria such as price band, client category, client type, allocation status, frozen status, notes and any special requests. To do this, click the Filters drop-down menu, select the preferred criteria, and click Apply. Selecting certain criteria such as price band or client category will trigger a secondary drop-down menu to appear, allowing you to further narrow down the results.
- The zoom buttons on the seating chart may be used to zoom in or out. Alternatively you may also use the mouse's scroll wheel to adjust the zoom level.
- To refresh the view, click the refresh button located next to the zoom controls.
- The Viewers section displays if any users are currently viewing the seating chart. The value highlighted in yellow displays the number of internal users, whereas the value highlighted in green displays the external users. Hovering on either option will list down the users that are currently logged in.
- Hovering over a seat will display details such as category, row, seat number and block, as well as any additional notes.
- If you wish to reserve seats for a future booking, select the preferred seats from the seating chart and click the Reserve Seats option located at the top right of the seating chart view.
- A new pop-up window will open. Enter any information related to the reservation under the designated note field and click Submit.
- A confirmation message will be displayed if the reservation process was successful. If you wish to un-reserve any seats, select any reserved seats and click the Un-reserve Seats button. Click Yes on the pop-up message that follows to confirm.
- You may un-allocate any previously allocated seats if you wish. To do so, select the preferred seats and click the Un-allocate button located at the top of the seating chart view. Select Un-allocate again in the pop-up message that follows.
- If you wish to un-allocate all seats in a booking, tick the booking reference from the seating details section and click the Un-allocate button. Select Un-allocate again in the pop-up message that follows.
- To reallocate any unassigned seats, simply drag and drop the preferred booking reference number onto the venue map. Alternatively you may tick the preferred booking reference and click the Allocate button.
Note: Using the Allocate button will automatically assign the seats starting from the top left-most available section.
- If you wish to keep certain seats allocated while performing other actions, you may use the freeze option. This prevents the selected seats from being un-allocated. To freeze seats, first select the allocated seats that you wish to keep, then click the freeze button.
- In the following pop-up window, enter any information related to the freezing under the designated note field and click Submit.
- If you wish to block certain seats from being selected during the booking process, you may mark them as unavailable. To do this, select the preferred seats, and click the Mark as Unavailable button.
- In the following pop-up window, enter any information related to the unavailability under the designated note field and click Submit.
- The audit trail feature keeps track of all actions performed under the respective venue. To access this, click the audit trail button located next to the maintenance mode toggle button.
- A new pop-up window will open. You may expand the number of items per page by scrolling to the bottom of the list and setting a preferred value from the Items per page drop-down. You may also use the arrow keys located at the bottom to navigate through the list.
- You may also filter the audit list by criteria such as price band, seat status, block and bookings. To do this, click the Filters drop-down and select the preferred criteria. A secondary drop-down will open, from where you may select the respective sub-option(s). Click Apply to filter the results.
Read full guide - Managing Booking Statuses
- Login to the Venuix portal using the username and password provided to you.
- Select the Setup module, which will direct you to a new page.
- Select the Bookings option from the left side panel. From the list of options displayed, select the Booking Statuses option.
- All booking statuses will be listed in tabular format. To search for a specific booking status, click on the search bar, enter the preferred status name and click the search button.
- You may sort the list by name by clicking on the sort button located next to the Booking Status Name header.
- Existing statuses may be edited or deleted. To access this functionality, click the ellipsis icon corresponding to the preferred status and from the drop-down menu select the preferred option:
- If the Edit button was selected, you will be directed to a new page, where you may make the necessary changes. Click Save to confirm the changes.
- If the Delete button was selected, a new pop-up window will be displayed. Click the Yes, delete it! button to confirm the deletion.
- If you wish to add a new booking status, click the Add New Booking Status button.
- Doing so will direct you to a new page. From the General tab, you may make the following changes:
- Select a preferred option from the Parent Booking Status drop-down. This will categorize the status under a higher-level booking status establishing the status hierarchy, which in turn can be used to determine the progression path.
- Provide a name for the status under the Booking Status field.
- Enabling the Reserve Stock checkbox indicates whether stock/resources will be reserved while the booking remains in the current status.
- If certain user rights are required to edit the booking while under this status, check the Require User Rights to Edit the Booking checkbox (if the currently logged in user does not have the appropriate rights, the user will only be able to open the booking in read-only mode).
- The Booking Client Restriction checkbox, when enabled, ensures that the system checks if a client is linked to the booking. If no client is selected, the booking will not be able to transition to the relevant status.
- If you wish to hide the booking from the public portal while under this status, check the Hide Booking from Portal checkbox. This feature is useful for internal-only statuses.
- Any additional details regarding the status can be entered under the Description field.
- Select the preferred Business Area(s) from the respective drop-down. If you wish to have the status for all business areas, simply click the Select All button (please note that any new business areas introduced in the future will not be automatically selected from the list, therefore should be added later on).
- Use the CalenderColor field to set a preferred color for the status. Any facility that is under this respective status will be displayed in this color.
- Save the changes by clicking the Save button. The booking status will be created.
- Under the Approval tab, you may make the following changes:
- If approval is required to change a booking to this status, tick the Requires Approval checkbox. Doing so will enable the Approved/Rejected Booking Status section.
- You may select preferred statuses from the Approved Booking Status drop-down and Rejected Booking Status drop-down respectively. Once a booking is approved or rejected, it will automatically progress to the selected status.
- To add advance approval conditions, expand the Advance Approval Conditions section, and click the Add Advance Approval Condition button.
Advance approval condition options
First provide a name for the requirement under the Requirement Name field.
The radio buttons can be used to determine how multiple conditions are evaluated:
- AND: All specified conditions must be met to trigger the approval process.
- OR: Meeting any one of the specified conditions is sufficient to trigger the approval process.
Expanding each section will present multiple conditions. Based on your preference you may tick the corresponding checkbox. If the Business Parameters section is expanded, the following conditions will be displayed:
- Sales person Belong to a specified user group(s) - triggers the approval condition if the sales person assigned to the booking belongs to one or more specified user groups. Use the Select user group(s) drop-down to select one or more user groups.
- Customer belongs to a specified client category(s) - triggers the approval condition if the client/customer associated with the booking belongs to one or more defined client categories. Use the Select client category(s) drop-down to select one or more client categories.
- Sales channel is any of specified - triggers the approval based on the sales channel through which the booking was created (i.e., online, walk-in, call center). Select the preferred sales channel(s) from the Select sales channel(s) drop-down.
- A package in the booking is of specified business area(s) - triggers the condition if the booking contains a package linked to any of the selected business areas. Use the Select business area(s) to select the preferred business area(s).
- An item in the booking is of specified item category(s) - triggers approval if any item in the booking falls under one or more specified item categories. Select preferred item category(s) from the Select Item Category(s) drop-down.
- Booking Value - used to compare the total monetary value of the booking against a specified range. Use the From and To fields to set the range.
- Discount Percentage - used to confirm if the discount applied to the booking falls within a specific percentage range. Use the From and To fields to set the range.
If the Exceptional Parameters section is expanded:
- A discount has been applied - triggers the approval if any discount is applied to the booking. Both manual and automatic discounts are valid.
- Standard package price has been changed - triggers the approval when a package's standard price is overridden or manually adjusted.
If the Approver Sequence section is expanded:
- The radio buttons may be used to specify how the approval process can be triggered:
- Any - any of the appointed users or user groups can approve the booking.
- All in parallel - all appointed users or user groups are required to approve the booking in parallel.
- All in sequence - all appointed users or user groups are required to approve the booking in sequence (i.e., once the first user or user group grants approval, the approval of the next user or user group in sequence is required for the booking to be approved).
- Use the Select user and Select user group drop-downs to select the preferred parties of approval. If both a user and a user group are selected, approval from either party will be considered valid.
If the Settings section is expanded:
- Use the Rejected Booking Status drop-down to specify the status that should automatically be assigned to a booking if it is rejected during the approval process.
- You may tick the Do not show booking conflicts in the Approval Confirmation popup checkbox if you wish to hide conflict warnings in the approval confirmation screen. Note that this will not apply when the booking is being approved into stock-allocated status.
Once the necessary changes have been made, click the Add button to confirm the changes. You may add as many approval conditions as needed. Click Save to save the approval settings.
- If the selected Parent Booking Status is either Provisional or Quotation, a new Expiry tab will be available to you. Under this tab you may make the following changes:
- To make the booking automatically expire after a certain number of days (i.e., if set to 3 days, the booking will automatically expire 3 days after being placed in this status), tick the Booking Expires in x Days checkbox, and use the - and + buttons to set a preferred number of days.
- If you wish to tie the status expiry to event dates, tick the Booking Expires After checkbox. Two new radio buttons will be presented to you:
- Event Start Date - specifies whether the status should automatically expire once the event has started.
- Event End Date - specifies whether the status should automatically expire once the event has ended.
- You may select a preferred status from the Expiry Booking Status drop-down (i.e., the booking will be moved to the selected status once it expires).
Note: This field is mandatory.
- Click Save to save the changes.
SEF Volunteer Handbook - Organizational Overview
What it is: An introduction to the Sustainable Education Foundation written for the handbook I created during my time as Associate Software Engineer at SEF (2022-2023). This section sets the tone for the entire handbook and speaks to prospective volunteers across all backgrounds.
What it shows: Ability to write welcoming, accessible organizational content that balances professionalism with warmth.
SEF Volunteer Handbook - Engineering Team Onboarding (Part 1)
What it is: The opening section of the Engineering Team chapter from the same handbook, covering who the team is and what they do.
What it shows: Ability to write onboarding content for a technical audience without losing the human element.
SEF Volunteer Handbook - Engineering Team Onboarding (Part 2)
What it is: The continuation of the Engineering Team chapter, covering prerequisites for joining such as setting up GitHub, Slack, and Hive accounts, and introducing yourself to the community.
What it shows: Structured, step-by-step instructional writing broken into clear, digestible sections.
SEF Website - Public Facing Copy
What it is: Web copy I wrote for the main SEF website, introducing the organization to three distinct audiences. This includes students, industry experts, and volunteers, where each is addressed in their own paragraph.
What it shows: Audience segmentation, concise web copywriting, and the ability to adapt tone for different readers within a single piece.
Writing
Working with Operators in Python
A beginner-friendly technical explainer on Python operators, selected by Medium editors for the featured tech article list.
📖 2.5K views · 1.4K reads
Read on Medium ↗Interning as a Software Engineer at hSenid Mobile — Part I
A firsthand account of my software engineering internship, covering onboarding, tools, and early experiences in a professional dev environment.
📖 554 views · 77 reads
Read on Medium ↗Interning as a Software Engineer at hSenid Mobile — Part II
Continued reflections on the internship including deeper technical work and lessons learned.
📖 545 views · 70 reads
Read on Medium ↗Bright Horizons - Procedurally Generated Serious Game to Promote Learning in Individuals Affected by Trisomy-21
What it is: Excerpts from my final year undergraduate thesis, "Procedurally Generated Serious Game to Promote Learning in Individuals Affected by Trisomy-21", submitted for my BEng (Hons) in Software Engineering at the University of Westminster (2024).
What it shows: Long-form academic and technical writing, from contextualising a research problem clearly for a broad audience, to explaining complex system implementation in structured, precise language.
Read excerpt - Abstract
The special education domain caters to a multitude of individuals with varying mental and physical challenges. Individuals affected by Trisomy 21 fall under the same umbrella as individuals requiring special education. This genetic disorder is commonly referred to as Down syndrome (DS), which is a result of an extra chromosome in an individual's DNA and can cause developmental and cognitive challenges all throughout their lives. The conventional methods of educating children in third world countries, with the inclusion of Sri Lanka, shows signs of disparity towards individuals with special needs. Children affected by Trisomy 21 fall victim to the lack of tailored educational approaches.
Respective medical data shows that higher Gamma Aminobutyric Acid (GABA) levels in the brain of an individual affected by Trisomy 21 reduces neuroplasticity, which also reduces the effectiveness of learning resources provided to them. Medical data also indicate that certain game genres increase the levels of dopamine in the brains of these individuals which result in lower GABA levels for a brief period of time. Furthermore, it has been identified that individuals affected by Trisomy 21 are strong visual learners, hence the proposed solution by the author comes in the form of a serious game, which not only caters to the visual learning preferences of these individuals but also aims to reduce the GABA levels in the brain to effectively provide learning resources.
The serious game 'Bright Horizons,' uses a procedurally generated approach to level design, resulting in a unique experience for the individual each playthrough, to ensure the highest possibility of engagement. Furthermore, a regression model is used to calculate the ideal activity engagement time based on acquired medical data containing gene expression change values. Learning resources such as numbers, letters and colors are distributed throughout the gameplay loop so that individuals in consideration can actively learn while being engaged in gameplay.
Read excerpt - Problem Background (Section 1.2)
The primary objective of this project is to lay the educational foundation for children affected by Trisomy 21. This unique population faces significant challenges all throughout their educational journeys and day-to-day life. In third world countries, most of these children fail to even receive their basic education let alone consider career opportunities. This genetic disorder causes distress to both children and their respective caretakers, and addressing this issue is paramount.
It has been proven that children affected by this condition respond well to game-based learning since they are strong visual learners, as opposed to conventional learning methods. Current educational practices, especially in Sri Lanka, fail to deliver these tailored educational approaches. Serious games are met quite often in the military, government, and healthcare with extensive use in education and learning, since they are proven to be engaging and appealing to people of all social classes. Even though technologies like virtual reality (VR) are on the rise as means of education, there are limited real-life use case scenarios of serious games in the special education domain.
Users are encouraged to make mistakes while they play serious games, as the key objectives are learning, knowledge retention, understanding of new concepts, problem-solving and real-time data analysis. The significance of this research lies in its potential to improve the quality of education and the overall quality of life for individuals with Trisomy 21.
Read excerpt - System Implementation (Section 7.3)
The proposed solution in this project is comprised of two major components: the game itself and the machine learning model. The serious game, built using the Unity3D engine, uses C# for creating logical scripts. These scripts govern the various functionalities of the game - from the main menu and gameplay loop through to the end screen.
Key scripts and their functions are as follows:
- Start_Menu Script - Executed on launch; loads the main menu of the game.
- Camera_Controller Script - Ensures the camera object follows the player character as it moves.
- Player_Movement Script - Controls player movement states: idle, running, jumping, and falling. Each state is assigned an animation and a sound. The player character can only occupy one state at a time, and the sprite flips based on movement direction. Jumping is only permitted when the player is in a grounded state.
- Player_Life Script - Oversees the player life and death cycle. Upon colliding with an enemy or trap, the player loses a life and respawns at the start of the level.
- Item_Collector Script - Allows the player to collect numbers, letters, or colors scattered throughout the game world. Each collectible is assigned a collider object that detects the player's rigid body. Upon collision, the game object is destroyed and the score is incremented.
- Sticky_Platform Script - Ensures that once the player character lands on a moving platform, they remain attached as it moves. This is achieved by setting the player object as a child of the platform upon collision.
- Waypoint_Follower Script - Manages platform movement between two waypoint objects placed in the game world, creating back-and-forth motion.
- Pause_Menu Script - Switches the game's time scale between 1 (running) and 0 (paused).
- End_Menu Script - Displayed upon game completion; allows the player to return to the main menu or quit.
- Options_Menu Script - Manages user preferences including resolution, graphical presets, volume, difficulty, and learning resource preferences. Changes take immediate effect and are saved locally for future sessions.
- Level_Manager Script - Determines the number of levels to generate based on the selected difficulty level, and handles level display and completion messaging.
- Procedural_Generation Script - The most complex script in the project, responsible for generating the game world based on difficulty level. This includes creating hills and platforms with varying heights and widths, placing them randomly across the terrain, setting start and end borders, positioning the finish line in a safe zone clear of terrain elements, and distributing collectible items throughout the level.
The regression model was constructed to determine ideal activity engagement times. Medical data was sourced from four Excel sheets containing gene expression changes, which first required a processing stage to remove inconsistent columns and combine the files into a single dataset of over ten thousand entries. This dataset was loaded using the pandas library and underwent a second processing stage - replacing empty Gene ID cells with 'unknown' and converting Direction values to binary representations of 'up' and 'down'. A new column, 'Activity Engagement Time', was created by assigning randomised values between 60 and 120 seconds. The data was then split into features and targets, divided into training and testing sets, and used to train a linear regression model. The trained model predicts ideal activity engagement times and saves the output for use by the game engine.
Toolchain
Get in touch
Open to technical writer, documentation engineer, content developer, information developer, and developer advocate roles, on-site, hybrid, or remote, across Berlin, Amsterdam, Dublin, the London area, and Stockholm County. Available immediately, full-time or contract.