From c21ab741f7dd43bf7546deccf258b3f5a053b634 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 15 Feb 2024 07:07:28 +0000 Subject: [PATCH] randompercentage, randomelement (#4189) 'randompercentage X' sets VAR_RESULT to TRUE X% of the time, or FALSE 100-X% of the time. 'randomelement X, Y, ...' sets VAR_RESULT to one of X, Y, ... with equal probability. --- asm/macros/event.inc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 5715d91ea3..b93798f457 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2133,3 +2133,34 @@ callnative ToggleGigantamaxFactor .2byte \slot .endm + + @ Sets VAR_RESULT to one of the arguments (via setorcopyvar). + .macro randomelement element:req, elements:vararg + .set _randomelement_n, 0 + .irp el, \element, \elements + .set _randomelement_n, _randomelement_n + 1 + .endr + random _randomelement_n + + .set _randomelement_n, 0 + .irp el, \element, \elements + goto_if_ne VAR_RESULT, _randomelement_n, 1f + setorcopyvar VAR_RESULT, \el + goto 2f + 1: + .set _randomelement_n, _randomelement_n + 1 + .endr + 2: + .endm + + @ Sets VAR_RESULT to TRUE with probability 'percent', and FALSE + @ with probability '100% - percent'. + .macro randompercentage percent:req + random 100 + goto_if_lt VAR_RESULT, \percent, 1f + setvar VAR_RESULT, FALSE + goto 2f + 1: + setvar VAR_RESULT, TRUE + 2: + .endm