Yeah, logic is kinda done, now I only need to write actual actions (which, as I said, will only be compiled at runtime

) to do stuff. And an AI (see below) :x
It's kind of a interpersonal relationship simulator, but a quite crappy one ATM. Basically, you decide an action and can decide whom else you want to participate. The action then checks whether the person you "invited" actually wants to do that stuff (every action has a repulsion level (fun stuff less, tiresome stuff more, icky stuff most), and other factors (relationship, needs) influence that), and if they do, you complete the action together and the relationships are updated accordingly. However, any person you haven't included in your action will do exactly nothing :x
Which is why I want to write an AI to have them do actions on their own, basing on what they want and need. But first I need to get some actions :x
Also, most of the above example is taken from this
huge method (which is entirely uncommented, yay

) :x
Who said something about a black box? XD
[code=Largest method I've ever written (voluntarily)]public static boolean createSelfAction(Person p, ActionType a) {
if (p.todayAct[g.time.time] != null) {
Action old = p.todayAct[g.time.time];
old.group.getOverseer().todayAct[g.time.time] = null;
Person[] oldParts = old.group.getTemp();
for (int i = 0; i 1) {
arg = Integer.parseInt(temp[1]);
} else {
arg = 1;
}
if (a.validLength(arg)) {
result.length = arg;
IO.w(IO.g("action.create.self.completed", a.toString()));
return schedule().add(result);
} else {
IO.w(IO.g("action.create.self.invalidLength", arg + ""));
break evaluation;
}
} else {
IO.w(IO.g("action.create.self.uncompleted"));
break evaluation;
}
}
select = temp[0];
arg = Integer.parseInt(temp[1]);
if (eval(select) == 101) {
toAdd = g.player;
} else {
if (eval(select) == 103) {
toAdd = g.player.acquaintance.active;
} else {
toAdd = acqSearch(select);
}
}
if (toAdd != null) {
switch (arg) {
case 0:
success = result.group.addMale(toAdd);
break;
case 1:
success = result.group.addFemale(toAdd);
break;
case 2:
success = result.group.addNeuter(toAdd);
break;
default:
success = false;
break;
}
if (success) {
IO.w(IO.g("action.create.self.part.success", toAdd.name));
} else {
IO.w(IO.g("action.create.self.part.failure", toAdd.name));
}
}
} catch (NumberFormatException e) {
IO.w(IO.g("error.input.noNumber", temp[0]));
} catch (ArrayIndexOutOfBoundsException e) {
IO.w(IO.g("error.input.paramMissing"));
}
}
}
}[/code]