3 of 7 added 137 characters in body

C (gcc), 131 116 90 bytes


Try it online!

Update: Fixed a bug in the original. Fused in the helper function, reducing an additional 15 bytes.

Update 2: -25 bytes thanks to ErikF.


L(l,a,v,A){ // l: time, a: random value, v: remaining volume, A: level
        v-=a=  // Assign random value and deduct it from remainder
              l>59|A<3&l>44?rand()%-~v // If layer could have something, randomize it. -~v == (v+1)
              :0 // Else, value is 0.
          :v,  // If last level, value is remaining volume
        printf("%d\n"+!a*2,a); // Print value; if a==0, advance pointer to the string constant by 2.